next up previous contents index
Next: Floppies Up: Using Disks and Other Previous: Two kinds of devices

硬盘

本节介绍有关硬盘的术语。如果你已经知道这些项目和内容,可以跳过本节。

见图4.1,是硬盘重要部分的图解。 硬盘包括一到数片盘片plattersgif 其一个或两个面surfaces涂有磁性材料用于记录数据。每面有一个读写头read-write head用于读写数据。 盘片有一个共同的轴,典型的旋转速度是每分钟3600转,高性能的硬盘转速可能更高。 磁头可沿着盘片的半径移动,磁头移动加上盘片旋转可以使词头存取磁盘表面的任何一个位置。

处理器(CPU)和实际磁盘通过磁盘控制器disk controller通讯。这使计算机其他部分不必知道如何使用驱动器, 因为不同磁盘的控制器可以做成对计算机其他部分相同的接口。这样,计算机只要说"嗨,磁盘,给我我要的东西",而不是 用一串长而复杂的电信号来移动磁头到正确的位置,并等正确的位置到了磁头下后再做那些不愉快的工作。 (实际上,到控制器的接口仍然很复杂,但比没有好多了。) 控制器还可以做一些其他的事,比如缓冲,或自动坏扇区替换等。用电信号控制操作机械部件,

以上只是理解硬件所需的。还有其他好多工作,比如马达旋转磁盘、移动磁头,但这都与理解硬盘工作原理无关。

磁盘表面通常被分为同心圆环,叫磁道tracks,磁道又被分为扇区sectors。用这样分来将磁盘定位,用于为文件定位磁盘空间。 要在硬盘上找到给定的位置,可能说"3面5道7扇区"。通常所有磁道有相同的扇区数,但也有硬盘在外圈磁道放较多的扇区(所有扇区用同样大小的物理空间, 这样在较长的外圈磁道可以容纳更多的数据)。一般一个扇区容纳512字节数据。磁盘不能处理比一个扇区更小的数据量。

  figure1034
Figure 4.1: A schematic picture of a hard disk.

每个面以相同的方式分为磁道和扇区。这意味着当一个磁头在某个磁道时,其他磁头也在相应的位置,所有相同位置的磁道组成柱面cylinder。 磁头从一个磁道(柱面)移动到另一个需要花时间,所以将经常要在一起存取的数据(如一个文件)放在一个柱面里。这改善了性能。当然不可能完全作到, 文件被放在几个相分离的位置叫碎片fragmented

磁盘的面(或头,实际是一样的)、柱面、扇区数各不相同,硬盘这些数目叫硬盘参数geometry。 硬盘参数通常存在一个特定的、由电池供电的存储区中,叫CMOS RAM,操作系统在引导启动或驱动器初始化时可以从那里得到硬盘参数。

不幸的是,BIOS gif 有一个设计限制,就是不能在CMOS RAM中定义大于1024的磁道数,这对大硬盘来说就太小了。为了克服这个问题,硬盘控制器在磁盘参数上做了一个欺骗, 用地址转换translates the addresses使计算机接受。例如,一个硬盘可能有8个磁头,2048个磁道,每磁道35个扇区gif。 其控制器可以对计算机谎称它有16个磁头,1024个磁道,每磁道35个扇区,这样就没有超过磁道数的限制,地址转换将磁头数减半,磁道数加倍后传给硬盘。 实际的算法可能更复杂,因为数量可能不象我们在这里假设的这么好(但这不影响我们理解原理)。这个转换在操作系统来看产生了错觉,并可能影响操作系统 对把所有数据存在相同柱面的企图受到影响。

转换只是IDE硬盘的问题。SCSI硬盘使用连续的扇区号(即控制器将连续的扇区好转换成磁头、柱面、扇区的三参数组),对CPU与控制器的通信使用完全不同的方法, 因此不会有这个问题。注意,计算机可能根本不知道一个SCSI硬盘的实际参数。

由于Linux经常不知道一个硬盘的真正参数,其文件系统也不试图将文件存在一个柱面里。而是争取给一个文件分配连续编号的山区,这样能得到类似的性能。 对于控制器上有cashe或控制器能自动预取的硬盘,情况将更复杂。

每个硬盘表现为一个单独的设备文件。通常只能有2-4个IDE硬盘。 这就是 /dev/hda , /dev/hdb , /dev/hdc , 和 /dev/hdd 。 SCSI是 /dev/sda , /dev/sdb , 等等。 其他硬盘类型有类似的命名约定,更多的信息见[Anv]。 注意硬盘的设备文件给出整个硬盘的存取,而不是分区(下面讨论的),因此如果不小心可能搞乱分区或数据。 硬盘的设备文件只在存取主引导扇(也将在下面讨论)时使用。


next up previous contents index
Next: Floppies Up: Using Disks and Other Previous: Two kinds of devices

Linux学院
RedhatCentOSSuse LinuxDebianUbuntu
Sun Jun 29 13:31:22 EEST 1997
《Linux命令大全》 | 《Linux函数调用大全》 | 《Linux系统管理员手册》 | 中国存储网