离散分配内存与虚拟内存技术的实现,有什么必然关系?

  • 连续分配
  • 离散分配
    为什么连续分配不利于虚拟内存的实现?

王道书上这么说:

虚拟内存技术允许将一个作业分多次调入内存。采用连续分配方式时,会使相当一部分内存空间都处于暂时或“永久”的空闲状态,造成内存资源的严重浪费,而且也无法从逻辑上扩大内存容量。因此,虚拟内存技术的实现需要建立在离散分配的内存管理方式的基础上。

为什么采用连续分配,会有“使相当一部分内存空间都处于暂时或“永久”的空闲状态”的问题?

阅读 3.1k
2 个回答

想象学校立了一块公告板,大家可以把自己的一些需求写到上面,就像报纸版面一样。

慢慢的,你会发现两个问题:
1,你想写一个200字的布告,却发现公告板上有很多小豆腐块,但每一个都不够你写的。随着不断使用,物理内存必然会碎片化离散化。
2,不论是有意还是无意,你把自己的内容写到了别人的内容上面。如果是个普通学生,你可能被骂一顿,如果是校长的,就等着开除吧。甚至有学生冒充篡改校长发布的信息。

有两种办法:一是校长派教导主任每天去把公告板擦干净,把上面内容再检查抄写一遍。也就是定期对内存进行碎片整理,但费时费力,还不解决第二个问题。

教导主任不干了,这不累死爷吗?他把辅导员喊来,告诉她们,以后每个学生要发公告不能直接写板子上,必须从她们这里领一个固定1000字的方格纸,辅导员负责把上面的内容写到板子上。因为板子上的内容都被打乱了,学生们也只能通过辅导员才能读取了。

后来辅导员又发现,有的学生写得罗里吧嗦,有的学生媳妇没娶上呢就把生孩子写上去了。她们灵机一动,就禁止学生去看公告板,自己只把关键的当前要做的事情写上去,省不少功夫。反正学生来问,我有原稿不怕露馅。

从此,学校里的公告板改名叫物理公告板,辅导员成了虚拟公告板。绝大部分学生再也烦不到校长了,极少部分不安分的学生只能躲在阴暗的角落,继续他们绕过辅导员冒充校长的伟业。

根据二八原则,程序80%的时间在运行20%的代码,因此推论在程序运行期间,大部分时间只需要使用一小部分内存。如果使用连续分配,则需要在程序运行一开始运行时候就分配好完整的内存空间,此时势必造成浪费,因此采用离散分配方式,一开始只分配一小块内存,等运行到某一时刻真的需要额外内存了再分配。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进