日期:2014-05-16  浏览次数:20615 次

Linux内核探讨-- 第四章

文是个人分析《Linux内核设计与实现》而写的总结,欢迎转载,请注明出处:

                                                                              http://blog.csdn.net/dlutbrucezhang/article/details/12280435

      第四章--中断和中断处理

      操作系统内核的核心任务便是对系统硬件的管理。一个操作系统能否高效率的管理硬件逐渐成为评价这个操作系统好与不好的标准。而管理硬件其实就是对硬件的响应及不及时。
      我们都知道,我们的程序有时需要与系统中的硬件有所反应,但是硬件比如硬盘,响应速度很慢,如果这时CPU在等待程序完成,那么这里的时间就白白浪费了,所以,我们需要一种机制来对硬件完成动作做出一些提示给CPU,这就是硬件中断。

      1.中断

      如果仅仅说硬件这个词,很是不好解释它是个什么原理,所以,在这里,举一个硬盘的例子。
      我们的程序需要读写硬盘,由于处于用户态的进程不可能操作,所以,需要调用系统调用从而陷入内核,这时内核代替我们执行动作,接着给硬盘发出读信号,硬盘开始工作,这时,当前的进程被挂起,并调度其他的进程执行。此时,硬盘开始传输数据,当硬盘传输数据完成时,硬盘会发送一个信号给CPU,CPU对这个信号做出响应,并执行相应的中断处理程序,此时进程处于中断上下文中(下文会有介绍)。
      中断从物理上说就是一种电信号,它首先会发送给中断控制器(8259A),如果系统没有关闭本地中断,那么中断会传递给CPU,并由CPU做出相应的动作。
      每种设备对应的中断不同,它们也不是由名称标识的,而是通过中断号标识的,在内核中存在着一种中断表,对应每个中断号的是不同的中断处理程序。
    

      2.异常

      在大多数的书中,异常和中断往往是一起介绍的,因为它们实在是太像了。但是它们之间也存在着很大的不同,现在我们来比较它们之间的异同。
      相同点:
                   都是由内核代为执行
      不同点:
                   异常是由软件产生的,比如缺页;而中断是由硬件产生的
                   异常的产生是时钟同步的;而中断的产生是随机的,可以是时钟不同步的

      3.中断处理程序

      当CPU接收中断后(这里先不考虑中断被屏蔽的情况),首先会执行一段中断处理程序,这段程序寻找特定中断程序的入口,随后执行特定的中断处理程序。
      当一个硬件设备被添加到当前的系统中时,首先会安装它的驱动程序,而它的中断处理程序就在它的驱动程序中。它首先会选择一条中断线注册,如果这条中断线是共享的,那么它还需要指定一些标志位(这在随后也会介绍)。
      中断处理程序在执行时是不可以睡眠的,而且相同的中断不能进行抢占。
      正是由于这个特点,所以,中断处理程序要求快速的执行,但是往往还会有负担比较重的任务,这与快速执行是矛盾的,所以,这里牵涉出了下一个主题--中断下半部。

  &n