4.11 磁盘的管理:磁盘初始化、引导块、坏块
磁盘初始化
一个新的磁盘只是一个含有磁性记录材料的空白盘。在磁盘能存储数据以前,它必须分红扇区以便磁盘控制器能进行读和写操做,这个过程称为低级格式化(物理分区)。低级格式化为磁盘的每一个扇区釆用特别的数据结构。每一个扇区的数据结构一般由头、数据区域(一般为512B大小)和尾部组成。头部和尾部包含了一些磁盘控制器所使用的信息。
为了使用磁盘存储文件,操做系统还须要将本身的数据结构记录在磁盘上:第一步将磁盘分为由一个或多个柱面组成的分区(即咱们熟悉的C盘、D盘等形式的分区);第二步对物理分区进行逻辑格式化(建立文件系统),操做系统将初始的文件系统数据结构存储到磁盘上,这些数据结构包括空闲和已分配的空间以及一个初始为空的目录。
引导块
计算机启动时须要运行一个初始化程序(自举程序),它初始化CPU、寄存器、设备控制器和内存等,接着启动操做系统。为此,该自举程序应找到磁盘上的操做系统内核,装入内存,并转到起始地址,从而开始操做系统的运行。
自举程序一般保存在ROM中,为了不改变自举代码须要改变ROM硬件的问题,故只在ROM中保留很小的自举装入程序,将完整功能的自举程序保存在磁盘的启动块上,启动块位于磁盘的固定位。拥有启动分区的磁盘称为启动磁盘或者系统磁盘。
坏块
因为磁盘有移动部件且容错能力弱,因此容易致使一个或多个扇区损坏。部分磁盘甚至从出厂时就有坏扇区。根据所使用的磁盘和控制器,对这些块有多种处理方式。
对于简单磁盘,如电子集成驱动器(IDE)。坏扇区可手工处理,如MS-DOS的Format 命令执行逻辑格式化时便会扫描磁盘以检查坏扇区。坏扇区在FAT表上会标明,所以程序不会使用。
对于复杂的磁盘,如小型计算机系统接口(SCSI),其控制器维护一个磁盘坏块链表。该链表在出厂前进行低级格式化时就初始化了,并在磁盘的整个使用过程当中不断更新。低级格式化将一些块保留做为备用,对操做系统透明。控制器能够用备用块来逻辑地替代坏块,这种方案称为扇区备用。
4.12 文件系统知识点总结
磁盘结构
引导控制块(Boot Control Block)包括系统从该分区引导操做系统所须要的信息。若是磁盘没有操做系统,那么这块的内容为空。它一般为分区的第一块。UFS称之为引导块(Boot Block); NTFS 称之为分区引导扇区(Partition Boot Sector)。
分区控制块(Partition Control Block)包括分区详细信息,如分区的块数、块的大小、 空闲块的数量和指计、空闲FCB的数量和指针等。UPS称之为超级块(Superblock);而NTFS 称之为主控文件表(Master File Table)。
内存结构
内存分区表包含全部安装分区的信息。
内存目录结构用来保存近来访问过的目录信息。对安装分区的目录,能够包括一个指向分区表的指针。
系统范围的打开文件表,包括每一个打开文件的FCB复制和其余信息。
单个进程的打开文件表,包括一个指向系统范围内已打开文件表中合适条目和其余信息的指针。
文件系统实现概述
为了建立一个文件,应用程序调用逻辑文件系统。逻辑文件系统知道目录结构形式,它将分配一个新的FCB 给文件,把相应目录读入内存,用新的文件名更新该目录和FCB,并将结果写回到磁盘。图4-32显示了一个典型 的 FCB。

图4-32 典型的FCB
一旦文件被建立,它就能用于I/O,不过首先要打开文件。调用open将文件名传给文件系统,文件系统根据给定文件名搜索目录结构。部分目录结构一般缓存在内存中以加快目录操做。找到文件后,其FCB复制到系统范围的打开文件表。该表不但存储FCB,也有打开该文件的进程数量的条目。
而后,单个进程的打开文件表中会增长一个条目,并经过指针将系统范围的打开文件表的条目同其余域(文件当前位置的指针和文件打开模式等)相连。调用open返回的是一个 指向单个进程的打开文件表中合适条目的指针。因此文件操做都是经过该指针进行。
文件名没必要是打开文件表的一部分,由于一旦完成对FCB在磁盘上的定位,系统就不 再使用文件名了。对于访问打开文件表的索引,UNIX称之为文件描述符(File Descriptor);而Windows 2000称之为文件句柄(File Handle)。所以,只要文件没有被关闭,全部文件操 做经过打开文件表来进行。
当一个进程关闭文件,就删除一个相应的单个进程打开文件表的条目即目录项,系统范 围内打开文件表的打开数也会递减。当打开文件的全部用户都关闭了一个文件时,更新的文 件信息会复制到磁盘的目录结构中,系统范围的打开文件表的条目也将删除。
在实际中,系统调用open会首先搜索系统范围的打开文件表以肯定某文件是否已被其 他进程所使用。若是是,就在单个进程的打开文件表中建立一项,并指向现有系统范围的打 开文件表的相应条目。该算法在文件已打开时,能节省大量开销。
混合索引分配的实现
混合索引分配已在UNIX系统中釆用。在UNK SystemV的索引结点中,共设置了 13 个地址项,即iaddr(O)~iaddr(12),如图4-33所示。在BSD UNIX的索引结点中,共设置了 13个地址项,它们都把全部的地址项分红两类,即直接地址和间接地址。

图4-33 UNIX系统的inode结构示意图
1) 直接地址
为了提升对文件的检索速度,在索引结点中可设置10个直接地址项,即用iaddr(O)~iaddr(9)来存放直接地址。换言之,在这里的每项中所存放的是该文件数据所在盘块的盘块号。假如每一个盘块的大小为4KB,当文件不大于40KB时,即可直接从索引结点中读出该文 件的所有盘块号。
2) 一次间接地址
对于大、中型文件,只釆用直接地址并不现实。可再利用索引结点中的地址项iaddr(lO) 来提供一次间接地址。这种方式的实质就是一级索引分配方式。图中的一次间址块也就是索 引块,系统将分配给文件的多个盘块号记入其中。在一次间址块中可存放1024个盘块号, 于是容许文件长达4MB。
3) 屡次间接地址
当文件长度大于4MB+40KB(—次间址与10个直接地址项)时,系统还须釆用二次间 址分配方式。这时,用地址项iaddr(11)提供二次间接地址。该方式的实质是两级索引分配方 式。系统此时是在二次间址块中记入全部一次间址块的盘号。在釆用二次间址方式时,文件 最大长度可达4GB。同理,地址项iaddr(12)做为三次间接地址,其所容许的文件最大长度可 达 4TB。