【操作系统】24王道考研笔记——第四章 文件管理

第四章 文件管理

一、文件系统基础

1.基本概念

2.文件的逻辑结构

顺序文件:

索引文件:

索引顺序文件:

效率分析:

多级索引顺序文件:

总结:

3.文件目录

文件控制块(FCB)

目录的基本操作:

目录结构:

树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了"无环图目录结构"。

索引结点:

总结:

4.文件的物理结构

(文件分配方式)

文件块、磁盘块:

连续分配:

  • 优点:支持顺序访问和直接访问(即随机访问);连续分配的文件在顺序访问时速度最快
  • 缺点:不方便文件拓展;存储空间利用率低,会产生磁盘碎片

链接分配:

链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。

隐式分配:

隐式链接------除文件的最后一个盘块之外,每个盘块中都存有指向下一个盘块的指针。文件目录包括文件第一块的指针和最后一块的指针。

  • 优点:很方便文件拓展,不会有碎片问题,外存利用率高。
  • 缺点:只支持顺序访问,不支持随机访问,查找效率低,指向下一个盘块的指针也需要耗费少量的存储空间

显式分配:

显式链接------把用于链接文件各物理块的指针显式地存放在一张表中,即 文件分配表(FAT,FileAllocation Table)。一个磁盘只会建立一张文件分配表。开机时文件分配表放入内存,并常驻内存。

  • 优点:很方便文件拓展,不会有碎片问题,外存利用率高,并且支持随机访问。相比于隐式链接来说,地址转换时不需要访问磁盘,因此文件的访问效率更高。
  • 缺点:文件分配表的需要占用一定的存储空间。

逻辑结构与物理结构对比总结:

5.文件存储空间管理

存储空间的划分:

空闲表法:

空闲链表法:

分为空闲盘块链以及空闲盘区链

位示图法:

  • 如何分配:若文件需要K个块,①顺序扫描位示图,找到K个相邻或不相邻的"0";②根据字号、位号算出对应的盘块号,将相应盘块分配给文件;③将相应位设置为"1"。
  • 如何回收:①根据回收的盘块号计算出对应的字号、位号;②将相应二进制位设为"0"

成组链接法:

空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。UNIX系统中采用了成组链接法对磁盘空闲块进行管理。

文件卷的目录区中专门用一个磁盘块作为"超级块",当系统启动时需要将超级块读入内存。并且要保证内存与外存中的"超级块"数据一致

如何分配?

Eg :需要1个空闲块

①检查第一个分组的块数是否足够。1<100,因此是足够的。

②分配第一个分组中的1个空闲块,并修改相应数据

总结:

6.文件的基本操作

7.文件共享

注意:多个用户共享同一个文件,意味着系统中只有"一份"文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。

如果是多个用户都"复制"了同一个文件,那么系统中会有"好几份"文件数据。其中一个用户修改了自己的那份文件数据,对其他用户的文件数据并没有影响。

硬链接:

软链接:

总结:

8.文件保护

口令保护:

加密保护:

访问控制:

总结:

二、文件系统

1.文件系统结构

2.文件系统布局

逻辑格式化

在外存中

在内存中

用open系统打开文件的过程

3.虚拟文件系统

普通的文件系统

虚拟文件系统

特点:

  • ①向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
  • ②VFS要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求
  • ③每打开一个文件,VFS就在主存中新建一个 vnode,用统一的 数据结构表示文件,无论该文件存储在哪个文件系统。
  • 注意:vnode 只存在于主存中,而 inode(索引结点) 既会被调入主存,也会在外存中存储

存在的问题:

实现函数的过程:

文件系统挂载

主要参考:王道考研课程

后续会持续更新考研408部分的学习笔记,欢迎关注。

github仓库(含所有相关源码):408数据结构笔记

相关推荐
huangkj-henan27 分钟前
DA217应用笔记
笔记
Young_2022020229 分钟前
学习笔记——KMP
笔记·学习
秀儿还能再秀1 小时前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
WCF向光而行1 小时前
Getting accurate time estimates from your tea(从您的团队获得准确的时间估计)
笔记·学习
Li_0304063 小时前
Java第十四天(实训学习整理资料(十三)Java网络编程)
java·网络·笔记·学习·计算机网络
啤酒泡泡_Lyla3 小时前
现代无线通信接收机架构:超外差、零中频与低中频的比较分析
笔记·信息与通信
龙中舞王3 小时前
Unity学习笔记(4):人物和基本组件
笔记·学习·unity
红色的山茶花4 小时前
YOLOv7-0.1部分代码阅读笔记-general.py
笔记·yolo
烟雨长虹,孤鹜齐飞4 小时前
【SpringBoot】黑马大事件笔记-day3
笔记
我叫乐多你养我啊7 小时前
Windows远程连接Docker服务
笔记·docker