塊裝置驅動1 塊裝置基礎知識

2021-09-25 13:18:56 字數 1247 閱讀 9374

塊裝置與字元裝置:

1.訪問方式的不同:字元裝置按照位元組進行讀取,塊裝置按塊進行讀取;

2.緩衝區:塊裝置本身驅動層支援緩衝區(軟體實現的緩衝區)所以塊裝置驅動最適合儲存裝置(儲存裝置按塊進行讀寫的特點決定),而字元裝置驅動層沒有緩衝;

3.訪問的順序:塊裝置可以實現隨機的訪問,不連續塊的訪問,而字元裝置只能按照順序進行訪問(例如串列埠傳送資料的順序);

3.同乙個裝置可以同時支援塊和字元兩種訪問策略,而裝置本身的物理特性決定了哪一種訪問策略更適合。

1.扇區(sector),概念來自於早期磁碟,在硬碟、***中還有用,扇區是塊裝置本身的特性,大小一般為512b的整數倍;

2.塊(block),概念來自於檔案系統,扇區組成塊,是核心對檔案系統資料處理的基本單位,常見有512b、1kb、4kb等;

3.段(section),概念來自於核心,塊組成段,核心管理記憶體一般是段頁式訪問;

4.頁(page),概念來自於核心,是核心記憶體對映管理的基本單位。

塊裝置驅動向下以扇區為單位管理塊裝置,向上以塊為單位和檔案系統進行互動。而對於塊裝置的訪問一般不直接進行操作,而是借用open、read、write借助檔案系統進行訪問。

塊裝置驅動實現框架:

由於linux系統支援多種的檔案系統,包括y2fs,ext2,ext3等等,不同檔案系統對於檔案的管理就會有這不同的方式,而向下,塊裝置硬體又有著很多的分類,每一種裝置的讀取和訪問方式都不同,所以linux採用分層管理,將對裝置檔案的處理分成很多的層次,每乙個層級完成乙個具體的工作。

1.檔案系統層:

虛擬檔案系統vfs將上層不同的檔案系統進行乙個統一的處理,為驅動層提供統一的介面;

2.核心空間:

(1).通用塊層:乙個純軟體實現的乙個抽象,將底層不同的塊裝置(sd、nand、inang、flash)的差異地方進行乙個統一的封裝成乙個bio結構體,以供檔案系統使用;---核心實現

(2).io排程層:對通用塊層發出的命令先做一次處理,對讀寫內容進行緩衝,對多次的讀寫操作進行排序和合併(電梯演算法實現);  ---核心實現

(3).塊裝置驅動:完成針對每一種裝置進行具體的讀寫操作的函式實現;---驅動開發者實現

3.硬體:根據驅動完成具體的讀寫訪問操作。

塊裝置驅動

若塊裝置驅動程式也按以下字元裝置驅動程式的簡單思想來寫 1.硬碟 磁碟的讀寫其實非常快,慢在機械結構讀寫裝置的定位上面,從乙個 磁頭 的某 柱面 某 扇區 讀到資料後 步驟 r0 跳到另乙個 磁頭 的某 柱面 的某 扇區 去寫 步驟 w 接著再跳回原 磁頭 相同柱面的下乙個 扇區 去讀 步驟r1 慢...

LINUX塊裝置驅動 1

編寫塊裝置驅動的關鍵步驟 1 呼叫register blkdev申請或註冊主裝置號及裝置名稱,詳見核心原始碼中該函式的注釋。不過下面這篇文章裡並未用到這一步 2 呼叫blk init queue函式建立並初始化乙個 request queue 結構,該函式需要乙個用來處理請求的do request函...

裝置驅動 塊裝置驅動程式

塊裝置驅動程式提供對面向塊的裝置的訪問,這種裝置以隨機訪問的方式傳輸資料,並且資料總是具有固定大小的塊。典型的塊裝置是磁碟驅動器,也有其它型別的塊裝置。塊裝置和字元裝置有很大區別。比如塊裝置上可以掛載檔案系統,字元裝置不可以。這是隨機訪問帶來的優勢,因為檔案系統需要能按塊儲存資料,同時更需要能隨機讀...