目录
本文图片均来源于王道考研计算机操作系统
【王道计算机考研 操作系统】https://www.bilibili.com/video/BV1YE411D7nH?p=41&vd_source=70586cfbe12502eb00ef1b5feee78bc7
一.内存
逻辑地址与物理地址
逻辑地址:程序经过编译,链接后生成的指令中指明的是逻辑地址,即程序想要存储的地址
计算机内存若给程序分配的是连续的地址空间,则逻辑地址与物理地址相同,反之则不同,需要进行转换,否则该逻辑地址访问的实际上是其他内存的物理地址而造成非法访问
逻辑地址与物理地址转换的方法有:绝对装入,可重定位装入(静态重定位),动态运行时装入(动态重定位)
绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序时按照装入模块中的地址,将程序和数据装入内存(只适用于单道程序环境)
.
可重定位装入(静态重定位):将逻辑地址按实际内存地址进行重定位(如内存分配初始地址从100开始,则所有逻辑地址都加100,若不加,逻辑地址的50就属于非法访问,加了150则正确),特点是在一个作业装入内存时,必须分配其要求的全部内存空间(即所有逻辑地址加上100后的空间),没有就不允许装入
.
动态重定位装入:
被现在的操作系统所使用
允许程序在内存中发生移动是因为只需要改变寄存器中的初始位置再相加就可以改变物理地址,而静态重定位则不行,因为初始地址固定
二.内存管理
内存管理:包括内存空间的分配与回收,内存空间的扩充(实现虚拟性),地址转换(逻辑与物理),存储保护(防止越界非法访问)
存储保护
存储保护的方法:
1.设置上下限寄存器(存放进程的上下限地址)
2.利用重定位寄存器(存放物理地址的初始地址)和界地址寄存器(存放最大的逻辑地址)进行判断,当要访问的逻辑地址超过界地址寄存器则越界,不越界则将该逻辑地址与重定位寄存器的初始地址相加得到物理地址
内存空间的扩充
内存空间的扩充的方法:覆盖技术,交换技术
覆盖技术:将内存分为固定区和覆盖区,一定会用到的程序段进入固定区则到进程结束,不可能同时进行的程序段进入覆盖区,分时调用,这种技术必须由程序员声明覆盖结构,对用户不透明,已是历史
交换技术:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(由中级调度实现)
磁盘分为文件区与对换区,交换技术换出的进程放在对换区
内存的分配与回收
内存的分配与回收的方法:连续分配管理方式,非连续分配管理方式
连续分配:指为用户进程分配的必须是一个连续的内存空间,有单一连续分配,固定分区分配,动态分区分配
单一连续分配:
固定分区分配:
动态分区分配:
动态分区分配算法:首次适应算法,最佳适应算法,最坏适应算法,邻近适应算法
首次适应算法:每次都从低地址开始查找,找到第一个能满足大小的空闲分区,空闲分区以地址递增的次序排列,每次分配内存时顺序查找空闲分区链,找到大小能满足要求的第一个空闲分区
最佳适应算法
最坏适应算法
邻近适应算法
三.页的存储
页框与页面的概念
页表
基本地址变换机构
传统正常页面的逻辑地址转换为物理地址
若将页的大小用2的整数幂表示,则可以发现规律,即几次幂(页的最大容量)就有多少位黑色的二进制位(即页内偏移量),达到最大偏移量时就会移动到下一页,所以红色的二进制位就表示页号,如此,计算机就可直接根据次幂的大小来直接区分页号和页偏移量
由逻辑地址转换为物理地址
文字说明:
对页表项大小的探讨
具有快表的地址变换机构:是基本地址变换机构的改进版本
快表(联想寄存器TLB):是一种访问速度比内存快很多的高速缓存(TLB不是内存),用来存放最近访问的页表的副本,可以加速地址变换的速度。与此对应,内存中的页表叫慢表
快表工作原理
TLB即快表中只有页表项的副本,而普通的高速缓存中可能会有其他各种数据的副本
四.段页存储管理
1.两级页表
单级页表的问题:
(1)页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框
(2)没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面
为解决单级页表的问题,提出了两级页表
两级页表采用页目录表对各个页表进行管理,各个页表可离散的进行存储,解决了页表必须连续存放问题
页目录表的管理还可进行灵活的调用,只调用要用到的页表,解决整个页表常驻的问题
页目录表管理页表,所以页目录表中的页号分别对应一个页表,页目录表和页表都需要空间来存放,所以需要根据页目录表来查询页表在哪个内存块,再根据页表来查询访问对象在哪个内存块
图中4*4096=16384表示一个内存块为4KB即4096B,所以第4内存块为16384B,即起始地址
两级页表的注意点
2.段表
进程的地址空间按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名,每段从0开始编址。
分配规则为:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻
分段逻辑地址
段表
分段具体图解
由于分为了几个段,把各个段由段表管理,所以有几个段号,段表长度就有多长,但段号从0开始,段表长度从1开始,所以是S>=M
段内地址就是段内偏移量,所以段内地址就决定了该段的段长,一旦大于段表管理的段长,则表明该段是越界的
分段与分页的对比
由于段的长度会改变,所以段的逻辑地址转换到物理地址才需要进行段长与段内偏移量的比对,页是固定的,所以并不需要进行这个比对,段和页都需要一开始就进行页号(段号)与页表长度(段表长度)的比对,防止越界
3. 段页式管理
由于段和页各有优缺点,所以对二者进行结合,引入段页式管理
段页式管理的逻辑地址转换为物理地址
段页式管理外部采用段的优点,即用户可根据逻辑功能进行分段,内部采用页的优点,进行系统的固定分页,取消了段的长度不等造成的开销,由固定大小的页代替,提高内存利用率
因此,不需要进行段内偏移量的越界检查,只需要对段号,页号进行越界检查
传统存储技术的连续分配与非连续分配
连续分配内存 | 单一连续分配 | 固定分区分配 | 动态分区分配 |
非连续分配内存 | 基本分页存储管理 | 基本分段存储管理 | 段页式存储管理 |
五.虚拟存储技术
1.虚拟存储
传统存储技术的缺点
虚拟内存定义
虚拟内存的实现
请求分页存储管理的页表
经对比可知,由于虚拟内存需要进行页面的置换,所以页表相较于基本分页会更复杂,需要记录的信息会更多
请求分页的逻辑地址转换
红色框出来的部分就是相较于基本分页的逻辑地址转换多出来的内容
请求分页检索图
请求分段存储管理与请求段页式存储管理都与请求分页存储管理相同,在原有段表或段页式表的基础上加上状态位,访问字段,修改位和外存地址
也都采用页面置换算法来进行页面置换的选择
2.页面置换算法
页面置换算法:最佳置换算法(OPT),先进先出置换算法(FIFO),最近最久未使用置换算法(LRU),时钟置换算法(CLOCK),改进型的时钟置换算法
最佳置换算法
最佳置换算法必须在进程执行的过程中才能知道接下来会访问到的是哪个页面。而操作系统无法预知页面访问序列,所以这是理想化算法,无法实现
先进先出置换算法
分配的内存块越多,则表明其页的存储量越大,所以正常是缺页次数会下降
最近最久未使用算法
时钟置换算法
改进时钟置换算法
5种算法对比
3.置换策略
驻留集:指请求分页存储管理中给进程分配的物理块的集合
在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小
固定分配:操作系统为每个进程分配一组固定数目的物理块,在进程运行期间不再改变,即驻留集大小不变
可变分配:先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少,即驻留集大小可变
局部置换:发生缺页时只能选进程自己的物理块进行置换
全局置换:可以将操作系统保留的空闲物理块分配给缺页进程,也可以将别的进程持有的物理块置换到外存,再分配给缺页进程
只有局部置换固定分配,局部和全局置换可变分配,没有全局置换固定分配
三种分配策略
何时调入页面
何处调入页面
抖动:指刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出外存的这种频繁的页面调度行为
产生抖动的主要原因是进程频繁访问的页面数目高于可用的物理块数,即分配给进程的物理块不够(但分配的物理块太多则会降低系统整体的并发度,降低某些资源的利用率
工作集