塊設(shè)備是Linux三大設(shè)備之一,其驅(qū)動(dòng)模型主要針對(duì)磁盤,F(xiàn)lash等存儲(chǔ)類設(shè)備,本文以3.14為藍(lán)本,探討內(nèi)核中的塊設(shè)備驅(qū)動(dòng)模型
框架
下圖是Linux中的塊設(shè)備模型示意圖,應(yīng)用層程序有兩種方式訪問一個(gè)塊設(shè)備:/dev和文件系統(tǒng)掛載點(diǎn),前者和字符設(shè)備一樣,通常用于配置,后者就是我們mount之后通過文件系統(tǒng)直接訪問一個(gè)塊設(shè)備了。
塊設(shè)備(blockdevice)是一種具有一定結(jié)構(gòu)的隨機(jī)存取設(shè)備,對(duì)這種設(shè)備的讀寫是按塊(所以叫塊設(shè)備)進(jìn)行的,他使用緩沖區(qū)來存放暫時(shí)的數(shù)據(jù),待條件成熟后,從緩存一次性寫入設(shè)備或者從設(shè)備一次性讀到緩沖區(qū)。作為存儲(chǔ)設(shè)備,塊設(shè)備驅(qū)動(dòng)的核心問題就是哪些page->segment->block與哪些sector有數(shù)據(jù)交互
作為一種存儲(chǔ)設(shè)備,和字符設(shè)備相比,塊設(shè)備有以下幾種不同:
字符設(shè)備 | 塊設(shè)備 |
---|---|
1byte | 塊,硬件塊各有不同,但是內(nèi)核都使用512byte描述 |
順序訪問 | 隨機(jī)訪問 |
沒有緩存,實(shí)時(shí)操作 | 有緩存,不是實(shí)時(shí)操作 |
一般提供接口給應(yīng)用層 | 塊設(shè)備一般提供接口 |