[操作系统笔记]调度与死锁杂项知识点

部分定义截取自书本

[操作系统笔记]调度与死锁杂项知识点_第1张图片

管态和目态

这说的是处理机的执行状态

管态又称为特权态,系统态,核心态。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操作

临界资源与临界区

临界区:每个进程中访问临界资源的那段程序

临界资源:一次仅允许一个进程使用的共享资源。

临界区是系统提供的一种数据结构,程序中可以声明一个该类型的变量,之后用它来实现对资源的互斥访问。

调度原则

  1. 如果有若干进程请求进入空闲的临界区(空闲即0进程访问),一次仅允许一个进程进入。
  2. 任何时候,处于临界区内的进程不可多于一个(0或1),若已有进程进入自己的临界区,则其它想进入自己临界区的进程必须等待。
  3. 进行临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
  4. 如果其它进程不能进入自己的临界区,则应让出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占用的资源。

[操作系统笔记]调度与死锁杂项知识点_第2张图片

有序资源分配法是死锁的预防策略

资源分配图及其化简

[操作系统笔记]调度与死锁杂项知识点_第3张图片
(图源网络)书本上讲的老费劲了,其实很简单,甭管图长什么样子,圆圈代表进程,方框代表资源类型,方框中的圆圈/点代表该类资源中的一个资源。

  • 指向进程的代表已分配
  • 从进程指出去的代表请求

这就完事了。比如说上右图,R1指向P2就是说R1类型的一个资源分配给了进程P2,P3指向R3则意味着进程P3请求一个R3类型的资源


化简的结果只有两种,死锁或不死锁

或者说化简的目的就是检测检测系统处于该状态是否死锁

[操作系统笔记]调度与死锁杂项知识点_第4张图片

“请求”就是“有商榷余地”,比如上面图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。画个图就出来了

这个图是需求关系

R_1
R_2
R_3
p1
p2
p3
p4

这是一种死锁情况(虚线是由于别的进程占有而分配不成的情况)

R_1
R_2
R_3
p1
p2
p3
p4

若系统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

资源分配顺序和用户的申请顺序是两码事,不过都会限制资源分配顺序

其他

操作系统提供给应用程序的接口是系统调用(不是库函数)

分时操作系统的时间片一定,那么用户数越多,则响应时间越长(用户数越多,单位时间就变长,则执行一次时间变长,即响应时间长)

你可能感兴趣的:(操作系统,操作系统)