CD 驱动器如何知道数据在 CD 上的哪个位置,例如,如果计算机要求某个位置的数据,读取器如何物理地知道该位置在光盘上的哪个位置?
是否存在一些每个制造商都遵循的既定的 CD“地图”?
基本上,是什么决定了激光必须沿半径移动多远,以及是什么决定了它何时读取以便拾取螺旋上的正确位置?
答案1
它知道它在 CD 上的位置,就像它知道它在硬盘上的位置一样。CD 上有一个文件系统,CD 驱动器会一直进入并从第一个轨道开始读取信息的第一个字节(MBR 是硬盘上的类似物)。这些字节将告诉驱动器一些信息,例如 CD 有多大、使用量是多少、谁制造的(对于 CD-R 来说)、从哪里开始读取目录结构。目录结构将告诉文件所在的偏移量,然后驱动器可以根据标头信息进行计算,它知道将激光移动到哪里以读取数据。
如果你想要了解如何构建自己的光盘驱动器的实际技术规格,你需要获得其中一个的副本彩虹书店(听说过红色的书您是否想为您的一些旧游戏播放音频?)。这些书是定义什么是“CD”的官方规范。每种颜色都以规范发布时该书最初装订的手册的颜色命名。
答案2
阅读了一些 libcdio 文档后,我想我明白了这个系统是如何工作的。
首先,我将谈论一下软盘驱动器和 RAM,然后将其连接到光盘。
在 RAM 中,每个字节都分配有一个编号。当我们想要访问该字节中的数据时,我们会将编号发送给处理器,处理器会将数据放入寄存器中,以便我们稍后进行处理(x86 中还有段和偏移量的故事,但我认为这与这个类比无关)。该系统或多或少比较简单,并且可以相对轻松地访问内存。
现在,软盘(和 HDD 也一样)的磁盘被分成同心圆,并标记磁道。平行放置的磁道形成所谓的圆柱体(请记住,如今的软盘是双面的,而 HDD 上可以有多个双面磁盘)。磁盘也分为扇区。扇区基本上是一个顶点位于磁盘中心的角。由磁道和扇区包围的区域称为块(尽管许多人也称之为扇区)。另一个重要的东西是磁头。正如我所说,如今的软盘有两面,而 HDD 中,每个磁盘也有两面。每面都有一个读取数据的磁头,每个磁头都有自己的编号。
当我们想要从软盘(或较旧的 HDD)获取数据时,我们会将柱面号、磁头号和扇区号发送给驱动器控制器,然后控制器会将磁头移动到适当位置。磁盘的尺寸是标准化的,磁道和扇区的位置也是标准化的。我们有一个步进电机,它会沿着磁盘的半径移动磁头。控制器知道磁道之间的距离和磁头的当前位置,并会计算出需要将磁头移动多少磁道才能到达所需的磁道。当磁头移动到正确的磁道时,它会读取软盘上的数据。每个块(或有人称之为扇区)除了前面的数据外,还会写入一些元数据。元数据包含有关扇区号和 CRC 数据的信息。读取扇区号后,控制器现在知道磁头在磁盘上的实际位置,也知道需要旋转磁盘多少圈才能将磁头放在所需的扇区(或有人称之为块)上。由于(在软盘和一些非常旧的 HDD 上)每个轨道上的块数量是固定的(并且每个块“占据”相同的角度),控制器可以计算出需要旋转磁盘的角度,以便所需的块位于磁头旁边。这种获取位置的方法也称为 CHS 形式柱面、磁头扇区,并且仍然用于软盘。HDD 转向了一种更用户友好的寻址方法。
现在我们开始进行逻辑块寻址。这个想法很简单。程序员不用使用 CHS 计算磁盘上数据的地址,只需为每个块分配一个数字,就像每个字节在 RAM 中都有自己的数字一样,然后使用该数字访问数据。HDD 电子设备在内部执行 LBA 到 CHS 的转换,现在我们不必考虑太多。
终于,我进入了光盘领域。首先,我要提一下光盘和 HDD/软盘之间的主要区别:CD 上的轨道是螺旋形的,而不是圆形的。既然我已经说了这些,我要稍微谈谈 CD 的历史。由于 LBA 非常容易和简单易用(从操作系统和应用程序程序员的角度来看,对于驱动器固件程序员来说,它更复杂)。设计光盘标准的受人尊敬的科学家和工程师看到了 LBA 的美妙之处(当时 LBA 正在 SCSI 中实现,在 20 年后才会成为家用电脑的常见配置),并决定他们希望在光盘上也使用类似的东西。
似乎有几种方法可以获取 CD 上的块地址,我将从最简单的一种开始:逻辑扇区号(请记住,块、扇区等术语经常被使用,好像它们具有相同的含义)。使用 LSN,整个螺旋被划分为 2352 字节的主数据块(此处称为扇区)。每个块都有其编号。然后是 LBA 寻址格式。它是 LSN-150。据我所知,150 个扇区是轨道引入的一部分,而光盘的这一部分应该是空的。
现在我将解释什么是“帧”。基本上,每个块被划分为 98 个帧,这些帧基本上是一种较小的块。每个帧有 33 个字节的数据。在这 33 个字节中,24 个是播放器所需的实际数据,9 个是元数据。八个字节用于提供错误校正,一个字节用于提供所谓的子通道数据。在这些子通道中,P 和 Q 对我们来说很有趣,因为它们实际上包含有关这些帧所在扇区位置的信息。Q 通道具有有关绝对时间位置的数据,这与另一个块系统有关,这是下一个主题。然后使用 8 到 14 调制方案在光盘上对帧进行编码,并在末尾添加额外的 27 位字。该字是专门制作的,因此它与周围的数据不同,用于分隔两个帧。
现在来谈谈 MSF(分钟、秒、帧)寻址。这种寻址系统的出现是因为光盘的预期用途:数字音频。当时,用光盘上播放声音的时间来衡量光盘上的空间似乎是合乎逻辑的。正如我所说,98 帧组成一个块。使用这种寻址系统,一秒钟有 75 帧。有趣的是,这里的“帧”指的是块,而不是我上面讨论的帧。当然,一分钟也有 60 秒。这就是为什么我们有时会看到标记为 74 分钟或 80 分钟光盘的 CD。
我想我终于找到了问题的部分:CD 驱动器如何知道要查找的位置。它的工作原理与 HDD 和软盘相同。螺旋的一般布局是已知的(驱动器可以在插入时检测有关特定光盘本身的信息),并且磁头移动到它期望数据所在的位置。由于步进电机用于此,驱动器知道磁头的确切位置,并且可以轻松计算出需要移动多少步才能到达预期位置。然后它旋转光盘,以便预期的块位于读取磁头处,我们就准备好了。驱动器从操作系统获取 LBA 格式的光盘上数据的地址,并使用我上面描述的寻址系统在内部进行转换。每个块中还有关于其位置的信息,这也很有用。
答案3
知道的人可能会给你一个快速的答案,我不会假装我知道,但是对于几个需要开始研究的地方......
有几种不同的文件系统可用,它们可能会或可能不会提供不同的答案,我见过的最常见的是 ISO9660、Joliet 和 UDF,它们与其他文件系统一起在sourceforge 上的 disktype 文档。如需更深入的比较,请访问维基百科“文件系统比较”页面。或者,如果你想更深入地了解某个特定的页面,比如说 UDF,那么下一步就是查看规范的发布位置,在这种情况下光储存技术协会。
我有一个明确的答案,但无论如何,这里有一些可能有趣的读物。