操作系统概念:
1. 总述
2. 进程管理
3. 内存管理
4. 文件管理
5. IO管理
4. 文件
以计算机硬盘为载体的存储在计算机上的信息集合
- 在UNIX中,所有设备被看做特殊的文件
4.1 属性
4.2 组成
数据项:文件系统中最低级的数据组织方式
记录:一组相关的数据项集合
文件:一组相关信息的集合
4.3 文件的基本操作
读写前 必须 打开,读写后 必须 关闭
4.3.1 创建
create系统调用
,参数为:
OS的工作
4.3.2 删除
delete系统调用
,参数为:
OS的工作
4.3.3 打开
open系统调用
参数:
OS工作
打开文件表结构
进程打开文件表
系统打开文件表
4.3.4 关闭
OS工作
4.3.5 读
read系统调用
参数:
4.3.6 写
write系统调用
参数
4.4 文件逻辑结构
4.4.1 无结构文件(流式文件)
以字节为单位,数据按顺序组织成记录
- 有序相关信息项的集合
- 对记录的访问只能通过穷举搜索的方式
- 无明显逻辑结构
4.4.2 有结构文件
A. 顺序文件(线性表)
记录之间依次顺序排列
若采用顺序存储结构
逻辑相邻,物理相邻
对于不定长记录:无法实现随机存取
对于变长记录:
- 设单个记录长度为L,则第i个记录存放的位置为 i ∗ L i*L i∗L
采用串结构:无法快速找到关键字对应的记录
- 按存入时间进行链接
采用顺序结构:可快速找到关键字对应的记录
- 按关键字顺序排序
采用链式存储结构
逻辑相邻,物理存储位置不一定相邻
B. 索引文件
索引项:{关键字|长度|指针}
- 指针:指向记录的逻辑空间
适用于对信息处理的及时性要求高的场合
- 按关键字排序的索引文件,能提高信息的检索速度
C. 索引顺序文件
记录按某个标准分组,为每个分组建立索引项,记录该组的首地址
索引表:定长记录的串结构顺序文件
不需要按关键字排序,便于表项的插入和删除
索引项:{该记录的关键字值|执行该记录的指针}
多级索引顺序文件:当有 a n a^n an 个记录,每个索引表有 a n t a^{\frac{n}{t}} atn 个表项,需要建立t级索引
4.4.3 逻辑结构与物理结构
A. 用户用逻辑地址访问文件
B. 物理结构(OS角度)
对于操作系统来说,一个文件就是磁盘块中存储的二进制数据,根据盘块的分配方式,组合这些二进制数据
4.5 文件的物理结构
4.5.1 文件的分配方式
存放于FCB中
分配的基本单位
OS为文件分配空间以磁盘块为单位
- 磁盘块大小=内存块大小=页面大小
A. 连续分配
FCB中 存放位置字段
:起始物理块号+文件长度
优点:
- 支持顺序访问和直接访问:物理块号=起始地址+逻辑块号
- 顺序读写存取速度最快:读取多个磁盘块需要机械移动磁头,两个磁盘块相聚越远,移动代价越大
缺点:
B. 链式分配
a. 隐式链接
FCB中 存放位置字段
:第一个盘块的指针+最后一个盘块的指针
地址映射
优点
- 便于文件扩展
- 外存利用率高,不存在外部碎片
缺点
b. 显示链接
FAT文件分配表:将链接文件的各物理块指针显式存放在一张表中
相当于静态链表
地址映射
- FAT在系统启动时调入并常驻内存
- 通过FAT表查找查找文件中第 i 个逻辑块对应的物理块
- 获得物理块的指针后,将第 i 块调入内存,而不需要将前 i-1 块都调入内存
优点
缺点
- 文件分配表占用存储空间
C. 索引分配
数据块:存放数据
每个文件都有索引块:索引块中存的是文件名之外的信息,完成文件目录的瘦身
- 索引表(给本文件分配的磁盘块号一维数组):逻辑块号与物理块号的映射
FCB中 存放位置字段
:文件名+索引块号
地址映射
- 用户给出逻辑块号
- OS将相应的FCB调入内存
- 根据FCB提供的索引块号,将索引块调入内存
- 查索引表可知逻辑块号对应的物理块号—— O ( 1 ) O(1) O(1)
索引分配特点
优点:
缺点
大文件分配
链式索引
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
混合索引
一个顶级索引表中,指向多种索引表
- 直接地址索引
- 一级间接索引
- 二级间接索引
根据各层索引结构计算文件的最大长度,各级索引表的大小,不能超过一个块的大小
- 顶级索引块是否调入内存
- K层索引表,需要K+1次磁盘I/O
磁盘I/O的次数计算
4.5.2 文件存储空间管理
磁盘空闲块管理,数据结构存放于文件卷的目录区
A. 文件存储器空间的划分
文件&文件卷&物理盘
文件卷(逻辑卷)
目录区
文件区
- 存放文件的数据信息
初始化
- 划分目录区与文件区
- 建立空闲空间管理表
- 建立存放逻辑信息的超级块
B. 文件存储空间管理
FAT
FAT可也完成对空闲空间的管理
空闲表法(连续分配)
适用于为文件分配一块连续的存储空间
适用于连续的盘块分配方式
空闲表项:{表项序号|该空闲区的第一个空闲块号|该区空闲盘块数}
相应的盘块分配方法
- 首次适应:序号从小到大
- 最佳适应:空间从小到大
- 最坏适应:空间从大到小
盘块的回收:合并相邻空闲盘块表项
空闲链表法
OS始终保持着链头和链尾指针
适用于 离散的盘块分配方式
空闲盘块链
以盘块为单位组成一条空闲链
查找下一节点方式:每个盘块存放着下一空闲盘块的指针
盘块的分配方式:
- 从链头开始向后摘取
- 修改链头指针
盘块的回收
- 空闲盘块挂到链尾
- 修改链尾指针
空闲盘区链
以盘区为单位组成一条空闲链,连续空闲盘块组成一个空闲盘区
查找下一节点方式:每个空闲盘区的第一个盘块记录下一盘区的指针以及本盘区的长度
盘块的分配
盘块回收
- 若回收的的盘区与链中的盘区相邻,则合并为大的盘区
- 若回收的盘区孤立,则将回收的盘区挂在队尾
位示图法
每个二进制位对应一个盘块,用一个字长的01串表示每个盘块的空闲情况
适用于 离散与连续的盘块分配方式
字号位号与盘块号的转换
设盘块号为
b
,字号为
i
,位号为
j
,字长为
n
b
→
{
i
,
j
}
:
i
=
b
n
j
=
b
%
n
i
,
j
→
:
b
=
n
∗
i
+
j
\begin{aligned} &设盘块号为b,字号为i,位号为j,字长为n\\ &b\rightarrow \{i,j\}:i=\frac{b}{n}\quad j=b\%n\\ &{i,j}\rightarrow:b=n*i+j \end{aligned}
设盘块号为b,字号为i,位号为j,字长为nb→{i,j}:i=nbj=b%ni,j→:b=n∗i+j
盘块的分配
盘块的回收
- 由盘块号获得字号和位号
- 将回收的盘块置 “0”
成组链接法
适合于大型文件系统
每组的第一个盘块记录顺序的n个空闲盘块数,为超级块。第二个盘块记录下一组的第一个盘块号
每个分组的最大空闲块数固定
如果是最后一个组,则将下一组的盘块号设置为特殊值
空闲块的分配
-
假设请求1个空闲块
-
请求100个盘块
空闲块的回收
假设一个分组最多100个空闲块,此时第一个分组已满,若有一个新块需要回收
- 将超级块的信息复制到新回收的块
- 让新回收的块成为分组的第一个分组
4. 文件管理
4.1 文件系统概述
4.1.1 功能
A. 用户角度
B. OS角度
4.1.1 文件系统组成
4.1.2 文件系统运行过程
OS启动时,会将根目录导入内存,并常驻内存
A. 访问目录文件
实质上是访问目录项(FCB),若目录调入内存,需要一次磁盘I/O操作
B. 访问普通文件
4.1.3 文件系统层次结构
A. 用户接口
- 文件的基本操作
B. 文件目录系统
管理文件目录
C. 存取控制验证模块
D. 逻辑文件系统和文件缓冲区
逻辑文件系统:根据文件的逻辑结构将用户要访问的文件记录号转换成文件逻辑结构的逻辑块号
文件缓冲区:索引表调入内存后,存放的位置
E. 物理文件系统
逻辑块号转换成相应的物理块号
F. 辅助分配模块
先检测是否用相关需求才决定启动与否
G. 设备管理模块
直接与设备交互
4.2 目录结构
- 目录结构保存在外存,需要时才被调入内存
4.2.1 文件控制块
存放文件控制需要的各种信息的数据结构
文件描述信息(FCB)
以目录项的形式保存在目录结构 {文件名|存取权限|存放位置}
4.2.2 目录的基本操作
4.2.3 目录实现
线性列表
目录项 {文件名|数据块指针}
哈希表
优点
- 查找迅速
- 插入、删除简单
缺点
- 需要预备措施避免冲突
- 哈希表长度固定
- 哈希函数对表长依赖
4.2.4 目录查询
线性列表
- 查找时,依次与线性表的每个表项比较
- 可按文件名构成有序序列,折半查找减少时间开销
哈希表
- 迅速
- 但要避免冲突
4.2.5 多级目录结构
单级目录结构
解决:按名存取
缺点
两级目录结构
缺点
多级目录结构(树形)
缺点:不便于文件共享
无环图目录结构
目录成为有向无环图:在树型目录结构基础上,增加指向同一结点的有向边
4.2.6 UNIX采用的方式
索引结点
原理:查找过程中,只需使用文件名,只有文件名匹配才需要获取文件的其他信息
找到文件名对应的目录项,将索引结点的调入内存,根据索引结点中的 存放位置
找到目标文件
分配方式
索引分配
FCB
文件名+索引结点指针
索引结点指针
- 单个文件的最大可用空间=混合索引克可表示的地址空间*磁盘块大小
直接地址:存放的是文件数据所在的盘块号;
- 适用于
文件大小<直接地址空间*磁盘块大小
多级索引:每增一级都是数量级上的提升
4.3 文件共享
4.3.1 概念
区别于复制
共享的前提是有访问权限
4.3.2 基于索引结点的共享(硬链接)
4.3.3 基于符号链的共享方式(软链接)
当访问共享文件时,操作系统判断为
Link
类型的文件,于是会根据其中记录的路径层层查找目录,最终找到文件目录表中的FCB
优点
缺点
- 访问时,需多次磁盘 IO
- 符号链的索引结点要耗费一定的磁盘空间
4.3.4 文件保护
A. 口令保护
优点
- 时间空间开销小
缺点
- 口令直接存储在系统内部,不安全
B. 密码保护
优点
- 保密性强
- 节省存储空间,无需存储密钥
缺点:编码和译码要花费一定的时间
C. 访问控制
- 规定每个用户名及其访问权限
- 必须按位规定
精简的访问列表
拥有者:文件创建者
组
- 权限是赋予到组上的,要赋予某个文件权限,将其加入对应的组
- 系统需要管理分组信息
如果对某个目录进行访问控制,则这个目录下的所有文件都要有相同的访问控制权限
4. 磁盘管理
4.1 磁盘结构
4.1.1 基本概念
磁盘
表面涂油磁性材质的金属或塑料圆盘构成的圆盘
盘片
柱面
多个盘面中,相对位置相同的磁道
4.1.2 从磁盘读写数据
- 根据
柱面号
移动磁臂,让磁头指向指定柱面 - 激活指定盘面对应的磁头
- 磁盘转动,使目标删去在磁头下划过,完成对磁盘指定扇区的读/写
4.1.3 磁盘地址结构
{柱面号|盘面号|扇区号}
- 柱面号:选择磁道组
- 盘面号:选择盘面:定位到某一确定磁道
- 扇区号:定位到某一磁盘块
为什么是柱面号在前
切换柱面需要磁头的机械移动,而切换盘面,扇区不需要磁头的移动,因此将柱面放在高地址字段
4.1.4 磁盘分类
4.2 磁盘管理
4.2.1 磁盘初始化
1. 低级格式化(物理格式化)
将磁盘的各个磁道划分为扇区
扇区:
- 头
- 尾
- 数据区域
管理扇区所需的数据结构:扇区校验码,扇区中数据是否发生错误
2. 将磁盘分区
每个分区由若干柱面组成
3. 逻辑格式化
创建文件系统
- 创建文件系统根目录
- 初始化存储空间管理
4.2.2 引导块
自举程序:计算机开机需要进行一系列初始化工作,这些初始化工作由 自举程序 完成
完整的自举程序存放在磁盘的启动块中,又称为引导块 、启动分区
- 拥有启动分区的磁盘称为 启动磁盘或系统磁盘(C盘)
Boot程序
自举装入程序
- 开机时,计算机先运行内存ROM区中的 自举装入程序 ,通过执行该程序就可找到引导块
- 将引导块中的 自举程序 读入内存,完成初始化
4.2.3 坏块
坏块对操作系统不透明
-
对于简单的磁盘,可以在逻辑格式化时,对整个磁盘的坏块检查,表明哪些是坏块
-
对于复杂的磁盘,磁盘控制器(设备内部的硬件)会维护一个坏块链表,在低级格式化(物理格式化)就将坏块链初始化
扇区备用
系统会保留一些备用扇区,用于替换坏块,这时坏块对操作系统透明
4.3 磁盘调度算法
4.3.1 磁盘I/O时间
转速是磁盘的物理属性,无法优化
A. 寻道时间
磁头移动到目标磁道的时间
- 根据柱面号选择柱面
T s = s + m × n Ts=s+m\times n Ts=s+m×n
- s:启动磁头臂时间
- m:跨越一个磁道的时间
- n:总共n个磁道
B. 延迟时间
旋转盘片,使磁头定位到目标扇区
- 根据扇区号将磁头移动到起始扇区
设磁盘转速为 r ( 转 / s ) ,平均所需延迟时间 T R = 1 2 × 1 r 设磁盘转速为r(转/s),平均所需延迟时间T_R=\frac{1}{2}\times\frac{1}{r} 设磁盘转速为r(转/s),平均所需延迟时间TR=21×r1
- 1 r \frac{1}{r} r1 是转一圈需要的时间,找到目标扇区平均转半圈
减少延迟时间的方案
优化前提:在实际中,读完一个扇区,磁头需处理一段时间,但磁头不断旋转
- 若逻辑上相邻的扇区在物理上也相邻,则可能需要很长的延迟时间
盘面交替编号
逻辑相邻的扇区在物理上有一定间隔,可以使读取连续逻辑扇区所需的延迟时间更小
柱面错位命名
C. 传输时间
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
- 每个磁道要可存N个字节,b字节的数据需要转 b N \frac{b}{N} Nb 圈,转一圈 1 r \frac{1}{r} r1
4.3.2 调度算法
FCFS
- 优点:公平
- 缺点:请求访问磁道分散,寻道时间长
最短寻找时间优先(sstF)
优先处理此时与当前磁头最近的磁道
- 能保证每次寻道时间最短,但不能保证总体寻道时间最短
优点:性能较好;平均寻道时间段
缺点:可能产生 “饥饿” 现象
- 磁头可能在一个小区域内来回移动
扫描算法(SCAN)电梯调度算法
只有磁头移动到最外侧的时候才能往内移动,移动到最内侧磁道的时候才能往外侧移动
磁道移动道数 = 最外侧磁道号 − 当前磁道号 + 最外侧磁道号 − 访问的最小磁道号 磁道移动道数=最外侧磁道号-当前磁道号+最外侧磁道号-访问的最小磁道号 磁道移动道数=最外侧磁道号−当前磁道号+最外侧磁道号−访问的最小磁道号
优点
- 平均寻道时间短
- 不会产生饥饿现象
缺点
-
只有达到最边上的磁道才能改变磁头移动方向
-
对于各个位置磁道的响应频率不平均
刚处理了90号磁道,下次处理要很长时间;而响应了184号磁道,很快就能访问
改进
LOOK调度算法
磁道移动数 = 访问的最大磁道号 − 当前磁道号 + 最大磁道号 − 最小磁道号 磁道移动数=访问的最大磁道号-当前磁道号+最大磁道号-最小磁道号 磁道移动数=访问的最大磁道号−当前磁道号+最大磁道号−最小磁道号
循环扫描算法(C-SCAN)
当移动到最外侧磁道,快速返回到最内侧磁道过程不服务
磁道移动数 = 最外侧磁道号 − 当前磁道号 + 最外侧 − 最内侧 + 终点磁道号 − 最内侧磁道号 磁道移动数=最外侧磁道号-当前磁道号+最外侧-最内侧+终点磁道号-最内侧磁道号 磁道移动数=最外侧磁道号−当前磁道号+最外侧−最内侧+终点磁道号−最内侧磁道号
优点
- 各磁道的响应频率相等
缺点
- 只有到达最边上才能改变磁头移动方向
C-LOOK算法
如果磁头移动方向上没有访问请求了,就让磁头掉头
磁道移动数 = 最大磁道号 − 当前磁道号 + 最大磁道号 − 最小磁道号 + 终点磁道号 − 最小磁道号 磁道移动数=最大磁道号-当前磁道号+最大磁道号-最小磁道号+终点磁道号-最小磁道号 磁道移动数=最大磁道号−当前磁道号+最大磁道号−最小磁道号+终点磁道号−最小磁道号
原文地址:https://www.jb51.cc/wenti/3284466.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。