Lab3
- 解释中断向量
中断向量是确定中断服务程序的位置。包含段基址和偏移量。
- 解释中断类型码
把每个中断服务程序进行编号,一个号代表一个中断服务程序,就是中断类型码,是计算机用来查找中断向量用的。(0-255)
- 解释中断向量表
一片专门用来存放所有的中断向量的内存空间。
在内存单元的最低处,地址空间为 00000H-003FFH (0-1024B)
中断类型码 * 4 = 中断向量的首地址
中断向量表提供了中断类型码与中断处理代码段入口地址的映射。
- 实模式下中断程序地址如何得到?
根据中断类型码 n, 从中断向量表 n*4,取得中断处理程序的地址,段地址存入 CS,偏移量存入 IP,使得 CPU 转入中断程序运行。
- 保护模式下中断程序地址如何得到?
以 IDTR 中中断向量表的基址为起始地址 + 调用号 N*8 = 中断门描述符首地址,取出中断门的 8 个字节
根据中断门的选择子和偏移量得到中断处理程序入口
- 中断向量的地址如何得到?
中断类型码 * 4
- 实模式下如何根据中断向量的地址得到中断程序地址?
低二字节为偏移量,高二字节为段地址
- 解释中断描述符
中断描述符含有中断处理程序地址信息,还包括许多属性和类型位
每个中断描述符占用连续的8个字节,中断描述符分为三类:任务门、中断门和自陷门,CPU对不同的门有不同的处理方式
低1,2字节和高7,8字节存偏移量
2,3字节是段选择符
4,5字节是访问权限字节
- 保护模式下中断描述符表如何得到?
通过IDTR读取IDT的基地址。
- 保护模式下中断门如何得到?
IDT基地址+中断类型码*8
- 保护模式下如何根据中断门得到中断处理程序地址?
中断门中的段选择符->段基址 + 偏移量
- 中断的分类,举例不同类型的中断?
- 从中断源的角度:
内部异常中断:由硬件异常或故障引起的
软中断:程序执行了中断指令引起的中断,由程序员通过 INT 或 INT3 指令触发,通常当做 trap 处理,实现系统调用
外部中断 / IO 中断:外部设备请求引起的中断(又可分为可屏蔽中断(INTR 引脚)和不可屏蔽中断(NMI 引脚):重启、电源故障、内存出错等影响整个系统工作的中断时不能被屏蔽的)
- 以 CPU 为界:
中断:CPU 以外的事件引起的中断(IO 中断、时钟中断、控制台中断等)
异常:CPU 内部事件或程序执行中的事件引起的过程(除数为 0,CPU 本身故障、请求系统服务指令)
- 中断与异常的区别?
狭义中断:CPU 以外的事件引起的中断(IO 中断、时钟中断、控制台中断等)
异常:CPU 内部事件或程序执行中的事件引起的过程(除数为 0,CPU 本身故障、请求系统服务指令)
- 实模式和保护模式下的中断处理差别
最大区别在于寻找中断处理代码入口的方式
实模式:中断类型码 * 4 (中断向量表)
保护模式:IDTR->IDT中的中断描述符->段基址+偏移
- 如何识别键盘组合键(如 Shift+a)是否还有其他解决方案?
- 按下一个按键时检测之前或者此时是否有组合键的Make Code
- 记录特殊按键的状态,按下一般按键时检测其状态以确定组合键
- IDT 是什么,有什么作用?
中断描述符表
可以通过中断号 * 8访问对应中断描述符,进而得到中断处理程序的地址等信息
- IDT 中有几种描述符?
三种
中断门描述符
陷阱门描述符
任务门描述符
- 异常的分类?
Fault:可被更正的异常,一旦被更正,程序可以不失连续性继续执行,返回地址是产生 fault 的指令。
Trap:在发生 trap 的指令执行之后立即被报告的异常,也允许程序不失连续性继续执行,返回地址为产生 trap 的指令之后的那条指令。
Abort:不总是报告精确异常发生位置的异常,不允许程序继续执行,用来报告严重错误的。
- 用户态和内核态的特权级分别是多少?
3, 0
- 中断向量表中,每个中断有几个字节?里面的结构是什么?
4个字节。高二字节 = 段地址,低二字节 = 偏移量
- 中断异常共同点(至少两点),不同点(至少三点)
共同点:
都是程序执行过程中的强制性转移,转移到相应的处理程序
都是软件或硬件发生了某种情形而通知处理器的行为。
不同点:
中断是 CPU 具备的功能,通常因为硬件而随机发生;异常时软件运行过程中的一种开发过程中没有考虑到的程序错误。
中断是 CPU 暂停当前工作,有计划地去处理其他事情,其发生一般是可预知的,处理过程也是实现制定好的,处理中断时程序是正常运行的;异常是 CPU 遇到了无法响应的工作,而进入一种非正常状态,异常的出现表明程序有缺陷。
中断是异步的,是来自指令流之外的;异常是同步的,是来自指令流内部的。
中断或异常的返回点。良性如中断和 trap,处理程序完了后返回到原指令流的下一条指令;恶性如 fault 和 abort,对于可修复 fault,会重新执行该指令,对于不可修复 fault 或 abort,则不会再返回。
中断是由与当前程序无关的中断信号触发的,CPU 对中断的响应是被动的,且与 CPU 模式无关。既可以发生在内核态也可以发生在用户态;异常是由 CPU 控制单元产生的,大部分异常发生在用户态。