操作系统——进程同步

(一)简答题


1.什么是临界资源?什么是临界区?

答:临界资源是指每次仅允许一个进程访问的资源。属于临界资源有硬件打印机、磁带机等,软件在消息缓冲队列、变量、数组、缓冲区等。
(2)不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。每个进程中访问临界资源的那段代码称为临界区


2.同步机制应遵循的准则有哪些?

答:

同步机制应遵循的四个准则是:

(1) 空闲让进:当无进程处于临界区时,相应的临界资源处于空闲状态,因而应允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用资源。

(2) 忙则等待:当已有进程进入临界区时,表示相应的临界资源正被访问,因而所 有其它试图进入相关临界区的进程必须等待,以保证诸进程互斥访问临界资源。

(3) 有限等待:对要求访问临界资源的进程,应保证该进程能在有限的时间内进入 自己的临界区,以免陷入“永远等待”状态。

(4) 让权等待:当进程不能进入临界区时,应立即释放处理器,以免陷入“忙等”状态。


3.为什么各进程对临界资源的访问必须互斥?

答:  临界资源本身的特性决定了它们只能被诸进程互斥地访问,如果并发执行的多个进程同时访问临界资源,将会造成系统的混乱或程序执行结果的不确定性,这样,用户得到的便可能是不希望得到的、或者是不正确的处理结果。如多个用户同时使用同一台打印机,将使他们的输出结果交织在一起,而难于区分;又如两个用户使用程序段:
mov ax.(counter)
inc ax
mov (counter),ax
对初值为0的共享变量counter 进行计数(加1)操作,则最终counter的值可能是正确的结果2,也可能是错误的结果1,即计算结果出现了不确定性。所以,诸进程对临界资源的访问必须互斥地进行。


4.如何保证各进程互斥地访问临界资源?

答:

        为了互斥地访问临界资源,系统必须保证进程互斥地进入临界区。为此,必须在临界区前增加一段称作进入区的代码,以检查是否有其他进程已进入临界区使用临界资源。若有,则进程必须等待:否则,允许进程进入临界区,同时设置标志表示有进程正在临界区内。同样,在临界区后必须增加一段称作退出区的代码,用于将已有进程进入临界区访问临界资源的标志,改为无进程进入临界区使用临界资源。进入区、退出区具体可用多种同步机制实现,如锁、信号量机制等。


5.何谓“忙等”?它有什么缺点?

答:

        

         忙等(Busy Waiting)是一种同步策略,其中一个进程重复检查某个条件是否为真,以确定它是否可以继续执行。在忙等期间,进程持续地使用CPU资源,但不执行任何有意义的操作。

主要缺点包括:

  1. 资源浪费:忙等消耗了宝贵的CPU时间,尤其在多任务操作系统中,其他进程可能需要这些CPU时间来完成实际的工作。

  2. 可能的死锁:如您所描述,当多个进程尝试访问共享资源时,如果其中一个进程采用忙等策略,可能会导致死锁。死锁是指两个或更多的进程无限期地等待彼此,导致系统陷入停滞。

  3. 效率低下:与其他同步机制(如信号量、互斥锁等)相比,忙等的效率较低。

其他答案:


6.试述采用Peterson算法实现临界区互斥的原理。

答:

        Peterson算法是两个进程间的经典解决方案,用于实现临界区的互斥。该算法基于两个进程之间的协同工作,确保每次只有一个进程可以进入临界区。

以下是Peterson算法的基本原理:

  1. 两个标志位:每个进程都有一个标志位,表示其是否希望进入临界区。例如,对于两个进程P0和P1,有标志位flag[0]和flag[1]。

  2. 轮到谁:一个公共的变量 turn 用于表示哪个进程的轮次进入临界区。

  3. 算法步骤

    • 当一个进程(例如P0)希望进入临界区时,它首先将其标志位设置为true,表示它希望进入临界区。
    • 同时,它将 turn 设置为另一个进程的标号(在这里是1,表示P1)。
    • 然后它会检查另一个进程是否也想进入临界区(即flag[1]是否为true),以及 turn 是否指向它自己。只有当另一个进程不希望进入临界区,或者虽然另一个进程也想进入但 turn 指向自己时,该进程才会进入临界区。
    • 完成临界区的操作后,该进程将其标志位设置为false,表示它已经退出了临界区。
  4. 互斥性:由于 turn 变量和 flag 数组,任何时候只能有一个进程进入其临界区。

  5. 空闲让权:如果一个进程不想进入临界区(其标志位为false),另一个进程可以自由地进入其临界区。

  6. 公平性:由于 turn 变量,算法确保没有进程会因连续进入临界区而饿死。


7.哪些硬件方法可以解决进程互斥问题?简述它们的用法。

答:

1)关中断:访问临界区时关闭中断。
2)TS(Test-and-Set):TS指令为每个临界区加一个布尔变量,每次进入临界区都必须使用TS指令测试变量。
3)swap指令:使用swap指令为每个进程设置一个局部变量key,使用swap指令交换key的值与临界资源锁的值,判断是否有进程正在访问。

8.如果用于进程同步的信号量的P、V操作不用原语实现,则会产生什么结果?举例说明。

答:如果用于进程同步的信号量的P(Proberen,尝试)和V(Verhogen,增加)操作不用原语(即原子操作)实现,它们就可能会被中断,从而导致竞态条件(Race Condition)。这可能会导致多个进程在不应该的时候同时进入临界区,从而破坏数据的一致性和完整性。

其他答案:


9.AND信号量机制的基本思想是什么?它能解决什么问题?

答:AND同步机制的基本思想是,将进程在整个运行过程中所需要的所有临界资源一次性全部分配给进程,待该进程使用完后再一起释放。只要尚有一个资源未能分配给该进程,其他所有可能为之分配的资源也不分配给它。亦即,对若干个临界资源的分配采取原子操作方式,要么全部分配到进程,要么一个也不分配。它能解决的问题:避免死锁的发生。


10.利用信号量机制实现进程互斥时,针对互斥信号量的wait()和signal()操作为什么要成出现?

答:

        利用信号量机制实现进程互斥时,针对互斥信号量的wait()signal()操作需要成对出现是为了确保每当一个进程进入临界区时,其他进程不能同时进入。这对于保护临界资源和维护数据的一致性至关重要。

11.什么是管程?它有哪些特性?

答:

        管程,是由局部于自己的若干公共变量及其说明和所有访问这些公共变量的过程所组成的软件模块。

具有以下特性:

•共享性

•安全性

•互斥性

12.试简述管程中条件变量的含义与作用。

答:

管程(Monitor)是一种同步原语,用于提供对临界资源的受控访问,并保证同一时刻只有一个进程或线程可以执行管程中的某一过程。而在管程中,条件变量是一个特别重要的组件,用于在某些条件下挂起和恢复进程的执行。

条件变量的含义:

  1. 条件:条件变量代表了一种或多种特定条件。例如,一个表示“缓冲区已满”的条件或“队列为空”的条件。

  2. 变量:这并不是传统意义上的变量。它不存储数据,而是提供了两个操作:wait()signal()(有时也有 broadcast() 或其他操作,具体取决于实现)。

条件变量的作用:

  1. 挂起进程:当进程发现某个条件不满足时(例如,消费者进程发现缓冲区为空),它可以使用条件变量的 wait() 操作来将自己挂起。

  2. 唤醒进程:当某个条件从不满足变为满足时(例如,生产者进程在空的缓冲区中添加了一个项目),使用条件变量的 signal() 操作可以唤醒等待该条件的进程。

  3. 避免忙等:而不是让进程持续检查某个条件是否满足(这会浪费CPU时间),进程可以简单地等待直到条件变得满足。这可以提高效率并减少资源浪费。

  4. 提供更细粒度的同步:与使用互斥量或信号量进行粗粒度同步相比,条件变量允许进程在更具体、更细粒度的条件下同步。这提供了更多的灵活性和效率


(二)计算题


13.若信号量的初值为2,当前值为-1,则表示有多少个等待进程?请分析。

答: 信号量的初值表示系统中资源的数目,每次的P操作表示进程请 求一个单位的资源,信号量进行减1操作,当信号量小于0时,表示资源已分配完毕,进程自我阻塞。 如果信号量小于0,那么信号量的绝对值表示当前阻塞队列中进程的个数。因此,当前值为-1,表示有1个等待进程。


14.有m个进程共享同一临界资源,若使用信号量机制实现对某个临界资源的互斥访间请求出信号量的变化范围。

答:某个临界资源的信号量初值为1,其是信号量的最大值。 m个进程分别对临界资源发出1次请求,信号量均要执行减1操作 因此,最多可允许m个进程同时申请,此时信号量的值是1-m,为最小值。因此,信号量值的范围是1-m至1。


15.若有4个进程共享同一程序段,而且每次最多允许3个进程进入该程序段,则信号量的变化范围是什么?

答: 程序段作为共享资源,最多允许3个进程进入其中,因此设置信 号量初值为3。 当4个进程共享该程序段时,在每个进程申请进入时,信号量都 会执行减1操作。当第1个进程申请进入时,信号量值变为2;第2个进 程申请进入时,信号量值变为1:第3个进程申请进入时,信号量值变 为0,第4个进程申请进入时,信号量值变为-1。 因此,信号量的变化范围是3,2,1,0,-1。


(三)综合应用题


16.3个进程P、P2、P3互斥地使用一个包含N(N>0)个单元的缓冲区。P1每次用produce()生成一个正整数,并用put()将其送入缓冲区的某一空单元中;P2每次用gem从该缓冲区中取出一个奇数,并用countodd()统计奇数的个数;P3每次用geteven()从该缓冲区取出一个偶数,并用counteven()统计偶数的个数。请用信号量机制实现这3个进程的同步轮活动,并说明所定义的信号量的含义。要求用伪代码描述。

答: 定义资源信号量empty、odd、even,用于控制生产者与消费者之间的同步, 其中,empty表示空缓冲区的数目,odd表示缓冲区中奇数的个数,even表示缓冲区 中偶数的个 数;定义互斥信号量mutex,用于实现进程对缓冲区的互斥访问。伪代码描述如下:


17.某银行提供了1个服务窗口和10个供顾客等待时使用的座位。顾客然行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用.业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下。

cobegin{
process顾客i{
从取号机上获得一个号码;
等待叫号;

获得服务;

}

process 营业员{

while(TRUE){

叫号;

为顾客服务;

       }

  }

}coend

请添加必要的信号量和P、V操作或wait()/signal()操作,实现上述过程中互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。

答:

18.如图4-3所示,有1个计算进程和1个打印进程,它们共享一个单缓冲区,计算进程不断计算出一个整型结果,并将它放入单缓冲区中;打印进程则负责从单缓冲区中取出每个结果并进行打印。请用信号量机制来实现它们的同步关系。
 
图4-3共享单缓冲区的计算进程和打印进程
 

答:

解法1:

解法2:



19.有3个进程P1、P2、P协作解决文件打印问题。P,将文件记录从磁盘读人内存的缓冲区1,每执行一次读一个记录;P将缓冲区1中的内容复制到缓冲区2中,每执行一次复制一个记录;P将缓冲区2中的内容打印出来,每执行一次打印一个记录。缓冲区的大小与记录大小一样。请用信号量来保证文件的正确打印。

答:

         对缓冲区1来说,P是生产者,P,是消费者;对缓冲区2来说,P,是生产者, P是消费者。缓冲区1和缓冲区2都只能存放一个记录,它们都是临界资源,但无 须使用信号量来实现互斥。P,对于缓冲区1是消费者,对于缓冲区2是生产者,因 此要对P,设置两个信号量来分别控制其对不同缓冲区的不同操作。该文件打印过程的同步算法可描述为:


20.桌上有一个能盛得下5个水果的空盘子。爸爸不停地向盘中放苹果和橘子,儿子不停地从盘中取出橘子享用,女儿不停地从盘中取出苹果享用。规定3人不能同时向(从)盘子中放(取)水果。试用信号量机制来实现爸爸、儿子和女儿这3个“循环进程”之间的同步。

答:

本题是生产者-消费者问题的变形,相当于一个能生产两种产品的生产者(父)向两个消费者(子与女)提供产品的同步问题,因此,需设置两个不同的full信号量apple和orange,它们的初值均为0.


21.试用记录型信号量写出一个不会死锁的哲学家进餐问题的算法。

答:

       此题有多种解法。其中之一是只允许4个哲学家同时进餐,以保证至少有1个哲学家可以进餐,最终才可能由他释放出其所用过的两根筷子,从而使更多的哲学家可以进餐。为此,须设置一个信号量Sm来限制同时进餐的哲学家数目,使它不超过4,因此可将Sm的初值设置为4。 除了为每根筷子设置一个初值为1的信号量chopstick[i](i=0,...,4)外,还须再设 置一个初值为4的信号量Sm。第i个哲学家的活动可描述为:

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘 关

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值