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