前言
记录一下自己在操作系统中的学习以及重要的知识点。
知识点
1.什么是操作系统(知道)
操作系统是为了方便用户和提高资源利用率的目的设计的,控制和管理计算机硬件和软件资源,合理地组织计算机工作流程地程序的集合。
操作系统是安装在裸机上的系统软件。
2.操作系统的发展过程(了解)
- 人工发展阶段:(穿孔机、计算机、电传管)
特点:用户独占全机、机等人(CPU等待人工操作、主要是数据输入阶段、CPU空闲着)
- 脱机输入输出技术:
为了解决CPU和I/O设备速度不匹配地矛盾,将数据的输入输出在外围及的控制下完成,即脱离主机的方式下进行。
优点:
减少了CPU的空闲时间,缓解了人机矛盾
缓和了CPU和I/O设备速度不匹配的矛盾进一步减少了CPU的空闲时间。
缺点:
机等人未解决
- 批处理技术:
在磁盘中有若干作业(一批作业),配有专门的编制的监督程序,主机已启动,监督程序自动完成作业的切换,使作业自动的一个接一个的处理。
优点:实现了作业自动转换,克服了机等人。
缺点:
输入时,主机空闲;计算时,外围设备空闲,计算机使用效率不高。
- 单道批处理技术
特征:
自动性
顺序性
单道性
- 多道批处理技术
思想:内存中同时存放几道互相独立的程序,一个I/O时,另一个可以用CPU,多道程序交替运行。
多道程序设计技术的出现,标志着操作系统的诞生
3.操作系统分类(批处理系统、分时系统、实时系统)(知道)
3.1批处理系统(知道)
- 单道:
内存中只有一道作业
FCFS(先来先服务算法,即按照作业到达顺序执行作业)
- 多道
内存中有多道作业
不一定FCFS
先分配除处理机以外的硬件资源
分配处理机(进程调度)
一般电脑目前都是用的多批道处理系统
批处理系统丧失了交互性
3.2分时系统(了解)
采用时间片轮转的方式,每个用户使用一台计算机,但是只使用一个时间片,结束后就会轮到下一个用户使用。
3.3实时系统(了解)
主要特点就是及时、可靠,能及时响应外部事件的请求,在规定事件完成对事件的处理。(例如水坝的水流量监视系统)
4操作系统的特征(重点)
4.1并发性(重点)
并行和并发不是一个概念
- 并行性:两个或两个以上的操作在同一时刻发生
- 并发性:两个或两个以上操作在同一事件间隔内发生
- 多道程序是并发执行的
- 操作系统应能控制和管理并发活动
4.2共享性(知道)
- 共享:系统中的资源供多个并发执行的进程共同使用。
- 类型:
互斥共享方式:仅有一个进程访问
同时访问方式:多个进程同时访问
并发与共享的关系:互为存在条件,共享以并发为条件,共享影响并发。
操作系统要能实现共享
4.3虚拟(了解)
虚拟:通过某种技术把一个物理实体变成若干个逻辑上的对应物。
4.4异步性(知道)
多道程序环境下,进程以异步方式运行。至于异步是什么在下面一个问题有解答
5.并发、并行、同步、异步、多线程的区别?(中带你)
- 并发:同一时间段有几个程序都处于已经启动到运行完毕之间,并且这几个程序都在同一个处理机上运行,并发的两种关系是同步和互斥;程序
- 互斥:进程之间访问临界资源时相互排斥的现象;进程
- 同步:进程之间存在依赖关系,一个进程结束的输出作为另一个进程的输入。具有同步关系的一组并发进程之间发送的信息称为消息或者事件;进程
- 并行:单处理器中进程被交替执行,表现出一种并发的外部特征;在多处理器中,进程可以交替执行,还能重叠执行,实现并行处理,并行就是同时发生的多个并发事件,具有并发的含义,但并发不一定是并行,也就是说事件之间不一定要同一时刻发生;
- 多线程:多线程是进程中并发运行的一段代码,能够实现线程之间的切换执行;
- 异步:和同步相对,同步是顺序执行,而异步是彼此独立,在等待某个事件的过程中继续做自己的事,不要等待这一事件完成后再工作。线程是实现异步的一个方式,异步是让调用方法的主线程不需要同步等待另一个线程的完成,从而让主线程干其他事情。
- 异步和多线程:不是同等关系,异步是目的,多线程只是实现异步的一个手段,实现异步可以采用多线程技术或者交给其他进程来处理。
- 本问题转自:
几种区别
6.前驱图理解(了解)
前驱图就是如下图:
这就是一种前驱图,是一种有向无环图,节点表示操作语句或者程序段或进程。这是数据结构中的一些知识,如果这是一个程序,那么开始是从,无线指向的节点开始,
1、利用信号量机制,根据如下的前趋图写出可并发执行的程序:
设信号量:s12 = 0,s14 = 0, s23 = 0,s25 = 0,s35 = 0,s26 = 0,s36 = 0,s57 = 0,s67 = 0;
1 v(s12)v(s14)
p(s12) 2 v(s23)v(s25)
p(s14) 4 v(s46)
p(s23) 3 v(s35)v(s36)
p(s25)p(s35) 5 v(s57)
p(s36)p(s46) 6 v(s67)
p(s57)p(s67) 7
7.什么是进程?定义和特征(重要)
- 引入:为了描述并发下程序的执行情况引入了进程的概念。
- 定义:进程是程序的一次执行过程,是系统进行资源分配和处理机调度的一个独立单位。
- 特征:
动态性
并发性
独立性
异步性
结构特性:进程 = 程序段 + 数据段 + PCB
PCB是一种数据结构,就是C语言中的结构体,每一个进程都有一个PCB,PCB随着进程创建而创建,随着进程的消亡而消亡。
8.1进程与程序的区别与联系(重要)
- 进程是一个动态的概念、程序是一个静态的概念。
- 进程具有并发性,而程序没有
- 进程是资源分配和处理机调度的独立单位,其并发性受系统制约。
- 一个程序,多次执行,对应多个进程,不同的进程可以包含同一程序。
8.2线程和进程的区别(重要)
- 1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
- 2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
- 3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
- 4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间
- 5.包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。后面关于进程均为没有线程的进程,即单线程
- 6.所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
9.进程的三种基本状态,以及二级调度系统的过程(重要)
1.就绪状态:等待处理机
2.执行状态:用处理机
3.阻塞状态:等事件
被创建
等事件例如IO请求
事件发生I/O事件完成
调度
时间片用完
完成撤销
进程
就绪状态
执行状态
阻塞状态
销毁进程
上图分析:
- 调度:进程调度,选择将CPU分配给哪一个进程
- 时间片用完,被迫从执行状态转到阻塞状态
- 等待事件发生例如等待I/O事件那么进程就会被阻塞
- 事件完成I/O完成就代表进程会从阻塞变到就绪
进程运行状态一共有三个出口:时间片用完、阻塞事件完成、进程执行完毕
9.1进程间的制约关系与进程通讯有关(知道)
- 间接制约关系(互斥):由于共享资源引起的
详细解释:共享资源指的是临界资源,本概念在20题 ,所以同时一次只能有一个进程访问本资源
受间接制约的各进程在执行顺序上时任意的
- 直接制约关系(同步):由于互相合作引起的
详细解释:同步的概念在19,
一组异步环境下的并发进程,各自的执行结果互为对方的执行条件,从而限制各进程的执行速度的过程,称为并发进程之间的直接制约
10.三级调度系统(加入了挂起功能)(重点)
10.1为什么要引入挂起功能(了解)
- 系统负荷调节(系统中的过载保护)
- 终端用户的需要(高级语言单步执行,调试)
- 操作系统的需要(查看资源使用情况)
- 对换的需要(内存对换需要)
10.2挂起是什么?以及进程状态演变图(重点)
挂起就是使正在活动的进程(执行状态、就绪或者阻塞)处于静止状态,同时系统会回收这些进程所占用的资源。
具有挂起功能的进程状态演变图:
可见静止就绪和禁止阻塞的状态就是在外存中。运行和活动就绪和活动阻塞是在内存中。
特别注意的是运行中等待事件发生,到活动阻塞后,事件发生之后不是回到运行状态而是进入活动就绪。
11.进程控制块PCB
PCB在操作系统中就是一个结构体类型的数据结构,保存了进程中的全部信息
PCB有两种组织方式:链接方式、索引
11.1PCB的作用(知道)
- OS根据PCB来对并发执行的进程进行控制和管理。
- PCB是进程的唯一标识。
- PCB常驻内存(因为经常访问)。
- 创建一个新的PCB,就等于创建了一个新的进程。
- 在运行状态的进程阻塞(进入了静止阻塞状态),CPU现场写入PCB。
- 从PCB中拿到CPU现场,恢复进程运行状态,相当于从活动就绪到运行顺序。
11.2PCB的组织方式(知道)
所有PCB存放在内存中,如何辨明PCB标识进程,这时候将PCB分不同的状态存在不同链表中。
链接方式:
- 有一个执行指针,指向目前运行状态的进程。
- 一个就绪队列指针,指向存储了就绪状态进程的PCB链表在内存中的位置
- 多个阻塞队列指针,为什么有多个阻塞指针是因为阻塞的原因不相同,所以有多个阻塞队列,分别指向存储不同原因阻塞的进程PCB链表。
- 一个空闲队列指针:存储了所有空闲状态进程的PCB
索引方式就是就绪表指针和阻塞表指针,然后有一张索引表。
12.OS内核和进程控制的原语(知道)
12.1内核(知道)
在系统层次结构中最里层的程序模块集合
即:内核是计算机硬件的第一层扩充软件
内核的基本功能
- 资源管理功能
进程管理、存储器管理、设备管理
- 支持功能
中断处理、时钟处理、原语操作
12.2原语(知道)
内核是用原语实现的:
原语:由若干条机器指令构成的,完成特定功能的一段程序,其执行过程不可分割,就像一条指令一样。就我理解原语类似是一种函数的东西了。
进程控制原语:
进程的创建、终止
进程的阻塞、唤醒
进程的挂起、激活
13.给出进程定义,并举一个实际比喻例子,说明在该例子中什么可比喻为程序?什么可比喻为进程?什么情况下是多个进程?(例题)
进程是一个程序的一次执行过程,是系统进行资源分配和处理机调度的一个独立单位。举例:随便写一个HELLOWROLD代码就可以比喻为程序,这个程序的一次执行就可以比喻为进程,程序的多次执行对应多个进程。
14.描述进程的三种基本状态,尽可能清楚地解释处于不同状态的进程在的区别。(例题)
- 运行状态:已经获得处理机,程序正在运行。
- 阻塞状态:发生某些事件例如I/O事件和申请缓存事件暂停运行。
- 就绪状态:进程已经获得运行所需要的所有资源,等待处理机运行进程。
15.画出进程状态变化图,说明进程怎样从一个状态转化到下一个状态。(例题)
状态变化图不画了,前面有:
- 执行状态–>阻塞状态 : 发生I/O事件无法继续执行,运行状态的进程变为阻塞状态。
- 就绪状态–>执行状态:处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态变为执行状态。
- 阻塞状态–>就绪状态:等待事件完成,就自动进入就绪状态。
- 执行状态–>就绪状态:时间片用完,或者使用了抢占性进程调度算法,将进程从运行状态变为就绪状态。
16.为支持多进程的并发运行,系统必须建立哪些关于进程的数据结构?(例题)
必须创建PCB(进程控制模块)即静态链表
17.为支持进程状态的变迁,系统至少应该提供哪些进程控制原语?(例题)
- 创建
- 撤销
- 阻塞
- 唤醒
如果三级调度系统,就会加入挂起和激活原语。
18.执行每一个进程控制原语,进程状态发生什么变化?
19.进程的同步(重点)
- 进程同步的主要任务:使并发执行的进程之前能有效地共享资源和相互合作,从而使程序地并发执行具有可再现性(可再现性就是一个程序输入相同的数据应该出现相同的结果)。
- 同步就是直接制约关系:
一组再异步环境下的各进程,各自的执行结果互为对方的执行条件。
- 实现进程的同步可以使用两种办法:
1.利用硬件的方法实现进程的互斥
2.信号量机制
20.临界区概念(知道)
- 临界资源:一次仅允许一个进程访问的资源。
- 临界区:访问临界资源的代码段,不允许多个并发进程交叉执行的一段程序。
临界区必须互斥访问,所以必须要在临界区前面加上进入区,临界区后面加上退出区
- 进入区:检查临界资源是否被访问,未被访问,就进入临界区并设置访问标志为不可访问,否则就再次检查临界资源是否被访问。
- 退出区:恢复访问标志,允许其他进程进入。
21.同步机制应遵循的准则(重点)
- 空闲让进 : 临界区没有进程访问空闲就进入。
- 忙则等待 : 临界区忙进程就等待临界区空闲。
- 有限等待 : 不可一直等待得不到执行。
- 让权等待 : 当进程不能进入临界区,应该立即释放处理机,防止进程忙等待。
22.利用硬件方法解决进程互斥问题-互斥加锁实现(知道)
boolean TS(boolean *lock){
boolean old;
old = *lock; *lock = true;
return old;
}
true 表示被占用,false表示空闲
实现互斥:
while( TS(&lock));
临界区
lock = false
剩余区
解释一下:利用TS实现进程互斥,使用循环一直对lock检查,其实lock为false,某个进程进入一次,就将lock = true,其余进程进入,循环一直进行,直到这个进程退出,lock = false,其余进程就可以进入临界区。
void SWAP(boolean *a,boolean *b){
boolean temp;
temp = *a; *a = *b; *b = temp;
}
每个临界资源设置一个公共布尔变量lock,初值为false,每个进程设置一个私有布尔变量key
key = true;
do{
SWAP(&lock,&key);
}while(key);
临界区
lock = false;
剩余区
解释:每一个进程都有一个变量key为ture,当第一个进程进入循环,swap函数交换lock和key的值,key此时为false,进入临界区,当其他进程进入时lock = true,此时第二个进程的key也为true,所以会一直循环,除非第一个进程出临界区。
22.1硬件方法的优点
- 适用于任意数目的进程,在单处理器或多处理器
- 简单、容易验证其正确性
- 可以支持进程内存在多个临界区,只需为每个临界区设立一个布尔变量
22.2硬件方法的缺点
- 循环测试锁的状态,消耗CPU时间。
- 可能“饥饿”:从等待进程中随机选择一个进程临界区,有可能某个进程一直不能进入临界区。
23.信号量机制(最最最重要)
作用:利用软件来实现信号量
信号量也是一种结构体类型(记录型数据)表示,包含两个数据项:
typedef struct {
int value;
*pcb L;
}semaphore
semaphore s;
value 为本资源的数量,L为等待此类资源的PCB表链
value自然有三种情况,
>0 还有有资源
= 0 资源正好用完
< 0 还有进程在等待此类资源
一类资源对应一个信号量
信号量机制中有两类操作,P-V操作
23.1P-V操作(重重重点)
- P操作:
函数:wait(s)
功能:请求系统分配一个单位的资源
参数:型号量s
流程如下:
-- s.value;
if(s.value < 0){
block(S.L);
}
- V操作
signal(s)
功能:释放一个单位的资源
参数:信号量S
代码如下:
++ S.value;
if(S.value <= 0){
wakeup(S.L);
}
23.2.利用信号量实现进程的互斥(重重重点)
举例子:PA、PB共享一个临界资源
设信号量赋初值:设互斥信号量S(表示临界资源),初值为1(因为只有一个临界资源),表示并没有并发进程使用临界区。
- PA:
P(S)
临界区
V(S)
- PB :
P(S)
临界区
V(S)
注意:在临界区前面使用P原语,在临界区后面使用V原语
P、V原语必须成对出现,并且不能次序错误,重复或者遗漏
n个进程共享一临界资源,则信号量的取值范围为-(n-1)~ 1
23.3利用信号量机制实现进程同步
23.3.1.计算机进程和打印进程共享一个缓冲区,缓冲区最多放一个数,计算进程反复把每次计算结果放入缓冲区,而打印进程则把计算机进程每次放入缓冲区中的数据通过打印机输出,利用信号量实现这个过程。(例题)
同步的内容可以看19
设计算进程为Pc,打印进程为Pp
- 分析:
互斥:Pc和Pp互斥访问
同步:当B为空的时候,Pc -> Pp
当B为满的时候,Pp ->Pc
由于B中只能放一个数据就可以用同步来实现互斥了,若有多个可用资源,必须要考虑互斥
- 设信号量初值:两个同步信号量:
Pc -> Pp empty = 1
Pp -> Pc full = 0;
- 实现:
Pc:
生产一个数
p(empty)
放入缓冲区
v(full)
Pp:
p(full)
从缓冲区取一个数
v(empty)
打印
23.3.2.设在公共汽车上,司机和售票员的活动分别是,利用信号量机制实现,一方面只有售票员关好车门后司机才能启动车辆,另一方面只有司机到站停车后售票员才能开车门,分析司机和售票员之间的同步关系。(例题)
司机:
启动车辆
正常行车
到站停车
售票员:
上乘客
关车门
售票
开车门
下乘客
- 分析并设置同步信号量
两个同步活动
关车门 ->启动车辆 run = 0
到站停车 -> 开车门 stop = 0
- 实现:
1.司机:
p(run)
启动车辆
正常行车
到站停车
v(stop)
2.售票员:
上乘客
关车门
v(run)
售票
p(stop)
开车门
下乘客
23.4.解决生产者-消费者问题(最最最重要)
- 问题描述:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。同时两组进程有N个缓冲区的缓冲池,生产者进程将它锁生产放入一个缓冲池,消费者进程可从一个缓冲区中取一个产品消费,并且必须要保持同步,不能让消费者访问空的缓冲区,也不允许生产者向一个满的缓冲区放产品。
由于同时要实现同步信号量和互斥信号量,一定要注意pv操作的顺序,不可以使用某些不安全的顺序,不然会引发死锁,所以最好按照一下顺序来进行,先执行对资源信号量的p操作,在互斥p操作,后面会详细介绍死锁(由于进程相互请求对方持有的资源,形成了死循环,无法继续向下运行)
- 例如:缓冲池有三个空闲区,并且初始的空闲区没有产品
设置同步信号量:生产者 -> 消费者 empty = 3 消费者 -> 生产者 full = 0,互斥信号量为mutex = 1
消费者:
p(full)
p(mutex)
从缓冲区取一个产品
v(mutex)
v(empty)
生产者:
p(empty)
p(mutex)
放入缓冲区
v(mutex)
v(full)
23.4.1三个进程P0、P1、P2和三个缓冲区B0、B1、B2。进程间借助于相邻缓冲区传递消息:Pi每次从Bi中取一条消息,经加工送入B(i + 1)mod 3 中,B0、B1、B2分别可存放3、2、2个消息。初始时,仅B0有一个消息。(例题)
1.分析三个进程间的同步、互斥关系。
生产者 |
消费者 |
缓冲区 |
同步关系 |
p2 |
p0 |
B0 |
当bo为空:p2->p0 full0 = 1,当bo为满 p0 -> p2 empty0 = 0 |
p0 |
p1 |
B1 |
当bo为空:p0->p1 full1 = 0,当bo为满 p1 -> p0 empty1 = 2 |
p |
p1p2 |
B2 |
当bo为空:p0->p1 full2 = 0,当bo为满 p1 -> p0 empty2 = 2 |
设
B0的互斥型号量为:mux0
B1的互斥信号量为:mux1
B2的互斥信号量为:mux2
实现
p0 |
p1 |
p2 |
p(full0) |
p(full1) |
p(full2) |
p(mux0) |
p(mux1) |
p(mux2) |
从B0中取一个消息 |
从B1中取一个消息 |
从B2中取一个消息 |
v(mux0) |
v(mux1) |
v(mux2) |
v(empty0) |
v(empty1) |
v(empty2) |
加工 |
加工 |
加工 |
p(empty1) |
p(empty2) |
p(empty0) |
p(mux1) |
p(mux2) |
p(mux0) |
向B1中放入一条消息 |
向B2中放入一条消息 |
向B0中放入一条消息 |
v(mux1) |
v(mux2) |
v(mux0) |
v(full1) |
v(full2) |
v(full0) |
23.4.2.2、桌上有一空盘,只允许存放一个水果。爸爸可向盘中放苹果,也可向盘中放桔子。儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘中空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。
23.5读者-写者问题(最最最重要)
- 问题描述:
读者间可同时访问共享资源,任何一个写者必须和其他写者或者读者互斥访问共享资源。
- 分析:
写者与任意一个进程互斥访问共享资源
读者互斥访问
23.6信号量集机制(了解)
- 引入:
由于信号量机制PV操作顺序不当会引起死锁,所以一次不申请一个资源,而是申请多类资源,但是如果P操作不当,可能会产生死锁。
- 基本思想:
多类资源,一起分配,一起释放,如果一个不满足,全不分配。
24.进程通讯(知道)
进程通讯指的是进程数据交换
- 低级通讯指的是进程少量通讯,目的是为了控制进程执行速度,例如信号量机制。
缺点:低效、通讯不透明适用于少量通信
- 高级通讯分为四类:共享存储器系统、管道通信系统、消息传递系统、客户机-服务器系统。
优点:使用方便、高效地传送大量数据
24.1管道通信(了解)
管道:连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称pipe文件。
功能:大量的数据发收。
注意:
(1)UNIX系统的管道通信
(2)以生产者—消费者方式通信
(3)以文件为基础,实质是以外存来进行数据通信。
24.2消息传递系统(了解)
信息单位:消息(报文)
是目前的主要通信方式,分为直接通信方式、间接通信方式
24.3直接通信方式(知道)
- 思想:
接收者队列叫做mq队列,每一个进程都有一个
根据生产者—消费者关系原理,利用内存的公用消息缓冲池实现进程之间的信息交换。发送者进程直接将消息送入内存公用消息缓冲池,并将它挂接在接收者进程的消息缓冲队列上,接收进程从消息缓冲队列中取走消息。
缓冲池包含一个空消息缓冲队列、多个接收者缓冲队列
直接通讯过程:
25.进程调度(最最最重点)
25.1进程调度-os的三级调度
- 作业调度-高级调度
用于决定将外存上处于后备队列中的哪些作业调入内存,处于内存就绪队列,准备执行;
- 进程调度—低级调度==(最重要的调度)==
决定就绪队列中哪个进程将获得处理机;
- 交换调度—中级调度==(内存外存的换入换出)`==
目的是提高内存的利用率和系统吞吐量。
- 仅有进程调度的调度队列模型
- 具有高级和低级调度的调度队列模型
- 同时具有三级调度的调度队列模型
25.2进程调度的四种方式(重点)
1.非剥夺方式(非抢占方式)
先来先服务算法。
一旦占有CPU,直至完成或阻塞;
不利于实时任务;不利于短作业;
2.剥夺方式(抢占方式)
在一定情况下,可剥夺一进程占有的处理机;
抢占的原则有:
(1)短作业(进程)优先原则;
(2)时间片原则;
(3)优先权原则
25.3引起进程调度的因素(重点)
1.正在执行的进程执行完毕。
2.执行中的进程因提出I/O请求或发生等事件而暂停执行。
3.时间片完成。
4.在进程通讯或同步过程中执行了某种原语操作。
5.高优先者进入。
25.4四个进程调度算法(最最最重要)
25.4.1先来先服务调度算法(FCFS)只有进程调度+非抢占(重要)
先来先服务就是按照进程到达时间,谁先来谁就先执行,占据处理机就不会阻塞或者停止。
进程名 |
到达时间 |
服务时间 |
开始执行时间 |
完成时间 |
周转时间 |
带权周转时间 |
A |
0 |
1 |
0 |
1 |
1 |
1 |
B |
1 |
100 |
1 |
101 |
100 |
1 |
C |
2 |
1 |
101 |
102 |
100 |
100 |
D |
3 |
100 |
102 |
202 |
199 |
1.99 |
作业i的周转时间 = 作业i的完成时间 - 作业i的提交(到达)时间
作业i的带权周转时间 = 作业i的周转时间作业i / 作业的服务时间
FCFS调度算法利于长作业,不利于短作业
25.4.2短作业优先算法(SJF)(重点)
26.死锁(重要)
26.1死锁的概念
多个进程因竞争资源而造成的一种僵局,每一个进程向下运行的资源都被另一个进程占有,如果没有外力作用,这些进程都无法继续推进。
26.1产生死锁的原因
26.2产生死锁的必要条件
- 互斥条件
- 请求和保持条件(请求的同时又在占有)
- 不剥夺条件
- 环路等待条件
死锁一定是环路,不剥夺
26.3.处理死锁的基本方法
- 预防死锁:通过破坏产生死锁的四个必要条件之一
只能破坏产生死锁的2、3、4条件,不能破坏互斥条件
- 避免死锁:不破坏死锁产生的四个必要条件、在资源动态分配中,防止进程进入可能发生死锁的不安全状态。
- 检测死锁
- 解除死锁:允许系统出现死锁,但系统设置了检测机制,及时检测出死锁;检测出死锁后,系统将采取措施解除死锁。
26.3.1预防死锁(知道)
- 静态资源分配法(破坏请求和保持条件):
1.思想资源调度时,若资源全满足,则调度,否则等待。信号量集机制
2.缺点:资源浪费、进程延迟运行,降低进程的并发性。
- 破坏不剥夺条件
1.思想:进程新申请资源得不到满足,必须释放已经占有的资源
2.缺点:
保存放弃资源的现场和以后的现场恢复
可能出现反复申请、释放资源而被无限延迟执行的请求。
- 破坏环路等待条件(有序资源分配法)
1.思想:
资源编号
进程以递增顺序申请资源
2.缺点:
资源编号难以确定
后用的资源先申请,资源利用率低
限制编程的独立性
预防死锁的三种方法中,都会导致资源使用率,低效的进程执行。
26.3.2 避免死锁(最重要)
- 避免死锁:它允许三个必要条件,但通过明智的选择,确保永远不会到达死锁点,因此避免比预防允许更多的并发。
- 思想:系统在进行资源分配之前,应先计算此次资源分配后状态的安全性,若分配后是安全的,则将资源分配给进程,否则,令进程等待。
- 避免死锁的算法:银行家算法
26.3.3银行家算法(最最最重点)
以后再写
26.4.检测和解除死锁(知道)
操作系统不断监视系统进展情况,判断死锁是否发生,一旦发生则采取专门的措施,解除死锁,并以最小的代价恢复操作系统运行。
使用SRAG图(资源分配图)
- 判定死锁法则(死锁定理)
如果每个资源类中只能包含一个资源实例,则环路是死锁存在的充分必要条件。
如果每个资源类中的资源实例个数不全为1,则环路是死锁存在的必要条件。
- 系统资源图化简
- 死锁的解除
1.强制性地从系统中撤销一个或多个进程以断开循环等待链,并回收分配给终止进程地全部资源供剩下地进程使用(使前面地工作全部损失)
2.使用一个有效挂起和解挂来挂起一起进程。其实质是从被挂起地进程那里抢夺资源以解除死锁(可以从死锁恢复,使进程地损失最小)
存储器管理
功能:
- 内存的分配、回收
- 存储保护:
上界限地址寄存器
下界限地址寄存器
- 地址变换:
将逻辑地址变为物理地址。
- 地址共享:
多个进程共用同一个系统软件,如编译程序,存放编译程序的内存区即为共享内存区。
- 地址扩充
在逻辑上扩充内存容量采用虚拟存储器技术。