4.14节问题: 如何根据软盘的逻辑扇区号计算物理扇区号?

作者:Maverick
 blog: http://blog.csdn.net/zhaohuabing   转载请注明出处

一、首先让我们看看软盘的物理结构
软盘在物理上有柱面、磁道和扇区的结构,其关系是柱面包含磁道,磁道包含扇区,扇区是计算机读取软盘的基本单位
1、柱面:软盘有两个柱面,编号为:0,1 (其实就是软盘的两面)
2、磁道:每个面划分为若干个磁道,从外向内编号:0,1,2...80
3、扇区:每个磁道划分为若干个扇区,一个磁道中扇区的编号:1,2,3...18,每个扇区的容量相同,能保存512 byte的数据。

二、然后看看扇区的编码
扇区的编号由两种,一种是物理编号,一种是逻辑编号

1、物理编号:表明扇区在软盘上的物理位置,用柱面、磁道、扇区表示,BIOS中断int 13h就是使用物理编号来确定要读的扇区位置。
2、逻辑编号:表明扇区的逻辑位置,是一个相对于起始扇区(柱面0磁道0扇区0)的序号

3、物理编号和逻辑编号的对应关系如下:
物理编号  (柱面号  磁道号 扇区号)                 逻辑编号
0柱面0磁道    0        0        1                         0 
             0        0       2                       1
                ...      ...       ...                       ...
               0        0        18                         17
1柱面0磁道    1        0        1                       18
         1        0        2                        19
                ...      ...      ...                        ...
                1        0        18                        35
0柱面1磁道    0       1        1                        28
                0        1        2                          29
                ...      ...       ...                        ...
                0        1        18                        53
1柱面1磁道    1        1        1                       54
        1      1        2                          55 
                ...     ...    ...                        ...
                1        1        18                        71
                ..................
0柱面79磁道  0        79        1
              0        79        2
               ...    ...      ...
              0     79       18
1柱面79磁道  1        79        1
              1        79        2
              ...      ...       ...                          ...
              1        79        18                         2879
可以看到,逻辑扇区编号是按照物理扇区号、物理柱面号、物理磁道号的先后顺序进行编码的,为什么要按照这个顺序进行编号呢,我想主要是为了减少磁头的移动,加快软盘的I/O速度。因为文件一般是存放在按照相邻的逻辑扇区中,按照物理扇区号、物理柱面号、物理磁道号的先后顺序对逻辑扇区进行编码,相邻的逻辑扇区在软盘的物理位置上也是相邻的(同一面或者另一面),可以减少读取同一文件式磁头的移动距离。
由上面可以得到两种编号的换算关系:
逻辑扇区号 = (磁道号 * 2 + 柱面号) * 18 + 物理扇区号 - 1

因为每一个磁道有18个扇区,而物理扇区号是在每一个磁道从0开始编号,所以物理扇区号 = 逻辑扇区号/18 的余数 + 1
因为每一个磁道有18*2个扇区,所以 磁道号 = 逻辑扇区号/(18*2) 的商 即磁道号=商>>2
   如果 逻辑扇区号/18的商是偶数,则是柱面0,如果商是奇数,则是柱面1  即柱面号=商&1

你可能感兴趣的:(4.14节问题: 如何根据软盘的逻辑扇区号计算物理扇区号?)