汤小丹计算机操作系统慕课版课后题答案第四章:进程同步

一.简答题

  1. 什么是临界资源?什么是临界区?
    以互斥形式访问的资源称为临界资源,访问临界资源的代码称为临界区。
  2. 同步机制应该遵循哪些准则?
    空闲让进,忙则等待,有限等待,让权等待
  3. 为什么各进程对临界资源的访问必须是互斥?
    临界资源指的是每次只允许一个进程进行访问的软硬件资源,故必须互斥访问。
  4. 如何保证各进程互斥访问临界资源?
    软件算法,信号,信号量,TS,中断,swap指令,管程等。
  5. 何谓忙等?他有什么缺点?
    忙等指的是进程要访问的临界资源被其他进程占用,此进程没有自旋锁便处于自旋状态即忙等状态。
    占用CPU资源,降低CPU效率。
  6. 简述Peterson算法实现临界区互斥访问的原理?
    皮特森算法是双标志加一把锁
    首先说自已要(flagi = true),但是先谦让把钥匙给别人(key = j),若是别人也想要(flagj = true),别人也谦让key = i,自己便可以访问临界资源
    ps:while()中检查的是若是别人想上,并且钥匙是别人的,自己便会阻塞,否则自己会访问临界资源。
  7. 哪些硬件方法可以解决进程互斥问题,简述它们的用法。
    关中断:访问临界区时关闭中断。
    TS:TS指令为每个临界区加一个布尔变量,每次进入临界区都必须使用TS指令测试变量。
    swap指令:使用swap指令为每个进程设置一个局部变量key,使用swap指令交换key的值与临界资源锁的值,今儿判断是否有进程正在访问。
    ps:硬件实现互斥都是使用锁实现的,进程必须不断测试锁的值,不满足让权等待原则。
  8. 如果用于进程同步的信号量P,V操作不用原语实现,会产生什么样的后果?举例说明。
    会导致信号量混乱,或者陷入死锁,比如使用记录型信号量进行p操作被中断,s-value已经小于零,但是没有阻塞队列。
  9. AND信号量机制的基本思想是什么?能解决什么问题?
    在PV操作时,把所有进程请求的资源都分配给进程,要么分配够,要么一个也不分配。
    解决了一个进程需要多个互斥资源才能执行的问题。
  10. 利用信号量机制实现进程互斥时,针对互斥信号量为什么要成对出现?
    若只有P,没有V就会造z成进程死锁,
    若只有V,没有P会造成信号量失效。
  11. 什么是管程?他有哪些特征?
    管程是代表共享数据结构,以及由对该共享数据结构实施操作的过程组成的资源管理程序,是操作系统的一个资源管理模块。
    特症:
    (1)抽象了临界资源。
    (2)对临界资源的访问只能调用管程进行。
    (3)只允许一个进程进入管程。
  12. 简述管程中条件变量的含义和作用。
    作用:为了解决管程中的进程不能被阻塞,而其他进程不能访问管程的问题。
    含义:管程为何种阻塞的原因都设置了条件变量,进程若因此原因而阻塞,会把这个进程挂在此条件变量的队列上,若是阻塞条件发生变换,则启动一个进程。

二 .计算题

  1. 1个,-1表示有一个进程在等待
  2. 1到1-m
  3. 3到-1

三.综合应用题

  1. 2009年408统考真题,王道书2021版 103页第三题。
    本题精髓是使用两个记录型信号量在P1进程中记录奇偶数个数。
  2. 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)
    }
    }
  3. 本题有手就行
    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)
}

  1. 和16题一样
  2. 最多允许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)
    }
  • 24
    点赞
  • 173
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值