操作系统第三次问答
1、解释中断向量
- 中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址称为中断向量。
- 一个中断向量占据4字节空间,包含中断服务程序入口地址的偏移量与段基址。
- 低地址两个Byte放偏移量
- 高地址两个Byte放段描述符
2、解释中断类型码
- 我们把每个中断服务程序进行编号,这个号就代表一个中断服务程序,就是中断类型码。
- 这个中断类型码是计算机用来查找中断向量用的。
3、解释中断向量表
- 中断向量表是指中断服务程序入口地址的偏移量与段基值,一个中断向量占据4字节空间。中断向量表是8086系统内存中最低端1K字节空间,它的作用就是按照中断类型号从小到大的顺序存储对应的中断向量,总共存储256个中断向量。
- 中断向量表在内存单元的最低处,地址空间为00000H—-003FFH(0-1024B)
- 这个地址正好和中断类型码有一种对应的关系:中断类型码*4(一个中断向量所占的空间) 就等于这个中断向量的首地址。
4、实模式下中断程序地址如何得到?
- 根据中断源提供的中断类型号,中断号×4KB,查找中断向量表,获取中断程序入口地址。
- 段描述符查GDT获得段基址加上偏移量
5、保护模式下中断程序地址如何得到?
- 中断向量×8,访问IDT
- 找到对应的描述符
- 是中断门或陷阱门描述符(先不讨论任务门,可以看最下面的补充)
当描述符是任务门时,处理的不是简单的中断处理程序,而是任务切换。 - 获取其中的选择子,访问GDT或者LDT
- 从中在获得目标段的描述符,从中得到目标段基地址
- 基地址与门描述符中的偏移量相加的到中断处的程序的32位线性地址
- 若未开启分页,线性地址就是物理地址
6、中断向量的地址如何得到?
- 中断类型码*4就等于这个中断向量的首地址。
7、实模式下如何根据中断向量的地址得到中断程序地址?
- 段描述符查GDT获得段基址加上偏移量
8、解释中断描述符
- 低地址的0和1两个字节是中断代码的偏移量A15~A0; 高地址的6和7两个字节是中断代码的偏移量A31~A16;
- 2和3两个字节是段选择符,段选择符和偏移量用来形成中断服务子程序的入口地址;
- 4和5两个字节称为访问权限字节,它标识该中断描述符是否有效、服务程序的特权级和描述符的类型等信息;
9、保护模式下中断描述符表如何得到?
- 引入一个48位的全地址寄存器(即中断描述符表寄存器IDTR)存放IDT的内存地址,和GDTR一样,IDTR包含32位的基地址和16位段限,基地址定义中断描述符表IDT在存储器中的起始点,段限定义中断描述符表所占的字节个数
10、保护模式下中断门如何得到?
- 查中断描述符表以IDTR指定的中断描述符表的基地址为起始地址,用调用号N×8算出偏移量,即为N号中断门描述符的首地址
11、保护模式下如何根据中断门得到中断处理程序地址?
- 查全局或局部描述符表根据中断门中的选择子(段选择符)和偏移量得到中断处理程序入口
12、中断的分类,举例不同类型的中断
从中断源的角度分类
- 由计算机硬件异常或故障引起的中断,也称为内部异常中断。
- 由程序中执行了中断指令引起的中断,也称为软中断。由程序员通过INT或INT3指令触发,通常当做trap处理,用处:实现系统调用。
- 外部设备(如输入输出设备)请求引起的中断,也称为外部中断或I/O中断。
主要分类:
中断:由CPU以外的事件引起的中断
如:IO中断、时钟中断、控制台中断等
异常:来自CPU的内部事件或程序执行中的事件引起的过程
如:由于CPU本身故障、程序故障、请求系统服务的指令引起的中断等
13、中断和异常的区别?
中断,是CPU所具备的功能。通常因为“硬件”而随机发生。
异常,是“软件”运行过程中的一种开发过程中没有考虑到的程序错误。
中断是CPU暂停当前工作,有计划地去处理其他的事情。中断的发生一般是可以预知的,处理的过程也是事先制定好的。处理中断时程序是正常运行的。
异常是CPU遇到了无法响应的工作,而后进入一种非正常状态。异常的出现表明程序有缺陷。
中断是异步的,异常是同步的。
- 中断是来自处理器外部的I/O设备的信号的结果,它不是由指令流中某条指令执行引起的,从这个意义上讲,它是异步的,是来自指令流之外的。
- 异常是执行当前指令流中的某条指令的结果,是来自指令流内部的,从这个意义上讲它们都是同步的。
中断或异常的返回点
- 良性的如中断和trap,只是在正常的工作流之外执行额外的操作,然后继续干没干完的活。因此处理程序完了后返回到原指令流的下一条指令,继续执行。
- 恶性的如fault和abort,对于可修复fault,由于是在上一条指令执行过程中发生(是由正在执行的指令引发的)的,在修复fault之后,会重新执行该指令;至于不可修复fault或abort,则不会再返回。
中断是由于当前程序无关的中断信号触发的,CPU对中断的响应是被动的,且与CPU模式无关。既可以发生在用户态,又可以发生在核心态。
异常是由CPU控制单元产生的,大部分异常发生在用户态。
14、实模式和保护模式下的中断处理差别
- 实模式使用中断向量表获得中断程序入口地址;保护模式使用中断描述符表
- 实模式下中断向量表地址从0开始;保护模式中中断描述符表地址不确定,需要靠IDTR记录
- 实模式通过中断向量中的基址加偏移量寻址;保护模式通过中断描述符中的段选择符加偏移量,再通过查全局或局部描述符表寻址
15、如何识别键盘组合键(如shift+a)是否还有其他解决方案?
建⽴扫描码的解析数组记录⼀个键在组合及⾮组合状态下的实际值并设置缓冲区;声明了组合键中前者(shift、ctrl 等)相应变量,若出现其make code或break code,设置其标志位以便与其他⾮组合键组合在解析数组中找到相应实际值
16、IDT是什么,有什么作用?
- 中断描述符表
- 存放中断描述符,中断描述符记录着偏移量、段选择符、访问权限。
17、IDT中有几种描述符?
- 任务门、中断门和自陷门
18、异常的分类?
- Fault:可被更正的异常,一旦被更正程序可以不失连续性地继续执行。返回地址是产生fault的指令。
- Trap:一种在发生trap的指令执行之后立即被报告的异常,它也允许程序或任务不失连续性地继续执行。返回地址是产生trap的指令之后的那条指令。
- Abort:不总是报告精确异常发生位置的异常,不允许程序或任务继续执行,而是用来报告严重错误的
19、用户态和内核态的特权级分别是多少?
- 用户3
- 内核0
20、中断向量表中,每个中断有几个字节?里面的结构是什么?
- 4
- 低地址两个Byte放偏移量
- 高地址两个Byte放段描述符
21、中断异常共同点(至少两点),不同点(至少三点)
共同点:
- 都是程序执行过程中的强制性转移,转移到相应的处理程序
- 都是软件或者硬件发生了某种情形而通知处理器的行为
不同点:
中断,是CPU所具备的功能。通常因为“硬件”而随机发生。
异常,是“软件”运行过程中的一种开发过程中没有考虑到的程序错误。
中断是CPU暂停当前工作,有计划地去处理其他的事情。中断的发生一般是可以预知的,处理的过程也是事先制定好的。处理中断时程序是正常运行的。
异常是CPU遇到了无法响应的工作,而后进入一种非正常状态。异常的出现表明程序有缺陷。
中断是由于当前程序无关的中断信号触发的,CPU对中断的响应是被动的,且与CPU模式无关。既可以发生在用户态,又可以发生在核心态。
异常是由CPU控制单元产生的,大部分异常发生在用户态。