软盘磁头号/柱面号/扇区号与起始扇区转换

最近在看《自已动手写操作系统》这本书,读到第四章关于从软盘读取文件一节时一开始不能理解,特别是看不懂书中所附的源代码。经过自己查询软盘结构资料,通过本文对自己软盘的磁头号、磁道号和起始扇区与扇区之转换的想法做个总结。

于渊关于从软盘读取文件所附的源代码注释如下:

    ; 设扇区号为 x
    ;                           ┌ 柱面号 = y >> 1
    ;       x           ┌ 商 y ┤
    ; -------------- => ┤      └ 磁头号 = y & 1
    ;  每磁道扇区数     │
    ;                   └ 余 z => 起始扇区号 = z + 1

如何理解这个计算方法呢?


3.4寸1.44M软盘存储结构:

  物理地址                          扇区地址

0面0磁道  1扇区                       0

0面0磁道  2扇区                       1

        :                                   :

0面0磁道18扇区                       17

1面0磁道  1扇区                       18

1面0磁道  2扇区                       19

        :                                   :

1面0磁道18扇区                       35

        :



说明:软盘存储地址的编排是以磁道方式安排的,而不是面方式来安排的,即不是排完第一面再排第二面的方式来安排。



为了从扇区号为地址的方式转换为以磁面号、磁道号、起码扇区号为地址方式来从软盘读取文件的方法。换个思考方式,反过来思考,从磁面号、磁道号、起码扇区号为地址转换为以扇区号为地址的方式读取文件。


通过从上面软盘存储结构并使用高中就学到的数学归纳法可得:

  磁面号(F)=0,磁道号(R)=0  起始扇区号(S)=18 所对应的扇区地址 (A)=17

  磁面号(F)=1,磁道号(R)=0  起始扇区号(S)=18 所对应的扇区地址 (A)=35


这两个分别为软盘最前面的两个磁道了,通过画下类似于上面的软盘存储结构便可理解。 注 F,R,S,A为简写,比如:F代表磁面号。


进而可以得知任意的 A = F*18+R*18*2+S-1    即  A=(F+2R)*18+S-1 

 

注意 R*18*2中的2 是因有两个磁面,比如 R=1 那么它的前面就有 F=0、R=0,F=1、 R=0


所以,A除以18的余数等于 S-1      S=A除以18的余数+1

类似的 A除以18的商等于 F+2R    如何分别得出F,R的值呢??  已知 F=0或1,2R的个位数一定为偶数

即:如果 F+2R为个位数为奇数的话 ,那么肯定F为奇数,F的值只能为1(F=1) 所以,F = A除于18的商 & 1


对于R,如果 F=0  ,那么 R=A除以18的商 除以 2 = A除以18的商 >> 1

如果 F=1 ,那么 A除以18的商 除以 2 = (F+2R)/2 = F/2+R  ,又 F/2=0或0.5 由于是整除被舍去  即 R = A除于18的商 >> 1


这样就可以于渊的那段源代码注释了。可见理解的关键在于公式 A = F*18+R*18*2+S-1 而这个公式本身不难得出,多试几个值就明白了。


第一次写博客,请多多指正。呵呵。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值