目录
3.1内存管理的概念
3.1.1内存管理的基本原理和要求
(1)内存管理的功能
(1)内存空间的分配和回收:由操作系统完成主存储器空间的分配与回收。
(2)地址转换:逻辑地址转换成相应的物理地址。
(3)内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。
(4)存储保护
(2)程序装入和链接
步骤:
(1)编译:由编译程序将用户源代码编译成若干目标模块
(2)链接:由链接程序将编译后形成的一组目标模块及所需的库函数链接在一起,形成完整的装入模块。
分类:静态链接;装入时动态链接(边装入边链接);运行时动态链接(需要时链接)
(3)装入:由装入程序将装入模块装入内存运行。
分类:绝对装入;可重定位装入(静态重定位);动态运行时装入(动态重定位)
3.1.2覆盖和交换
(1)覆盖:将用户空间分成一个固定区和若干覆盖区,经常活跃的部分放在固定区,其余部分按调用关系分段。
(2)覆盖特点: 打破了必须将一个进程的全部信息装入主存后才能运行的限制,但当同时运行程序的代码量大于主存时仍不能运行,此时,内存中能够更新的地方只有覆盖区的段,不在覆盖区中的段会常驻内存。
(3)交换:把处于等待状态的程序从内存移到辅存,把内存空间腾出来,,这称为换出;把准备好竞争CPU运行的程序从辅存移到内存,这称为换入。
(4)覆盖和交换的区别:
交换技术主要在不同进程(作业)之间进行
覆盖技术主要在同一程序或进程中进行
3.1.3连续分配管理方式
(一)单一连续分配
内存分为系统区和用户区,系统区仅供操作系统使用,通常为低地址部分;内存永远只有一道程序。
优点:简单,无外部碎片,可以采用覆盖技术,不需要额外的技术支持。
缺点:只能用于单用户、单任务的操作系统, 有内部碎片,存储器的利用率极低。
(二)固定分区分配
(1)分区大小相等:缺乏灵活性
(2)分区大小不等:划分多个较小的分区、适量的中等分区、少量大分区
通常需要一张分区说明表
缺点:可能出现程序太大无法进入任何一个分区,不得不采取覆盖技术使用内存空间;主存利用率低;内部碎片多。
(三)动态分区分配
(1)首次适应算法(First Fit):空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
特点:最简单,查找开销大
(2)最佳适应算法(Best Fit):空闲分区按容量递增的方式形成分区链,找到第一个能满足要求的空闲分区。
特点:性能最差,通常会产生很多的外部碎片。
(3)最坏适应算法:空闲分区以容量递减的次序链接,找到第一个能满足要求的空闲分区,即挑选最大的分区。
(4)临近适应算法(Next Fit):由首次适应算法演变而成。不同之处是,分配内存时从上次查找结束的位置开始继续查找。
3.1.4非连续分配管理方式
(一)基本分页存储管理方式
(1)分页思想:把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。
(2)分页存储的基本概念
(1)页面和页面大小
进程中的块称为页,内存中的块称为页框
(2)地址结构
31··············12 11················0 页号P 页内偏移量W (3)页表
系统为每个进程建立一张页表,记录页面在内存中的物理块号,页表一般存放在内存中。
(3)基本地址变换机构
页号 = 逻辑地址 / 页面长度
页内偏移量 = 逻辑地址 % 页面长度
(4)两级页表:各级页表大小不能超过一个页面
一级页号 | 二级页号 | 页内偏移 |
10位 | 10位 | 12位 |
(二)基本分段存储管理方式
(1)分段:段内要求连续,段间不要求连续
分段比分页更容易实现信息的共享和保护。
(三)段页式管理方式
段页式管理 = 分段 + 分页
在一个进程中,段表只有一个,页表可以有多个。
段号S | 页号P | 页面偏移量W |
3.2虚拟内存管理
3.2.1虚拟内存的基本概念
(1)传统内存管理方式的特征
(1)一次性:作业必须一次性全部装入内存后才能开始运行。
(2)驻留性:作业被装入内存后,就一直驻留在内存中。
(2)局部性原理
(1)时间局部性:程序中的某条指令一旦执行,不久后该指令可能再次执行;某数据被访问过,不久后该数据可能再次被访问。产生时间局部性的典型原因是程序中存在着大量的循环操作。
(2)空间局部性:程序在一段时间内所访问的地址,可能集中在一定的范围之内。
(3)虚拟存储器的定义和特征
虚拟存储器定义:
基于局部性原理,在程序装入时,将程序的一部分装入内存,而将其余部分留在外存,就可启动程序执行。在程序运行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另一方面,操作系统将暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息,这样系统好像为用户提供了一个比实际大得多的存储器,称为虚拟存储器。
虚拟存储器特征:
(1)多次性:无需一次性将作业全部调入内存,分多次调入。
(2)对换性:对作业进行换入和换出。
(3)虚拟性:从逻辑上扩充内存的容量。
(4)虚拟技术的实现(离散分配的基础上进行)
三种实现方式:请求分页存储管理,请求分段存储管理,请求段页式存储管理。
3.2.2请求分页管理方式
在分页的基础上,增加了请求调页功能和页面置换功能。
(1)页表机制
页号 | 物理块号 | 状态位P | 访问字段A | 修改位M | 外存地址 |
状态位P:是否调入内存。
访问字段A:记录本页在一段时间内访问的次数。
修改位M:标识该页在调入内存后是否被修改过。
外存地址:物理块号。
(2)缺页中断(内部中断)
当要访问的页面不在内存中时,便产生一个缺页中断。
(3)地址变换机构
3.2.3页面置换算法
(1)最佳置换算法(OPT):
淘汰的是以后永不使用的页面或者是最长时间内不在访问的页面,但该算法难以实现。
(2)先进先出页面置换算法(FIFO):基于队列实现
淘汰的是最早进入内存的页面,会出现Belady异常。
Belady异常:所分配的物理块数增大而页故障数不减反增的异常现象。
(3)最近最久未使用置换算法(LRU):基于栈和寄存器实现
选择最近最长时间未访问过的页面予以淘汰。
(4)时钟置换算法(CLOCK)
简单的CLOCK算法:
某页装入内存时置使用位为1,然后循环,如果下一页面是1则置为0,遇到的第一个0则进行置换。
改进CLOCK算法:
四种情况:(访问位,修改位)
(1)最近未被访问,也未被修改(u=0,m=0)
(2)最近被访问,但未被修改(u=1,m=0)
(3)最近未被访问,但被修改(u=0,m=1)
(4)最近被访问,也被修改(u=1,m=1)
具体操作:
(1)从指针当前位置开始,扫描帧缓冲区。在这次扫描过程中,对使用位不做任何 修改。选择遇到的第一个帧(u=0,m=0)用于替换。
(2)若(1)失败,则重新扫描,查找(u=0,m=1)的帧,选择遇到的第一个这样的帧就行替换。在这个扫描过程中,对每一个跳过的帧,把它的使用位设置成0。
(3)若(2)失败,则指针回到它最初位置,且集合中所有帧的使用位均为0.重复(1),并且若有必要,重复(2),以便可以找到供替换的帧。
3.2.4页面分配策略
(1)驻留集大小
给一个进程分配的物理页框的集合就是这个进程的驻留集。
(2)三种分配策略
固定分配局部置换
可变分配全局置换
可变分配局部置换
(3)从何处调入页面:
外存分为两部分:
用于存放文件的文件区和用于存放对换页面的对换区。
对换区采用连续分配方式;
文件区采用离散分配方式。
3.2.5抖动
定义:
刚刚换出的页面又要马上换入主存,刚刚换入的页面马上又要换出主存,这种频繁的页面调度行为称为抖动或颠簸。
原因:进程的物理块不够
3.2.6工作集
定义:
指在某段时间间隔内,进程要访问的页面集合。基于局部性原理,可以用最近访问过的页面来确定工作集。