Answers:
不幸的是,这就是当时流行的CHS寻址方案的实施和采用方式。在磁盘访问所使用的BIOS中断中,该约定被作为IBM兼容计算机的正式约定,解释了为何至今仍使用该约定。根据ECMA-107标准, 用于信息交换的磁盘盒的卷和文件结构(在原始ATA-1规范中也提到了这一点):
6.1.3逻辑扇区号
卷上的每个扇区应由逻辑扇区号标识。[...] 逻辑扇区号应以升序分配,从0开始,从扇区1,磁道00,第0侧开始,继续到磁道00,第1侧(如果FDC在双方均可记录),然后跟踪01,面0等
某些硬盘的规范中解决了该问题,请注意,给定的逻辑CHS地址与物理CHS地址位置不同。《Seagate ATA接口参考手册》对此进行了进一步讨论,其中包含以下有趣的叙述:
5.1逻辑块寻址
daccess-ods.un.org daccess-ods.un.org假设驱动器上的扇区是线性映射的,其中LBA 0为柱面0 /磁头0 /扇区1。
[...]对于所有转换模式,C = 0,H = 0,S = 1等效于LBA = 0。在所有转换模式下,不可能为所有逻辑块地址计算等效的CHS,因为此公式仅在一个方向上起作用。这是因为CHS寻址无法访问逻辑块寻址可以访问的所有可能扇区的1/256,因为CHS中没有扇区0。
因此,对于逻辑CHS寻址,尽管第一个柱面/头索引从基于0的偏移量开始,而第一个扇区索引从1开始(例如,最小可能的CHS地址为0/0/1),但这不会改变任何内容。该部门的实际位置。可以将其视为磁盘上的第一个物理扇区,称为“扇区1”,占据CHS 0/0/1。实际上,大多数编程语言中的“第一个”元素都是基于0的,因此CHS地址0/0/1处的扇区逻辑地址为零(0x00
)。
从逻辑上讲,这有意义得多(即,“零” 逻辑地址是第一个物理扇区),因为我们可以像其他任何存储设备一样对磁盘设备进行寻址(因为每个扇区都有一个唯一的线性地址来将其映射到物理扇区)扇区),因此为什么LBA从零开始有意义。确实,如果我们将CHS地址0/0/1转换为LBA,则生成的LBA将是0x00000000
(这就是为什么在大多数CHS到LBA计算中,从扇区索引中减去1的原因,以及为什么将1添加到LBA的索引中到CHS计算)。
zero sector
,错误代码和坏块等都已使用。...过渡到CHS和“固定块体系结构”向驱动器添加控制器(固件)的过渡以及“逻辑”磁盘关联的开始……控制器现在是不可见的,但您可以假定使用的方式相同……该术语现在称为“主机保护”区域” 。en.wikipedia.org/ wiki / Fixed
1
,但我仍然找不到有关原因的任何信息(尽管我怀疑这可能与0
保留扇区作为错误标志有关)。如果我遇到任何问题,我一定会更新。
我试图追溯CHS和“以1开头”扇区编号惨败的历史,这给磁盘驱动程序作者造成了许多麻烦,并迅速使LBA兴起。
CHS可以追溯到个人计算机在软盘上运行以及发明BIOS的日子。这就是维基百科说的:
BIOS(基本输入/输出系统)一词由Gary Kildall发明,并于1975年首次出现在CP / M操作系统中,它描述了在引导期间加载的CP / M的机器特定部分,该部分与硬件直接连接。
对CP / M BIOS的研究发现,文件 CP / M信息存档:BDOS系统调用,其中扇区号从零开始。结论是:最早的CHS模式实际上使用了从零开始的扇区地址。
第一个IBP / PC首次引入了基于扇区的扇区地址。文件 INT 13-Diskette BIOS Services特别指出:
Most disk BIOS calls use the following parameter scheme:
AH = function request number
AL = number of sectors (1-128 dec.)
CH = cylinder number (0-1023 dec.)
CL = sector number (1-17 dec.) <--------!!!
DH = head number (0-15 dec.)
DL = drive number (0=A:, 1=2nd floppy, 80h=drive 0, 81h=drive 1)
DL = drive number (0=A:, 1=2nd floppy, 80h=C:, 81h=D:)
Note that some programming references use (0-3) as the
drive number which represents diskettes only.
ES:BX = address of user buffer
因此,正是IBM / PC通过事实上的BIOS实施将扇区编号从零开始转换为一。
在分配来创建IBM个人计算机(型号5150)的12位IBM工程师中,David J. Bradley为其BIOS开发了代码。因此,他是决定磁盘中断参数的人之一。我们也应该和著名的CTRL+ ALT+ 梅尔·哈勒曼(Mel Hallerman)一起归功于这个家伙 DEL。
因此,对于为什么CHS中的扇区计数为什么从1开始而不是从0开始的问题
的答案是:
因为David J. Bradley这样编写了BIOS。
至于他为什么这样做,最好由他自己回答。如果我不得不猜测,我会说他离开了零扇区作为寻址扇区,驾驶员可以通过该扇区验证磁头是否在正确的轨道上。
由于磁盘实际上是经过设计的,因此不需要这样的机制,并且工程师们由于BIOS的原因还没有准备好浪费一个扇区,因此零扇区永远不会出现。此后,驱动程序编写器就需要对所有BIOS磁盘调用的扇区地址加减一。
关于软盘的第一个规范是由IBM制定的,外观是IBM 3740,并且没有提到有为系统保留的扇区。该系统的唯一保留是磁道00,它仅存储“数据集标签”,该数据集标识存储在磁道01到76中的信息的类型。它清楚地定义了第一个扇区是扇区1。这不是巧合,而是自然计数与计算机编号的关系。
我们可以观察到,当一个人开始计数任何东西时,它不是从零开始,而是从一个开始。例如,假设教室中有135名学生。计算数字将是这样的:一,二,三...一百三十四,一百三十五。
因此,其数字表示为:1,2,3,... 134,135到目前为止,我们同意,对吗?
现在,让我们放置未由0表示的数字。它看起来像这样:001、002、003,...,015、016,...,099、100,...,133、134、135
CHS就是这样:0,0,1-0,0,2-0,0,3 ...
重要的是,Excel工作表中的行或数据库中的自动数字字段的开头应为1而不是0,并且没有人对此发表任何意见。
David J. Bradley是否以这种方式安排BIOS?
是的,但他并没有站在一边。
绝对没有技术原因无法使用SECTOR 0,除非它由于其他原因被保留并向用户隐藏。原则上,所有指向它的问题都是自然编号。
GA21-9152-2文件号3740-00,15
IBM 3740数据输入系统
第12页
磁盘初始化
...每个磁盘都包含两个备用磁道,以替换任何不规则磁道。另外,初始化功能提供了一种更改软盘上扇区地址顺序的方法。通常,扇区顺序是按数字顺序(1、2、3,... 25,26)。
24页
数据标注在软盘上
在初始化期间,对数据集的数据集标签磁性方式记录的索引轨道软盘的(轨道00)上。该标签的主要目的是显示软盘上数据集的位置。
当时是1973年。它在8英寸的磁盘上记录了数据。IBM PC 5150诞生于1981年8月12日……我们不能忘记他们必须与以前的设备保持某种兼容性。
绝对没有技术原因。