部分定义截取自书本
管态和目态
这说的是处理机的执行状态
管态又称为特权态,系统态,核心态。CPU在管态下可以执行指令系统的全集。如果程序处于管态,则该程序可以访问计算机的任何资源,它的资源访问权限不受限制,通常,操作系统在管态下运行。
目态又称为常态或者用户态。机器处于目态时,程序只能执行非特权指令,不能直接使用系统资源,也不能改变CPU的工作状态,并且只能访问这个用户程序自己的存储空间。
一般情况下,用户程序只能在用户态运行
管态时可以执行所有指令(除访管指令)
目态到管态的切换方式
- 系统调用
- 异常
- I/O设备的中断
其中系统调用可以认为用户进程主动发起,异常和外部设备中断是被动的
从目态到管态的转换是由硬件完成的,因为此操作频繁且快速,所以需要硬件实现
访管指令
访管指令不是特权指令
访管指令是可以在目态下执行的指令。用以解决用户程序要完成在目态下无法完成的工作的问题。用户程序的访管指令在执行时被中央处理器取到,就产生一个中断事件,中断装置就会把中央处理器转换成管态,并让操作系统处理该中断事件。操作系统分析访管指令中的参数,在管态下由操作系统完成用户程序的请求。系统调用功能完成后,操作系统把中央处理器的管态改为目态,并返回到用户程序。
中断
可以看计算机组成原理——程序中断方式
用户程序在目态下使用特权指令引起的中断属于:访管中断
由当前正在执行的进程之外的源引起的中断属于:外部中断
中断处理是操作系统必须提供的功能
中断系统一般由相应的硬件和软件组成的。(一般的中断请求由硬件实现,中断处理由软件完成)
计算机系统中判断是否有中断事件发生应是在执行完一条指令后
能影响中断响应次序的技术是中断屏蔽技术
中断是现代操作系统必须提供的功能
PV操作与信号量
用PV操作实现进程间的同步和互斥,PV操作分为P操作原语和V操作原语,操作对象是信号量。
用V操作唤醒一个等待进程时,进程进入就绪态,并且能够唤醒说明原本mutex值小于0,
- 互斥信号量初值只能为1(取值范围只有-1、0、1)
- 用作同步的信号量初值需要根据问题来确定(用户决定,大于等于0)
操作 | 行为 | 作用 |
---|---|---|
P操作(wait) | 将信号量的值减1 | 如果信号量>=0,则该进程继续执行,否则进程进入等待队列,置为等待状态 |
V操作(signal) | 将信号量的值加1 | 如果信号量>0,则该进程继续执行,否则释放等待队列中第一个等待信号量的进程 |
注意这里的继续执行条件,P是信号量>=0,而V是信号量>0,这是不一样的(看下面代码就一目了然了)。
拿互斥信号量S举例子,初始值为1,有一个进程A要使用临界资源,于是A.wait(S)
,此时S为0,还是可以执行的。然后另一个进程B也要使用临界资源,于是B.wait(S)
,但是执行不到S--
,一直在while
循环,所以不能执行临界区操作。只有A用完了临界资源并A.signal(S)
,此时S变为了1,然后正在执行且卡在while
循环里的B.wait(S)
就能运行到S--
,然后B.wait(S)
就执行完了,就可以执行B要进行的临界区操作了。
wait(S){
while(S <= 0);
S--;
}
signal(S){
S++;
}
图解及题目看这个:图解PV操作
临界资源与临界区
临界区:每个进程中访问临界资源的那段程序
临界资源:一次仅允许一个进程使用的共享资源。
临界区是系统提供的一种数据结构,程序中可以声明一个该类型的变量,之后用它来实现对资源的互斥访问。
调度原则
- 如果有若干进程请求进入空闲的临界区(空闲即0进程访问),一次仅允许一个进程进入。
- 任何时候,处于临界区内的进程不可多于一个(0或1),若已有进程进入自己的临界区,则其它想进入自己临界区的进程必须等待。
- 进行临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
- 如果其它进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
进程与进程状态
详细内容看这篇【操作系统】第六话·线程是进程的(宝ᴗ宝)嘛?
引入进程的目的:更好地使多道程序并发执行,提高资源利用率和系统吞吐量。
引入线程的目的:减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能
-
一个进程至少包含一个主线程(没说一定包含多个线程)
-
线程是比进程更小的(但不能独立运行的)基本单位
-
同一个进程中线程切换不会引起进程切换,不同进程的线程切换会引起进程切换。
进程调度
进程调度(Process Scheduling)是指操作系统按某种策略或规则选择进程占用CPU进行运行的过程。
所以提到“进程被调度程序选中”,一定是由就绪态到运行态
进程死锁
死锁状态一定是不安全状态,产生死锁的根本原因是系统资源分配不足和进程推进顺序非法,资源的有序分配策略可以破坏死锁的循环等待条件
虽然进程在运行过程中可能会发生死锁,但产生进程死锁是必须具备一定条件的。综上所述不难看出,产生死锁必须同时具备下面四个必要条件,只要其中任一个条件不成立,死锁就不会发生:
(1)互斥条件。进程对所分配到的资源进行排它性使用,即在一段时间内,某资源只能被一个进程占用。如果此时还有其它进程请求该资源,则请求进程只能等待,直至占有该资源的进程用毕释放。
(2)请求和保持条件。进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
(3)不可抢占条件。进程已获得的资源在未使用完之前不能被抢占,只能在进程使用完时由自己释放。
(4)循环等待条件。在发生死锁时,必然存在一个进程一资源的循环链,即进程集合 P 0 , P 1 , P 2 , … , P n {P_0,P_1,P_2,…,P_n} P0,P1,P2,…,Pn中的 P 0 P_0 P0正在等待一个 P 1 P_1 P1占用的资源, P 1 P_1 P1正在等待 P 2 P_2 P2占用的资源,……, P n P_n Pn正在等待已被 P 0 P_0 P0占用的资源。
有序资源分配法是死锁的预防策略
资源分配图及其化简
(图源网络)书本上讲的老费劲了,其实很简单,甭管图长什么样子,圆圈代表进程,方框代表资源类型,方框中的圆圈/点代表该类资源中的一个资源。
- 指向进程的代表已分配
- 从进程指出去的代表请求
这就完事了。比如说上右图,R1指向P2就是说R1类型的一个资源分配给了进程P2,P3指向R3则意味着进程P3请求一个R3类型的资源
化简的结果只有两种,死锁或不死锁
或者说化简的目的就是检测检测系统处于该状态是否死锁
“请求”就是“有商榷余地”,比如上面图a, P 1 P_1 P1和 P 2 P_2 P2都请求 R 2 R_2 R2且 R 2 R_2 R2尚有一个空余,此时单拿某个进程(比如 P 2 P_2 P2)看,不看来自其他进程(相应的就是 P 1 P_1 P1)的请求分配,那么它可以满足运行的资源需求,所以可以删掉。但是图b就是死锁状态。
B站的这道题目解析:死锁定理
银行家算法
首先就是安全状态和安全序列。
安全状态就是安全性算法要确保的,就是从进程集合中找某个进程,它已分配的资源(或者加上现有的可分配的资源)能执行,然后让它执行了,释放掉所有资源,然后看剩余的进程集合,继续按上面的要求找,直到所有进程都执行且释放了,这个执行的顺序就是安全序列。也可能找不到,那么就没有安全序列。
不如看看这个:操作系统银行家算法模拟实现(C语言版)
系统处于不安全状态未必死锁,因为资源的释放可以打破死锁。系统处于不安全状态一定死锁(即死锁时一定处于不安全状态)
解除死锁
- 资源剥夺法
- 撤销进程
一般不从非死锁进程处抢夺资源
题目
下列调度算法中,( ) 调度算法是绝对可抢占的。
A. 先来先服务
B. 时间片轮转
C. 优先级
D. 短进程优先
时间片轮转
下列关于死锁的说法正确的有( )。
I.死锁状态一定是不安全状态
II.产生死锁的根本原因是系统资源分配不足和进程推进顺序非法
III.资源的有序分配策略可以破坏死锁的循环等待条件
IV.采用资源剥夺法可以解除死锁,还可以采用撤销进程方法解除死锁
全正确
关于优先权大小的论述中,正确的是()。
A、计算型作业的优先权,应高于IO型作业的优先权
B、用户进程的优先权,应高于系统进程的优先权
C、在动态优先权中,随着作业等待时间的增加,其优先权将随之下降
D、在动态优先权中,随着进程执行时间的增加,其优先权降低
D。I/O设备和CPU可以并行工作。
【要点】:优先让I/O繁忙型作业优先运行的话,可以使I/O设备尽早投入工作。从而使资源利用率,系统吞吐量得到提升。
系统进程(如接收进程、对换进程、磁盘 I/O 进程)的优先权高于一般用户进程的优先权。对资源需求少的进程应赋予较高的优先权。
某计算机系统中有8台打印机,由K个进程竞争使用,每个进程最多需要3台打印机。该系统可能发生死锁的K的最小值是____
4,意思是4个进程,每个都需要3台打印机时,且都得到两台(此时无剩余),所以死锁
三个进程共享四个同类资源,这些资源的分配与释放只能一次一个。已知每-一个进程最多需要两个该类资源,则该系统( )。
A、有些进程可能永远得不到该类资源
B、必然有死锁
C、进程请求该类资源必然能得到
D、必然是死锁
C
系统的资源分配图在下列情况中,无法判断是否处于死锁的情况有()。
I.出现了环路
II.没有环路
II.每种资源只有一个,并出现环路
IV.每个进程结点至少有一条请求边
A、I、II、III、IV
B、I、II、IV
C、I、IV
D、以上答案都不正确
C
- 出现了环路只是满足了循环等待的必要条件,满足必要条件不一定会导致死锁
- 没有环路一定不会死锁
- 如果每种资源只有一个,并出现环路,是一定死锁的(不是题目中的无法判断)
系统中有3个不同的临界资源R1、R2和R3,被4个进程p1、p2、p3及p4共享。各进程对资源的需求为: p1申请R1和R2,p2申请R2和R3,p3 申请R1和R3,p4申请R2。若系统出现死锁,则处于死锁状态的进程数至少是( )。
A、1
B、2
C、3
D、4
C。画个图就出来了
这个图是需求关系
这是一种死锁情况(虚线是由于别的进程占有而分配不成的情况)
若系统S1采用死锁避免方法,S2采用死锁检测方法。下列叙述中,正确的是()。
I. S1会限制用户申请资源的顺序,而S2不会
II. S1需要进程运行所需资源总量信息,而S2不需要
III. S1不会给可能导致死锁的进程分配资源,而S2会
A、仅I、II
B、仅II、III
C、仅I、III
D、I、II、III
B
资源分配顺序和用户的申请顺序是两码事,不过都会限制资源分配顺序
其他
操作系统提供给应用程序的接口是系统调用(不是库函数)
分时操作系统的时间片一定,那么用户数越多,则响应时间越长(用户数越多,单位时间就变长,则执行一次时间变长,即响应时间长)