1、关于分配策略例题

case1:某系统的空闲分区见下表,如有下列作业:96KB,20KB,200KB,分别采用首次适应算法和最佳适应算法来处理这些作业序列,哪种算法能满足该作业序列请求?

分区号

大小

始址

1

32KB

100K

2

10KB

150K

3

5KB

200K

4

218KB

220K

5

96KB

530K

首次适应算法是选取第一个满足96KB的分区,即选取4号分区,218KB;

                  选取第一个满足 20KB的分区,即选取1号分区,32KB;

                  选取第一个满足 200KB的分区,无满足空闲分区,作业序列请求无法满足;

最佳适应算法是选取大于96KB且最接近的分区,即选取5号分区,96KB;

                  选取选取大于20KB且最接近的分区,即选取1号分区,32KB;

                  选取选取大于200KB且最接近的分区,即选取4号分区,218KB;作业序列请求满足;

分配处理之后的空闲分区表:

分区号

大小

始址

1

12KB

120K

2

10KB

150K

3

5KB

200K

4

18KB

420K

5

0KB

*

2、逻辑地址转换物理地址

case1:

用户均衡模型求解MSA代码python 用户平衡分配法计算题_用户均衡模型求解MSA代码python

【注意进制问题】

(1)因为页面是32B=2^5,则页内偏移量是5位,其余是页号

(2)101(八进制)=001 000 001(二进制),则0010为页号,转成十进制为2,在相联存储器中对应页帧号f3

用户均衡模型求解MSA代码python 用户平衡分配法计算题_缺页_02

204(八进制)=010 000 100(二进制),则0100为页号,转成十进制为4,不在相联存储器中,查内存表可知页帧号为f5,并用其更新相联存储器中的一项

576(八进制)=101 111 110(二进制),则1011为页号,转成十进制为11,超出页表范围,即产生越界中断

case 2:

用户均衡模型求解MSA代码python 用户平衡分配法计算题_缺页_03

 

答: 页面大小1KB=2^10B,页内偏移量是10位

0AC5H= 0000 10/10 1100 0101B,00010=2,逻辑页号为2,物理块号为4,物理地址是0001 00/10 1100 0101B=12C5H

1AC5H= 0001 10/10 1100 0101B,,逻辑页号为6,不在页面映射表中,会产生缺页中断,系统进行缺页中断处理

3AC5H= 0011 10/10 1100 0101B,,逻辑页号为14,该用户程序只有10页,因此系统会产生越界中断。

case 3:

设某计算机的逻辑地址空间和物理地址空间均为64KB,按字节编址。操作系统最多为一个进程分配4页物理内存,页的大小为1KB,并采用固定分配局部置换策略。在时刻260前,某进程内存分配与访问情况如下表所示:

页号

页框号

装入时间

访问时间

0

7

130

250

1

4

230

230

2

2

200

240

3

9

160

245

当该进程执行到时刻260时候,要访问逻辑地址17CAH,问题:

(1)该逻辑地址对应的页号是多少?

(H表示16机制,0~9: 0000~1001,A~F:1010~1111)

17CAH = 0001(1) 0111(7) 1100(C) 1010(A)

页面大小为1KB=2^10,则页内偏移量是10位,则前6位为页号,0001 01=5,对应页号为5

(2)采用FIFO,计算该逻辑地址对应的物理地址?

按照FIFO,先替换的页框号是7(最先装入),逻辑地址是0001 11|11 1100 1010,|前是页框号,页内偏移量不变,转成16进制为1FCAH

(3)采用LRU,计算该逻辑地址对应的物理地址?

LRU是最近最长时间未被访问,访问时间最早的是230,即页框号为4,0001 00|11 1100 1010,|前是页框号,页内偏移量不变,转成16进制为13CAH

case 4:

用户均衡模型求解MSA代码python 用户平衡分配法计算题_用户均衡模型求解MSA代码python_04

 段号0,内存始址为210,段长是500,则段内位移430(逻辑地址)是合法的,对应物理地址是210+430=640

 段号1,内存始址为2350,段长是20,则段内位移10(逻辑地址)是合法的,对应物理地址是2350+10=2360

 段号2,内存始址为100,段长是90,则段内位移500(逻辑地址)是不合法的,段内位移超过段长,为非法地址

 段号3,内存始址为1350,段长是590,则段内位移400(逻辑地址)是合法的,对应物理地址是1350+400=1750

 段号4,内存始址为1938,段长是95,则段内位移112(逻辑地址)是不合法的,段内位移超过段长,为非法地址

不存在第5段

case 5:

用户均衡模型求解MSA代码python 用户平衡分配法计算题_缺页_05

用户均衡模型求解MSA代码python 用户平衡分配法计算题_jvm_06

 答:

(1)页面大小:64KB/16=4KB

进程长度:4KB×4=16KB

(2)

页号

块号

逻辑地址

0

9

(0,0)

1

0

(1,72)

2

1

(2,1023)

3

14

(3,99)

页面大小为4KB=2^12B,页内偏移量为12位,16个物理块,需要4位标记(0000-1111)

页号为0的初始地址:1001 0000 0000 0000B,即9000H

页号为1的初始地址:0000 0000 0000 0000B,即0000H

页号为2的初始地址:0001 0000 0000 0000B,即1000H

页号为3的初始地址:1110 0000 0000 0000B,即E000H

(3)

0,0的二进制是0000,内存地址(9,0)=1001 0000 0000 0000B,即9000H

1,72的二进制是0100 1000,内存地址(0,72)=0000 0000 0100 1000B,即0048H

2,1023的二进制是0011 1111 1111,内存地址(1,1023)=0001 0011 1111 1111B,即13FFH

3,99的二进制是0110 0011,内存地址(14,99)=1110 0000 0110 0011B,即E063H

case 6 

用户均衡模型求解MSA代码python 用户平衡分配法计算题_java_07

答:页面大小64B=2^6B,页内偏移量为6位,进程长度为702/64=10余62 ,即需要11个页面

(八进制转二进制,占3位)

0105 =0 0100 0101B,页号为001,即1,页帧号F1,能在快表中查到,页内偏移是00 0101B=5,物理地址是(F1,5)

0217=0 1000 1111B,页号为010,即2,页帧号F2,能在快表中查到,页内偏移是00 1111B=15,物理地址是(F2,15)

0567=1 0111 0111B,页号为101,即5,页帧号F5,能在内存页表中查到,页内偏移是11 0111B=55,物理地址是(F5,55)

01120=0010 0101 0000B,页号为0010 01,即9,页帧号F9,能在内存页表中查到,页内偏移是11 0111B=16,物理地址是(F9,16)

02500=0101 0100 0000B,页号为0101 01,即21,超过最大页表,产生越界中断。

case 7

用户均衡模型求解MSA代码python 用户平衡分配法计算题_用户均衡模型求解MSA代码python_08

【额外】

页表长度是指一共有多少页,页表项长度是页地址占的存储空间

页表项构成:页号+物理内存中的块号

逻辑地址构成:页号+页内偏移量

物理地址构成:物理块号+页内偏移量

答:

(1)由页面大小为4KB可知,页内偏移量是12位

三级页表结构,计算页表大小,可知页表是页号到物理块号的映射,每个页表项长度是4B,页面大小是4KB,则每页需要的页表项个数4KB/4B=2^10,

一级页表

二级页表

三级页表

页内偏移量

10

10

10

12

 虚拟空间大小2^42B=4TB。

(2)

设页面大小为2^a可知,页内偏移量是a位

四级页表结构,计算页表大小,可知页表是页号到物理块号的映射,每个页表项长度是8B,页面大小是2^a,则每页需要的页表项个数2^a/8B=2^(a-3),每级索引为是a-3,4×(a-3)+a<=64,a<=15.2,a=15,

则2^15=32KB

case 8

用户均衡模型求解MSA代码python 用户平衡分配法计算题_java_09

用户均衡模型求解MSA代码python 用户平衡分配法计算题_开发语言_10

 (1)64KB=2^16B,1KB=2^10B,则页内偏移量是10位,页号是16-10=6位

17CAH=0001 01|11 1100 1010B,页号为000101B=5

(2)FIFO:首先替换页号为0(装入时间最早)的,页框号为7,

0001 1111 1100 1010B=1FCAH

CLOCK:当前位置时2,开始顺时针寻找访问位为0的页面,当访问位为1,就把该访问位清‘0’,遍历一圈,回到2,页框号也为2,则0000 1011 1100 1010B =0BCAH

3、页面置换算法

case 1:

用户均衡模型求解MSA代码python 用户平衡分配法计算题_缺页_11

 解答:(算法详解见)

最佳置换算法(OPT):

物理块数是3时:

4

3

2

1

4

3

5

4

3

2

1

5

物理块1

4

4

4

4

4

2

2

物理块2

3

3

3

3

3

1

物理块3

2

1

5

5

5

缺页

Y

Y

Y

Y

Y

Y

Y

缺页次数:7

缺页率:7/12

置换次数:缺页次数-3=4

物理块数是4时:

4

3

2

1

4

3

5

4

3

2

1

5

物理块1

4

4

4

4

4

1

物理块2

3

3

3

3

3

物理块3

2

2

2

2

物理块4

1

5

5

缺页

Y

Y

Y

Y

Y

缺页次数:6

缺页率:6/12

置换次数:缺页次数-3=3

先进先出算法(FIFO):

物理块数是3时:

4

3

2

1

4

3

5

4

3

2

1

5

物理块1

4

4

4

1

1

1

5

5

5

物理块2

3

3

3

4

4

4

2

2

物理块3

2

2

2

3

3

3

1

缺页

Y

Y

Y

Y

Y

Y

Y

Y

Y

缺页次数:9

缺页率:9/12=3/4

置换次数:缺页次数-3=6

物理块数是4时:

4

3

2

1

4

3

5

4

3

2

1

5

物理块1

4

4

4

4

5

5

5

5

1

1

物理块2

3

3

3

3

4

4

4

4

5

物理块3

2

2

2

2

3

3

3

3

物理块4

1

1

1

1

2

2

2

缺页

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

缺页次数:10

缺页率:10/12

置换次数:缺页次数-3=7

最近最久未使用算法(LRU):

物理块数是3时:

4

3

2

1

4

3

5

4

3

2

1

5

物理块1

4

4

4

1

1

1

5

2

2

2

物理块2

3

3

3

4

4

4

4

1

1

物理块3

2

2

2

3

3

3

3

5

缺页

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

缺页次数:10

缺页率:10/12

置换次数:缺页次数-3=7

物理块数是4时:

4

3

2

1

4

3

5

4

3

2

1

5

物理块1

4

4

4

4

4

4

4

5

物理块2

3

3

3

3

3

3

3

物理块3

2

2

5

5

1

1

物理块4

1

1

2

2

2

缺页

Y

Y

Y

Y

Y

Y

Y

Y

缺页次数:8

缺页率:8/12

置换次数:缺页次数-3=5

case 2:

用户均衡模型求解MSA代码python 用户平衡分配法计算题_缺页_12

 (1)FIFO:选择虚拟页号为3,装入时间最早

        LRU:选择虚拟页号为1的,最近访问时间最久,最久未被最近访问

        改进型CLOCK:优先选择访问位和修改位都为0的结果,即1

(2)LRU的缺页次数为3

当前

4

0

0

0

2

4

2

1

0

3

2

页帧1

2

2

2

2

页帧2

1

4

4

3

页帧3

0

0

0

0

页帧4

3

3

1

1

4、相关时间问题

case 1:

用户均衡模型求解MSA代码python 用户平衡分配法计算题_用户均衡模型求解MSA代码python_13

 答:

【分析】页表在内存中,实现一次存取需要访问主存两次:一次是访问页表获得物理地址,二次是根据物理地址取数据

页表在快表,实现一次存取,只需访问主存一次,快表是将一部分页表存到 CPU 内部的高速缓冲存储器 Cache。CPU 寻址时先到快表查询相应的页表项形成物理地址,然后在访问内存取数据

(1)1.5×2=3

(2)0.85×1.5【快表】+(1-0.85)×1.5×2【内存】=1.725

case 2:

用户均衡模型求解MSA代码python 用户平衡分配法计算题_缺页_14

 答:

(1)

页式存储管理:首先访问内存中的页表,查找到指令或数据所在页面对应的页表项,再根据页表项查找所在的内存页面,需要访问内存2次

段式存储管理:首先访问内存中的段表,查找到指令或数据所在页面对应的段表项,再根据段表项查找所在的内存页面,需要访问内存2次

段页式存储管理:首先访问内存中的段表,查找到指令或数据所在页面对应的段表项,再根据段表项查找所在的页表项,再根据页表项查找所在的内存页面,需要访问内存3次

具有快表,则快表命中时,只需访问1次

多级页表(N),访问内存N+1

(2)0.85×(1+0.2)+(1-0.85)×(0.2+1+1)【首先查询快表是否命中,若命中(0.85),0.2+1(访问内存),若未命中(1-0.85),0.2+1+1(访问内存中的页表项)】

(3)同理,将0.85换成0.5,0.5×(1+0.2)+(1-0.5)×(0.2+1+1)

case 3

用户均衡模型求解MSA代码python 用户平衡分配法计算题_java_15