为什么CHS中的扇区号寻址从扇区1开始而不是0?


13

在引入LBA之前,为什么CHS始于0,0,1而不是0,0,0


1
“为什么扇区数从1开始...” –实际上,您指的是扇区,而不是扇区。这些是磁盘请求中使用的两个不同的参数。 “行业指数”也是扇区号nomemclature差,因为有被称为一个独立的实体指标在磁盘驱动器。
锯末2015年

Answers:


8

不幸的是,这就是当时流行的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计算)。


我已经找到了这个问题的答案,但是我想我留下显示答案的评论的人删除了它……无论如何,我问这个问题的原因是由于我阅读的每个人和所有内容基本上都与您的完全相同大部分的话。这种“这只是他们制造的方式...”的答案真的让我很烦,因为人们不仅只是在构建某些东西而没有使用它,也不只是因为他们不想使用它而已。根本...
Jordan Davis

1
回顾CHR / CHS / LBA的历史,您会发现在使用MBBCCHHR可变长度的CHR之前zero sector,错误代码和坏块等都已使用。...过渡到CHS和“固定块体系结构”向驱动器添加控制器(固件)的过渡以及“逻辑”磁盘关联的开始……控制器现在是不可见的,但您可以假定使用的方式相同……该术语现在称为“主机保护”区域” 。en.wikipedia.org/ wiki / Fixed
Jordan Davis

@JordanDavis在大多数情况下,受主机保护的区域位于磁盘的末尾,而不是开始。的确,虽然返回了第一个扇区的命名法作为值1,但我仍然找不到有关原因的任何信息(尽管我怀疑这可能与0保留扇区作为错误标志有关)。如果我遇到任何问题,我一定会更新。
突破

FBA部分概述的Wikipedia链接,列出的记录是ECC的第零个记录,但这听起来不错,如果遇到任何一个,我都将做同样的事情。
乔丹·戴维斯

@JordanDavis我在这个问题上添加了一笔赏金,因为我真的很想听听其他人的一些意见-特别是在Why方面。其他答案的机会。
突破

8

我试图追溯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磁盘调用的扇区地址加减一。


“我要说的是,他将扇区零作为寻址扇区……” -不合逻辑的猜测。每个扇区都有一个标识记录,其中包括圆柱/磁头/扇区地址。磁盘控制器不必等待索引出现就可以验证在正确的柱面上完成了查找。读取头下方旋转的下一个扇区以进行验证。
锯末2015年

“ CH =柱面编号(dec。0-1023)” -原始IBM PC BIOS使用CH作为“磁道”编号。CH是一个8位寄存器,因此最大值仅为255。–
锯末

“我试图追溯CHS的历史……并迅速兴起了LBA” -显然,所有有关“ LBA”的讨论仅与PC磁盘接口有关,尤其是ATAPI规范。否则,CHS和LBA可以共存。EG我已经编写了一些内部使用LBA的文件系统,但是将寻址转换为CHS以执行每个控制器接口的实际磁盘I / O。 “最早的CHS架构实际上使用了从零开始的扇区地址。” -是的,但这是在CP / M之前发生的。
锯末

@sawdust:我所做的只是引用IBM文档,甚至可能早于为PC BIOS接口分配寄存器。显然,Bradley通过将扇区0设置为保留地址而被错误或错误定向,但是我们无法确定其用途,因为它从未发生过。可能是他不知道扇区地址部分也包含磁道号。也许这个备用扇区是软盘的一个属性,该软盘被转移到Bradley的常规BIOS接口中。我们只知道IBM / PC BIOS负责CHS的这一更改。
harrymc 2015年

与这些事情一样,拉尔夫·布朗(Ralph Brown)的中断列表提供了宝贵的信息。@sawdust写的关于CH是一个八位寄存器的确是事实,但这不是CX的使用方式。取而代之的是,CX填充了柱面号扇区号(但是此扩展名显然仅适用于硬盘,不适用于软盘;对于软盘,CL保留扇区号,CH保留柱面号)。比较例如Int 13 / AH = 02h,BIOS-DISK-READ SECTOR(S)INTO MEMORY输入参数的指定接口。
CVn 2015年

1

关于软盘的第一个规范是由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日……我们不能忘记他们必须与以前的设备保持某种兼容性。

绝对没有技术原因。


它保留给司机- I / O的固件接口,即使在现代SSD磁盘或闪存有预留空间的I / O操作的读/写/复制/格式等。
乔丹·戴维斯

看看这个
yass,

是的,但不是部门0,而是部门0。从第一个规范(IBM 3740)开始,部门0被称为“索引部门”,并存储在“索引部门布局”中指定的多个数据。在现代光盘上,此圆柱通常被指定为“气缸号-1”,是“ -1”,并且只能由控制器访问。没有什么可以解释为什么未使用扇区0的信息,尽管我们可以在诸如CP / M的某些操作系统中看到它,但是由于硬件仍根据IBM 3740生产,因此它是虚拟的。换句话说,第一个扇区是行业1.为什么?“
自然
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.