读书笔记之《深入理解Linux内核》第四、五、六章

第四章 - 中断和异常

中断(interrupt)通常被定义为一个事件,该事件改变处理器执行的指令顺序。

中断分为同步和异步中断,或者称为异常和中断。

    第二节中断和异常。中断包括可屏蔽中断和非屏蔽中断,而异常则包括处理器探测异常和编程异常。还讲述了一些关于IRQ线的知识,然后是异常处理程序发送的19种信号。当然,少不了中断描述符表。

    第四节“初始化中断描述符表”,在Linux中分为以下几种描述符:中断门、系统门、系统中断门、陷阱门、任务门。

    第六节中断处理。这是本章的重点,也是难点。

物理IRQ可以分配给32~238范围内的任何向量。
每个中断向量都有它自己的irq_desc_t描述符。

这一节还探讨了IRQ在多处理器系统上的分发,使得处理器间达到平衡。最重要的两个函数:do_IRQ()、__do_IRQ()。

    第七节软中断及tasklet。这是实现下半部机制的两种最重要的技术。但是很奇怪书上没提到半点下半部。软中断类型很少,只有6种,而tasklet可以很方便地在软中断的基础上实现。软中断的两个主要函数do_softirq()、__do_softirq()。

    第八节讲了工作队列的数据结构、实现,却没有讲它到底有什么用、怎么用。

 

第五章 - 内核同步

内核各部分交错执行,产生了竞争条件,所以需要同步技术来解决。

临界区是一段代码,在其他的内核控制路径能够进入临界区前,进入临界区的的内核控制路径必须全部执行完这段代码。

    第二节“同步原语”是重点。一共讲述了几种同步技术。①每CPU变量,是指专属于某一个CPU使用的变量,其他CPU不能访问。②原子操作,确保某些操作在芯片上是原子级的,由单个指令执行,中间不能中断。③优化和内存屏障。优化屏障原语保证编译程序不会混淆放在原语操作之前的汇编语言指令和放在原语操作之后的汇编语言指令。而内存屏障原语确保,在原语之后的操作开始执行之前,原语之前的操作已经完成。④自旋锁,内核控制路径通过执行一条紧凑的循环指令来等待锁被释放。⑤顺序锁,写者可以打断读者获得锁。⑥信号量,能够让等待着睡眠,直到等待的资源可用。

 

第六章 - 定时测量

Linux内核必需完成两种主要的定时测量:保存当前的时间和日期;维持计时器,这种机制能够告诉内核某一时间间隔已经过去了。

    第一节时钟和定时器电路。讲的都是硬件方面的器件。包括实时时钟RTC、时间戳计数器TSC、可编程间隔定时器PIT、CPU本地定时器、高精度事件定时器HPET以及ACPI电源管理定时器。

    第二节Linux计时体系结构。其数据结构包括定时器对象、jiffies变量、xtime变量。另外这节还分别讲述了单处理器系统跟多处理器系统上计时体系结构的实现。重要的函数有time_init()、timer_interrupt()。

    内核通过利用各种计时器可以收集一些数据用于:检查运行进程的CPU资源限制;更新与本地CPU工作负载有关的统计数;计算平均系统负载;监管内核代码。

    为了提供更灵活方便的定时器,内核实现了软件级别的定时器,包括动态定时器和间隔定时器。
每个定时器都包含一个字段,表示定时器将需要多长时间到期。每个字段的初值就是jiffies的当前值加上合适的节拍数。
    第六节与定时测量相关的系统调用。简单讲解了以下几个系统调用:time()、gettimeofday()、adjtimex()、settimer()、alarm()。

    这一章的难度不大,而且讲解都很有条理、清晰。

2011.11.25

你可能感兴趣的:(读书笔记之《深入理解Linux内核》第四、五、六章)