数据处理是计算机的主要功能之一,与数据处理相关的数据管理和数据保存是必不可少的,甚至是较为重要的环节。在计算机中,大量的数据和信息是通过文件存储和管理的。在用户进行的输入、输出中,以文件为基本单位。文件系统负责管理文件,并为用户提供对文件进行存取、共享及保护的方法。
文件是具有文件名的一组相关元素的集合,在文件系统中是一个最大的数据单位,它描述了一个对象集,每个文件都有一个文件名,用户通过文件名来访问文件。
文件的组成结构:
文件表示的范围很广,系统或用户可以将具有一定功能的程序或数据集合命名为一个文件。例如,一个命名的源程序、目标程序、一批数据以及系统程序都可以看作文件。在有的操作系统中,设备也被看作一种特殊的文件。这样,系统可以对设备和文件实施统一管理,既简化了系统设计,又方便了用户。
按用途分类
按保护级别分类
按信息流向分类
按数据形式分类
文件的逻辑结构是指从用户观点来看所观察到的文件的组织形式,是用户可以直接处理的数据及其结构,因其独立于文件的物理特性,故又称为文件组织;而从计算机的角度出发文件在外存上的存放组织形式称为文件的物理结构。
文件的逻辑结构与存储设备的特性无关,而物理结构与存储设备特性的关系很大。
从逻辑结构上看,文件可以分为两种形式:一种是有结构的记录式文件;另一种是无结构的流式文件。而记录式文件的逻辑结构通常有顺序、索引和索引顺序。
从物理结构上看,文件的组织形式有连续分配、链接分配和索引分配。
通常,有结构的文件由若干个记录组成,因此称为记录式文件。记录是一些相关数据项的集合,而数据项是数据组织中可以命名的最小逻辑单位,例如,每个职工情况记录由姓名、性别、出生年月、工资等数据项组成。一个单位的职工情况记录就组成了一个文件。总之,数据项组成记录,记录组成文件。记录式文件又可以分为等长记录文件和变长记录文件。等长记录文件中的所有记录的长度相等,变长记录文件中的各记录长度可以不相等。
无结构文件是由若干个字符组成,可以看作一个字符流,称为流式文件。可以将流式文件看作记录式文件的特例。在 UNIX 系统中,所有文件都被视为流式文件,系统不对文件进行格式处理。
文件存储设备通常划分为大小相等的物理块,物理块是分配及传输信息的基本单位。物理块的大小与设备有关,但与逻辑记录的大小无关,因此一个物理块中可以存放若干个逻辑记录,一个逻辑记录也可以存放在若干个物理块中。为了有效地利用外存设备和便于系统管理,一般也把文件信息划分为与物理存储块大小相等的逻辑块。
顺序结构又称为连续结构,是一种最简单的文件结构,其将一个逻辑文件的信息连续存放。以顺序结构存放的文件称为顺序文件或连续文件。
按照记录是否定长,顺序文件分为定长记录顺序文件和变长记录顺序文件。
按照文件中的记录是否按照关键字排序,顺序文件又分为串结构和顺序结构:串结构中各记录之间的顺序与关键字无关,而顺序结构中所有记录按照关键字顺序排序。
顺序文件的主要优点是顺序存取时速度较快;若文件为定长记录文件,还可以根据文件起始地址及记录长度进行随机访问。但因为文件存储要求连续的存储空间,所以会产生碎片,同时也不利于文件的动态扩充。
索引结构为一个逻辑文件的信息建立一个索引表。索引表中的表目存放文件记录的长度和所在逻辑文件的起始位置,因此逻辑文件中不再保存记录的长度信息。索引表本身是一个定长文件,每个逻辑块可以是变长的,索引表和逻辑文件两者构成了索引文件。
索引文件的优点是可以进行随机访问,也易于进行文件的增删。但索引表的使用增加了存储空间的开销,另外,索引表的查找策略对文件系统的效率影响很大。
索引顺序文件是顺序文件和索引文件两种形式的结合。索引顺序文件将顺序文件中的所有记录分为若干个组,为顺序文件建立一张索引表,并为每组中的第一个记录在索引表建立一个索引项,其中含有该记录的关键字和指向该记录的指针。
索引表包含关键字和指针两个数据项,索引表中索引项按照关键字顺序排列。索引顺序文件的逻辑文件(主文件)是一个顺序文件,每个分组内部的关键字不必有序排列,但是组与组之间的关键字是有序排列的。
索引顺序文件大大提高了顺序存取的速度,但是,仍然需要配置一个索引表,增加了存储开销。
建立关键字和相应记录物理地址之间的对应关系,这样就可以直接通过关键字的值找到记录的物理地址,也就是说,关键字的值决定了记录的物理地址,这种结构的文件称为直接文件。这种映射结构不同于顺序文件或索引文件,没有顺序的特性。
散列文件是一种典型的直接文件。通过散列函数对关键字进行转换,转换结果直接决定记录的物理地址。散列文件有很高的存取速度,但是会因不同关键字的散列函数值相同而引起冲突。
计算机系统中的文件种类繁多、数量庞大,为了有效管理这些文件,以方便用户查找所需文件,应对它们进行适当的组织。文件的组织可以通过目录来实现。文件说明的集合称为文件目录。目录最基本的功能就是通过文件名存取文件。
通常,文件目录也作为一个文件来处理,称为目录文件。由于文件系统中一般有很多文件,文件目录也很大,因此文件目录并不放在主存中,而是放在外存中。
文件控制块
从文件管理的角度看,文件由文件控制块 (File Control Block,FCB)和文件体两部分组成。文件体即文件本身,而文件控制块(又称为文件说明)则是保存文件属性信息的数据结构,它包含的具体内容因操作系统而异,但至少应包含以下信息。
索引结点
在检索目录文件的过程中,只用到了文件名,仅当找到匹配目录项时,才需要从该目录项中读出该文件的物理地址。也就是说,在检索目录时,文件的其他描述信息是不会被用到的,因而也不需要调入内存。因此,有些系统采用了文件名与文件描述信息分开的方法,将文件描述信息单独形成一个索引结点,简称 i 结点。文件目录中的每个目录项仅由文件名和指向该文件i结点的指针构成。
存放在磁盘上的索引结点称为磁盘索引结点。每个文件都有唯一的磁盘索引结点,其主要包括以下内容。
当文件被打开时,磁盘索引结点被复制到内存的索引结点中,以便使用。存放在内存中的索引结点称为内存索引结点,其增加了以下内容。
单级目录结构(或称为一级目录结构)是最简单的目录结构。在整个文件系统中,单级目录结构只建立一张目录表,每个文件占据其中的一个表目。
当建立一个新文件时,首先应确定该文件名在目录中是否唯一,若与已有的文件名没有冲突,则从目录表中找出一个空表目,将新文件的相关信息填入其中。在删除文件时,系统先从目录表中找到该文件的目录项,从中找到该文件的物理地址,对文件占用的存储空间进行回收,然后再清除它所占用的目录项。当对文件进行访问时,系统先根据文件名去查找目录表以确定该文件是否存在,若文件存在,则找出文件的物理地址,进而完成对文件的操作。
单级目录结构的优点是易于实现,管理简单,但是存在以下缺点。
不允许文件重名(这个很显然)。单级目录下的文件,不允许和另一个文件有相同的名字。但对于多用户系统来说,这又是很难避免的。即使是单用户环境,当文件数量很大时也很难弄清到底有哪些文件,这就导致文件系统极难管理。
文件查找速度慢。对稍具规模的文件系统来说,由于其拥有大量的目录项,因此查找一个指定的目录项可能花费较长的时间。
二级目录结构将文件目录分成主文件目录和用户文件目录。系统为每个用户建立一个单独的用户文件目录 (User File Directory,UFD),其中的表项登记了该用户建立的所有文件及其说明信息。主文件目录(Master File Directory,MFD)则记录系统中各个用户文件目录的情况,每个用户占一个表目,表目中包括用户名及相应用户目录所在的存储位置等。这样就形成了二级目录结构。
当用户要访问一个文件时,系统先根据用户名在主文件目录中查找该用户的文件目录,然后根据文件名在其用户文件目录中找出相应的目录项,从中得到该文件的物理地址,进而完成对文件的访问。
当用户要建立一个文件时,若为新用户,即主文件目录表中无此用户的相应登记项,则系统为其在主目录中分配一个表目,并为其分配存放用户文件目录的存储空间,同时在用户文件目录中为新文件分配一个表目,然后在表目中填入有关信息。
文件删除时,只需在用户文件目录中删除该文件的目录项。若删除后该用户目录表为空则表明该用户已脱离了系统,从而可以将主文件目录表中该用户的对应项删除。
为了便于系统和用户更灵活、方便地组织管理和使用各类文件,将二级目录的层次关系加以推广,便形成了多级目录结构,又称为树形目录结构。
在树形目录结构中,第一级目录称为根目录(树根),目录中的非叶子结点均为目录文件(又称为子目录),叶子结点为文件。系统会为每个文件赋予唯一的标识符(内部标识符),该标识符对用户是透明的。
树形目录结构引入了以下概念
树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是在树形目录中查找一个文件,需要按照路径名逐级访问中间结点,增加了磁盘访问次数,进而影响了查询速度。
树形目录结构便于实现文件分类,但是不便于实现文件共享,为此,在树形目录结基础上增加了一些指向同一结点的有向边,使整个目录成为一个有向无环图。这就是图形录结构,引入这种结构的目的是实现文件共享。
当某用户要求删除一个共享结点时,系统不能将其简单地删除,否则会导致其他用户访问时找不到结点。为此,可以为每个共享结点设置一个共享计数器,每当增加对该结点的共享链时,计数器加 1;每当有用户提出删除该结点时,计数器减1。仅当共享计数为0时,才能真正除该结点,否则仅删除提出删除请求用户的共享链。
实现文件共享是文件系统的重要功能。文件共享是指不同的用户可以使用同一个文件。文件共享可以节省大量的外存空间和主存空间,减少输入/输出操作,为用户间的合作提供便利条件。文件共享并不意味着用户可以不加限制地随意使用文件,那样文件的安全性和保密性将无法保证。也就是说,文件共享应该是有条件的,是要加以控制的。因此,文件共享要解决两个问题:一是如何实现文件共享;二是对各类需要共享的用户进行存取控制。
传统树形目录文件的共享是由不同用户通过将各自文件的FCB设置成相同的物理地址来实现的,即不同的目录项指向同样的几个物理块。而当其中一个目录项进行了添加物理块的操作(在文件中增加了新的内容)后,另一个目录项中却并没有增加,所以新增的物理块不能被两个目录项所共享。
索引结点是把FCB 中的文件描述信息单独构成一个数据结构,也就是说,物理块的信息在索引结点中。此时,目录项中只有文件名和指向索引结点的指针,两个不同的目录项只需要指向相同的索引结点即可实现共享,即一个共享文件只有一个索引结点。如果不同文件名的目录项需要共享该文件,只需目录项中的指针都指向该索引结点即可。
在索引结点中再增加一个计数值来统计指向该索引结点的目录项的个数,这样一来就需要在删除该文件时先判断计数值,只有计数值为 1 时才删除该索引结点,若计数值大于1,则把计数值减1即可。
这种方法能够实现文件的异名共享,但当文件被多个用户共享时,文件拥有者不能删除件。
该方法是创建一个称为链接的新目录项。例如,为了使得用户 B 能共享用户 C 的一个文件,可以由系统为用户 B 建立一个指向该文件的新目录项,并放在用户 B 的目录下,在新目录项中包含了被共享文件的路径名,可以是绝对路径或者相对路径。
当需要访问一个文件时,就搜索目录表,如果目录项标记为链接,那么就可以获取真正文件(或目录)的名称,再搜索目录。链接可以通过使用目项格式(或通过特殊型)而加以标记,其实际上是具有名称的间接指针。在遍历目录树时,系统忽略这些链接以维护系统的无环结构。
在利用符号链方式实现文件共享时,只有文件拥有者才拥有指向其索引结点的指针;而共享该文件的其他用户只有该文件的路径名,并不拥有指向其索引结点的指针。这样就不会发生在文件拥有者删除共享文件后留下悬空指针的情况。当文件拥有者把一个共享文件删除后,其他用户试图通过符号链去访问一个已被删除的共享文件时,会因系统找不到该文件而使访问失败,于是再将符号链删除,此时不会产生任何影响。符号链方式有一个很大的优点,就是它能够用于链接(通过计算机网络)世界上任何地方的计算机中的文件,此时只需提供该文件所在机器的网络地址以及该机器中的文件路径即可。
文件保护用来防止文件受到物理破坏和非法访问。
对文件的保护可以从限制对文件的访问类型出发,可以加以控制的访问类型有读、写、执行、添加、删除、列表清单(列出文件名和文件属性) 等。此外,还可以对文件的重命名、复制、编辑等加以控制。
访问控制就是对不同的用户访问同一个文件采取不同的访问类型。根据用户的权限不同,可以把用户划分为拥有者、工作组用户、其他用户等。然后对不同的用户组采取不同的访问类型,以防文件被非法访问。
访问控制通常有 4 种方法:访问控制矩阵、访问控制表、用户权限表以及口令与密码。
访问控制矩阵、访问控制表和用户权限表这 3 种方法比较类似,它们都是采用某种数据结构记录每个用户或用户组对于每个文件的操作权限,在访问文件时通过检查这些数据结构来看用户是否具有相应的权限来对文件进行保护。而口令与密码是另外一种访问控制方法。
口令指用户在建立一个文件时提供一个口令,系统为其建立FCB 时附上相应口令,用户请求访问时必须提供相应口令。这种方法的开销较小,但是口令直接存储在系统内部,不够安全。
密码指用户对文件进行加密,文件被访问时需要使用密钥。这种方法的保密性强,节省存储空间,但编码和译码要花费一定时间。
文件系统是指操作系统中与文件管理有关的软件和数据的集合。从系统角度看,文件系统是对文件的存储空间进行组织和分配,负责文件的存储并对存入文件进行保护和检索的系统。具体来说,它负责为用户建立、撤销、读写、修改和复制文件。从用户角度看,文件系统主要实现了按名存取。也就是说,当用户要求系统保存一个已命名文件时,文件系统根据一定的格式将用户的文件存放到文件存储器中适当的地方;当用户要求使用文件时,系统能够根据用户所给的文件名从文件存储器中找到所要的文件。
文件系统一种合理的层次结构可分为用户接口、文件目录系统、存取控制验证、逻辑文件系统与文件信息缓冲区和物理文件系统。
最为简单的目录实现方法是使用存储文件名和数据块指针的线性表(数组、链表等)。创建新文件时,必须首先搜索目录表以确定没有同名的文件存在,接着在目录表后增加一个目录项。若要删除文件,根据给定的文件名搜索目录表,接着释放分配给它的空间。采用链表结构可以减少删除文件的时间,其优点在于实现简单,不过由于线性表需要采用顺序方法查找特定的项,故运行比较费时。
散列表根据文件名得到一个值,并返回一个指向线性表中元素的指针。这种方法大大缩短了查找目录的时间,插入和删除也比较简单,不过需要一些措施来避免冲突(两个不同名文件的散列函数值相同)。这种方法的特点是散列表长度固定以及散列函数对表长的依赖性。
文件的实现主要是指文件在存储器上的实现,即文件物理结构的实现,包括外存分配方式与文件存储空间的管理。
文件的物理结构是指一个文件在外存上的存储组织形式,与外存分配方式有关。外存分配方式指的是如何为文件分配磁盘块。采用不同的分配方式将形成不同的文件物理结构。
一般来说,外存的分配采用两种方式:静态分配和动态分配。静态分配是在文件建立时次性分配所需的全部空间;而动态分配则是根据动态增长的文件长度进行分配,甚至可以一次分配一个物理块。在分配区域大小上,也可以采用不同方法。可以为文件分配一个完整的区域以装下整个文件,这就是文件的连续分配。但文件存储空间的分配通常以块或簇(几个连续物理块称为簇,一般是固定大小)为单位。
常用的外存分配方法有连续分配、链接分配和索引分配。
连续分配
连续分配是最简单的磁盘空间分配策略,该方法要求为文件分配连续的磁盘区域,在这种分配算法中,用户必须在分配前说明待创建文件所需的存储空间大小,然后系统查找空闲区的管理表格,查看是否有足够大的空闲区供其使用。如果有,就给文件分配该文件就不能建立,用户进程必须等待。所需的存储空间:如果没有,该文件就不能建立,用户进程必须等待。
采用连续分配方式时,可把逻辑文件中的记录顺序地存储到相邻的物理盘块中,这样所形成的文件结构称为顺序文件结构,此时的物理文件称为顺序文件。这种分配方式保证了逻辑文件中的记录顺序与存储器中文件占用盘块的顺序一致。
连续分配的优点是查找速度比其他方法快(只需要起始块号和文件大小),目录中关于文件物理存储位置的信息也比较简单。其主要缺点是容易产生碎片,需要定期进行存储空间的紧缩。
链接分配
对于文件长度需要动态增减以及用户事先不知道文件大小的情况,往往采用链接分配这种分配策略有以下两种实现方案。
隐式链接。该实现方案用于链接物理块的指针隐式地放在每个物理块中,目录项中有指向索引顺序文件的第一块盘块和最后一块盘块的指针,此外每个盘块中都含有指向下一盘块的指针。若要访问某一个盘块,需要从第一个盘块开始一个个盘块都读出指针来,所以存在随机访问效率低的问题,由于其中任何一个盘块的指针错误都会导致后面的盘块的位置丢失,因此这种实现方案的可靠性较差。
显式链接。该实现方案用于链接物理块的指针显式存放在内的一张链接表中,每个磁盘设置一张链接表。这个表又称为文件分配表 (File Allocation Table,FAT),MS-DOS、Windows 和0S/2 等操作系统都用了FAT。由于还是链接方式,因此在 FAT中找一个记录的对应物理块地址时还是需要一个个找下去,不能随机查找。但是与隐式链接相比,该方案是在内存中而非在磁盘中查找,所以能节省不少时间。
链接分配的优点是简单(只需起始位置),文件创建与增长容易实现。其缺点是不能随机访问盘块,链接指针会占用一些存储空间,而且存在可靠性问题。
索引分配
链接分配方式虽然解决了连续分配方式中存在的问题,但又出现了新的问题。首先,当要求随机访问文件中的一个记录时,需要按照链接指针依次进行查找,这样查找十分缓慢。其次,链接指针要占用一定数量的磁盘空间。为了解决这些问题,引入了索引分配方式。在索引分配方式中,系统为每个文件分配一个索引块,索引块中存放索引表,索引表中的每个表项对应分配给该文件的一个物理块。
索引分配方式不仅支持直接访问,而且不会产生外部碎片,文件长度受限制的问题也得到了解决。其缺点是由于索引块的分配,增加了系统存储空间的开销。对于索引分配方式,索引块的大小选择是一个很重要的问题。为了节约磁盘空间,希望索引块越小越好,但索引块太小则无法支持大文件,所以要采用一些技术来解决这个问题。另外,存取文件需要两次访问外存一一首先读取索引块的内容,其次再访问具体的磁盘块,因而降低了文件的存取速度。
为了更有效地使用索引表,避免访问索引文件时两次访问外存,可以在访问文件时先将索引表调入内存中,这样,文件的存取就只需要访问一次外存了。
当文件很大时,文件的索引表会很大。如果索引表的大小超过了一个物理块,可以将索引表本身作为一个文件,再为其建立一个“索引表”,这个“索引表”作为文件索引的索引,从而构成了二级索引。第一级索引表的表目指向第二级索引,第二级索引表的表目指向文件信息所在的物理块号。依次类推,可逐级建立索引,进而构成多级索引。
为了实现空闲存储空间的管理,系统应该记录空闲存储空间的情况,以便实施存储空间的分配。
下面介绍几种常用的空闲存储空间管理方法。
空闲文件表法
文件存储设备上的一个连续空闲区可以看作一个空闲文件(又称为空白文件或自由文件)。空闲文件表方法为所有空闲文件单独建立一个目录,每个空闲文件在这个目录中占一个表目。表目的内容包括第一个空闲块号、物理块号和空闲块数目。
当某用户请求分配存储空间时,系统依次扫描空闲文件目录,直到找到一个满足要求的空闲文件为止。当用户撤销一个文件时,系统回收该文件所占用的空间。这时也需要顺序扫描空闲文件目录,寻找一个空表目,并将释放空间的第一个物理块号及它所占的块数填到这个表目中。
这种空闲文件目录方法类似于内存动态分区的管理。当请求的块数正好等于某个目录表目中的空闲块数时,就把这些块全部分配给该文件并把该表目标记为空。若该项中的块数多于请求的块数,则把多余的块号留在表中,并修改该表目中的各项。同样,在释放过程中,若被释放的物理块号与某一目录项中的物理块号相邻,则还要进行空闲文件的合并。仅当文件存储空间中只有少量空闲文件时,这种方法才有较好的效果。若存储空间中有大量的小空闲文件,则空闲文件目录将变得很大,其效率将大为降低。这种管理方法仅适用于连续文件。
空闲块链表法
空闲块链表法是将文件存储设备上的所有空闲块链接在一起,形成一条空闲块链,并设置一个头指针指向空闲块链的第一个物理块。当用户建立文件时,就按需要从链首依次取下几个空闲块分配给文件。当撤销文件时,回收其存储空间,并将回收的空闲块依次链入空闲块链表中。也可以将链表中的空闲盘块改为空闲盘区(每个空闲盘区包含若干个连续的空闲盘块)这样的链称为空闲盘区链。其中,在每个盘区上除了含有用于指示下一个空闲盘区的指针外还应含有能指明本盘区大小的信息。分配盘区的方法与内存的动态分区分配类似,通常采用首次适应算法。在回收盘区时,同样也要将回收区与相邻接的空闲盘区合并。
位示图法
位示图法是为文件存储器建立一张位示图。在位示图中,每一个二进制位都对应一个物理块,若某位为 1,表示对应的物理块已分配:若为0,则表示对应的物理块空闲。
当请求分配存储空间时,系统顺序扫描位示图并按需要从中找出一组值为0的二进制位再经过简单的换算就可以得到相应的盘块号,然后将这些位变为1。当回收存储空间时,只需要将位示图的相应位清0 即可。
位示图的大小由磁盘空间的大小(物理块总数确定,因为位示图仅用一个二进制位代表一个物理块,所以它通常比较小,可以保存在主存中,这就使得存储空间的分配与回收较快。但这种方法在实现时,需要进行位示图中二进制所在位置与盘块号之间的转换。
成组链接法(UNIX的文件存储空间管理方法)
成组链接法适用于大型文件系统。该方法将一个文件的所有空闲块按每组 100块分成干组,把每一组的盘块数目和该组的所有盘块号记入到前一组的第一个盘块中,第一组的盘块数目和第一组的所有盘块号记入到超级块中。这样每组的第一个盘块就链接成了一个链表,而组内的多个盘块形成了堆栈。每组的第一块是存放下一组的块号的堆栈,堆栈是临界资源,每次只能允许一个进程访问,所以系统设置了一把锁来对其互斥地访问。
成组链接法占用的空间小,而且超级块不大,可以放在内存中,这样使得大多数分配和回收空闲盘块的工作在内存中进行,提高了效率。
磁盘是典型的直接存取设备,这种设备允许文件系统直接存取磁盘上的任意物理块。磁盘机一般由若干磁盘片组成,可沿一个固定方向高速旋转。每个盘面对应一个磁头,磁臂可以沿着半径方向移动。磁盘上的一系列同心圆称为磁道,磁道沿径向又分成大小相等的多个扇区,盘片上与盘片中心有一定距离的所有磁道组成了一个柱面,因此,磁盘上的每个物理块都可以用柱面号、磁头号和扇区号来表示。
访问时间Ta=寻道时间+旋转延迟+传输时间
寻道时间Ts
磁盘接收到读指令后,磁头从当前位置移动到目标磁道位置所需的时间为寻道时间 Ts。该时间是启动磁臂的时间 s 与磁头移动 n 条磁道所花费时间的总和,m为每移动一个磁道所需时间
Ts=s+n×m
旋转延迟Tr
旋转磁盘、定位数据所在的扇区所需的时间为旋转延迟 Tr。设磁盘的旋转速度为r,则
Tr=(1/r)/2=1/(2r)
Tr的物理意义就是磁盘旋转半周的时间
传输时间Tt
从磁盘上读取数据的时间为传输时间 Tt。传输时间取决于每次读写的字节数 b 和磁盘的旋转速度,即
Tt=b/(rN)
r为转速;N为一个磁道上的字节数。
磁盘是可以被多个进程共享的设备。当有多个进程都请求访问磁盘时,应采用一种适当的调度算法,以使各进程对磁盘的平均访问时间(主要是寻道时间) 最短。
FCFS算法是一种最简单的磁盘调度算法。该算法按进程请求访问磁盘的先后次序进行调度。该算法的特点是合理、简单,但未对寻道进行优化。
算法选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。该算法的寻道性能比 FCFS 算法好,但不能保证平均寻道时间最短,并且可能会使某些进程的请求总被其他进程的请求抢占而长期得不到服务(这种现象称为“饥饿”。
算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。由于这种算法中磁头移动的规律颇似电梯的运行,故也称为电梯调度算法。算法具有较好的寻道性能,又避免了“饥饿”现象,其对两道请求比较不公平(通常两端请求都是最后得到服务)。
算法是对 SCAN 算法的改良,它规定磁头单向移动,例如,自里向外移动,当磁头移到最外磁道时立即返回到最里碰道,如此循环进行扫描。该算法消除了对两端磁道请求的不公平。
一个新的磁盘只是一个含有磁性记录材料的空白盘。在磁盘能存储数据前,它必须分成扇区以便磁盘控制器能进行读和写操作,这个过程称为低级格式化。低级格式化为磁盘的每个扇区采用独特的数据结构。每个扇区的数据结构通常由头部、数据区域(通常为512B)和尾部组成。头部和尾部包含了一些磁盘控制器所使用的信息。
为了使用磁盘存储文件,操作系统还需要将自己的数据结构记录在磁盘上。
计算机启动时需要运行一个初始化程序(自举程序),它初始化 CPU、寄存器、设备控制器和内存等,接着启动操作系统。为此,该自举程序应找到磁盘上的操作系统内核,装入内存,并转到初始地址,从而开始操作系统的运行。
自举程序通常保存在 ROM 中,为了避免改变自举代码需要改变 ROM 硬件的问题,只在ROM 中保留很小的自举装入程序,而将功能完整的自举程序保存在磁盘的启动块上,启动块位于磁盘的固定位。拥有启动分区的磁盘称为启动磁盘或系统磁盘。
由于硬件有移动部件且容错能力差,因此容易导致一个或多个扇区损坏。根据所使用的磁盘和控制器,对这些块有多种处理方式。