OS经典例题.docx

上传人:b****8 文档编号:30650743 上传时间:2023-08-18 格式:DOCX 页数:39 大小:42.90KB
下载 相关 举报
OS经典例题.docx_第1页
第1页 / 共39页
OS经典例题.docx_第2页
第2页 / 共39页
OS经典例题.docx_第3页
第3页 / 共39页
OS经典例题.docx_第4页
第4页 / 共39页
OS经典例题.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

OS经典例题.docx

《OS经典例题.docx》由会员分享,可在线阅读,更多相关《OS经典例题.docx(39页珍藏版)》请在冰豆网上搜索。

OS经典例题.docx

OS经典例题

第一章经典例题

经典例题解析

1.若信号S的初值为2,当前值为-1,则表示有(B)个等待进程?

A.0B.1C.2D.3

2.比较进程与程序的异同

分析与解答

进程和程序是既有联系又有区别的两个概念,它们的主要区别如下:

(1)每个进程实体中包含了程序段、数据段这两个部分,因此说进程和程序是紧密相关的。

但从结构上看,进程实体中除了程序段和数据段外,还必须包含—个数据第构,即进程控制块PCB。

(2)进程是程序的—次执行过程,因此是动态的;动态性还表现在进程由创建产生、由调度而执行、由撤销而消亡,即它具有一定的生命周期。

而程序则只是一组指令的有序集合,并可永久地存放在某种介质上,其本身不具有动态的含义,因此是静态的。

(3)多个进程实体可同时存放在内存中并发执行,其实这正是引入进程的目的。

而程序的并发执行具有不可再现性,因此程序不能正确地并发执行。

(4)进程是一个能够独立运行、独立分配资源和独立接受调度的基本单位。

而因程序不具有PCB,所以它是不可能在多道程序环境下独立运行的。

(5)进程和程序不一一对应。

同一个程序的多次运行,将形成多个不同的进程;同一个程序的一次执行也可以产生多个进程;而一个进程也可以执行多个程序。

3.为某临界区设置一把锁W,当W=1时表示关锁,W=0时表示锁已打开。

试写出开锁原语和关锁原语,并利用它们去实现互斥。

分析与解答

在同步机构中,常用一个变量来代表临界资源的状态,并称它为锁,通常用0表示资源可用,用1表示资源已被占用。

关锁原语和开锁原语分别用lock和unlock表示,描述如下:

lock(int*w)

{

whlie(*w==1);

*w=1;

}

unlock(int*w)

{

*w=0;

}

利用关锁原语和开锁原语实现互斥的算法描述如下:

lock(w);

临界区;

unlock(w);

4.桌上有一空盘,只允许存放一个水果。

爸爸可向盘中放苹果,也可向盘中放桔子。

儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。

规定当盘中空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。

分析与解答

在本题中,爸爸、儿子、女儿共用一个盘子,且盘中一次只能放一个水果。

当盘子为空时,爸爸可将一个水果放入果盘中。

若放入果盘中的是苹果,则允许女儿吃,儿子必须等待;若放入果盘中的是桔子,则允许儿子吃,女儿必须等待。

本题实际上是生产者-消费者问题的一种变形。

这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。

在本题中,应设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值为1;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘中是否有苹果,其初值为0。

同步描述如下:

semaphoreS=1;

semaphoreSa=0;

semaphoreSo=0;

main()

{

cobegin

father();

son();

daughter();

coend

}

father()

{

while

(1)

{

wait(S);

将水果放入盘中;

if(放入的是桔子)signal(So);

elsesignal(Sa);

}

}

son()

{

while

(1)

{

wait(So);

从盘中取出桔子;

signal(S);

吃桔子;

}

}

daughter()

{

while

(1)

{

wait(Sa);

从盘中取出苹果;

signal(S);

吃苹果;

}

}

5.有5个任务A,B,C,D,E,它们几乎同时到达,预计它们的运行时间为10,6,2,4,8min。

其优先级分别为3,5,2,1和4,这里5为最高优先级。

对于下列每一种调度算法,计算其平均进程周转时间(进程切换开销可不考虑)。

(1)先来先服务(按A,B,C,D,E)算法。

(2)优先级调度算法。

(3)时间片轮转算法。

分析与解答

(1)采用先来先服务(FCFS)调度算法时,5个任务在系统中的执行顺序、完成时间及周转时间如下表所示:

执行次序

运行时间

优先数

等待时间

周转时间

A

10

3

0

10

B

6

5

10

16

C

2

2

16

18

D

4

1

18

22

E

8

4

22

30

根据表中的计算结果,5个进程的平均周转时间T为:

T=(10+16+18+22+30)/5=19.2min

(2)采用最高优先级调度(HPF)算法时,5个任务在系统中的执行顺序、完成时间及周转时间如下表所示:

执行次序

运行时间

优先数

等待时间

周转时间

B

6

5

0

6

E

8

4

6

14

A

10

3

14

24

C

2

2

24

26

D

1

1

26

27

它们的平均周转时间为:

T=(6+14+24+26+27)/5=19.4min

(3)如果系统采用时间片轮转(RR)算法,令时间片为2分钟,5个任务轮流执行的情况为:

第1轮:

(A,B,C,D,E)

第2轮:

(A,B,D,E)

第3轮:

(A,B,E)

第4轮:

(A,E)

第5轮:

(A)

显然,5个进程的周转时间为:

T1=30min、T2=22min、T3=6min、T4=16min、T5=28min。

它们的平均周转时间T为:

T=(30+22+6+16+28)/5=20.4min

6.考虑由n个进程共享的具有m个同类资源的系统,每个进程一次一个地申请或释放资源,假设每个进程对该资源的最大需求量都小于m大于0,而且所有最大需求量之和小于m+n,证明该系统是死锁无关的。

分析与解答

设max(i)表示第i个进程的最大资源需求量,need(i)表示第i个进程还需要的资源数,alloc(i)表示第i个进程已分配的资源数。

可知:

max

(1)+…+max(n)=(need

(1)+…+need(n))+(alloc

(1)+…+alloc(n))

(1)

如果这个系统发生了死锁,那么一方面m个资源应该全部分配出去,即

alloc

(1)+…+alloc(n)=m

(2)

另一方面所有进程陷入无限等待状态。

(1)、

(2)式可知,need

(1)+…+need(n)

上式表示,死锁发生后,n个进程还需要的资源数之和小于n,意味着此时至少存在一个进程i,need(i)=0,即它已获得所需要的全部资源,那么它就能执行完毕并释放它占有的资源,这与前面的假设矛盾,从而证明该系统不会死锁。

7.如图2.6所示,有多个PUT操作同时向BUFF1放数据,有一个MOVE操作不断地将BUFF1的数据移到Buff2,有多个GET操作不断地从Buff2中将数据取走。

BUFF1的容量为m,BUFF2的容量是n,PUT、MOVE、GET每次操作一个数据,在操作的过程中要保证数据不丢失。

试用wait、signal原语协调PUT、MOVE的操作,并说明每个信号量的含义和初值。

图2.6进程操作图

分析与解答

(1)确定并发的操作

本问题是消费者和生产者问题的变形。

多个PUT操作与一个MOVE操作并发进行,多个GET操作与一个MOVE操作并发进行。

因此本题涉及三类进程:

PUT类进程,有多个;GET类进程,有多个;MOVE类进程,有1个。

(2)操作规则

只有buff1有空间才能进行PUT操作;只有buff1有数据,buff2有空间才能进行MOVE操作;只有buff2有数据才能进行GET操作;不允许多个进程同时操作buff1;不允许多个进程同时操作buff2。

(3)设置6个信号量full1、empty1、B-mutex1、full2、empty2、B-mutex2,它们的含义和初值如下:

∙full1表示buff1是否有数据,初值为0;

∙empty1表示buff1有空间,初值为m;

∙B-mutex1表示进程对buff1互斥操作,初值为1;

∙full2表示buff2是否有数据,初值为0;

∙empty2表示buff2有空间,初值为n;

∙B-mutex2表示buff2是否可操作,初值为1;

(4)wait、signal操作实现

{

While

(1)

{

wait(empty1);/*判断buff1是否有空间,没有则等待*/

wait(B-mutex1);/*是否可操作buff1*/

向buff1中放入一个数据;

signal(B-mutex1);/*设置buff1可操作标志*/

signal(full1);/*将buff1中数据个数增加一个*/

}

}

{

While

(1)

wait(full1);/*判断buff1是否有数据,没有则等待*/

wait(empty2);/*判断buff2是否有空间,没有则等待*/

wait(B-mutex1);/*是否可操作buff1*/

wait(B-mutex2);/*是否可操作buff2*/

将buff1中的一个数据移到buff2;

signal(B-mutex1);/*设置buff1可操作标志*/

signal(B-mutex2);/*设置buff2可操作标志*/

signal(empty1);/*将buff1中的空间增加一个*/

signal(full2);/*将buff2中的数据增加一个*/

}

}

{

While

(1)

wait(full2);/*判断buff2是否有数据,没有则等待*/

wait(B-mutex2);/*是否可操作buff2*/

从Buff2中将数据取走一个;

signal(B-mutex2);/*设置buff2可操作标志*/

signal(empty2);/*将buff2中的空间增加一个*/

}

}

8.有一个具有两道作业的批处理系统,作业调度采用短作业优先的调度算法,进程调度采用以优先数为基础的抢占式调度算法。

在下表所示的作业序列中,作业优先数即为进程优先数,优先数越小优先级越高。

作业号

到达时间

运行时间

优先数

A

10:

00

40分钟

5

B

10:

20

30分钟

3

C

10:

30

50分钟

4

D

10:

50

20分钟

6

(1)列出所有作业进入内存时间及结束时间。

(2)计算平均周转时间。

分析与解答

在本题中,每个作业的运行将经历两级调度:

作业调度和进程调度。

作业调度采用短作业优先调度算法,进程调度采用基于优先数的抢占式调度算法,高优先级的进程可以抢占系统处理机。

只有当作业调度程序将作业装入内存后,方能参与进程调度。

本题中的批处理系统是两道作业系统,因此每次只能有两道作业进入系统内存。

本题中的作业和进程推进顺序如下:

10:

00时,A作业到达。

因系统的后备作业队列中没有其他作业,进程就绪队列中也没有进程,故作业调度程序将作业A调入内存并将它排在就绪队列上,进程调度程序调度它运行。

10:

20时,B作业到达。

因系统的后备作业队列中没有其他作业,故作业调度程序将作业B调入内存并将它排在就绪队列上。

而作业B的优先级高于作业A的优先级,进程调度程序停止作业A的运行,将作业A放入就绪队列,调度作业B运行。

此时,系统中已有两道作业在内存中运行,作业A已运行20分钟,还需运行20分钟才能完成。

l0:

30时,C作业到达。

因系统中已有两道作业在内存中运行,故作业C只能在后备作业队列中等待作业调度。

此时,作业B已运行了10分钟并将继续运行,还需运行20分钟才能完成;作业A已等待l0分钟并将继续等待、还需运行20分钟才能完成。

10:

50时,B作业运行30分钟结束运行,D作业到达。

因系统中只有作业A在内存中运行,作业后备队列中有C、D两作业,按短作业优先的作业调度策略,作业D被作业调度程序选中,装入内存运行,作业C仍在后备作业队列中等待作业调度。

在内存中,作业A的优先级高于作业D,进程调度程序调度作业A运行,作业D在就绪队列中等待进程调度。

此时,作业A已运行了20分钟,在就绪队列中等待了30分钟,还需运行20分钟才能完成;作业C已在后备队列中等待了20分钟并将继续等待。

11:

10时,A作业运行40分钟结束运行。

因系统中只有作业D在内存中运行,作业后备队列中只有作业C在等待,作业调度程序将作业C装入内存运行。

因作业C的优先级高于作业D,进程调度程序调度作业C运行,作业D仍在就绪队列中等待进程调度。

此时作业D已在就绪队列中等待了20分钟并将继续等待。

12:

00时,C作业运行50分钟结束运行。

因系统中只有作业D在内存,程序调度作业D运行。

12:

20时,D作业运行20分钟结束运行。

(1)由上述分析可得出所有作业的进入内存时间和结束时间,如下表所示:

作业号

进入内存时间

结束时间

A

10:

00

11:

10

B

10:

20

10:

50

C

11:

10

12:

00

D

10:

50

12:

20

(1)各作业执行时的周转时间为:

作业A:

70分钟

作业B:

30分钟

作业c:

90分钟

作业D:

90分钟

作业的平均周转时间为

(70+30+90+90)/4=70分钟。

9.假设某系统中有4种资源(R1,R2,R3,R4),在某时刻系统中共有5个进程,进程P1、P2、P3、P4、P5的最大资源需求量和此时已分配到的资源数向量如下表

进程

max

R1R2R3R4

allocation

R1R2R3R4

available

R1R2R3R4

P1

0012

0012

2100

P2

2750

2000

P3

6656

0034

P4

4356

2354

P5

0652

0332

(1)当前系统是否是安全的?

(2)如果进程P3发出资源请求request(0,1,0,0),为保证系统安全,系统能否将资源分配给它?

分析与解答

(1)利用安全性算法对当前时刻的资源分配情况进行分析,进程的最大资源需求数减去当前进程已分配的资源数就是进程的还需资源数,可得下表所示的安全分析,从中可知存在一个安全序列{P1,P4,P5,P2,P3};故系统是安全的。

进程

work

R1R2R3R4

need

R1R2R3R4

allocation

R1R2R3R4

work+allocation

R1R2R3R4

finish

P1

2100

0000

0012

2112

true

P4

2112

2002

2354

4466

true

P5

4466

0320

0332

4798

true

P2

4798

0750

2000

6798

true

P3

6622

6622

0034

6656

true

(2)在进程P3发出资源请求request(0,1,0,0)后,假设系统把资源分配给P3,修改有关数据,资源情况如下表所示:

进程

allocation

R1R2R3R4

need

R1R2R3R4

available

R1R2R3R4

P1

0012

0000

2000

P2

2000

0750

P3

0134

6522

P4

2354

2002

P5

0332

0320

满足资源需求的进程执行序列为:

进程可用资源数

P1完成后(2,0,1,2)

P4完成后(4,3,6,6)

P5完成后(4,6,9,8)

此时可用资源数已不能满足P2或P3的需要,即此时系统状态是不安全的,系统将拒绝资源请求

第二章经典例题

三、经典例题解析

1.若信号S的初值为2,当前值为-1,则表示有()个等待进程?

A.0B.1C.2D.3

分析与解答:

信号量的初始值表示系统中资源的数目,每次的wait操作意味着进程请求一个单位的资源,信号量进行减1的操作,当信号量小于0时,表示资源已分配完毕,进程自我阻塞。

因此,如果信号量小于0,那么信号量的绝对值就代表当前阻塞进程的个数,答案为B

2.比较进程与程序的异同

分析与解答

进程和程序是既有联系又有区别的两个概念,它们的主要区别如下:

(1)每个进程实体中包含了程序段、数据段这两个部分,因此说进程和程序是紧密相关的。

但从结构上看,进程实体中除了程序段和数据段外,还必须包含—个数据第构,即进程控制块PCB。

(2)进程是程序的—次执行过程,因此是动态的;动态性还表现在进程由创建产生、由调度而执行、由撤销而消亡,即它具有一定的生命周期。

而程序则只是一组指令的有序集合,并可永久地存放在某种介质上,其本身不具有动态的含义,因此是静态的。

(3)多个进程实体可同时存放在内存中并发执行,其实这正是引入进程的目的。

而程序的并发执行具有不可再现性,因此程序不能正确地并发执行。

(4)进程是一个能够独立运行、独立分配资源和独立接受调度的基本单位。

而因程序不具有PCB,所以它是不可能在多道程序环境下独立运行的。

(5)进程和程序不一一对应。

同一个程序的多次运行,将形成多个不同的进程;同一个程序的一次执行也可以产生多个进程;而一个进程也可以执行多个程序。

3.为某临界区设置一把锁W,当W=1时表示关锁,W=0时表示锁已打开。

试写出开锁原语和关锁原语,并利用它们去实现互斥。

分析与解答

在同步机构中,常用一个变量来代表临界资源的状态,并称它为锁,通常用0表示资源可用,用1表示资源已被占用。

关锁原语和开锁原语分别用lock和unlock表示,描述如下:

lock(int*w)

{

whlie(*w==1);

*w=1;

}

unlock(int*w)

{

*w=0;

}

利用关锁原语和开锁原语实现互斥的算法描述如下:

lock(w);

临界区;

unlock(w);

4.桌上有一空盘,只允许存放一个水果。

爸爸可向盘中放苹果,也可向盘中放桔子。

儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。

规定当盘中空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。

分析与解答

在本题中,爸爸、儿子、女儿共用一个盘子,且盘中一次只能放一个水果。

当盘子为空时,爸爸可将一个水果放入果盘中。

若放入果盘中的是苹果,则允许女儿吃,儿子必须等待;若放入果盘中的是桔子,则允许儿子吃,女儿必须等待。

本题实际上是生产者-消费者问题的一种变形。

这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。

在本题中,应设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值为1;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘中是否有苹果,其初值为0。

同步描述如下:

semaphoreS=1;

semaphoreSa=0;

semaphoreSo=0;

main()

{

cobegin

father();

son();

daughter();

coend

}

father()

{

while

(1)

{

wait(S);

将水果放入盘中;

if(放入的是桔子)signal(So);

elsesignal(Sa);

}

第三章经典例题

经典例题解析

1.某一存储管理系统采用可变分区分配方案,设当前内存的空白区表如下表所示。

空白区号

起始地址

空白区容量

状态

1

5KB

100KB

可用

2

120KB

20KB

可用

3

310KB

256KB

可用

4

1024KB

48KB

可用

现有四个作业J1,J2,J3,J4,它们分别需要内存20KB、42KB、120KB、130KB的空间,若采用最先适应算法,以怎样的次序可将这四个作业都装入主存,并给出装入后的空白区表。

分析:

最先适应算法即首次适应算法,它要求空闲分区(即空白区)按地址递增的次序排列,在进行内存分配时,总是从空闲分区表首开始顺序查找,直到找到第一个能满足其大小要求的空闲分区为止。

然后,再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲分区表中。

为描述方便起见,假设将空闲分区的低地址端分配给作业。

解答:

按J1,J2,J3,J4顺序这四个作业装入主存。

其装入过程如下:

(1)在装入J1时,J1申请20KB,选中1号空白区,分配后1号空白区还剩80KB,J1装入后的空白区表如表1所示。

表1空白区表

空白区号

起始地址

空白区容量

状态

1

25KB

80KB

可用

2

120KB

20KB

可用

3

310KB

256KB

可用

4

1024KB

48KB

可用

(2)在装入J2时,J2申请42KB,选中1号空白区,分配后1号空白区还剩38KB,J2装入后的空白区表如表2所示。

表2空白区表

空白区号

起始地址

空白区容量

状态

1

67KB

38KB

可用

2

120KB

20KB

可用

3

310KB

256KB

可用

4

1024KB

48KB

可用

(3)在装入J3时,J3申请120KB,选中3号空白区,分配后3号空白区还剩136KB,J3装入后的空白区表如表3所示。

表3空白区表

空白区号

起始地址

空白区容量

状态

1

5KB

48KB

可用

2

120KB

20KB

可用

3

430KB

136KB

可用

4

1024KB

48KB

可用

(4)在装入J4时,J4申请130KB,选中3号空白区,分配后3号空白区还剩6KB,J4装入后的空白区表如表4所示。

表4空白区表

空白区号

起始地址

空白区容量

状态

1

5KB

48KB

可用

2

120KB

20KB

可用

3

560KB

6KB

可用

4

1024KB

48KB

可用

2.(10分)假定某页式管理系统,主存为64KB,分成16块,块号为0,1,2,3,4,…,15。

设某作业有4页,其页号为0,1,2,3,被分别装入主存的2,4,1,6块。

试问:

(1)该作业的总长度是多少字节?

(按十进制)

(2)写出该作业每一页在主存中的起始地址。

(3)若有多个逻辑地址[0,100]、[l,50]、[2,0]、[3,60],试计算出相应的内存地址。

(方括号内的第一个元素为页号,第二个元素为页内位移)

分析:

在页式管理系统中,页面大小和物理块的大小相同,所以通过计算物理块的大小可以得出该作业的长度;通过页表机制,我们知道

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1