操作系统考研资料第六章 文件系统.docx
《操作系统考研资料第六章 文件系统.docx》由会员分享,可在线阅读,更多相关《操作系统考研资料第六章 文件系统.docx(16页珍藏版)》请在冰豆网上搜索。
操作系统考研资料第六章文件系统
第六章文件系统
6.1知识点汇总
1、文件、文件系统的概念
文件:
是被命名的数据的集合体。
文件系统:
就是操作系统中负责操纵和管理文件的一整套设施,它实现文件的共享和保护,方便用户“按名存取”。
2、外存管理和文件系统概述
(1)、外存是负责长期保存数据的所有存储部件的总称,如磁盘,磁带,光盘等。
操作系统的外存管理功能是操作系统中负责管理外存使用的那些功能的总称,负责管理和顽尘国外存使用中所有硬件相关和应用无关的工作,为用户使用外存提供方便服务,高校和安全管理。
(2)、外存硬件接口特性
外存的作用:
✧用来永久或长期存放数据。
✧作为盘交换区——作为内存后备存放当前运行程序和数据。
外存的种类:
✧联机外存:
硬盘
✧脱机外存:
光盘,软盘,磁带,U盘
外存的主要涉及标准和性能指标:
密度,速度,容量,体积,成本,便携性,可重写性和可重用性等。
存储容量分为非格式化容量和格式化容量。
一般格式化容量是非格式化容量的80%
格式化分为:
高级格式化(仅删除数据),低级格式化。
✧高级格式化,清除硬盘上的数据、生成引导区信息、初始化FAT表、标注逻辑坏道等
✧低级格式化,就是将空白的磁盘划分出柱面和磁道,再将磁道划分为若干个扇区,每个扇区又划分出标识部分ID、间隔区GAP和数据区DATA等。
硬盘的低级格式化是高级格式化之前的一件工作,目前所有硬盘厂商在产品出厂前,已经对硬盘进行了低格化的处理,因此我们新购买的硬盘在装系统时只需要进行高级格化的过程,来初始化FAT表,进行分区操作。
硬盘的低级格式化过程是一种损耗性操作,对硬盘的使用寿命会产生一定的负面作用。
外存设备都由驱动控制部分和存储介质两部分组成。
✧存储介质与驱动器都固定:
硬盘
✧驱动器固定但存储介质不固定:
光盘,软盘
✧驱动器和存储介质都不固定:
移动硬盘,U盘等
大多数系统将设备驱动控制部件中的大部分电子控制部分分离出来构成设备控制器,而设备驱动器只剩下机械驱动部分和简单的电子控制电路。
设备控制器决定设备与计算机间的逻辑联系,一个设备控制其可以同时控制多个设备驱动器。
硬盘的结构
硬盘内由设备驱动器及存储介质组成。
其存储介质是磁盘。
磁盘表面被划分为若干个同心圆,每个同心圆成为一个磁道。
每一磁道划分为几个扇区(通常每个扇区存放512B)。
每个扇区间都留出一定的空间用来记录扇区标记。
用扇区作为最小寻址单位和存取单位。
寻址时磁盘转动,磁头移动到目标磁道,磁头通过读取并判断扇区标记,来确定和等待指定扇区,当目标扇区从磁头下顺序经过,读取相应扇区内的内容。
通过增加磁盘数,及每个磁盘都正反两面都涂以磁性材料,来增加容量。
所有盘面中处于同一磁道号上的所有磁道组成一个柱面。
读写同一个柱面的数据,不需要移动磁头,故通常将同一文件内容分配在同一柱面上,以节省访盘时间。
对主机提供的接口是:
“读/写,磁盘地址(设备号,柱面号,磁面号,扇区号),内存地址”。
当接收到一个访盘请求时,由以下三个步骤:
✧寻道,磁头移动到指定磁道(寻道时间)
✧等待扇区从磁头下经过(延迟时间)
✧数据在磁盘与内存间传送(传送时间)
访盘时间=寻道时间+延迟时间+大胆地
硬盘分为固定磁头和移动磁头两种。
固定磁头同一盘面上每个磁道设置一个磁头,所以节省了寻道时间,但成本昂贵。
移动磁头,每个盘面仅一个磁头,成本低。
(3)用户对外存的使用要求
✧在存取外存上的数据是,不希望解除和涉及外存物理空间地址和存取单位,外存设备接口地址,等物理硬件细节。
而是采用符合用户习惯的逻辑地址于逻辑操作。
✧外存上存放的信息安全可靠,防止来自硬件的故障和来自他人的侵权。
✧可以方便地共享,动态伸缩,拆卸携带,了解存取请款共和使用情况等。
✧以最小代价完成上述任务。
(4)文件定义及文件系统的工作界面
文件系统提供了:
文件子系统,目录,文件,文件内字节,这4个层次上的操作。
文件是操作系统提供的,是用户观点中期内容具有连续顺序关系的最大外存逻辑数据空间。
3、文件系统用户界面
(1)文件级界面:
文件属性和文件操作
每个文件都拥有文件名。
操作系统为每个文件名与该文件在外存中存放位置间建立对应关系。
在多用户环境下,操作系统还需为每个文件建立和维护文件主和访问权限等信息。
文件属性信息包括文件名,文件主,访问权限以及文件类型,文件长度等。
这些信息不属于文件本身的内容,但是用户需要由操作系统来保存这些属性。
并提供查询这些属性的操作。
对文件本身内容的读写。
操作系统在操作级和编程级都提供了相应的操作。
编程级:
提供读写文件的系统调用,内存映像文件方式的读写操作。
文件的打开:
intopen(constchar*pathname,intflags);
参数pathname指向欲打开的文件路径字符串。
参数flags所使用的用宏定义的值:
O_RDONLY以只读方式打开文件
O_WRONLY以只写方式打开文件
O_RDWR以可读写方式打开文件
上述三种是互斥的,也就是不可同时使用,下列的可以利用OR(|)运算符组合
O_CREAT若欲打开的文件不存在则自动建立该文件。
O_EXCL如果O_CREAT也被设置,此指令会去检查文件是否存在。
文件若不存在则建立该文件,否则将导致打开文件错误。
此外,若O_CREAT与O_EXCL同时设置,并且欲打开的文件为符号连接,则会打开文件失败。
O_NOCTTY如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机。
O_TRUNC若文件存在并且以可写的方式打开时,令文件长度清为0,而原来存于该文件的资料也会消失。
O_APPEND当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。
该函数返回值称为文件句柄或文件描述字(filedescriptor),之后文件的读写,用该文件句柄来指定该文件,而不再使用文件的文件名。
文件的打开,可以理解为一种权限许可。
即检查文件是否存在,用户对该文件是否具备相应操作的权限,以及检查文件共享的许可。
操作系统在读写文件的系统调用中,提供文件当前读写指针机制。
文件打开时,该指针指向文件首字节,在执行读写系统调用后,指针指向港读写过的最后一个字符的下一个字符。
同时还提供了改变当前读写指针的系统调用。
off_tlseek(intfildes,off_toffset,intwhence);
每一个已打开的文件都有一个读写位置,当打开文件时通常其读写位置是指向文件开头,若是以附加的方式打开文件(如O_APPEND),则读写位置会指向文件尾。
当read()或write()时,读写位置会随之增加,lseek()便是用来控制该文件的读写位置。
参数fildes为已打开的文件描述词,参数offset为根据参数whence来移动读写位置的位移数。
whence为下列其中一种:
SEEK_SET参数offset即为新的读写位置。
SEEK_CUR以目前的读写位置往后增加offset个位移量。
SEEK_END将读写位置指向文件尾后再增加offset个位移量。
当whence值为SEEK_CUR或SEEK_END时,参数offet允许负值的出现。
1)欲将读写位置移到文件开头时:
lseek(intfildes,0,SEEK_SET);
2)欲将读写位置移到文件尾时:
lseek(intfildes,0,SEEK_END);
3)想要取得目前文件位置时:
lseek(intfildes,0,SEEK_CUR);
当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节。
若有错误则返回-1。
操作系统通常还提供了通配符机制,以便于利用文件命名共性对文件分类分组,对一组文件同时进行操作。
(2)目录级界面:
目录(树)和链接。
用户需要一个清单,列出在外存中存放着哪些文件,操作系统自动建立和维护这个清单,这个清单称之为目录。
若外存中所有的文件用一个目录来表示,则该目录是单级目录。
当外存上同时存放的文件数量越来越多,单级目录查找起来就十分麻烦,为此操作系统引入多级目录机制。
反映了文件的分类关系。
采用树状结构来表示这种多级分类机制。
提供了一组相应的目录操作,目录建立,目录删除,设置当前目录等。
有的操作系统允许一个文件同时属于多个目录,但实际上该文件只有一处物理存储。
这种在一处存储,多处出现的文件和目录间的关系,称为链接(Link)
避免了重复存储冗余浪费和数据不一致性。
不用每次使用共享文件都要写出路径名。
用户可以按照自己的需要,习惯,来给文件命名。
为用户程序中对共享文件的使用提供了灵活性,适应性,兼容性。
还可以使一个用户程序能够根据本次运行时的调用名来决定本次运行的工作方式。
链接分为:
硬链接和符号链接(软链接)。
两者在实现机制上不相同。
(3)文件子系统级用户界面
文件子系统,通常称为卷,是满足以下特性的一个外存区域。
该区域的空闲空间信息也存放在该区域内。
该区域中所存放的文件和目录的属性信息业存放在该区域内。
该区域可能是一个外存介质,也可能是一个外存介质的一部分外存区域。
为什么需要多个文件子系统?
不同访问权限的区域划分在不同的分区中。
需要不同的分区,来存放不同的操作系统及其管理文件。
便于移动存储
文件子系统的建立(格式化)
硬盘格式化过程
低格,运行fdisk命令,在每个磁面上划分与标记磁道和扇区,标出坏扇区,划分和建立分区。
高格,运行format命令,对指定分区进一步划分成几个区域,有的存放文件内容,有的存放文件属性信息,有的存放目录信息,有的存放总信息。
4文件的实现
(1)连续分配背景下的讨论
最简单背景下(单介质,单级目录,文件连续分配)的文件系统实现机制。
连续分配(continuousallocation)策略是指每个文件在存储介质上是无力连续存放的,即每个文件在存储介质上占据连续的物理块号,并在其中连续顺序存放。
1)、最简单背景下文件操作流程和所需管理信息
最基本的操作:
读文件(文件名,文件内起始读位置,要读的长度,目标地址)
写文件(文件名,文件内起始下位置,要写的长度,目标地址)
建立文件(文件名)
删除文件(文件名)
所需的管理信息:
文件名,文件主,全县,文件在外存上的物理位置(称为文件内地址映射信息,指出文件占据的总块数和起始块号即可),文件操作时间记录等。
称为文件描述信息或文件管理信息。
平时存放在外存上,用时读入内存。
所需的管理信息:
写文件时文件按长度可能发生增减,因此需要申请或释放空闲盘块,故操作系统需要建立和维护盘空闲空间信息。
效率上的初步考虑:
盘空闲空间信息等盘卷总信息,是被频繁访问修改的,所以通常在开机后马上进入内存,并常驻内存。
用户程序在使用一个文件时,通常要对该文件进行多次读写,每次读写都要用到该文件的文件描述信息,故通常在用户使用一个文件期间,该文件的文件描述信息一直驻留内存,直到用不再使用该文件。
2)、最简单背景下文件系统数据结构与工作过程
盘卷总信息区:
盘总容量,目录区起始位置,目录区长度,文件区起始位置,文件区长度,盘空闲空间信息。
设备目录区:
所有文件的描述信息。
UNIX中称为i结点区(inode)。
文件区:
存放所欲文件内容本身。
在最简单背景下如何根据文件名取得文件内容呢?
3)、记录外存空闲空间信息的数据结构
位图:
每个盘块用1位表示,若该块空闲,则该位为0,若已分配则为1。
只要利用位操作指令就能简单有效地在盘上找到n个连续的空闲块。
链表:
把所有空闲块链接在一起,链首指针指向第一个空闲盘块。
该块中存放着一个指针指向下一空闲盘块。
分组链接:
将n个空闲盘块的地址,存放在第一个空闲盘块中。
其中前n-1个盘块是可分配的空闲盘块,最后一个空闲盘块中包含着另外n个空闲盘块的地址。
能迅速地找到大量空闲盘块地址。
计数:
只记录空闲区域的首盘块地址和空闲盘块数。
4)、对连续分配方案的评价
类似于内存可变分区模式。
分配空间的算法可采用,最先适配,最佳适配,最坏适配等。
地址映射简单,访问快。
因为连续存储
分配慢。
因为要查找足够存放的连续的空闲块。
有外部碎片。
会产生无法被分配的空闲区域。
需处理动态扩充。
预留空间,合并相邻空闲块,或重新分配和移动等。
寻道次数和寻道时间最少。
(2)不连续分配背景下的讨论
文件的不连续分配方式是指文件内容在外存存储介质上不一定占有连续空间。
从而克服了连续分配的缺点,彻底消除外部碎片,提高外存利用率,且易于动态扩充。
链接定位:
特点:
只能顺序存取,一个指针错失,造成后面全错,指针占用一定空间。
FAT模式:
链接定位的变种,划分出一个区域用于存放一张FAT表,表中第i行对应物理块号i。
每行的值代表某文件中,该块的下一盘块的块号,若该块空闲则值为0。
特点:
实现简单,FAT表很大
4文件的实现
(1)不连续分配背景下的讨论
索引定位——非分离方案:
文件所有盘块地址集中放在索引表中,每个文件一张索引表。
索引表放在设备目录中。
特点:
设备目录不定长,导致速度慢
索引定位——一重索引方案:
索引表放在一个索引盘块中,该盘块地址放在设备目录中。
特点:
设备目录定长。
文件长度受限,小文件索引盘块浪费。
索引定位——一重索引链接方案:
将一个文件的所有索引盘块链接在一起,链首放在设备目录中。
特点:
文件长度不受限。
索引盘块只能顺序存取,存取文件尾时要读所有索引盘块。
索引盘块有内部碎片。
索引定位——多重索引方案:
将一个文件的所有索引盘块(一重索引盘块)地址放在一个索引盘块(二重索引盘块)中,将二重索引盘块地址放在设备目录中。
特点:
文件最大长度达,索引块直接存取。
索引盘块有内部碎片,小文件的良机索引盘块时浪费更大。
索引定位——直接指针+可变重数的多重索引方案:
在文件描述信息中预留固定个数的直接指针,直接指向数据块的地址。
剩下的作为多重索引的下一重索引盘块的指针。
特点:
多重索引可以实现大文件。
可变重数的索引,避免了多级索引盘块上的浪费。
直接指针,使小文件避免了索引盘块上的浪费。
该模式对大小文件的效率适应性都较强,灵活高效。
(2)各种分配策略的比较和综合采用
实际操作系统通常采取综合策略
对同一文件采用不同分配方式:
对3,4块一下的小文件连续分配,若文件增大则变为索引定位。
对同一系统中的不同文件采用不同分配方式:
对直接存取文件连续分配,对顺序存取文件链接分配。
建立文件时必须说明存取类型。
5目录的实现
(1)目录树结构的实现:
目录文件方法
为了适应多级目录的需要,将设备目录表(存放在设备目录区中)分化为多张表。
每张目录表对应一个目录,表中内容为该目录下每个直属文件或子目录的文件描述信息。
该表称为文件目录表。
文件目录表反映了文件与目录间、上级目录与下级目录间的从属关系。
随着目录的建立,删除,复制,移动。
文件目录表的长度很难确定,表长度伸缩性太大。
因此很难预留空间,或集中存放。
因此采用目录文件技术。
把每张文件目录表看作是一个文件来存放,即每个目录对应一个文件,该文件的内容就是该目录的文件目录表。
因此就可以借助文件茶馆年度伸缩变化的处理方法来解决目录数据的伸缩性问题。
将目录处理成为文件后,不再有同一的文件描述信息区(设备目录区)。
仅在盘卷总信息中存放根目录的文件目录表的地址。
6目录的实现
(1)目录树结构的实现:
目录文件方法
为了适应多级目录的需要,将设备目录表(存放在设备目录区中)分化为多张表。
每张目录表对应一个目录,表中内容为该目录下每个直属文件或子目录的文件描述信息。
该表称为文件目录表。
文件目录表反映了文件与目录间、上级目录与下级目录间的从属关系。
随着目录的建立,删除,复制,移动。
文件目录表的长度很难确定,表长度伸缩性太大。
因此很难预留空间,或集中存放。
因此采用目录文件技术。
把每张文件目录表看作是一个文件来存放,即每个目录对应一个文件,该文件的内容就是该目录的文件目录表。
因此就可以借助文件茶馆年度伸缩变化的处理方法来解决目录数据的伸缩性问题。
将目录处理成为文件后,不再有存放文件描述信息的设备目录区。
仅在盘卷总信息中存放根目录的文件目录表的地址。
(2)硬链接的实现:
设备目录与文件目录的分离
链接,即允许一个文件属于多个目录。
UNIX和Linux支持硬链接和符号链接。
设备目录与文件目录的分离。
指将目录文件中的目录表的绝大部分列都已入设备目录表中。
文件目录表中只存放文件名及该文件的描述信息在设备目录表中的地址。
实现设备目录与文件目录分离后。
外存的结构为:
盘卷总信息:
根目录的文件目录表地址,空闲区域信息,……
设备目录区:
设备目录表,存放所有文件的描述信息(不包含文件名)每个文件的描述信息又称为i结点,所以设备目录区又称为i结点区。
文件区:
目录文件(文件目录表),文件
实现设备目录和文件目录的分离后,只要在文件目录中有多个指针指向设备目录中的同一行,并记录该文件被引用的次数。
就实现了链接。
这就是硬链接的实现机制。
当删除某个文件时,首先删除文件目录中的对应行。
然后将设备目录区中对应的i节点的引用计数减1,若引用计数减为0,删除该i结点及文件内容。
若不为0,说明还有其他的文件目录中存在指向该文件的链接,因此不删除i结点及文件内容。
硬链接,实现速度较快(相对于符号链接),但不能跨文件系统,因为无法区分不同文件系统的i结点。
(3)符号链接的实现
符号链接,将被链接文件的路径名和文件名作为符号连接文件的内容来存储,被链接文件中并不记录被引用的次数(类似于Windows系统中的快捷方式)。
符号链接文件本身占用i结点和数据盘块。
当用open打开某个符号链接时,返回的实所链接至的文件的描述符。
而不是符号链接文件本身的描述符。
实际上执行了两次访问。
因此开销较大。
删除符号链接,被链接文件不受任何影响。
符号链接可以链接存储于任何地方的文件。
(如浏览器的收藏夹中的快捷方式)
符号链接中可以存放相对路径也可以存放绝对路径。
有时要处理符号链接文件本身,而不是要处理链至的文件,因此操作系统要提供两种不同的功能。
如open,stat 在遇到链接文件时都是处理所链至的文件。
而readlink,lstat则是对符号链接本身的操作。
7文件子系统的实现
登记整个系统中联机安装有哪些文件系统,每个文件子系统的物理位置,卷总信息等。
实现相关的地址映射,即实现从文件子系统的逻辑表示形式到物理位置的映射,即根据用户在路径中给出的文件子系统标识,找到相应的文件子系统的登记信息。
负责实现文件子系统的建立(格式化),装卸等操作。
对于支持多种不同类型文件子系统的操作系统,需要登记每个文件子系统的类型,并根据不同的类型,来调用不同的地址映射子程序和操作实现子程序。
8文件系统性能改善机制
硬盘作为联机外存,属于计算机最慢的存储层次,其速度已成为系统性能的主要瓶颈。
提高访盘速度要从硬件和软件两方面来改善。
软件方面主要通过两个角度:
减少访盘次数;缩短每次访盘时间。
减少访盘次数:
增大访盘单位长度。
避免重复访盘,将经常被访问的,或者最近访问的都驻留在内存。
为了避免重复访盘,在内存中设置了专门的数据结构用于存放经常要访问的数据。
内存盘卷总信息数据结构。
存放文件子系统级的信息。
目录缓冲结构、当前目录结构。
存放目录级的信息。
文件打开表数据结构。
存放文件描述信息。
缓冲池。
即同时设立多个缓冲区,这些缓冲区的集合就称为缓冲池,存放文件的本身内容。
缩短每次访盘的时间,每次访盘时间亦称为平均磁盘服务时间,它是寻道时间,延迟时间,传送时间之和。
缩短每次访盘时间主要在于减少寻道时间和延迟时间。
减少寻道时间的措施有:
磁臂调度算法,外村空间的分配算法;
减少延迟时间的措施主要有:
扇区排队,上去交叉编号、预读、磁道缓冲等。
此外磁盘阵列及磁盘条块化、磁盘交叉存取、分块都涉及多盘协同工作以提高磁盘速度和可靠性。
9物理地址与存取单位的优化
外存硬件提供的最小寻址单位和存取单位是扇区,长度通常是512b或者1kb。
操作系统统场采取的最小分配单位,寻址单位是盘块,又称为逻辑盘块。
块长一般大于或等于扇区长度。
通常是大于。
当块长大于扇区长时,一块通常由连续的若干扇区构成,1块通常是2的整数次幂个的扇区。
这样可以减少访盘次数,从而提高系统性能。
块长通常在操作系统安装或配置时设定。
块长的大小对文件系统的时空效率会产生很大的影响。
操作系统用一维块号来表达三维的外存物理地址(盘面号,磁道号,扇区号)。
因而存在地址转换机制。
当块长大于扇区长时,转换方式较为复杂。
(1)文件打开与关闭技术
设置文件的打开和关闭操作是为了提高效率,将打开的文件的描述信存放在内存中,避免了每次访问文件都要去搜索设备目录。
又不用将所有的文件的描述信息放在内存中占用空间。
(2)文件共享
文件共享是指一个文件没多个用户或程序使用。
有几种不同程度或类型的文件共享:
一个文件在多处重复存储,这是冗余存储式的文件共享。
一个文件被多个用户使用。
这是由存取权限控制的。
一个文件出现在目录树中多处,但只有益处物理存储。
这是链接实现。
一个文件被多个程序同时使用,但个用自己的读写指针。
一个文件被多个程序同时使用,且共享读写指针。
10磁臂调度技术
磁臂调度指当同时又多个访盘请求在等待时,对这些要求的顺序的确定安排或调整,旨在减少平均磁盘服务时间。
由操作系统中的磁盘设备驱动程序完成。
先来先服务调度算法。
最简单的磁臂调度算法,简单,公平,但却不能提供最好的服务。
最短搜索有限调度算法。
总是在访盘队列中挑选离磁头当前位置最近的访盘请求作为下一个服务对象。
电梯算法。
磁头总是单项移动的,但到达边缘则改变方向(前方没有请求时,就回头),磁头移动中为途中的所有请求服务。
循环扫描算法。
基于电梯算法,只有一点不同:
磁头到头,掉头后不是立即扫描,而是立即回到起点再重新开始扫描,归途中不服务。
6.2例题示例
【例6.2.1】什么是文件?
什么是文件系统?
答:
文件是在逻辑上具有完整意义的信息集合,它有一个名字作标识。
文件具有三个基本特征:
文件的内容为一组相关信息、文件具有保存性、文件可按名存取。
文件系统是操作系统中负责管理和存取文件的程序模块,也称为信息管理系统。
它是由管理文件所需的数据结构(如文件控制块、存储分配表)和相应的管理软件以及访问文件的一组操作所组成。
【例6.2.2】什么是文件的物理结构和逻辑结构?
答:
文件的逻辑结构是从用户观点出发所看到的文件组织形式,是用户可以直接处理的数据及其结构。
文件的逻辑结构有两种形式:
有结构的记录文件和无结构的流式文件。
文件的物理结构是指文件在外存上的存储组织形式。
文件的物理结构有三种形式:
顺序结构、链接结构和索引结构。
【例6.2.3】假定盘块的大小为1KB,硬盘的大小为500MB,采用显示链接分配方式时,其FAT需要占用多少存储空间?
答:
FAT的每个表项对应于磁盘的一个盘块,其中用来存放分配给文件的下一个盘块的块号,故FAT的表项数目由物理盘块数决定,而表项的长度则由磁盘系统的最大盘块号决定(即它必须能存放最大的盘块号)。
为