内存管理

内存管理

一、内存管理的需求

​ 内存管理的需求包括:重定位、逻辑组织、保护、物理组织、共享

​ 页框:内存中固定长度的块

​ 页:固定长度的数据块,存储在磁盘中。数据页可以临时复制到内存的页框中

​ 段:变长数据块,存储在磁盘中。可以将整个段临时复制到内存的一个可用分区中(分段),或将一个段分成许多页再载入内存(分页、分段结合)

重定位

​ 重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程。加载一个进程时,代码中相对内存访问被绝对内存访问地址替代,这个绝对地址由进程被加载到的基地址确定。

​ 重定位通过基址寄存器和界限寄存器实现。基址寄存器存储进程在内存中的起始地址,界限寄存器存储终止地址。由基址寄存器的地址加上相对地址产生绝对地址,即物理地址,然后和界限寄存器比较,如果超出界限就发出一份中断。

二、内存分区

1.固定分区

​ 固定分区将内存分为一系列大小固定的块。小于等于分区大小的进程都可以装入任何可用分区中。

​ 若程序太大不能放入一个分区,必须使用覆盖技术。即先将程序的一部分放入分区,当需要的模块不在内存中时,从外存中读入并覆盖当前分区。

缺点:产生大量内部碎片。内部碎片就是一个分区没用完,所剩下的内存。

放置算法:1.把每个进程分配到能容纳它的最小分区。此时每个分区要维护一个调度队列,用于保存从该分区换出的进程

​ 这方法现在基本没人用,太捞了

2.动态分区

​ 动态分区的分区长度和数量是可变动的。当进程装入内存,系统分配一块和它大小相等的内存区。

​ 这种方式没有内部碎片,但整个内存中会出现越来越多小的空洞,它们小而分散,无法被载入,形成了外部碎片。

​ 克服外部碎片的一种方式是压缩,即重新整理内存布局,将分散的碎片整合到一起,但它很耗时。

放置算法

​ 1.最佳适配:选择与大小要求最接近的块。性能最差,因为很耗时且会很快地形成很多外部碎片

​ 2.首次适配:从头扫描内存,选择大小足够的第一个。简单,最好,最快

​ 3.下次适配:从上一次放置的位置开始扫描,选择大小足够第一个。

三、分页

​ 分页就是将内存分为大小固定相等的小块,成为页框。每个进程也被分为同样大小的小块,成为页。进程中的页可以分配到内存中的页框中。

​ 这种方法只会产生少量内部碎片。

​ 此时为了能重定位,进程维护一个页表,页表给出了该进程每页对应页框的位置。如此,逻辑地址就包含一个页号和在该页中的偏移量。

​ 操作系统维护一个页框表,来保存可供使用的空闲页框。

​ 页和页框的大小必须是2的幂。

四、分段

​ 分段技术就是把程序和其相关数据划分到几个段中。段长可变。分段的逻辑地址由段号+偏移量组成。与动态分区不同的是,一个程序的不同段可以装入不同分区中,这样消除了内部碎片,由于进程被分成多个小块,外部碎片也很少。