操作系统习题集------进程管理
- 格式:docx
- 大小:34.79 KB
- 文档页数:7
习题集- 2 - 进程管理1. 在优先级调度中,___________ 类进程可能被“饿死”,即长时间得不到调度。
A.短进程 B .长进程 C .低优先级进程 D .大内存进程解:C。
优先级调度算法(PRI)的基本思想是:内核为每个进程赋予一个优先级,进程按照优先级的大小顺序在就绪队列中排队,内核将CPU分配给就绪队列头部的第一个进程一一优先级最大的进程。
因此,进程的优先级越低,在就绪队列中的排队位置就越靠近队列尾,获得运行之前的等待时间就越长。
低优先级的进程必须等待所有高优先级进程运行结束后才会被调度运行。
如果不断有高优先级的进程加入就绪队列,那么低优先级进程就会一直等待下去。
这就是所谓的“饿死”现象。
2. 在下面的系统调用中,____________ 不会导致进程阻塞。
A.读/ 写文件 B .获得进程 PID C .申请内存 D .发送消息解:B 。
当正在执行的进程需要使用某种资源或等待某个事件时,如果资源已被其他进程占用或事件尚未出现,该进程不能获得所需的资源而无法继续运行,于是,进程将被阻塞。
进程在阻塞状态中等待资源被释放,或等待事件的发生。
所以,进程在执行系统调用时,如果需要使用某种资源,就可能导致进程阻塞。
“读 /写文件”需要使用设备和文件缓冲区;“申请内存”需要分配内存资源;“发送消息”需要使用消息缓冲区。
3. 下面关于临界区的叙述中,正确的是_____________A.临界区可以允许规定数目的多个进程同时执行B.临界区只包含一个程序段C.临界区是必须互斥地执行的程序段D.临界区的执行不能被中断解:C。
临界段(临界区)的概念包括两个部分:①临界资源:必须互斥访问的资源。
例如,需要独占使用的硬件资源,多个进程共享的变量、结构、队列、栈、文件等软件资源。
②临界区:访问临界资源的、必须互斥地执行的程序段。
即,当一个进程在某个临界段中执行时,其他进程不能进入相同临界资源的任何临界段。
4. 资源顺序分配法破坏了死锁发生的_____________ 必要条件。
A.互斥占用 B .占有等待 C .非剥夺 D .循环等待解:D 。
资源顺序分配方法是:给系统中的每类资源赋予一个自然数的序号,限制进程只能严格按照资源序号由小到大的顺序申请资源。
该方法可以避免“循环等待”的情况发生。
因为,若出现循环等待,则必会有进程在获得大序号资源后申请小序号资源。
5. 假设某操作系统采用 RR调度策略,分配给 A类进程的时间片为100 ms分配给B类进程的时间片为400 ms,就绪进程队列的平均长度为 5 (包括正在运行的进程),其中 A类进程有4个,B类进程有1个,所有进程的平均服务时间为 2 s,问A类进程和B类进程的平均周转时间各为多少?(不考虑 IO 情况)解析:时间片轮转调度(RR是轮流地调度就绪队列中的每个进程,进程每次占用CPU的时间长度限制为时间片的大小。
当采用固定的时间片大小时,每个进程按照固定周期被循环地执行。
所以,进程的执行速度是由该进程的时间片大小在一个循环周期中所占的比例决定的,比例越高,进程的相对执行速度就越快。
解:因为就绪进程队列的平均长度为5,单个RR调度循环周期的时间为4X 100+ 1 X400 = 800 (ms)A类进程需要20个时间片的执行时间,B类进程需要5个时间片的执行时间(1 s = 1 000 ms )。
A类进程的平均周转时间为20X0.8 =16(s)B 类进程的平均周转时间为5X 0.8=4(s)6. 某多道程序设计系统中配有一台处理器 CPU和两台输入/输出设备101、102,现有优先级由高到低的3个进程P1、P2、P3同时存在,它们使用资源的先后顺序和占用时间分别是:进程 P1: 102(30 ms),CPU(10 ms),101(30 ms),CPU(10 ms),102(10 ms)。
进程 P2: 101(20 ms),CPU(20 ms),101(40 ms)。
进程 P3: CPU(30 ms),102(20 ms)。
若进程调度采用“可抢占的最高优先级”调度算法,且忽略调度等所需的时间,请回答下列问题:(1) 进程P1、P2、P3从开始到完成所用的时间分别是多少?(要求用坐标画出进程 P1、P2、P3的工作 过程,其中横坐标表示时间,纵坐标表示 CPU 和 I0设备。
)(2) 这3个进程从开始到全部完成时 CPU 的利用率为多少?101、102的利用率为多少?解析:在“可抢占的最高优先级”调度中,任何时刻内核都将处理机分配给当前最高优先级的就绪进程。
也就是说,只有当高优先级进程主动放弃 CPU 时,低优先级进程才有机会运行,并且,一旦高优先级进程需要使用 CPU 时,内核就会剥夺低优先级进程的CPU 分配给它使用。
在本题中,由于进程 P1和P2在开始执行时先需要进行 10,所以最低优先级的进程 P3获得了 CPU但是,P3运行了 20 ms 后就被P2抢占了 CPU 因为P2刚好完成了 10 ,并且P2的优先级大于P3。
同 样的原因,P2运行了 10 ms 后,就被P1抢占了 CPU P1在CPU 上运行10 ms 之后再次需要进行I0 而放弃CPU 于是,P2、P1获得继续运行的机会。
以此方式, P1、P2和P3相继完成自己的运行过程。
解:根据“可抢占的最高优先级”调度算法,画出进程P1、P2、P3的工作过程(见图2 9)。
102101 CPU图2.9 P1 P32040 60 80 100 T(ms)120进程 P1、P2、P3IO2 的利用率 =(30+20+10)/110=54.5%7. 论述以下解决双进程临界区问题的软件算法是错误的。
ProcessP0:do {flag [ 0 ] =true ; ①while (flag [1]) ; ③临界区flag [ 0 ] =false ;}while (1) ;ProcessP1 :do {flag [ 1 ] =true ; ②while (flag [0]) ; ④临界区flag [ 1 ] =false ;}while (1) ;解析:在算法中,两个进程 P1和P2各自拥有自己的标志牌flag :0]和flag [1]。
当进程需要进入临界 区时,举起标志牌 (设置值为 true )。
然后观察对方是否举起标志牌, 是则等待并继续观察 ( while 语句) , 直到对方放下标志牌(设置值为 false )。
这时,进程才进入临界区。
进程退出临界区时,放下标志牌(设 置值为 false )。
进程P1、P2、P3从开始到完成所用的时间分别是时的时间为110( ms ),在此期间内: CPU 的利用率=(30+20+10+10)/110=63.6%I01 的利用率=(20+30+40)/110=81.8%90 ms 、110 ms 、80 ms 。
这3个进程从开始到全部完成解:通过使用标志牌flag : 0]和flag : 1],能够保证满足“互斥”条件。
但是,当两个进程按照①②③④的顺序执行程序时,它们各自举起了标志牌,同时都因为观察到对方也举起了标志牌而等待在while语句中。
由于两个进程都不会放下自己的标志牌,因此都无法进入临界区,不能满足“有限等待”的条件。
所以,上述解决双进程临界区问题的算法是错误的。
8. 以下解决双进程访问共享变量 count 的程序是否存在错误?试用信号量实现。
Share : count=0 ;Int: flag[2];cobeginProcess P0:do {flag[0]=true ;①while(flag[1]) ;③count=count+1 ;flag[0]=false ;}while(1) ;Process P1 :do {flag[1]=true ;②while(flag[0]) ;④count=count+1 ;flag[1]=false ;}while(1) ;coend解:在上述程序中,访问共享变量的语句count=count+1构成临界区。
两个进程 P0和P1各自拥有自己的标志牌 flag[0] 和 flag[1] 。
当进程需要进入临界区时,举起标志牌(设置值为 true )。
然后观察对方是否举起标志牌,是则等待并继续观察( while 语句),直到对方放下标志牌(设置值为 false )。
这时,进程才进入临界区。
进程退出临界区时,放下标志牌(设置值为 false )。
通过使用标志牌 flag[0] 和 flag[1] ,能够保证满足“单一进入”的条件。
但是,当两个进程按照①、②、③、④的顺序执行程序时,它们各自举起了标志牌,同时都因为观察至U对方也举起了标志牌而等待在 while 语句中。
由于两个进程都不会放下自己的标志牌,因此都无法进入临界区,不能满足“有限等待”的条件。
所以,上述程序是错误的。
设置信号量 S 实现对共享变量 count 的互斥访问。
Share : count=0 ;struct semaphore S=1 ;cobeginProcess P0:do {P(S);count=count+1 ;V(S);}while(1) ;Process P1 :do {P(S);count=count+1 ;V(S);}while(1) ;coend9. 假定一个阅览室最多可容纳 100 人,读者进入和离开阅览室时都必须在阅览室门口的一个登记表上进行登记,而且每次只允许一人进行登记操作。
用信号量实现该过程。
解:设置信号量S:控制进入阅览室的人数。
初值=100。
设置信号量mutex :控制登记表的互斥使用。
初值=1。
struct semaphore s=100,mutex=1;。