1. 内存管理需求

内存管理需要满足以下五种需求:

  • 重定位(relocation): 程序换出到磁盘中后下次下次换入时要放入换出前区域很困难,需要重定位到内存的不同区域
  • 保护(Protection): 当前进程以外的其他程序不能未经授权地访问(读\写)该进程地内存单元
  • 共享(sharing): 保护机制也需要灵活性,以允许多个进程访问内存的同一部分,内存管理系统在不损害基本保护的前提下,允许对内存共享区域进行受控访问
  • 逻辑组织(Logical Origanization): 计算机系统中的内存总是被组织成线性(或一维)的地址空间,该地址空间由一系列字节或字组成
  • 物理组织(Physical Origanization): 计算机存储器至少有两级:内存和外存.二两级存储间移动信息由系统负责,即为存储管理的本质

2. 内存分区

image.png

2.1 固定分区

将内存分成若干边界固定的区域
image.png

  • 两类固定分区

image.png

  • 等大分区问题 内部碎片:任何程序,无论大小,都需要单独完整占用一个分区,当装入分区的数据块小于分区大小,限制空间也无法利用造成浪费
  • 不等大分区放置算法 | 多队列法 | 将每个进程放到能容纳它的最小分区, 每个队列负责维护该分区换出的进程,对单个分区,该方法最优,内部碎片少,但整体看,当分区有挂起进程,但此时别的分区本可以容纳,却由于非对应队列而无法执行,增加阻塞 | | :—-: | —- | | 单队列法 | 当没有可用分区后,进行交换,优先换出可容纳该进程的最小分区 |

image.png

2.2 动态分区


image.png

image.png 定义 分区的长度和数量可变,进程装入内存时,系统分配给它一块与其容量完全相等的内存空间
外部碎片 动态分区时,内存中会出现”空洞”,无法满足任何进程的空间需求,只能换出其余进程,
- 这种碎片是对内存整体来说的
- 压缩: 运用动态重定位的方法,将进程位置移动,整理碎片成一个足够大的空间

2.3 伙伴系统

运用二分法的思想,进程请求空间s,开始给进程分配大小为2u内存:

  • 如果2u-1<s≤2u,分配整个空间
  • 否则分为两部分,如果2u-2<s≤2u-1,分配给两个伙伴中的一个
  • 重复,且当遇到空间不足时还可以合并伙伴

3. 重定位

image.png

  • 重定位的硬件支持

image.png

  • 相对地址的使用 | image.png | image.png | | :—-: | :—-: | | 加载模块被加载到内存时,全部使用相对地址,只有真正执行才使用绝对地址
    假设某进程占据了内存中一段完整的相邻分区:
    程序装入的实际起点(Base值)为1024,假设x装入后Bounds为2688,此时统一相对化地址:开始执行x的语句
    jump 400,400+1024=1424 < 2688,读取400处指令
    load 1200,1200+1024=2224 < 2688,加载1200处数据 | |

4. 分页

将内存和进程都分割成同样大小的块,进程中为页(page),内存中为帧(frame),没有外部碎片,唯一的内部碎片为每个进程的最后一页

image.png image.png

页表: 内存中的帧无法连续保存同一进程的页,为了标注实际的对应关系,每一个进程维护一个页表

例题:使用16位寻址,页大小1k,已知相对地址1502,和部分页表,求逻辑地址与物理地址
image.png
解:1502化为二进制0000,0101,1101,1110,1K=210,16-10=6,则6位用于片选
page:000001,offset:0111011110=478
⭐则相对地址1502的逻辑地址:对于page1(000001)的偏移量为478(0111011110)二者产生的16位数一样,但含义不一样
page:000001->frame:000110
则物理地址:0001100111011110
逻辑地址 物理地址
image.png image.png

5. 分段

把程序和数据分为几个段(segment),段有最大长度限制,但不要求所有段长度一致

image.png

例题:使用16位寻址,段号占4位,已知逻辑地址0001,0010,1111,0000和部分段表,求逻辑地址与物理地址
image.png
解:片选4位
segment:0001,offset:0010,1111,0000
段表中Length代表该段分区长度,起始地址Base=0010,0000,0010,0000
则offset+Base=0010,0011,0001,0000即物理地址

本章动画: http://williamstallings.com/OS-Animation/Animations.html