吉林大学 现代操作系统 期末复习 第四章 文件管理

4.1 文件

4.1.1文件命名

文件的具体命名规则在各个操作系统上是不同的,不过所有的现代操作系统都允许1至8个字母的字符串作为合法的文件名,通常,也允许有数字和一些特殊字符,有的系统文件区分大小写(UNIX),有的系统不区分(Dos),很多系统支持256个字符。
文件扩展名,文件扩展名通常表示文件的一些信息。在某些系统中文件只是一种约定,比如unix。而Windows关注扩展名且赋予了含义。用户可以在操作系统中注册扩展名,规定那个程序拥有扩展名,当用户点击某个文件名是,程序就会启动并运行。
请添加图片描述

4.1.2 文件结构

文件可以有很多中构造方式:字节序列,记录序列,树。
请添加图片描述

  • 字节序列:用户可以向文件加入任何内容,并以任何方便的形式命名。
  • 记录序列:文件是具有固定长度的序列,每个记录都有其内部结构
  • 树:文件由一棵记录树构成,每个记录不必具有相同的长度,记录的固定位置上有一个键字段,这棵树按键字段排序。

4.1.3文件类型

很多操作系统支持多种文件类型:普通文件,目录文件(UNIX和windows都有),字符特殊文件和块特殊文件(UNIX) 普通文件是包含有用户信息的文件,目录是管理文件系统结构的文件。
普通文件又分为ASCII文件和二进制文件,ASCll一般人可以理解,二进制难以理解。
请添加图片描述
上面两个例子都是二进制文件。

  • 一个是可执行文件,文件有五个段,文件头,正文,数据,重定位位,符号表。文件头,魔数,表明该文件是一个可执行文件
  • 另一个是存档文件,它由已经编译但没有链接的模块组合而成。

4.1.4 文件访问

  • 顺序访问:进程在这些系统中可以从头到尾读取文件的全部字节或记录,但不能跳过某些内容,也不能不按顺序读取。
  • 随机访问文件:当用磁盘存储文件时,可以不按顺序地读取文件或记录的文件叫做随机访问文件。

4.1.5文件属性

请添加图片描述

4.1.6 文件操作

create:创建不包含任何数据的文件,并设置文件的一些属性;
delete:删除文件以释放磁盘空间;
open:打开文件(把文件属性和磁盘地址表装入内存);
close:关闭文件(释放内存中文件属性和磁盘地址表空间);
read:在文件中读取数据(必须明确需要读取多少数据,并且提供存放这些数据的缓冲区);
write:向文件写数据;
append:为write的限制形式(只能在文件末尾添加数据);
seek:定位文件中下次read或write的初始位置;
get attributes:查找文件属性;
set attributes:设置文件属性;
rename:重命名文件。

4.1.7 使用文件系统调用的一个实例程序

请添加图片描述

4.2 目录

文件系统通常提供目录或文件夹用于记录文件。

4.2.1 一级目录系统

一级目录系统最简单形式是在一个目录中包含所有的文件,称为根目录。

请添加图片描述

4.2.2 层次目录系统

通过层次结构目录(目录树)系统,可以用很多目录把文件以自然地方式分组。一个目录中可含有任意数量的文件与子目录。
请添加图片描述

4.2.3 路径名

每个文件都赋予一个绝对路径名(absolute path name),它由从根目录到文件的路径组成。
文件也可以使用一个相对路径名(relative path name),常和工作目录(working directory,也称作当前目录(current directory))一起使用,用户可以指定一个目录作为当前目录,由从工作目录到文件的路径组成。
请添加图片描述

4.2.4 目录操作

create:创建目录;
delete:删除目录;
opendir:打开目录(读其中全部文件的文件名);
closedir:关闭目录(释放内部表空间);
readdir:打开目录的下一个目录项;
rename:重命名目录;
link:制定一个存在的文件和一个路径名,并建立从该文件到路径所指名字的链接;
unlink:若解除连接的文件出现在多个目录中则只删除指定路径名的链接,若解除链接的文件只出现在一个目录中则直接删除文件。

4.3文件系统的实现

4.3.1 文件系统的布局

磁盘划分为一个或多个分区,每个分区中有一个独立的文件系统。磁盘的0号扇区称为主引导记录(Master Boot Record,MBR),用来引导计算机。在MBR的结尾是分区表,该表给出了每个分区的起始和结束地址,表中的一个分区被标记为活动分区。在计算机被引导时,BIOS读入并执行MBR。MBR做的第一件事是确定活动分区,读入它的第一个块,称为引导块(boot block)。
请添加图片描述

磁盘的分区是随着文件系统的不同而变化,一般含有超级块,空闲空间管理块,i节点,根目录,文件和目录。超级块中包括:确定文件系统类型用的魔数、文件系统中数据块的数量以及其他重要的管理信息。

4.3.2 文件的实现

连续分配

最简单的分配方式即连续分配,就是把每个文件作为一连串连续数据块存储在磁盘上。连续分配有两大优势:1)实现简单,记录每个文件用到的磁盘块简化为只需记住两个数字即可:第一个磁盘块地址和文件的块数;2)读操作性能较好,因为在单个操作中就可以从磁盘上读出整个文件,只需要一次寻找(对第一个块),之后不再需要寻道和旋转延迟,所以数据以磁盘全带宽的速率输入。

该问题最大的问题是会造成磁盘碎片。请添加图片描述

链表分配
可以为每个文件构造磁盘块链表,每个块的第一个字作为指向下一块的指针,块的其他部分存放数据。这一方法可以充分利用每个磁盘块,不会因为磁盘碎片而浪费存储空间。这一方法虽然顺序读文件非常方便,但是随机存取却相当缓慢。要获得块n每一次都必须从头开始。而且每个磁盘存储数据的字节数不再是2的整数次幂,而很多程序都是以长度为2的整数次幂读写磁盘的,从而会造成额外的开销。
请添加图片描述
采用内存的表进行链表分配
取出每个磁盘块的指针字,把它放在内存的一个表中,这样的一个表格称为文件分配表(File Allocation Table,FAT)。按这类方式组织,整个块都可以存放数据。进而,随机访问要容易的多。虽然仍要顺着链在文件中查询给定的偏移量,但是整个链都存放在内存中,所以不需要任何磁盘引用。

请添加图片描述

缺点是必须把整个表都放在内存中。
** i节点**
最后一个记录各个文件分别包含哪些磁盘块的方法是给每个文件赋予一个称为i节点(index-node)的数据结构,其中列出了文件属性和文件块的磁盘地址。通常为了打开文件而保留的i节点的数组所占据的空间比FAT所占据的空间要少。

在这里插入图片描述

索引分配(王道书上的扩充,同时老师上课也讲过)
链接分配解决了连续分配的外部碎片和大小声明的问题。然而,在没有 FAT 时,链接分配不能支持髙效的直接访问,因为块指针与块一起分散在整个磁盘上,并且必须按序读取。索引分配通过将所有指针放在一起,即索引块,解决了这个问题。

每个文件都有自己的索引块,这是一个磁盘块地址的数组。索引块的第 i 个条目指向文件的第 i 个块。目录包含索引块的地址。当查找和读取第 i 个块时,采用第 i 个索引块条目的指针。

请添加图片描述

当创建文件时,索引块的所有指针都设为 null。当首次写入第块时,先从空闲空间管理器中获得一块,再将其地址写到索引块的第 i 个条目。

索引分配支持直接访问,并且没有外部碎片问题,因为磁盘的任何空闲块可以满足更多空间的请求。然而,索引分配确实浪费空间。索引块指针的开销通常大于链接分配的指针开销。考虑一下常见情况,即一个文件只有一块或两块。采用链接分配,每块只浪费一个指针的空间。采用索引分配,即使只有一个或两个指针是非空的,也必须分配一个完整的索引块。
混合索引

用于基于 UNIX 的文件系统,将索引块的前几个(如 15)指针存在文件的 inode 中。这些指针的前 12 个指向直接块;即它们包含存储文件数据的块的地址。因此,小的文件(不超过 12 块)不需要单独的索引块。如果块大小为 4KB,则不超过 48KB 的数据可以直接访问。接下来的 3 个指针指向间接块。第一个指向一级间接块。一级间接块为索引块,它包含的不是数据,而是真正包含数据的块的地址。第二个指向二级间接块,它包含了一个块的地址,而这个块内的地址指向了一些块,这些块中又包含了指向真实数据块的指针。最后一个指针为三级间接块指针。
在这里插入图片描述

4.3.3 目录的实现

  • 可以把文件属性直接存放在目录项中,还可以把文件属性存放在i节点中而不是目录项中。

在这里插入图片描述

  • 支持长文件名的一种方法是给予其一个长度限制,但是这样会浪费大量目录空间,替代方案是每个目录项大小不一,但是这样会产生很多碎片;另一种方式是每个文件名都由一个指针指向堆中的文件名来实现。

在这里插入图片描述

  • 查找文件名可以用线性查找,但是这样太慢;也可以用散列表加速查找,但是这样管理比较复杂;还可以将查找结果存入高速缓存来加速查找。

4.3.4 共享文件

使一个目录下的一个文件出现在另一个目录下,这个另一个目录和这个共享文件的联系称为一个链接(link)。这样,文件系统本身是一个有向无环图(Directed Acyclic Graph,DAG)而不是一棵树。有两种实现共享文件的方法。

  • 硬链接:是将磁盘块列入一个与文件本身关联的小型数据结构中,目录将指向这个小型数据结构,i节点中进行连接者的计数,这种方法导致一旦文件删除则i节点可能被分配给其他文件导致连接至错误的文件。
  • 软链接:是将文件路径名存入新目录下连接的文件中,从而可以去寻找原文件,只有文件所有者目录中的目录项才会指向其i节点,这种方法开销会比较大。

4.3.5虚拟文件系统

应用程序是需要与io设备打交道,io设备主要分为块设备和字符设备,块设备为了以目录结构持久化保存数据,通常还需要文件系统来管理,为了兼容各种设备的文件系统,需要一层VFS(虚拟文件系统)通过file_operations数据结构的成员函数来与它下层的文件系统、设备文件进行交互file_operations数据结构的成员函数包含对文件的打开、关闭、读写、控制等功能。
请添加图片描述

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值