教材:《操作系统设计与实现》(第三版)
2、在一个使用交换技术的系统中,按地址顺序排列的内存中的空闲块大小是10KB,4KB,20KB,18KB,7KB,9KB,12KB,15KB。对于连续的段请求:
a)12KB
b)10KB
c)9KB
使用最先匹配算法,哪个空闲块将被选中?对最佳匹配法、最坏匹配法和下次匹配法回答同样的问题。
解:
(1)最先匹配法
被选中的块依次是:20KB 10KB 18KB
(2)最佳匹配法
被选中的块依次是:12KB 10KB 9KB
(3)最坏匹配法
被选中的块依次是:20KB 18KB 15KB
(4)下次匹配法
被选中的块依次是:20KB 18KB 9KB
6、使用图4.8中的页表,计算出下列虚拟地址所对应的物理地址:
a)20
b)4100
c)8300
解:
a)虚拟地址20位于第0个虚拟页面中,页面内的偏移地址是20,其被映射到第2个物理页面,起始地址为8192,所以最后的物理地址为8192+20=8212。
b)虚拟地址4100位于第1个虚拟页面中,页面内的偏移地址是4100-4096=4,其被映射到第1个物理页面,起始地址为4096,所以最后的物理地址为4096+4=4100。
c)虚拟地址8300位于第2个虚拟页面中,页面内的偏移地址是8300-8192=108,其被映射到第6个物理页面,起始地址为24576,所以最后的物理地址为24576+108=24684。
11、一台32位地址的计算机使用了两级页表。虚拟地址被划分为三部分:9位的顶级页表字段、11位的二级页表字段和页内偏移。请问页面的大小是多少?在地址空间中总共有多少个页面?
解:
页内偏移地址:32-9-11=12位
页面大小:
2
12
=
4
K
B
2^{12}=4KB
212=4KB
地址空间中总共有:
2
20
=
1048576
2^{20}=1048576
220=1048576个页面
【实际在内存中不会存这么大】
12、以下是一小段汇编语言程序(用文字来描述),用在一台页面大小为512字节的计算机上。该程序位于地址1020,它的栈指针位于8192(向0的方向增长)。请给出这个程序所产生的页面访问序列。假设每条指令占用4个字节(1个字),对指令和数据的访问都应该包含在访问序列之中。
将地址为6144的字装入寄存器0
把寄存器0压入栈中
调用起始地址为5120的函数,把返回地址入栈
5120把栈指针的值减去16
5124将实参与常量4进行比较
5126如果相等,跳转到5152
解:
页面序列:
1(指令)+12(数据)
2(指令)+15(数据)
2(指令)+15(数据)
10(指令)
10(指令)+ 15(数据)
10(指令)
栈指针是一个寄存器,第四条只是访问了寄存器,而没有对栈进行访问
实参值在栈中
(跳转后,下一条指令才会从5152开始执行)
14、在一台计算机上,进程的地址空间有1024个页面,页表被保存在内存中。从页表中读取一个字的开销是500ns。为了减小开销,这台计算机使用了TLB,它能存放32对(虚拟页面号,物理页面号),查找时间为100ns。为了把页表的平均访问开销降到200ns,需要的TLB命中率是多少?
解:
假设TLB的命中率为r。
100
n
s
×
r
+
500
n
s
×
(
1
−
r
)
≤
200
n
s
100ns\times r+500ns\times(1-r)\leq200ns
100ns×r+500ns×(1−r)≤200ns
解得:
r
≥
75
%
r\geq75\%
r≥75%
综上:TLB的命中率至少为75%,可以将页表的平均访问开销降到200ns。
18、一台计算机有4个物理页面,每个页面的装入时间、最后访问时间、R位和M位如下所示(时间以时钟节拍为单位):
页面 | 装入时间 | 最后访问时间 | R | M |
---|---|---|---|---|
0 | 126 | 279 | 0 | 0 |
1 | 230 | 260 | 1 | 0 |
2 | 120 | 272 | 1 | 1 |
3 | 160 | 280 | 1 | 1 |
a)NRU将替换哪个页面?
b)FIFO将替换哪个页面?
c)LRU将替换哪个页面?
d)第二次机会算法将替换哪个页面?
解:
a)NRU:替换页面0
b)FIFO:替换页面2
c)LRU:替换页面1
d)第二次机会算法:替换页面0
23、一台小型计算机有4个物理页面。在第一个时钟节拍时R位是0111(页面0是0,其他是1)。在随后的时钟节拍,这个值分别是1011,1010,1101,0010,1010,1100和0001。如果使用老化算法,计数器的长度为8位,请给出在最后一个时钟节拍后,这4个计数器的值。
解:
0111 | 1011 | 1010 | 1101 | 0010 | 1010 | 1100 | 0001 | |
---|---|---|---|---|---|---|---|---|
页面0 | 00000000 | 10000000 | 11000000 | 11100000 | 01110000 | 10111000 | 11011100 | 01101110 |
页面1 | 10000000 | 01000000 | 00100000 | 10010000 | 01001000 | 00100100 | 10010010 | 01001001 |
页面2 | 10000000 | 11000000 | 11100000 | 01110000 | 10111000 | 11011100 | 01101110 | 00110111 |
页面3 | 10000000 | 11000000 | 01100000 | 10110000 | 01011000 | 00101100 | 00010110 | 10001011 |
由上表:这4个计数器的值分别是:01101110、01001001、00110111、10001011。
24、在一个计算机系统上,磁盘的平均寻道时间为10ms,旋转时间为8ms,每道的容量为1MB。如果要把一个64KB的程序装入内存,这需要多长的时间?
a)页面长度为2KB时。
b)页面长度为4KB时。
c)页面长度为64KB时。
假设页面随机地分布在磁盘上。
解:
a)当页面长度为2KB时
页面总数:
64
K
B
÷
2
K
B
=
32
64KB\div2KB=32
64KB÷2KB=32
时间:
32
×
(
10
m
s
+
8
m
s
)
=
576
m
s
32\times(10ms+8ms)=576ms
32×(10ms+8ms)=576ms
b)当页面长度为4KB时
页面总数:
64
K
B
÷
4
K
B
=
16
64KB\div4KB=16
64KB÷4KB=16
时间:
16
×
(
10
m
s
+
8
m
s
)
=
288
m
s
16\times(10ms+8ms)=288ms
16×(10ms+8ms)=288ms
c)当页面长度为64KB时
页面总数:
64
K
B
÷
64
K
B
=
1
64KB\div64KB=1
64KB÷64KB=1
时间:
1
×
(
10
m
s
+
8
m
s
)
=
18
m
s
1\times(10ms+8ms)=18ms
1×(10ms+8ms)=18ms
27、一台嵌入式计算机为每个进程提供了65536个字节的地址空间,并将它们划分为4096字节的页面。有一个程序,它的代码段为32768个字节、数据段为16386个字节、栈段为15870字节。请问,这个程序能被装入地址空间吗?如果页面大小为512字节,结果又如何?注意,在一个页面中,不能同时包含两个不同段的内容。
解:
(1)当页面大小为4096字节时
页面总数:
65536
÷
4096
=
16
65536\div4096=16
65536÷4096=16
代码段所需页面数量:
32768
÷
4096
=
8
32768\div4096=8
32768÷4096=8
数据段所需页面数量:
16386
÷
4096
=
4.0005
≈
5
16386\div4096=4.0005\approx5
16386÷4096=4.0005≈5
栈段所需页面数量:
15870
÷
4096
=
3.8745
≈
4
15870\div4096=3.8745\approx4
15870÷4096=3.8745≈4
总共需要的页面数量:
8
+
5
+
4
=
17
>
16
8+5+4=17>16
8+5+4=17>16
因此,该程序不能被装入地址空间。
(2)当页面大小为512字节时
页面总数:
65536
÷
512
=
128
65536\div512=128
65536÷512=128
代码段所需页面数量:
32768
÷
512
=
64
32768\div512=64
32768÷512=64
数据段所需页面数量:
16386
÷
512
=
32.0039
≈
33
16386\div512=32.0039\approx33
16386÷512=32.0039≈33
栈段所需页面数量:
15870
÷
512
=
30.996
≈
31
15870\div512=30.996\approx31
15870÷512=30.996≈31
总共需要的页面数量:
64
+
33
+
31
=
128
=
128
64+33+31=128=128
64+33+31=128=128
因此,该程序可以被装入地址空间。
30、解释内碎片和外碎片的区别。哪一个发生在页式存储管理系统中?哪一个发生在段式管理系统中?
解:
内碎片:已经被分配出去但不会被利用的内存空间,是位于页面内部的存储块。
外碎片:未被分配出去,并且由于大小太小无法分配给申请内存空间的新进程的内存空闲区域。外碎片处于已分配的区域之间,它们的总和可以满足申请的长度要求,但是由于不连续的原因而无法满足当前申请。
内碎片发生在页式存储管理系统中,外碎片发生在段式管理系统中。