读写软盘扇区的算法

fxc123 2005-12-30 11:36:50
在一个读软盘扇区的函数中,作者用下面的公式进行计算:
设扇区号为 x
; ┌ 柱面号 = y >> 1
; x ┌ 商 y ┤
; -------------- => ┤ └ 磁头号 = y & 1
; 每磁道扇区数 │
; └ 余 z => 起始扇区号 = z + 1

但这样,如果有一个扇区是在磁头0,23磁道的第5个上。那它的商就是22,再除2就不对了吧?
...全文
149 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxc123 2005-12-31
  • 打赏
  • 举报
回复
再顶
fxc123 2005-12-31
  • 打赏
  • 举报
回复
为什么是sect[80][2][18]而不是sect[2][80][18]呢?感觉后者更符合每个磁盘2个磁头,每个磁头80个磁道,每个磁道18个扇区的规定亚?
wohow 2005-12-31
  • 打赏
  • 举报
回复
上面的说法不严谨。软盘的所有扇区可以看成C语言数组sect[80][2][18],也可以看成lba[80*2*18],sect[23][0][4]和lba[x]表示同一个扇区,那么x=832
wohow 2005-12-31
  • 打赏
  • 举报
回复
x = 23*2*18 + 0*18 + 5-1
软盘的所有扇区可以看成C语言数组sect[80][2][18],那么成员sect[23][0][4]距离sect[0][0][0]的偏移应该按照上面的公式算。注意柱面和磁头是0起始,扇区是1起始,x是0起始
y_sb 2005-12-31
  • 打赏
  • 举报
回复
这个嘛,我还不太了解,不过可以先顶.
wohow 2005-12-31
  • 打赏
  • 举报
回复
按照sect[柱面][磁头][扇区]是有道理的。
由于磁头寻道需要一定的时间,所以应该尽量把一个柱面上的扇区逻辑上放在一起,这样找到一个正确的磁道后访问的连续扇区最多。如果按照sect[2][80][18],那么每访问18个扇区后就要重新寻道,如果按照sect[80][2][18],那么每访问36个扇区后才重新寻道,访问整个软盘的速度将提高1倍。相同的道理,硬盘的磁头数远大于软盘,速度的差别就更大了。所以必然按照CHS这样的顺序来定位
fierygnu 2005-12-31
  • 打赏
  • 举报
回复
Cylinder-head-sector,简称CHS,是约定的定址方法。所以是sect[80][2][18]而不是sect[2][80][18]。
fxc123 2005-12-30
  • 打赏
  • 举报
回复
为什么x是832呢?我觉得就是x=22*18+5=401
还请大虾指导
wohow 2005-12-30
  • 打赏
  • 举报
回复
上面的算法是正确的。
以1.44M软盘为例,柱面=80,磁头=2,扇区=18
如果有一个扇区是在磁头0,23磁道的第5个上,那么x=832,y=46,z=4
fxc123 2005-12-30
  • 打赏
  • 举报
回复
自己顶

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧