核心摘要 塊裝置驅動

2022-05-17 09:14:14 字數 1291 閱讀 2044

第十四章 塊裝置驅動

本章講述的是塊裝置的i/o驅動。塊裝置的關鍵點是在cpu和匯流排讀寫資料所使用的時間和硬碟速度上的不同。塊裝置平均訪問時間很高。每個操作需要幾毫秒才能完成,主要因為磁碟控制器必須把磁碟頭從磁碟表面移到記錄資料的確切位置。然而,一旦磁碟頭準確到位了,資料傳輸可以維持在較快的速度。

14.1 塊裝置處理

每個對塊裝置驅動的操作涉及到大量的核心元件;其中最重要的幾個元件展示在圖14-1。

圖 14-1 乙個塊裝置操作影響到的核心元件

vfs                       

disk caches

generic block layer

i/o scheduler layer

block device driver

hard disk

讓我們假設乙個程序向一些磁碟檔案發出乙個read()系統呼叫,下面是核心處理該請求的典型步驟:

1. read()系統呼叫的服務程式啟用乙個合適的vfs函式,傳遞給它檔案描述符和檔案偏移。虛擬檔案系統層是整個塊裝置處理框架的最上層,它提供乙個linux支援的所有檔案系統都採用的通用檔案模型。

2. vfs函式來決定請求的資料是否有效,如果必要的話,還要決定怎樣實現該讀操作。有時不需要訪問磁碟上的資料,因為核心把最近從塊裝置讀的或者寫到塊裝置的內容儲存在ram中,就是磁碟快取(disk caches)機制。

3. 我們假設核心必須從塊裝置(磁碟)中讀取資料,因此它必須決定資料在磁碟上的物理位置,這依靠對映層通過以下兩步來完成:

a.它決定檔案所屬檔案系統的塊大小並且根據檔案塊號(file block numbers)計算請求資料的內容。本質上,檔案可以看成是分成多個塊,核心來決定包含請求資料的塊的號碼(相對於檔案起始塊的號碼)。

b.接下來,對映層呼叫檔案系統相關的函式來訪問檔案的磁碟節點並且根據邏輯塊號(logic block numbers)來決定請求資料在磁碟上的位置。由於乙個檔案可能儲存在非相鄰的磁碟塊上,磁碟節點中儲存著乙個資料結構用來對映檔案塊號到邏輯塊號。

4.核心現在可以處理對塊裝置的讀操作。它利用通用塊層(generic block layer)啟動io操作來傳輸請求資料。通常情況下,每個io操作涉及到磁碟上鄰近的多個塊。因為請求的資料可能在磁碟上不是鄰近的,那麼通用塊層可能會啟動多個io操作。每個io操作都由乙個"block i/o"結構表徵,它收集底層元件所需要的資訊來完成請求。

14.1.1 扇區

14.2 通用塊層

塊裝置驅動

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

裝置驅動 塊裝置驅動程式

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

Linux塊裝置驅動

塊裝置提供塊裝置提供裝置的訪問,裝置的訪問,可以隨機的以固定大小的塊傳輸資料,例如我們最為常見的磁碟裝置,當然塊裝置和字元裝置有較大差別,塊裝置有自己的驅動介面。簡單來說,核心決定乙個塊是固定的4096 位元組,當然該值可以隨著依賴檔案系統的變化而改變。塊裝置驅動採用register blkdev向...