当前位置:文档之家› 操作系统经典例题

操作系统经典例题

1、假定访问主存时间为100毫微秒,访问相联存储器时间为20毫微秒,相联存储器为32个单元时快表命中率可达90%,按逻辑地址存取的平均时间为:
(100+20)×90%+(100+100+20)×(1-90%)=130毫微秒比两次访问主存的时间100毫微秒×2=200毫微秒下降了四成多。

有效访问内存的时间
T=P TLB*(T TLB+T M)+ (1-P TLB)*(T TLB + 2T M)其中,P TLB为快表的命中率,T TLB为快表的访问时间, T M为内存的访问时间
2、假设一个分页存储系统具有快表,多数活动页表项都可以存在其中。

如果页表放在内存中,内存访问时间是
1us,若快表的命中率是85%,则有效存取时间为多少?若快表的命中率为50%,那么有效存取时间为多少?
(1) 0.85*1+(1-0.85)*(1+1)=1.15us
(2) 0.5*1+(1-0.5)*(1+1)=1.5us
3、设有8页的逻辑空间,每页有1024字节,它们被映射到32块的物理存储区中。

那么,逻辑地址的有效位是(13)位,物理地址至少是(15)位。

某页式存储管理系统中,地址寄存器长度为24位,其中页号占14位,则主存的分块大小应该是(2的10次方),程序最多占有(2的24次方)页。

4、分页存储管理中,页表的功能是什么?当系统中的地址空间变得非常大时,会给页表的设计带来什么样的新问题?请给出一种解决方案,分析它的优点和缺点。

A.页表的作用是实现从逻辑地址中的页号到内存物
理块的地址映射。

B.当地址空间变得非常大时,进程的页表也将变得
非常大,而且还要求是连续存放的,这样对页表
的存储造成困难。

C.采用的解决方案:二级页表。

将页表分页,使每
个页面的大小与内存物理块的大小相同,并将它
们进行编号,将个页面放在不同的物理块中,或
将当前所需的部分页表项装入内存,其余表项驻
留在外存,必要时调入。

并为这些离散分配的页
表再建立一个外层页表
D.二级页表方法适应了地址空间的需要,较好地实
现了虚拟存储系统。

但也增加了地址变换的开销
和系统管理的复杂性。

“重定位”,在实际上指的是这样相互联系的两件事情:一是确定一个待执行程序在内存中的位置;二是将程序中的逻辑地址转换成物理地址。

静态重定位,指的是在程序装入时实现的重定位。

就是将程序装入内存后,立即根据其装入位置将程序中需重定位的逻辑地址转换成物理地址。

这种“定位”的特点是“定位”之后,内存中的代码发生了变化,程序不能在内存移动,CPU按物理地址运行程序。

动态重定位,是在程序执行的过程中,根据执行的需要动态地装入、链接和定位。

这种方法主要特点是重定位后,内存中的代码没有发生变化,允许程序执行的过程中在内存移动位置,这种位置移动提高内存空间的利用率。

6、在分页、分段和段页式存储管理中,当访问一条指令或一项数据时,需要访问内存几次?各做什么处理?
A.在分页存储管理中,当访问一条指令或数据时,
系统需要访问内存2次。

其中,第1次需要访问
存放在内存中的页表,并实现地址变换,求得物
理地址;第2次是访问内存中所需的指令或数据。

B.在分段存储管理中,当访问一条指令或数据时,
系统需要访问内存2次。

其中,第1次需要访问
存放在内存中的段表,并实现地址变换,求得物
理地址;第2次是访问内存中所需的指令或数据。

C.在段页式存储管理中,当访问一条指令或数据时,
需要访问内存3次。

第1次访问内存中的段表,
查找段号对应的页表基地址;第2次访问内存中
的页表,实现地址转换;第3次访问所需的指令
和数据。

7.在采用页式存储管理的系统中,某作业J的逻辑地址空间为4页(每页2048字节),且已知该作业的页面映像表(即页表)如下。

试借助地址变换图(要求画出地址变换图)求出有效逻辑地址4865所对应的物理地址。

8、哲学家吃饭问题分析:
最多允许4个哲学家同时坐在桌子周围仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子( )给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之。

semaphore fork[5] = {1,1,1,1,1};
semaphore room =4;
int i;
void philosopher (int i);
{while ⑴
{ think( );
wait (room);
wait (fork[i]);
wait (fork [(i+l) %5]);
eat( );
signal (fork [(i+l) % 5]);
signal (fork[i]);
signal (room);
}}
void main( )
{ for(int i=0;i<5;i++)
cobegin
philosopher (i);
coend }
采用AND信号量集解决哲学家就餐问题
设fork[5]为5 个信号量,初值为均1
Philosopher(i)
while (1)
{ 思考;
Swait( fork[i], fork[(i+1) % 5] );
进食;
Ssignal( fork[i], fork[(i+1) % 5] );
}
semaphore fork[5] = {1,1,1,1,1};
int i;
void philosopher (int i);
{ while ⑴
{ think( );
if(i/2 ==0)
{ wait(fork[i]);
wait(fork [(i+l) %5]);
} else
{wait (fork [(i+l)% 5]);
wait (fork[i]);
}
eat( );
signal(fork [(i+l) % 5]);
signal(fork[i]);
}
}。

相关主题