目录
一、起源
主要是外存的管理如果用户自己来管理文件的话,用户必须熟悉外存的特性,了解各种文化的属性,和文件在外存上的存储位置。为了简化用户的操作繁琐,引出了由OS增加文件管理功能,专门负责管理外存中的文件。
二、文件和文件系统
1、基本概念
文件系统组成=文件集合+目录
文件系统管理功能:将程序和数据组成一系列文件。
数据=文件+记录+数据项
文件:指具有文件名的若干相关元素的集合。
元素:是记录,一组有意义的数据项的集合。
(一)数据的组成概念(文件+记录+数据项)
2、数据项概念
数据项分为基本数据项、组合数据项
基本数据项:又称字段,是用来描述某个对象的属性的字符集,如对象学生的基本数据线有学号、姓名等。
组合数据项:若干基本数据项组成。
3、记录
记录是一组相关数据项的集合,用于描述某个对象在某一方面的所有属性。
记录中要设置一个关键字,用来唯一标识该记录。
4、文件
文件时由用户所定义、具有文件名的一组相关元素的集合。是文件系统中最大的数据单位,描述了一个对象集,如一个班的学生的记录作为一个文件。
文件有4个属性:文件类型、文件长度、文件的物理位置、文件的建立时间。
(二)文件系统的层级结构
一共3层:对象及其属性、对对象进行操纵和管理的软件集合、文件系统接口
对象及其属性:所管理的对象共3类—文件、目录、磁盘存储空间
对对象进行操纵和管理的软件集合:文件系统核心部分,几乎所有功能在这一层。
主要功能:文件存储空间管理功能、文件目录管理功能、将文件的逻辑地址变换为物理地址、文件读写管理功能、文件的共享与保护功能。
文件系统接口:用于用户对文件和记录进行操作的方法和手段,有命令接口和程序接口。
文件系统的层次结构图
(三)文件操作
1、最基本的操作
创建文件、删除文件、读文件、写文件、设置文件的度/写位置
2、文件的打开和关闭操作(系统调用)
该操作可以节省大量的检索开销,提高了对文件的操作速度。
工作原理:“打开”就是在用户和指定文件之间建立一个连接,此后,用户可以直接通过该连接直接得到文件信息,从而避免再次通过目录检索文件。
3、其他文件操作
对文件属性的操作,对目录的操作
三、文件的逻辑结构(考试重点)
所有文件都有两种形式的文件结构:逻辑结构、物理结构
逻辑结构:用户所能看见的。
物理结构:系统将文件存储在外存上所形成的一种存储组织形式,用户不可见。
文件中记录的组织方式
文件的组织形式分类:顺序文件、索引文件、索引顺序文件
顺序文件:一系列记录按某种顺序排列所形成的文件。
索引文件:为可变长记录文件建立一张索引表,为每一个记录设置一个索引表项。
索引顺序文件:为每个文件建立一张索引表(即第一个记录建立索引),而不是为每一个记录建立,
对顺序文件进行检索时,首先从FCB中读出文件的第一个盘块号;而对索引文件进行检索时,应先从FCB中读出文件索引表的始址
可顺序存取的文件不一定能随机存取,但可随机存取的文件都可以顺序存取。
(一)顺序文件
1、记录在磁盘中的排列方式
串结构:按照哪条记录谁先存入文件先排谁的方式,缺点是每次都必须从头开始逐个地查找记录。
顺序结构:用户为每一条记录指定关键字,关键字必须可以排序,将排序后的一组记录存入外存。
2、顺序文件的优缺点
优点:适用于一次存取一大批记录时
缺点:查找修改增加删除单个记录不时方便,因为需要逐个查找。
顺序文件记录寻址(即查找记录的位置)
两种寻找记录的方法:隐式寻址方式、显示寻址方式
隐式寻址方式:设置一个读写指针,每次读写完,读写指针=原读写指针+记录长度
显示寻址方式:对定长记录顺序文件可以实现直接访问或随机访问。而变长记录的顺序文件必须增加支持结构才能实现随机访问(如利用文件中记录的位置、利用关键字)。
(二)索引文件
对于变长记录顺序文件查找记录,必须从第一个记录查起,一直顺序查找到目标记录为止,耗时长。
按关键字建立索引文件
改进方法:为变长记录顺序文件建立一张索引表,为文件中的每一个记录都建立一个索引表项,用于记录指向记录的位置和长度。索引表同时按照关键字进行重新排序,此时索引文件也是顺序文件了。就把对变长记录顺序文件转变为定长记录索引文件的随机检索。
优点:将一个需要顺序查找的文件,改造成了一个可随机查找的文件,提高了查找速度,便于记录的插入和删除。
缺点:除了主文件外,必须再配置一张索引表,每一个记录都要有一个索引项,增加了存储开销。
(三)索引顺序文件
优点:克服了变长记录的顺序文件不能被随机访问(为什么不能随机访问?因为每一次都要从第一个记录开始访问计算记录的长度,而定长记录的顺序文件可以通过计算获得长度),以及不便于删除和插入记录的缺点。保留了记录是关键字的顺序组织起来的。
新增两个特征:
1、引入了文件索引表,实现对索引顺序文件的随机访问。
2、增加溢出文件,用来记录新增加的、删除的和修改的记录。
一级索引顺序文件
工作原理:
1、将变长记录顺序文件中的所有记录分为若干组
2、为文件建立一张索引表
3、把每一组中的第一个记录放入索引表,包含第一条记录的关键字和指向该记录的指针
查找过程:
首先用户提供要查找的记录的关键字,根据关键字查找索引表,找到该记录所在记录组中第一个记录的索引项,获取该记录组第一个记录在文件中的位置,最后在该记录组中利用顺序查找法查到要查的记录。
索引顺序文件的平均查找记录数为根号N
顺序文件的平均查找记录数为N/2
例题:对一个具有三级索引表的文件,存取一个记录通常需要4次访问磁盘。
答案解析:三级索引需要访问4次磁盘,3次磁盘索引块,1次读取数据。
(四)直接文件和哈希文件
直接文件:直接通过关键字的值决定记录的物理地址
哈希文件:通过哈希函数,将关键字变换为相应记录的地址,但是所得地址是指向某一目录表相应表目的指针,而不是该关键字所在记录的物理地址。
四、文件目录
文件目录是一种数据结构,文件目录是FCB的有序集合。
四个基本条件:按名存取、提高对目录的检索速度、文件共享、允许文件重名
(一)文件控制块和索引节点
文件控制块FCB:是为文件设置用于描述和控制文件的数据结构。
文件管理程序借助于FCB中的信息对文件进行操作。
文件目录:每一个文件对应一个FCB,把FCB的有序集合称为文件目录。
FCB包含内容:基本信息类、存取控制信息类、使用信息类
基本信息类:文件名、文件物理位置(文件在外存中的存储位置、外存设备名、起始盘块号、占用盘块数或字节数)、文件逻辑结构(内容:文件类型是流式文件或记录式文件、文件的记录数量、文件是定长还是变长记录)、文件的物理结构(指出文件在外存中的组织方式:连续组织、链接组织、索引组织)
存取控制信息类:存取权限
使用信息类:文件建立日期时间、修改时间、
索引节点的起源
找目录的工作过程:文件目录通常存放在磁盘上,查找目录的过程中,需要将存放目录文件的第一个盘块中的目录调入内存,然后将用户指定的文件名与目录项中的文件名逐一比较,若未找到指定文件,需要再次调用磁盘把下一个盘块号的目录项调入内存。(一个盘块可以存放多个文件目录信息)
改进:检索目录文件时只是比较了文件名,所以调用磁盘时只把文件名调入内存,其他描述信息不调入。(如UNIX系统,就把文件名和文件描述信息分开存放),此时仅仅需要文件名和指向该文件所对应的索引节点的指针构成目录项。该索引节点是存放文件描述信息。
磁盘索引节点:每一个文件都有一个唯一的磁盘索引节点,内容包括—文件拥有者、文件存取权限、文件类型、文件物理地址、文件长度、文件连接计数、文件存取时间。
内存索引节点:当文件被打开时,会将磁盘索引节点内容复制到内存索引节点中,并且新增加以下内容—索引节点编号、状态、访问计数、文件所属文件系统的逻辑设备号、链接指针。
(二)单级文件目录和两级文件目录
多级文件目录可以提高文件的查询速度。
1、单级文件目录
整个文件系统中只建立一张目录表,每个文件占一个目录项,目录项中包含—文件名、扩展名、文件长度、文件类型、物理地址、文件说明、状态位(是否空闲)等
优点:简单
缺点:只能实现目录管理的基本功能——按名存取,其他3方面无法满足。
2、两级文件目录
为每一个用户创建一个自己的单级文件目录(称为UFD,用户文件目录),在创建一个包含所有用户的文件主目录MFD。
优点:满足提高了检索目录速度、不同用户之间文件可重名。
缺点:但是不便于共享。
(三)树形目录
最通用和实用,MFD这里称作根目录
路径名:每一个文件都有唯一的路径名
当前目录:为了解决每访问一个文件时,都需要从根目录开始检索一直到数据文件为止的繁琐,专门设置了当前目录,进程对各文件的访问都从相对于当前目录进行。
相对路径:从当前目录开始的路径名
绝对路径:从根目录开始的路径名
优点:查询速度更快、层次结构更加清晰,更加有效地进行文件的管理和保护。
缺点:查询文件时需从根目录开始,按路径名逐级访问中间节点,增加了磁盘访问次数。不适合文件共享。
(四)无环图目录
是树形目录的拓展,即一个子目录可以同时拥有多个父目录,可以同时出现在两个或多个目录中。
(五)目录查询方法
线性检索法、Hash方法
用户访问文件的过程:
1、系统首先利用用户提供的文件名对目录进行查询(目录在内存中)
2、找到目录后可以获得FCB或对应的索引节点
3、根据FCB或索引节点中记录的文件物理地址,换算出文件在磁盘上的物理地址
4、通过磁盘驱动程序将文件读入内存
五、文件共享
概念:允许不同用户、进程共享同一份文件。这样就只需要保存一份文件即可,提高存储空间的利用率。
常用的两种方法
利用有向无环图:树形目录的扩展,建立链接时,将共享文件的物理地址复制到需要共享文件的目录中。但是会出现新问题?——如果共享文件被新增加内容了,必然会增加新的盘块号,也就是新增加了物理地址,这些新增加的物理地址只会出现在执行该操作的用户目录中,其他用户目录中的信息不回被改变,即其他用户是不可见的,也就是说新增加内容是不被共享的。
为了解决这个问题,引入索引节点,直接把共享文件的物理地址和其他属性信息放入索引节点中,而不是放在目录项中,这样以后新增加的内容任何用户都是可见的。因为是用的指针。在Unix系统中称为硬链接。
利用符号链接:允许一个文件或子目录有多个父目录,其中只有一个父目录是主(主父目录),只有主父目录才拥有指向共享文件的索引节点的指针,其他父目录只有共享文件的路径名。
工作原理:不是主父目录的为了实现共享文件,先由系统创建一个LINK类型的新文件,该文件名字与共享文件相同,其内容只包含共享文件的路径名。称为软链接
缺点:其他非主父目录访问共享文件时是根据路径名逐个查找的,每次访问共享文件都会多次访问磁盘,增大了开销,启动磁盘频率大。链接本身也是一个文件,会耗费一定的磁盘空间。
六、文件保护
保护域、访问权
规定每一个进程只能在保护域内执行操作,而且只允许进程访问它们具有的“访问权”的对象。
访问权
对象:可以是硬件如打印机、磁盘。可以说软件、文件、程序等。
访问权概念:一个进程能对某对象进程操作的权力。
保护域
保护域概念:是进程对一组对象的访问权的集合,规定了进程所能访问的对象和所能执行的操作。
访问矩阵
概念:描述系统的访问控制,矩阵的行代表域,列代表对象。
访问矩阵的实现=访问控制表+访问权限表
访问控制表:对访问矩阵按列划分,每一列建立一张访问控制表,也就是一个对象有一个访问控制表。
访问权限表:对访问矩阵按行划分,每一行建立一张访问权限表,该表是由一个域对每个对象可以执行的一组操作所构成的表。