MINIX - 磁盘块和缓冲块
磁盤(pán)塊和緩沖塊
README
- 作者:邢萬(wàn)里
- 學(xué)校:重慶郵電大學(xué)
- email:wlxing@yahoo.com
- 基于內(nèi)核Linux 0.12源碼
磁盤(pán)塊
術(shù)語(yǔ)解釋
磁盤(pán)塊表示磁盤(pán)上存儲(chǔ)數(shù)據(jù)的地方,也就是數(shù)據(jù)真正存放的地方。即使電腦關(guān)機(jī)、文件保存等情況發(fā)生,磁盤(pán)塊即是數(shù)據(jù)最終寫(xiě)入的位置(磁盤(pán)塊的數(shù)據(jù)不會(huì)丟失,除非意外操作或者磁盤(pán)損壞等無(wú)法避免的情況)。
a. 數(shù)據(jù)塊,字面意思為存放數(shù)據(jù)的位置,但是這里(在Linux0.12中表示的只是磁盤(pán)中的一部分?jǐn)?shù)據(jù),不包括引導(dǎo)塊、超級(jí)塊、位圖和i節(jié)點(diǎn)等)為下面第一張圖的數(shù)據(jù)區(qū)部分。
b. 邏輯塊,定義為存儲(chǔ)在磁盤(pán)或者磁帶上的數(shù)據(jù)塊(和磁盤(pán)塊相同)。
存儲(chǔ)、關(guān)聯(lián)和讀寫(xiě)
磁盤(pán)塊表示圖中的數(shù)據(jù)區(qū)部分,在磁盤(pán)塊前面有8塊(1024字節(jié)),分別是引導(dǎo)塊、超級(jí)塊、位圖和i節(jié)點(diǎn)。第一塊盤(pán)塊在超級(jí)塊的成員s_firstdatazone表示,其值為8。注意,盤(pán)塊號(hào)是包括前面8塊在內(nèi)計(jì)算,計(jì)算方式即為:block = nr + s_firstdatazone - 1; block即為盤(pán)塊號(hào),nr為位圖中的索引(見(jiàn)“位圖與磁盤(pán)關(guān)聯(lián)方式”部分)。
通過(guò)i節(jié)點(diǎn)的成員i_zone數(shù)組,表示邏輯塊的存放方式是由直接塊、一次間接塊和二次間接塊構(gòu)成。這基本的三部分均表示的是磁盤(pán)塊,不是緩沖塊,其存儲(chǔ)的數(shù)據(jù)是盤(pán)塊號(hào)。通過(guò)文件的i節(jié)點(diǎn)就能對(duì)應(yīng)到相應(yīng)的磁盤(pán)塊號(hào),再對(duì)應(yīng)具體的磁盤(pán)塊。
通過(guò)超級(jí)塊的成員s_zmap數(shù)組,其成員b_data指針指向一塊為1024字節(jié)的區(qū)域。s_zmap數(shù)組為struct buffer_head類(lèi)型,代表的緩沖頭部,由該頭部進(jìn)行指引作用,s_zmap的成員b_data指向一個(gè)緩沖區(qū),緩沖區(qū)的每一位用0或者1表示,每一位依次按照盤(pán)塊的順序代表盤(pán)塊是否正在使用,如果正在使用則表示1,否則為0。位圖是緩沖塊,順序從0計(jì)數(shù)(特殊:s_zmap[0]的第一個(gè)位不用),所以如果對(duì)應(yīng)到磁盤(pán)的計(jì)算過(guò)程即為,nr = block - s_firstdatazone + 1;block即為盤(pán)塊號(hào),nr即為位圖(從0開(kāi)始計(jì)數(shù))的第nr個(gè)位置。再次注意:盤(pán)塊號(hào)是從8開(kāi)始計(jì)數(shù)(因?yàn)橛?塊在磁盤(pán)塊前),而位圖是從0開(kāi)始計(jì)數(shù)。
通過(guò)設(shè)置該函數(shù)的第一個(gè)參數(shù)為write或read等,判斷系統(tǒng)需要讀取還是寫(xiě)入數(shù)據(jù)。
a. 讀取磁盤(pán)塊過(guò)程(bread()函數(shù)):確定磁盤(pán)塊號(hào)block–>獲得與block和dev相關(guān)的緩沖塊bh-->ll_rw_block(READ,bh)。
b. 寫(xiě)入磁盤(pán)塊過(guò)程(sync_dev()函數(shù)):確定設(shè)備號(hào)dev–>找到相應(yīng)的緩沖塊bh-->ll_rw_block(WRITE,bh)。
注:
緩沖塊
術(shù)語(yǔ)解釋
注: 請(qǐng)反復(fù)注意詞匯“cache是緩存”和“buffer是緩沖”!
1. cache是高速緩存,用于CPU和內(nèi)存之間的緩存。
2. buffer是I/O緩沖,用于內(nèi)存和硬盤(pán)的緩沖。
3. 英文解釋,如下:
“ A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use. ”
cache緩存是集成于CPU中,是介于CPU與主內(nèi)存間的一種容量較小但速度很高的存儲(chǔ)器。目的是為了打破內(nèi)存讀寫(xiě)速度慢的問(wèn)題,減少了CPU的等待時(shí)間,提高了系統(tǒng)的效率。
buffer緩沖是用于暫時(shí)存放數(shù)據(jù),不同于磁盤(pán)塊。當(dāng)機(jī)器關(guān)機(jī)后,緩沖塊數(shù)據(jù)清除,因此不是數(shù)據(jù)真正存放的位置。緩沖塊占用的是內(nèi)存,用于保護(hù)硬盤(pán)或減少網(wǎng)絡(luò)傳輸?shù)拇螖?shù)。同時(shí)也可以提高速度(不會(huì)立即寫(xiě)入硬盤(pán)或直接從硬盤(pán)中讀出的數(shù)據(jù)馬上顯示),重復(fù)使用,最初最主要的目的是保護(hù)磁盤(pán)。【注意:和高速緩存(cache)區(qū)別!】如下圖可知,buffer是物理內(nèi)存的一部分(而高速緩存是CPU一部分)。
緩沖塊頭部==緩沖區(qū)頭部==緩沖頭,是指的struct buffer_head結(jié)構(gòu)體,用于指引到具體的緩沖塊位置,其結(jié)構(gòu)如下(b_data指向緩沖塊):
布局、關(guān)聯(lián)和檢索
高速緩沖區(qū)的布局:低端部分是struct buffer_head,弧線箭頭是b_data指針,高端部分是具體的緩沖塊部分。
空閑緩沖塊的關(guān)聯(lián)方式:通過(guò)緩沖頭的成員b_prev_free和b_next_free指針進(jìn)行關(guān)聯(lián),構(gòu)建雙向循環(huán)鏈表,再由緩沖頭尋找具體的緩沖塊。
緩沖塊的關(guān)聯(lián)/檢索方式:通過(guò)緩沖頭的成員b_prev和b_next指針進(jìn)行關(guān)聯(lián),構(gòu)建hash表,再由緩沖頭尋找具體的緩沖塊。
易混淆函數(shù)(block系列)
bitmap.c
buffer.c
truncate.c
技巧
參考
總結(jié)
以上是生活随笔為你收集整理的MINIX - 磁盘块和缓冲块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mplayer参数说明
- 下一篇: 服务器操作系统tco的英文全称,云服务器