操作系统运行环境之CPU状态与中断/异常处理概念与原理机制

文章中图片来源于网络,侵权告删。
源头:

1.中断:来源于外设(键盘、鼠标、网卡、声卡、显卡等),外部事件
(异步:应用程序不知道什么时候产生)
(持续,但是对用户程序是透明的)
如时钟中断控制CPU上进程的切换,键盘中断、磁盘中断等。

2.异常:应用程序意想不到的行为,不是应用程序主动想产生的(除0操作、访问越界等),内部事件
(同步:执行到特定的指令一定会产生,如除0指令)
(将异常的程序杀死、或者重新执行异常程序,说不定下一次就不会触发异常)

3.系统调用:应用程序请求操作提高服务,应用程序主动要求产生的(对硬件资源的访问)
(同步或者异步:执行到特定的指令一定会产生,如Int 0x80指令)
(发出系统调用请求是同步的,返回时可能是异步,正常情况是同步的)
(用户等待服务完成,继续向下执行)

返回同步的情况:用户申请读内存,内核去读,然后将数据返回给客户,这个过程中用户一直阻塞等待
返回异步的情况:用户申请读内存,内核去读,然后将数据返回给客户,不同的是客户在这个过程中
	      	 去做其他事情了,内核完成操作后,会给用户发送异步的消息,告诉用户数据读取完毕

一、处理器的状态基础(也叫模式)
1.CPU = 控制器 + 运算器 + 寄存器 + 高速cache+MMU(存储管理单元)
2.寄存器的分类:
用户可见寄存器:由高级语言编译器优化算法分配使用,为减少访问内存的次数
控制和状态寄存器:用于控制处理器的操作,通常由操作系统代码使用
(这是我们关注的重点)

二、控制和状态寄存器:
作用:
用于控制处理器的操作,如PC控制CPU执行哪条指令;
在某个特权级别下可以访问、修改
常见的控制和状态寄存器:

程序计数器:PC 记录将要执行的指令的地址
指令寄存器:IR 记录最近取除的指令
程序状态字:PSW 记录处理器的运行状态如条件码、模式、控制位等信息

在这里插入图片描述
三、操作系统需要的CPU状态(MODE)
1.内核态:运行内核代码
2.用户态:运行用户代码

在X86系统中,分为实模式和保护模式
其中实模式的中断处理和普通的过程调用没什么区别

指令系统划分:
特权指令:只能由操作系统使用
非特权指令:操作系统和用户都可以使用

特权指令:启动IO、内存清零、修改程序状态字、设置时钟、允许/禁止中断、停机等
非特权指令:控制转移、算术运算等

X86系统支持4个处理器特权级别:
在这里插入图片描述
R0:特权最高,可以直接访问所有资源;
R3:特权最低,必须通过系统调用陷入内核,才能访问资源,也就是通过操作系统访问。
linux实际上只选择了0和3两个特权级别。
用户态->内核态途径:唯一的途径是中断/异常/陷入机制
内核态->用户态途径:修改设置程序的状态字PSW即可

四、特殊的指令—访管指令(陷入指令):
内核态有时也被称为管理态,所以访问或者陷入内核 又被称为访管。

用户态->内核态途径:唯一的途径是中断/异常/陷入机制

陷入指令 == 访管指令
提供给用户程序的接口,用于切换到内核态,用于调用操作系统的功能
常见的有:int  trap  syscall  sysenter/sysexit

五、中断和异常机制概念:

有句话这样说: ”操作系统是由中断驱动的,事件驱动的“
主要作用:
1.及时处理设备发来的请求
2.捕获用户程序提出的请求
3.防止用户程序有意或者无意的破坏活动

中断/异常的概念:
1.定义:CPU对系统发生的某个事件做出的一种反应。
2.发生中断/异常CPU做什么反应:

1.暂停正在执行的程序
2.保留现场后自动转去执行相应事件的处理程序
(这里”自动“指的是 硬件去处理该异常或者中断)
3.处理完成后返回断点,继续执行被打断的程序

3.中断和异常的引入:
中断的引入:为了支持CPU和设备之间的并行操作

设备通过中断 的 方式 向CPU”报告“自己的事情做完了,让CPU决定处理之后的事情

异常的引入:表示CPU执行指令时本身出现的问题

如算术溢出、除零、地址越界、执行了陷入指令,此时CPU暂停当前工作,
转到错误处理程序或者执行系统调用

早期,中断和异常不作区分,也就是说,大概上可以混为一谈。

4.事件分类(中断+异常):
中断:也叫外中断

一般有I/O中断、时钟中断(定时器、时间片)、硬件故障(笔记本没电)

异常:也叫内中断

常见的有系统调用、页故障(如缺页异常)、保护性异常(越界访问)、断点指令(单步调试)
程序性异常(算术除零、算术溢出等等)

5.总结中断和事件的区别:
中断:都是一些CPU外部的事件引起的,是程序所不期望发生的
异常:由CPU正在执行的指令引发
在这里插入图片描述
异常包括:陷入+ 故障 + 中止

六、中断和异常机制原理:硬件与软件相互配合

1.硬件做什么:捕获中断源发出的中断/异常请求,然后将控制权交给处理器去执行特定的处理程序;(捕获响应)
2.软件做什么:执行处理程序。(处理)
3.中断寄存器:
在这里插入图片描述
4.中断向量表:
是一个内存单元,存放中断处理程序的入口地址和程序运行时所需处理机的状态字。
事先编写好这些中断处理程序,然后将入口地址存放在中断向量表中,并进行编号。
在这里插入图片描述
Linux的中断向量表:
在这里插入图片描述

前面提到了,X86系统的分为实模式和保护模式:

其中 实模式 使用的表就叫中断向量表

保护模式 使用的向量表 换了个名字 叫中断描述符表
 采用门描述符数据结构表示中断向量,本质上没什么太大差别

5.中断处理程序:
设计操作系统时,为每一类的中断/异常事件提前编号相应的处理程序,并设置好中断向量表。
基本流程:

系统运行被打断,去响应中断,中断硬件部件 将CPU控制权交给中断处理程序
(软件提前设置好,硬件机制来执行)
在中断处理程序中:
1.保存相关寄存器信息
2.分析中断/异常的具体原因
3.执行对应的处理功能
4.恢复现场,返回被事件打断的程序

六、实例
在这里插入图片描述在这里插入图片描述

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值