一、塊裝置的操作的處理體系結構
1.vfs(虛擬檔案系統)
vfs位於塊裝置的處理體系結構的上層,提供乙個通用的檔案模型。vfs和塊裝置的關係見linux2.6裝置管理
系統呼叫的服務例程呼叫乙個合適的vfs函式,將檔案描述符和檔案內的偏移量傳遞給它。
2.磁碟快取記憶體
vfs函式確定所請求的資料是否已經存在磁碟快取記憶體中,若存在,就沒有必須訪問磁碟上的資料了。
3.對映層(塊裝置檔案系統)
(1)把檔案拆分成大小相同的塊,每乙個塊都有乙個邏輯號
(2)訪問檔案的磁碟節點,根據每一塊的邏輯塊號,確定這塊資料的在磁碟上的位置
4.通用塊層
(1)核心利用通用塊層啟動i/o操作來傳送所請求的資料。
每個i/o操作只針對一組連續的塊,由乙個bio結構描述
由於所請求的資料不一定在相鄰的塊中,所以可能啟動多次i/o操作
(2)gendisk是乙個由通用塊層處理的邏輯塊裝置。
通常乙個gendisk對應乙個硬體塊裝置,如硬碟、軟盤、光碟。
gendisk也可以是乙個虛擬裝置,建立在幾個磁碟分割槽之上
不管理gendisk是什麼,借助於通用塊層提供的服務,可以以同樣的方式工作在所有的gendisk上。
(3)向通用塊層提交乙個i/o請求的通用操作
分配乙個新的bio描述符,並初始化
獲取與gendisk相關的塊裝置驅動程式的請求佇列q
將bio插入q佇列
5.i/o排程程式層
(1)當核心元件要讀寫一些磁碟資料時,建立乙個塊裝置請求。請求中描述所請求的扇區和操作型別
(2)通過i/o排程策略(見(4)),把物理介質上相鄰的資料請求聚在一起,減少不必須的尋道時間,提高效率
當請求傳送乙個新的資料塊時,核心檢查能否通過稍微擴充套件前乙個處於等待狀態的請求而滿足要求
(3)每個塊裝置驅動程式都維持著自己的請求佇列,對每個佇列上單獨執行i/o排程,可以提高磁碟的效能。
(4)i/o排程策略
預期演算法:是最後期限演算法的演變,最後期限演算法中讀的優先順序較高,而預期演算法寫的優先順序更高
最後期限演算法:電梯策略可能會對某個請求忽略很長一段時間,最後期限演算法保證這些請求得到滿足
完全公平佇列演算法cfq:確保在觸發i/o請求的所有程序中公平分配磁碟的i/o頻寬,通常把同一程序的請求放插入同一佇列
noop演算法:沒有排序佇列,簡單的fifo後lifo
6.塊裝置驅動程式
驅動程式向磁碟控制器傳送適當的命令,進行實際的資料傳輸。
乙個驅動程式可能處理幾個塊裝置
每個塊裝置驅動程式都維持著自己的請求佇列
7.硬體裝置
二、資料管理的基本單位
1.扇區
扇區是硬體裝置傳送資料的基本單位。
扇區大小是512kb
2.塊塊是vfs檔案系統、對映層傳送和儲存資料的基本單位。檔案和磁碟都被看作拆分成幾個塊。
塊的大小必須是2的冪,不超過乙個頁框,是扇區大小的整數倍
塊的大小不是唯一的,比如:512、1024、2048、4096
同乙個磁碟上的幾個分割槽可能使用不同大小的塊
3.段段是塊裝置驅動程式傳輸資料的單位
乙個段是乙個記憶體頁或記憶體頁的一部分,它包含磁碟上相鄰的扇區
4.頁硬體快取記憶體作用於磁碟資料上的頁,每頁正好裝在乙個頁框中
5.扇區、塊、段、頁
扇區512b
硬體傳送資料的基本單位
塊大小是2的冪
不超過乙個頁框
是扇區的整數倍
vfs、檔案系統、對映層的傳送和儲存資料的基本單位
段幾個相鄰的扇區
驅動程式處理資料的基本單位
linux塊裝置驅動程式
框架 檔案的讀寫 檔案系統 vfat,ext2,ext3,yaffs2,jffs2 把檔案的讀寫轉換為扇區的讀寫 ll rw block 扇區的讀寫 1.把 讀寫 放入佇列 2.呼叫佇列的處理函式 優化 調順序 合併 塊裝置驅動程式 硬體 硬碟,flash bi bdev 找到佇列 呼叫佇列的 構造...
裝置驅動 塊裝置驅動程式
塊裝置驅動程式提供對面向塊的裝置的訪問,這種裝置以隨機訪問的方式傳輸資料,並且資料總是具有固定大小的塊。典型的塊裝置是磁碟驅動器,也有其它型別的塊裝置。塊裝置和字元裝置有很大區別。比如塊裝置上可以掛載檔案系統,字元裝置不可以。這是隨機訪問帶來的優勢,因為檔案系統需要能按塊儲存資料,同時更需要能隨機讀...
Linux 2 6字元裝置驅動程式樣例
寫這些東西還真是花時間啊,繼續昨天的內容。我寫驅動的時候總希望能找到乙個樣例參考一下,可惜網上的例子基本找不到。還好友善之臂的文件裡有些例子,但是說的很不詳細,要是直接輸入會有很多的編譯錯誤。我的這個例子是乙個控制led的例子,用linux就控制led,當然是相當的弱智的哈哈。我用的是s3c2410...