三、内存管理-非连续内存分配

本文探讨了非连续内存分配的需求背景和连续分配的缺点,旨在提高内存利用效率和管理灵活性。介绍了非连续分配的实现,包括虚拟地址到物理地址的转换,以及软件和硬件实现方法。接着详细阐述了段式存储管理和页式存储管理,强调了它们在内存分块大小、地址空间组织、访问机制等方面的区别,并探讨了页表、快表、多级页表和反置页表等页式存储管理的关键概念。最后提到了段页式存储管理,作为结合段式和页式优点的解决方案。
摘要由CSDN通过智能技术生成

■非连续内存分配的需求背景

连续内存分配中要给一个进程分配内存,必须分配一个物理地址连续的一块内存区域,给分配带来了很多的麻烦,你比如说用户想要一块区域,而在内存当中又没有满足大小的连续区域,那分配就会失败。
基于这种现状提出了一种需求,说我们是否可以不连续,即分配的内存空间不连续。
不连续,当然是说这样我可以找到它的几率会更高,但这时候也会面临一些新的麻烦
说不连续之后,我把哪些内容,我是任意一个最小的单位,一个字节就可以算成一个区域,还是说我会受到一个限制。说这时候你分配到一个字节为一个单位太短了。
基于这种情况,我们会选择不同的尺度来说,我这个非连续内存分配,我能每一块/基本的块会有多大,基于这种基本块的大小的不同,在我们这里有两种,一种是段式,一种是页式
那段式分的块比较大,页式分的块比较小。分的块小了之后呢,我这两者之间的对应关系,即从逻辑地址到物理地址的对应关系就会变得比较复杂。因为这个缘故,所以我们这种对应关系就形成我们这里说到的页表
还有一种方式是说我是不是可以把这两种方式结合起来,这就是我们这里的段页式

首先我们来讲非连续内存分配的需求。

■连续分配的缺点

  • 分配给程序的物理内存必须连续
    在连续分配的缺点当中,要求必须连续,这一条很难达到。
  • 存在外碎片和内碎片
    即使能达到,在分配回收的过程当中,里头也会有内碎片外碎片。
  • 内存分配己的动态修改困难
    如果说一个程序在执行的过程当中,他需求的内存空间大小又有变化,这种变化就导致你很难进行动态的增加或者说减少。
  • 内存利用率较低
    这样最后的结果就是我们内存的利用效率比较低,原因在于用户应用进程的需求你没有办法满足。

■非连续分配的设计目标:提高内存利用效率和管理灵活性

针对连续分配的缺点,我们非连续内存分配这时候要达到的目标,就希望能够提高利用效率,提高它的管理的灵活性。
具体说起来有这样几条,

  • 允许一个程序的使用非连续的物理地址空间
    第一个我希望分配的空间不再是有连续性的要求,这样的话,找着所要的大小的区域的几率呢就会提高。
  • 允许共享代码与数据
    第二个是说在用的过程中,每个进程它都要执行代码,这些进程之间有很多代码是共同的,各个进程也会用到一些数据是公用的,我们希望通过共享数据和代码实现减少内存的使用量,也就是说我们在这里头两个应用进程都要用到同一个函数库,我把函数库的代码放到内存之后,如果他们两个都能访问的话,能够实现共享,这样的话我在内存区域不就变少了吗?
  • 支持动态加载和动态链接
    第三个是说我们希望能够变得灵活,这里头是不是分小了之后,我想再要的时候我再给它加一块,或者说其中某一块的大小的动态变化,有了这些之后,我们就可以很方便的能够支持动态加载和动态链接。

这个目标已经说完了,好像说起来目标嗯很好,但是这在实现的时候是会面临很多麻烦的。

■非连续内存分配的实现

■非连续分配需要解决的问题

■如何实现虚拟地址和物理地址的转换

首先第一个麻烦就是我们这里说到的虚拟地址到物理地址的转换,程序里头在实现的时候,他希望是说我给你一个地址,然后告诉你,你要告诉我它存在物理内存的什么地方。

这种转换如果它是连续的,我只需要知道它的起头在哪。好,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值