大家好,又见面了,我是你们的朋友全栈君。
题目一:
试说明内部碎片和外部碎片之间的差别
解答:
内部碎片是指进程所分配的内存可能比进程所需要的大
外部碎片是指由于进程的大小不一导致内存被分成小片段且不连续,造成空间浪费。
题目二:
考虑一个页表在内存中的内存分页系统:
(1)如果内存访问的时间为 200ns,试问访问页表中的一个数据需要多长时间?
(2)如果增加 TLB,其中 90% 的页引用被 TLB 命中,TLB 的访问时间为 10ns,请问有效内存访问时间是多少?。
解答:
(1)由于内存访问的时间为200ns,访问数据首先需要访问页表,页表在内存中,也就是说需要200ns的时间;而从页表中找到物理地址后,再去找到数据,又需要访问一次内存,也就是需要200ns的时间,总共为200+200=400ns。
(2)首先,TLB的使用方法有两种:
①TLB与页表同时进行访问,这个时候,如果TLB命中,那么就可以终止对页表的访问,而通过TLB找到的物理地址去找数据,相当于一次TLB访问+一次内存访问=10+200=210ns;如果TLB不命中,那么继续对页表进行访问,再通过物理地址去找数据,仍旧是两次内存访问的时间,为400ns。此时,再计算命中率,可以得到公式:21090%+40010%=229ns
②TLB先于页表进行访问,这个时候,会有10ns的时间,如果TLB命中,就只需要一次内存访问的时间,为200ns;如果TLB不命中,那么需要对页表进行访问,再通过物理地址去找数据,需要400ns,此时,我们可以得到公式:10+20090%+40010%=230ns。
题目三:
考虑表1中所示段表:
请给出下列逻辑地址对应的物理地址。
(1)0,120
(2)1,120
(3)2,120
(4)3,120
(5)4,120
解答:
(1):通过段号0找到第0段,此时的基址219,这一段的长度为600,我们想要第120位的地址,在段内,由此得到对应的物理地址为219+120=339
(2):通过段号1找到第1段,此时的基址2300,这一段的长度为14,我们想要第120位的地址,不在段内,非法
(3):通过段号2找到第2段,此时的基址90,这一段的长度为100,我们想要第120位的地址,不在段内,非法
(4):通过段号3找到第3段,此时的基址1327,这一段的长度为580,我们想要第120位的地址,在段内,由此得到对应的物理地址为580+120=700
(5):通过段号4找到第4段,此时的基址1952,这一段的长度为96,我们想要第120位的地址,不在段内,非法
题目四:
试按要求设计多级分页系统:(1)逻辑地址为 48 位;(2)物理地址为 48 位;(3)页大小为 1M;(4)各级页表中的页表项均不得超过 1K 项;
请给出设计的要点,包括地址划分,各级页表项数,逻辑地址到物理地址的转换方法等。
解答:
通过页大小为1M,我们可以得到页偏移d=20
我们可以得到逻辑地址为:p=48-20=28,d=20
我们可以得到物理地址为:f=48-20=28,d=20
此时我们如果直接进行分页,我们的页表将会包含2^28项,远远超过1K
所以,我们需要进行层次化
由于我们页表项最大为1K,所以我们至少需要三级页表,如:10,10,8,效果如下:
而同样的,我们此时的逻辑地址会划分为:p1=10,p2=10,p3=8,d=20
首先,通过第二级外部页表的第p1项,找到相应的外部页表的指针(或者说首地址,这里需要根据实现方法,总之是找到外部页表)
然后,通过找到的外部页表的第p2项,找到相应的内部页表的指针(或者说首地址,这里需要根据实现方法,总之是找到内部页表)
最后,通过找到的内部页表的第p3项,找到相应的物理地址的f片段,再根据找到的f片段与页偏移d片段组合,得到我们的物理地址。
这种三级页表方法,第二级外部页表有210项,每一项对应一个外部页表;每一个外部页表有210项,每一项对应一个内部页表;每一个内部页表有2^8项,每一项对应一个帧的首地址的物理地址的f片段
转换方法如上所示。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159060.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...