1

我想知道LBA和集羣編號。LBA和集羣

我的問題是這樣的:

  1. 是LBA 0總是集羣2?

  2. 那麼羣集0和1對於什麼?

  3. 集羣和LBA的區別只在於它們從磁盤開始?

  4. CHS,LBA,cluster nubmer之間的關係?

  5. 並且在流動的代碼中,add ax, WORD [datasector]代碼是什麼?

    ;************************************************; 
    ; Convert CHS to LBA 
    ; LBA = (cluster - 2) * sectors per cluster 
    ;************************************************; 
    
    
    ClusterLBA: 
          sub  ax, 0x0002       ; zero base cluster number 
          xor  cx, cx 
          mov  cl, BYTE [bpbSectorsPerCluster]  ; convert byte to word 
          mul  cx 
          add  ax, WORD [datasector]    ; base data sector 
          ret 
    

回答

7

有許多部門編號磁盤驅動器方案。其中最早的是CHS(Cylinder-Head-Sector)。一個扇區可以通過指定圓柱體(軌道),讀/寫磁頭和每個磁道三元組的扇區來選擇。此編號方案取決於磁盤驅動器的實際物理特性。

第一個邏輯扇區駐留在柱面0,頭0,扇區1上。第二個扇區位於扇區2上,依此類推。如果磁盤上沒有更多的扇區(例如1.44M軟盤上有18個扇區/磁道),則應用下一個磁頭,再次從扇區1開始,依此類推。

可以CHS地址轉換爲絕對(或邏輯)扇區號用一些數學:

L = (C * Nh + H) * Ns + S - 1 

其中Ç^h ANS 小號都是柱面,磁頭和扇區數根據CHS地址,NhNs分別是每個磁道(柱面)的磁頭數和扇區數。反向計算(將LBA轉換爲CHS)非常簡單。

在這種編號方案中,稱爲LBA(邏輯塊尋址),每個扇區可以由一個單一的數字來標識。第一個邏輯扇區是LBA 0,第二個是LBA 1,依此類推。這個方案是線性的,更容易處理。

集羣只是連續扇區在盤上,這是由操作系統和文件系統一起處理的組中,爲了減少所需要的文件系統元數據(磁盤碎片和磁盤空間例如至描述哪些扇區可以在磁盤上找到特定的文件)。根據磁盤容量的不同,羣集可能只包含1個扇區(512字節),最多128個扇區(64千字節)或更多。

同樣,可以容易地計算一個簇的第一個扇區的邏輯扇區號:

L = ((U - Sc) * Nc) + Sd 

其中Ü是簇編號,Nc個是扇區集羣中的數量, Sc是第一個有效簇編號,Sd是可用於通用文件數據的第一個邏輯扇區的編號。後兩個參數(Sc和Sd)完全是文件系統和操作系統特定的值。

某些文件系統(例如FAT16和整個FAT系列)爲特殊目的保留簇編號0和1,這就是爲什麼第一個實際簇是簇編號2(在本例中爲Sc = 2)。同樣,在磁盤的開始處可能有一些保留扇區,其中不允許寫入和讀取數據。該保留區域可以從幾個扇區(例如引導記錄)到數百萬個扇區(例如,在我們的硬盤上的分區之前的完全不同的分區)。

呵呵,這是很長的答案。畢竟,如下簡短回答您的問題可以概括爲:

  1. 沒有,LBA 0並不總是集羣2,這是文件系統特定的(在FAT的情況下,第2組是在第一個可用的部門磁盤,但並不總是LBA 0 - 請參閱答案5)。

  2. 羣集編號0和1的解釋也是文件系統特定的(在FAT的情況下,羣集編號0表示文件分配表中的空羣集,並且羣編號1被保留)。

  3. 不,主要的區別在於簇編號處理一組連續的扇區,而LBA尋址磁盤上的單個扇區。

  4. 請參閱上面的長答案中的公式(公式?)以及隨附的說明。

  5. 很難從這麼短的彙編代碼告訴我們,但我最好的猜測將在分區(由Sd中上式中提到的)的開始保留扇區數。