【内容】
内容简要







《Linux内核设计与实现(原书第3版)》详细描述了Linux内核的设计与实现。内核代码的编写者、开发者以及程序开发人员都可以通过阅读本书受益,他们可以更好理解作系统原理,并将其应用在自己的编码中以提率和生产率。
  本书详细描述了Linux内核的主要子系统和特点,包括Linux内核的设计、实现和接口。从理论到实践涵盖了Linux内核的方方面面,可以满足读者的各种兴趣和需求。
  作者Robert Love是一位Linux内核核心开发人员,他分享了在开发Linux
2.6内核过程中颇具价值的知识和经验。本书的主题包括进程管理、进程调度、时间管理和定时器、系统调用接口、内存寻址、内存管理和页缓存、VFS、内核同步、移植性相关的问题以及调试技术。同时本书也涵盖了Linux
2.6内核中颇具的内容,包括CFS调度程序、抢占式内核、块I/O层以及I/O调度程序。
  《Linux内核设计与实现(原书第3版)》新增内容包括:
  增加一章专门描述内核数据结构
  详细描述中断处理程序和下半部机制
 扩充虚拟内存和内存分配的内容
 调试Linux内核的技巧
 内核同步和锁机制的深度描述
 提交内核补丁以及参与Linux内核社区的建设性建议







目录







译者序
序言
前言
作者简介
第1章 Linux内核简介1
 1.1 Unix的历史1
 1.2 追寻Linus足迹:Linux简介2
 1.3 作系统和内核简介3
 1.4 Linux内核和传统Unix内核的比较5
 1.5 Linux内核版本7
 1.6 Linux内核开发者社区8
 1.7 小结8
第2章 从内核出发10
 2.1 获取内核源码10
 2.1.1 使用Git10
 2.1.1 安装内核源代码10
 2.1.3 使用补丁11
 2.2 内核源码树11
 2.3 编译内核12
 2.3.1 配置内核12
 2.3.2 减少编译的垃圾信息14
 2.3.3 衍生多个编译作业 14
 2.3.4 安装新内核14
 2.4 内核开发的特点15
 2.4.1 无libc库抑或无标准头文件15
 2.4.2 GNU C16
 2.4.3 没有内存保护机制18
 2.4.4 不要轻易在内核中使用浮点数18
 2.4.5 容积小而固定的栈18
 2.4.6 同步和并发18
 2.4.7 可移植性的重要性19
 2.5 小结19
第3章 进程管理20
 3.1 进程20
 3.2 进程描述符及任务结构 21
 3.2.1 分配进程描述符22
 3.2.2 进程描述符的存放23
 3.2.3 进程状态23
 3.2.4 设置当前进程状态25
 3.2.5 进程上下文25
 3.2.6 进程家族树25
 3.3 进程创建26
 3.3.1 写时拷贝27
 3.3.2 fork()27
 3.3.3 vfork()28
 3.4 线程在Linux中的实现28
 3.4.1 创建线程29
 3.4.2 内核线程30
 3.5 进程终结31
 3.5.1 删除进程描述符32
 3.5.2 孤儿进程造成的进退维谷32
 3.6 小结34
第4章 进程调度35
 4.1 多任务35
 4.2 Linux 的进程调度36
 4.3 策略36
 4.3.1 I/O消耗型和处理器消耗型的进程36
 4.3.2 进程优先级37
 4.3.3 时间片38
 4.3.4 调度策略的活动38
 4.4 Linux调度算法39
 4.4.1 调度器类39
 4.4.2 Unix 系统中的进程调度40
 4.4.3 公平调度41
 4.5 Linux调度的实现42
 4.5.1 时间记账42
 4.5.2 进程选择44
 4.5.3 调度器入口48
 4.5.4 睡眠和唤醒49
 4.6 抢占和上下文切换51
 4.6.1 用户抢占53
 4.6.2 内核抢占53
 4.7 实时调度策略54
 4.8 与调度相关的系统调用54
 4.8.1 与调度策略和优先级相关的系统调用55
 4.8.2 与处理器绑定有关的系统调用55
 4.8.3 放弃处理器时间56
 4.9 小结56
第5章 系统调用57
 5.1 与内核通信57
 5.2 API、POSIX和C库57
 5.3 系统调用58
 5.3.1 系统调用号59
 5.3.2 系统调用的性能59
 5.4 系统调用处理程序60
 5.4.1 指定恰当的系统调用60
 5.4.2 参数传递60
 5.5 系统调用的实现61
 5.5.1 实现系统调用61
 5.5.2 参数验证62
 5.6 系统调用上下文64
 5.6.1 绑定一个系统调用的后步骤65
 5.6.2 从用户空间访问系统调用67
 5.6.3 为什么不通过系统调用的方式实现68
 5.7 小结68
第6章 内核数据结构69
 6.1 链表69
 6.1.1 单向链表和双向链表69
 6.1.2 环形链表70
 6.1.3 沿链表移动71
 6.1.4 Linux 内核中的实现71
 6.1.5 作链表73
 6.1.6 遍历链表75
 6.2 队列78
 6.2.1 kfifo79
 6.2.2 创建队列79
 6.2.3 推入队列数据79
 6.2.4 摘取队列数据80
 6.2.5 获取队列长度80
 6.2.6 重置和撤销队列80
 6.2.7 队列使用举例 81
 6.3 映射 81
 6.3.1 初始化一个idr82
 6.3.2 分配







媒体评论







《Linux内核设计与实现》相对于Daniel P. Bovet和Marco
Cesati的内核巨著《Understanding the Linux Kernel》,少了五分细节;相对于实践经典《Linux
Device
Drivers》,又多了五分说理。可以说,本书填补了Linux内核理论和实践之间的鸿沟,真可谓“一桥飞架南北,天堑变通途”。—译者
  能够把linux内核的内容在300多页内叙述一遍,本身就是一件高难度的事情。但这本《Linux内核设计与实现》确实做到了。全书很少涉及具体实现,而是把握思想,讲解算法,读者可以学习到linux内核的知识,而不用纠缠于具体细节。—豆瓣读者Googol
  《Linux内核设计与实现》很适合系统学习了OS理论之后直接看代码详解又觉得暂且还不够功力的读者,它可以带你由理论学习阶段逐渐过渡到实践阶段。这本书对Linux内核内容的范围和深度把握得恰到好处。—豆瓣读者纳兰经若
  《Linux内核设计与实现》不错,内核相关概念及如何使用内核介绍得到位。在阅读的过程中结合深入理解Linux内核就更好了。相对来说,本书偏应用,主要强调如何用,以及为了用而需要了解的内核实现。—china-pub读者
Herobpa
  《Linux内核设计与实现》不是源码讲解,而是对整体框架的解析,更侧重理解。在学习《作系统原理》这样的课程时,可以把本书作为一个作系统例子来加深理解。这本书可以作为研究Linux源码的一个铺垫。这是一本好的辅助书,是研究作系统和Linux内核的必不可少的资料。—china-pub读者
Fatmouse
  《Linux内核设计与实现》语言简练,通俗易懂,对源代码的关键部分进行了准确解释,是新手敲开Linux内核大门的选择。—china-pub读者
Zhouzhen26617809
  《Linux内核设计与实现》言简意赅,带我走进了Linux内核的。—china-pub读者 Zwlan







摘要







不知不觉涉足Linux内核已经十多个年头了,与其他有志(兴趣)于此的朋友一样,我们也经历了学习—实用—追踪—再学习的过程。也就是说,我们也是从漫无边际到茫然无措,再到初窥门径,转而觉得心有戚戚焉这一路走下来的。其中甘苦,犹然在心。
  Linux为人称道的莫过于它的自由精神,所有源代码唾手可得。侯捷先生云:“源码在前,了无秘密。”是的,但是我们在面对它的时候,为什么却总是因为这种规模和层面所造就的陡峭学习曲线陷入困顿呢?很多朋友就此倒下,纵然Linux繁花似锦,纵然内核天空无边广阔,但是,眼前的迷雾重重,心中的阴霾又怎能被阳光驱散呢?纵有雄心壮志,拔剑四顾心茫然,脚下路在何方?
  Linux内核入门是不容易,它之所以难学,在于庞大的规模和复杂的层面。规模一大,就不易现出本来面目,浑然一体,自然不容易找到着手之处;层面一多,就会让人眼花缭乱,盘根错节,怎能让人提纲挈领?
  “如果有这样一本书,既能提纲挈领,为我理顺思绪,指引方向,同时又能照顾小节,阐述细微,帮助我们更好更快地理解STL源码,那该有多好。”孟岩先生如此说,虽然针对的是C++,但道出的是研习源码的人们共同的心声。然而,Linux源码研究的方法却不大相同。这还是由于规模和层面决定的。比如说,在语言学习中,我们可以采取小步快跑的方法,通过一个个小程序和小尝试,就可以取得渐进的成果,就能从新技术中有所收获。而掌握Linux呢?如果没有对整体的把握,即使你对某个局部的算法、技术或是代码再熟悉,也无法将其融入实用。其实,像内核这样的大规模的软件,正是编程技术施展身手的舞台(当然,目前的内核虽然包含了一些面向对象思想,但还不能让C++一展身手)。
  那么,我们能不能做点什么,让Linux的内核学习过程更符合程序员的习惯呢?
  Robert Love回答了这个问题。Robert
Love是一个狂热的内核爱好者,所以他的想法自然贴近程序员。是的,我们注定要在对所有核心的子系统有了全面认识之后,才能开始自己的实践,但却可以舍弃细枝末节,将行李压缩到小,自然可以轻装快走,迅速进入动手阶段。
  因此,相对于Daniel P. Bovet和Marco Cesati的内核巨著《Understanding the Linux
Kernel》,《Linux内核设计与实现(原书第3版)》少了五分细节;相对于实践经典《Linux Device
Drivers》,它多了五分说理。可以说,《Linux内核设计与实现(原书第3版)》填补了Linux内核理论和实践之间的鸿沟,真可谓“一桥飞架南北,天堑变通途”。
  就我们的经验,内核初学者(不是编程初学者)可以从本书着手,对内核各个核心子系统有个整体把握,包括它们提供什么样的服务,为什么要提供这样的服务,又是怎样实现的。而且,本书还包含了Linux内核开发者在开发时需要用到的很多信息,包括调试技术、编程风格、注意事项等。在消化本书的基础上,如果你侧重于了解内核,可以进一步研究《Understanding
the Linux Kernel》和源代码本身;如果你侧重于实际编程,可以研读《Linux Device
Drivers》,直接开始动手工作;如果你想有一个轻松的内核学习和实践环节,请访问我们的网站www.kerneltravel.net。
  Linux内核是一艘永不停息的轮船,它将驶向何方我们并不知晓,但在这些变化的背后,总有一些原理是恒定不变的,总有一些变化是我们想知晓的,比如调度程序的大幅度改进,内核性能的不断提升,本书第3版虽然针对的是较新的2.6.34
Linux内核版本,但在旧版本上积累的知识和经验依然有效,而新增内容将使读者在应对变化了的内核代码时更加从容。
  感谢牛涛和武特,他们在第2版和第3版差异
【目录】
书名:Linux内核设计与实现(原书第3版)


:69.00元


作者:(美)拉芙 著,陈莉君,康华 译


出版社:机械工业出版社


出版日期:2011-06-01


ISBN:9787111338291


字数:277


页码:335


版次:1


装帧:平装


开本:16开
返回顶部