操作系统习题(1)

本文详细解答了操作系统方面的习题,包括CPU的有效地址和物理地址计算,页式存储管理中虚地址到物理地址的转换,以及不同调度算法如FCFS、优先级调度和时间片轮转的进程执行情况分析。还涉及进程同步与互斥的信号量机制实现。

操作系统习题荟


1.在某虚拟页面管理系统中,用户编程地址为64K,物理空间为32K,页面大小为4K,某时刻页表内容如下:(注:状态位为1表示该页在内存,为0则不在。)

页号0123456789101112131415
块号21604357
状态位1111110001010000

问:1.CPU给出有效地址是多少位?地址变换机构(内存管理部件MMU)给出的物理地址是多少位?
  2.虚地址(1)5587h对应的物理地址是多少(用十六进制表示)。(2)16400对应的物理地址为多少(用十进制表示)。(3)E253h对应的物理地址是多少(用十六进制表示)?如访问的页面不在主存,注明页面失效。

  页式存储管理的逻辑地址分为两部分:页号+页内地址。页面数为 64K / 4K = 16页 ,页号部分占4位;每页4K = 2 ^12,页内地址占12位。
答: CPU给出有效地址是 64K =2 ^16 共16位,物理地址为32K = 2 ^15 共15位
  (1)5587h 对应的二进制为:0101 0101 1000 0111 ,“01010101 1000 0111 ”为页号,表示该逻辑地址对应的页号为5,查表得块号为3(十进制),即物理块地址为:0011,拼接块内地址“0101 0101 1000 0111”得     0011 0101 1000 0111即3587(h)
   (2)P = 16400 / 4096 = 4
W = 16400 mod 4096 = 16
MR = 4*4096 + 16 = 16400
虚地址16400的内存地址为16400。
  (3)E253h = 1110 0010 0101 0011b 页号14不在主存中,页面失效。


2.假设某系统中有五个进程,每个进程的执行时间(单位ms)和优先数如下(优先数越小,其优先级越高)

进程执行时间优先数
P1103
P211
P325
P414
P552

 如果在0时刻,各进程按P1,P2,P3,P4,P5的顺序同时到达,试说明,当系统分别采用先来先服务的调度算法(FCFS)、可剥夺的优先级调度算法、时间片轮转法(时间片为1ms时),各进程在系统中的执行情况,并计算在上述每种情况下进程的平均周转时间。
 (1)先来先服务的调度算法(FCFS)

进程运行时间(/ms)开始时间完成时间周转时间
P11001010
P21101111
P32111313
P41131414
P55141919

平均周转时间 (10+11+13+14+19)/5 = 13.4
  (2)可剥夺的优先级调度算法

进程运行时间(/ms)开始时间完成时间周转时间
P11061616
P21011
P32171919
P41161717
P55166

平均周转时间 (16+1+19+17+6)/5 = 11.8
 (3)时间片轮转算法

进程运行时间(/ms)开始时间完成时间周转时间
P11001919
P21122
P32277
P41344
P5541414

平均周转时间(19+2+7+4+14)/5 = 9.2


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

[解析] 本题目考查进程的同步与互斥。本题目是苹果一橘子问题的变形。进程P1可以看做是生产者,进程P2和P3可看做是消费者,进程P1和P2、P3共享大小为N的缓冲区。进程P1、P2和P3需互斥使用缓冲区,P1进程需要与P2进程、P3进程同步。定义信号量S1控制P1与P2之间的同步;S2控制P1与P3之间的同步;empty控制生产者与消费者之间的同步;mutex控制进程间互斥使用缓冲区。
Semaphore sA=0,sB=0,empty=N, mutex=A;
main()
{
  cobegin
 PA();PB();PC();
 coend
}
PA()
{
 x=produce();
 P(empty);
 P(mutex);
 Put()
 if(x% B==0) V(sB);
 else V(sA);
 V(mutex);
}
PB()
{
 P(sA)
 P(mutex);
 Getodd();
 Countodd()=countodd()+A;
 V(mutex);
 V(empty);
}
PC()
{
 P(sB)
 P(mutex);
 Geteven();
 Counteven():=counteven()+A;
 V(mutex);
 V(empty);
}

(以上解答纯属个人解法,如有纰漏忘大佬指正)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值