【操作系统】操作系统原理复习

综合应用题实例:

一、已知主存512K,OS占用低位40K,现有一作业序列如下:

J1要求 160K,J2要求 42K,J3要求 70K,J1完成,J4要求 130K,J5要求 140K,J3完成,J6要求 20K,J7要求 42K,J2完成,J8要求 62K。

试用最佳适应法为上述作业分配主存,画出主存分配情况和自由主存队列。(分配时,高地址处作为已分配区)(’)

答:

二、一文件系统中,盘块大小为1KB=1024B(字节),盘块编号长4B,文件说明中可存放14个盘块编号。关于文件大小有如下统计结果:

文件大小≤4KB 占50%

4KB<文件大小≤9KB 占20%

9KB<文件大小≤256KB 占14%

256KB<文件大小≤768KB 占8%

768KB<文件大小≤64MB 占6%

64MB<文件大小≤16GB 占2%

试为该文件系统设计文件的物理结构,使访问文件时具有尽可能小的平均访问磁盘次数,并计算其平均访问磁盘次数。(11’)

解:此文件系统应采用多级索引。先将文件大小转化为盘块个数

关于文件大小有如下统计结果:

文件大小≤4个盘块 占50%

4个盘块<文件大小≤9个盘块 占20%

9个盘块<文件大小≤256个盘块 占14%

256个盘块<文件大小≤768个盘块 占8%

768个盘块<文件大小≤64K个盘块 占6%

64K个盘块<文件大小≤16M个盘块 占2%

考虑到一个索引块可索引1024/4=256个盘块。因此文件说明中可用编号a0-a8共9个标号索引9个盘块。用编号a9-a11共3个标号索引3个二级块,共3*256=768个盘块。用编号a12可索引1个三级块,共1*256*256=64K个盘块。

用编号a13可索引1个四级块,共256*256*256=16M个盘块。

其平均访问磁盘次数=(50%+20%)*1+(14%+8%)*2+6%*3+2%*4=1.40

三、设某单面磁盘共有28000个扇区,采用CSCAN(循环扫描)磁盘调度策略,磁盘的旋转速度为每分钟6000转,每个磁道有100个扇区,相临磁道间的移动时间为1ms.若在某时刻,磁头位于100号磁道处,并沿着磁道号增大的方向移动,磁道号的请求队列为150,40,230,120,78,28,90,190,对请求队列中的每个磁道需读取1个随机分布的扇区,则读完这些扇区点共需要多少时间?需要给出计算过程。(8’)

解:每分钟6000转,转一圈需10ms,通过一扇区需要0.1ms;

访问时间=寻道时间+旋转时间平均5ms+通过扇区0.1ms;

按CSCAN则访问磁道的顺序为(当前100)-120-150-190-230-max-0-28-40-78-90 其中max=279

总的访问时间=(max-100+max+90)*1ms+5.1ms*8=588.8ms

四、设一系统中有三类资源,所有可用资源个数为(9,8,9)。某时刻系统中资源状态如下:Allocation Need 1)若P2提出请求Request(1,1,2),试问系统

P1: 2 1 1 3 2 4 能否将资源分配给它?为什么?

P2: 1 1 2 4 2 3 2)此后,P4提出请求Request(0,1,1),

P3: 1 2 1 2 1 1 试问系统能否将资源分配给它?为什么?(13’)

P4: 2 1 2 3 3 4

解:依题意可得Available(3,3,3)

1)若进程P2请求资源Req(1,1,2),按银行家算法判断如下:

1)判断Req(1,1,2)<=Need2(4,2,3),表示Req为合法请求;

2)判断Req(1,1,2)<=Available(3,3,3),表示Req为可满足的请求;

3)试探性分配

Available-=Req; 变为(2,2,1)

Alloc2+=Req; 变为(2,2,4)

Need2-=Req; 变为(3,1,1)

4)判断新状态的安全性

新状态是安全的,可找到安全序列P3,P2,P1,P4(具体过程在此略去),因此可分配资源;

2)此后若进程P4请求资源Req(0,1,1),按银行家算法判断如下:

1)判断Req(0,1,1)<=Need4(3,3,4),表示Req为合法请求;

2)判断Req(0,1,1)<=Available(2,2,1),表示Req为可满足的请求;

3)试探性分配

Available-=Req; 变为(2,1,0)

Alloc4+=Req; 变为(2,2,3)

Need4-=Req; 变为(3,2,3)

4)判断新状态的安全性

此时可利用的资源不能满足任何进程的需求,新状态是不安全的,因此不可分配资源,进程P4阻塞,并取消试探性分配。

五、一请求分页系统中,页面大小为2K,一作业共有7个页面,页面访问序列如下:

装入时刻 10 15 20 25 30 35 40 45 50 55 60 65 70 75 页号 2 1 0 3 2 1 3 5 2 3 6 2 1 4

时刻25时页面0,1,2,3分别装入到物理页框2,4,1,3中。(13分)

(1)若采用LRU页面置换算法,试计算缺页中断次数;假设时刻70时执行指令MOV AX,[2600](AX为寄存器,2600为十进制),给出在执行过程中的地址变换过程。

(2)若采用FIFO页面置换算法,试计算缺页中断次数。

解:1)页块数为4,页面0 1 2 3 已装入内存,采用LRU算法,下面给出缺页中断时软件栈的变化情况(栈底打X号的为被淘汰的页面):

共产生缺页中断4次。

LA=2600=1*2K+552 p=1 w=552 访问页表,产生缺页中断;

按上图 时刻70时访问页面1,缺页中断会淘汰页面5,而页面5是淘汰页面0而使用页框2的 所以页框号b=2

PA=2*2K+552=4648

2)采用FIFO算法,需写出队列的变化:

共产生缺页中断5次。

六、一座小桥横跨南北两岸,分南段、中段和北段三部分,南段较窄仅允许单向通行(即当有北向行人依次通过时,南向行人无法通过;同样,当有南向行人依次通过时,北向行人无法通过);中段宽敞,允许多人通过或歇息;北段较短,仅允许两人同时通过,整座桥梁最多承重30人,试用信号量及PV操作实现南、北两岸行人过桥的同步,并列出信号量的含义和初值。

解:semaphore empty=30;//桥梁最多承重30人

semaphore north=2;//北段仅允许两人通行

semaphore south=1;//南段单向通行

int ncount=0,scount=0; //通过南段时北向、南向行人个数

semaphore nmutex=1,smuter=1;//互斥访问ncount和scount

Cobegin {GO_Northi();GO_Southj();}coend

解:semaphore empty=30;//桥梁最多承重30人 semaphore north=2;//北段仅允许两人通行 semaphore south=1;//南段单向通行 int ncount=0,scount=0; //通过南段时北向、南向行人个数 semaphore nmutex=1,smuter=1;//互斥访问ncount和scount Cobegin {GO_Northi();GO_Southj();}coend

GO_Northi()

{

P(empty);

P(nmutex);

if(ncount==0)P(south);

ncount++;

V(nmutex);

过南段;

P(nmutex);

ncount--;

if(ncount==0)V(south);

V(nmutex);

过中段或歇息;

P(north);

过北段;

V(north);

到达北岸;

V(empty);

}

GO_Southj()

{

P(empty);

P(north);

过北段;

V(north);

过中段或歇息;

P(smutex);

if(scount==0)P(south);

scount++;

V(smutex);

过南段;

P(smutex);

scount--;

if(scount==0)V(south);

V(smutex);

到达南岸;

V(empty);

}

七、有一仓库,可存放A和B两种产品,每次入库时只能存入A或B一种产品,每次出库时只能取出A或B一种产品。现要求

(1)-30<A产品数量-B产品数量<40

(2) A产品数量+B产品数量<200

试用P、V操作描述产品的入库过程和出库过程。(14分)

解:Main(){

Semaphore empty=199; //A+B<200

Semaphore fullA=0, fullB=0;

Semaphore mutex=1;

Semaphore AB=39; //A-B<40

Semaphore BA=29; //B-A<30

Cobegin

InLib();

OutLib();

Coend

}

入库过程 InLib() 出库过程OutLib()

while(有产品入库) while(有产品须出库)

{ {

if(产品为A) if(产品为A)

{ P(empty); { P(fullA)

P(AB) P(BA)

P(mutex) P(mutex)

A产品入库 A产品出库

V(mutex) V(mutex)

V(BA) V(AB)

V(fullA); V(empty)

}else{ }else{

P(empty); P(fullB)

P(BA) P(AB)

P(mutex) P(mutex)

B产品入库 B产品出库

V(mutex) V(mutex)

V(AB) V(BA)

V(fullB); V(empty)

} }

} }

经验分享 程序员 微信小程序 职场和发展