内存管理

 我来答
枝其3052
2022-07-07 · TA获得超过3075个赞
知道小有建树答主
回答量:3612
采纳率:100%
帮助的人:191万
展开全部

给用户程序分配一个连续的内存空间。

便于内存分配,将分区按照大小排队,建立一张分区说明表。 回忆之 。包含每个分区的起始地址,大小和状态。
两个问题,程序可能太大而放不进任何一个分区里,这时需要使用覆盖技术来使用内存空间。内部碎片,当程序小于固定分区大小的时候,也占用了一个完整的内存分区空间。

首次适应算法会使得在内存的低地址处出现很多小的空闲分区(因为一般在内存低地址处分配空间),每次分配查找的时候,要经过这些分区,增加了查找的开销。
邻近适应算法会在内存的末尾分配空间,内存在前面使用后释放,不会参与分配,然后分裂成小碎片,通常比首次适应算法的结果要差。
最佳适应算法以容量递增的形式分配分区,会留下很小的难以利用的内存块,因此会产生最多的外部碎片。
最坏适应算法以容量递减的形式分配分区,会把最大的连续内存划分开,会很快导致没有可用的大的内存块。

允许一个程序分散的装入到不相邻的内存分区中,需要额外的空间去存储它们分散区域的索引,非连续分配方式的存储密度小于连续存储方式。

但是实际执行的时候只需要几十个页面进入内存页框就可以运行,但是如果要将10个页面的页表都放入内存,却只用几十个页面,不到一个页面的页表,这样就极大的降低了内存利用率。并且大部分情况下,映射需要的页表项都在页表的同一个页面中。
使用层次结构的页表:将页表的10页空间也进行地址映射,建立上一级页表,存储页表的映射关系,10个页面进行映射只需要10个页表项,而上一级页表仅仅需要1页就足够了,1页可以存储1024个页表项。
所以需要一张索引表来寻找对应的表,并且不用把所有的页表都调入内存,只有需要的时候才调入。构造一个页表的页表,就是二级页表。 顶级页表最多只能由1个页面,也就是1024个页表项,对应1024个页面,占用的地址位数是10位,log2(1024)=10
所以对于一个32位的逻辑地址空间,32-10-12(页内偏移地址)=10位,所以二级页表大小也在一页之内。
所以假设第一级页表有10个页表项,则说明页表有10个页面,如果第一级页表有1024个页表项,说明页表有1024个页面,也就是32位逻辑空间最大的页表项了。然后第一级页表的页表项分别索引第二级页表,假设第一个页表项下的第二级页表,这就是说明索引了原来第一个页表页面的所有页表项。所以10个页面的页表恰好被整个二级页表索引完全。第一级页表大小在一页之内,第二级页表大小也在一页之内。
换一种说法就是第一级页表的页表项表示你想索引哪一个页面的页表,第二级页表的页表项就是表明你想索引的页面的页表的所有能索引到物理块的页表项都在这里了。

段号和段内偏移一定要显示给出,因此分段管理的地址空间是二维的。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式