操作系统期末复习
本文参考:https://blog.csdn.net/qq_62325622/article/details/134852570、https://www.cnblogs.com/xdeyt/p/18285624
一.概论
1.简述操作系统的定义和功能。
操作系统是管理和控制计算机内的硬件和软件资源,合理地对各类作业进行调度,以方便用户使用的程序的集合 。
操作系统的功能是:处理机管理;存储器管理;文件管理;设备管理和用户接口。
2.操作系统的基本特征
并发、共享、虚拟、异步
3.操作系统运行机制和体系结构
-
指令
特权指令:只能内核态执行如关机、内存分配、启停外设、修改时钟
非特权指令:用户态就能执行如加减运算、读写普通数据
![image]()
-
cpu
![image]()
-
程序
![image]()
-
操作系统内核
![image]()
4.中断:中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
5.系统调用
- 概念:应用程序请求OS内核完成某功能时的一种过程调用;用户与内核的接口
- 分类:
进程控制类
进程通信类
文件操纵类
设备管理类
信息维护类
二.进程控制
1.前趋图


程序并发执行的特征:间断性、失去封闭性、不可再现性
2.进程
定义:进程是进程实体的运行过程,是系统进行资源分配调度的一个独立单位,是程序一次执行
进程实体由程序段、相关数据段、pcb组成
特征:动态性、并发性、独立性、异步性
进程 vs 程序:
-
进程是程序的一个实例,
是程序的一次执行 -
进程是活动的,
程序是静态的 -
程序是进程的代码部分
-
进程在内存中,
程序在外存中
进程的转换

进程控制块(PCB):
概念:pcb是进程的一部分,是操作系统中最重要的记录型数据结构,是进程存在的唯一标志,常驻内存
PCB的信息:进程标识符PID、处理机状态、进程调度信息、进程控制信息
pcb的组织方式:
线式

链式

索引

进程的控制
概念:进程管理最基本的功能,一般由OS内核中的原语实现,在执行过程中不可被中断
进程控制原语:创建、撤销、阻塞、唤醒、切换
进程的通信
概念:指进程之间的信息交换
1.共享存储

2.消息传递
进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的“发送消息/接收消息” 两个原语进行数据交换。

3.管道通信
用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件
管道机制的协调能力:互斥、同步、对方是否存在

进程同步
主要任务:使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性
两种形式的制约关系
间接相互制约关系(互斥关系):进程互斥使用临界资源
直接相互制约关系(同步关系):进程间相互合作
临界资源
系统中某些资源一次只允许一个进程使用如打印机磁带机摄像头,称这样的资源为临界资源或互斥资源或共享变量
诸进程间应采取互斥方式,实现对这种资源的共享
临界区
进程中访问临界资源的那段代码
多个进程不能同时进入临界区
临界区访问四大原则(简答必背)
空闲让进:临界区没人用,进程直接进入临界区
忙则等待:已有进程占用,新来进程排队等待
有限等待:等待不会无限卡死,最终一定能进入
让权等待:进程等待时让出 CPU,不空耗资源
信号量 & P、V 操作
信号量用整数 S 表示,只有 P、V 两种原子操作,不可中断。
- P 操作(申请资源 / 等待)wait(s)
P(S)
{
S = S - 1;
if(S < 0)
进程阻塞,进入等待队列
}
含义:想要使用资源,资源数减一
S≥0:拿到资源,正常运行
S<0:没资源,原地等待
2. V 操作(释放资源 / 唤醒)signal(s)
V(S)
{
S = S + 1;
if(S ≤ 0)
唤醒一个等待的进程
}
含义:用完归还资源,资源数加一
还有等待进程,叫醒一个继续执行
两种信号量用法(直接套模板)
- 互斥信号量(保证独占访问)
初值:mutex = 1
写法模板
P(mutex) // 进入临界区前上锁
临界区代码
V(mutex) // 退出临界区后解锁
- 同步信号量(控制先后顺序)
初值一般设 0
先执行的进程末尾写 V,后执行的进程开头写 P
进程A:
...前置代码
V(S) // 做完了,通知后面进程
进程B:
P(S) // 等待A完成
...后续代码
考试三大经典同步大题)
1. 生产者 — 消费者(最高频)
2. 读者 — 写者问题
3. 哲学家进餐
3.线程
(1)概念:
有的进程需要同时做很多事,例如用QQ来进行聊天,发送文件等,而传统的进程只能串行执行一系列程序。因此,引入“线程”,来增加并发度。
可以把线程理解为轻量级的进程。
线程是一个基本的CPU执行单元,也是程序执行流的最小单位。
引入线程后,进程作为除CPU之外的系统资源的分配单元。

线程状态:执行态、就绪态、阻塞态
线程控制块TCB
(2)线程的实现
1.用户级线程ult
用户级线程的实现(借助中间系统)
优点:
线程切换不需要转换到内核空间
调度算法可以是进程专用的
线程的实现与OS平台无关
缺点:
系统调用的阻塞问题
多线程应用不能利用多处理机进行多重处理的优点
2.内核支持线程KST
内核支持线程的实现(利用系统调用)
优点
在多处理机系统中,内核可同时调度同一进程的多个线程
如一个线程阻塞了,内核可调度其他线程(同一或其他进程)
线程的切换比较快,开销小
内核本身可采用多线程技术,提高执行速度和效率
缺点
对用户线程切换,开销较大
(3)线程模型
多对一模型
多个用户级线程映射到一个内核线程

一对一模型
每个用户级线程映射到一个内核线程

多对多模型
多个用户级线程映射为相等或小于数目的内核线程

三.处理机调度与死锁
1.处理机调度
(1)分类:
高级调度(长程调度/作业调度)
调度对象:作业
主要用于多道批处理系统中
根据某种算法,决定将外存上处于后备队列中的作业调入内存,并为它们创建进程和分配必要的资源。然后,将新创建的进程排在就绪队列上等待调度
低级调度(短程调度/进程调度)
调度对象:进程
根据某种调度算法,决定就绪队列中的哪个进程应获得处理机
应用在于多道批处理、分时和实时OS
中级调度(中程调度/内存调度)
就是要决定将哪个处于挂起状态的进程重新调入内存
目的是为了提高内存利用率和系统吞吐量

(2)调度算法的评价指标
CPU利用率: CPU"忙碌"的时间占总时间的比例
系统吞吐量:单位时间内完成作业的数量。
周转时间:作业完成时的时间-作业到达时间
平均周转时间

带权周转时间:周转时间 ÷ 服务时间

响应时间:从用户通过键盘提交请求开始,直到系统首次显示出处理结果为止的一段时间。
等待时间:进程在就绪队列中等待调度的所有时间之和
2.调度算法
(1)先来先服务调度算法(FCFS):按作业到达的先后次序进行调度
比较有利于长作业,而不利于短作业

(2)短作业优先调度算法(SJF):按作业服务时间长短来调度
对长作业不利
采用SJF算法时,人-机无法实现交互
完全未考虑作业的紧迫程度
| 类型 | 核心规则 | 通俗理解 |
|---|---|---|
| 非抢占式 SJF | 进程一旦开始运行,就必须一直执行到结束,中间不会被新来的短进程打断。 | 「上车就坐到底」,不管后面上来的人多急,车都不会中途停。 |
| 抢占式 SJF | 进程运行时,如果有更短的新进程到达,会立刻抢占 CPU,让新进程先跑。也叫最短剩余时间优先(SRTF)。 | 「谁短谁插队」,只要来了更短的,CPU 就把当前进程暂停,给短进程让路。 |
非抢占式:

抢占式:

(3)优先级调度算法(PR):基于作业/进程的紧迫程度,由外部赋予作业相应的优先级,调度算法根据优先级进行调度

(4)高响应比优先调度算法(HRRN):为每个作业引入一个动态优先级,即优先级是可以改变的,令它随等待时间延长而增加,这将使长作业的优先级在等待期间不断地增加,等到足够的时间后,必然有机会获得处理机。

响应比


(5)时间片轮转(RR)调度算法:所有就绪进程按「先来先服务」排成队列,CPU 每次只给队首进程分配一个固定的时间片(比如 10ms),时间片用完后,无论进程是否执行完,都必须让出 CPU,排到就绪队列末尾,下一个进程再运行。
时间片q的选择
时间片的长度直接决定了系统性能,是 RR 算法的核心参数:
时间片过长:退化成 FCFS 算法,短进程需要等前面的长进程跑完,响应时间变差,失去了分时系统的意义。
时间片过短:进程切换(上下文切换)过于频繁,大量 CPU 时间浪费在切换上,系统整体效率下降。

(6)多级队列调度算法:把不同进程分到不同队列,每个队列用不同调度算法
(7)多级反馈队列调度算法:多个就绪队列,优先级从高到低,高优先级队列用短时间片,低优先级用长时间片;进程在队列间 “降级”
兼顾分时(短进程优先)和批处理(长进程最终也能运行),解决饥饿问题
(8)基于公平原则的调度算法
3.实时调度
(1)概念:在实时系统中,可能存在着两类不同性质的实时任务,即硬实时任务(HRT)和软实时任务(SRT),它们都联系着一个截止时间。为保证系统能正常工作,实时调度必须能满足实时任务对截止时间的要求。为此,实现实时调度应具备一定的条件。
(2)实现实时调度的基本条件:
提供必要的信息
系统处理能力强

采用抢占式调度机制
采用快速切换机制
(3)实时调度算法分类

(4)最早截止时间优先(EDF)调度算法:EDF根据任务的截止时间确定优先级,截止时间越早,优先级越高
既可用于抢占式调度,也可用于非抢占式调度
非抢占式调度用于非周期实时任务
抢占式调度用户周期实时任务
非抢占:

抢占:
| 任务 | 执行时间 C | 周期 T(截止时间 = 周期) | 利用率 C/T |
|---|---|---|---|
| A | 3 | 10 | 0.3 |
| B | 4 | 20 | 0.2 |
| C | 6 | 30 | 0.2 |
| 时间点 | 事件 | 就绪任务 | 截止时间 | 执行动作 |
|---|---|---|---|---|
| 0 | 所有任务首次到达 | A、B、C | A:10,B:20,C:30 | 截止时间最早的 A 运行 |
| 3 | A 执行完成 | B、C | B:20,C:30 | 运行 B |
| 7 | B 执行完成 | C | C:30 | 运行 C |
| 10 | C 执行到 13 时,A 的下一个周期到达 | C、A | A:20,C:30 | A 截止时间更早,抢占 C,运行 A |
| 13 | A 执行完成 | C | C:30 | 继续运行 C(剩余执行时间 3) |
| 16 | C 执行完成 | - | - | 等待下一次任务触发 |
(5)最低松弛度优先LLF算法:根据任务的紧急程度(松弛度)确定任务优先级。紧急程度越高(松弛度越低),优先级越高。松弛度=必须完成时间-其本身的运行时间-当前时间


(6)优先级倒置:采用优先级调度和抢占方式,可能产生优先级倒置。现象:高优先级进程被低优先级进程延迟或阻塞。
解决方法:
制定一些规定,如规定低优先级进程执行后,其所占用的处理机不允许被抢占
建立动态优先级继承
4.死锁
(1)概念:一组进程相互占有对方所需资源,又互相等待对方释放资源,所有进程都无法继续向前推进,陷入永久阻塞的僵持状态
区分:
死锁:多个进程互相等待,全部停滞
饥饿:个别进程长期得不到资源,其他进程正常运行
普通阻塞:等待资源,资源释放后即可恢复运行
(2)资源问题
-
可抢占性和不可抢占性资源
可抢占性资源:某进程在获得这类资源后,该资源可以再被其他进程或系统抢占,如CPU(处理机)和主存区
不可抢占资源:当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如打印机、磁带机 -
可重用性资源和可消耗性资源
可重用性资源:一次只能分配给一个进程,不允许多个进程共享
可消耗性资源:由进程动态创建和消耗
死锁原因
竞争不可抢占性资源引起死锁
竞争可消耗性资源引起死锁
进程推进顺序不当引起死锁
(3)死锁的必要条件
互斥:一段时间内某资源只能被一个进程占用
请求和保持:一个至少持有一个资源的进程,等待获得由其他进程所持有的资源
不可抢占:一个资源只有当持有它的进程完成任务后,自己的释放
循环等待:等待资源的进程之间存在环
(4)死锁四大处理策略
- 死锁预防
思路:预先破坏四个必要条件任意一条,从根源杜绝死锁
破坏互斥:尽量让资源共享
破坏请求保持:进程一次性申请全部资源,不够就一个都不拿
破坏不可剥夺:申请不到新资源,主动释放已有资源
破坏环路等待:统一顺序申请资源
特点:简单安全,但资源利用率低、进程等待时间长
- 死锁避免(最常考)
思路:不破坏必要条件,动态预判资源分配,只分配安全资源,不让系统进入不安全状态
核心概念:
安全状态:存在一种进程执行顺序(安全序列),所有进程都能顺利完成
不安全状态:找不到安全序列,大概率发生死锁
经典算法:银行家算法(计算必考)
- 死锁检测
放任死锁发生,系统定时检查是否出现死锁
判定方法:资源分配图化简法
能全部化简→无死锁;不能完全化简→存在死锁进程
- 死锁解除
检测出死锁后,强行打破僵局恢复系统运行
解除方式:
抢占资源:从其他进程抢资源分给死锁进程
撤销进程:终止一个 / 多个死锁进程,释放资源,直到打破循环环路,使死锁状态消除为止
(5)银行家算法
n为进程的数目,m为资源类型的数目
数据结构
Max:进程最多总共要多少资源
Allocation:进程已经拿到的资源
Need:进程还缺的资源
Need=Max−Allocation
Available:系统剩余空闲资源
1.算出每个进程 Need=Max-Allocation
2.初始可用资源 Work = Available
3.遍历找满足:Need ≤ Work 的进程
4.该进程顺利完成,释放所占资源
5.Work=Work+Allocation
重复筛选,全部跑完 = 安全;剩进程跑不完 = 不安全






浙公网安备 33010602011771号