操作系统概念:
1. 总述
2. 进程管理
3. 内存管理
4. 文件管理
5. IO管理
以计算机硬盘为载体的存储在计算机上的信息集合
在用户进行输入、输出时,以文件为单位
文件名:同一目录下,文件名唯一
标识符:一个系统内,文件标识符唯一
类型:被不同类型的文件系统使用
位置
文件的路径:用户使用
外存地址:指向文件存放位置的指针,仅OS使用(用户不可见)
保护:对文件进行保护的访问控制信息
大小、时间、日期和用户标识
数据项:文件系统中最低级的数据组织方式
记录:一组相关的数据项集合
文件:一组相关信息的集合
记录式文件:由一组相似的记录组成
根据记录长度是否可变分为
定长记录文件:不同记录的同一数据项有相同位置
变长记录文件
读写前 必须 打开,读写后 必须 关闭
create系统调用 ,参数为:
OS的工作
delete系统调用,参数为:
OS的工作
open系统调用 参数:
OS工作
打开文件表 中,返回打开文件表中的索引号——文件描述符
读写指针 :记录该进程对文件的读/写操作进行的位置访问权限:声明为 “只读” ,则该进程不能对文件进行写操作打开计数器:记录当期系统,有多少个进程打开了此文件,若不为0,则无法删除OS工作
文件需要读入内存的原因:只有在内存中才能让CPU处理
read系统调用 参数:
文件描述符(打开文件表中的序号)
一旦完成FCB在磁盘上的定位,系统将不再使用文件名
待读入的数据量
读入后数据存放在内存中的位置——读指针
write系统调用 参数
根据 写指针 与待写入的数据量,确定写入文件的内容
文件内数据的组织方式,描述的是文件记录间的关系

以字节为单位,数据按顺序组织成记录
一个流式文件可视为一个字符流
分为 顺序文件 ,索引文件 ,索引顺序文件
记录之间依次顺序排列
缺点:增加/删除记录困难
逻辑相邻,物理相邻
对于不定长记录:无法实现随机存取
对于变长记录:
采用串结构:无法快速找到关键字对应的记录
采用顺序结构:可快速找到关键字对应的记录
逻辑相邻,物理存储位置不一定相邻
一定无法实现随机存取,只能从第一个记录依次向后查找
对可变长记录文件中的记录提取关键字,为每条记录创建定长的索引项,进而形成的定长记录的顺序文件
一个文件以多个数据项为关键字建立不同的索引文件
索引项:{关键字|长度|指针}
适用于对信息处理的及时性要求高的场合
记录按某个标准分组,为每个分组建立索引项,记录该组的首地址
索引表:定长记录的串结构顺序文件
不需要按关键字排序,便于表项的插入和删除
索引项:{该记录的关键字值|执行该记录的指针}
多级索引顺序文件:当有 a n a^n an 个记录,每个索引表有 a n t a^{\frac{n}{t}} atn 个表项,需要建立t级索引
从用户视角来看,整个文件是连续存放的
对于操作系统来说,一个文件就是磁盘块中存储的二进制数据,根据盘块的分配方式,组合这些二进制数据


一个文件在辅存上存放、链接、编目的方法
一个文件拥有的磁盘块的组织方式,相当于磁盘非空闲块的管理
存放于FCB中
OS为文件分配空间以磁盘块为单位
实际文件分配中,会将多个块并为一个簇,以簇为单位进行分配
一个文件在磁盘上占有一组连续的块
FCB中 存放位置字段 :起始物理块号+文件长度
优点:
缺点:
为一个文件分配的盘块,每个都有指向下一个盘块的指针(对用户透明)
FCB中 存放位置字段 :第一个盘块的指针+最后一个盘块的指针
地址映射
i存放位置字段 获取起始物理块指针,将前i-1块依次调入内存获得第i块的指针p,最后由指针p将第i块调入内存优点
缺点
FAT文件分配表:将链接文件的各物理块指针显式存放在一张表中
相当于静态链表
地址映射
优点
缺点
数据块:存放数据
每个文件都有索引块:索引块中存的是文件名之外的信息,完成文件目录的瘦身
FCB中 存放位置字段:文件名+索引块号
优点:
缺点
前一个索引表用一个索引项指向下一个索引表
FCB中 存放位置字段 :存放的是第一个索引块块号
由于只能顺序访问,所以效率低
各级索引表的大小不能超过一个磁盘块
FCB中 存放位置字段 :顶级索引块号

假设一个磁盘块大小为1KB,一个索引项占4B,则一个磁盘块最多存放256个索引项
若某文件使用两层索引,则文件的最大长度可以达到 256 ∗ 256 ∗ 1 K B = 65536 K B = 64 M B 256*256*1KB=65536KB=64MB 256∗256∗1KB=65536KB=64MB
若访问1026号逻辑块,则 1026 / 256 = 2 , 1026 % 256 = 2 1026/256=2,1026\%256=2 1026/256=2,1026%256=2
即整个数据访问过程需要3次磁盘I/O
一个顶级索引表中,指向多种索引表

根据各层索引结构计算文件的最大长度,各级索引表的大小,不能超过一个块的大小
索引方式磁盘I/O次数

磁盘空闲块管理,数据结构存放于文件卷的目录区
一个文件存储在一个文件卷中
一个文件卷与物理盘为多对多关系
目录区
文件区
FAT可也完成对空闲空间的管理
在为每个文件链接盘块时,也标记除了空闲盘块
适用于为文件分配一块连续的存储空间
适用于连续的盘块分配方式

空闲表项:{表项序号|该空闲区的第一个空闲块号|该区空闲盘块数}
相应的盘块分配方法
盘块的回收:合并相邻空闲盘块表项
OS始终保持着链头和链尾指针
适用于 离散的盘块分配方式

以盘块为单位组成一条空闲链

查找下一节点方式:每个盘块存放着下一空闲盘块的指针
盘块的分配方式:
盘块的回收
以盘区为单位组成一条空闲链,连续空闲盘块组成一个空闲盘区

查找下一节点方式:每个空闲盘区的第一个盘块记录下一盘区的指针以及本盘区的长度
盘块的分配
盘块回收
每个二进制位对应一个盘块,用一个字长的01串表示每个盘块的空闲情况
适用于 离散与连续的盘块分配方式

字号位号与盘块号的转换
设盘块号为
b
,字号为
i
,位号为
j
,字长为
n
b
→
{
i
,
j
}
:
i
=
b
n
j
=
b
%
n
i
,
j
→
:
b
=
n
∗
i
+
j
盘块的分配
盘块的回收
适合于大型文件系统

每组的第一个盘块记录顺序的n个空闲盘块数,为超级块。第二个盘块记录下一组的第一个盘块号
每个分组的最大空闲块数固定
如果是最后一个组,则将下一组的盘块号设置为特殊值
假设请求1个空闲块

摘下一个盘块,并修改可用盘块数量
请求100个盘块

第一个分组未满,回收后未达到一个分组的最大块数

假设一个分组最多100个空闲块,此时第一个分组已满,若有一个新块需要回收

OS启动时,会将根目录导入内存,并常驻内存
实质上是访问目录项(FCB),若目录调入内存,需要一次磁盘I/O操作
用户调用 系统调用 ,提供参数
根据文件路径查找对应的目录项
检查用户权限,将FCB复制到系统的打开文件表
根据FCB的地址,获得文件的第一个外存块
根据 文件记录的组织方式,获取目标的逻辑地址(相对于文件起始位置的偏移量)
根据逻辑地址与磁盘块的大小,计算目标记录该文件占有的磁盘块
OS对各类型文件的磁盘块分配方式不同

得到物理块号后,由 磁盘驱动程序 转化为 {柱面号|盘面号|扇区号},将二进制数据返回给内存

向用户提供文件与目录相关的调用
管理文件目录
- 根据用户给出的文件路径找到相应的FCB或索引结点
- 将(文件表目录项)FCB读入内存,只知道文件的描述信息,所有和目录、目录项相关的管理工作都在本层完成
实现文件的保护:把用户的访问请求与FCB中指示的访问控制权限对比,验证合法性
逻辑文件系统:根据文件的逻辑结构将用户要访问的文件记录号转换成文件逻辑结构的逻辑块号
文件缓冲区:索引表调入内存后,存放的位置
逻辑块号转换成相应的物理块号
负责文件存储空间的管理,负责分配和回收存储空间
先检测是否用相关需求才决定启动与否
直接与设备交互
目录本身是一种有结构文件,每条记录对应于存放于该目录下的文件
存放文件控制需要的各种信息的数据结构
FCB的有序集合为文件目录,一个FCB为文件目录项
文件描述信息(FCB) 以目录项的形式保存在目录结构 {文件名|存取权限|存放位置}
{文件名|文件物理位置|文件逻辑结构|文件物理结构}文件存取权限由FCB的表项实现文件名和文件物理位置间的映射
目录项 {文件名|数据块指针}
创建文件时,必须确保没有同名文件存在
根据文件名得到一个值,返回一个指向线性列表中元素的指针
优点
缺点
在磁盘上的搜索,需要不断地I/O操作
线性列表
哈希表
系统表中只有一张目录表,每个文件对应一个目录项
解决:按名存取
缺点
主文件目录:目录项记录用户名及相应用户文件目录的位置
用户文件目录:目录项记录用户名及相应用户文件目录的位置
解决:文件重名;可以增加访问限制,一定程度上保证文件安全
缺点
文件路径:到目标文件的通路上,所有目录名与数据文件用
/连接

解决:文件分类
缺点:不便于文件共享
目录成为有向无环图:在树型目录结构基础上,增加指向同一结点的有向边
增加共享计数器:只有当前结点的共享计数器值为0才能删除
解决:文件共享
原理:查找过程中,只需使用文件名,只有文件名匹配才需要获取文件的其他信息
找到文件名对应的目录项,将索引结点的调入内存,根据索引结点中的 存放位置 找到目标文件
索引分配
文件名+索引结点指针

索引结点指针
直接地址:存放的是文件数据所在的盘块号;
文件大小<直接地址空间*磁盘块大小多级索引:每增一级都是数量级上的提升
系统中只保存一份真实数据,一个用户修改,其他用户可以感知
区别于复制
共享的前提是有访问权限
索引结点中设置一个
链接计数器变量count,表示链接到本索引结点上的用户目录项数量

当用户删除该文件时,只是把用户目录中与该文件对应的目录项删除,且索引结点的count减1
当count=0时,才真正物理删除该文件
当访问共享文件时,操作系统判断为
Link类型的文件,于是会根据其中记录的路径层层查找目录,最终找到文件目录表中的FCB

优点
缺点
解决对文件的读、写、执行的许可问题

文件创建者提供口令,在FCB创建时,增加口令字段
优点
缺点
通过密钥对文件内容加密
优点
缺点:编码和译码要花费一定的时间
为每个文件(包括目录文件)增加一个访问控制列表ACL
- 规定每个用户名及其访问权限
- 必须按位规定
拥有者:文件创建者
组
如果对某个目录进行访问控制,则这个目录下的所有文件都要有相同的访问控制权限
表面涂油磁性材质的金属或塑料圆盘构成的圆盘

磁道:一个磁道划分为若干扇区
扇区:一个扇区称为一个盘块
每个扇区存放的数据量相同
最内侧磁道上扇区面积最小,数据密度最大
磁盘存储能力受限于最内道的最大记录密度
磁头:所有石头固定在同一磁臂上
多个盘面中,相对位置相同的磁道


柱面号 移动磁臂,让磁头指向指定柱面{柱面号|盘面号|扇区号}
为什么是柱面号在前
切换柱面需要磁头的机械移动,而切换盘面,扇区不需要磁头的移动,因此将柱面放在高地址字段

将磁盘的各个磁道划分为扇区

扇区:
管理扇区所需的数据结构:扇区校验码,扇区中数据是否发生错误
每个分区由若干柱面组成

创建文件系统
- 创建文件系统根目录
- 初始化存储空间管理
自举程序:计算机开机需要进行一系列初始化工作,这些初始化工作由 自举程序 完成
完整的自举程序存放在磁盘的启动块中,又称为引导块 、启动分区
自举装入程序
坏块属于 硬件故障 ,无法修复的。应该将坏块标记,以免错误地使用
坏块对操作系统不透明
对于简单的磁盘,可以在逻辑格式化时,对整个磁盘的坏块检查,表明哪些是坏块
对于复杂的磁盘,磁盘控制器(设备内部的硬件)会维护一个坏块链表,在低级格式化(物理格式化)就将坏块链初始化
系统会保留一些备用扇区,用于替换坏块,这时坏块对操作系统透明
转速是磁盘的物理属性,无法优化
磁头移动到目标磁道的时间
T s = s + m × n Ts=s+m\times n Ts=s+m×n
旋转盘片,使磁头定位到目标扇区
设磁盘转速为 r ( 转 / s ) ,平均所需延迟时间 T R = 1 2 × 1 r 设磁盘转速为r(转/s),平均所需延迟时间T_R=\frac{1}{2}\times\frac{1}{r} 设磁盘转速为r(转/s),平均所需延迟时间TR=21×r1
优化前提:在实际中,读完一个扇区,磁头需处理一段时间,但磁头不断旋转
盘面交替编号
逻辑相邻的扇区在物理上有一定间隔,可以使读取连续逻辑扇区所需的延迟时间更小

柱面错位命名

T t = 1 r × b N = b r N T_t=\frac{1}{r}\times\frac{b}{N}=\frac{b}{rN} Tt=r1×Nb=rNb
优先处理此时与当前磁头最近的磁道
优点:性能较好;平均寻道时间段
缺点:可能产生 “饥饿” 现象
只有磁头移动到最外侧的时候才能往内移动,移动到最内侧磁道的时候才能往外侧移动
磁道移动道数 = 最外侧磁道号 − 当前磁道号 + 最外侧磁道号 − 访问的最小磁道号 磁道移动道数=最外侧磁道号-当前磁道号+最外侧磁道号-访问的最小磁道号 磁道移动道数=最外侧磁道号−当前磁道号+最外侧磁道号−访问的最小磁道号
优点
缺点
只有达到最边上的磁道才能改变磁头移动方向
对于各个位置磁道的响应频率不平均
刚处理了90号磁道,下次处理要很长时间;而响应了184号磁道,很快就能访问
LOOK调度算法
磁道移动数 = 访问的最大磁道号 − 当前磁道号 + 最大磁道号 − 最小磁道号 磁道移动数=访问的最大磁道号-当前磁道号+最大磁道号-最小磁道号 磁道移动数=访问的最大磁道号−当前磁道号+最大磁道号−最小磁道号
当移动到最外侧磁道,快速返回到最内侧磁道过程不服务
磁道移动数 = 最外侧磁道号 − 当前磁道号 + 最外侧 − 最内侧 + 终点磁道号 − 最内侧磁道号 磁道移动数=最外侧磁道号-当前磁道号+最外侧-最内侧+终点磁道号-最内侧磁道号 磁道移动数=最外侧磁道号−当前磁道号+最外侧−最内侧+终点磁道号−最内侧磁道号
优点
缺点
如果磁头移动方向上没有访问请求了,就让磁头掉头
磁道移动数 = 最大磁道号 − 当前磁道号 + 最大磁道号 − 最小磁道号 + 终点磁道号 − 最小磁道号 磁道移动数=最大磁道号-当前磁道号+最大磁道号-最小磁道号+终点磁道号-最小磁道号 磁道移动数=最大磁道号−当前磁道号+最大磁道号−最小磁道号+终点磁道号−最小磁道号