漫談程序員(十八)淺談谷歌用戶體驗(yàn)設(shè)計(jì)準(zhǔn)則
612
2025-04-02
2.11?? 小結(jié)
在本書幾乎所有的函數(shù)中我們都會(huì)遇到mbuf。它們的主要用途是在進(jìn)程和網(wǎng)絡(luò)接口之間傳遞用戶數(shù)據(jù)時(shí)存放用戶數(shù)據(jù),但mbuf還用于保存其他各種數(shù)據(jù):源地址和目標(biāo)地址、插口選項(xiàng)等等。
根據(jù)M_PKTHDR和M_EXT標(biāo)志是否被設(shè)置,這里有4種類型的mbuf:
無分組首部,mbuf本身帶有0~108字節(jié)數(shù)據(jù);
有分組首部,mbuf本身帶有0~100字節(jié)數(shù)據(jù);
無分組首部,數(shù)據(jù)在簇(外部緩存)中;
有分組首部,數(shù)據(jù)在簇(外部緩存)中。
我們查看了幾個(gè)mbuf宏和函數(shù)的源代碼,但不是所有的mbuf例程源代碼。圖2-19和圖2-20提供了我們在本書中遇到的所有mbuf例程的函數(shù)原型和說明。
查看了我們要遇到的兩個(gè)函數(shù)的操作:m_devget,很多網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序調(diào)用它來存儲(chǔ)一個(gè)收到的幀;m_pullup,所有輸入例程調(diào)用它把協(xié)議首部連續(xù)放置在一個(gè)mbuf中。
由一個(gè)mbuf指向的簇(外部緩存)能通過m_copy被共享。例如,用于TCP輸出,因?yàn)橐獋鬏數(shù)臄?shù)據(jù)的副本要被發(fā)送端保存,直到數(shù)據(jù)被對(duì)方確認(rèn)。比起進(jìn)行物理復(fù)制來說,通過引用計(jì)數(shù),共享簇提高了性能。
習(xí)題
2.1?? 在圖2-9中定義了M_COPYFLAGS。為什么不復(fù)制標(biāo)志M_EXT?
2.2?? 在2.6節(jié)中,我們列出了m_pullup會(huì)失敗的兩個(gè)原因。實(shí)際上有三個(gè)原因。查看這個(gè)函數(shù)的源代碼(附錄B),并發(fā)現(xiàn)另外一個(gè)原因。
2.3?? 為避免宏dtom遇到我們在2.6節(jié)中所討論的問題,當(dāng)數(shù)據(jù)在簇中時(shí),為什么不僅僅給每個(gè)簇加一個(gè)指向mbuf的回指指針?
2.4?? 既然一個(gè)mbuf簇的大小是2的冪(典型的是1024或2048),簇內(nèi)的空間不能用于引用計(jì)數(shù)。查看Net/3的源代碼(附錄B),并確定這些引用計(jì)數(shù)存儲(chǔ)在什么地方。
2.5?? 在圖2-5中,我們注意到兩個(gè)計(jì)數(shù)器m_drops和m_wait現(xiàn)在沒有實(shí)現(xiàn)。修改mbuf例程增加這些計(jì)數(shù)器。
IP地址 TCP/IP
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。