-
“访管”指令仅在用户态下使用,执行“访管”指令将用户态转变为核心态。因操作系统不允许用户直接执行某些“危险性高”的指令,因此用户态运行这些指令的结果会转成操作系统的核心态去运行。这个过程就是访管中断。
-
中断处理流程的前三个步骤是由硬件直接实现(隐指令)的。地址映射中需要基地址(或页表)寄存器和地址加法器的支持。而在时钟管理中,需要硬件计数器保持时钟的运行。
中断处理流程:
-
中断请求
- 每个中断源向CPU发出中断的时机是随机的;
- 内中断不能被屏蔽,外中断有可屏蔽和不可屏蔽之分
- 为了记录这些中断事件和区分不同的中断源,中断系统为每一个中断源设置了一个中断请求标志触发器。如果某个中断源发出了中断,就将相应的标志触发器置为1;
- 对于外中断,CPU统一在每条指令执行阶段结束前向中断控制器发出中断查询信号,去查询是否有中断请求要去处理。
-
中断判优先级
- 如果有多个中断源发出了中断请求。则需要根据中断优先级选择优先级高的中断请求先进行响应
- 中断默认优先级是由一个硬件排队器来实现的
- 但是中断屏蔽字可以动态改变中断优先级。
-
中断响应
- CPU向中断源发出中断响应信号
- 关中断
- 保存断电(PC)
- 找到中断服务的入口地址(中断向量)
-
中断服务
- 保存现场:通用寄存器和状态寄存器和屏蔽字
- 开中断
- 中断处理过程
- 关中断
- 恢复现场
- 开中断
- 中断返回
-
中断返回
- 回到断电处
- 恢复硬件
- 继续执行原程序
-
-
中断程序本身可能是用户程序,但是进入中断的处理程序一定是OS程序。若被中断的是用户程序,则系统将从目态转入管态,在管态下进行中断的处理;若被中断的是低级中断,则仍然保持在管态,而用户程序只能在目态下运行,因此进入中断处理的程序只能是OS程序。
-
计算机通过硬件中断机制完成由用户态到核心态的转换,核心态到用户态的转换是由操作系统程序执行后完成的。
-
广义指令只能在核心态执行,广义指令就是系统调用。要分清调用和执行的区别,调用可能在用户态,执行一定在核心态。
-
特权用户程序能够执行特权指令,这句话是错的,只有操作系统程序可以。
-
下列选项中,不可能在用户态发生的事件是(C)。
-
系统调用
-
外部中断
-
进程切换
-
缺页
1.系统调用可能在用户态和内核态发生,系统调用把应用程序的请求(用户态的请求)传入内核,由内核(内核态)处理请求并将结果返回给应用程序(用户态) 用户态->核心态
2.中断的发生与CPU当前的状态无关,既可以发生在用户态,又可以发生在内核态,因为无论系统处于何种状态都需要处理外部设备发来的中断请求。
3.进程切换在核心态下完成,不能发生在用户态。原因:需要调度处理器和系统资源,为保证系统安全?
4.缺页(异常)也是用户态->内核态
ABD(系统调用中断异常)都是用户态转向内核态,而进程切换只能发生在内核态
所以选C进程切换
-
-
中断处理要保存而子程序不用保存的数据是PSW。因为子程序调用只需保存程序断点,即该指令的下一条指令的地址:中断处理不仅要保存断点(PC的内容),还要保存程序状态字寄存器(PSW)的内容。在中断处理中,最重要的两个寄存器是PC和PSW。
-
整数除以0会触发异常,会使得进程从用户态转向核心态
-
外部中断处理过程,PC值由中断隐指令自动保存,而通用寄存器内容由操作系统保存。
-
从用户态到内核态,系统调用、中断、异常
-
执行系统调用的过程如下:正在运行的进程先传递系统调用参数,然后由焰入(trap)指令负责将用户态转换为内核态,并将返回地址压入堆栈以备后用,接下来CPU执行相应的内核态服务程序,最后返回用户态。
-
当CPU检测到中断信号后会做些什么?由硬件自动保存被中断程序的断点(即程序计数器PC)。之后,硬件找到该中断信号对应的中断向量,中断向量指明中断服务程序入口地址(各中断向量统一存放在中断向量表中,该表由操作系统初始化)。接下来开始执行中断服务程序,包括保存PSW、保存中断屏蔽字、保存各通用寄存器的值,并提供与中断信号对应的中断服务,中断服务程序属于操作系统内核。