王道操作系统课代表 - 考研计算机 第四章 文件管理 究极精华总结笔记
本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对
操作系统知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!!
关于对 “文件管理” 章节知识点总结的十分全面,涵括了《操作系统》课程里的全部要点(本人来来回回过了三遍视频),其中还陆陆续续补充了许多内容,所以读者可以相信本篇博客对于考研操作系统 “文件管理” 章节知识点的正确性与全面性;但如果还有自主命题的学校,还需额外读者自行再观看对应学校的自主命题材料。
食用说明书:
第一遍学习王道课程时,我的笔记只有标题和截图,后来复习发现看只看图片,并不能很快的了解截图中要重点表达的知识点。
在第二遍复习中,我给每一张截图中 标记了重点,以及 每张图片上方总结了该图片 对应的知识点 以及自己的 思考 。
最后第三遍,查漏补缺。
所以 ,我把目录放在博客的前面,就是希望读者可以结合目录结构去更好的学习知识点,之后冲刺复习阶段脑海里可以浮现出该知识结构,做到对每一个知识点熟稔于心!
请读者放心!目录展示的知识点结构是十分合理的,可以放心使用该结构去记忆学习!
注意(⊙o⊙)!,每张图片上面的文字,都是该图对应的知识点总结,方便读者更快理解图片内容。
《操作系统》第4章 文件管理
【考纲内容】
王道 P249 ~ 296(一) 文件
- 文件的基本概念;
- 文件元数据 和 索引结点;
- 文件的操作:创建、删除、打开、关闭、读、写;
- 文件的保护;
- 文件的逻辑结构;
- 文件的物理结构;
(二) 目录
- 目录的基本概念;
- 树形目录;
- 目录的操作;
- 硬链接 和 软链接;
(一)、(二) 网课总耗时:
4 h
(三) 文件系统
网课耗时:
0.5 h
- 文件系统的全局结构:文件系统在外存中的结构、文件系统在内存中的结构;
- 外存空间空闲空间管理方法;
- 虚拟文件系统;
- 文件系统挂载;
【复习提示】
本章内容较为具体,要注意对概念的理解;
| 知识点 | 考纲 | 重点掌握 |
|---|---|---|
| 文件系统的结构及其实现 | ✔ | |
| 文件分配 | ✔ | |
| 空闲空间管理 | ✔ | |
| 文件控制块 | ✔ | |
| 物理分配方法 | ✔ | |
| 索引结构 | ✔ | |
| 树形目录结构 | ✔ | |
| 文件共享原理 | ✔ | |
| 文件系统的布局 | ✔ | |
| 虚拟文件系统原理 | ✔ |
4.1 文件系统基础
【问题】
- 1) 什么是文件 ?
- 2) 单个文件的逻辑结构和物理结构之间是否存在某种制约关系 ?
本节内容较为抽象,要注意区分文件的 逻辑结构 和 物理结构 ;
在学习过程中,可尝试以上面的两个问题为线索,构建整个文件系统的概念;
在前面的学习中,曾经提醒过读者不要忽略对基本概念的理解。
从历年的情况来看,大部分同学对进程管理、内存管理有较好的掌握,但对于文件管理及后面的I/O管理,往往理解不太深入。
在考试中,即使面对一些基本问题也容易失分,这十分可惜。主要原因还是对概念的理解不够全面和透彻,希望读者能够关注这个问题。
4.1.1 文件的基本概念

1. 文件的属性
- ① 文件名
- ② 标识符
- ③ 类型
- ④ 创建者
- ⑤ 所有者
- ⑥ 位置
- ⑦ 大小
- ⑧ 保护
- ⑨ 创建时间、最后一次修改时间、最后一次存取时间

2. 文件内数据的组织方式
- 无结构文件,流式文件;
- 有结构文件,记录式文件;


3. 文件之间的组织方式
![]](https://img-blog.csdnimg.cn/b18bbb4030ca48f7a8cd14d85a7333c4.png)
4. 操作系统 对 文件管理 向上提供哪些服务 ?


5. 文件如何存放在外存 ?


初步认识 文件共享 和 文件保护

小结

4.1.2 文件目录


1. 文件控制块
文件控制块 (FCB) 是用来存放控制文件需要的各种信息的数据结构,以实现 按名存取;
FCB的有序集合称为 ==文件目录,==一个FCB就是一个文件目录项;
为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,称为 目录项;



2. 目录结构
① 单级目录结构

② 两级目录结构

③ 树形目录结构


树形目录结构 不便于实现文件的共享 ;

④ 无环图目录结构
在树形结构的基础上,允许 ==使用不同的文件名指向同一个文件或目录,==需要为每个共享结点设置一个 共享计数器;

3. 索引结点
文件除文件名之外的文件描述信息,由索引结点( i 结点)保存;
文件目录中的目录项由 文件名 和 指向该文件所对应的 i 结点 的指针构成;

- 磁盘索引结点
- 内存索引结点

小结

4.1.3 文件的逻辑结构

1. 无结构文件

2. 有结构文件
记录式文件,由一组相似的 记录 组成,每条记录又由若干个 数据项 组成;

记录 还可以分为 定长记录 和 可变长记录;


有结构文件在逻辑上如何被组织起来,分成三种方式:
- 顺序文件
- 索引文件
- 索引顺序文件

① 顺序文件


② 索引文件
上面提到,可变长记录文件无法实现随机存取,那又想快速查找、又想使用可变长记录,该怎么办?

③ 索引顺序文件
如果为每个记录对应一个索引表项,那就太占用空间了;
但如果先对记录分组,只给各组对应一个索引表项,那就很大程度减小索引表所要占用的空间;


对于记录数量较大的情况,可以建立 ==多级索引表,==进一步提高检索效率;

小结


4.1.4 文件的物理结构 ⭐


1. 文件块、磁盘块

文件分配,是指如何为文件分配磁盘块,常用的磁盘空间分配方法包括:
- 连续分配
- 链接分配
- 索引分配

2. 文件分配方式 - 连续分配
每个文件在磁盘上占用一组连续的块;


连续分配的文件不方便拓展,需要整体迁移到合适大小的连续空间去;

存储空间利用率低


3. 文件分配方式 - 链接分配

① 隐式链接



② 显式链接



4. 文件分配方式 - 索引分配

索引分配
- 文件 离散地 分配在各个磁盘块中;
- 每个文件对应 ==一张索引表,==记录文件的 各个逻辑块对应的物理块;
与 显式链接 不同,显式链接是整个磁盘的所有文件的索引信息都集中在一张索引表上;

索引表的 逻辑块号 可以是隐含的,进一步节约空间;

一个很大的索引表,一个磁盘块装不下,针对这个问题有以下三种解决方法:
- 链接方案
- 多层索引
- 混合索引

① 链接方案
使用多个索引块存储索引表,并采用链接的方式将它们连起来

② 多层索引
K + 1 次读磁盘操作:K次读索引表 + 1次读数据块

③ 混合索引
对于小文件,一个数据块就存储的了;若采用多级索引方式,就要访存多次,影响效率;
采用 ==混合索引,==既可以解决大文件存储问题,还可以减少对于小文件多次访存;


小结


4.1.5 逻辑结构 vs 物理结构















小结

4.1.6 文件的基本操作

1. 创建文件

2. 删除文件

3. 打开文件

有两种打开文件表

4. 关闭文件

5. 读文件

6. 写文件

小结

4.1.7 文件共享
注意 共享 与 复制 的区别;

1. 硬链接 - 基于索引结点

2. 软链接 - 基于符号链





小结

4.1.8 文件保护
为了防止 文件共享 可能会导致 文件被破坏 或 未经核准的用户修改文件,文件系统必须要控制用户对文件的存取;
所以,必须在文件系统中建立相应的 文件保护机制 ;
- 口令 和 加密 为了防止用户文件被他人存取或窃取;
- 访问控制 用于控制用户对文件的访问方式;

1. 口令保护

2. 加密保护


3. 访问控制
设置一个 访问控制表


小结

4.2 文件系统
【问题】
① 什么是 文件系统 ?
答:操作系统中 负责管理和存储文件信息的软件机构 称为文件管理系统,简称文件系统。
文件系统由三部分组成:与文件管理有关的软件、被管理文件及实施文件管理所需的数据结构;
② 文件系统要完成哪些 功能 ?
答:对于用户而言,文件系统最主要的功能是实现对文件的基本操作,让用户可以按名存储和查找文件,组织成合适的结构,并
应当具有基本的文件共享和文件保护功能。
对于操作系统本身而言,文件系统还需要管理与磁盘的信息交换,完成文件逻辑结构和物理结构上的变换,组织文件在磁盘上的
存放,采取好的文件排放顺序和磁盘调度方法以提升整个系统的性能。
【补充】
本节除了 外存空闲空间管理,其他都是2022年统考大纲的新增考点,基本都是概念知识点(多看几遍);
4.2.1 文件系统的层次结构

王道书中的图与王道视频不同,参考教材不同,不影响学习;

小结

4.2.2 文件系统的全局结构 - 布局

1. 物理格式化
==低级格式化:==划分扇区、检测坏扇区、用备用扇区替换坏扇区;
当要访问某一块坏扇区时,会使用备用扇区,默默完成替换工作;

2. 逻辑格式化
==高级格式化:==磁盘分区;
每个区的大小、地址范围等信息,会使用 分区表 来记录;
在每个区里可以建立各自独立的文件系统 ,例如在C盘里建立UNIZX文件系统;
主引导记录 MBR
位于磁盘的 0 号扇区,用来引导计算机。MDR 后面是 分区表,记录各分区的起始、结束地址;
表中的一个分区被标记为 活动分区 ,启动计算机时,BIOS 读入并执行 MBR ;
MBR 会确认活动分区,读入它的第一块 (引导块);
UNIX 文件系统
- 引导块:负责开机时初始化操作系统;
- 超级块:包含文件系统的所有关键信息,可以迅速找到磁盘分区里所有的空闲块;
- 位示图 (磁盘空间管理):可以迅速判断某一个特点的盘块是否空闲;
- i 结点:索引结点,连续存放,每个文件对应一个结点,可以把 i 结点区看成一个大数组;
- 根目录:完成逻辑格式化之后,根目录就会被建立起来;


3. 文件系统在内存中的结构
- 安装表:每个已安装文件系统分区的有关信息;
- 目录结构的缓存:最近访问的目录;
- 系统打开文件表:内存中只有一张;
- 进程打开文件表:每个进程一张,在PCB中;


4.2.3 外存空闲空间管理


1. 存储空间的划分与初始化
- 文件卷(C盘、D盘);
- 目录区(FCB、磁盘空间管理信息);
- 文件区(文件数据)

2. 几种管理方式
(1) 空闲表法
设置了一个空闲盘块表,要搞清楚三个点:
- 空闲盘块表如何记录信息 (初始块号,长度) ;
- 如何分配磁盘块 (连续分配方式) ;
- 如何回收磁盘块 (注意合并问题) ;

(2) 空闲链表法

① 空闲盘块链
- 分配从链头,回收进链尾;
- 适用于 离散分配 ;

② 空闲盘区链
- 分配从链头开始检索 (首次适应、最佳适应算法);
- 回收, 与其它空闲合并 或 挂到链尾;
- 连续、离散分配 都适应;

(3) 位式图法
连续、离散分配 都适应;


(4) 成组链接法

每个分组的盘块数量都是 有上限 的,下图举的例子中,最后一组的磁盘块 比 倒二组 的数量少1

分配一个空闲块的情况

分配100个空闲块的情况


回收未满的情况


回收已满的情况


小结

4.2.4 虚拟文件系统和文件系统挂载

1. 虚拟文件系统
下图普通的文件系统,不同的外部存储设备,它的文件系统可能是不相同的,对于同一个操作的函数方法定义也许也各不相同;

鉴于上图提到的问题,操作系统内核需要向上层的用户进程提供一个 统一标准的函数调用接口;
这就是 虚拟文件系统 VFS 的一个特点;


UFS文件系统的目录项 和 FAT文件系统的目录项 格式不同,这就造成新的问题:
虚拟文件系统打开不同的文件,得到的文件信息数据格式都不同;

对于不同文件系统的数据结构,VFS 在每打开一个文件,就在主存建立一个 ==vnode,==用 统一的 数据结构表示文件;
注意 vnode 和 inode 的区别;

==函数功能指针:==指向该文件系统的功能函数列表;
通过 函数功能指针 找到对应的函数功能,进而完成所要完成的操作;

2. 文件系统挂载
将一个系统挂载到操作系统;例如:插入一个U盘,就把 U盘的文件系统 挂载到 OS的虚拟文件系统;

4.3 常见问题和易混淆知识点
1. 文件的物理分配方式的比较
文件的三种物理分配方式的比较如下表:
| 访问第n条记录 | 优点 | 缺点 | |
|---|---|---|---|
| 连续分配 | 需访问磁盘1次 | 顺序存取时速度快,文件定长时可根据文件起始地址及记录长度进行随机访问 | 文件存储要求连续的存储空间,回产生碎片,不利于文件的动态扩充 |
| 链接分配 | 需访问磁盘n次 | 可解决外存的碎片问题,提高外存空间的利用率,动态增长较方便 | 只能按照文件的指针链顺序访问,查找效率低,指针信息存放消耗外存空间 |
| 索引分配 | m级需访问磁盘m+1次 | 可以随机访问,文件易于增删 | 索引表增加存储空间的开销,索引表的查找策略对文件系统效率影响较大 |
2. 文件打开的过程描述
① 检索目录,要求打开的文件应该是已经创建的文件它应登记在文件目录中,否则会出错。
在检索到指定文件后,就将其磁盘iNode复制到活动iNode表中。
② 把参数 mode所给出的打开方式与活动inode 中在创建文件时所记录的文件访问权限相比较,如果合法,则此次打开操作成功。
③ 当打开合法时,为文件分配用户打开文件表表项和系统打开文件表表项,并未后者设置初值,通过指针建立表项与活动iNode之间的联系,再把文件描述符fd返回给调用者。
相关文章:
王道操作系统课代表 - 考研计算机 第四章 文件管理 究极精华总结笔记
本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 “文件管理” 章节知识点总结的十分全面,涵括了《操作系统》课程里的全部…...
前端开发规范,你真的了解吗?一起来学习一下前端开发规范,让你的代码高级起来!
代码规范 1 编码风格规范 1.1 使用ES6风格编码源码 定义变量使用let ,定义常量使用const 使用export ,import 模块化 1.2 组件 props 原子化 提供默认值 使用 type 属性校验类型 使用 props 之前先检查该 prop 是否存在 1.3 避免 this.$parent 1.4 谨慎使用 …...
Licode—基于webrtc的SFU/MCU实现
1. webrtc浅析webrtc的前世今生、编译方法、行业应用、最佳实践等技术与产业类的文章在网上卷帙浩繁,重复的内容我不再赘述。对我来讲,webrtc的概念可以有三个角度去解释:(1).一个W3C和IETF制定的标准,约定…...
开发运维工具推荐 --- 解决远程访问局域网服务的问题。开发调试推荐
一、FastNat 可为您解决的问题1. 没公网服务器,需要发布本地的站点或网络程序到公网上,供他人访问;此项功能大大方面开发人员进行远程调试,微信小程序等开发工作进行。2. 需要远程到在其他网络中的设备,但两处的网络不…...
【华为OD机试 】单词倒序(C++ Java JS Python)
文章目录 题目描述输入描述输出描述备注用例题目解析C++ 解法JavaScript算法源码Java算法源码Python解法题目描述 输入单行英文句子,里面包含英文字母,空格以及,.?三种标点符号,请将句子内每个单词进行倒序,并输出倒序后的语句。 输入描述 输入字符串S,S的长度 1 ≤ N…...
PLC 诊断故障的基本原理
(1)东欢坨选煤厂机电设备故障信号主要取自开关量信号,PLC 通过开关量的通和断对设备进行故障诊断。PLC 对开关量的识别是通过输入模块来实现的。PLC 控制设备运行时,设备中的温度、压力、急停、跑偏、速度、过热以及各种按钮和行程开关的传感器与 PLC 输入模块相连接,输入模块的…...
QT打开外部程序并嵌入Qt子窗口的缺点
首先可以参考如下文章: QT打开外部程序并嵌入Qt界面_qt界面嵌入外部应用程序_初学小白Lu的博客-CSDN博客 Qt嵌入外部程序界面初探_qt嵌入其他程序窗口_liming4675的博客-CSDN博客 QT 如何把外部程序嵌入到QT界面_qt嵌入其他程序窗口_hellokandy的博客-CSDN博客 Qt界…...
如何系统地学习 C++ 语言?
C作为具有广泛适用性的编程语言,学习C的人越来越多,但是如何系统地学习C还是个问题,下面我们一起来看一下C学习的方法有哪些吧。 首先,要学习C,最重要的就是掌握C的基础知识。 比如数据结构、算法、微积分等。这些都是…...
【数据结构】单链表
链表1.为什么存在链表2.链表的概念3.单链表的实现4.测试1.为什么存在链表 我们在学习顺序表的时候,了解到顺序表有一定的缺陷:(1)在中间插入数据和删除数据需要挪动数据,时间复杂度是O(N)&…...
Windows 右键菜单扩展容器 [开源]
今天给大家分享一个我做的小工具,可以自定义扩展右键菜单的功能来提高工作效率,效果图如下: 如上图,右键菜单多了几个我自定义的菜单: 复制文件路径 复制文件夹路径 我的工具箱 <走配置文件动态创建子菜单&#x…...
爆文制造机!小红书热榜3个方向,告诉你选题诀窍!
我们知道,不论是达人创作内容,还是品牌制定Brief,都需要提前调研筛选海量信息,这时候如果有一个自己的内容素材库,就省事多啦。按照内容需求,我们可以按3个角度划分小红书内容素材:笔记类型、竞…...
【Web安全社工篇】——水坑攻击
作者名:白昼安全主页面链接: 主页传送门创作初心: 以后赚大钱座右铭: 不要让时代的悲哀成为你的悲哀专研方向: web安全,后渗透技术每日鸡汤:努力赚钱不是因为爱钱“水坑攻击”,黑客攻…...
SpringBoot 整合 MongoDB 实现数据的增删改查!
一、介绍在 MongoDB 中有三个比较重要的名词:数据库、集合、文档!数据库(Database):和关系型数据库一样,每个数据库中有自己的用户权限,不同的项目组可以使用不同的数据库集合(Colle…...
VUE前端常问面试题
文章目录一、VUE前端常问面试题二、文档下载地址一、VUE前端常问面试题 1、MVC和MVVM 区别 MVC:MVC全名是 Model View Controller,即模型-视图-控制器的缩写,一种软件设计典范。 Model(模型):是用于处理应用程序数据逻辑部分。通…...
c++中map/unordered_map的不同遍历方式以及结构化绑定
文章目录方式一:值传递遍历方式二:引用传递遍历方式三:使用迭代器遍历方式四:结构化绑定(c17特性)结构化绑定示例(1)元组tuple结构化绑定(2)结构体结构化绑定(3ÿ…...
Kafka系列之:Kraft模式
Kafka系列之:Kraft模式 一、Kraft架构二、Kafka的Kraft集群部署三、初始化集群数据目录四、创建KafkaTopic五、查看Kafka Topic六、创建生产者七、创建消费者一、Kraft架构 Kafka元数据存储在zookeeper中,运行时动态选举controller,由controller进行Kafka集群管理。Kraft模式…...
动态规划:leetcode 139.单词拆分、多重背包问题
leetcode 139.单词拆分leetcode 139.单词拆分给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1&…...
Stable Diffusion原理详解
Stable Diffusion原理详解 最近AI图像生成异常火爆,听说鹅厂都开始用AI图像生成做前期设定了,小厂更是直接用AI替代了原画师的岗位。这一张张丰富细腻、风格各异、以假乱真的AI生成图像,背后离不开Stable Diffusion算法。 Stable Diffusion…...
webpack高级配置
摇树(tree shaking) 我主要是想说摇树失败的原因(tree shaking 失败的原因),先讲下摇树本身效果 什么是摇树? 举个例子 首先 webpack.config.js配置 const webpack require("webpack");/**…...
jQuery 事件
jQuery 事件 Date: February 28, 2023 Sum: jQuery事件注册、处理、对象 目标: 能够说出4种常见的注册事件 能够说出 on 绑定事件的优势 能够说出 jQuery 事件委派的优点以及方式 能够说出绑定事件与解绑事件 jQuery 事件注册 单个时间注册 语法:…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
