文件管理

两条大线:一条为OS中什么是文件包括其各种属性操作和结构等
一条线则为OS如何来管理它
一.文件
文件:以硬盘为载体的存储在计算机上的信息集合 可以是文档图片程序等
接下来是一堆概念性:
关于文件的属性即所附加的信息(元数据)
比如名称类型大小所有者......
拿Windows中文件作例
当然文件也会分类别比如:
系统文件 库文件 特殊文件 目录文件 源文件 只读文件等
接下来比较重要的两个概念:文件控制块和索引节点
文件控制块
没错同之前的PCB 文件也有一个FCB(文件控制块)
存放控制文件需要的各种信息的数据结构 以实现按名存取

后面会阐述到目录 这里先提前搞懂一下几个概念

后面目录还会详细阐述
索引节点
检索目录时 文件的名字用到其他描述信息不用到的无需调入内存
减少I/O 提高性能
分为磁盘索引节点和内存索引节点(主要区分两者内容)
磁盘索引节点:(每个文件有一个唯一的磁盘索引节点)
- 文件主标识符
- 文件类型
- 文件存取权限
- 文件物理地址
- 文件长度
- 文件链接计数
- 文件存取时间
内存索引节点:(文件被打开后 将磁盘索引节点复制到内存的索引节点中 便于以后使用)
有上述磁盘索引节点的内容并新增
- 索引节点号
- 状态
- 访问计数
- 逻辑设备号
- 链接指针
这里的题目还无法解答 搭配后面物理结构的索引分配来做
接下来是前面重要的文件操作
- 创建
- 打开
- 读/写
- 关闭
- 删除
逐一分析
创建
两步走:
1.为新文件分配外存空间
2.在目录中为其创建一个目录项
打开
就一句话记住:
首次打开文件需调用open()系统调用(用到文件名) 后面无论什么读写打开关闭等操作 不再使用文件名 而是使用文件描述符(索引号)
主要工作把指定文件的目录项复制到内存指定的区域
接下来难以理解是打开的过程是怎样的
系统找到指定文件的目录项后 将其从外存复制到内存中的打开文件表一个表目中 将索引号返回给用户(也相当于将FCB读到内存中)
读/写
根据文件描述符 进行读/写操作
我们以读文件的操作步骤来看
关闭
需要搭配打开计数器来进行close操作
系统表和进程表(都包含打开文件表)
主要工作将文件当前的控制信息从内存写回磁盘
一图搞懂
就是要一个进程打开一个文件就会在系统表中增加条目
当要关闭不使用的文件 则在进程打开文件表删除对应条目
系统表中的打开计数器-1 只有=0时候 才能删除对应条目
同时释放索引节点所占空间
删除
删什么是关键
1.对应目录项
2.对应FCB
3.回收对应磁盘空间
4.回收对应内存缓冲区
重要内容就是接下来的文件结构(逻辑结构和物理结构)
文件逻辑结构
从用户角度来看文件的组织形式 和存储介质特性无关
大白话就是假的
分为结构和无结构文件
无结构文件
结构文件
关于按组织形式所划分的文件
例如这题
文件物理结构
OS来组织
指将文件存储在外存上的存储组织形式 对用户透明
磁盘块:磁盘中的存储单元被分为一个一个的块
这里讲的是对非空闲块的管理 等到后面文件管理系统讲解对空闲块的管理
采用三种方式进行分配:
1.连续分配 要求每个文件在磁盘上占有一组连续的块
使得访问时所需的时间最小
2.链接分配(链表) 采用离散分配方式
优:消除碎片 动态分配 插入删除等操作方便
首先它划分为隐式链接和显式链接
搭配图解过程和题目来理解
隐式链接
文件第一块指针和最后一块指针对应一个链表 其他磁盘块分布在任何磁盘地方
除最后一块外 每个盘块都有指向文件的下一个盘块的指针(指针对用户透明)
这里穿插一点知识:可将多个盘块组成一个簇 按簇来分配 可减少查找时间 代价就是增加了内部碎片
比如这道题
就是按簇分配 一个簇不够 给它俩簇
显式链接
链接文件各物理块的指针
显式的放在一个FAT表里(文件分配表) 整个文件系统仅设置一张 每个表项存放指向下一个盘块的指针
求FAT(表项仅存放簇号)占用的空间大小
3.索引分配
支持随机访问 它会使用到索引块所以会增加一定的存储空间开销
理解起来很简单 随着文件越来越大索引块也会越来越多 又出现了一级索引 二级索引......
难点就在于计算题搭配之前的索引节点 直接看题
上述这道题完全显现关于索引分配搭配索引节点的计算题
算出一个磁盘放几个索引块 然后几个几级就乘几个
最后一点补充文件保护
文件访问 常由用户访问权限和文件属性共同限制
一图略过
二.目录
之前我们穿插的一个知识就是FCB那里的介绍
文件 目录 FCB到底有什么联系区别 这节来理解
没啥好设置谜底的 就是一图来理解
三句话:
一个文件目录项=一个FCB
多个文件目录项集合构成文件目录
一个FCB其对应一个文件
所以目录要实现的就是上述的按名存取
关于目录的操作没啥好说的 就是创建删除移动啥的
关于目录结构我们也简单带过就是四种
- 单级目录
- 两级目录
- 树形目录
- 无环图目录
单级目录
整个文件系统就一个目录表
两级目录
克服单级目录的缺点
树形目录
每个进程设置一个当前目录(工作目录)再找的时候从这开始
大部分OS采用这个
穿插一点知识:会有疑问为何快速检索工具类似listary是树形吗为何那么快找到文件
结合AI得到:引用索引全局 因此快
无环图目录
文件共享
多个用户共享同一个文件 系统只保留该文件的一个副本
建立链接关系时 必须将共享文件的物理地址复制到相应的目录
这节重点题目也是接下来的两种共享方式
基于索引节点的共享方式(硬链接)
将物理地址和属性等信息不再放在目录项中 而放在索引节点中
目录中只设置文件名及指向相应索引节点的指针
用图来理解
利用符号链实现文件共享(软链接)
去共享文件的只含有被链接文件的路径名 类似快捷方式
只有文件主才拥有指向其索引节点的指针
访问共享文件多次读盘 增大开销 符号链接也会耗费一定磁盘空间
看题轻松掌握
F1创建硬链接F2 然后F1和F2的count都变成了2
创建软链接F3 F3会变成1 删除F2 F1变为1 F3不会变还是1 它不依赖任何
漏了一点就是count(链接计数 也叫引用计数):表示链接到本索引节点上的用户目录项数量
例如count=2表示有两个用户共享此文件
三.文件系统管理
其他东西我们一笔带过 后面重点是如何管理空闲磁盘块
文件系统布局中有一个MBR即主引导记录 用来引导计算机 前面第一章我们总结过
MBR确定活动分区读入块(引导块)
引导块:负责启动分区中的OS
超级块:包含文件系统的所有关键信息
卷:包含文件系统的分区
虚拟文件系统:屏蔽不同文件系统的差异 提供统一调用接口
包含四种对象类型 都包含数据和函数指针
- 超级块对象
- 索引节点对象
- 目录项对象
- 文件对象
关于挂载linux的mount命令很熟悉了 文件系统在进程使用之前必须安装(挂载)
重点来总结对空闲磁盘块的管理方式
1.空闲表法
2.空闲链表法
3.位示图法
核心就是:用二进制的一位来表示一个盘块是否空闲
优点容易找 且占用空间少
缺点即位示图大小会随磁盘容量增加而增大
例如

很抽象我们用题目来理解

4.成组链接法
就是分组
参考:
作为牢大的第一天所作文章 后续最后OS大结局I/O设备管理












































浙公网安备 33010602011771号