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中上式中提到的)的开始保留扇区数。