Lab3

  1. 解释中断向量

中断向量是确定中断服务程序的位置。包含段基址和偏移量。

  1. 解释中断类型码

把每个中断服务程序进行编号,一个号代表一个中断服务程序,就是中断类型码,是计算机用来查找中断向量用的。(0-255)

  1. 解释中断向量表

一片专门用来存放所有的中断向量的内存空间。

在内存单元的最低处,地址空间为 00000H-003FFH (0-1024B)

中断类型码 * 4 = 中断向量的首地址

中断向量表提供了中断类型码与中断处理代码段入口地址的映射。

  1. 实模式下中断程序地址如何得到?

根据中断类型码 n, 从中断向量表 n*4,取得中断处理程序的地址,段地址存入 CS,偏移量存入 IP,使得 CPU 转入中断程序运行。

  1. 保护模式下中断程序地址如何得到?
  1. 以 IDTR 中中断向量表的基址为起始地址 + 调用号 N*8 = 中断门描述符首地址,取出中断门的 8 个字节

  2. 根据中断门的选择子和偏移量得到中断处理程序入口

  1. 中断向量的地址如何得到?

中断类型码 * 4

  1. 实模式下如何根据中断向量的地址得到中断程序地址?

低二字节为偏移量,高二字节为段地址

  1. 解释中断描述符

中断描述符含有中断处理程序地址信息,还包括许多属性和类型位

每个中断描述符占用连续的8个字节,中断描述符分为三类:任务门、中断门和自陷门,CPU对不同的门有不同的处理方式

低1,2字节和高7,8字节存偏移量

2,3字节是段选择符

4,5字节是访问权限字节

  1. 保护模式下中断描述符表如何得到?

通过IDTR读取IDT的基地址。

  1. 保护模式下中断门如何得到?

IDT基地址+中断类型码*8

  1. 保护模式下如何根据中断门得到中断处理程序地址?

中断门中的段选择符->段基址 + 偏移量

  1. 中断的分类,举例不同类型的中断?
  1. 中断源的角度:

内部异常中断:由硬件异常或故障引起的

软中断:程序执行了中断指令引起的中断,由程序员通过 INT 或 INT3 指令触发,通常当做 trap 处理,实现系统调用

外部中断 / IO 中断:外部设备请求引起的中断(又可分为可屏蔽中断(INTR 引脚)和不可屏蔽中断(NMI 引脚):重启、电源故障、内存出错等影响整个系统工作的中断时不能被屏蔽的)

  1. CPU 为界:

中断:CPU 以外的事件引起的中断(IO 中断、时钟中断、控制台中断等)

异常:CPU 内部事件或程序执行中的事件引起的过程(除数为 0,CPU 本身故障、请求系统服务指令)

  1. 中断与异常的区别?

狭义中断:CPU 以外的事件引起的中断(IO 中断、时钟中断、控制台中断等)

异常:CPU 内部事件或程序执行中的事件引起的过程(除数为 0,CPU 本身故障、请求系统服务指令)

  1. 实模式和保护模式下的中断处理差别

最大区别在于寻找中断处理代码入口的方式

实模式:中断类型码 * 4 (中断向量表)

保护模式:IDTR->IDT中的中断描述符->段基址+偏移

  1. 如何识别键盘组合键(如 Shift+a)是否还有其他解决方案?
  1. 按下一个按键时检测之前或者此时是否有组合键的Make Code
  2. 记录特殊按键的状态,按下一般按键时检测其状态以确定组合键
  1. IDT 是什么,有什么作用?

中断描述符表

可以通过中断号 * 8访问对应中断描述符,进而得到中断处理程序的地址等信息

  1. IDT 中有几种描述符?

三种

中断门描述符

陷阱门描述符

任务门描述符

  1. 异常的分类?

Fault:可被更正的异常,一旦被更正,程序可以不失连续性继续执行,返回地址是产生 fault 的指令。

Trap:在发生 trap 的指令执行之后立即被报告的异常,也允许程序不失连续性继续执行,返回地址为产生 trap 的指令之后的那条指令。

Abort:不总是报告精确异常发生位置的异常,不允许程序继续执行,用来报告严重错误的。

  1. 用户态和内核态的特权级分别是多少?

3, 0

  1. 中断向量表中,每个中断有几个字节?里面的结构是什么?

4个字节。高二字节 = 段地址,低二字节 = 偏移量

  1. 中断异常共同点(至少两点),不同点(至少三点)

共同点

  1. 都是程序执行过程中的强制性转移,转移到相应的处理程序

  2. 都是软件或硬件发生了某种情形而通知处理器的行为。

不同点

  1. 中断是 CPU 具备的功能,通常因为硬件而随机发生;异常时软件运行过程中的一种开发过程中没有考虑到的程序错误。

  2. 中断是 CPU 暂停当前工作,有计划地去处理其他事情,其发生一般是可预知的,处理过程也是实现制定好的,处理中断时程序是正常运行的;异常是 CPU 遇到了无法响应的工作,而进入一种非正常状态,异常的出现表明程序有缺陷。

  3. 中断是异步的,是来自指令流之外的;异常是同步的,是来自指令流内部的。

  4. 中断或异常的返回点。良性如中断和 trap,处理程序完了后返回到原指令流的下一条指令;恶性如 fault 和 abort,对于可修复 fault,会重新执行该指令,对于不可修复 fault 或 abort,则不会再返回。

  5. 中断是由与当前程序无关的中断信号触发的,CPU 对中断的响应是被动的,且与 CPU 模式无关。既可以发生在内核态也可以发生在用户态;异常是由 CPU 控制单元产生的,大部分异常发生在用户态。