操作系统
操作系统
中断 & 异常
总览
中断的概念与与作用
中断的分类
【中断源—处理器硬件故障中断事件】
由处理器、内存储器、总线等硬件故障引起
处理原则为:保护现场,停止设备,停止CPU,向操作员报告,等待人工干预
【中断源—程序性中断事件】
处理器执行机器指令引起
除数为零、操作数溢出等算术异常:简单处理,报告用户;也可以由用户编写中断续元程序处理
非法指令、用户态使用特权指令、地址越界、非法存取等指令异常:终止进程
终止进程指令:终止进程
虚拟地址异常:调整内存后重新执行指令
【中断源—自愿性中断事件】
处理器执行陷入指令请求OS服务引起;在操作系统中,它一般又被称作系统调用
请求分配外设、请求I/O、等等
处理流程是:陷入OS,保护现场,根据功能号查入口地址,跳转具体处理程序
【中断源—I/O中断事件】
来源于外围设备报告I/O状态的中断事件
I/O完成:调整进程状态,释放等待进程
I/O出错:等到人工干预
I/O异常:等待人工干预
【中断源—外部中断事件】
由外围设备发出的信号引起的中断事件
时钟中断、间隔时钟中断:记时与时间片处理
设备报到与结束中断:调整设备表
键盘/鼠标信号中断:根据信号做出相应反映
关机/重启动中断:写回文件,停止设备与CPU
外中断的处理过程
总结
基本分段储存管理
分段
段表
地址变换
分段 VS 分页
总结
段页式管理
分段+分页
段表、页表
地址变换
图中页表存放块号为页表始址.
总结
请求分页管理方式
虚拟内存技术
100多G的大表哥是怎么运行在4G内存的电脑上的呢?虚拟内存技术.
页表机制
缺页中断机构
需要访问页号为0的页面,此时该页面不在内存中
①若此时内存中有空闲内存块,将页面放入内存的a号块,同时页表中的内存块号更改为a,状态位为1
②若此时内存中无空闲内存块,在内存中选择页号为2的页面淘汰后执行①.若页号为2的页面在内存期间被修改过,则要将其写回外存,未修改过则不用.
地址变换机构
总结
页面置换算法
总览
最佳置换算法(OPT)
需要将页面2放入内存块中, 因为该进程的内存块已满, 需要从已存在于内存块中的页面[0,1,7]中选择以后永不使用或最长时间内不再被访问的页面换出内存块.
因为页面7是最长时间内不再被访问的页面, 因此将页面7从内存块1中换出.
此时需要访问页面3, 将最长时间内不再被访问的页面1从内存块3中换出
先进先出置换算法(FIFO)
页面[3,2,1]需要依次访问内存块, 此时有空闲内存块, 队列为[3,2,1]
此时需要访问页面0, 从队列中换出最先进入的页面3, 队列更新为[2,1,0]
此时需要访问页面3, 从队列中换出最先进入内存的页面2, 队列更新为[1,0,3]
最近最久未使用置换算法(LRU)
页面[1,8,7,2]依次需要被访问, 此时有空闲内存块.
需要访问页面3, 无空闲内存块, 页面7最近最久未使用, 因此被换出内存块3
需要访问页面7, 从已在内存中的页面[1,8,3,2]中将最近最久未被使用的页面8换出内存块2
时钟置换算法(CLOCK)
已在内存中的页面[1,3,4,2,5], 访问位均为0,
循环队列为: 1(0) -> 3(0) -> 4(0) -> 2(0) -> 5(0) -> 1(0) , 1(0)表示一号页访问位为0
需要访问页面6, 因为1(0), 将1号页从内存中换出
循环队列更新为: 6(1) -> 3(0) -> 4(0) -> 2(0) -> 5(0) -> 6(1)
接下来需要访问页面[3,4], 因为页面[3,4]均已在内存中, 将访问位更新为1
循环队列更新为: 6(1) -> 3(1) -> 4(1) -> 2(0) -> 5(0) -> 6(1)
接下来需要访问页面7, 将页面[3,4]的访问位更新为3, 因为2(0), 所以将页面2换出
循环队列更新为: 6(1) -> 3(1) -> 4(1) -> 7(1) -> 5(0) -> 6(1)
改进型的时钟置换算法
只需要扫描1轮的情况
需要扫描2轮的情况
第一轮没有找到 (0,0)
第二轮, 将 (0,0) 更新为 (0,1), 找到第一个更新前是 (0,1) 的帧
需要扫描3轮的情况
第一轮没有找到 (0,0)
第二轮将所有扫描过的帧的访问位更新为0, 没有找到更新前是 (0,1) 的帧
第三轮找到第一个 (0,0) 帧
需要4轮的情况
第一轮
第二轮
第三轮
第四轮




































































