操作系统中断的具体应用

来自Linux操作系统原理与应用(第2版)


intel x86系列共有256种向量中断,这其中可分为两大类:异常和中断

0-31的向量对应异常和非屏蔽中断

32-47的向量对应于异常和非屏蔽中断

48-255的向量用于标识软中断(Linux中128或0x80向量)用来实现系统调用

在前面有提及   异常有故障,陷阱

                        中断有外部可屏蔽中断和外部非屏蔽中断

外设可屏蔽中断

intel x86通过两片中断控制器8259A来响应15个外中断源,每个8259A可管理8个中断源。与中断控制器相连的每条线叫做中断线,如果要使用中断线,就需要进行申请,也就是IRQ。

并不是每个设备都可以向中断线上发送信号,必须要有确切的控制权。但现在计算机的外部设备比较多,所以也会有共享中断的方式。

外部I/O的屏蔽分为两种情况:                                                                                                        ①CPU:清除EFLAG的中断标志位IF,当IF为0时,禁止所有的外部I/O的中断请求【关中断】        ②中断控制器:因为中断控制器有一个8为的中断屏蔽寄存器,每一位对应8259A的一条中断线,如果需要禁用某个中断线,就把中断屏蔽寄存器相应位置置为1,启用就为0

异常以及非屏蔽中断

异常是CPU内部出现的中断,就是CPU执行特定指令的时候出现的非法情况

非屏蔽中断就是计算机内部硬件出现的异常情况

需要注意的是当CPU执行一个异常处理程序的时候,就不再为其他异常和可屏蔽中断请求服务,也就是上面的外设I/O中断,EFLAG中断标志位为0,当如果还有其他的异常,会被CPU锁存,排队响应


中断描述符表

在实地址中,CPU把内存中从0开始的1kb用来存储中断向量表。其中每一个表项占4个字节,由2字节的段地址和2字节的偏移量组成,这样子构成的地址是相应的中断处理程序的入口地址。

但在,保护模式下的中断向量表的表项由8字节组成,因为除了两字节的段描述符,偏移量需要用到4字节来表示。每一个表项也叫做门描述符,就是当中断发生时必须先通过这些门,才可以进入相应的处理程序。

中断和异常的硬件处理

当CPU执行当前指令后,CS和EIP这对寄存器中包含的内容就是下一条将要执行指令的虚地址,在对下一条指令执行前,CPU先要判断这条指令执行过程中是否有异常或中断。

如果发生了一个中断或异常,那么CPU会

1.确定中断或异常对应的中断向量

2.通过IDTR(中断描述符寄存器)找到IDT表,读取IDT表的第i项(第i门)

3.分步进行检查,段检查和门检查(检查两者对应的特权级)

4.检查是否发生了特权级的变化。如果中断发生在用户态(特权级3),但中断处理需要进入内核态(特权级0),特权级发生了变化,会引起堆栈的更换。但如果中断发生在内核态,就不用更换堆栈。

外中断——就是我们指的中断——是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等;
内中断——就是异常——是指由于 CPU 内部事件所引起的中断,如程序出错(非法指令、地址越界)。内中断(trap)也被译为“捕获”或“陷入”。
异常是由于执行了现行指令所引起的。由于系统调用引起的中断属于异常。
中断则是由于系统中某事件引起的,该事件与现行指令无关。


中断的处理机制

中断服务程序一般都是在中断请求关闭的条件下进行的,这样子可以避免嵌套而使中断控制复杂化。但中断是一个随机事件,它会随机到来,但如果关中断的时间太长了,CPU就会不能及时响应其他的中断要求,那么可能就会出现中断丢失的情况。

现在做出一个设想:一个数据块来到了网线,中断控制器接受到这个中断请求信号时,Linux会标志数据来了,接着处理器就恢复到之前运行的状态,其他的就稍后处理。

也就是内核把中断分成了两个部分,上半部分内核立即执行(中断服务程序),下半部分稍后处理

上半部分是很快速的,用于处理硬件发出的请求,必须在一个新中断产生之前终止,一般来说就在设备和缓存区之间移动或传送数据,确定硬件是否健全之外,也没什么工作了

下半部分是运行中允许中断请求的,但上部分是关中断的

下半部分可以在多处理机上并行执行,有助于驱动程序的开发者进行驱动程序的开发,这种执行机制叫软中断机制


中断应用---时钟中断

大部分的PC有两个时钟源,分别是RTC和OS时钟。RTC(实时时钟)也叫做CMOS时钟,是靠电池供电(即是系统掉电),可以维持日期和时间,独立于操作系统,也叫做硬件时钟,为计算机提供一个计时标准,是最原始最底层的时钟数据。

OS时钟是PC主板上的定时/计数芯片,由操作系统控制这个芯片工作,OS时钟的基本单位就是该芯片的技术周期。

开机的时候,操作系统获取RTC中的时间数据来初始化OS时钟,然后通过计数芯片的向下计数形成了OS时钟,OS更像一个计数器。

RTC和OS时钟之间的关系通常作为操作系统的时钟运作机制。PTC是OS时钟的时间基准,操作系统通过读取RTC来初始化OS时钟,二者保持同步运行,共同维护系统时间。同步:操作系统在运行过程中,每隔一个固定时间会刷新或校正RTC的信息。

OS时钟和RTC之间要通过BIOS进行连接,因为BIOS中固化对RTC进行有关的操作的函数。比如从RTC中读出有关数据从而对OS时钟进行初始化。

一阶段:PC加电,RTC启动,BIOS从RTC中获得日期和时间

二阶段:OS装入,OS装入的时候,从BIOS中得到日期和时间初始化OS时钟,然后,OS将维持自己的时钟,这个时钟是有关应用的基础

三阶段:应用程序有关时间应用的请求,如定时器,闹钟等等,应用程序会从OS时钟得到日期和时间

说白了,就是RTC是底层,BIOS是桥,OS是为应用提供数据的

时钟中断的产生

物理原因是可编程定时/计数器产生的输出脉冲,这个脉冲送入CPU,就可以引发一个中断请求信号,这就是时钟中断。

系统通过时钟中断来维持系统时间,环境切换,来保证所有进程都可以共享CPU;利用时钟中断进行记账,监督系统工作以及确定未来的调度优先级等工作。

操作系统对可编程定时/计数器进行有关初始化,然后定时/计数器就对输入脉冲进行计数,会产生三个输出脉冲,其中Out0上的输出脉冲,接到了中断控制器上面,会触发周期性的中断,也就是时钟中断。时钟中断只是一个硬件行为,该信号触发CPU去执行一个中断服务程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值