操作系统的文件系统(一)
发布时间:2026/9/4 7:14:46 作者:尧图编辑部 阅读量:1,286
)
1、文件的属性文件名由创建文件的用户决定文件名主要是为了方便用户找到了文件同一目录下允许有重名文件。标识符一个系统内的各文件标识符唯一是操作系统用于区分各个文件的一种内部名称。类型指明文件的类型。位置文件存放的路径、在外存中的地址。大小指明文件大小。保护信息对文件进行保护的访问控制信息。2、文件结构分类无结构文件文件内部的数据就是一系列二进制流或字符流组成。又称为“流式文件”。有结构文件由一组相似的记录组成又称“记录式文件”。每条记录由若干个数据项组成。每条记录有一个数据项可作为关键字。记录可分为定成记录和变长记录两种。3、顺序文件链式存储无论是定长/变长记录都无法实现随机存取每次只能从第一个记录开始以此往后查找。顺序存储可变长记录—无法实现随机存取定长记录—可实现随机存取。4、索引表本身是定长记录的顺序文件。因此可以快速找到第i个记录对应的索引项。可将关键字作为索引号内容若按关键字顺序排列则还可以支持按照关键字折半查找。每当要增加/删除一个记录时需要对索引表进行修改。由于索引文件有很快的检索速度因此主要用于对信息处理的及时性要求比较高的场合。5、文件的逻辑结构5.1、无结构文件由二进制流或字符流组成无明显的逻辑结构5.2、有结构文件由记录组成分为定长记录、可变长记录逻辑结构顺序文件、索引文件和索引顺序文件6、文件控制块FCBFCB实现了文件名和文件之间的映射。使用户用户程序可以实现“按名存取”。FCB的有序集合称为“文件目录”一个FCB就是一个文件目录项。FCB包含了文件的基本信息文件名、物理地址、逻辑结构、物理结构等。7、目录结构7.1、单级目录结构实现了按名存取不允许文件重名。一个系统只能有一张目录表单极目录结构不适合用于多用户操作系统。7.2、两级目录结构分为主文件目录和用户文件目录。主文件目录记录用户名及相应用户文件目录的存放位置。用户目录由该用户的文件FCB组成。两级目录结构允许不同用户的文件重名也可以在目录上实现访问限制。但是两级目录结构依然缺乏灵性用户不能对自己的文件进行分类。7.3、多级目录结构树形目录结构方便对文件进行分类层次结构清晰也能够有效的进行文件的管理和保护。但是树形结构不便于实现文件的共享。从根目录出发的路径是“绝对路径”从“当前目录出发的路径是相对路径”7.4、无环图目录结构可用不同文件名指向同一个文件甚可以指向同一个目录共享同一目录下的所有内容。需要为每个共享结点设置一个共享计数器用于记录此时有多少个地方在共享该结点。用户提出删除点的请求时只是删除该用户的FCB、并使共享计数器减1并不会直接删除共享结点。当共享计数器减为0时删除结点。注意:共享文件不同于复制文件。在共享文件中由于各用户指向的是同一个文件因此只要其中一个·用户修改了文件数据那么所有用户都可以看到文件数据的变化。8、索引结点除了文件名之外的所有信息都放到索引结点中每个文件对应一个索引结点目录项中只包含文件名、索引结点指针因此每个目录项的长度大幅减小由于目录项长度减小因此每个磁盘块可以存放更多个目录项因此检索文件时磁盘!/O的次数就少了很多9、文件的物理结构文件分配方式顺序分配文件分配的必须是连续的磁盘块。优点顺序存取速度快支持随机访问。缺点会产生碎片不利于文件拓展。链式分配链接分配采取离散分配的方式可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。隐式链接一一除文件的最后一个盘块之外每个盘块中都存有指向下一个盘块的指针。优点:很方便文件拓展不会有碎片问题外存利用率高。缺点:只支持顺序访问不支持随机访问查找效率低指向下一个盘块的指针也需要耗费少量。显式链接一一把用于链接文件各物理块的指针显式地存放在一张表中即文件分配表(FATFileAllocation Table)。一个磁盘只会建立一张文件分配表。开机时文件分配表放入内存并常驻内存优点:很方便文件拓展不会有碎片问题外存利用率高并且支持随机访问。相比于隐式链接地址转换时不需要访问磁盘因此文件的访问效率更高。缺点:文件分配表的需要占用一定的存储空间。索引分配允许文件离散地分配在各个磁盘块中系统会为每个文件建立一张索引表索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表一一建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。若文件太大索引表项太多可以采取以下三种方法解决:链接方案:如果索引表太大一个索引块装不下那么可以将多个索引块链接起来存放。缺点:若文件很大索引表很长就需要将很多个索引块链接起来。想要找到i号索引块必须先依次读入0~i-1号索引块这就导致磁盘/O次数过多查找效率低下。多层索引:建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。采用K层索引结构且顶级索引表未调入内存则访问一个数据块只需要K1次读磁盘操作。缺点:即使是小文件访问一个数据块依然需要K1次读磁盘。混合索引:多种索引分配方式的结合。例如一个文件的顶级索引表中既包含直接地址索引(直接指向数据块)又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。优点:对于小文件来说访问一个数据块所需的读磁盘次数更少。10、文件存储空间管理10.1、存储空间的划分与初始化文件卷逻辑卷的概念将物理磁盘划分一个个文件卷目录区主要存放文件目录信息FCB、用与磁盘存储空间管理的信息文件区用于存放文件数据存储空间的初始化将各个文件卷划分为目录区、文件区10.2、存储空间管理如何分配磁盘块:与内存管理中的动态分区分配很类似为一个文件分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。如何回收磁盘块:与内存管理中的动态分区分配很类似当回收某个存储区时需要有四种情况一一1回收区的前后都没有相邻空闲区;2回收区的前后都是空闲区;3回收区前面是空闲区;4回收区后面是空闲区。总之回收时需要注意表项的合并问题10.2.1、空闲表法原理维护一张空闲表每个表项记录一个连续空闲盘区起始块号 空闲块数量。和内存的动态分区空闲表思路一样。分配首次适应 / 最佳适应找足够大的连续空闲区划分出需要的块修改表项回收归还盘块检查能否和前后空闲区合并修改 / 新增表项。特点适合连续分配碎片多的时候表会很大离散文件效率差。10.2.2、空闲链表法分为空闲盘块链、空闲盘区链空闲盘块链原理把每一个空闲盘块用指针串成链表。操作系统保存头指针、尾指针。分配从链表头部依次摘下盘块给文件回收把归还的盘块插到链表尾部。特点实现简单每次分配回收只能操作 1 个块要频繁读磁盘链表块开销大。空闲盘区链原理以连续的空闲盘区为链表结点每个结点记录本盘区起始块号、块数、下一个盘区指针。分配找长度足够的空闲盘区可以分配连续多个块回收归还盘块判断是否可以和前后盘区合并再链入链表。特点连续、离散文件都适配合并操作增加开销。10.2.3、位示图法原理用二进制位图1 位代表 1 个磁盘块。0空闲1已分配。位示图存放在内存通过字号、位号换算得到磁盘块号。分配遍历位图找连续为 0 的位标记为 1算出对应块号回收把对应位清零。特点占用空间小速度快广泛使用需要计算块号要常驻内存。10.2.4、 成组链接法UNIX/Linux 经典原理把空闲盘块分组。超级块保存第一组的空闲块计数和块号每组最后一个盘块保存下一组的全部块号信息形成链式分组。分配从超级块取出块号分配组内耗尽就把下一组的内容读到超级块。回收盘块回收到当前组组满了把当前组信息写入新回收块超级块切换为新组。特点结合链表 栈思想超级块在内存大部分操作不用读磁盘速度高是 UNIX 系统采用的方案。