亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 6475 | 回復(fù): 10
打印 上一主題 下一主題

[內(nèi)核入門] biefield與endian 2 [復(fù)制鏈接]

論壇徽章:
13
程序設(shè)計版塊每日發(fā)帖之星
日期:2016-06-29 06:20:00每日論壇發(fā)貼之星
日期:2016-08-14 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-08-14 06:20:00每日論壇發(fā)貼之星
日期:2016-08-13 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00每日論壇發(fā)貼之星
日期:2016-08-12 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2016-08-09 06:20:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2016-07-06 17:17 |只看該作者 |倒序?yàn)g覽
本帖最后由 karma303 于 2016-07-06 17:19 編輯

  本來想更新到這篇舊帖子里的,但覺得這部分有點(diǎn)兒“地理大發(fā)現(xiàn)”的感覺,就專門貼出來,跟各位交流。
  我說的“地理大發(fā)現(xiàn)”,是說wiki上的ip header的布局圖,它們用0,1,2,3,4,5,6,7細(xì)分出每個字節(jié)的bit,但wiki上的0,1,2,3,4,5,6,7,分別對應(yīng)常規(guī)思維的7,6,5,4,3,2,1,0。


   到這里我才發(fā)現(xiàn),原來wiki上給出的布局圖,是徹徹底底的按照“大端思維“來走的。
   其實(shí)wiki就從RFC里摘的圖,1981年的文檔,那時的程序員為什么會反著看bit?(是沒經(jīng)過x86的洗禮嗎?)
   
   題外話:
   在上一篇帖子里,我貼了一點(diǎn)關(guān)于bitfield跨字節(jié)的測試。
   其實(shí)今天意識到這個問題,也是從ip header里的offset成員開始的,我發(fā)現(xiàn)沒辦法用bitfield來表示這個成員。


  如果編譯目標(biāo)是小端機(jī)器,gcc是沒有辦法用bitfield來表示offset這個成員的。
  所以linux內(nèi)核里,很粗暴的定義成:
  __be16        frag_off;
  __be16就是unsigned short。
  然后在代碼里再分解它:
        offset = ntohs(ip_hdr(skb)->frag_off);
        flags = offset & ~IP_OFFSET;
        offset &= IP_OFFSET;
        offset <<= 3;                /* offset is in 8-byte chunks */

評分

參與人數(shù) 1可用積分 +6 收起 理由
Godbach + 6 贊一個!

查看全部評分

論壇徽章:
36
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
2 [報告]
發(fā)表于 2016-07-06 19:43 |只看該作者
回復(fù) 1# karma303

佩服 LZ 深度鉆研的精神!

   

論壇徽章:
36
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
3 [報告]
發(fā)表于 2016-07-06 19:48 |只看該作者
回復(fù) 1# karma303
最后一個圖,太能說明問題了。


   

論壇徽章:
9
程序設(shè)計版塊每日發(fā)帖之星
日期:2016-02-13 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-06-15 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-06-16 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-06-18 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-06-27 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-09 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-07-15 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-07-27 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-08-18 06:20:00
4 [報告]
發(fā)表于 2016-07-07 15:32 |只看該作者
karma303 發(fā)表于 2016-07-06 17:17
本來想更新到這篇舊帖子里的,但覺得這部分有點(diǎn)兒“地理大發(fā)現(xiàn)”的感覺,就專門貼出來,跟各位交流。
   ...


在部分平臺或許可以,linux要用在各種CPU平臺上,所以這樣了

論壇徽章:
20
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-18 06:20:00每日論壇發(fā)貼之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16賽季CBA聯(lián)賽之江蘇
日期:2017-06-26 11:05:5615-16賽季CBA聯(lián)賽之上海
日期:2017-07-21 18:12:5015-16賽季CBA聯(lián)賽之青島
日期:2017-09-04 17:32:0515-16賽季CBA聯(lián)賽之吉林
日期:2018-03-26 10:02:16程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-08-17 12:21:08
5 [報告]
發(fā)表于 2016-07-07 17:03 |只看該作者
本帖最后由 nswcfd 于 2016-07-07 17:04 編輯

精彩的分析!

對于線上的bit,估計是先到的算0號吧?

論壇徽章:
13
程序設(shè)計版塊每日發(fā)帖之星
日期:2016-06-29 06:20:00每日論壇發(fā)貼之星
日期:2016-08-14 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-08-14 06:20:00每日論壇發(fā)貼之星
日期:2016-08-13 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00每日論壇發(fā)貼之星
日期:2016-08-12 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2016-08-09 06:20:00
6 [報告]
發(fā)表于 2016-07-07 17:44 |只看該作者
回復(fù) 5# nswcfd



   網(wǎng)線按什么樣的bit序傳遞數(shù)據(jù),似乎影響不到軟件編程。連寫網(wǎng)卡驅(qū)動時都不需要關(guān)心它。
   我在osdev上問過相關(guān)的問題,但得到的回答有不痛不癢,可能是我英文水平有限吧。
   forum.osdev.org/viewtopic.php?f=1&t=30485

論壇徽章:
20
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-18 06:20:00每日論壇發(fā)貼之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16賽季CBA聯(lián)賽之江蘇
日期:2017-06-26 11:05:5615-16賽季CBA聯(lián)賽之上海
日期:2017-07-21 18:12:5015-16賽季CBA聯(lián)賽之青島
日期:2017-09-04 17:32:0515-16賽季CBA聯(lián)賽之吉林
日期:2018-03-26 10:02:16程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-08-17 12:21:08
7 [報告]
發(fā)表于 2016-07-07 18:34 |只看該作者
本帖最后由 nswcfd 于 2016-07-07 18:39 編輯

嗯,forum.osdev.org/viewtopic.php?f=1&t=30485,很有意思的討論。

https://en.wikipedia.org/wiki/Bit_numbering
里面有一句話
The recommended style for Request for Comments documents is "MSB 0" bit numbering.[3][4]


[3]  Scott, Gregor (June 1998 ). "RFC 2360 - Guide for Internet Standards Writers". Internet Engineering Task Force (IETF). p. 11. Retrieved 2010-02-14. The preferred form for packet diagrams is a sequence of long words in network byte order, with each word horizontal on the page and bit numbering at the top
[4]  "RFC 1166 - INTERNET NUMBERS". Internet Engineering Task Force (IETF). July 1990. p. 1. Retrieved 2014-06-11. Whenever an octet represents a numeric quantity the left most bit in the diagram is the high order or most significant bit


論壇徽章:
20
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-18 06:20:00每日論壇發(fā)貼之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16賽季CBA聯(lián)賽之江蘇
日期:2017-06-26 11:05:5615-16賽季CBA聯(lián)賽之上海
日期:2017-07-21 18:12:5015-16賽季CBA聯(lián)賽之青島
日期:2017-09-04 17:32:0515-16賽季CBA聯(lián)賽之吉林
日期:2018-03-26 10:02:16程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-08-17 12:21:08
8 [報告]
發(fā)表于 2016-07-07 19:10 |只看該作者
本帖最后由 nswcfd 于 2016-07-07 19:31 編輯

struct BYTE {
  char bit:1;
};

bitfield是C語言的概念,所以C編譯器需要關(guān)心,BYTE.bit到底使用MSB還是使用LSB。
*選擇LSB,BYTE.bit =1 對應(yīng) or 0x01;
*選擇MSB,BYTE.bit = 1對應(yīng) or 0x80;
*選擇其它bit應(yīng)該也是可以的吧?

我的問題是,雖然x86上的gcc事實(shí)上選擇了LSB(沒說錯吧?),
但是如果假設(shè)它選擇了使用MSB,那有沒有違反C標(biāo)準(zhǔn)的規(guī)定?或者會造成其它語義上的錯誤?

論壇徽章:
13
程序設(shè)計版塊每日發(fā)帖之星
日期:2016-06-29 06:20:00每日論壇發(fā)貼之星
日期:2016-08-14 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-08-14 06:20:00每日論壇發(fā)貼之星
日期:2016-08-13 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00每日論壇發(fā)貼之星
日期:2016-08-12 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2016-08-09 06:20:00
9 [報告]
發(fā)表于 2016-07-07 20:36 |只看該作者
回復(fù) 8# nswcfd

《程序員的自我修養(yǎng)》的附錄A.1講了byte order,不知道你看過沒。
類似這樣的句子,
Big-endian和little-endian的區(qū)別就是big-endian規(guī)定MSM在存儲時放在低地址,在傳輸時MSB放在流的開始;LSB存儲時放在高地址,在傳輸時放在流的末尾。little-endian則相反。
講的很好。

但我?guī)缀醪魂P(guān)心LSB和MSB的概念,它只會讓我困擾。
所以你的問題,都不在我的思維模式里,抱歉我一個答不上來。
   

論壇徽章:
13
程序設(shè)計版塊每日發(fā)帖之星
日期:2016-06-29 06:20:00每日論壇發(fā)貼之星
日期:2016-08-14 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-08-14 06:20:00每日論壇發(fā)貼之星
日期:2016-08-13 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-08-13 06:20:00每日論壇發(fā)貼之星
日期:2016-08-12 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-08-12 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2016-08-09 06:20:00
10 [報告]
發(fā)表于 2016-07-07 20:48 |只看該作者
回復(fù) 4# mordorwww

對,像MIPS上,用bitfield訪問就很自然。
這種東西,只要道理明白了,剩下的都事在人為。像我的內(nèi)核(x86)里,照樣的用bitfield訪問:
struct iphdr{
        u32 len: 4;                                                /* header length */
        int version: 4;
        u8 ignore;
        u16 tot_len;                                        /* total length, header included */
        u16 msgid;                                                /* IP datagram identification */
        union{
                struct{
                        u16 me_offset: 13;                                /* the offset of this IP fragment */
                        int flag_mf: 1;                                        /* more fragments */
                        int flag_df: 1;                                        /* don't fragment */
                        int flag_reserved: 1;
                };
                u16 flag_off;
        };
        u8 ttl;
        u8 protocol;
        u16 chksum;
        u32 myip;
        u32 yourip;
};
每當(dāng)接收到一個ip報文時,我先把flag_off成員字節(jié)翻轉(zhuǎn),然后就可以用bitfield訪問了。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP