操作系统(四)——文件管理

四、文件管理

知识框架:
《操作系统(四)——文件管理》

4.1.1 文件的概念

1、文件的定义

文件是以计算机硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序等等。
在系统运行时,计算机以进程为基本单位进行资源的调度和分配;而在用户进行的输入、输出中,则以文件为基本单位。
操作系统中的文件系统就是用于实现用户的文件管理需求。
首先了解文件的结构,我们通过自底向上的方式来定义:

  • **数据项。**数据项是文件系统中最低级的数据组织形式,可以分为以下两种类型:
    基本数据项:用于描述一个对象的某种属性的一个值,如名字、日期或证件号等,是数据中可命名的最小逻辑单位,即原子数据。
    组合数据项:由多个基本数据项组成。
  • **记录。**记录是一组相关的数据项的集合,用于描述一个对象在某方面的属性,如一个考生报名记录包括考生姓名、出生日期、报考学校代号、身份证号等一系列域。
  • **文件。**文件是指由创建者所定义的一组相关信息的集合,逻辑上可分为有结构文件和无结构文件两种。有结构文件由一组相似记录组成,又称为记录式文件;而无结构文件则被看成是一个字符流,比如一个二进制文件或字符文件,又称为流式文件。
    虽然给出了结构化的表述,但实际上关于文件并无严格的定义。通常在操作系统中将程序和数据组织成文件,文件可以是数字、字母或二进制代码,基本访问单元可以是字节、行或记录。
2、文件的属性

文件有一定的属性,这根据系统的不同而有所不同,但是通常都包括如下属性:

  • 名称:文件名称唯一,以容易读取的形式保存。
  • 标识符:标识文件系统内文件的唯一标签,通常为数字,它是对人不可读的一种内部名称。
  • 类型:被支持不同类型的文件系统所使用。
  • 位置:指向设备和设备上文件的指针。
  • 大小:文件当前大小(用字节、字或块表示),也可以包含文件允许的最大值。
  • 保护:对文件进行保护的访问控制信息。
  • 时间、日期和用户标识:文件创建、上次修改和上次访问的相关信息,用于保护、安全和跟踪文件的使用。
    所有文件的信息都保存在目录结构中,而目录结构也保存在外存上。文件信息需要时再调入内存。通常,目录条目包括文件名称及其唯一标识符,而标识符定位其他属性的信息。
3、文件的基本操作

操作系统提供系统调用,它对文件进行创建、写、读、定位和截断。

  • 1、创建文件:有两个必要步骤,一是在文件系统中找到空间;二是在目录中为新文件创建条目,该条目记录文件名称、在文件系统中的位置及其他可能信息。
  • 2、写文件:为了写文件,执行一个系统调用,指明文件名称和要写入文件的内容。对于给定文件名称,系统搜索目录以查找文件位置。系统必须为该文件维护一个写位置的指针。每当发生写操作,便更新写指针。
  • 3、读文件:为了读文件,执行一个系统调用,指明文件名称和要读入文件块的内存位置。同样,需要搜索目录以找到相关目录项,系统维护一个读位置的指针。每当发生读操作时,更新读指针。一个进程通常只对一个文件读或写,所以当前操作位置可以作为每个进程当前文件位置指针。由于读和写操作都使用同一指针,节省了空间也降低了系统复杂度。
  • 4、文件重定位:即文件寻址,按某条件搜索目录,将当前文件系统设定为给定值,且不会读、写文件。
  • 5、删除文件:先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。
  • 6、截断文件:允许文件所有属性不变,并删除文件内容,即将其长度设为0并释放空间。
4、文件的打开与关闭

每次打开文件都有如下关联信息:

  • 文件指针:系统跟踪上次读写位置作为当前文件位置指针,这种指针对打开文件的某个进程来说是唯一的,因此必须与磁盘文件属性分开保存。
  • 文件打开计数:文件关闭时,操作系统必须重用其打开文件表条目,否则表内空间会不够用。因为多个进程可能打开同一个文件,所以系统在删除打开文件条目之前,必须等待最后一个进程关闭文件。该计数器跟踪打开和关闭的数量,当该计数为0时,系统关闭文件,删除该条目。
  • 文件磁盘位置:绝大多数文件操作都要求系统修改文件数据。该信息保存在内存中,以免为每个操作都从磁盘读取。
  • 访问权限:每个进程打开文件都需要有一个访问模式(创建、只读、读写、添加等)。该信息保存在进程的打开文件表中,以便操作系统能允许或拒绝之后的I/O请求。

4.1.2 文件的逻辑结构

**文件的逻辑结构是从用户观点出发看到的文件的组织形式。文件的物理结构是从实现的观点出发,又称为文件的存储结构,是指文件在外存上的存储组织形式。**文件的逻辑结构与存储介质特性无关,但文件的物理结构与存储介质的特性有很大的关系。
按照逻辑结构,文件有无结构文件和有结构文件两种类型:

1、无结构文件(流式文件)

无结构文件将数据按顺序组织成记录并积累保存,它是有序相关信息项的集合,以字节为单位。对于无结构文件没有结构,因而对记录的访问只能通过穷举搜索的方式,故这种文件形式对大多数不适用。但字节流的无结构文件管理简单,用户可以方便地对其进行操作。所以,那些基本信息单位操作不多的文件较适用于采用字节符流的无结构方式,如源程序文件、目标代码文件等。

2、有结构文件(记录式文件)

有结构文件按记录的组织形式可以分为:

  • **顺序文件。**记录顺序排列,记录可以定长或边长,可以顺序存储或以链表形式存储,在访问时需要顺序搜索文件。顺序文件有以下两种结构:
    第一种是串结构,记录之间的顺序与关键字无关。通常的办法是由时间决定,即按存入时间的先后排列,最先存入的记录作为第一个记录,其次存入的为第二个记录,依此类推。
    第二种是顺序结构,指文件中的所有记录按关键字顺序排列。
    在对记录进行批量操作时,即每次要读或写一大批记录,对顺序文件的效率时所有逻辑文件中最高的;此外,也只有顺序文件才能存储在磁带上,并能有效地工作,但顺序文件对查找、修改、增加或删除单个记录的操作比较困难。
  • 索引文件。对于定长记录文件,如果要查找第i个记录,可直接计算。变长记录文件只能顺序查找,系统开销较大。为此,可建立一张索引表以加快检索速度,索引表本身是定长记录的顺序文件,在记录很多或是访问要求高的文件中,需要引入索引以提供有效的访问。实际中,通过索引可以成百上千倍地提高访问速度。
  • 索引顺序文件。是顺序和索引两种组织形式的结合,如果记录数多,可以采用两级或多级索引。索引文件和索引顺序文件都提高了存取的速度,但因为配置索引表而增加了存储空间。
  • 直接文件或散列文件。给定记录的键值或通过Hash函数转换的键值直接决定记录的物理位置。这种映射条件不同于顺序文件或索引文件,没有顺序的特性。散列文件有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同。

4.1.3 目录结构

与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的信息,包括属性、位置和所有权等,这些信息主要由操作系统进行管理。
目录管理的基本要求:
从用户的角度看,目录在用户(应用程序)所需要的文件名和文件之间提供一种映射,所以目录管理要实现“按名存取”;
目录存取的效率直接影响到系统的性能,所以要提高对目录的检索速度;
在共享系统中,目录还需要提供用于控制访问文件的信息;
文件允许重名也是用户的合理和必然要求,目录管理通过树形结构来解决和实现。

1、文件控制块和索引结点

与进程管理一样,为了实现目录管理,操作系统中引入了文件控制块的数据结构。
**1)文件控制块。**文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”。FCB的有序结合称为文件目录,一个FCB就是一个文件目录项。为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,成为目录项。
FCB主要包含以下信息:

  • 基本信息,如文件名、文件的物理位置、文件的逻辑位置、文件的物理结构等。
  • 存取控制信息,如文件存取权限等。
  • 使用信息,如文件建立时间、修改时间等。
    **2)索引结点。**在检索文件目录的过程中,只用到了文件名,仅当找到了一个目录项(查找文件名与目录项中文件名匹配)时,才需要从该目录项中读出该文件的物理地址。也就是说,在检索目录时,文件的其他描述信息不会用到,也不需要调入内存。因此,有的系统(如UNIX)采用了文件名和文件描述信息分开的方法,文件描述信息单独形成一个称为索引结点的数据结构,简称为i结点。在文件目录中的每一个目录项仅由文件名和指向该文件所对应的i结点的指针构成。
    存放在磁盘的索引结点称为磁盘索引结点,UNIX中的每一个文件都有一个唯一的磁盘索引结点,主要包括以下几个方面:
  • 文件主标识符,拥有该文件的个人或小组标识符。
  • 文件类型,包括普通文件、目录文件或特别文件。
  • 文件存取权限,各类用户对该文件的存取权限。
  • 文件物理地址,每个索引结点中含有13个地址项,它们以直接或简介方式给出数据文件所在盘块的编号。
  • 文件长度,以字节为单位。
  • 文件链接计数,在本文件系统中所有指向该文件的文件名指针计数。
  • 文件存取时间,本文件最近被进程存取的时间、最近被修改的时间以及索引结点最近被修改的时间。
    文件被打开时,磁盘索引结点复制到内存的索引结点中,以便于使用,在内存索引结点中又增加了以下内容:
  • 索引结点编号,用于标识内存索引结点。
  • 状态,指示i结点是否上锁或被修改。
  • 访问计数,每当有一进程要访问此i结点时,计数加1,访问结束减1。
  • 逻辑设备号,文件所属文件系统的逻辑设备号。
  • 链接指针,设置分别指向空闲链表和散列队列的指针。
2、目录结构

在理解一个文件系统的需求前,我们首先来考虑在目录这个层次上所需要执行的操作,这有助于后面文件系统的整体理解。

  • 搜索:当用户使用一个文件时,需要搜索目录,以找到该文件的对应目录项。
  • 创建文件:当创建一个新文件时,需要在目录中增加一个目录项。
  • 删除文件:当删除一个文件时,需要在目录中删除相应的目录项。
  • 显示目录:用户可以请求显示目录的内容,如显示该用户目录中的所有文件及属性。
  • 修改目录:某些文件属性保存在目录中,因而这些属性的变化需要改变相应的目录项。
    操作时,考虑以下几种目录结构:

1) 单级目录结构。在整个文件系统中只建立一张目录表,每个文件占一个目录项。
当访问一个文件时,先按文件名在该目录中查找到相应的FCB,经合法检查后执行相应的操作。当建立一个新文件时,必须先检索所有目录项以确保没有“重名”的情况,然后在该目录中增设一项,把FCB的全部信息保存在该项中。当删除一个文件时,先从该目录中找到该文件的目录项,回收该文件所占用的存储空间,然后再清除该目录项。
单级目录结构实现了“按名存取”,但是在存在查找速度慢、文件不允许重名、不便于文件夹共享等缺点,而且对于多用户的操作系统显然是不合适的。
2)两级目录结构。将文件目录分成主文件目录和用户文件目录两级。主文件目录项记录用户名及相应用户文件目录所在的存储位置。用户文件目录项记录该用户文件的FCB信息。当某用户想要对其文件进行访问时。只需要搜索该用户对应的UFD,这既解决了不同用户文件的“重名”问题,也在一定程度上保证了文件的安全。
两级目录结构可以解决多用户之间的文件重新问题,文件系统可以在目录上实现访问限制,但是两级目录结构缺乏灵活性,不能对文件分类。
3)多级目录结构(树形目录结构)。用户要访问某个文件时用文件的路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件的通路上的所有目录名与数据文件名用分隔符“/”链接起来而成。从根目录出发的路径称为绝对路径。当层次较多时,每次从根目录查询浪费时间,于是加入了当前目录,进程对各文件的访问都是相对于当前目录进行的,当用户要访问某个文件时,使用相对路径标识文件,相对路径由从当前目录出发到所找文件通路上所有目录名与数据文件名用分隔符“/”链接而成。
树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能更有效地进行文件的管理和保护。但是,在树形目录中查找一个文件,需要按路径名逐级访问中间结点,这就增加了磁盘访问次数,无疑将影响查询速度。
4)无环图目录结构。树形目录结构可便于实现文件分类,但不便于实现文件共享,为此在树形目录结构的基础上增加了一些指向同一结点的有向边,使整个目录成为一个有向无环图。引入无环图 目录结构是为了实现文件共享。
共享文件(或目录)不同于文件拷贝(副本)。如果有两个文件拷贝,每个程序员看到的是拷贝而不是原件;但如果一个文件被修改,那么另一个程序员的拷贝不会有改变。对于共享文件,只存在一个真正文件,任何改变都会为其他用户所见。
无环图目录结构方便实现了文件的共享,但使得系统的管理变得复杂。

4.1.4 文件共享

现代常用的两种文件共享方法有:

1、基于索引结点的共享方式(硬链接)

在树形结构的目录中,当有两个或多个用户要共享一个子目录或文件时,必须将共享文件或子目录链接到两个或多个用户的目录中,才能方便地找到该文件。
这种共享方式中引用索引结点,即诸如文件的物理地址及其他的文件属性等信息,不再是放在目录项中,而是放在索引结点中。在文件目录中只设置文件名及指向相应索引结点的指针。在索引结点中还应有一个链接计数count,用于表示链接到本索引结点(亦即文件)上的用户目录项的数目。当count=2时,表示有两个用户目录项链接到本文件上,或者说是有两个用户共享此文件。

2、利用符号链实现文件共享(软链接)

为使用户B能共享用户A的一个文件F,可以由系统创建一个LINK类型的新文件,也取名为F,并将文件F写入用户B的目录中,以实现用户B的目录与文件F的链接。在新文件中只包含被链接文件F的路径名。这样的链接方法被称为符号链接。新文件中的路径名则只被看做是符号链,当用户B要访问被链接的文件F且正要读LINK类新文件时,操作系统根据新文件中的路径名去读该文件,从而实现了用户B对文件F的共享。
在利用符号链方式实现文件共享时,只有文件的拥有者才拥有指向其索引结点的指针,而共享该文件的其他用户则只有该文件的路径名,并不拥有指向其索引结点的指针。这样也就不会发生在文件主删除一共享文件后留下一悬空指针的情况。当文件的拥有者把一个共享文件删除后,其他用户通过符号链去访问它时,会出现访问失败,于是将符号链删除,此时不会产生任何影响。
利用符号链实现文件共享仍然存在问题,例如:一个文件采用符号链方式共享,当文件拥有者将其删除,而在共享的其他用户使用其符号链接访问该文件之前,又有人在同一路径下创建了另一个具有同样名称的文件,则该符号链将仍然有效,但访问的文件已经改变,从而导致错误。
在符号链的贡献方式中,当其他用户读共享文件时,需要根据文件路径名逐个地查找目录,直至找到该文件的索引结点。因此,每次访问时,都可能要多次读盘,使得访问文件的开销变大并增加了启动磁盘的频率。此外,符号链的索引结点也要耗费一定的磁盘空间。
符号链方式有一个很大的优先,即网络共享只需要提供该文件所在及其的网络地址以及该机器中的文件路径即可。

上述两种链接方式都存在一个共同的问题,即每个共享文件都有几个文件名。换言之,每增加一条链接,就增加一个文件名。这实质上就是每个用户都使用自己的路径名去访问共享文件,当我们试图去遍历整个文件系统时,将会多次遍历到该共享文件。
硬链接和软链接都是文件系统中的静态共享方法,在文件系统中还存在着另外的共享需求,即两个进程同时对同一个文件进行操作,这样的共享可以称为动态共享。硬链接的查找速度会比软链接快。

4.1.5 文件保护

为了防止文件共享可能会导致文件被破坏或未经核准的用户修改文件,问价系统必须控制用户对文件的存取,即解决对文件的读、写、执行的许可问题。为此,必须在文件系统中建立相应的文件保护机制。
文件保护通过口令保护、加密保护和访问控制等方式实现。其中,口令保护和加密保护是为了防止用户文件被他人存取或窃取,而访问控制则用于控制用户对文件的访问方式。

1、访问类型

读、写、执行、添加、删除、列表清单 重命名、复制、编辑等
高层的功能可以通过系统程序调用低层系统调用来实现。保护可以只在低层提供。例如,复制问价可以利用一系列的读请求来完成。这样,具有读访问用户同时也具有复制和打印的权限了。

2、访问控制

解决访问控制最常用的方法是根据用户身份进行控制。而实现基于身份访问的最为普通的方法是为每个文件和目录增加一个访问控制列表(ACL),以规定每个用户名及其所允许的访问类型。
这种方法的优点是可以使用复杂的访问方法。其缺点是长度无法预计并且可能导致复杂的空间管理,使用精简的访问列表可以解决这个问题。
精简的访问列表采用拥有者、组和其他三种用户类型:

  • 拥有者:创建文件的用户。
  • 组:一组需要共享文件且具有类似访问的用户。
  • 其他:系统内的所有其他用户。
    这样只需要三个域列出访问列表中的这三类用户的访问权限即可。用户访问该文件时,按照拥有者所拥有的权限访问文件,如果用户和拥有者在同一个用户组则按照同组权限访问,否则只能按其他用户权限访问。UNIX系统即采用此种方法。
    口令和密码是另外两种访问控制方式。
    口令指用户在建立一个文件时提供一个口令,系统为其建立FCB时附上相应的口令,同时告诉允许共享该文件的其他用户。这种方法的时间和空间的开销不多,缺点是口令直接存在系统内部,不够安全。
    密码指用户对文件进行加密,文件被访问时需要使用密钥。这种方法保密性强,节省了存储空间,不过编译和译码要花费一定时间。
    口令和密码都是防止用户文件被他人存取或窃取,并没有控制用户对文件的访问类型。
    注意两个问题:
    1)现代操作系统常用的文件保护方法,是将访问控制列表与用户、组和其他成员访问控制方案一起组合使用。
    2)对于多级目录结构而言,不仅需要保护单个文件,而且还需要保护子目录内的文件,即需要提供目录保护机制。目录操作与文件操作并不相同,因此需要不同的保护机制。
    《操作系统(四)——文件管理》

4.2 文件系统的实现

4.2.1 文件系统层次结构

现代操作系统有多种文件系统类型(如FAT32,NTFS,ext2,ext3,ext4等),因此文件系统的层次结构也不尽相同。

1、用户调用接口

文件系统为用户提供与文件及目录有关的调用,如新建、打开、读写、关闭、删除文件,建立、删除目录等。此层由若干程序模块组成,每一模块对应一条系统调用,用户发出系统调用时,控制即转入相应的模块。

2、文件目录系统

主要功能是管理文件目录,其任务有管理活跃文件目录表、管理读写状态信息表、管理用户进程的打开文件表、管理与组织在存储设备上的文件目录结构、调用下一级存取控制模块。

3、存取控制验证

实现文件保护主要由该级软件完成,它把用户的当问要求与FCB中指示的访问控制权限进行比较,以确认访问的合法性。

4、逻辑文件系统与文件信息缓冲区

主要功能是根据文件的逻辑结构将用户要读写的逻辑记录转换成文件逻辑结构内的相应块号。

5、物理文件系统

主要功能是把逻辑记录所在的相对块号转换成实际的物理地址。

6、分配模块

主要功能是管理辅助空间,即负责分配辅存空间和回收存储空间。

7、设备管理程序模块

主要功能是分配设备、分配设备读写用缓冲区、磁盘调度、启动设备、处理设备中断、释放设备读写缓冲区、释放设备等。

4.2.2 目录实现

目录实现的基本方法由线性列表和哈希表两种,要注意目录的实现就是为了查找,因此线性列表实现对应线性查找,哈希列表实现对应散列查找。
1、线性列表
最简单的目录实现方法是使用存储文件名和数据块指针的线性表。
采用链表结构可以减少删除文件的时间,其优点在于实现简单,不过由于线性表的特殊性,比较费时。
2、哈希表
哈希表根据文件名得到一个值,并返回一个指向线性列表中元素的指针。
这种方法的优点是查找非常迅速,插入和删除也比较简单,不过需要一些预备措施来避免冲突。最大的困难是哈希表长度固定以及哈希函数对表长的依赖。
目录查询是通过在磁盘上反复搜索完成,需要不断地进行I/O操作,开销较大。所以为了减少I/O操作,把当前使用的文件目录复制到内存,以后要使用该文件时只要在内存中操作,从而降低了磁盘操作次数,提高了系统速度。

4.2.3 文件实现

文件的实现就是研究文件的物理结构,即文件数据在物理存储设备上是如何分布以及组织起来的。同一个问题有两个方面的回答,一是文件的分配方式,讲的是对磁盘非空闲块的管理,第二个方面是文件存储空间的管理,讲的是对磁盘空闲块的管理。

1、文件分配管理

文件分配对应于文件的物理结构,是指如何为文件分配磁盘块。常用的磁盘空间分配方法有三种:连续分配、链接分配和索引分配。有的系统(如RDOS操作系统)对三种方法都支持,但是更普遍的是一个系统只提供一种方法的支持。
1)连续分配。连续分配要求每个文件在磁盘上占有一组连续的块。磁盘地址定义了磁盘上的一个线性排序。这种排序使作业访问磁盘时需要的寻道数和寻道时间最小。
连续分配支持顺序访问和直接访问。其优点是实现简单、存取速度快。缺点在于,文件长度不宜动态增加,因为一个文件末尾后的盘块可能已经分配给其他文件,一旦需要增加,就需要大量移动磁盘。此外,反复增删文件会产生外部碎片(与内存管理分配方式中的碎片相似),并且很难确定一个文件需要的空间大小,因而只适用于长度固定的文件。
2)链接分配。链接分配是采取离散分配方式,消除了外部碎片,故而显著地提高了磁盘空间的利用率;又因为是根据文件的当前需求,为它分配必需的盘块,当文件动态增长时,可以动态地再为它分配磁盘块,故而无需事先知道文件的大小。此外,文件的增、删、改也非常方便。链接分配又可以分为隐式链接和显式链接两种形式。
隐式链接分配的缺点在于无法直接访问盘块,只能通过指针顺序访问文件,以及盘块指针消耗了一定的存储空间。隐式链接分配的稳定性页式一个问题,系统在运行过程中由于软件或者硬件错误导致链表中的指针丢失或损坏,会导致文件数据的丢失。
3)索引分配。链接分配解决了连续分配的外部碎片和文件大小管理的问题。但是,链接分配不能有效支持直接访问(FAT除外)。索引分配解决了这个问题,它把每个文件的所有盘块号都集中放在一起构成索引块(表)。
每个文件都有其索引块,这是一个磁盘块地址的数组。索引分配支持直接访问,且没有外部碎片的问题。其缺点是由于索引块的分配,增加了系统存储空间的开销。索引块的大小是一个重要的问题,每个文件必须有一个索引块,因此索引块应尽可能小,但索引块太小就无法支持大文件。可以采用以下机制来处理这个问题:
链接方案:一个索引块通常为一个磁盘块,因此,它本身能直接读写,为了处理大文件,可以将多个索引块链接起来。
多层索引:多层索引使第一层索引块指向第二层的索引块,第二层索引块再指向文件块。这种方法根据最大文件大小的要求,可以继续到第三层和第四层。
混合索引:将多种索引分配方式相结合的分配方式。例如,系统既采用直接地址,又采用单级索引分配方式或两级索引分配方式。

三种分配方式的比较
顺序分配
访问第n个记录:需要访问磁盘1次。
优点:顺序存取时速度快,当文件是定长时可以根据文件起始地址及记录长度进行随机访问。
缺点:文件存储要求连续的存储空间,会产生碎片,也不利于文件的动态扩充。
链接分配
访问第n个记录:需要访问磁盘n次。
优点:可以解决外存碎片的问题,提高了外存空间的利用率,动态增长较方便
缺点:只能按照文件的指针链顺序访问,查找效率低,指针信息存放消耗外存空间。
索引分配
访问第n个记录:m级需访问磁盘m+1次。
优点:可以随机访问,易于文件的增删。
缺点:索引表增加存储空间的开销,索引表的查找策略对文件系统效率影响较大。

此外,访问文件需要两次访问外存——首先要读取索引块的内容,然后再访问具体的磁盘块,因而降低了文件的存取速度。为了解决这一问题,通常将文件的索引块读入内存的缓冲区中,以加快文件的访问速度。

2、文件存储空间管理

1)文件存储器空间的划分与初始化。一般来说,一个文件存储在一个文件卷中,文件卷可以是物理盘的一部分,也可以是整个物理盘,支持超大型文件的文件卷也可以由多个物理盘组成。在一个文件卷中,文件数据信息的空间(文件区)和存放文件控制信息FCB的空间(目录区)是分离的。由于存在很多种类的文件表示和存放格式,所以现代操作系统中一般都有很多不同的文件管理模块,通过它们可以访问不同格式的逻辑卷中的文件。逻辑卷在提供文件服务前,必须由对应的文件程序进行初始化,划分好目录区和文件区,建立空闲空间管理表格及存放逻辑信息的超级块。
2)文件存储器空间管理。文件存储设备分成许多大小相同的物理块,并以块为单位交换信息,因此,文件存储设备的管理实质上是对空闲块的组织和管理,它包括空闲块的组织、分配与回收等问题。
方法有:

  • 空闲表法。属于连续分配方式,与动态分配类似,同样是采用首次适应算法、循环首次适应算法等。系统在对用户所释放的存储空间进行回收时,也采取类似于内存回收的方法,既要考虑回收区是否与空闲表中插入点的前区和后区相邻接,对相邻接者应予以合并。
  • 空闲链表法。将所有空闲盘区拉成一条空闲链,根据构成链所用的基本元素不同,可把链表分成两种形式:空闲盘块链和空闲盘区链。
  • 位示图法。利用二进制的一位来表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有一个二进制位与之对应。当其值为“0”时,表示对应的盘块空闲;当其值为“1”时,表示对应的盘块已分配。
  • 成组链接法。空闲表法和空闲链表法都不适合用于大型文件系统,因为这回使空闲表或空闲链表太大。在UNIX系统中采用的是成组链接法,这种方法结合了空闲表和空闲链表两种方法,克服了表太大的缺点。

《操作系统(四)——文件管理》

4.3 磁盘组织与管理

磁盘调度算法要解决的问题:当有多个请求同时到达的时候,操作系统就要决定要先为哪个请求服务,这就是磁盘调度算法要解决的问题。
磁盘调度算法比较
FCFS算法
优点:公平、简单
缺点:平均寻道距离大,仅应用在磁盘I/O较少的场合
最短寻道时间优先SSTF算法
优点:性能比“先来先服务”好
缺点:不能保证平均寻道时间最短,可能出现“饥饿”现象
扫描SCAN算法
优点:寻道性能较好,可避免“饥饿”现象
缺点:不利于远离磁头一端的访问请求
循环扫描C-SCAN算法
优点:消除了对两端磁道请求的不公平
缺点:——
《操作系统(四)——文件管理》

疑难点

1、磁盘结构

引导控制块(Boot Control Block)包括系统从该分区引导操作系统所需要的信息。如果磁盘没有操作系统,那么这块的内容为空。它通常为分区的第一块。UFS称之为引导块;NTFS称之为引导扇区
分区控制块(Partition Control Block)包括分区详细信息,如分区的块数、块的大小、空闲块的数量和指针、空闲FCB的数量和指针等。UFS称之为超级块;而NTFS称之为主控文件表

2、内存结构

内存分区表包含所有安装分区的信息。内存目录结构用来保存近来访问过的目录信息。对安装分区的目录,可以包括一个指向分区表的指针。

    原文作者:Eve12345678
    原文地址: https://blog.csdn.net/Eve12345678/article/details/110382304
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞