读书笔记:《Linux内核设计与实现》第七章 —— “中断和中断处理”

   在第七章中,主要对中断和中断处理进行了介绍。操作系统的任务是对计算机硬件和软件进行管理,内核是操作系统的核心,它负责管理系统进程、内存、设备驱动程序、文件和网络系统,其中就需要做到对计算机的硬件设备进行有效管理。要进行管理就必须进行交互。那么内核又是如何使用中断处理函数来处理对应中断?

7.1 中断

   从物理学角度来看,中断是一种电信号,由硬件设备产生发送给处理器,处理器接收到中断后,会马上向操作系统反映信号的到来,之后由操作系统来对它【这些数据】进行处理。中断随时都可以产生,因此内核随时可能因为新到来的中断而被中断。

  【当接收到一个中断后,中断控制器会给处理器发送一个电信号,处理器【CPU】检测到这个信号之后,就立刻中断自己当前的工作转而处理中断,然后CPU会通知操作系统已经产生中断,so ,操作系统可以对这个中断进行处理了!】 

   不同的设备对应的中断不同,都有着一个唯一的数字标识,所以键盘的中断和硬盘的中断就是不一样的,通过这个数字标识,操作系统就可以知道这个中断到底来自于什么硬件设备,给对应设备提供对应的中断程序

   在操作系统中,提到中断就不能不说到【异常】,异常也被叫做“同步中断”,和中断不同的地方在于,异常在产生的情况下,必须考虑和CPU时钟同步【处理操作的基本单位】,在处理器执行到因为程序编程而导致的错误指令(被0除)或执行的时候出现特殊情况(缺页),必须靠内核来处理的时候,处理器就会产生一个异常。【因为好多处理器体系结构处理异常和处理中断的方法类似,所以内核对它们的处理也很类似】

7.2 中断处理程序

    在响应每一个特定中断的时候,内核会执行一个特定的函数,这个函数就是中断处理程序,在7.1中提到每一个硬件设备对应的中断都不同,所以不同的设备也对应着不同的中断处理函数。中断处理程序是内核调来响应中断的,运行在中断上下文中,中断上下文也被叫做原子上下文,在上下文中执行的代码是不可阻塞的

    中断随时都有可能发生,中断处理程序随时都有可能开始执行,所以必须要保证中断处理程序可以快速的执行,这样才可以尽快地恢复代码的执行。对硬件而言,操作系统能快速的对中断进行服务很重要,但是对系统的其他部分而言,让中断处理程序能在短时间内完成运行也很重要。

7.3 上半部和下半部的对比

    中断程序需要执行的很快,但是中断需要完成的事情又很多,显得十分矛盾,所以把中断分为中断上半部和中断下半部;

    中断上半部 —— 当接收到一个中断之后就立即开始执行,但是只做有严格时间限制的工作,也就是做迫切需要做且用时短的工作;

    中断下半部 —— 紧迫的任务已经在上半部执行完了,下半部基本是耗时长的任务,上半部和下半部的界限并不明显,主要取决于任务存放在哪个部分;

举个栗子: 

     网卡接收到来自网络的数据包时候,需要通知内核数据包到了,让内核帮助自己调用函数实现数据的接收。网卡需要立即完成这件事情,而且优化网络的吞吐量和传输周期,避免超时。网卡就立即发出中断,告诉内核,内核通过中断处理程序来进行应答 —— 中断开始执行,通知硬件拷贝网络数据发给内存,然后读取网卡更多的数据包,这些都是比较重要且紧迫的工作,内核需要快速的进行数据拷贝,因为网卡上接收网络数据包的缓存大小固定,相比系统内存也比较小,所以一旦拷贝的动作被延迟,就会造成缓存溢出——进入的网络包占满了网卡的缓存,后序的包只能被丢弃,当网络数据包被拷贝到系统内存的时候,中断的任务算是完成了,这时候内核会把控制权交还给系统被中断前原先运行的程序,处理和操作数据包的其他工作在中断下半部执行!

7.4注册中断处理函数 

    通过request_irq()函数来注册一个中断处理程序,激活给定的中断线,来处理中断;

    request_irq()函数成功执行会返回0,如果返回非0值就表示有错误发生,在这种情况下指定的中断处理程序就不会被注册,最常见的错误是-EBUSY,表示给定的中断线已经在使用。

7.5中断上下文 

     当执行一个中断处理程序时,内核处于中断上下文中,中断上下文不可以睡眠,因为没有后备进程,如果睡眠的话就无法重新调度了!

 【进程上下文是一种内核所处的操作模式,在这个时候内核代表进程执行,实际上是对于进程执行全过程的静态描述,在进程上下文里面可以通过current宏关联当前进程。此外,进程是以进程上下文的形式连接到内核中的。进程上下文可以睡眠,也可以调用调度函数。】 

   中断上下文有严格的时间限制,因为他打断了其他的代码【甚至是其他中断线上的另一个中断处理程序】。中断上下文的代码应该迅速,简洁,尽量不要使用循环去处理繁重的工作。 

7.6中断控制

   Linux系统提供了一组接口用来操作机器上的中断状态,这些接口给我们提供了能够禁止当前处理器的中断系统,或屏蔽掉整个机器的一条线的能力。一般来说,控制中断系统的原因是需要提供同步;禁止中断之后,可以确保某个中断处理程序不会抢占当前的代码。除此之外,禁止中断还可以禁止内核抢占。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值