操作系统习题荟
1.在某虚拟页面管理系统中,用户编程地址为64K,物理空间为32K,页面大小为4K,某时刻页表内容如下:(注:状态位为1表示该页在内存,为0则不在。)
| 页号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 块号 | 2 | 1 | 6 | 0 | 4 | 3 | – | – | – | 5 | – | 7 | – | – | – | – |
| 状态位 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
问: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)和优先数如下(优先数越小,其优先级越高)
| 进程 | 执行时间 | 优先数 |
|---|---|---|
| P1 | 10 | 3 |
| P2 | 1 | 1 |
| P3 | 2 | 5 |
| P4 | 1 | 4 |
| P5 | 5 | 2 |
如果在0时刻,各进程按P1,P2,P3,P4,P5的顺序同时到达,试说明,当系统分别采用先来先服务的调度算法(FCFS)、可剥夺的优先级调度算法、时间片轮转法(时间片为1ms时),各进程在系统中的执行情况,并计算在上述每种情况下进程的平均周转时间。
(1)先来先服务的调度算法(FCFS)
| 进程 | 运行时间(/ms) | 开始时间 | 完成时间 | 周转时间 |
|---|---|---|---|---|
| P1 | 10 | 0 | 10 | 10 |
| P2 | 1 | 10 | 11 | 11 |
| P3 | 2 | 11 | 13 | 13 |
| P4 | 1 | 13 | 14 | 14 |
| P5 | 5 | 14 | 19 | 19 |
平均周转时间 (10+11+13+14+19)/5 = 13.4
(2)可剥夺的优先级调度算法
| 进程 | 运行时间(/ms) | 开始时间 | 完成时间 | 周转时间 |
|---|---|---|---|---|
| P1 | 10 | 6 | 16 | 16 |
| P2 | 1 | 0 | 1 | 1 |
| P3 | 2 | 17 | 19 | 19 |
| P4 | 1 | 16 | 17 | 17 |
| P5 | 5 | 1 | 6 | 6 |
平均周转时间 (16+1+19+17+6)/5 = 11.8
(3)时间片轮转算法
| 进程 | 运行时间(/ms) | 开始时间 | 完成时间 | 周转时间 |
|---|---|---|---|---|
| P1 | 10 | 0 | 19 | 19 |
| P2 | 1 | 1 | 2 | 2 |
| P3 | 2 | 2 | 7 | 7 |
| P4 | 1 | 3 | 4 | 4 |
| P5 | 5 | 4 | 14 | 14 |
平均周转时间(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);
}
(以上解答纯属个人解法,如有纰漏忘大佬指正)
本文详细解答了操作系统方面的习题,包括CPU的有效地址和物理地址计算,页式存储管理中虚地址到物理地址的转换,以及不同调度算法如FCFS、优先级调度和时间片轮转的进程执行情况分析。还涉及进程同步与互斥的信号量机制实现。
1万+

被折叠的 条评论
为什么被折叠?



