专业术语
页框:内存中固定长度的块。
:外存中固定长度的块。
:外存中可变长度的块。

内存管理需求

重定位:程序从内存换出到外存后,再换回内存时,在内存空间中的位置和原先的位置极大可能不相同。此时需要保证程序的执行和之前一样,不因所在位置的不同变化。

保护:每个进程应受保护,不被其他进程干扰。保护的实现是由处理器满足的,通过在指令访问内存时判断内存访问是否非法决定。如果由 OS 实现,则将耗费大量的处理器时间。

共享:多个进程可以访问同一个特定的内存区域。

逻辑组织:OS 能够有效处理组织成模块的用户程序和数据。

物理组织:两级存储器(内存和外存)之间的数据移动由 OS 负责。

内存分区

固定分区:将内存分为固定大小的块的方式。固定分区分为两种方式,一种是等大小的分区方式,每一块分区的大小是相等的;另一种是大小不相等的分区方式,每一块的分区的大小不等。

等大小的固定分区
难点:程序的大小可能较大不能全部放入一个分区,需要放入多个分区;内存的利用率低。

内部碎片(internal fragmentation):固定分区中放入的数据块的大小小于固定分区的大小,导致分区内部空间浪费的现象。

大小不等的固定分区
将进程分配到能容纳该进程的最小分区中,使得内部碎片最小。为了实现该功能,需要为每种大小的分区设置一个队列,这个队列存放和这个分区匹配的处于非运行态的进程。

另一种方案是对于所有的大小不等的分区,设置一个队列,根据具体的进程根据其大小分配最接近其大小的能容纳它的分区。

固定分片区的缺点

  1. 分区的数量在系统初始阶段已确定。
  2. 所需空间小的进程不能有效利用分区空间。

动态分区:分区的大小和数量都是可变的。当进程需要内存空间时,给其分配一个大小与之所需大小相同的分区。

外部碎片(external fragmentation):所有分区外的内存空间变得碎片化,内存的利用率下降的现象。

压缩(compaction):OS 不时移动进程,使得进程占用的内存空间连续,空闲空间也连续。缺点是浪费处理器时间。

当空闲空间有多个位置可以满足需要内存空间的进程时,有三种分配方式:(前提是都分配大于等于进程需要的大小的分区)

  1. 最佳适配:选择和进程所需大小最接近的块。一般情况下,此方式性能最差,很快就会产生很多的小碎片。
  2. 首次适配:从内存空间起始位置扫描,直到找到一个可以容纳进程的块分配给进程。一般情况下,此方式最好和最快。
  3. 下次适配(next-fit):将进程上次分配的内存空间所在位置为起始点开始扫描,直到找到满足其所需大小的块分配给进程。一般情况下,此方式会使得内存空间尾部产生很多小碎片。

伙伴系统(buddy system):最开始,整个可分配的内存空间作为一个块,当一个进程需要大小为 \(s\) 的内存空间时,将整个内存空间等分为两块,若划分后的块大小小于 \(s\),则将整个内存空间分配给该进程;若划分后的块大小大于等于 \(s\),则再次等分该块,直到划分的块大小大于等于 \(s\) 且最接近 \(s\) 时将该块分配给该进程。当有两个大小相等的相邻空闲块时,将其合并为同一块。该方案克服了固定分区和动态分区的缺点。

逻辑地址:当前内存中和物理地址无关的访问数据的地址,访问真实内存前需要将其转换成物理地址。

相对地址:逻辑地址的特例,一般情况下指相对于进程起始点的地址。

物理地址(绝对地址):数据在内存中的真实地址。

逻辑地址到物理地址的转换需要基址寄存器和界限寄存器等寄存器。一般情况下,基址寄存器存放当前进程的起始地址,逻辑地址通过使用基址寄存器中的数据运算得出物理地址;界限寄存器存放该进程运行访问的最大地址,将上一步运算得出的物理地址与之相比较,如果超出该地址,则向 OS 发出中断信号;否则,访问该物理地址执行操作。

分页

分页技术将内存空间分为等大小的块,这个块称为页框(frame),和固定分区相比而言,页框的大小比分区的大小小很多,同时页框的大小为 \(2^k\)。同时,每个进程划分成多个和页框大小相等的页(page)。当进程需要内存空间时,将进程的多个页放入多个页框中。此时仅有最后一个页框会产生内部碎片。

OS 为每个进程维护一个页表,每项给出该进程的每页对应的页框位置。逻辑地址到物理地址的转换为:

  1. 从逻辑地址的最左侧的 n 位提取页号。
  2. 以这个页号查找页表中对应的页框号 k。
  3. 页框的起始物理位置为 \(k \times 2^m\),从逻辑地址的最右侧 m 位提取偏移量加上该起始物理地址得到真正的物理地址。

分段

分段是将程序和相关数据划分成长度不等的多个段,放入内存空间。每个进程有一个段表,记录每个段在内存空间中的起始位置。逻辑地址通过段表得到起始物理位置和本身已有的偏移量实现到物理地址的转换。

参考

[1] William Stallings, 操作系统——精髓与设计原理(8th), 2017.

 posted on 2021-08-22 11:39  x-yun  阅读(37)  评论(0编辑  收藏  举报