热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

磁头号和起始扇区的计算方法------软盘结构

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

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

    ; 设扇区号为 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 而这个公式本身不难得出,多试几个值就明白了。


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

 

 

 


推荐阅读
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 最近学习反射机制的时候Properties.load(读取本地文件流的时候怎么也找不到加载文件后面发现IDEA的默认根目录是在它的Project工程下IDEA的文件目录和Ec ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • windows便签快捷键_用了windows十几年,没想到竟然这么好用!隐藏的功能你知道吗?
    本文介绍了使用windows操作系统时的一些隐藏功能,包括便签快捷键、截图功能等。同时探讨了windows和macOS操作系统之间的优劣比较,以及人们对于这两个系统的不同看法。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
author-avatar
席钾攀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有