操作系统笔记

第一章 操作系统引论

一、操作系统的目标、作用、模型
OS的目标
1)方便性:用户无需了解底层硬件,无需用0、1机器语言操作。
2)有效性:CPU、I/O、存储等的管理专门、合理地被组织管理起来,提高资源的利用率。
3)可扩充性:扩充应用软件;适应硬件和体系结构发展,扩充底层管理功能模块等。
4)开放性:网络环境,遵循开放互联标准
OS的作用
1)作为用户和计算机硬件系统之间的接口(方便性)
2)作为计算机系统资源的管理者
在这里插入图片描述
3)用作扩充机器
二、操作系统的发展历程
1)人工操作方式
2)脱机输入输出方式
3)单道批处理系统(作业成批处理,内存中只有一道)
4)多道批处理系统
用户作业、外存上排队,称为“后备队列”;
作业调度程序、按一定的算法、从后备队列中选择若干作业 调入内存
入内存的作业、共享CPU和系统中的各种资源,自动批量处理。
OS定义
一组控制和管理计算机硬件和软件资源,合理地对各类作业进行调度(多道),方便用户使用的程序的集合
分时系统
交互:当用户在自己的终端上键入命令时,系统应能及时接收并及时处理该命令,再将结果返回给用户。
共享:强调即使有多个用户同时通过自己的键盘键入命令,系统也应能全部地及时接收并处理
实现方法(改变批处理系统的运行方式)
多个用户连接主机
请求的作业发送到主机后,直接进入主机内存以快速响应
系统采用时间片轮转方式处理服务请求
实时系统
系统能及时(或即时)响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。
三、操作系统的基本特性
并发:多道程序占用CPU交替执行
共享:系统中的资源可供内存中多个并发执行的进程(线程)共同使用。
并发与共享互为存在条件。多个程序并发导致了资源需要共享,资源共享若没有协调好,必然影响程序并发执行
虚拟:通过某种技术把一个物理实体变为若干个逻辑对应物(用户感觉上的东西)。分为时分复用,空分复用
异步:进程的执行顺序和执行时间的不确定性
四、操作系统的主要功能功能
1)处理机管理功能(作业管理)
2)存储器管理功能
3)设备管理功能
4)文件管理功能
5)用户接口
五、操作系统的结构
1)无结构OS
2)模块化OS结构
3)分层式OS结构
4)微内核OS结构

第二章、进程描述与控制

一、进程的基本概念
1.程序的顺序执行
特性
1)顺序性
2)封闭性
3)可再现性
2.程序的并发执行
多个程序如果无序并发,得到的只能是混乱的执行结果,
多道程序运行,走走停停的可能顺序有很多种,符合前趋图的关系才是合理并发
1)间断性
2)失去封闭性
3)结果不可再现性
3.进程
进程就是用于描述、控制程序在内存中并发运行的一个东东
特征:1)结构性特征
2)动态性
3)并发性
4)独立性
5)异步性

区别进程与程序
动与静:
进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。
永久与暂时:
进程是暂时的,程序是永久的:进程是一个状态变化的过程,程序可长久保存。
结构:
进程的组成包括程序、数据和进程控制块(进程各种控制信息)。
进程与程序的对应关系:
都可1对n。通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序

进程的基本状态
就绪状态(Ready)
运行状态(Running)
阻塞状态(Blocked)
新建状态
终止状态
挂起状态
在这里插入图片描述

进程控制块

1)存放进程的管理和控制信息的数据结构
2)进程控制块是进程存在的唯一标志
PCB中有
1.进程标识符信息
2.处理机状态信息
3.进程调度信息
4.进程控制信息
组织方式
1.链接方式
在这里插入图片描述
2.索引方式
在这里插入图片描述
进程实体=代码段+数据段+PCB

二.进程控制
原语是由若干指令构成的原子操作过程,作为整体实现功能,不可被打断

进程控制的基本过程:
1)进程的创建
1.用户登录
2.作业调度
3.提供服务
4.应用请求
过程
申请空白PCB;为新进程分配资源主要是内存资源的处理;初始化进程控制块标识符(包括父进程的)、程序计数器指向程序入口地址,就绪态、优先级等信息的填写。
;将新进程插入就绪队列
2)进程的终止
1.正常结束
2.异常结束
3.外界干预
过程
根据进程标示符,检索出该进程PCB,读其状态; 归还全部资源至其父进程或系统; 将该进程PCB从所在队列或链表中移出。
3)进程的阻塞与唤醒
1.请求系统服务的满足情况
2.启动某种需等待(I/O)操作
3.合作需要的新数据尚未到达
4.执行某功能的进程暂时无新工作可做(如发送数据进程)
过程
将PCB中的状态改为阻塞;该PCB加入到阻塞队列中;转进程调度,将处理机分配给另一进程;进行进程切换,即根据两切换进程的PCB,保护与重新设置处理机状态。
4)进程的挂起和激活
过程
检查被挂起进程的状态,活动就绪则改为静止就绪,活动阻塞则改为静止阻塞;将该PCB复制到内存(方便检查)/外存(对换)指定区域;若挂起的进程是执行态,则需重新进行进程调度。

三、进程同步
使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
临界资源
一次允许一个进程使用的资源
临界区
进程中访问临界资源的那段代码

同步机制应遵循的原则
空闲让进
忙则等待
有限等待
让权等待

四、信号量机制
1)整形信号量
wait(S):
While S<=0 do no-op;
S:=S-1;
signal(S):
S:=S+1;
不符合“让权等待”原则
2)记录型信号量
P操作wait():
S.value = S.value - 1;
if S.value < 0 then block(S,L)
V操作signal():
S.value = S.value + 1;
if S.value <= 0 then wakeup(S,L)
3)AND型信号量
Swait(S1, S2, …, Sn)
if (S1 >=1 and … and Sn>=1 )then
for i:=1 to n do
Si:= Si -1 ;
endfor
else
将进程阻塞在第一个不能满足资源信号量的队列中。
endif

Ssignal(S1, S2, …, Sn)
for i:=1 to n do
Si:= Si +1 ;
唤醒所以与si相关的阻塞进程
endfor
4)信号量集
Swait(S1, t1, d1, …, Sn, tn, dn)
if S1>= t1 and … and Sn>= tn then
for i:=1 to n do
Si:= Si - di ;
endfor
else

endif

Ssignal(S1, d1, …, Sn, dn)
for i:=1 to n do
Si:= Si +di ;
….
endfor
应用
实现进程互斥
实现进程间的前趋关系(有序)
例:
1)生产者—消费者问题
互斥、同步
2)哲学家就餐问题
互斥
3)读者——写者问题
有条件的互斥

五、管程
信号量机制不足:
1.正确性分析困难
2.分散的P.V操作
3.修改. 维护困难
针对以上提出了管程的思想:
将共享变量及对共享变量能够进行的所有操作集中在一个模块中
管程的组成?
1.一组局部变量
2.对局部变量操作的一组过程
3.对局部变量进行初始化的语句
管程的特点?
任何进程只能通过管程提供的过程入口才能进入管程访问共享数据
任何时刻,只允许一个进程在管程中执行某个内部过程
管程如何实现同步控制?
1.对共享变量互斥操作
2.操作的同步控制
依靠条件变量的操作管理实现
条件变量
用于控制进程阻塞和唤醒

管程的优缺点:
保证进程互斥地访问共享变量,并方便地阻塞和唤醒进程
管程可增强模块独立性
引入管程可提高代码的可读性,便于修改和维护,正确性易于保证
大多数编程语言未实现管程,所以加入管程很困难

六、进程通信
是指进程之间的信息交换
1.低级进程通信
进程之间的互斥和同步
信号量机制是有效的同步工具,但作为通信工具缺点如下:
(1)效率低(通信量少)
(2)通信对用户不透明(程序员实现,操作系统只提供共享存储器供代码操作)
2.高级进程通信
用户直接利用操作系统提供的一组通信命令,高效地传送大量数据的通信方式。
操作系统隐藏了进程通信的细节,对用户透明,减少了通信程序编制上的复杂性。

一、进程通信类型(高级通信机制)
1.共享存储器系统(操作存储区方式)
相互通信的进程共享某些数据结构(低级)或共享存储区(高级),进程之间能够通过这些空间进行通信
2.消息传递系统(发–收方式)
以格式化信息为单位,屏蔽底层复杂操作 。
3.管道通信(中间文件方式)
用于连接一读进程和一写进程以实现通信的一个共享文件,又名pipe文件。向共享文件的输入的写进程以字符流形式将大量的数据送入管道;接收管道输出的读进程则从管道中接收(读)数据
4.客户端/服务器
套接字(Socket) 通信标识类型的数据结构,包含了通信目的地址,端口号,传输层协议,进程所在的网络地址,以及API函数等。系统中所有连接都有唯一的一对套接字及端口连接,确保通信双方间逻辑链路的唯一性
二、消息传递通信的实现方法
1.直接通信方式
发送进程利用OS提供的发送命令,直接把消息发送给目标进程
发送进程和接收进程都以显式方式提供对方的标识符
2.间接通信方式
基于共享数据结构的实体暂存发送给目标进程的信息,接收进程则从该实体中,取出对方发送给自己的信息。通常这种实体称为信箱。
三、信息传递系统的实现
①通信链路的建立
计算机网络环境下,用原语显式建立/拆除链路
单机系统只须利用系统原语,进程间链路由系统自动管理。
②消息格式
单机系统,发送与接收进程在同一台机器,环境相同故格式简单;网络环境下,受不同目标机器的环境和长距离信息传输等因素的影响,消息格式较复杂,消息常是“大头+正文”
③同步方式
发送进程阻塞、接收进程阻塞(无缓冲紧密同步)
发送进程不阻塞、接收进程阻塞(服务器程序)
发送进程和接收进程均不阻塞(缓冲队列)
四、消息缓冲队列通信机制
广泛用于本地进程通信
①不需管理链路
②定义简单的数据结构(消息格式)
③实现发送和接收的操作原语
在这里插入图片描述

七、线程
多道程序管理,追求效率的目的下实现"并发"
1.线程:进程内的一条执行路径。
同一进程中包含多个线程
①共享进程资源
②可并发执行
2. 线程信息
TCB中包含
①标识符,运行状态,优先级,寄存器状态,堆栈,专有存储器,信号屏蔽等
3. 线程的创建和终止
①创建新线程
利用线程创建函数,提供相应参数,返回一个线程标识符供以使用
②线程终止
不立即释放资源,当进程中其他线程执行分离函数后,资源才分离出来被其他线程利用。被终止而未释放资源的线程仍可被需要它的线程调用,使其重新恢复运行
4.线程的管理
①同步和通信机制
1)互斥锁
2)条件变量
3)信号量
互斥锁是为了上锁而优化的;条件变量是为了等待而优化的;信号灯即可用于上锁,也可用于等待,因而可能导致更多的开销和更高的复杂性
线程的实现方式
1.内核线程KST
依赖内核,利用系统调用由OS内核在内核空间完成创建,撤销,切换等线程工作。时间片分配给线程,多线程的进程获得更多CPU时间
2.用户线程ULT
无须系统调用,不依赖于OS核心。进程利用线程库函数创建,同步,调度和管理用户线程。
3. 组合方式
内核支持多KST线程管理,同时也允许用户应用程序级的线程管理

第三章 处理及调度与死锁

一、处理机调度的相关基本概念
处理机调度:多道程序环境下,动态的把处理机分配给就绪队列中的一个进程使之能够执行。是对处理及资源进行分配。调度的实质就是一种资源分配
处理机调度的层次
1.高级调度:又称作业调度、长程调度、接纳调度。其主要功能是根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存,为他们创造进程,分配必要的资源,并将他们放在就绪队列。一般用于批处理系统,而在分时和实时系统中不设置高级调度。
2.低级调度:又称进程调度、短程调度。其主要功能是根据某种算法,决定就绪队列中哪个进程获得处理机,并由分派程序将处理机分配给被选中的进程。是最基本的一种调度
1)抢占式:允许调度程序根据某种原则,暂停某个正在执行的进程,将处理及重新分配给另一进程。
调度的时机:1.程序完成 2.发生某事件堵塞
2)非抢占式:一旦处理机分配给某进程,该进程一直执行,决不允许其他进程抢占已分配运行进程的处理机。
调度的时机:1.程序完成 2.发生某事件阻塞 3.新进程就绪
在这里插入图片描述
3.中级调度:又称交换调度、中程调度。引入目的是提高内存的利用率和系统的吞吐量,根据条件将一些进程调出或再调入内存。
三种调度的频率和复杂度
进程调度:运行频率最高,算法不能太复杂,分时系统中通常10-100ms便进行一次。
作业调度:一个作业运行完毕退出系统时即触发重新调度一个新作业进入内存,周期较长,因此允许作业调度算法花费较多的时间。
中级调度:运行频率基本上介于上述两种调度之间。
在这里插入图片描述
在这里插入图片描述

调度队列模型
1.仅有进程调度的调度队列模型
调度对象:处于就绪状态的进程
组织形式:栈、树或一个无序链表
用何种取决于OS类型和采用的调度算法

下图就绪进程组织成FIFO队列形式,按时间片轮转方式运行
在这里插入图片描述

进程调度什么时候发生?或者说什么时候需要进程调度程序执行去给CPU做选择?
正在执行的进程结束
正在执行的进程阻塞
正在执行的进程未完成转就绪(时间片到)
新就绪了更高优先级的进程(抢占式)

2.具有高级和低级调度的调度队列模型
在这里插入图片描述
3.具有三级调度的调度队列模型
引入中级调度后,进程的状态变化:
就绪状态:分为内存就绪和外存就绪。
阻塞状态:分为内存阻塞和外存阻塞。

使数据在内外存间互换
在这里插入图片描述

周转时间T=Ts+Tw
带权周转时间W= T/Ts
平均周转时间、平均带权周转时间(n个作业求平均)
在这里插入图片描述在这里插入图片描述

批处理系统 平均周转时间短系统吞吐量高处理机利用率好
分时系统响应时间快均衡
实时系统截至时间的保证可预测性
二、调度算法
调度的实质就是一种资源分配,不同的调度算法适合不同的情形
1.先来先服务调度算法FCFS(First Come First Service)
一种最简单的调度算法,按先后顺序进行调度。既可用于作业调度,也可用于进程调度。
按照作业提交,或进程变为就绪状态的先后次序分派CPU;
新作业只有当当前作业或进程执行完或阻塞才获得CPU运行
唤醒的作业或进程不立即恢复执行,通常等到当前作业或进程出让CPU。(默认即是非抢占方式)
有利于CPU繁忙的作业,不利于I/O繁忙的作业
2.短作业优先调度算法SJF(抢占式)/SPF(非抢占式)
SJF/SPF调度算法能有效的降低作业的平均等待时间,提高系统吞吐量。
SJF/SPF的不足:
1. 对短作业有利,但同时造成了对长作业的不利。
2.由于作业(进程)的长短含主观因素,不一定能真正做到短作业优先。
3.未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)的及时处理。
3.优先级调度算法PSA(priority-scheduling algorithm)
1)
*抢占式 关键点:新作业的产生
*非抢占式
2)
*静态优先级:创建进程时确定,整个运行期间保持不变。一般利用某一范围的一个整数来表示,又称为优先数
*动态优先级:
创建进程时赋予的优先权可随进程的推进或随其等待时间的增加而改变。

关于进程优先权的确定?依据如下:
进程类型:一般来,系统进程高于用户进程。
进程对资源的需求:如进程的估计时间及内存需要量的多少,对要求少的进程赋予较高优先权。
用户要求:由用户进程的紧迫程度及用户所付费用的多少来确定优先权的。
高响应比优先调度算法HRRN(Highest Response Raito Next)

HRRN为每个作业引入动态优先权,使作业的优先级随着等待时间的增加而以速率a提高:
优先权 =(等待时间+要求服务时间)/要求服务时间
= 响应时间 / 要求服务时间

什么时候计算各进程的响应比优先权?
需要进行调度选择的时候比较各自优先权
作业完成时
新作业产生时(抢占、非抢占)
时间片完成时
进程阻塞时
4.基于时间片的轮转调度算法RR(Round Robin)

时间片轮转算法
1.将系统中所有的就绪进程按照FCFS原则,排成一个队列。
2.每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。
3.在一个时间片结束时,发生时钟中断。
4.调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前就绪的队首进程。
进程阻塞情况发生时,未用完时间片也要出让CPU

时间片长度的选择要与完成一个基本的交互过程所需的时间相当,保证一个基本的交互过程可在一个时间片内完成。
设置不合适反而都会导致响应时间长。
过长会怎样?——FCFS
过短会怎样?——频繁切换

多级反馈队列算法FB(Multiple-level Feed Back Queue)
特点:多个就绪队列,循环反馈,动态优先级,时间片轮转
1)设置多个就绪队列,各队列有不同的优先级,优先级从第一个队列依次降低。
2) 赋予各队列进程执行时间片大小不同, 优先权越高,时间片越短。
在这里插入图片描述
3)当一个新进程进入内存,引发的调度过程
1.准备调度:先将它放入第一个队列的末尾,按FCFS原则排队等待调度。
2.IF时间片内完成,便可准备撤离系统;
3.IF时间片内未能完成,调度程序便将该进程转入第二队列的末尾等待再次被调度执行。
4.当第一队列中的进程都执行完,系统再按FCFS原则调度第二队列。在第二队列的稍放长些的时间片内仍未完成,再依次将它放入第三队列。
5.依次降到第n队列后,在第n队列中便采取按时间片轮转的方式运行。

注意:
各队列的时间片逐渐增大。优先级逐渐降低
仅当优先权高的队列(如第一队列)空闲时,调度程序才调度第二队列中的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。
高优先级抢占问题:
第i队列中为某进程正占有CPU,又有新进程进入优先权较高的队列(第1~i-1队中);
被抢占的进程放回原就绪队列末尾;

在这里插入图片描述
在这里插入图片描述

三、实时调度
什么是实时系统?
1.系统能够在限定的相应时间内提供所需水平的服务。
2.指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间,如果系统的时间约束条件得不到满足,将会发生系统出错。
实现实时调度的基本条件
1.提供必要的信息
2.系统处理能力足够强
3.采用抢占式调度机制
4.具有快速切换机制
实时调度算法的分类
根据实时任务的性质
硬实时调度算法
软实时调度算法;
按调度方式
非抢占调度算法
抢占调度算法;
根据调度时间不同
静态调度算法
动态调度算法。
多处理机环境下
集中式调度
分布式调度

1)非抢占式调度算法
1.非抢占式轮转调度算法。常用于工业生产的群控系统中,要求不太严格。
2.非抢占式优先调度算法。要求相对严格,根据任务的优先级安排等待位置。可用于有一定要求的实时控制系统中。(精心设置可获得百ms级的响应时间)
2)抢占式调度算法
1.基于时钟:某高优先级任务到达后并不立即抢占,而等下一个时钟中断时抢占。
2.立即抢占:一旦出现外部中断,只要当前任务未处于临界区,就立即抢占处理机。

常用的实时调度算法
1.最早截止时间优先EDF(Earliest Deadline First)算法
根据任务的开始截止时间来确定任务的优先级。截止时间越早,其优先级越高。
系统保持一个实时任务就绪队列
队列按各任务截止时间的早晚排序
调度程序总是选择就绪队列中的第一个任务,分配处理机使之投入运行。
新任务产生时,是否等当前程序执行完:
抢占式/非抢占式
可能会使作业错过,但可适用于软实时系统
2.最低松弛度优先LLF(Least Laxity First)算法

根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急程度越高(松弛度值越小),优先级就越高。
松弛度= 截止完成时间 – 还需执行时间 - 当前时间
可理解为当前时刻到开始截止时刻间的差距,随着时间的推进,这个差值逐渐变小,任务越来越紧迫。

四、产生死锁的原因和必要条件
死锁(Deadlock):指多个进程在运行过程中,因争夺资源而造成的一种僵局。当进程处于这种状态时,若无外力作用,它们都将无法再向前推进。
死锁:进程之间无休止地相互等待
饥饿:指一个进程无休止的等待

在这里插入图片描述
产生死锁的原因可归结为如下两点:
1.竞争资源。系统中供多个进程共享的资源如打印机、公用队列等的数目不满足需要时,会引起资源竞争而产生死锁。

系统中资源分为两类:
可剥夺和非剥夺性资源
可剥夺性资源:分配给进程后可以被高优先级的进程剥夺。如CPU和主存。
不可剥夺性资源:分配给进程后只能在进程用完后释放。如磁带机、打印机等。
永久性资源和临时性资源
永久性:打印机。可顺序重复使用
临时性:进程产生被其他进程短暂使用的资源,如数据资源:“生产者/消费者”算法中的信号量。。它可能引起死锁。

2.进程间推进顺序非法。进程在运行过程中,请求和释放资源的顺序不当,同样会导致死锁。
进程在运行中具有异步性特征,多个进程按向前推进的顺序有两种情况:
推进顺序合法
推进顺序非法

产生死锁的必要条件(几个都具备就会死锁,缺一就不会死锁,同时破坏四个条件即是处理死锁的方法)
互斥条件:进程对所分配到的资源进行排他性使用
请求和保持条件:进程已经保持了至少一个资源,又提出新的资源请求,而新请求资源被其他进程占有只能造成自身进程阻塞,但对自己已获得的其他资源保持不放,必然影响其他进程。
不剥夺条件:进程已获得的资源未使用完之前不能被剥夺,只能在使用完时由自己释放。
环路等待条件

处理死锁的方法
1)预防死锁
2)避免死锁
3)检测死锁
4)解除死锁
五、预防死锁的方法:
摒弃“请求和保持”条件:所有进程开始运行前,必须一次性的申请其在整个运行过程所需的全部资源(AND)。算法简单、易于实现且很安全。但缺点是资源浪费严重、或进程延迟运行。
摒弃“不剥夺”条件:允许进程先运行,但当提出的新要求不被满足时必须释放它已保持的所有资源,待以后需要时再重新申请。实现比较复杂且付出很大代价。可能会造成前功尽弃,反复申请和释放等情况。
摒弃“环路等待”条件:有序设置资源:将所有资源按类型进行线性排队,赋予不同序号。所有进程对资源的请求必须严格按照资源序号递增的次序提出,这样在所形成的资源分配图中,不可能会出现环路。
避免死锁
采用避免死锁的方法则是只施加较弱限制条件,从而获得令人满意的系统性能。
安全状态:系统能按某种进程顺序为每个进程分配所需资源,直至满足每个进程对资源的最大需求,并能顺利完成。
不安全状态:系统无法找到一种使多个进程能够顺利分配资源执行完的安全序列。
只要使系统始终处于安全状态,便可避免发生死锁。
不是所有的不安全状态都是死锁状态。

例:参考银行家死锁问题

六、死锁的检测与解除
当系统为进程分配资源时,若未采取任何限制性措施,则系统必须提供检测和解除死锁的手段,为此系统必须:
1.保存有关资源的请求和分配信息;
2.提供一种算法,以利用这些信息来检测系统是否已进入死锁状态。

死锁定理
S状态为死锁状态的充分条件是当且仅当S状态的资源分配图是不可完全简化的。
1)资源分配图
圆圈表示进程
方框表示一类资源,其中的一个点代表一个该类资源
请求边由进程指向方框中的资源
分配边则由方框中的一个点即资源。
在这里插入图片描述
简化方法如下:
1.在资源分配图中找出一个既不阻塞又非独立的进程结点Pi,在顺利的情况下运行完毕,释放其占有的全部资源。
2.由于释放了资源,这样能使其它被阻塞的进程获得资源继续运行。消去了Pi的边。
3.经过一系列简化后,若能消去图中所有边,使结点都孤立,称该图是可完全简化的。
死锁的检测
检测时机:
1)当进程等待时检测死锁
2)定时检测
3)系统资源利用率下降时检测死锁
死锁的解除
1)剥夺资源。从其他进程剥夺足够数量的资源给死锁进程以解除死锁状态。
2)撤销进程。最简单的是让全部进程都死掉;温和一点的是按照某种顺序逐个撤销进程,直至有足够的资源可用,使死锁状态消除为止。

第四章 存储器管理

认识各种存储设备
寄存器、高速缓存、内存、磁盘缓存、磁盘
在这里插入图片描述

一、程序的编译链接
程序进入内存的过程:
编译compiler:编译程序:将用户源代码编译成若干个目标模块。
链接link:链接程序:将形成的一组目标模块,及它们需要的库函数链接在一起,形成一个完整的装入模块。
装入load:由装入程序将装入模块装入内存,构造PCB,形成进程,开始运行(使用物理地址)。
在这里插入图片描述
装入方式:
1)绝对装入
逻辑地址——重定位—— 物理地址
2)静态重定位装入
重定位:把目标程序中的指令和数据的逻辑地址变成内存中的物理地址的地址变换过程
逻辑地址与物理地址不相等
3)动态运行时的重定位装入
在这里插入图片描述
实际运行时会依靠一种硬件设备——重定位寄存器
链接方式
1)静态链接
装入运行前将多个目标模块及所需库函数链接成一个整体,以后不再拆开
2)装入时链接
在这里插入图片描述
装入内存时,边装入边链接的链接方式。
由一个目标模块开始装入,若又涉及外部模块调用事件,装入程序再找出相应的外部目标模块,并将它装入内存,还要修改目标模块中的相对地址。
3)运行时链接
在这里插入图片描述
对某些目标模块的链接,在执行中需要该目标模块时,才对它进行链接
有的模块不经常使用就暂时不装入,运行时用到了再装入。(如程序总不出错,就不会用到错误处理模块。)即运行时动态链接:运行时,将对某些模块的链接推迟到执行时才链接装入。

二、连续分配存储管理
内存分为系统区和用户区两部分:
系统区(管态):仅提供给OS使用,通常放在内存低址部分
用户区(目态):除系统区以外的全部内存空间,提供给用户使用

1)单一连续分配
2)固定分区分配
把内存分为一些大小相等或不等的分区(partition),每个应用进程占用一个分区。操作系统占用其中一个分区。
如何划分分区大小
分区大小相等
分区大小不相等
需要的数据结构
需要建立一张分区表,表项有起始位置 、大小 、状态
分配回收操作
检索空闲分区表;找出一个满足要求且尚未分配的分区,分配给请求程序;若未找到大小足够的分区,则拒绝为该用户程序分配内存
存在的问题
内碎片(一个分区内的剩余空间)造成浪费
分区总数固定,限制并发执行的程序数目
3)动态分区分配
分区的大小不固定:在装入程序时根据进程实际需要,动态分配内存空间,即——需要多少划分多少。
分区分配中的数据结构
空闲分区表:
记录每个空闲分区的情况。
每个空闲分区对应一个表目,包括分区序号、分区始址及分区的大小等数据项。
空闲分区链:
每个分区的起始部分,设置用于控制分区分配的信息,及用于链接各分区的前向指针;
分区尾部则设置一后向指针,在分区末尾重复设置状态位和分区大小表目方便检索。
分区分配算法
首次适应算法
以地址递增的次序链接。分配内存时,从链首开始顺序查找直至找到一个大小能满足要求的空闲分区;从该分区中划出一块作业要求大小的内存空间分配给请求者,余下的空闲分区大小改变仍留在空闲链中。
优点:优先利用内存低址部分,保留了高地址部分的大空闲区;
缺点:但低址部分不断划分,会产生较多小碎片;而且每次查找从低址部分开始,会逐渐增加查找开销
循环首次适应算法
按地址从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区。为实现算法
优点:空闲分区分布均匀,减少查找开销
缺点:缺乏大的空闲分区
最佳适应算法
所有空闲分区按容量从小到大排序成空闲分区表或链。从表或链的头开始,找到的第一个满足的就分配。分出需要的大小。
缺点:每次找到最合适大小的分区割下的空闲区也总是最小,会产生许多难以利用的小空闲区(外碎片)
最坏适应算法
所有空闲分区按容量从大到小排序成空闲分区表或链。从表或链的头开始,找到的第一个满足的就分配。分出需要的大小。
基本不留下小空闲分区,但会出现缺乏较大的空闲分区的情况。
最快适应算法
根据进程常用空间大小进行划分,相同大小的串成一个链,需管理多个各种不同大小的分区的链表。进程需要时,从最接近大小需求的链中摘一个分区。
优点:能快速找到合适分区,但链表信息会很多;实际上是空间换时间。
分区分配操作
找到满足需要的合适分区,划出进程需要的空间。
进程运行完毕释放内存时,系统根据回收区首址,在空闲分区链(表)中找到相应插入点,根据情况修改空闲分区信息,可能会进行空闲分区的合并。
4)动态重定位分区分配
紧凑功能的动态分区分配

内存空间管理对换
把内存中暂时不能运行、或暂时不用的程序和数据调到外存上,以腾出足够的内存;把已具备运行条件的进程和进程所需要的程序和数据,调入内存
在这里插入图片描述

三、基本分页存储管理
作业规定大小划分成小份;内存也按同样大小划分成小份
作业的任一小份可分散放入内存任意未使用的小份
内存划分成多个小单元,每个单元K大小,称(物理)块
作业也按K单位大小划分成片,称为页面
为了找到被离散分配到内存中的作业,记录每个作业各页映射到哪个物理块,形成的页面映射表,简称页表
过程:
在这里插入图片描述
改进:引入快表TLB。
在这里插入图片描述
两级页表/多级页表
在这里插入图片描述
反置页表
每个进程一张页表——一张OS 反置页表 + 每进程一张外部页表
四、基本分段存储管理
分段存储管理:作业分成若干段,各段可离散放入内存,段内仍连续存放。
优点
方便编程:如汇编中通过段:偏移确定数据位置
信息共享:同地位的数据放在一块方便进行共享设置
信息保护
动态增长:动态增长的数据段事先固定内存不方便
动态链接:往往也是以逻辑的段为单位更方便
在这里插入图片描述
五、段页式存储管理
将用户程序分成若干段,并为每个段赋予一个段名。
把每个段分成若干页
地址结构包括段号、段内页号和页内地址三部分
在这里插入图片描述

现阶段分配方式的不足
基本分页/分段方式都是进程全部装入内存的方式。内存空间使用上仍有局限。

注:分页与分段的区别
需求:分页是出于系统管理的需要,是一种信息的物理划分单位,分段是出于用户应用的需要,是一种逻辑单位,通常包含一组意义相对完整的信息。
一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。
大小:页大小是系统固定的,而段大小则通常不固定。分段没有内碎片,但连续存放段产生外碎片,可以通过内存紧缩来消除。相对而言分页空间利用率高。
逻辑地址:
分页是一维的,各个模块在链接时必须组织成同一个地址空间;
分段是二维的,各个模块在链接时可以每个段组织成一个地址空间。
其他:通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。分段模式下,还可针对不同类型采取不同的保护;按段为单位来进行共享
*

第五章 虚拟存储器管理

程序的局部性原理
多数情况下仍是顺序执行。
少部分的转移和过程调用指令会使程序执行由一部分区域转至另一部分区域(但研究表明调用深度多数情况下不超过5)
许多由少数指令构成的循环结构会多次执行。
对许多数据结构的处理(如数组)往往局限于很小的范围内。
时间局部性
空间局部性

所以程序不需要全部装入内存

虚拟存储器

具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。虚拟存储管理下,内存逻辑容量由内存容量和外存容量之和所决定,运行速度接近于内存速度,每位的成本却接近于外存。
特征:
多次性:一个作业被分成多次调入内存运行
对换性:允许在作业的运行过程中进行换进、换出。(进程整体对换不算虚拟)
最终体现虚拟性:能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。
实现:
虚拟的实现建立在离散分配存储管理基础上
方式:请求分页/请求分段系统
细节:分页/段机构、中断机构、地址变换机构、软件支持

请求分页管理
1)硬件支持
1、页表机制
在这里插入图片描述
2、缺页中断机构
保护CPU环境”
分析中断原因”
转入缺页中断处理程序”
恢复CPU环境”等
3、地址转换机构
在这里插入图片描述
在这里插入图片描述

2)内存分配
最小物理块数的确定
少于此数量进程将不能运行
与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式
物理块的分配策略
固定分区局部置换
可变分区全局置换
可变分区局部置换
物理块的分配算法
平均分配算法
按比例分配算法
3)调页策略
何时调入页面
预调页策略
请求调页策略
从何处调入页面
系统拥有足够的对换区空间:
进程运行前所有页面由文件区拷贝到对换区;
运行需要的页面全部从对换区调入内存,提高调页速度。
系统缺少足够的对换区空间:
不会被修改的部分,在文件区操作(即:直接从文件区调入,换出时不用写入文件,再调入时仍从文件区调入)
可能被修改的部分,在对换区操作。
UNIX方式:(随运行数据逐渐从文件区转到对换区)
未运行的页面从文件区调入;曾经运行,但又被换出的页面放在对换区,下次调入应从对换区调入。
页面调入过程
程序运行前需要装入内存:上述的策略处理何处调入;
开始运行:先预调入一部分页面;
运行中:需要的页面不在内存时,
向CPU发出一缺页中断,“中断处理程序”开始工作:
首先保留CPU环境
分析中断原因后,转入缺页中断处理程序。
处理:判断是否置换、页表信息更新
恢复现场,重新操作页面。

页面置换算法

最佳Optimal置换算法(理想状态)
先进先出FIFO置换算法(Belady现象:出现分配的页面数增多,缺页率反而提高的异常现象)
最近最久未使用(LRU)置换算法
CLOCK置换算法(改进后增加修改位)
在这里插入图片描述
最少使用 (LFU, Least Frequently Used)
页面缓冲算法PBA(page buffering algorithm)

虚拟存储管理下访问内存的有效时间
页在内存,且快表检索命中
EAT= m+ t
页在内存,但快表检索没有命中
EAT= 快表检索时间+访问页表时间+修改更新快表时间+访问页面物理内存时间
= m+t+m+t=2*(m +t)
页面不在内存
EAT=快表检索时间+访问页表时间+缺页中断处理时间+修改更新快表时间+访问页面物理内存时间
= m + t +m + m + t
加入概率的综合公式(a是快表命中率,f是缺页率)
EAT= m + at +(1-a){ }
= m+at +(1-a){t + f*(m+m+t) +(1-f)*(m+ t) }

抖动
为了提高处理机利用率,可增加多道程序并发度;
但进程数目增加过多,每个进程分配得到的物理块太少,在某个临界点上,会出现刚被淘汰的页很快又需重新调入;而调入不久又被淘汰出去;出现频繁缺页
大部分处理器时间都用在来回的页面调度上,这种局面称为系统抖动或颠簸(thrashing)
根本原因:
页面淘汰算法不合理;分配给进程的物理页面数(驻留集)太少。

在这里插入图片描述
请求分段存储管理方式
段表机制
在这里插入图片描述
缺段中断机构
由缺段中断机构产生一缺段中断信号
进入OS,由缺段中断处理程序将所需的段调入内存。
缺段中断同样在一条指令的执行期间产生和处理中断,一条指令执行可能产生多次缺段中断。但不会出现一条指令被分割在两个分段中或一组信息被分割在两个分段中的情况
地址变换机构
段调入内存
修改段表
再利用段表进行地址变换。
分段的共享和保护
实现共享:共享段表 在内存中配置一张共享段表,每个共享段都占有一表项
共享段的分配
第一个请求使用该共享段的进程A:系统为该共享段分配一物理区,再把共享段装入该区;
将该区的始址填入A的段表相应项;
共享段表中增加一表项,填写有关数据,count置1;
其他进程B也调用该共享段时,无需再为该段分配内存,只需在B的段表中增加一表项,填写该共享段的物理地址;在共享段的段表中,填上调用进程的进程名、存取控制等,再执行count:=count+1操作。
共享段的回收
包括撤消在进程段表中共享段所对应的表项,执行count:=count-1。
如果count为0,则由系统回收该共享段的物理内存,并取消共享段表中该段所对应的表项
分段保护
越界检查
存取控制检查
环保护机构

第六章 设备管理

在这里插入图片描述
中断处理程序
处于I/O系统的底层,直接与硬件进行交互
设备驱动程序
处于次底层,是进程和控制器之间的通信程序
功能:将上层发来的抽象I/O请求,转换为对I/O设备的具体命令和参数,并把它装入到设备控制其中的命令和参数寄存器中
设备独立性软件
包括设备命名、设备分配、数据缓冲等软件
在这里插入图片描述
I/O系统的基本功能
隐藏物理设备细节,方便用户
实现设备无关性,方便用户
提高处理机和设备的并行性,提高利用率:缓冲区管理
对I/O设备进行控制:控制方式、设备分配、设备处理
确保对设备正确共享:虚拟设备及设备独立性等
错误处理
I/O系统的接口
块设备接口
流设备接口
网络通信接口
I/O设备的类型
按传输速率分类:
低速、中速、高速(键盘、打印机、磁盘)
使用:存储设备、输入输出设备
按信息交换的单位分类:
块设备:有结构、速率高、可寻址、DMA方式控制
字符设备:无结构、速率低、不可寻址、中断方式控制
按设备的共享属性分类:
独占:打印机
共享:一个时刻上仍然是只被一个进程占用。可寻址、可随机访问的色后备。磁盘。
虚拟:使一台独占设备变换为若干台逻辑设备,供给若干用户“同时使用”。

设备控制器

计算机中的一个实体——“设备控制器”负责控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。
功能:
接收和识别CPU命令(控制寄存器:存放命令和参数)
标识和报告设备的状态(状态寄存器)
数据交换(数据寄存器)
地址识别(控制器识别设备地址、寄存器地址。地址译码器)
数据缓冲(协调I/O与CPU的速度差距)
差错控制
在这里插入图片描述
启动设备的过程
将启动命令发送给控制器;
同时通过地址线把地址发送给控制器
控制器的I/O逻辑对收到的地址和命令进行译码,再根据所译出的命令选择设备进行控制。

I/O通道

设备控制器已大大减少CPU对I/O的干预(如承担了选择设备,数据转换、缓冲等功能)。但当主机的外设很多时,CPU的负担仍然很重。在CPU和设备控制器之间增设一个硬件机构:“通道”。
建立更独立的I/O操作,解放CPU。
实际上I/O通道是一种特殊的处理机

类型
字节多路通道
在这里插入图片描述
一个通道常通过多个子通道连接多个设备控制器
多个设备,通过非分配型子通道以字节为单位交叉轮流使用主通道传输自己的数据
数组选择通道
针对高速设备:分配型子通道
设备利用子通道占用通道后,一段时间内一直独占,直至设备传送完毕释放。
利用率低
数组多路通道
结合上述两种方式。
含多个非分配型子通道。数据传送则按数组方式进行。

中断:CPU对I/O设备发来的中断信号的一种响应,中断是由外部设备引起的,又称外中断。
陷入:由CPU内部事件所引起的中断,通常把这类中断称为内中断或陷入(trap)。
中断和陷入的主要区别:是信号的来源

中断处理程序

进行进程上下文的切换
对处理中断信号源进行测试
读取设备状态
修改进程状态
在这里插入图片描述

设备驱动程序

——最了解设备控制器的人
主要任务
接收上层软件发来的抽象I/O要求,如read、write等命令;
再把它转化为具体要求,发送给设备控制器,启动设备去执行。
反方向,它也将由设备控制器发来的信号,传送给上层软件。
功能
接收由与设备无关的软件发来的命令和参数,并将命令中的抽象要求,转换为与设备相关的低层操作序列;
检查用户I/O请求的合法性,了解I/O设备的工作状态,传递与I/O设备操作有关的参数,设置设备的工作方式;
发出I/O命令,如果设备空闲,便立即启动I/O设备,完成指定的I/O操作;如果设备忙碌,则将请求者挂在设备队列上等待;
及时响应由设备控制器发来的中断请求,并根据其中断类型,调用相应的中断处理程序进行处理。
处理方式
为每一类设备设置一个进程,专门用于执行这类设备的I/O操作。这种方式比较适合于较大的系统;
在整个系统中设置一个I/O进程,专门用于执行系统中所有各类设备的I/O操作。也可以设置一个输入进程和一个输出进程,分别处理系统中的输入或输出操作;
不设置专门的设备处理进程,而只为各类设备设置相应的设备驱动程序,供用户或系统进程调用。这种方式目前用得较多
驱动程序处理过程
在这里插入图片描述
在这里插入图片描述
I/O控制方式
程序I/O方式
在这里插入图片描述
中断驱动I/O方式
在这里插入图片描述
直接存储器访问DMA(字节—块)
CPU先向磁盘控制器发送一条读命令。
该命令被送到命令寄存器CR中。
同时发送数据读入到内存的起始地址,该地址被送入MAR中;
要读数据的字数则送入数据计数器DC中;
将磁盘中的数据原地址直接送入DMA控制器的I/O控制逻辑上,按设备状态启动磁头到相应位置。
启动DMA控制器控制逻辑开始进行数据传送
在这里插入图片描述
I/O通道控制方式(组织传送的独立)
再进一步减少CPU的干预(减少中断), 引入通道。
CPU、通道和I/O设备三者的并行操作,提高整系统资源利用率。

设备独立性(无关性)
指用户编程时所用的设备名(逻辑上的)与实际物理设备无关;
优点:
设备分配时的灵活性
易于实现I/O重定向
设备分配
多道环境下,系统中设备是所有进程共享的。要防止无序竞争,提高外设资源的利用率。需由OS进行统一、合理的设备分配。
数据结构:
设备控制表
在这里插入图片描述
控制器控制表
在这里插入图片描述
通道控制表
在这里插入图片描述
系统设备(总)表
在这里插入图片描述
在这里插入图片描述

小部分I/O系统软件放在了用户应用层上
库函数(与应用程序链接)
假脱机技术(虚拟设备)
系统调用与库函数
不允许运行在用户态的应用进程,去直接调用运行在核心态(系统态)的OS过程。
应用进程在运行时,又必须取得OS所提供的服务。
于是:
OS在用户层中引入了系统调用,应用程序可以通过它,间接调用OS中的I/O过程,对I/O设备进行操作
SPOOLing技术
虚拟性是OS的四大特征之一。
多道程序技术将一台物理CPU虚拟为多台逻辑CPU,实现多个用户共享一台主机;
如何将一台物理I/O设备虚拟为多台逻辑I/O设备,允许多个用户共享“同时使用”

多道程序技术,专门利用程序模拟脱机I/O的外围机,完成设备I/O操作。称这种联机情况下实现的同时外围操作为SPOOLing 技术(Simultaneaus Periphernal Operating On—Line,或称为假脱机操作)
组成部分
输入井和输出井
磁盘上开辟两大存储空间。输入井模拟脱机输入的磁盘设备,输出井模拟脱机输出时的磁盘。
输入缓冲区和输出缓冲区
为缓解速度矛盾,内存中开辟两大缓冲空间,输入缓冲区暂存输入设备送来的数据,再送给输入井;输出缓冲区暂存输出井送来的数据,再送输出设备。
输入进程和输出进程
用一进程模拟脱机输入时外围设备控制器的功能,把低速输入设备上的数据传送到高速磁盘上;
用另一进程模拟脱机输出时外围设备控制器的功能,把数据从磁盘上传送到低速输出设备上
在这里插入图片描述
特点
提高了I/O的速度
将独占设备改造成共享设备,将共享设备模拟成独占设备
实现虚拟设备功能

缓冲区管理

一进程中“CPU计算速度”和“设备I/O速度”仍存在不匹配的矛盾。
解决:CPU进行当前计算时,设备进行后续数据的输入(——缓冲区)
缓冲管理
I/O控制方式减少CPU对I/O的干预提高利用率;
缓冲则通过缓和CPU和I/O设备速度不匹配矛盾,增加CPU和I/O设备的并行性,提高利用率。
现代OS中,几乎所有的I/O设备与处理机交换数据时,都用了缓冲区。
最终目的:提高CPU的I/O设备的并行性
方式
单缓冲
在这里插入图片描述
双缓冲–适合双向通信在这里插入图片描述
循环缓冲
组成多个缓冲区和多个指针
存在问题:
不能同时双向通讯
利用率不高,缓冲区是专用缓冲(每个进程都要维护自己的循环缓冲区)使用时不能给其他进程使用。

在这里插入图片描述

缓冲池
系统将多个缓冲区形成一个缓冲池。
池中缓冲区为系统中所有的进程共享使用(如UNIX系统在块设备管理中设置了一个15个缓冲区组成的缓冲池)
组织形式:队列及队列指针
在这里插入图片描述
缓冲池的类型
空缓冲区;
装满输入数据的缓冲区;
装满输出数据的缓冲区;
工作方式
收容输入:Getbuf(emq),hin;输入数据填入一空缓冲区;Putbuf(inq,hin)
提取输入: Getbuf(inq),sin;从输入缓冲队列中取出一数据区的内容;Putbuf(emq,sin)
收容输出: Getbuf(emq),hout;输出数据填入一空缓冲区;Putbuf(outq,hout)
提取输出: Getbuf(outq),sout;从输出缓冲队列中取一数据区的内容;Putbuf(emq,sout)

磁盘存储器的性能和调度

数据的组织和格式
盘片、面、磁道、扇区
为方便处理,每条磁道存储容量相同,每个磁道上的每个扇区相当于一个盘块。磁盘”格式化”的过程就是按规定的格式规划盘块。
在这里插入图片描述

访问时间计算
寻道时间(到磁道)
旋转延迟(到扇区)
传输时间

传输时间占总时间的比例最小,磁盘读写速度的提高要选择合适的调度算法,减少前两项用时,使所有作业的磁盘处理时间均衡
磁道调度算法
FCFS
多个进程的磁盘I/O请求构成一个随机分布的请求队列。
磁盘I/O执行顺序按磁盘请求的先后顺序。
最短寻道时间优先SSTF
选择从当前磁头位置出发移动最少的磁盘I/O请求
使每次磁头移动时间最少。
不一定是最短平均柱面定位时间,但比FIFO算法有更好的性能。
对中间的磁道有利,但可能会有进程处于饥饿状态(I/O请求总不被执行)。
扫描算法SCAN(磁盘电梯调度算法)
规定磁头移动方向:自里向外,再自外向里移动。
后续的I/O磁道请求,哪个在规定方向上距离最近,就先执行哪个。
循环扫描算法CSCAN
SCAN的错过问题:
容易错过与当前磁道距离近,但方向不一致的磁道。
修改:将SCAN规定的移动方向改为“单向移动”
由里向外后,再由里向外。
N-Step-SCAN算法
磁臂粘着”——磁头静止在一个磁道上,导致其它进程无法及时进行磁盘I/O。(因:高密度盘,进程的读写可能集中在某一磁道)
将磁盘请求队列分成长为N 的子队列
按FCFS选择子队列。队列内又按SCAN算法。
3 3 5 2 |3 3 3 2| 3 3 2 3| 3 4 4 5| 2 3 ….2 3
处理子队列过程中产生的新I/O再依次排队列。
N=1时,就是FCFS,N很大时就是SCAN。
FSCAN算法
磁盘高速缓存
内存中划出,对外存磁盘读写进行缓存的区域

第七章 文件与磁盘空间管理

文件管理:把所管理的程序和数据组织成一系列的文件,并能进行合理的存储、使用等操作。
数据项:描述对象某种属性的字符集;是数据组织中可以命名的最小逻辑数据单位。
记录:一组相关数据项集合,描述对象某方面的属性;
关键字:一个记录中的一个或几个数据项的集合,用于唯一的标识一个记录。
文件:由创建者定义的、具有文件名的一组相关元素的集合。
有结构:由相关记录组成
无结构:字符流的形式
文件类型
按用途:系统、用户、库文件
按数据形式:源文件、目标文件、可执行文件
按存取控制属性:只执行、只读、读写
按组织和处理方式:普通文件、目录文件、特殊(设备)文件
在这里插入图片描述
在这里插入图片描述
文件操作
创建/删除文件:分空间,形成FCB及目录(名,地址)
读、写:按名检索目录,找到文件地址,开始读、写
设置文件读写位置,实现随机存取(尤其适用于记录文件)
“打开”与“关闭”:文件读/写操作 = 检索 + 读/写。

文件的逻辑结构

有结构文件(记录式)
①定长记录
②变长记录
如何组织记录:
顺序文件。系统需按该类型记录“长度”,通常定长。
两种记录排列方式
串结构:按记录形成的时间顺序串行排序。记录顺序与关键字无关;
顺序结构:按关键字排序。
检索方法:
从头检索,顺序查找要找的记录,定长的计算相对快。
顺序结构,可用折半查找、插值查找、跳步查找等算法提高效率
顺序结构记录按关键字排序,可按关键字检索
定长:结合折半查找算法等提高检索速度
变长:从第1个记录开始顺序扫描,直到扫描到要检索的关键字标识的记录(例如:数据库、文件系统的基于文件名排序的目录检索)
索引文件。系统需为文件建立索引表。
为了方便单个记录的随机存取,为文件建立一个索引表,记录每项记录在文件的逻辑地址及记录长度;该索引表按关键字排序,
索引表内容:索引号、长度、记录地址指针
索引文件的优缺点:适用于变长记录,可提高检索速度,实现直接存取。索引表增加了存储开销
索引顺序文件。建索引表,记录每组记录的第一个记录位置。
既要方便,又要降低开销
本方式是最常见的一种逻辑文件形式。
将顺序文件的所有记录分组
还是建立索引表,但每个表项记录的是每组第1条记录的键值和地址。
组内记录仍按顺序方式检索和使用。
检索一条记录的过程:
先计算记录是在第几组,然后再检索索引确定组在哪里后,在组内顺序查找。
可利用多级索引,进一步提高检索效率。
在这里插入图片描述
无结构文件(字符流式)
字节为单位,利用读写指针依次访问。
系统对该类文件不需格式处理

文件的物理结构

目标:有效利用外存空间,提高文件访问速度
连续分配
为每一个文件分配一组相邻的盘块。
逻辑文件中的记录顺序与存储器中文件占用盘块的顺序一致。
优点:顺序访问容易,读写速度快。
缺点:会产生外存碎片。可紧凑法弥补,但需要额外的空间,和内存紧凑相比更花时间。创建文件时要给出文件大小;存储空间利用率不高,不利于文件的动态增加和修改;
链接分配(不连续)
可以为每一个文件分配一组不相邻的盘块。
设置链接指针,将同属于一个文件的多个离散盘块链接成一个链表,这样形成的文件称为链接文件。会有链接本。
优点:
离散分配,消除外部碎片,提高利用率
同时适用于文件的动态增长;修改容易
隐式链接
链接信息隐含记录在盘块数据中;每个盘块拿出若干字节,记录指向下一盘块号的指针。
问题:只能顺着盘块读取,可靠性低
显式链接
记录盘块链接的指针显示地记录为一张链接表;所有已分配的盘块号都记录在其中,称文件分配表;为了提高文件系统访问速度,FAT一般常驻内存。
FAT表相关计算
表项个数 = 盘块个数
表项大小,决定于盘块数量编号需要的位数
FAT表大小 = 表项个数 * 表项大小
在这里插入图片描述
索引分配
链接的不足
顺序检索的时间成本:不能支持高效的盘块直接存取。要对一个文件进行直接存取,仍需在FAT中顺序的查找许多盘块号。
链接信息的空间成本:FAT需占用较大的内存空间。当磁盘容量较大时,FAT可能要占用数MB以上的内存空间。这是令人难以忍受的
改进:
系统运行时只涉及部分文件,FAT表无需全部调入内存
每个文件单独建索引表(物理盘块索引),记录所有分配给它的盘块号;
建立文件时,便分配一定的外存空间用于存放文件盘块索引表信息;
单级索引
在这里插入图片描述
多级索引
若文件较大,存放索引表也需要多个盘块(索引盘块)。
索引盘块亦需要按顺序管理起来
若索引盘块数量较少用指针链接的方式即可;
若索引盘块较多,需对索引盘块也采用索引方式管理,形成多级索引。
在这里插入图片描述
混合组织索引(增量式索引组织方式)
iaddr(0)~iaddr(9)存放直接地址,即存文件数据的盘块号;
iaddr(10)存放单级索引的索引盘块号;
剩余的用于文件较大时存放多级索引数据。
iaddr(11)存放二级索引的主索引盘块号
iaddr(12)存放三级索引的主索引盘块号
在这里插入图片描述

存储空间的管理

空闲表
系统为外存上的所有空闲区建立一张空闲表
每个空闲区对应一个空闲表项
(表项包括序号、空闲区的第一个盘块号、空闲盘块数等。)
将所有空闲区按其起始盘块号递增的次序排列
在这里插入图片描述
空闲链表法
将所有空闲盘区拉成一条空闲链
根据构成链所用基本元素的不同,可把链表分成两种形式:
空闲盘块链:分配回收简单。链表长,大量分配时需要操作的指针多。
空闲盘区链:链表长度不定,分配时操作的指针数量相对较少,但分配回收操作相对复杂。
在这里插入图片描述
为提高检索速度,可以采用显式方法,为空闲盘区建立一张链表放在内存中。
在这里插入图片描述
位示图法
利用二进制的一位来表示一个盘块的使用情况。
值为0表示对应的盘块空闲,为1表示已分配。有的系统则相反。
磁盘上的所有盘块都有一个二进制位与之对应,这样由所有盘块所对应的位构成一个集合,称为位示图。

在这里插入图片描述
根据位示图进行盘块分配:
顺序扫描位示图。找到为0的二进制位。
将所找到的一个或一组二进制位,转换成与之对应的盘块号。进行分配操作。
盘块号计算公式为:盘块号 = 列总数*(i-1)+ j;
(注意下标i,j从1开始)
修改位示图。
根据位示图进行盘块回收:
将回收盘块的盘块号转换成位示图中的行号和列号。转换公式为:i=(盘块号-1)div列数+1;j=(盘块号-1)mod列数+1
Div 求商,mod 取余,公式中的i、j都是从1开始的
(如12号盘块转换后为1,12)
修改位示图。
优点:从位示图中很容易找到一个或一组相邻接的空闲盘块。
但限于容量问题,常用于微型机和小型机中。
成组链接法
UNIX系统中采用成组链接法,这是将两种方法结合而形成的一种空闲盘块管理方法。
中心思想:
所有盘块按规定大小划分为组;
组间建立链接;
组内的盘块借助一个系统栈可快速处理,且支持离散分配回收。
在这里插入图片描述
分配盘块时,须调用分配过程来完成。
先检查空闲盘块号栈是否上锁,如没有,便从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格。
若该盘块号已是栈底,即S.free(0),到达当前栈中最后一个可供分配的盘块号。
读取该盘块号所对应的盘块中的信息:即下一组可用的盘块号入栈。
原栈底盘块分配出去。修改栈中的空闲盘块数。
回收
回收盘块号记入栈顶,空闲数N加1
N达到100时,若再回收一块,则将该100条信息填写入新回收块。

目录管理

文件控制块—FCB
为了能对一个文件进行正确的存取,必须为文件设置用于描述和控制文件的数据结构。
在这里插入图片描述
为了提高检索速度——索引结点
文件目录占越大量的盘块,需进行的磁盘读写开销越大。减少实际检索的信息量就减少移动磁头的开销,提高速度;
目录一般是按名检索。而直到找到正确文件前,只关心文件名,不需要其它的文件描述信息,目录中这部分内容的调入不是必须的。
所以:将文件名、文件具体信息分开,使文件描述信息单独形成一个索引结点。
目录结构
单级目录
最简单的目录结构。
整个文件系统中只建立一张目录表,每个文件一个目录项,含有文件相关信息。
每建立一个新文件:
先检索所有的目录项,保证文件名唯一。
获得一空白目录项,填入相关信息,修改状态位(表明每个目录项是否空闲)。
删除一个文件:
找到对应目录项,回收文件所占用空间
清除目录项
优点:简单、能实现目录管理的基本功能——按名存取。
缺点:
文件检索时需搜遍整个目录文件,范围大速度慢。
不允许重名。名字过多难于记忆,对于多用户环境重名难以避免。
不便于实现文件共享(因为不能重名,不同用户使用的共享文件必须不同名字,标识哪些用户共享文件也不方便),一般只适用单机环境。
两级目录

在这里插入图片描述
优点:
提高了检索目录的速度。
在不同的目录中可重名。
不同用户还可以使用相同/不同的文件名来访问系统中的同一个共享文件
多级目录
适用于较大的文件系统管理。又称为树状目录(tree-like)
在文件数目较多时,便于系统和用户将文件分散管理。
层次结构更清晰、提供更灵活的权限管理等
但目录级别太多时也会增加路径检索层次,增加磁盘访问时间
在这里插入图片描述
目录结构
主目录称为根目录,数据文件为树叶,其它目录为结点。多级目录缩小检索范围提高检索速度和文件系统的性能。
路径名
从根目录到任何数据文件都只有一条唯一通路。目录文件名和数据文件名依次用“/”连接起来,即构成数据文件的路径名。
当前目录
为每个进程设置一个“当前目录”,又称“工作目录”。
从当前目录开始,逐级经过中间的目录文件,最后达到要访问的数据文件。这一路径上的目录和数据文件名用“/”连接成路径名,称为相对路径名
从根开始的路径名称为绝对路径名

目录查询技术
用户要访问一个已存文件
目录数据调入内存;
按名检索:系统利用提供的文件名对目录(根据目录层次,需要做的检索次数也不同)进行查询
找该文件控制块
读FCB或对应索引结点;
从文件物理地址换算出文件在磁盘上的物理位置;
最后通过磁盘驱动程序,将所需文件读入内存

文件共享与保护

文件共享
多个用户共享一份文件,只保留文件的一份副本,节约存储空间
方式:
索引结点法
基本FCB法:
名+详细信息。
直接在文件目录中包含文件的物理地址,该方法实现的共享不适用文件动态变化。一个用户对文件的修改(如物理块号增加),对其他用户不可见,共享文件的FCB信息记录同步更新困难。
文件名+索引结点指针。
一个用户修改指针指向地址里的内容,指针不变,其他用户通过指针总能感知索引结点中的最新内容
索引结点中增加count计数
主人删除操作问题:
删,共享用户访问错误;不删,计费问题。
在这里插入图片描述
符号链法
创建一个link类型的文件:“文件名+共享文件路径”(类似快捷方式)
文件主人删除文件,共享者只会出现找不到文件错误。不会发生共享文件删除后出现悬空指针的情况。
该方法适用于网络文件共享,但根据路径检索共享文件的目标位置增加了访问开销,link文件独占索引结点也耗费一定的空间。

文件保护
保护域:他指出了进程所能访问的对象,进程仅在保护域内执行。
须知原则:不不允许他访问所有的对象,只允许进程访问那些它必须去访问的对象。
访问权: 可用有序对(对象名,权集)表示,如(F1,{r|w}).
: 是一组对象访问权的集合
进程与域的两种联系
1、静态联系:指进程的可用资源集在进程的整个生命期中是固定的。但应允许修改域的内容,如,把操作文件的权限从r改为rw.
2、动态联系:指进程的可用资源集在进程的整个生命期中是变化的。进程在执行期间可能从一个保护域切换到另一保护域。
实际系统中,用四个方面对文件实行安全性管理。
(1)系统级管理
(2)用户级管理
(3)目录级管理
(4)文件级管理

SFT,system fault tolerance
防止磁盘故障造成的文件不安全
SFT I:磁盘表面故障
双目录、双文件分配表(空间冗余)
写后读校验、热修复重定向(时间操作冗余)
写入磁盘后再读回内存做一致性校验
热修复写过程:从坏道重定向到专区并记录
SFT II:磁盘驱动器、控制器故障
驱动器故障:磁盘镜像
控制器故障:磁盘双工——并行控制器,分离搜索加快读取
SFT III:高级容错技术
双机热备份
双机互备份
公用磁盘模式

磁盘提速
磁盘高速缓存
提前读
延迟写
优化物理块分布
虚拟盘
磁盘冗余阵列(高速、大容量磁盘系统)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值