您的位置:首页 > 其它

内存管理笔记六、非固定分区的内存管理

2018-03-08 16:38 281 查看

内存管理笔记六、非固定分区的内存管理

引言:第五篇笔记,介绍了固定分区的内存管理方式。本篇笔记将介绍非固定分区的内存管理。

内存管理笔记六、非固定分区的内存管理
一、非固定分区的内存管理
1.1、产生由来—对固定分区的改进

1.2、核心思想–按需分配

1.3、加载实例

1.4、存在弊端

1.5、解决弊端的两种方式

[align=center][/align]

一、非固定分区的内存管理

1.1、产生由来—对固定分区的改进

  在第五篇笔记中,我们介绍了固定分区的缺点,包括程序大小和分区大小匹配不令人满意、无法解决程序长度大于分区问题、地址空间划分以后无法增长。这些弊端是因为分区时固定的大小,这样改进的方式即为采用非固定分区的方式来管理多道编程的内存空间。

1.2、核心思想–按需分配

  非固定分区的思想很简单:除了划分给操作系统的空间外,其余内存空间是作为一个整体存在的。当一个程序需要占用内存空间时,就在该片空间里面分出一个大小刚刚满足程序的空间;再来一个程序,则在剩下的空间里面再分出这样一块来。

  在这种模式下,一个程序可以加在到任何地方,也可以和物理内存一样大。同样对每个程序设置一个基址和极限寄存器,所有访问都必须在两个寄存器值框定的空间里,否则就算非法访问。

1.3、加载实例



[align=center]图1、非固定分区的多道编程的内存管理[/align]

  如上图1所示,一开始内存中只有操作系统,这时候A来了,从最底下分出一块与进程A大小一样的内存空间;然后进程B来了,我们在进程A上面的大片空间中分出一块与进程B大小一样的内存空间,依次可以有进程C、D、E、F等等。

1.4、存在弊端

  非固定分区存在一个很大的弊端,每个程序顺序累积,如果程序B在运行过程中,不断产生新的数据,从而导致数据所需空间的增长,不断进行函数嵌套调用又会造成所需栈的增长。需要更多空间,怎么办?另外产生外部碎片的弊端会在写分页笔记时介绍。

1.5、解决弊端的两种方式

1)、留有一片闲置区域供程序增长用-且栈和数据反向(利用了公共空间)



[align=center]图2、栈和数据反向增长[/align]

2)、swap交换机制:将进程从内存倒到磁盘上,待有足够内存空间再将其从磁盘上加载到内存中的过程,这种交换的主要目的是为程序寻找一块更大的空间,防止其因空间不够而崩溃。但是其进程切换成本较高,一般不这样做。



[align=center]图3、进程A因空间增长而交换到更大的空间中去[/align]

兴趣问题:如果一个程序超过物理内存,还能运行吗?

  能,当前想到的办法就是“重叠(overlay)”,即将程序按照功能分成一段一段功能相对完整的单元。一个单元执行完后,再执行下一个单元,就不会再执行前面的单元。可将后面单元覆盖到前面单元上,即可执行一个比物理内存还大的程序。但是这相当于将内存管理的部分功能交给了用户,从根本上说,不能算是操作系统的解决方案,后面会介绍分页分段的解决机制。

参考资料:

《操作系统之哲学原理》 邹恒明著

纠错与建议

邮箱:db_hebut@163.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: