1. 内存管理概念
1.1 内存管理的基本原理和要求
- 内存管理的概念:操作对内存的划分和动态分配
- 内存管理的功能:内存空间的分配与回收、地址转换、内存空间的扩充、存储保护
- 程序装入和链接
- 将用户源程序变为可在内存中执行的程序,需要三个步骤:编译、链接、装入
- 程序链接的三种方式:静态链接、装入时动态链接、运行时动态链接
- 内存装入的三种方式:绝对装入、可重定位装入、动态运行时装入
- 逻辑地址空间与物理地址空间
- 内存保护
- 在CPU中设置一对上、下限寄存器,存放用户作业在主存中的上限和下限地址
- 采用重定位寄存器(或者基址寄存器)和界地址寄存器(又称限长寄存器)来实现。重定位寄存器含最小的物理地址值,界地址寄存器含逻辑地址的最大值
1.2 连续分配管理方式
- 连续分配方式是指为一个用户程序分配一个连续的内存空间
- 单一连续分配
- 优点:简单、无外部碎片;可以采用覆盖技术,不需要额外的技术支持
- 缺点:只能用于单用户、单任务的操作系统中;有内部碎片,存储器的利用率极低
- 固定分区分配
- 概念:将用户内存空间划分为若干固定大小的区域,每个分区只装入一道作业
- 优点:可用于多道程序设计的最简单的存储分配,无外部碎片
- 缺点:程序可能太大而放不进任何一个分区,这时用户不得不使用覆盖技术来使用内存空间;主存利用率低,有内部碎片
- 动态分区分配
- 概念:动态分区分配又称可变分区分配,是一种动态划分内存的分区方法,这种分区方法不预先划分内存,而是在进程装入内存时,根据进程的大小动态的建立分区,并使分区的大小正好适合进程的需要
- 动态分区的分配策略
- 首次适应算法(最简单、最快、最好):空闲分区以地址递增的次序链接
- 最佳适应算法:空闲分区以容量递增的方式形成分区链
- 最坏适应算法:空闲分区以容量递减的次序链接
- 邻近适应算法:由首次适应算法演变而成,不同之处是,分配内存时从上次查找结束的位置开始继续查找
- 缺点:有外部碎片(解决碎片方法:紧凑)
- 三种内存分区管理方式的比较
1.3 非连续分配管理方式
- 根据分区大小是否固定,分为【分页存储管理方式】和【分段存储管理方式】
- 在分页存储管理方式中,根据运行作业时是否要把作业的所有页面都装入内存才能运行,分为【基本分页存储管理方式】和【请求分页存储管理方式】
-
基本分页存储管理方式
- 分页的思想:把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位,每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间
(1)分页存储的几个基本概念
- 页面和页面大小:进程中的块称为页,内存中的块称为页框
- 逻辑地址结构
- 页表
(2)基本地址变换机构
- 缺点
- 每次访存操作都需要进行逻辑地址到物理地址的转换,地址转换过程必须足够快,否则访存速度会降低
- 每个进程引入页表,用于存储映射机制,页表不能太大,否则内存利用率会降低;
(3)具有快表的地址变换机构
- 概念:一个具有并行查找能力的高速缓冲存储器,又称相联存储器,用来存放当前访问的若干页表项,以加速地址变换的过程
(4)两级页表
- 建立多级页表的目的在于建立索引,以便不用浪费主存空间去存储无用的页表项,也不用盲目的顺序式查找页表项
-
基本分段存储管理方式
- 目的:分页管理是从计算机的角度考虑设计的,目的是提高内存的利用率,提升计算机的性能;分段管理则考虑了用户和程序员,满足方便编程、信息保护和共享、动态增长及链接等多方面的需要
- 分段管理基本实现方式
- 1)分段:按照用户进程中的自然段划分逻辑空间
- 2)段表
- 3)地址变换机构
- 4)段的共享与保护
- 1)分段:按照用户进程中的自然段划分逻辑空间
-
段页式管理方式
2. 虚拟内存管理
2.1 虚拟内存的基本概念
-
传统存储管理方式的特征
- 上节讨论的各种内存管理策略都是为了同时将多个进程保存在内存中,以便允许进行多道程序设计,它们都具有两个共同的特征:1)一次性;2)驻留性;
- 缺点:许多在程序运行中不用或暂时不用的程序(数据)占据了大量的内存空间,而一些需要运行的作业又无法装入运行,浪费了宝贵的内存资源
-
局部性原理
- 时间局部性
- 空间局部性
-
虚拟存储器的定义和特征
- 定义:基于局部性原理和“内存-外存”两级存储结构,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器
- 特征:1)多次性;2)对换性;3)虚拟性
-
虚拟内存技术的实现
- 虚拟内存的实现需要建立在离散分配的内存管理方式的基础上
- 虚拟内存的三种实现方式:1)请求分页存储管理;2)请求分段存储管理;3)请求段页式存储管理
- 硬件支持:1)一定容量的内存和外存;2)页表机制(段表机制);3)中断机构;4)地址变换机构
2.2 请求分页管理方式
- 请求分页系统建立在基本分页系统基础之上,增加了请求调页功能和页面置换功能
-
页表机制
-
缺页中断机构
- 在请求分页系统中,每当所要访问的页面不在内存中时,便产生一个缺页中断,请求操作系统将所缺的页调入内存
-
地址变换机构
2.3 页面置换算法(决定应该换入哪页、换出哪页)
- 最佳(OPT)置换算法
- 定义:最佳置换算法选择的被淘汰的页面是以后永不使用的页面,或是在最长时间内不再被访问的页面,以便保证获得最低的缺页率
- 特点:该算法无法实现,可用来评价其他算法
- 先进先出(FIFO)页面置换算法
- 定义:优先淘汰最早进入内存的页面,即在内存中驻留时间最久的页面
- 特点:性能较差,还会出现belady异常
- 最近最久未使用(LRU)置换算法
- 定义:选择最近最长时间未访问过的页面予以淘汰。该算法为每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时选择现有页面中页值最大的予以淘汰
- 特点:性能较好,但需要寄存器和栈的硬件支持,实现起来比较困难且开销大
- 时钟(CLOCK)置换算法
- 定义:简单的CLOCK算法给每帧关联一个附加位,称为使用位;改进型CLOCK算法在使用位的基础上再增加一个修改位;
- 特点:开销较小,性能较高
2.4 页面分配策略
- 驻留集大小
- 给一个进程分配的物理页框的集合就是这个进程的驻留集
- 驻留集大小需要考虑三点
- 基于驻留集大小考虑因素,现代操作系统通常采用三种策略
- 固定分配全局置换
- 可变分配全局置换
- 可变分配局部置换
- 调入页面的时机
- 两种调页策略:预调页策略;请求调页策略
- 预调入一般用于运行前调入,请求调页一般用于进程运行期间调入
- 从何处调入页面
- 系统拥有足够的对换区空间
- 系统缺少足够的对换区空间
- UNIX方式
2.5 抖动
- 定义:频繁的页面调度行为
- 主要原因:某个进程频繁访问的页面数高于可用的物理页帧数目
2.6 工作集
- 定义:在某段时间间隔内,进程要访问的页面集合
- 工作集W可由时间t和工作集窗口大小确定。实际应用中,为了防止抖动,工作集窗口会设置的很大,远大于W
2.7 地址翻译
需结合《计组》学习