王道os第三章内存管理

2 篇文章 0 订阅

动态分区分配算法

在这里插入图片描述

在这里插入图片描述

动态分区和固定分区分配方式相比,是否解决了碎片问题?

没有解决,
碎片问题分为外部碎片问题和内部碎片问题
固定分区分配:将整个用户空间划分为若干固定大小的分区,在每个分区中只装入一道作业
动态分区分配:这种分配方式不会预先划分内存区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使得分区的大小正好适合进程的需要。

页面大小 = 2 ^ 页内偏移量位数(字节);

段长 = 2 ^ 段内偏移量位数

//二、用例子说话【例子出现在:《王道考研操作系统》的内存管理部分】
已知条件:逻辑地址32位、页面大小4KB、页表项大小4B,按字节编址。
分析:

  1. 在这里插入图片描述

​ 首先

32位

位的虚拟地址可表示的进程大小应该是2^32B = 4GB(暂时别去想页号P占多少位,W占多少位)

2.(根据页的定义和页面大小的定义)将进程进行分页:
3.我们已经知道了页面的数目为:2^20页。现在的迷茫点就在于页表项的问题上。 上图在页表上已经给出了几个数据:20位,12位,32位,2^20项。一一解释如下【请结合上图一个一个数据分析】: ​

2^20项:因为页表的作用是要将页面的页框一一对应起来,所以,每一个页面在页表中都应该有一个页表项:用来表示一个页号对应一页页框号(内存中的块号),故应
​ 该有2^20项。
【不应该有问题吧,就好像一个班有50个同学,每个人都应该有一个地址一样】

20位:已经很显然了,需要表示出2^20个页表项,就至少需要20位的地址。为什么只取20位而不是21位,22位呢,本人现在还没想这个问题,就暂时定为恰好取20位即可。

32位:已知条件里告诉了页表项大小为4B,那么自然就应该是32位了。

12位:32位-20位 =
12位。为什么页框号地址为12位,只能表示212个页框,要小于220个页面呢,因为并不是进程的每一个页面都要调入内存。其实32位、12位、20位这三个数据还是有一定依据的,在二级分页的时候就会发现“哦,原来刚刚好”。此处暂不讨论二级分页。

4.通过上面的分析我们得出了哪些数据: 逻辑地址32位,进程大小:4GB。

页面:大小4KB,数量:2^20页。

页表项:4B,数量:220项。所以页表就需要4B*220 =
4MB的空间存储(这就是书中说:页表项大小为4MB的由来)进一步,主存的页框大小和页面大小是相等的,也为4KB,所以将页表存在主存就需要占用4MB/4KB
= 1024页(因为页表也是存在主存中的,而主存也是按页框划分的。这的确是一种资源浪费,所以就需要建立二级页面,将其大小控制在1页之内,将二级页面存入主存即可)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值