内存管理功能
-
存储器功能要求:容量足够大,速度足够快,信息永久保存,多道程序并行(共享和保护)
-
实际储存体系
Cache(快,小,贵)+内存(适中)+辅存(慢,大,廉)
当内存太小不够用时,用辅存来支援内存
暂时不运行的模块换出到辅存上,必要时再换入内存
实际储存体系
-
存储管理的功能
-
地址映射
把程序中的地址(虚拟地址/虚地址/逻辑地址)变换成内存的真实地址(实地址/物理地址)的过程。地址映射也称地址重定位或地址重映射,包括固态地址映射、静态地址映射、动态地址映射。
地址映射方式 | 描述 | 特点 |
---|---|---|
固态地址映射 | 编程或编译时确定逻辑地址和物理地址映射关系 | 程序加载时必须放在指定的内存区域,容易产生地址冲突、运行失败 |
静态地址映射 | 程序装入时由操作系统完成逻辑地址到物理地址的映射 | 程序运行前确定映射关系,程序装入后除放回原位外不能移动,程序占用连续内存空间 |
动态地址映射 | 在程序执行过程中把逻辑地址转换为物理地址 | 同静态地址映射,不过访问时临时确定映射关系。程序占用的储存空间可动态变化,要求及时更新基址,程序不要求占用连续内存空间,只需系统知道每段程序放置的基址,便于多个进程共享代码,共享代码作为独立的一段存放。然而,需要硬件支持(MMU,内存管理),软件复杂 |
对静态地址映射和动态地址映射都有:逻辑地址(Virtual Addr. VA)= 装入基址 (Base Addr. BA)+物理地址(Memory Addr. MA)
- 虚拟存储,虚拟内存
虚拟内存是面向用户(编程)的虚拟封闭存储空间,32位系统中有4G的线性地址空间,封闭空间(进程空间)和物理地址分离(地址无冲突)
虚拟存储可以解决程序过大或过多时,内存不够而不能运行或多个程序并发时地址冲突而不能运行
-
内存分配
为程序运行分配足够的内存空间
需要解决问题:
放置策略,程序调入内存时将其放在哪个/哪些内存区
调入策略,何时把要运行的代码和要访问的数据调入内存
淘汰策略,内存空间不够时,迁出哪些代码或数据以腾出内存 -
存储保护
保证在内存中的多道程序只能在给定的存储区域活动并互不干扰
防止访问越界
防止访问越权
方法:界址寄存器
在CPU中设置一对上限寄存器和下限寄存器存放程序在内存中的上限地址和下限地址
程序访问内存时,硬件自动将目标地址与上下限寄存器存放的地址界限比较,判断是否越界。
物理内存管理
-
分区内存管理
-
单一区存储管理
不分区存储管理,用户区不分区,完全被一个程序占用,例如DOS。优点是简单,不需要复杂的硬件支持,适用于单用户单任务的操作系统,缺点是程序运行占用整个内存,即使小程序也如此,造成内存浪费,利用率低。 -
分区存储管理
把用户区内存划分位若干大小不等的分区,供不同程序使用
适合单用户单任务系统,可分为固定分区和动态分区
固定分区是把内存固定地划分为若干个大小不等的分区供各个程序使用,每个分区的大小和位置都固定,系统运行期间不再重新划分。每个分区大小不同,适应不同大小的程序。采用分区表记录分区的位置、大小和使用标志。程序比所在分区小,造成内存浪费,程序若比最大分区大则无法运行。
动态分区是在程序装入时创建分区,使分区的大小刚好与程序的大小相等。分区动态建立,分区的个数和大小均可变,存在内存碎片(分配和回收造成的难以被利用的小片内存空间)。 -
分区的分配
空闲区表描述内存空闲区位置和大小的数据结构。 -
分配过程:从空闲区表中的第一个区开始,寻找足够大的空闲区->找到后从分区中分割除所需空间给用户使用->把分割后剩余部分作为空闲区仍然登记在空闲区表中。分割空闲区时一般从底部分割,这样只需更改空闲区表相应位置的大小,而不需要需要再次修改分区的起始位置。
-
空闲区表的排序,放置策略
按空闲区位置递增排序,首次适应算法
按空闲区地址递减排序
按空闲区大小递增排序,最佳适应算法
按空闲区大小递减排序,最坏适应算法 -
分区的回收
回收程序释放分区,登记到空闲区表中,以便再分配 -
回收算法
释放区与现有空闲区不相邻,直接插入空闲区表
释放区与现有空闲区相邻,则与空闲区合并后更新空闲区表 -
内存覆盖技术
较小内存空间运行较大的程序
内存分区,常驻区(某段程序单独固定占用)和覆盖区(多段程序公用)
但编程复杂,需要程序员划分程序模块并确认覆盖关系。且程序执行时间变长,从外存装入内存的I/O过程耗时

-
内存交换技术
较小内存里运行多个进程,可以增加进程并发数,不考虑程序结构,但换入换出增加CPU开销,交换单位太大(整个进程),因此需要考虑减小交换传送的信息量(模块/段),外存交换空间的管理方法,程序换入时的地址重定位(放入原来地址容易发生地址冲突)。
内存不够时把进程写道磁盘(换出/Swap Out)
进程要运行时重新写回内存(换入/Swap In) -
内存碎片
过小的空闲区,难实际利用,会降低内存有效利用率
由于内存反复分配和分割,动态分区容易产生内存碎片。最佳适应法策略最容易产生碎片。
解决方法
1.规定门限值,分配空闲区时,若剩余部分小于门限值,则此空闲区不进行分割,全部分配给用户。
2.内存拼接计算,将所有空闲区集中一起构成一个大的空闲区。但容易消耗系统资源,要停下系统进行拼接(离线拼接),又要重新定义作业。
拼接的时机
释放区回收的时候,拼接频率过大,系统开销大
系统找不到足够大的空闲区时,空闲区的管理复杂
定期,空闲区的管理复杂
3.解除程序占用连续内存才能运行的限制,把程序拆分多个部分装入不同分区,充分利用碎片
- 物理内存管理的缺点
特点 | 缺点 |
---|---|
源程序直接使用内存物理地址 | 程序间容易访问冲突 |
程序必须全部装入内存才能运行 | 内存太小程序无法运行 |
程序占用连续的一片内存空间 | 产生内存碎片 |
多程序同时运行容易相互干扰 | 不安全 |
- 改善方法包括内存拼接,对接技术和覆盖技术
网友评论