扇區 磁碟塊 頁 頁框 緩衝區之間的關係

2021-09-01 20:59:41 字數 1179 閱讀 4236

扇區、磁碟塊、頁、頁框、緩衝區之間的關係!

扇區是塊裝置傳輸資料的基本單元,也就是說它是塊裝置中最小的定址單位,扇區通常的大小為512b。

塊是核心對檔案系統的一種抽象,也就是說核心執行的所有磁碟操作都是以塊為基本單位的。

可以簡單的將扇區和塊理解為:扇區是硬體裝置傳輸資料的最小單位,而塊是作業系統傳輸資料的最小單位。乙個塊通常對應乙個或多個相鄰的扇區,由於核心將塊作為對檔案系統操作的最小單位,因此vfs將其看作是單一的資料單元。

當核心從磁碟讀入資料後或者即將寫資料到磁碟時,它需要將資料寫入乙個緩衝區。緩衝區其實就是物理頁框的一部分,因此乙個物理頁框可能包含乙個或多個塊緩衝區。根據上述描述的關係,包含磁碟資料的物理頁框構造如下圖:

正如上面所說,塊緩衝區是頁框的一部分,因此不用特別描述塊緩衝區中的資料。每個塊緩衝區都對應乙個塊緩衝區頭buffer_head,他們的關係如同物理頁框和物理頁框描述符,前者用來儲存資料,後者是對前者的屬性以及控制資訊的描述。塊緩衝區頭、塊緩衝區以及頁框的關係如下:

核心中使用buffer_head結構來描述緩衝區頭,該結構中的部分字段解釋如下:

struct buffer_head
b_state:對塊緩衝區狀態的描述。

b_this_page:在乙個頁框中,可能包含多個塊緩衝區。乙個頁框內的所有緩衝區形成迴圈鍊錶,該欄位指向下乙個塊緩衝區。

b_page:指向緩衝區所在頁框的描述符。

b_size:塊緩衝區大小。

b_data:當前塊在作為緩衝的頁框內的位置。

b_bdev:指向塊裝置的指標

概念扇區:磁碟的最小儲存單位;

磁碟塊:檔案系統讀寫資料的最小單位;

頁:記憶體的最小儲存單位;

聯絡乙個磁碟塊由連續幾個(2^n)扇區組成;

頁的大小為磁碟塊大小的2^n倍;

檢視頁大小檢視: getconf page_size,常見為4k;

磁碟塊大小檢視:stat /boot/|grep 「io block」,常見為4k;

扇區大小檢視:fdisk -l,常見為512byte;

磁碟的快取和磁碟的緩衝區

磁碟快取是為了減少cpu透過i o讀取磁碟機的次數,提公升磁碟i o的效率,用一塊記憶體來儲存訪問較頻繁的磁碟內容 因為記憶體的訪問是電子動作,而磁碟的訪問是i o動作,感覺上磁碟i o變得較為快速。相同的技巧可用在寫入動作,我們先將欲寫入的內容放入記憶體中,等到系統有其它空閒的時間,再將這塊記憶體...

php緩衝區與header函式之間的秘密

我們在實際的開發中,是否聽說過在header之前不能有任何的實際輸出。甚至有的認為header函式必須寫在 的最前面。可是你是否試驗過header函式之前輸出東西?下來讓我們更深層次的了解一下 echo hello world header content type text html charse...

php緩衝區與header函式之間的秘密

我們在實際的開發中,是否聽說過在header之前不能有任何的實際輸出。甚至有的認為header函式必須寫在 的最前面。可是你是否試驗過header函式之前輸出東西?下來讓我們更深層次的了解一下 測試header之前有輸出 ob start echo hello world echo ob get c...