操作系统基础学习总结第四章
第四章
4.1文件
文件为一组有意义的信息/数据集合
操作系统向上提供的基本功能有:

文件的逻辑结构
无结构文件:文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”
有结构文件:由一组相似的记录组成,又称“记录式文件”。每条记录又有若干个数据项组成。
有结构文件包括
顺序文件:文件中的记录按照其存入的先后顺序或某个关键字的顺序来排序,并在物理磁盘上依次、连续地存放。
索引文件:一种通过索引表来加速记录检索的文件逻辑结构。由数据文件和索引表两部分组成。
索引顺序文件:一种结合了顺序文件和索引文件优点的文件组织方式。它在物理上按关键字的顺序存储记录,与此同时,为文件建立稀疏索引,该索引不指向每条记录,而是指向一组记录中的第一项。
4.2文件目录
一个文件对应一个FCB,一个FCB就是一个目录项,多个FCB组成文件目录。
目录结构
单级目录结构:整个系统中只建立一张目录表,每个文件占一个目录项。
单级目录实现了按名存取,但是不允许文件重名。不适用于多用户操作系统
两级目录结构:主文件目录和单文件目录
主文件目录记录用户名及相应用户文件目录的存放位置;用户文件目录由该用户的文件FCB组成。
多级目录结构:它允许用户在根目录下创建多级子目录,从而以树状层次的方式组织文件和目录,解决了单级和两级目录在文件命名冲突、组织灵活性等方面的不足。
主要特点:
层次化:文件被组织成树状结构,逻辑清晰。
允许重名:不同目录下的文件可以同名。
访问路径唯一:每个文件都有唯一的绝对路径,从根目录出发可精确访问。
支持当前工作目录:用户始终处于某个目录下,可省去路径前缀,使用相对路径访问下属文件。
目录也是文件
无环图目录结构:树形目录基础上,允许一个文件或子目录被多个不同目录共享的一种目录组织方式。它通过共享节点形成有向无环图,从而解决树形结构中数据只能属于单一父目录的限制,同时必须避免循环引用。
索引节点(innode):用于存储文件的元数据(除文件名以外的所有属性)以及指向文件数据块的指针。每个文件都有唯一的一个索引节点,通过innode编号在整个文件系统中唯一标识。
4.3文件的物理结构
文件连续分配方式:
连续分配:要求每个文件在磁盘上占有一组连续的块
物理上采用连续分配,存储空间利用率低,会产生难以利用的磁盘碎片
链接分配:采取离散分配的方式,可以为文件分配离散的磁盘块。

隐式链接:除文件的最后一个盘块外,每个盘块中都存有指向下一个盘块的指针。文件目录包括文件第一块的指针和最后一块的指针。
显示链接:把用于链接文件各物理块的指针显式存放在一张表中。即文件分配表(FAT)
一个磁盘仅设置一张FAT,开机时,将FAT读入内存,并常驻内存。
索引分配
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。

索引分配的多层索引


4.4文件存储空间管理
存储空间的划分与初始化
磁盘分区为C盘、D盘,物理磁盘划分为一个个文件卷。
磁盘的文件卷分为目录区和文件区
目录区主要存放文件目录信息、用于磁盘存储空间管理的信息
文件区用于存放文件数据
空闲表法
它通过维护一张空闲表来记录磁盘上所有未分配的空闲块的信息,类似于内存管理中的空闲分区表。
空闲表是一个在内存中常驻的数据结构,通常是一个数组或链表,每个表项描述一个连续的空闲区域。每个表项包含:起始块号、空闲块数。
空闲链表法

位示图法
一种使用二进制位来记录磁盘存储空间使用情况的方法。每个磁盘块对应位示图中的一个比特位,通常用0表示空闲,1表示已分配。通过扫描位示图,操作系统可以快速找到空闲块并分配,回收时只需将对应位清零。
4.5文件基本操作
创建文件:
create系统调用。(1)在外村中找到文件所需的空间。(2)根据文件存放路径信息找到该目录对应的目录文件,在目录中创建该文件对应的目录项。
删除文件
delete系统调用。(1)根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项。(2)根据该目录项记录的文件在外存的存放位置、文件大小等信息,回收文件占用的磁盘块。(3)从目录表中删除文件对应的目录项。

4.6文件共享
基于索引节点的共享方式:

基于符号链的共享方式

4.7文件保护
口令保护:用户请求访问该文件时必须提供口令。口令保存在文件中的FCB
加密保护:使用某个密码对文件进行加密,在访问文件时需要提供正确的密码才能对文件进行正确的解密。
访问控制:每个文件的FCB中增加一个访问控制列表,该表中记录了各个用户可以对文件执行哪些操作。精简的访问列表,以组为单位,标记各组用户可以对文件执行哪些操作。
4.8文件系统
虚拟文件系统
特点:
(1)向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异。
(2)VFS要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write。
(3)每打开一个文件,VFS就在主存中新建一个vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统。
文件系统挂载:文件系统安装/装载
文件系统挂载要做的事:
(1)在VFS中注册新挂载的文件系统。内存中的挂载表包含每个文件系统的相关信息,包括文件系统类型、容量大小等。
(2)新挂载的文件系统,要向VFS提供一个函数地址列表
(3)将新文件系统加到挂载点,也就是将新文件系统挂载在某个父目录下
参考:王道操作系统
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)