邏輯區塊位址 (Logical block addressing, LBA)
現今都使用LBA(Logical block addressing)的方式來描述資料對應到硬碟的儲存區塊. 而下就以硬碟的基本架構為頭, 再接著說明LBA的計算方式.
CHS (cylinders-heads-sectors, 磁柱-磁頭-磁區)
硬碟主要可以看成磁盤和磁頭兩個部分, 如圖1. 磁盤負責存放資料, 資料的讀寫則透過磁頭. 通常一個磁盤上下兩面皆可讀寫, 所以會有對應到兩個磁頭. 而磁頭的起始編號為 0, 1, 2, n.
圖1. 硬碟架構
磁盤又可以在分為磁軌(track)和磁區(sector), 如圖2. 磁盤會被分成數個軌道, 這可以想像成操場的跑道. 每個軌道即是磁軌. 編號由外而內編號, 0, 1, 2,...,n. 而磁軌又會被被劃分成數個區段稱為磁區, 起始為 1, 2, 3, ...n. 每個磁區的大小依照規範而定. 傳統常用為 512 bytes, 現今主流則偏向 4096 bytes(Advance Format).
圖2. 磁盤
計算硬碟容量的公式如下:
容量 = 磁柱 x 磁頭 x 磁軌擁有的磁區數量 x 磁區大小.
LBA (Logical block addressing)
由於要經由CHS來算出要存資料的位置頗麻煩的. 所以就有了 LBA 的方式, 來對應硬碟的每一個存取區塊. 公式如下[1]:
LBA = (C × HPC + H) × SPT + (S - 1)
C, H, S: cylinder number, the head number, and the sector number
HPC: maximum number of heads per cylinder
SPT: the maximum number of sectors per track
而 LBA 反推回 CHS 的公式如下[1]:
C = LBA ÷ (HPC × SPT)
H = (LBA ÷ SPT) mod HPC
S = (LBA mod SPT) + 1
H = (LBA ÷ SPT) mod HPC
S = (LBA mod SPT) + 1
e.g. 最大的 C,H,S 分別為 16382, 16, 63, 經由 CHS 來算出對應的 LBA
C,H,S(00, 00, 01) => LBA = 0 = (0 x 16 + 0) x 63 + (1 - 1)...
C,H,S(00, 00, 63) => LBA = 62 = (0 x 16 + 0) x 63 + (63 - 1)
C,H,S(00, 01, 01) => LBA = 63 = (0 x 16 + 1) x 63 + (1 - 1)
...
C,H,S(00, 01, 63) => LBA = 125 = (0 x 16 + 1) x 63 + (63 - 1)
...
C,H,S(16382, 15, 63) => LBA = 16,514,063 = (16382 x 16 + 15) x 63 + (63 -1)
留言
張貼留言