深入Linux内核架构

Wolfgang Mauerer

出版时间

2010-05-01

ISBN

9787115227430

评分

★★★★★
书籍介绍

众所周知,Linux操作系统的源代码复杂、文档少,对程序员的要求高,要想看懂这些代码并不是一件容易事。本书结合内核版本2.6.24源代码中最关键的部分,深入讨论Linux内核的概念、结构和实现。具体包括进程管理和调度、虚拟内存、进程间通信、设备驱动程序、虚拟文件系统、网络、时间管理、数据同步等方面的内容。本书引导你阅读内核源代码,熟悉Linux所有的内在工作机理,充分展现Linux系统的魅力。

本书适合Linux的系统编程人员、系统管理者以及Linux爱好者学习使用。

Wolfgang Mauerer 资深Linux专家,有数十年Linux开发经验。从1997年最初发表关于内核的系列文章开始,他就醉心于解释Linux核心的内部机制、编写相关的文档。此外,他还著有LaTeX排版方面的图书,其撰写的大量文章已经被翻译成7种语言。

AI导读
核心看点
  • 结合2.6内核源码,深入解析进程调度与内存管理
  • 涵盖虚拟文件系统、网络子系统及设备驱动实现
  • 引导读者阅读源码,理解Linux内核工作机理
适合谁读
  • Linux系统编程人员与系统管理员
  • 希望深入理解内核机制的Linux爱好者
  • 具备C语言基础及计算机体系结构知识者
读前提醒
  • 基于2.6版本,与新版内核存在差异,需留意
  • 建议对照英文原版阅读,以规避翻译错误
  • 需具备硬件架构及多任务系统等前置知识
读者共识
  • 逻辑性强,比ULK更侧重设计原理与代码结合
  • 内容详尽但篇幅巨大,需投入大量时间精读
  • 部分翻译存在瑕疵,建议参考英文原版

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "AMD64系统地址空间的设置在某些方面比IA-32容易,但在另一些方面要困难。虽然64位地址空间避免了古怪的高端内存域,但有另一个因素使情况复杂化。64位地址空间的跨度太大,当前没有什么应用程序需要这个。因此,当前只实现了一个比较小的物理地址空间,地址字宽度为48位。这在不失灵活性的前提下,简化并加速了地址转换。48位宽的地址字可以寻址256 TiB的地址空间,或256x1024 GiB,即使对Firefox也足够了!"
  • "内核很神奇,但归根结底它只是一个大的C程序,带有一些汇编代码(不时出现很少量的“黑巫术”)。是什么使得内核如此吸引人?原因有几个。首要一点在于,内核是由世界上最好的程序员编写的,源代码可以证实这一点。其结构良好,细节一丝不苟,巧妙的解决方案在代码中处处可见。一言以蔽之:内核应该是什么样子,它现在就是什么样子。但这并不意味着内核是应用教科书风格的程序设计方法学得出的产品。尽管内核采用了设计得非常干净的抽象,以保持代码的模块化和易管理性,但这一点与内核的其他方面混合起来,使得代码非常有趣和独特。在必要的情况下,内核会以上下文相关的方式重用比特位置,多次重载结构成员,从指针已经对齐的部分压榨出又一个"
  • "However, if the sleeper has accumulated a large unfairness as indicated by a large se_vruntime value, the kernel must honor this. If se->vruntime is larger than the previously computed difference, it is kept as the vruntime of the process, which leads to a leftward placement on the red-black tree — "
  • "网络子系统是内核中涉及面最广、要求最高的部分之一。为什么是这样呢?答案是,该子系统处理了大量特定于协议的细节和微妙之处,穿越各层的代码路径中有大量的函数指针,而没有直接的函数调用。这是不可避免的,因为各个层次有多种组合方式,这显然不会使代码路径变得更清楚或更易于跟踪。此外,其中涉及的数据结构通常彼此紧密关联。"
  • "尽管英特尔处理器区分4种特权级别,但Liux只使用两种不同的状态:核心态和用户状态。两种状态的关键差别在于对高于TASK_SIZE的内存区域的访问。简而言之,在用户状态禁止访问内核空间。用户进程不能操作或读取内核空间中的数据,也无法执行内核空间中的代码。这是内核的专用领域。这种机制可防止进程无意间修改彼此的数据而造成相互干扰。 从用户状态到核心态的切换通过系统调用的特定转换手段完成,且系统调用的执行因具体系统而不同。如果普通进程想要执行任何影响整个系统的操作(例如操作输入/输出装置),则只能借助于系统调用向内核发出请求。内核首先检查进程是否允许执行想要的操作,然后代表进程执行所需的操作,接下来"
  • "A different solution that is less demanding on resources is provided by namespaces. Instead of using virtualized systems such that one physical machine can run multiple kernels — which may well be from different operating systems — in parallel, a single kernel operates on a physical machine, and all"
作者简介
Wolfgang Mauerer 资深Linux专家,有数十年Linux开发经验。从1997年最初发表关于内核的系列文章开始,他就醉心于解释Linux核心的内部机制、编写相关的文档。此外,他还著有LaTeX排版方面的图书,其撰写的大量文章已经被翻译成7种语言。
目录
第1章 简介和概述
第2章 进程管理和调度
第3章 内存管理
第4章 进程虚拟内存
第5章 锁与进程间通信

显示全部
用户评论
其实整个讲解思路是很好的,但太多细节上的不认真,以及老是扯些没用的东西让人绕晕非常打击看书的信心。
在内核设计的why和how上比ULK讲得好,ULK在what上着墨太多。
操作系统课程+C程序设计+看代码~~~ 好书以后慢慢看~~~
推荐
写的非常全,但是Linux2.6已经显老。相当具有参考意义。可以多读几遍
今天终于读完了,陪了我一年半的地铁时光,配合翻阅相关的源码,过程时而痛苦时而欣喜。当然求了甚解也扛不住遗忘,前面的很多知识都只剩下轮廓了。书的思路非常利于阅读,当然错漏也不少,如果能好好修订一下会更好。
我觉得比understanding the linux kernel 3td 要好。我才读了300页不到。 不时翻翻,应该也算看完了。目前来说版本略微有点过时了。
快速读了一遍,太多细节不懂,对于Java程序员来说太难了,不过网络文件系统页面部分还是值得看
挺详细。架构不太清晰。概念解释不彻底。
入门,还有许多知识点需要继续了解。
下载
收藏