嵌入式100題(85) 扇區 塊 頁 簇的概念

2021-10-20 13:30:17 字數 2504 閱讀 9941

1、什麼是扇區和(磁碟)塊?

物理層面:乙個磁碟按層次分為 :

磁碟組合 -> 單個磁碟 -> 某一盤面 (platter)-> 某一磁軌 (track)-> 某一扇區(sector)。

磁頭(head):讀寫頭,

柱面(cylinder):柱面是我們抽象出來的乙個邏輯概念,簡單來說就是處於同乙個垂直區域的磁軌稱為柱面 ,即各盤面上面相同位置磁軌的集合。磁碟讀寫資料是按柱面進行的,磁頭讀寫資料時首先在同一柱面內從 0 磁頭開始進行操作,依次向下在同一柱面的不同盤面(即磁頭上)進行操作,只有在同一柱面所有的磁頭全部讀寫完畢後磁頭才轉移到下一柱面。

硬碟容量 = 柱面數(每個盤面的磁軌數)×盤面數 × 扇區數 × 512位元組

通常情況下每個扇區的大小是512位元組。(由於不斷提高磁碟的大小,部分廠商設定每個扇區的大小是4096位元組)。

邏輯層面: 磁碟塊(虛擬出來的)。作業系統與磁碟之間交流的最小單位就是磁碟塊,它是乙個虛擬的概念。是對於作業系統(軟體)來說有意義的概念。如:檔案的物理儲存都是以磁碟塊為單位的。

2、什麼是簇?和塊什麼區別?

通俗的來講,在windows下如ntfs等檔案系統中叫做簇;在linux下如ext4等檔案系統中叫做塊(block)。每個簇或者塊可以包括2、4、8、16、32、64…2的n次方個扇區。

3、為什麼存在磁碟塊?

讀取方便:由於扇區的數量比較小,數目眾多在定址時比較困難,所以作業系統就將相鄰的扇區組合在一起,形成乙個塊,再對塊進行整體的操作。

分離對底層的依賴:作業系統忽略對底層物理儲存結構的設計。通過虛擬出來磁碟塊的概念,在系統中認為塊是最小的單位。

4、怎麼對映磁碟塊?

磁碟控制器,其作用除了讀取資料、控制磁頭等作用外,還有的功能就是對映扇區和磁碟塊的關係。

5、磁碟的讀寫基本單位是什麼?

答案:讀寫基本單位是扇區。磁碟的原理,物理實現,磁碟控制器是按照扇區這個單位讀取等運算元據的。作業系統是通過塊簇來做為單位讀取等運算元據的。此題問磁碟的讀寫,和作業系統沒有關係,千萬不要聯絡到作業系統層面去了。

檔案系統就是作業系統的一部分,所以檔案系統操作檔案的最小單位是塊。

6、磁碟塊與扇區的大小

既然磁碟塊是乙個虛擬概念。是作業系統自己"杜撰"的。軟體的概念,不是真實的。所以大小由作業系統決定,作業系統可以配置乙個塊多大。

乙個塊大小=乙個扇區大小*2的n次方。

n是可以修改的。

7、為什麼磁碟塊大小必須是扇區大小的整數倍呢?

磁碟讀取資料的基本單位就是乙個扇區的大小,乙個塊的大小對於磁碟來說就是一次獲取資料讀取的扇區數*扇區大小,如果是整數倍的扇區數對於磁碟的io更好,速度更快,也會更合理的利用資源。否則會對扇區進行分割。

乙個扇區是512位元組。有些硬碟廠商會提供4k大小扇區。這是物理結構。磁碟定下來的結構就是沒法修改的。所以必須要將塊設定為磁碟的大小。

8、4k對齊:

隨著時代發展,硬碟容量不斷擴充套件,使得之前定義的每個扇區512位元組不再是那麼的合理,於是將每個扇區512位元組改為每個扇區4096 個位元組,也就是現在常說的「4k扇區」。隨著ntfs成為了標準的硬碟檔案系統,其檔案系統的預設分配單元大小(簇)也是4096位元組,為了使簇與扇區相對應,即使物理硬碟分割槽與計算機使用的邏輯分割槽對齊,保證硬碟讀寫效率,所以就有了「4k對齊」的概念。

新標準的」4k扇區」的硬碟在廠商為了保證與作業系統相容的前提下,也將扇區模擬成512b,會預設定義為4096位元組大小為乙個簇,但因為其引導區占用了乙個磁軌共63個扇區,真正的檔案系統在63號扇區之後。

我們通過計算得出前63個扇區大小為:512bx63=32256b。

並按照預設簇大小得出63扇區為:32256b÷4096b=7.875簇。

即從第63個扇區結束,往後的每乙個簇都會跨越兩個物理單元,佔據前乙個單元的一小部分和後乙個單元的一大部分。

而「4k對齊」主要是將硬碟的模擬扇區(512b)對齊到8的整數倍個「實際」4k扇區,即4096b*8=32768b,其正好跨過了63扇區的特性,從第64個扇區對齊。

9、塊與頁的關係:

作業系統經常與記憶體和硬碟這兩種儲存裝置進行通訊,類似於「塊」的概念,都需要一種虛擬的基本單位。所以,與記憶體操作,是虛擬乙個頁的概念來作為最小單位。與硬碟打交道,就是以塊為最小單位。

嵌入式100題(005) 程序的空間模型

linux下使用虛擬記憶體空間給每乙個程序,32位作業系統下,每個程序都有獨立的4g虛擬記憶體空間。其中包括 核心區 使用者 不可見的區域,頁表就存放在這個區域中。使用者區 a 段 只可讀,不可寫,程式 段。b 資料段 儲存全域性變數,靜態變數的區域。c 堆區 就是動態記憶體,通過malloc,ne...

嵌入式100題(017) malloc的底層實現

使用過c語言的都知道malloc是乙個動態分配記憶體的函式,還可以通過free釋放記憶體空間。如果我們想分析一下malloc的原始碼,這其實不是一會就能看懂的,但是我們可以討論一下malloc的簡單實現。在這之前,我們先來看一下虛擬記憶體空間。虛擬記憶體空間是作業系統實現記憶體管理的一種機制。作業系...

嵌入式100題(017) malloc的底層實現

使用過c語言的都知道malloc是乙個動態分配記憶體的函式,還可以通過free釋放記憶體空間。如果我們想分析一下malloc的原始碼,這其實不是一會就能看懂的,但是我們可以討論一下malloc的簡單實現。在這之前,我們先來看一下虛擬記憶體空間。虛擬記憶體空間是作業系統實現記憶體管理的一種機制。作業系...