W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
至今, 我們的討論一直限于字符驅(qū)動(dòng). 但是, 在 Linux 系統(tǒng)中有其他類型的驅(qū)動(dòng), 并且到時(shí)候要開闊我們的視野了. 因此, 本章討論塊驅(qū)動(dòng).
一個(gè)塊驅(qū)動(dòng)提供設(shè)備的存取, 這個(gè)設(shè)備可隨機(jī)地以固定大小的塊傳送數(shù)據(jù)--主要的是, 磁盤驅(qū)動(dòng). Linux 內(nèi)核看待塊設(shè)備根本上不同于字符設(shè)備; 結(jié)果, 塊驅(qū)動(dòng)有明顯不同的接口和它們自己的特殊的挑戰(zhàn).
高效的塊驅(qū)動(dòng)對(duì)于性能是重要的 -- 不只是為在用戶應(yīng)用程序的明確的讀和寫. 現(xiàn)代的有虛擬內(nèi)存的系統(tǒng)將不需要的數(shù)據(jù)移向(希望地)二級(jí)存儲(chǔ)中, 它常常是一個(gè)磁盤驅(qū)動(dòng)器. 塊驅(qū)動(dòng)是核心內(nèi)存和二級(jí)存儲(chǔ)之間的導(dǎo)管; 因此, 它們可組成虛擬內(nèi)存子系統(tǒng)的一部分. 雖然可能編寫一個(gè)塊驅(qū)動(dòng)不必知道 struct page 和其他重要的內(nèi)存概念, 任何需要編寫一個(gè)高性能驅(qū)動(dòng)的人必須使用 15 章所涉及的內(nèi)容.
許多塊層的設(shè)計(jì)圍繞性能. 許多字符設(shè)備可在它們的最大速率以下運(yùn)行, 并且系統(tǒng)的總體性能不被影響. 但是如果它的塊 I/O 子系統(tǒng)沒有調(diào)整好, 系統(tǒng)不能很好地運(yùn)行. Linux 塊驅(qū)動(dòng)接口允許你從一個(gè)塊設(shè)備中獲得最多輸出, 但是有必要, 施加一些你必須處理的復(fù)雜性. 好的是, 2.6 的塊接口比之前的內(nèi)核很大提高.
如你會(huì)期望的, 本章的討論集中在一個(gè)例子驅(qū)動(dòng), 它實(shí)現(xiàn)了一個(gè)面向塊的, 基于內(nèi)存的設(shè)備. 基本上, 它是一個(gè) ramdisk. 內(nèi)核硬件包含了一個(gè)很高級(jí)的 ramdisk 實(shí)現(xiàn), 但是我們的驅(qū)動(dòng)(稱為 sbull)讓我們演示創(chuàng)建一個(gè)塊驅(qū)動(dòng), 同時(shí)最小化無(wú)關(guān)的復(fù)雜性.
在進(jìn)入細(xì)節(jié)之前, 我們精確定義幾個(gè)詞語(yǔ). 一個(gè)塊是一個(gè)固定大小的數(shù)據(jù)塊, 大小由內(nèi)核決定. 塊常常是 4096 字節(jié), 但是這個(gè)值可依賴體系和使用的文件系統(tǒng)而變化. 一個(gè)扇區(qū), 相反, 是一個(gè)小塊, 它的大小常常由底層的硬件決定. 內(nèi)核期望處理實(shí)現(xiàn) 512-字節(jié)扇區(qū)的設(shè)備. 如果你的設(shè)備使用不同的大小, 內(nèi)核調(diào)整并且避免產(chǎn)生硬件無(wú)法處理的 I/O 請(qǐng)求. 但是, 它值得記住, 任何時(shí)候內(nèi)核給你一個(gè)扇區(qū)號(hào), 它是工作在一個(gè) 512-字節(jié)扇區(qū)的世界. 如果你使用不同的硬件扇區(qū)大小, 你必須相應(yīng)地調(diào)整內(nèi)核的扇區(qū)號(hào). 我們?cè)?sbull 驅(qū)動(dòng)中見如何完成這個(gè).
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: