Linux内核编程(china-pub首发)
基本信息
编辑推荐
源代码级内核分析 自上而下纵观Linux内核的基本框架 示例丰富,注释详
推荐阅读
内容简介回到顶部↑
《linux内核编程》以linux 操作系统为基础,详细介绍了linux 内核子系统,并辅以大量内核源代码和示例程序进行演示,引领读者深入linux 内核。本书的主要内容包括:linux 基础知识、内核探索工具集、进程的整个生命周期、内存区、页面、slab 分配器、用于输入/ 输出的各种设备、文件系统、抢占、自旋锁、信号量、内核引导、构建linux 内核,以及向内核添加代码等。同时还简单介绍了一些应用工具和实用程序,从而可以获取理解内核内幕所需的信息。每章末尾都给出一些练习,涉及内核运行的操作及工作原理。
《linux内核编程》适合对linux 内核感兴趣的各层次读者,无论对linux 初学者还是linux 程序开发人员,本书都是一本很有价值的参考书。
《linux内核编程》适合对linux 内核感兴趣的各层次读者,无论对linux 初学者还是linux 程序开发人员,本书都是一本很有价值的参考书。
作译者回到顶部↑
本书提供作译者介绍
Claudia Salzberg Rodriguez
就职于IBM Linux技术中心,负责内核及相关编程工具的开发。在担任程序员的10多年时间里,她一直针对Intel和PPC平台进行Linux嵌入式系统到高性能系统的开发。
Gordon Fischer 曾为很多底层设备开发过Linux和Unix设备驱动程序,并针对Intel和PPC平台上的企业级系统中使用Linux内核。
Steven Smolski 有近30年的半导体行业从业经验。从事过内存、处理器以及ASICS的研发和测试,为Linux、AIX以及Windows都编写过应用程序和驱动程序,还进行过嵌入式操作系.. << 查看详细
就职于IBM Linux技术中心,负责内核及相关编程工具的开发。在担任程序员的10多年时间里,她一直针对Intel和PPC平台进行Linux嵌入式系统到高性能系统的开发。
Gordon Fischer 曾为很多底层设备开发过Linux和Unix设备驱动程序,并针对Intel和PPC平台上的企业级系统中使用Linux内核。
Steven Smolski 有近30年的半导体行业从业经验。从事过内存、处理器以及ASICS的研发和测试,为Linux、AIX以及Windows都编写过应用程序和驱动程序,还进行过嵌入式操作系.. << 查看详细
目录回到顶部↑
《linux内核编程》
第1 章 概述 1
1.1 unix 的历史 2
1.2 标准和通用接口 3
1.3 自由软件和开放源码 3
1.4 linux 发布版概览 3
1.41 debian 4
1.42 red hat/fedora 4
1.43 mandriva 4
1.44 suse 4
1.45 gentoo 4
1.46 yellow dog 5
1.47 其他发布版 5
1.5 内核版本信息 5
1.6 基于power 的linux 5
1.7 什么是操作系统 6
1.8 内核组织 7
1.9 linux 内核概述 7
1.9.1 用户接口 7
1.9.2 用户标识符 8
第1 章 概述 1
1.1 unix 的历史 2
1.2 标准和通用接口 3
1.3 自由软件和开放源码 3
1.4 linux 发布版概览 3
1.41 debian 4
1.42 red hat/fedora 4
1.43 mandriva 4
1.44 suse 4
1.45 gentoo 4
1.46 yellow dog 5
1.47 其他发布版 5
1.5 内核版本信息 5
1.6 基于power 的linux 5
1.7 什么是操作系统 6
1.8 内核组织 7
1.9 linux 内核概述 7
1.9.1 用户接口 7
1.9.2 用户标识符 8
译者序回到顶部↑
溯本求源,从本书开始!
打开Linux内核源代码,我们可以看到熟悉的C语言函数和一些陌生的汇编代码。应该说,Linux内核入门是不容易的,原因在于其代码规模庞大,而且涉及的层面众多。规模一大,就不易现出本来面目,枝叶庞杂,自然不容易找到着手之处;层面一多,就会让人眼花缭乱,盘根错节,怎能让人提纲挈领?
就我们的经验,本书是内核初学者(不是编程初学者)登堂入室的首选。本书三位作者有多年的行业经验:Claudia Salzberg Rodriguez就职于IBM Linux技术中心,从事内核及相关编程工具的开发工作;Gordon Fischer为很多设备开发了Linux和UNIX设备驱动程序;Steve Smolski在半导体行业已经浸染了26年,开发过各种驱动程序和嵌入式系统。他们合作奉献给大家的这本内核入门,是对Linux内核编程的有效指导。作者独特的由表及里的讲解方法使得内核编程更易于理解:从用户空间到内核,把内核内在的实现原理与用户级编程的基本原则相联系,系统地追踪了实现功能。这种途径有助于扩大你所了解的Linux知识,加深对内核组成及工作机理的理解。
在本书的翻译过程中,我们能感受到作者软硬件知识之全面、内容组织方式之独到,以及开发经验之丰富。在我们熟知的x86平台之外,作者还对PowerPC平台进行了深入讲解,不仅让基于PowerPC平台的开发者找到了知音,更为x86的开发者打开了一扇窗。
本书第1、4、9、10章由陈莉君翻译,第2、5、8章由贺炎翻译,第3、6、7章由刘霞林翻译,全书由陈莉君统稿。书中不妥之处和错误在所难免,望读者指正。
打开Linux内核源代码,我们可以看到熟悉的C语言函数和一些陌生的汇编代码。应该说,Linux内核入门是不容易的,原因在于其代码规模庞大,而且涉及的层面众多。规模一大,就不易现出本来面目,枝叶庞杂,自然不容易找到着手之处;层面一多,就会让人眼花缭乱,盘根错节,怎能让人提纲挈领?
就我们的经验,本书是内核初学者(不是编程初学者)登堂入室的首选。本书三位作者有多年的行业经验:Claudia Salzberg Rodriguez就职于IBM Linux技术中心,从事内核及相关编程工具的开发工作;Gordon Fischer为很多设备开发了Linux和UNIX设备驱动程序;Steve Smolski在半导体行业已经浸染了26年,开发过各种驱动程序和嵌入式系统。他们合作奉献给大家的这本内核入门,是对Linux内核编程的有效指导。作者独特的由表及里的讲解方法使得内核编程更易于理解:从用户空间到内核,把内核内在的实现原理与用户级编程的基本原则相联系,系统地追踪了实现功能。这种途径有助于扩大你所了解的Linux知识,加深对内核组成及工作机理的理解。
在本书的翻译过程中,我们能感受到作者软硬件知识之全面、内容组织方式之独到,以及开发经验之丰富。在我们熟知的x86平台之外,作者还对PowerPC平台进行了深入讲解,不仅让基于PowerPC平台的开发者找到了知音,更为x86的开发者打开了一扇窗。
本书第1、4、9、10章由陈莉君翻译,第2、5、8章由贺炎翻译,第3、6、7章由刘霞林翻译,全书由陈莉君统稿。书中不妥之处和错误在所难免,望读者指正。
前言回到顶部↑
无论是一般性技术还是计算机技术,对于试图了解它们的人们来说都具有不可思议的魔力。技术的发展使其影响力不断扩大,迫使人们对一些旧的概念重新评估。Linux操作系统已经对产业变革和商业营销方式转变做出了巨大贡献。它采用GNU公共许可证并与GNU软件良性互动,占据了中心位置,围绕开源、自由软件和开发社区思想的各种争论都离不开它。Linux无疑是一个极其成功的典范,展现了开源操作系统无比强大的力量,其理论的魔力令世界各地的程序员们如痴如狂。
对于大多数计算机用户来说,使用Linux正变得越来越方便。有了各种各样的发布版、社区的支持,以及工业后盾,Linux的应用也找到了安全的港湾,出现在大学、行业应用以及数以千计的家庭用户中。
使用大潮促进了技术支持和新功能需求的日益增长。这样一来,愈来愈多的程序员发现自己对Linux内核内幕感兴趣,因为大量现有的(还在快速增长的)应用需要支持不同的体系结构和种类繁多的新设备。
内核向Power体系结构的成功移植,也助长了Linux操作系统在高端服务器和嵌入式系统中的全面繁荣。许多公司购买基于Power PC的系统来运行Linux,因此越来越多的人需要知道Linux在该体系结构上的运行机理。
适合的读者
本书的读者包括初级和经验丰富的系统程序员、Linux的热衷者,以及应用程序的开发者,这些开发者渴望更好地理解自己的程序到底是如何工作的。只要有C语言知识,熟悉基本的Linux用法,如果想知道Linux如何工作,那么你就会发现这本书提供了所需的基本知识,可以说,本书是理解Linux内核如何工作的初级读本。
不管你是只登录过Linux并编写了些小程序,还是你本身就是一个系统程序员,正想深入理解某个子系统的特性,本书都会有你所要的信息。
内容组织
本书分为三部分,每部分都提供必要的知识,让读者能顺利地钻研Linux内幕。
第一部分提供必要的工具和背景,便于对Linux内核展开进一步的探索。
第1章回顾了Linux和UNIX的历史,对比了很多发布版,并从用户空间的角度简述各种内核子系统。
第2章描述Linux内核中常用的数据结构和语言的用法,介绍x86和PowerPC体系结构的汇编语言,并简述一些工具和实用程序,可用来获取理解内核内幕所需的信息。
第二部分介绍了在每个内核子系统中所涉及的基本概念,并分析了执行子系统功能的代码。
第3章讨论了进程模型的实现。本章解释了为何引入进程,并讨论了进程往返于用户空间和内核空间时的控制流。我们还讨论了进程在内核中是如何实现的,并描述了与进程执行相关的所有数据结构。本章还介绍了中断和异常,描述了这些硬件机制在每种体系结构中是如何发生的,它们与Linux内核又是如何交互的。
第4章描述了Linux内核如何追踪和管理用户空间进程的可用内存和内核的可用内存。本章描述了内核对内存分类的方式,以及决定分配和释放内存的方式,也详细描述了缺页机制以及它怎样在硬件上执行。
第5章描述了处理器如何与其他设备进行交互,内核又是如何响应和控制这些交互的。本章还涵盖了各种设备及其在内核中的实现。
第6章概述文件和目录如何在内核中实现。本章引入了虚拟文件系统,它是用于支持多文件系统的抽象层。本章还跟踪了文件相关操作的执行,如打开和关闭文件。
第7章描述调度程序的操作,调度程序让多个进程运行起来就像系统中只有一个进程在运行一样。本章详细描述了内核如何选择执行哪一个任务,进程切换时如何与硬件进行交互。本章还叙述了什么是内核抢占,它又是怎样执行的。最后,描述了系统时钟的工作原理,内核怎样使用它计时。
第8章描述电源开和关时都发生些什么。本章对各种处理器处理内核加载的方式进行了跟踪,包括对BIOS、Open Firmware和bootloader的描述。然后,考察了内核启动和初始化时的线性顺序,涉及了前面章节中讨论的所有子系统。
第三部分,描述如何编译内核并与内核进行交互的有效途径。
对于大多数计算机用户来说,使用Linux正变得越来越方便。有了各种各样的发布版、社区的支持,以及工业后盾,Linux的应用也找到了安全的港湾,出现在大学、行业应用以及数以千计的家庭用户中。
使用大潮促进了技术支持和新功能需求的日益增长。这样一来,愈来愈多的程序员发现自己对Linux内核内幕感兴趣,因为大量现有的(还在快速增长的)应用需要支持不同的体系结构和种类繁多的新设备。
内核向Power体系结构的成功移植,也助长了Linux操作系统在高端服务器和嵌入式系统中的全面繁荣。许多公司购买基于Power PC的系统来运行Linux,因此越来越多的人需要知道Linux在该体系结构上的运行机理。
适合的读者
本书的读者包括初级和经验丰富的系统程序员、Linux的热衷者,以及应用程序的开发者,这些开发者渴望更好地理解自己的程序到底是如何工作的。只要有C语言知识,熟悉基本的Linux用法,如果想知道Linux如何工作,那么你就会发现这本书提供了所需的基本知识,可以说,本书是理解Linux内核如何工作的初级读本。
不管你是只登录过Linux并编写了些小程序,还是你本身就是一个系统程序员,正想深入理解某个子系统的特性,本书都会有你所要的信息。
内容组织
本书分为三部分,每部分都提供必要的知识,让读者能顺利地钻研Linux内幕。
第一部分提供必要的工具和背景,便于对Linux内核展开进一步的探索。
第1章回顾了Linux和UNIX的历史,对比了很多发布版,并从用户空间的角度简述各种内核子系统。
第2章描述Linux内核中常用的数据结构和语言的用法,介绍x86和PowerPC体系结构的汇编语言,并简述一些工具和实用程序,可用来获取理解内核内幕所需的信息。
第二部分介绍了在每个内核子系统中所涉及的基本概念,并分析了执行子系统功能的代码。
第3章讨论了进程模型的实现。本章解释了为何引入进程,并讨论了进程往返于用户空间和内核空间时的控制流。我们还讨论了进程在内核中是如何实现的,并描述了与进程执行相关的所有数据结构。本章还介绍了中断和异常,描述了这些硬件机制在每种体系结构中是如何发生的,它们与Linux内核又是如何交互的。
第4章描述了Linux内核如何追踪和管理用户空间进程的可用内存和内核的可用内存。本章描述了内核对内存分类的方式,以及决定分配和释放内存的方式,也详细描述了缺页机制以及它怎样在硬件上执行。
第5章描述了处理器如何与其他设备进行交互,内核又是如何响应和控制这些交互的。本章还涵盖了各种设备及其在内核中的实现。
第6章概述文件和目录如何在内核中实现。本章引入了虚拟文件系统,它是用于支持多文件系统的抽象层。本章还跟踪了文件相关操作的执行,如打开和关闭文件。
第7章描述调度程序的操作,调度程序让多个进程运行起来就像系统中只有一个进程在运行一样。本章详细描述了内核如何选择执行哪一个任务,进程切换时如何与硬件进行交互。本章还叙述了什么是内核抢占,它又是怎样执行的。最后,描述了系统时钟的工作原理,内核怎样使用它计时。
第8章描述电源开和关时都发生些什么。本章对各种处理器处理内核加载的方式进行了跟踪,包括对BIOS、Open Firmware和bootloader的描述。然后,考察了内核启动和初始化时的线性顺序,涉及了前面章节中讨论的所有子系统。
第三部分,描述如何编译内核并与内核进行交互的有效途径。
序言回到顶部↑
“有龙出没”,中世纪地图绘制者碰到未知和危险的地方就如此标记,可能你首次敲入如下命令也有这样的感觉:
cd /usr/src/linux ; ls
“我该从何处入手?”你困惑不已。“我到底在寻找什么?所有这些是怎样放在一起并真正起作用的?”
功能全面的现代操作系统庞大而复杂,有为数不少的子系统,它们之间的交互更是错综复杂而微妙难言。不错,你的确拥有Linux内核源代码(稍后还会详述),但是,从何处开始阅读,应留意哪些地方,该以怎样的顺序浏览代码,这些问题的答案都不是显而易见的。
本书的作用正在于此。它一步一步地让你了解到内核的各个部分,它们如何工作,互相之间怎样关联。本书作者熟知内核,将这些知识贯穿于本书的始终。在学完本书之后,你和内核至少会成为好朋友,乃至产生深厚的情意。
Linux内核是“自由”软件。Richard Stallman在“自由软件的定义”一文 中,说明了软件自由的含义。有两个级别,Freedom 0,运行软件是自由的,这是最基本的自由。紧跟其后的是Freedom 1,探究程序运行原理也是自由的。这种自由往往被忽略,实际上,这才是最重要的,因为学习的最好方式就是观察别人如何做事。在软件世界中,那就意味着阅读别人的程序,并了解他们哪方面做得好,哪方面做得不好。至少在我看来,GNU/Linux之所以在现代计算领域变成一股强大的力量,最根本的原因之一就是GPL协议的自由。你在使用GNU/Linux的每时每刻都会感到这种自由的可贵,别忘了经常默念一下它的好处。
本书充分利用Freedom 1,带你深入研究Linux内核源代码。你会看到所有的一切,有些方面的确做得不错,还有些事也并不尽人意。但是,由于有了Freedom 1,你会看到全貌,并从中学到很多。
况且,这也使我与“Prentice Hall开源软件开发系列丛书”结缘,本书是丛书的第一辑。开发这个系列的想法来自于这样一个理念:阅读代码是学习编程的最好方法。如今这个世界,人们幸福地享有丰富而自由的开源软件,这些源代码正期待着(或许热切渴望着)被大家阅读、理解和赞许。该系列丛书旨在成为你软件开发学习过程中的领路人,即通过尽可能多地展示真实的代码帮助你学好编程。
我真诚地希望你会喜欢本书,并从中获益多多。我也希望本书能激发你的灵感,从而在自由软件和开源世界开创你自己的事业,用这种方式参与进来,那无疑是最令人愉快的了。
祝你学习愉快!
Arnold Robbins
丛书主编
cd /usr/src/linux ; ls
“我该从何处入手?”你困惑不已。“我到底在寻找什么?所有这些是怎样放在一起并真正起作用的?”
功能全面的现代操作系统庞大而复杂,有为数不少的子系统,它们之间的交互更是错综复杂而微妙难言。不错,你的确拥有Linux内核源代码(稍后还会详述),但是,从何处开始阅读,应留意哪些地方,该以怎样的顺序浏览代码,这些问题的答案都不是显而易见的。
本书的作用正在于此。它一步一步地让你了解到内核的各个部分,它们如何工作,互相之间怎样关联。本书作者熟知内核,将这些知识贯穿于本书的始终。在学完本书之后,你和内核至少会成为好朋友,乃至产生深厚的情意。
Linux内核是“自由”软件。Richard Stallman在“自由软件的定义”一文 中,说明了软件自由的含义。有两个级别,Freedom 0,运行软件是自由的,这是最基本的自由。紧跟其后的是Freedom 1,探究程序运行原理也是自由的。这种自由往往被忽略,实际上,这才是最重要的,因为学习的最好方式就是观察别人如何做事。在软件世界中,那就意味着阅读别人的程序,并了解他们哪方面做得好,哪方面做得不好。至少在我看来,GNU/Linux之所以在现代计算领域变成一股强大的力量,最根本的原因之一就是GPL协议的自由。你在使用GNU/Linux的每时每刻都会感到这种自由的可贵,别忘了经常默念一下它的好处。
本书充分利用Freedom 1,带你深入研究Linux内核源代码。你会看到所有的一切,有些方面的确做得不错,还有些事也并不尽人意。但是,由于有了Freedom 1,你会看到全貌,并从中学到很多。
况且,这也使我与“Prentice Hall开源软件开发系列丛书”结缘,本书是丛书的第一辑。开发这个系列的想法来自于这样一个理念:阅读代码是学习编程的最好方法。如今这个世界,人们幸福地享有丰富而自由的开源软件,这些源代码正期待着(或许热切渴望着)被大家阅读、理解和赞许。该系列丛书旨在成为你软件开发学习过程中的领路人,即通过尽可能多地展示真实的代码帮助你学好编程。
我真诚地希望你会喜欢本书,并从中获益多多。我也希望本书能激发你的灵感,从而在自由软件和开源世界开创你自己的事业,用这种方式参与进来,那无疑是最令人愉快的了。
祝你学习愉快!
Arnold Robbins
丛书主编
媒体评论回到顶部↑
“本书详细比较了x86和PPC体系结构下的汇编程序,并介绍了分析工具。非常不错!”
——亚马逊读者评论
——亚马逊读者评论







点击看大图






加载中...

