Linux 2.6内核标准教程 前言
前言
写作背景
自由、开放的Linux操作系统正在蓬勃发展,得到了广泛的应用,Linux操作系统的用户数量迅速增长,很多Linux爱好者希望能够学习、掌握Linux内核的原理、机制,能够阅读Linux内核代码,并能够加以应用,但在实际的学习过程中常遇到以下问题。
"Linux内核学习门槛较高,初学者总想迅速读懂内核源代码,往往在不清楚内核运行机制和内核代码结构的情况下就开始阅读Linux内核代码,会遇到很大障碍。
"随着Linux内核的发展,内核的代码量日益增加,系统规模不断扩大,复杂度不断提高。如何在纷繁芜杂的代码中找到自己所需的信息,是一个亟待解决的问题。
"研究、学习过程中不仅需要掌握C语言、操作系统方面的知识,而且还要需要掌握汇编语言、内联汇编、编译器、链接器、链接脚本等各方面的知识。
因此,读者亟需这样一本书。
"能够在需要的地方深入浅出地讲解研究、学习Linux内核所需的知识点。
"能够对内核的核心框架进行全面剖析,引导读者走出由错综复杂的函数和数据结构组成的迷宫,使读者可以在较短的时间内掌握Linux内核的精髓。
本书特点
(1)基于Linux 2.6版本内核进行讲解。
相对于早期版本,本书讨论的Linux 2.6版本内核已经非常成熟,具有O(1)调度算法、改进的NPTL线程模型、内核态抢占等新的特性,具有良好的响应能力(软实时)。这些重要特性保证了Linux 2.6版本内核具有非常广泛的实际应用价值,更适用于实际产品的开发。
(2)专注于Linux内核核心模块,使读者在较短的时间内掌握Linux的精髓。
对于Linux 2.6版本内核这一"庞然大物",本书选取了内核的核心关键模块,在有限的篇幅内对Linux内核的工作原理进行深入、透彻的讲解。
(3)分析和讲解细致、透彻。
本书对每个内核核心模块,都深入剖析其数据结构、访问接口、工作机制和内核实现。
本书给出了Linux内核中每个内核模块运作机制的基本轮廓,并用示意图加以说明,帮助读者掌握相应的运作模型,并对内核实现的关键细节、关键代码进行详细分析。
本书主要内容
第1章首先对内核的目录结构进行了介绍,然后介绍了Linux 2.6内核的新特性,最后介绍了内核探索工具和阅读本书的方法。
第2章首先详细分析了Linux系统在标准PC上的引导过程,以及系统控制权交给内核镜像bzImage的过程,然后讲解内核的初始化过程,如何为第一个C函数设置所需的运行环境,并分析了系统初始化入口函数start_kernel (),使读者了解Linux系统最基本的初始化过程,该过程对理解其他内核模块的初始化有重要意义。
第3章主要讲解内存管理,这是Linux内核中最复杂、最核心的内核模块。本章首先介绍了IA32体系结构提供的内存管理机制--分段机制和分页机制,讨论了两者间的关系和Linux内核所做的取舍;随后详细分析了内核页表的初始化过程,并对Linux内核的内存模型进行了讲解,分析Linux是如何对NUMA架构提供支持的;最后讲解了物理页框的分配、回收过程,并对内核地址空间的划分和用途进行分析。
第4章主要讲解Linux内核中进程、线程的概念,对其所涉及的关键数据结构进行了讲解,分析了Linux内核中进程组织形式和它们各自的用途,对进程的创建过程进行了详细的讨论和分析;然后详细介绍2.6版本内核中新采用的O(1)复杂度调度器的基本思想和实现细节;最后对系统中的第一个进程(0号进程)的创建过程进行详细分析。
第5章所讲解的中断、异常机制是计算机系统的核心,系统调用和时间度量都是建立在该机制之上的。本章首先介绍了IA32体系结构的中断、异常机制,然后讲解了中断描述符表的初始化过程以及中断、异常处理过程中计算机软、硬件的工作状态和处理方法,最后讲解中断延迟问题。
第6章详细讲解了内核时间度量的架构和需要的硬件支持,并对时钟中断的处理过程进行分析,最后讲解Linux内核软定时器的工作原理和实现细节。
第7章首先讲解系统调用接口的作用和访问手段,然后讲解系统调用的工作机制和参数传递问题,并介绍如何向内核添加系统调用,最后讲解IA32体系架构引入的快速系统调用指令和Linux内核对其提供的支持。
第8章主要讲解Linux内核各种模块所使用的同步机制,首先讲解同步的基本原理,然后对构建在基本同步原理之上的同步机制进行了详细的讲解。
参与本书编写的人员
本书内容来源于华清远见嵌入式培训中心( HYPERLINK "/" /)的培训资料,是多年培训和研发经验的总结。本书主要由河秦、王洪涛负责编写,同时参与编写和资料整理的还有毛彦超、王瑞、史志宇、石玉龙、刘国明、李、武凡琦、陈群星、罗璋、赵炳和、崔海峰、孙琼、田旭、范文庆、钟金鑫、王欣、张曦文、尚玉珊、张丛辉、王