曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5629|回复: 0
打印 上一主题 下一主题

内存分割

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-4-9 01:43:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
计算机程序最终要装载到内存中才能运行。这就设计到多个进程如何在内存中合理占用空间的问题,也就是内存分割的问题。

操作系统发展史上,有过多种内存分割的提法,下面主要介绍四种:

(1) 固定分割
固定分割( Fixed Partition ),就是将内存固定划分为若干大小相同或不同的区域。当程序装入时,选择与其大小最为相近的一个区域将其载入即可。
这种方式的缺点是引入了内部碎片( Internal Fragmentation ),即每个程序需要占用一整块区域,而它的大小很难与区域大小完全相符,区域大小多出来的部分也无法被其他程序使用,从而造成内存资源的浪费。

(2) 动态分割
为了克服固定分割机制的缺陷,提出了动态分割( Dynamic Partitioning )机制。其中心思想就是:内存分割出来的区域大小有一定的随意性,它可以在内存空间允许的情况下根据装入程序的大小来在内存中分割出相同大小的一片区域并装入该程序,这样就避免了每个分区内部产生碎片的可能。
但是,当内存中没有分配的区域不足以装载任何程序的时候就产生了内存资源的浪费,这样的浪费叫做外部碎片( External Fragmentation )。

(3) 分页
固定分割会导致内部碎片,而动态分割会导致外部碎片,这都可能造成内存资源的巨大浪费。这时候我们想到,能否把内存平均分割成大小相对较小的一些区域,这些区域通常被叫作页帧( Page Frame ),然后把它们分配给需要装载的程序。

这里又产生了另外一个问题:
当页帧较小时,可能任何程序都要比它大很多,产生无法装载的问题。

这时想到:是否可以将程序本身也分割成与内存分区大小一致的程序段,这样就可以装入内存运行了。这就是分页机制的基本思想。
这样的内存分割方法不会产生外部碎片( 所有的内存空间都得到分配 ),而内部碎片也只可能在程序的最后一个程序段装入内存分区时产生,这些碎片的大小一般是不相同的。由于内存分区相对较小,这样的话,内存空间的利用率仍然可以很高。

在分页( Paging ) 机制中,程序在载入内存时需要实现一个程序所在的虚拟内存空间地址( 逻辑地址 )到物理内存空间地址( 物理地址 )的转换,这个转换通常由一个或若干个查表动作来完成,这个表即所谓的分页表

(4) 分段
在分页机制中,程序本身也被顺序分割成与内存分区大小相同的程序段。然而程序的这种分割方法缺乏直观性,分段( Segmentation )机制的引入克服了这个缺点。
在分段机制中,程序及其数据被分割成若干有意义的段,如通常所说的程序段、数据段等,而这些段是大小不一的。

从这点来看,分段机制和动态分割机制类似。所不同的是,在分段机制中,每个程序可以占有若干个不同的内存分区,而这些分区可以是不连续的。不过,分段机制和动态分割机制一样存在外部碎片问题,但不存在像固定分割机制和分页机制那样的内部碎片问题。

在分段机制中,程序在载入内存时同样需要实现一个程序所在的虚拟内存空间地址( 逻辑地址 )到屋里内存空间地址( 物理地址 )的转换,这个转换通常是由一个查表动作完成的,而这个表即所谓的分段表。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-6-2 12:32 , Processed in 0.063538 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表