磁盤基礎知識


物理結構

磁盤(disk)是由表面塗有磁性物質的金屬或塑料構成的圓型盤片(platter),通過一個稱為磁頭(head)的導體線圈從磁盤中讀取數據。在讀/寫操作期間,磁頭固定,磁盤在下面高速旋轉。磁盤的盤面上的數據存儲在一組同心圓中,稱為磁道(track)。每個磁道與磁頭一樣寬,一個盤面有上千個磁道。磁道又划分為幾百個扇區(sector),每個扇區固定存儲大小(通常為512B)。相鄰磁道及相鄰扇區通過一定的間隙分隔開,以避免精度錯誤。由於扇區按固定的圓心角度划分,又因為扇區的存儲大小固定,所以扇區的存儲密度從外道向里道增加。

磁盤安裝在一個磁盤驅動器中,它由磁頭臂、用於旋轉磁盤的主軸和用於數據輸入/輸出的電子設備組成。如下圖所示,多個盤片垂直堆疊,組成磁盤組,每個盤面對應一個磁頭,所有磁頭固定在一起,與磁盤中心的距離相同且一起移動。所有盤片上相對位置相同的磁道組成柱面(cylinder)。按照這種物理結構組織,扇區就是磁盤可尋址的最小存儲單元,磁盤地址用“柱面(磁道)號·磁頭(盤面)號·扇區號”表示,即CHS尋址模式

磁盤的尋址模式

CHS尋址模式

早期系統使用的是CHS尋址,這需要分別存儲每個區域的柱面、磁頭和扇區三個參數,使用時再分別讀取三個參數,然后在送到磁盤控制器去執行。CHS的BIOS規范只有24位,用10b來存儲柱面地址,用8b來存儲磁頭地址,用6b來存儲扇區地址,而一個扇區共有512B,這樣使用CHS尋址一塊硬盤最大容量為1024 * 256 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B來算就是8.4GB)。注意CHS模式扇區是從1開始算,所以在這個規范中扇區數最多只有63個。隨着硬盤技術的進步,硬盤容量越來越大,CHS模式無法管理超過8064 MB的硬盤,因此工程師們發明了更加簡便的LBA尋址方式。

LBA尋址模式

在LBA地址中,地址不再表示實際硬盤的實際物理地址(柱面、磁頭和扇區)。LBA編址方式將CHS這種三維尋址方式轉變為一維的線性尋址,它把硬盤所有的物理扇區的C/H/S編號通過一定的規則轉變為一線性的編號,系統效率得到大大提高,避免了煩瑣的磁頭/柱面/扇區的尋址方式。在訪問硬盤時,由硬盤控制器再這種邏輯地址轉換為實際硬盤的物理地址。

CHS地址可用以下公式轉成LBA,

#lba=(#c*H+#h)*S+#s-1 

其中,

  • #c#h#s分別是磁柱、磁頭、扇區的編號
  • #lba是邏輯區塊編號
  • H=heads per cylinder,每個磁柱的磁頭數
  • S=sectors per track,每磁道的扇區數

LBA可用以下公式對應到CHS:

#c=#lba/(S*H) #h=(#lba/S)%H #s=(#lba%S)+1 

邏輯扇區(logical sector)

關於物理扇區(physical setctor)與邏輯扇區,這個還得扯上扇區大小,由於近年來,隨着對硬盤容量的要求不斷增加,為了提高數據記錄密度,硬盤廠商往往采用增大扇區大小的方法,於是出現了扇區大小為4096字節的硬盤。我們將這樣的扇區稱之為物理扇區(physical setctor)。但是這樣的大扇區會有兼容性問題,有的系統或軟件無法適應。為了解決這個問題,硬盤內部將物理扇區在邏輯上划分為多個扇區片段並將其作為普通的扇區(一般為512字節大小)報告給操作系統及應用軟件。這樣的扇區片段我們稱之為邏輯扇區(logical sector)。實際讀寫時由硬盤內的程序(固件)負責在邏輯扇區與物理扇區之間進行轉換,上層程序“感覺”不到物理扇區的存在。

邏輯扇區是硬盤可以接受讀寫指令的最小操作單元,是操作系統及應用程序可以訪問的扇區,多數情況下其大小為512字節。我們通常所說的扇區一般就是指的邏輯扇區。物理扇區是硬盤底層硬件意義上的扇區,是實際執行讀寫操作的最小單元,是只能由硬盤直接訪問的扇區。操作系統及應用程序一般無法直接訪問物理扇區。一個物理扇區可以包含一個或多個邏輯扇區(比如多數硬盤的物理扇區包含了8個邏輯扇區)。當要讀寫某個邏輯扇區時,硬盤底層在實際操作時都會讀寫邏輯扇區所在的整個物理扇區。

磁盤塊

磁盤塊是邏輯上的概念,或者說是虛擬出來的概念。磁盤塊是操作系統中最小的邏輯存儲單位。操作系統與磁盤打交道的最小單位是磁盤塊。磁盤塊可以包括2n個扇區。塊(Block)簇(cluster)分別對應Linux與Windows操作系統中磁盤塊的概念。磁盤控制器除了讀取數據、控制磁頭等作用外,還有映射扇區和磁盤塊的關系的功能。

引入磁盤塊的意義:

  • 讀取方便:由於扇區的數量比較小,數目眾多在尋址時比較困難,所以操作系統就將相鄰的扇區組合在一起,形成一個塊,再對塊進行整體的操作。
  • 分離對底層的依賴:操作系統忽略對底層物理存儲結構的設計。通過虛擬出來磁盤塊的概念,在系統中認為塊是最小的單位。

分區及其格式化

磁盤在使用之前必須要先分區並格式化。簡單的理解,分區就是指從磁盤上划分出來的一大片連續的扇區。格式化則是對分區范圍內扇區的使用進行規划。比如文件數據的儲存如何安排、文件屬性儲存在哪里、目錄結構如何存儲等等。分區經過格式化后,就可以存儲文件了。格式化程序會將分區里面的所有扇區從頭至尾進行分組,划分為固定大小的“簇”,並按順序進行編號。每個“簇”可固定包含一個或多個扇區,其扇區個數總是2的n次方。格式化以后,分區就會以“簇”為最小單位進行讀寫。文件的數據、屬性等等信息都要保存到“簇”里面。

分區對齊

為磁盤划分分區時,是以邏輯扇區為單位進行划分的,分區可以從任意編號的邏輯扇區開始。如果分區的起始位置沒有對齊到某個物理扇區的邊緣,格式化后,所有的“簇”也將無法對齊到物理扇區的邊緣。如下圖所示,每個物理扇區由4個邏輯扇區組成。分區是從3號扇區開始的。格式化后,每個簇占用了4個扇區,這些簇都沒有對齊到物理扇區的邊緣,也就是說,每個簇都跨越了2個物理扇區。

分區未對齊

由於磁盤總是以物理扇區為單位進行讀寫,在這樣的分區情況下,當要讀取某個簇時,實際上總是需要多讀取一個物理扇區的數據。比如要讀取0號簇共4個邏輯扇區的數據,磁盤實際執行時,必須要讀取0號和1號兩個物理扇區共8個邏輯扇區的數據。同理,對“簇”的寫入操作也是這樣。顯而易見,這樣會造成讀寫性能的嚴重下降。

下面再看對齊的情況。如下圖所示,分區從4號扇區開始,剛好對齊到了物理扇區1的邊緣,格式化后,每個簇同樣占用了4個扇區,而且這些簇都對齊到了物理扇區的邊緣。

分區對齊

在這樣對齊的情況下,當要讀取某個簇,磁盤實際執行時並不需要額外讀取任何扇區,可以充分發揮磁盤的讀寫性能。顯然這正是我們需要的。

由此可見,對於物理扇區大小與邏輯扇區大小不一致的磁盤,分區4K對齊才能充分發揮磁盤的讀寫性能。而不對齊就會造成磁盤讀寫性能的下降。

參考文獻

  1. 2019年操作系統考研復習指導
  2. MBR與GPT
  3. 磁盤尋址方式--CHS和LBA尋址方式
  4. 【FAQ】存儲基礎知識 - 磁盤尋址(CHS尋址方式、LBA尋址方式)
  5. 邏輯區塊地址-Wiki
  6. 存儲基礎知識:扇區與塊/簇
  7. 電腦中常用的“扇區”、“簇”、“塊”、“頁”等概念
  8. 分區4K對齊那些事,你想知道的都在這里

轉自:https://www.cnblogs.com/zerxoi/p/13227310.html

這篇文章也值得參考:https://www.zhihu.com/question/67935624


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM