OS_理论课作业_存储器

时间:2024-05-22 15:41:07

北航操作系统理论课作业–储存器

  • 之前学习C语言、数据结构,好多知识只是当时明白了,等到要用的时候却又不知所措,所以学习还是要认真,勤反思多总结。希望自己以后能把学到的东西都通过博客的形式总结下来,一是加深记忆,二是需要用时能够及时找到。

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

对于位图:一共:2^27 / n 个分配单元,每个分配单元需要一个二进制数位,所以位图一共需要(2^27 / n )/ 8 字节的空间

对于链表:一共划分为 128MB/64KB = 2^11个区

每个节点需要:32+16+16+1 = 65 bit空间。则一共需要 (2^11 )*65/8 字节的存储空间。

  • 综上看,用链表的方式对内存分区管理所占的内存较小,而且链表的容错性比位图要好。所以用链表的方式比较好

注(来源于网络):

OS_理论课作业_存储器

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

FirstFit:

20KB 10KB 18KB

BestFit:

12KB 10KB 9KB

WorstFit:

20KB 18KB 15KB

NextFit:

20KB 18KB 9KB

3. 解释逻辑地址、物理地址、地址映射,并举例说明。

**逻辑地址:**即应用程序角度看到的内存单元、储存单元、网络主机的地址。比如CPU访问储存单元时用的就是逻辑地址

**物理地址:**就是实地址,它在地址总线上真实存在,使数据总线可以访问主存某个特定的储存单元的内存地址。比如由逻辑地址经过地址映射之后得到的就是物理地址。

**地址映射:**就是指将逻辑地址与物理地址相转换的过程。比如MMU就可以实现地址映射。

4. 解释页式存储管理中为什么要设置页表和快表,简述页式地址转换过程。

设置页表:为了便于在内存中找到每个页面所对应的页框,分页系统为每个进程分配一张页表,进程逻辑的每一页,在页表中都有一个对应的页表项。

设置快表(TLB):应用程序的空间局部性,来提高程序的内存访问效率。

页式地址转换过程

逻辑地址分为页号和偏移两个部分,

首先根据页号找到页表中对应的页表项。

由该页表项获得页框号,

页框号与原逻辑地址的偏移拼接得到物理地址。

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

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

多级页表的优点:动态调入页表,可以减少页表所占的内存

(2) 如果使用二级页表,页面大小为16KB,每个页表项有4个字节。应该为虚拟地址中

的第一级和第二级页表域各分配多少位?

虚拟地址的页号位数:2^38 / 2^14 = 2^24

因为页面大小为16KB,所以页表项分组后每个***页表的页***(内部页表的分组)的大小不能超过16KB,
因为也是用分页的方法将内部页表分组,所以分组后的每组页表项大小也不能超过原定页的大小
又因为每个页表项为4个字节,所以每个页表的页含的页表项有:2^14 / 4 = 2^12个

所以外页表的大小:2^24 / 2^12 = 2^12;

第一级:12位

第二级:12位