寄存器
- 数据寄存器(DR)
- 用来暂时存放CPU执行指令是用的操作数,运算结果, 中间结果
- 地址寄存器(AR)
- 用来存放内存中某个数据或指令的地址
- 条件码寄存器(CCR)
- 其标志位由CPU硬件设置,例如,一次算数运算可能导致CCR被设置为正, 负, 零, 溢出
- 程序计数器(PC)
- 存放下一周期被执行指令的地址
- 指令寄存器(IR)
- 存放待执行的指令
- 程序状态字寄存器(PSW)
- PSW的各个位代表系统中当前各种不同的状态与信息,例如CPU的优先级,用户态, 核心态等
- 中断现场保护寄存器
- 如果系统允许不同类型的中断存在,则会设置一组中断现场保护寄存器,以便保存被中断程序的现场和链接中断恢复出
- 堆栈
- 用来存放过程调用时的调用名,调用参数和返回地址
注:以上概念摘抄自《操作系统原理及Linux内核分析》
中断
中断的理解
- 假设你现在正在做午饭,在某个时间点门铃响了,你去开门,然后回来继续做饭。从做饭到开门到再次回来做饭,整个过程成为中断。
- 中断的在计算机表现是:CPU在执行程序A时,操作系统检测到了中断事件。然后操作系统把程序A从CPU上剥下来,把CPU让给其他程序。中断事件处理结束后,再把程序A放到CPU上
中断相关的概念
- 中断源:引起中断的事件
- 中断请求:中断源向CPU发出的请求处理信号
- 中断点:CPU在执行现行程序时在哪里停止的成为中断点
- 中断响应:处理中断请求,在上述例子中表示,你停止做饭到去开门这一过程。
- 中断处理程序:响应中断请求的程序
- 中断处理过程:CPU执行中断处理程序的过程
- 中断返回:返回断点的过程
是否可以不响应中断
- PSW的中断允许位被清零,表示不允许CPU响应中断,称为关中断。只有该状态字恢复才可以接收中断,这一过程称为开中断。
- 开中断和关中断都是有硬件实现的
中断的类型与优先级
- 中断请求可以由外设发出。
- 这里举一个例子,我们打字时键盘⌨就会发出中断请求,为什么呢?站在操作系统的角度,它知不知道我们什么时候会按下键盘?答案是否,操作系统不可能知道我们在想什么,也不会预知未来。那么操作系统会实时监视键盘吗?答案也是否,因为操作系统可是“大忙人”,它可不会消耗精力监控键盘。
- 操作系统说:“键盘,你也长大了,别老让我看着了,我很忙的。。。这样吧,你啥时候有事了,跟我说一声好不好。”
- 键盘说:“好👌。”
- 然后,只要有人敲了键盘,键盘就会产生一个中断请求。
- CPU和内存中也可以产生中断
- 这种中断也成为陷入,包括系统调用,运算错误,地址错误,数据溢出,权限不够等等
- 不同的中断有不同的优先级,以便中断同时发生时,对不同的中断有轻重缓急的处理
处理机的状态
CPU可以分为用户态和核心态
- 处于用户太的CPU只能使用优先的资源,禁止使用特权指令,禁止更改CPU的状态
- 处于核心态的CPU可以使用特权指令,几乎可以无限次的访问硬件,可以更改CPU的状态,可以使用系统的所有资源