一.简答题
- 什么是临界资源?什么是临界区?
以互斥形式访问的资源称为临界资源,访问临界资源的代码称为临界区。 - 同步机制应该遵循哪些准则?
空闲让进,忙则等待,有限等待,让权等待 - 为什么各进程对临界资源的访问必须是互斥?
临界资源指的是每次只允许一个进程进行访问的软硬件资源,故必须互斥访问。 - 如何保证各进程互斥访问临界资源?
软件算法,信号,信号量,TS,中断,swap指令,管程等。 - 何谓忙等?他有什么缺点?
忙等指的是进程要访问的临界资源被其他进程占用,此进程没有自旋锁便处于自旋状态即忙等状态。
占用CPU资源,降低CPU效率。 - 简述Peterson算法实现临界区互斥访问的原理?
皮特森算法是双标志加一把锁
首先说自已要(flagi = true),但是先谦让把钥匙给别人(key = j),若是别人也想要(flagj = true),别人也谦让key = i,自己便可以访问临界资源
ps:while()中检查的是若是别人想上,并且钥匙是别人的,自己便会阻塞,否则自己会访问临界资源。 - 哪些硬件方法可以解决进程互斥问题,简述它们的用法。
关中断:访问临界区时关闭中断。
TS:TS指令为每个临界区加一个布尔变量,每次进入临界区都必须使用TS指令测试变量。
swap指令:使用swap指令为每个进程设置一个局部变量key,使用swap指令交换key的值与临界资源锁的值,今儿判断是否有进程正在访问。
ps:硬件实现互斥都是使用锁实现的,进程必须不断测试锁的值,不满足让权等待原则。 - 如果用于进程同步的信号量P,V操作不用原语实现,会产生什么样的后果?举例说明。
会导致信号量混乱,或者陷入死锁,比如使用记录型信号量进行p操作被中断,s-value已经小于零,但是没有阻塞队列。 - AND信号量机制的基本思想是什么?能解决什么问题?
在PV操作时,把所有进程请求的资源都分配给进程,要么分配够,要么一个也不分配。
解决了一个进程需要多个互斥资源才能执行的问题。 - 利用信号量机制实现进程互斥时,针对互斥信号量为什么要成对出现?
若只有P,没有V就会造z成进程死锁,
若只有V,没有P会造成信号量失效。 - 什么是管程?他有哪些特征?
管程是代表共享数据结构,以及由对该共享数据结构实施操作的过程组成的资源管理程序,是操作系统的一个资源管理模块。
特症:
(1)抽象了临界资源。
(2)对临界资源的访问只能调用管程进行。
(3)只允许一个进程进入管程。 - 简述管程中条件变量的含义和作用。
作用:为了解决管程中的进程不能被阻塞,而其他进程不能访问管程的问题。
含义:管程为何种阻塞的原因都设置了条件变量,进程若因此原因而阻塞,会把这个进程挂在此条件变量的队列上,若是阻塞条件发生变换,则启动一个进程。
二 .计算题
- 1个,-1表示有一个进程在等待
- 1到1-m
- 3到-1
三.综合应用题
- 2009年408统考真题,王道书2021版 103页第三题。
本题精髓是使用两个记录型信号量在P1进程中记录奇偶数个数。 - 2011年408统考真题,王道书2021版105页12题
本题王道书给的答案过于复杂,可以参考第7题给出更简单的解
int i,j = 0 //i表是当前取号号码,j表示叫号号码
n = 10 //空位数
mutex_i ,mutex_j = 1 //互斥信号量
顾客
{
p(mutex_i)
p(n)
i++
//取号,待叫号,待获得服务
v(mutex_i)
}
营业员{
if(j<I)
{
p(mutex_j)
v(n)
// 叫号,为j号服务
j++
v(mutex_j)
}
} - 本题有手就行
semaphore
ok_3= 1
mutex_1 = 1
mutex_2= 1
ok_1= 0
ok_2=0
p1
{
p(ok_3)
p(mutex_1)
…
v(mutex_1)
v(ok_1)
}
p2
{
p(ok_1)
p(mutex_1)
p(mutex_2)
…
v(mutex_1)
v(mutex_2)
v(ok_2)
}
p3
{
P(ok_2)
p(mutex_2)
…
v(mutex_2)
v(ok_3)
}
- 和16题一样
- 最多允许4个哲学家同时吃饭
semaphore n = 4
semaphore choptick[5] = {1,1,1,1,1}
while(1)
{
p(n)
p(choptick[i])
p(choptick[i+1]%5)
eat…
v(n)
v(choptick[i])
v(choptick[i+1]%5)
}