OS复习——存储管理习题

OS复习——存储管理习题

1. 动态内存分配需要对内存分区进行管理,一般使用位图和空闲链表两种方法。128MB的内存以n字节为单元分配,对于链表,假设内存中数据段和空闲区交替排列,长度均为64KB。并假设链表中的每个节点需要记录32位的内存地址信息、16位长度信息和16位下一节点域信息。这两种方法分别需要多少字节的存储空间?那种方法更好?

此题主要考察位图和空闲链表是如何表示内存分配情况的,题中内存中数据段和空闲区交替排列对解题似乎无影响。

​ 128MB=2 ^ 27B,n字节位单元,所以2 ^ 27/n个单元,使用位图需2 ^ 27/n位,即2 ^ 24/n字节;使用链表需128MB/64KB=2K个节点,每个节点8字节(64)位,所以16KB=2^14字节。当n小于1024时,链表较好;反之,位图更好。

2. 在一个内存系统中,按内存地址排列的空闲区大小是: 10KB、4KB、20KB、18KB、7KB、9KB、12KB和15KB。对于连续的内存请求:12KB、10KB、9KB。使用FirstFit、BestFit、WorstFit和NextFit将找出哪些空闲区?

本题主要考察可变分区基于顺序搜索的分配算法FirstFit、NextFit、BestFit、WorstFit。

FirstFit: 将找出20KB、10KB和18KB的空闲区;

BestFit: 将找出12KB、10KB和9KB的空闲区;

WorstFit: 将找出20KB、18KB和15KB的空闲区;

NextFit: 将找出20KB、18KB和9KB的空闲区。

3. 假设一个机器有38位的虚拟地址和32位的物理地址。

(1)与一级页表相比,多级页表的主要优点是什么?

(2)如果使用二级页表,页面大小为16KB,每个页表项有4个字节。应该为虚拟地址中的第一级和第二级页表域各分配多少位?

需要了解多级页表的实现机制。

(1)多级页表解决了一级页表需要占用较大的连续存储空间来存储页表的问题。

(2)页面16KB,页内偏移需要14位。由于二级页表的大小和页面大小相同为16KB,且每个页表项有4个字节,所以需要有一个二级页表中有2^12个页表项,因此二级页表域需要12位。则一级页表域需要38-14-12=12位。

4. 假设页面的访问存在一定的周期性循环,但周期之间会随机出现一些页面的访问。例如:0,1,2…,511,431,0,1,2…511,332,0,1,2,…,511等。请思考:

(1)LRU、FIFO和Clock算法的效果如何?

(2)如果有500个页框,能否设计一个优于LRU、FIFO和Clock的算法?

本题主要考察局部性原理和页面置换算法。

(1)由于要访问的页面符合局部性原理的访问,三种算法产生的缺页中断是一样的。

(2)尽量把工作集装入内存。将0-498页面映射到固定的页框,每次只置换第499个页面。

5. 一个32位的虚拟存储系统有两级页表,其逻辑地址中,第22到31位是第一级页表,12位到21位是第二级页表,页内偏移占0到11位。一个进程的地址空间为4GB,如果从0x80000000开始映射4MB大小页表空间,请问第一级页表所占4KB空间的起始地址?并说明理由。(注意B代表字节,一个32位地址占4字节)

本题主要考察页目录自映射,如何根据页表基址,得到所有页表项对应的地址。
如有疑问,可以参考https://blog.csdn.net/NickHan_cs/article/details/106550044页目录自映射部分

​ 一级页表即页目录PDE,页表起始地址PTbase是0x80000000,求页目录起始地址,第一个二级页表是第(0x80000000>>12)个页面,所以其逻辑-物理映射关系应该记录在第(0x80000000>>12)个页表项中,每个页表项是4KB,所以页目录起始地址是(0x80000000>>12)<<2+0x80000000=0x80200000(对应PDE页目录项的起始位置)。

6. 一个32位的虚拟存储系统有两级页表,其逻辑地址中,第22到31位是第一级页表(页目录)的索引,第12位到21位是第二级页表的索引,页内偏移占第0到11位。每个页表(目录)项包含20位物理页框号和12位标志位,其中最后1位为页有效位。

在这里插入图片描述

(1)请问进程整个的地址空间有多少字节?一页有多少字节?

(2)如果当前进程的页目录物理基地址、页目录和相应页表内容如图下所示,请描述访问以下虚拟地址时系统进行地址转换的过程,如可行给出最终访存获取到的数据。虚拟地址:0x0、0x00803004、0x00402001

(3)要想访问物理地址 0x326028,需要使用哪个虚拟地址?

在这里插入图片描述

本题主要考察二级页表的地址转换。

(1)进程整个的地址空间为2 ^ 32=4G字节,一页有2^12=4K字节;

(2)0x0:虚拟页目录0,查询对应0号页目录项,得到页目录项0x0,由于有效标志位为0,表示该页面无效,因此页表中不存在该虚拟地址到物理地址的映射,产生缺页中断;

0x00803004:虚拟页目录索引号为2,二级页表索引号为3,页内偏移为4,查询对应2号页目录项,得到0x5001,有效标志位为1,在物理地址0x5000查找二级页表,找到对应的3号页表项0x20001,由于有效标志位为1,对应物理页框基地址为0x20000,根据页内偏移4,查找页内偏移为4的地址(第5个字节),按字寻址得到数据0x326001;按字节寻址得到数据0x00或0x01(分别对应不同尾端)。

0x00402001:虚拟页目录索引号为1,二级页表索引号为2,页内偏移为1,查询对应1号页目录项,得到0x1001,有效标志位为1,在物理地址0x1000查找二级页表,即为页目录自身,找到对应的2号页表项0x5001,由于有效标志位为1,对应物理页框基地址为0x5000,根据页内偏移1(第二个字节),查找对应内存,得到数据0x00(按字节寻址)。

(3)要想访问物理地址0x326028,需要使用虚拟地址0x00C01028,其中虚拟页目录索引号为3,二级页表索引号为1,页内偏移为0x028。

想访问物理地址0x326028,需要使用虚拟地址0x00C01028,其中虚拟页目录索引号为3,二级页表索引号为1,页内偏移为0x028。

以上部分内容引自课件,如有侵权,请及时联系我删除!

猜你喜欢

转载自blog.csdn.net/NickHan_cs/article/details/106555628