概念
内存管理功能
* 内存的分配和回收
* 逻辑地址与物理地址变换
* 从逻辑上扩充内存容量
* 有硬件和软件配合完成存储保护
逻辑地址和物理地址
* 逻辑地址:由程序产生的与段相关的偏移地址部分,又称为相对地址
* 物理地址:CPU外部地址总线上的寻址物理内存的地址信号,对用户透明
* ps:逻辑地址导物理地址的转换由硬件自动完成,这个过程叫做地址重定位
内存保护
* 界限寄存器方法
上,下界寄存器方法:分别存放作业的结束和开始地址
基址和限长寄存器方法:分别存放作业的开始地址和作业空间长度
* 存储保护键方法
应用程序的编译,链接与装入
* 重定位的概念
* 源地址(名地址)->目标地址(逻辑地址)->可执行程序(物理地址)
* 程序链接方式
静态链接(程序运行前就链接好)
装入时动态链接
运行时动态链接(优)
* 程序装入方式
绝对装入(不适合多道程序)
可重定位装入(静态重定位)
动态运行装入(动态重定位)
补充知识
内存碎片:已经分配给作业,但是没有被利用的空间
外部空间:还未分配给作业,但是因为碎片空间太小,无法分配给申请内存的新程序
覆盖与交换
* 覆盖技术
概念:把一个大程序划分为一系列覆盖,每个覆盖是一个相对独立的程序单位;把程序执行时不需要同时装入内存的覆盖划分为一组,称为覆盖段;将覆盖段分配到同一个存储区域,该区域称为覆盖区,大小由覆盖段中最大覆盖决定
特点:打破了必须将一个进程的全部信息装入内存后才能运行的限制
* 交换技术(内存扩充技术)
概念:把暂时不用的某个程序及数据部分从内存移到外存中;将制定的程序或数据从外存读到内存中,并将控制权转给它
特点:打破了一个程序一旦进入主存便一直运行到结束的限制
注意:
1.交换时需要备份存储,通常用快速磁盘(必须足够大,且提供对内存映像的直接访问)
2.每个进程的执行时间比交换时间长,才能有效使用CPU
3.如果换出进程,必须确保该进程完全空闲
4.交换空间通常作为磁盘的一整块,且独立于文件系统
5.交换通常在有许多进程运行且内存空间紧张时开始启动,在系统负荷减轻时暂停
连续分配管理方式
单一连续分配
将内存分为两个连续存储区域,一个给操作系统一个给用户(但用户通常只占用一部分,即空间浪费了)
特点:采用静态分配,适合单道程序,可采用覆盖技术,不支持虚拟存储器实现,无法实现多道程序共享主存
优点:管理简单,需要的硬件软件少,便于用户了解和使用
缺点:产生内部碎片,只能用于单用户、单任务的操作系统,内存中只装入一道作业运行,各类资源利用率低
固定分区分配
* 将内存空间划分为若干个固定大小的分区,每个分区中可以装入一道程序;分区大小可以不等,但需事先确定,运行时不能改变;当有空闲分区时,从后备队列中选择一个合适大小的作业装入运行
* 通常采用静态重定位方式装入内存
* 若分区大小相等会缺乏灵活性,造成内存空间浪费;所以要根据程序大小分配合适的分区
* 优点:可用于多道程序系统
* 缺点:会产生内部碎片;不能实现多进程共享主存区,利用率低
动态分区分配
* 又称为可变式分区分配,在作业进入主存时根据其大小动态地建立分区;即系统中的分区大小和数目是可变的
* 优点:实现了多道程序共用主存;管理方案简单,开销小;实现存储保护的手段简单
* 缺点:主存利用不够充分,存在外部碎片;无法实现多进程共享存储器信息;无法实现主存扩充,进程地址空间受实际存储空间的限制
* 分区分配中的数据结构:空闲分区表、空闲分区链
* 分区分配算法
1.首次适应算法FF
把空闲分区按照地址递增次序用链表串成一个队列,每次从队首开始找足够大的空闲分区,划分出一块分配给请求者,剩余部分仍留在队列中
优点:优先利用内存低地址部分的空闲分区,保留高地址部分的大空闲分区,无内部碎片
缺点:留下很多外部碎片,增加了查找开销
2.下次适应算法NF
又称为循环首次适应算法,在FF基础上把队列改为循环队列,且每次从上一次找到空闲分区的下一个分区开始找
优点:空闲分区的分布更均匀,减少了查找开销
缺点:缺乏大的空闲分区
3.最佳适应算法BF
将空闲分区按照容量大小递增排列,每次把能满足作业空间需要的最小空闲分区分配给作业
优点:总能分配给作业最合适的分区,并保留大的分区
缺点:产生很多难以利用的碎片空间
4.最差适应算法WF
将空闲分区按照容量大小递减排列,每次把能满足作业空间需要且最大的空闲分区分配给作业
优点:分配给作业后剩下的空闲分区较大
缺点:缺乏大的空闲分区
* 分区的回收(若空闲分区表中有相邻分区则要合并)
* 分区分配的动态管理(分区重定位技术)
拼接技术:
将存储器中所有已分配分区移到主存一端,使分散的碎片空闲分区连成一个大的空闲区
拼接时机:分区回收时立即拼接、找不到足够大的空闲分区时拼接
动态重定位分区分配技术
非连续分配管理方式
基于分页存储管理方式
* 优点:内存利用率高、实现离散分配、便于存储访问控制、无外部碎片
* 缺点:需要硬件支持、内存访问效率下降、共享困难、有内存碎片
* 一些概念
1.用户作业的地址空间被划分成若干个大小相等的区域,称为页或页面
2.主存的存储空间也分成与页面大小相等的区域,称为块/物理块/页框
3.在调度作业运行时,必须将所有页面一次调入主存;若主存没有足够的物理块,则作业等待
4.页面的大小由机器的地址结构决定;页面小可以提高内存利用率,但会导致页表过长,降低页面换进换出的效率
5.逻辑地址:页号+页内位移
* 页表:将每个页面和每个物理块一一对应的映射关系
* 基本地址变换机构
整个地址变换过程由硬件自动完成;内含页表寄存器PTR
* 具有快表的地址变换机构(快表:具有并行查找功能的高度缓冲存储器)
* 两级页表和多级页表
* 页的共享(共享用户地址空间中的页指向相同的物理块)
*页的保护(地址越界保护、通过页表中的访问控制信息对内存信息提供保护)
基于分段存储管理方式
* 按照逻辑关系将作业分段,地址空间为二维的(分页式为一维)
* 每段:有自己的名字和长度,从0开始编址,采用连续的存储空间(段内连续,段间不连续)
* 逻辑地址结构:段号+段内位移
* 优点:方便编程、信息共享、信息保护、动态链接、无内部碎片
* 缺点:需要硬件支持、采用拼接技术、分段的最大尺寸受主存空间限制、有外部碎片
* 段表及地址变换(也是由硬件完成)
* 段的共享
多个作业的段表中相应表项指向被共享段的同一个物理副本;可共享内容——不能修改的数据和代码(纯代码、重入代码)
* 段的保护
地址越界保护:①比较段表长度与逻辑地址中的段号②比较段表项中的段长与逻辑地址中的段内位移
访问控制保护(同页式)
分页与分段的区别
* 页是信息的物理单位,段是信息的逻辑单位
* 分页是系统管理所需,为提高内存利用率;分段式为更好地满足用户需要
* 页的大小固定且由系统决定;段的长度不定,由程序大小决定
* 页的地址空间是一维的;段的地址空间是二维的
* 分页有内部碎片,无外部碎片;分段无内部碎片,有外部碎片
基本段页式存储管理方式
* 先按逻辑划分若干段,然后每段划分为若干页
* 对于空间的管理仍然以物理块为单位
虚拟内存管理技术
局部性原理:时间局部性,空间局部性
虚拟存储器:从逻辑上扩充内存容量的存储系统
虚拟内存的特征:离散性,高效性,多次性,对称性(交换性),虚拟性
实现虚拟内存的硬件支持
* ·相当数量的外存、一定容量的内存
* 中断机构、地址变换机构、相关数据结构(段表、页表)
请求分页存储管理方式
* 先将程序部分载入内存执行,当需要其他部分时再调入内存,是在分页存储管理基础上,增加请求调页功能、页面置换功能的一种虚拟存储技术
* 优点:可以离散存储程序,降低了碎片数量;提供虚拟存储器,提高了主存利用率;有利于多道程序运行
* 缺点:硬件支持、可能会产生抖动现象、程序最后一页仍存在未被利用的空间
* 页表结构:页号+物理块号+状态位+访问字段+修改位+外村地址
* 缺页中断
若要访问的页面不在内存中,便产生缺页中断,转到缺页中断处理程序去从外存调入页面(若内存空间不足,需要淘汰一个内存页面)
在指令的执行期间产生和处理缺页中断(与一般中断不一样)
一条指令可以产生多个缺页中断
页面置换算法
* 最佳置换算法OPT(理想状态)
每次都淘汰以后不再使用的页面,或最晚使用的页面
* 先进先出算法FIFO
* 最近最少使用算法LRU(优)
* 时钟置换算法(略复杂 )
* 改进型时钟算法
* 最不常用置换算法LFU
选择到当前为止访问次数最少的页面淘汰,需要每页设置计数器,淘汰时所有计数器清零
* 页面缓冲算法PBA(建立缓冲区)
工作集与页面策略
* 工作集:最近n次访问的页面的集合
* 页面分配策略:固定分配局部置换、可变分配全局置换、可变分配局部置换
* 页面调入策略:请求调页策略、预调页策略
* 从哪里调入页面:对换区、主存、UNIX方式
抖动现象与缺页率
* Belady异常:FIFO置换算法的缺页率随着分配物理块数的增加而增加(因为该算法与动态访问内存矛盾)
* 抖动现象:刚被淘汰的页面,过不久又要访问,调入不久后又要调出,如此反复导致系统大部分时间花在页面调入调出上
* 缺页率:缺页次数/调页面次数
请求分段存储管理系统
内存管理方式对比
* 三种离散分配方式对比
1.外部碎片:分页无、分段有、段页无
2.内部碎片:分页有、分段无、段页有
3.段页式缺点:多访问一次内存
* 单一连续分配、固定分区、可变分区、分页、请求分页、分段、段页式之间的比较