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:
解答:相联存储器(TLB)就是快表(具有并行查找能力的高速缓冲存储器),用来存放当前访问的若干页表项,加速地址变换过程。而内存中的页表称为慢表(地址转换过程是第一次访问页表,确定所存取的数据或指令的物理地址,第二次是根据地址存取数据或指令)【注意进制问题】
(1)因为页面是32B=2^5,则页内偏移量是5位,其余是页号
(2)101(八进制)=001 000 001(二进制),则0010为页号,转成十进制为2,在相联存储器中对应页帧号f3
204(八进制)=010 000 100(二进制),则0100为页号,转成十进制为4,不在相联存储器中,查内存表可知页帧号为f5,并用其更新相联存储器中的一项
576(八进制)=101 111 110(二进制),则1011为页号,转成十进制为11,超出页表范围,即产生越界中断
case 2:
答: 页面大小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:
段号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:
答:
(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
答:页面大小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
【额外】
页表长度是指一共有多少页,页表项长度是页地址占的存储空间
页表项构成:页号+物理内存中的块号
逻辑地址构成:页号+页内偏移量
物理地址构成:物理块号+页内偏移量
答:
(1)由页面大小为4KB可知,页内偏移量是12位
三级页表结构,计算页表大小,可知页表是页号到物理块号的映射,每个页表项长度是4B,页面大小是4KB,则每页需要的页表项个数4KB/4B=2^10,
一级页表 | 二级页表 | 三级页表 | 页内偏移量 |
10 | 10 | 10 | 12 |
虚拟空间大小2^42B=4TB。
页面大小和页表项之间有必然的联系么?【转】_weixin_34408717的博客-CSDN博客
(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
(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:
解答:(算法详解见)
最佳置换算法(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:
(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:
答:
【分析】页表在内存中,实现一次存取需要访问主存两次:一次是访问页表获得物理地址,二次是根据物理地址取数据
页表在快表,实现一次存取,只需访问主存一次,快表是将一部分页表存到 CPU 内部的高速缓冲存储器 Cache。CPU 寻址时先到快表查询相应的页表项形成物理地址,然后在访问内存取数据
(1)1.5×2=3
(2)0.85×1.5【快表】+(1-0.85)×1.5×2【内存】=1.725
case 2:
答:
(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