导图社区 (最新)408操作系统---第3章内存管理
关于(最新)408操作系统---第3章内存管理,内存空间的扩充包含覆盖技术、交换技术、虚拟存储技术、区别,一起来看。
编辑于2023-08-29 21:44:30内存管理
程序
用户源程序转为可在内存中执行的程序
编译
用户源代码编译成目标模块
链接
目标模块与库函数链接在一起,形成装入模块
装入
装入模块装入内存
子主题
内存保护(存储保护)
确保每个进程都有一个单独的内存空间,保护操作系统不受用户进程影响
方法一:在CPU中设置一对上、下限寄存器,判断有无越界
方法二:重定位寄存器(最小)和界地址寄存器(检查逻辑地址是否超过长度)
逻辑地址与界地址寄存器值比较,未发生越界,逻辑地址+重定位寄存器的值=物理地址
地址转换
操作系统负责实现逻辑地址到物理地址的转换
三种方式
绝对装入
只适用单道程序运行环境
编译时,产生绝对地址
可重定位装入(静态重定位)
地址变换在装入时一次性完成
动态运行装入(动态重定位)
程序真正要运行时才进行地址转换
需要重定位寄存器支持
程序链接
子主题
类
静态链接
运行前链接好,之后不再分开
装入时动态链接
装入内存时,边装入边链接
运行时,动态链接
在程序执行中,需要该模块时,才进行链接
内存空间的扩充
覆盖技术
解决存储空间放不下用户进程的现象
程序分为多个段,常用的段常驻内存;不常用的段在需要时调入内存。
一个固定区
经常活跃的部分
调入后不再调出
若干覆盖区
使用时调入
使用完调出
缺点:对用户不透明,增加编程的负担
交换技术
内存紧张时,系统将某些进程暂时换出外存,其他具备运行条件的进程换入内存
具有对换功能的操作系统(什么位置保存被换出的进程)
磁盘空间分为
文件区:离散分配方式
对换区:连续分配方式
什么时候换出进程
许多进程运行且内存吃紧的时候
当换出过程中,缺页率明显下降,暂停换出
应该换出哪些进程
优先换出阻塞进程
优先换出优先级比较低的进程
PCB常驻内存
虚拟存储技术
区别
覆盖是在同一进程或程序中的
交换是在不同进程(或作用)间的
内存空间的分配与回收
连续分配管理方式
单一连续分配
内存分为系统区和用户区
同一时刻只能有一道用户程序
内部碎片:给进程分配的空间没有用到(存储利用率低)
外部碎片:内存中某些空闲分区由于太小而难以用上
可以使用紧凑技术,解决外部碎片
固定分区分配
把用户空间划分为若干个固定大小的分区
分区大小相等
缺乏灵活性
分区大小不等
会产生内部碎片,不产生外部碎片
分区说明表
大小
起始地址
状态
动态分区分配
不会预先划分内存分区,而是在进程装入内存时,根据进程大小,动态分配合适的内存分区
会产生外部碎片,无内部碎片
使用什么样的数据结构记录内存的使用情况?
空闲分区表
分区号
分区大小
起始地址
状态
空闲分区链
当很多空闲分区都能满足要求时,应该选择哪个分区?
动态分区分配算法
首次适应算法
从低地址开始查找,找到第一个能满足大小的空闲分区
实现:分区按照地址递增排列
缺点:低地址存在很多小碎片空闲分区
优点:保存大空闲分区
最佳适应算法
优先使用更小的空闲区
实现:要求空闲分区按照容量大小排列(从小到大)
缺陷:会留下越来越小的外部碎片
最坏适应算法
优先使用最大的连续空闲分区
实现:要求空闲分区按照容量递减排列
缺点:大分区不断被变小,难以为后来出现的大进程没有内存分区可用
邻近适应算法
每次都从上次查找结束的位置开始检索
实现:空闲分区按地址递增排列,循环链表
优点:不需要从头开始检索低地址的碎片
如何进行分区的分配与回收?
分配时
对空闲分区表和空闲分区链处理
回收时
分区合并
修改空闲分区表、空闲分区链
非连续的分配管理方式
基本分页存储管理
分页存储
将内存分成大小相等的若干个分区
每个分区就是一个“页框”(或页帧=内存块=物理块=物理页面)
进程的逻辑地址空间被划分为与页框大小相等的若干块
页面不为用户感知
操作系统也页框为单位为各个进程分配存储空间
页面大小为什么是2的整数幂
计算机内部地址是二进制表示的,页面刚好是2的整数幂的话 计算机硬件能很快地把逻辑地址拆分成(页号+页内偏移量)
页表
页号(隐含,不占用存储空间,按顺序)
块号(占用存储空间)
进程的页面在内存中是离散的,但是页面内部是连续存放的
逻辑地址结构
页号+页内地址(页内偏移量)
实现地址转换
1.计算出逻辑地址对应的(页号,页内偏移量)
2.找到对应页面在内存中的存放位置(查页表)
3.物理地址=页面地址(块号)+页内偏移量
基本地址变换机构
作用:将逻辑地址转换为内存中的物理地址
页表寄存器
页表始址
页表长度
地址变换过程
1.逻辑地址→页号、页内偏移量
2.页号合法性(越界中断)
3.页号、页表起始地址→页表对应项(第一次访存)
4.内存块号+页内偏移量→物理地址
5.访问物理内存对应的内存单元(第二次访问内存)
子主题
具有快表的地址变换机构(TLB)
因为页表需要两次访问内存
第一次:访问页表,转换物理地址
第二次:根据物理地址,访问内存取指令或数据
所以引入快表
快表(联想寄存器)
先查快表,若没有,则查慢表(页表)
快表命中,一次访存
快表不命中,两次访存
快表慢表同时查询
先快表,再慢表
快表慢表同时查询
局部性原理
空间局部性原理
访问了某个存储单元,不久后其附近的存储单元也可能被访问
时间局部性原理
如果执行了某条指令,那么不久后这条指令很可能再次执行
两级页表
结构
一级页表(页目录表、外存页表)
逻辑地址前若干位
二级页表
逻辑地址中若干位
页内偏移量
原因
一级页表过长,超过页面大小,在内存中的存储麻烦
页表必须连续存放,当页表很大时,需要占用多个连续的页框
没有必要让整个页表停驻内存空间
各级页表不能超过页面大小
需要多次访存
基本分段存储管理
分段
每个段的长度是不同的
将地址空间按照自身的逻辑关系划分为若干段,每段从0开始编码
逻辑地址结构
段号
段内地址
段表
段号
可以隐含,不占存储空间
段长
基址
特点
每个段在内存中占用连续存储空间
各段可不相邻
各段从0开始编址
地址变换过程
段长与段内地址比较
对比
地址空间
分页的地址空间是一维的
一个记忆符代表一个地址
分段的地址空间是二维的
既要给出段名
又要给出段内地址
信息的共享和保护
分段更容易实现信息的保护
对不同段有不同的访问权限时,同一页有多个段的内容
可重入代码(纯代码)
能共享
可修改代码
不能共享
代码中的变量,多进程同时访问,可能会造成数据不一致
特点
页是信息的物理单位,对用户不可见
段是信息的逻辑单位,对用户可见
访存
均两次(不使用快表时)
段页式存储管理
段式和页式优缺点
页式
优点:内存空间利用率高,不会产生外部碎片,只有少量内部碎片
缺点:不方便按照逻辑模块实现信息的保护和共享
段式
优点:方便实现逻辑模块的信息保护和共享
缺点:会产生外部碎片
段页式
先分段,后分页
逻辑地址结构
段号
页号
页内地址
一个段表
段号
隐含
页表长度:有几个页
页表存放块:页表始址
多个页表
页号
内存块号
地址转换
三次访存
段表
页表
目标内存单元
虚拟内存管理
内存空间扩充
覆盖技术
交换技术
虚拟存储技术
传统存储管理
连续分配
单一连续分配
固定分区分配
动态分区分配
非连续分配
基本分页存储管理
基本分段存储管理
基本段式存储管理
特征
一次性
作业必须一次性全部装入内存
多道程序并发度下降
驻留性
内存驻留了大量用不到的程序,占据内存
虚拟存储
特征
多次性
无需将作业一次性全部调入内存,允许被分成多次调入内存
对换性
不需要常驻,将暂时不用的数据和程序调到外存的对换区
虚拟性
从逻辑上扩充了内存的容量
采用技术
高速缓冲技术
局部性原理
将程序很快会用到的部分装入内存,暂时用不到的部分留在外存
特点
最大容量
有计算机的地址结构决定
CPU的寻址范围
虚拟内存实现
请求分页存储管理
请求分段存储管理
请求段页式存储管理
请求分页存储管理
页表
内存块号
状态位
是否被调入
访问字段
最近访问过几次或记录上次访问时间
修改位
调入内存后是否被修改过
外存地址
外存中存放位置
与基本分页存储管理区别
在程序执行过程中,所访问的信息不在内存时,由操作系统负责将信息从外存调入内存
缺页中断机构
当访问的页面不在内存中时,便产生了缺页中断;并请求操作系统将所缺的页调入内存
缺页中断与页面置换
内存未满,不需要
内存满,需要置换
属于内中断“故障”
何时调入页面
预调入策略
主要使用在进程首次调入
根据局部性原理,调入相邻的页面可能会更高效,但若调入页面没有被访问又是低效的
请求调入策略
在运行期间发现缺页时将所缺页面调入
页面置换算法
选择把那个页面换出内存
最佳置换算法(OPT)
简介:每次选择淘汰的页面是以后永不使用,或长时间不再被访问的页面
操作系统无法预测,实际无法实现
先进先出页面置换算法(FIFO)
每次淘汰的是最早进入内存的页面
Belady异常:为进程分配物理块增多,缺页次数不减反增
最近最久未使用置换算法(LRU)
每次淘汰最近最久没有使用的页面
算法性能最好,开销大,实现困难
需要专门的硬件支持
时钟置换算法(CLOCK算法)(NRU)
为每个页面设置一个访问位,将内存中的页面通过指针链接成循环队列
被访问,访问位为1。当选择页面淘汰时,寻找访问位为0的页面,若是1,将1置为0,继续检查下一个页面
找访问位为0,若检查到访问位为1的页面,将访问位修改为0
继续第二轮访问
算法可能进行两轮扫描
改进型时钟算法
在时钟置换算法的基础上,优先淘汰没有被修改过的页面
需要两个标志位:(访问位,修改位)
第一轮扫描,找标志位为(0,0),不修改任何标志位
第二轮扫描,找标志位为(0,1),将扫描过的访问位修改为0
第三轮扫描,(0,0)
第四轮扫描,(0,1)
子主题
内存分配策略
固定分配局部置换
可变分配全局置换
缺页后,可以运行将别的进程的物理块置换出去。
可变分配局部置换
缺页后,只允许置换自己的物理块;系统会根据缺页率,增加此进程的物理块数
固定分配策略的调入算法
平均分配算法
按比例分配算法
优先权分配算法
调入时机(什么时候调入)
预调页策略
根据局部性原理,一次调入若干相邻的页
请求调页策略
进程运行时,发现没有,再调入
从什么地方调入页面
分页系统中,外存分为两部分
文件区
读写速度慢
对换区
读写速度快
系统拥有足够的对换区
可以全部都从对换区调入页面,速度快
系统缺少足够的对换区空间
不会被修改的文件都直接从文件区调入
可能被修改的页面,换出时,调到对换区
UNIX方式
未运行过的页面从文件区调入
曾经运行过,又被换出的页面,放入对换区
抖动(颠簸)
刚刚换出的页面,马上又要换入内存
产生原因
系统同时运行的内存过多,分配给每个进程的物理块太少
驻留集
因为操作系统决定给进程分配几个页框
定义:给一个进程分配的物理页框的集合
驻留集太小,缺页频繁;驻留集太大,多道程序的并发度下降
固定分配
驻留集大小不变
可变分配
驻留集大小可变
局部置换
发生缺页时,只选择进程自己的页面进行置换
全局置换
发生缺页时,也可将其他空闲或其他进程的物理块分配给缺页进程
工作集
在某个时间间隔内,进程要访问的页面集合
由时间t和工作窗口大小确定
内存映射文件
传统文件访问方式
将需要读取或修改的物理块从磁盘(外存)读入内存
再对内存中的物理块修改或读,再写回外存(磁盘)
内存映射
操作系统自动读入
将文件映射到内存的虚拟地址,以访问内存的方式访问文件
进程关闭时,修改的数据直接写回磁盘
优点
方便多个程序员访问文件数据
方便多个进程共享同一个文件