一、译者序

Linux是一个全新的世界,世界意味着博大精深,而新或许代表对旧的割舍和扬弃,加在一起,就是要我们在割舍和扬弃的同时还要积累知识到博大精深的地步,这容易做到吗?是的,这不容易做到。Gerald M. Weinberg在《Becoming a Technical Leader: An
Organic Problem-Solving Approach》一书中将成长总结为高原-低谷模式:“成长是跳跃式的,要经过量的积累,在积累的过程中,往往要伴随着扬弃,所以常常会跌入低谷”。面对Linux这个需要长期孜孜以求的学习对象,无疑这种震荡会加重我们的疑虑,降低我们的信心,消磨我们的意志,使我们轻易地认为达到了自己的成长上限。

根据我们的经验,这需要系统的思考来改变心智模式,最好有一个学习型组织来提供帮助:团队是学习的最佳单位。(可以参看彼得.圣吉的《第五项修炼》,这本书值得有心.改变自己并进而改善周围世界的人一读再读。)所以,我们希望结合这本《深入理解Linux内核》创造这样的一个氛围,一种环境。为此我们在www.KernelTravel.net建立了中文网站“内核之旅”,不但有一些有价值的资料,而且我们会把这些资料按照学习路径组织起来,让它们真正伴随内核学习者前进。

二、前言

1、本书的读者对象

如果你对Linux如何工作、其性能又为什么会如此之高怀有强烈的好奇心,你将会从这里找到答案。
阅读本书之后,你会通过上千行代码找到自己的方式来区别重要数据结构和次要数据结构的不同,简而言之,你将成为一名真正的Linux高手。

可以把我们的工作看作是畅游Linux内核的向导:我们讨论了在内核中使用的很多重要的数据结构、算法和编程技巧。在很多例子中,我们逐行讨论了有关代码片段。当然,你手头应当备有Linux源代码,你还应当乐于花一些功夫去解读那些为简洁起见而未完整描述的函数。

另一方面,如果你想更多地了解现代操作系统中的主要设计问题,那么本书将提供颇有价值的见解。本书不是专门针对系统管理员或编程人员的,而是主要针对那些想探究机器内部到底是如何工作的人们的!与任何好向导一i样,我们试图透过现象看其本质。我们还提供了背景材料,例如主要特点的历史及使用它们的理由。

2、材料的组织

开始写这本书时,我们面临重大的抉择:是应该涉及特定的硬件平台,还是跳过与硬件相关的细节而集中于纯粹与硬件无关的内核部分?

有关Linux内核内幕的其他书选择后一种方式:

  • 因为下述理由,我们决定采用前一-种方式:高效率的内核充分利用硬件可利用的特点,诸如寻址技术、高速缓存(cache). 处理器异常(exception).专用指令.处理器控制寄存器等等。如果我们想使你相信,内核在执行一个特殊的任务时确实工作得相当好,那我们必须首先告诉你内核工作在一个什么样的硬件平台上。

  • 即使Unix内核大部分源代码是独立于处理器的,并且用C语言编写,但也有少数重要的部分是用汇编语言编写的。因此,为了充分理解内核,就需要学习一些与硬件打交道的汇编语言片段。

当涉及硬件特征时,我们的策略非常简单:对全部由硬件驱动的特征给予简单描述,而对需要软件支持的特征给予详细描述。事实上,我们感兴趣的是内核的设计而不是计算机的体系结构。

我们下一步就是选择所描述的计算机系统。尽管Linux目前已运行在很多种类的个人计算机(PC)和工作站上,但我们决定把主要精力放在非常流行且便宜的IBMPC兼容机.上,其中微处理器是Intel80x86及PC中所支持的–些芯片。在以后的章节中,术语“Intel80x86微处理器”将表示Intel 80386.80486. Pentium. Pentium Pro、Pentium II. PentiumIII、Pentium4微处理器或兼容模型。在少数情况下,对于特殊的模型会给出明确的说明。

在研究Linux各组件时,我们还必须对所遵循的顺序做出选择。我们尝试的是一种自底向.上的方式:从硬件相关的主题开始,以完全与硬件无关的主题结束。事实上,在本书的初始部分我们将多次引用Intel 80x86微处理器,而其他部分相对来说与硬件无关。不过,第十三章和第十四章是一种例外。实际上,遵循自底向上的方法并不像看起来那样简单,这是因为存储器管理、进程管理和文件系统这几部分相互渗透;少数向前引用(即引用还待解释的主题)是不可避免的。

每章以所通盖内容的理论概述开始,然后按自底向上的方式组织材料。我们以描述每章内容所需要的数据结构开始,然后,我们通常从描述最低级功能移到描述较高级功能,最后说明用户应用程序所发出的系统调用是如何得到支持的。

3、描述级别

支持各种体系结构的Linux源代码包含在14000多个C语言和汇编语言的文件中,这些文件存放在大约1000个子目录中。源代码大约由六百万行代码组成,占230MB以上的.磁盘空间。当然,这本书只能涵盖源代码非常少的一部分。考虑一下你所读的书的全部源代码只占不到3MB的磁盘空间,就能想像出Linux源代码有多么庞大了。因此,即使不对源代码进行解释,只列出所有的代码,75 本书也写不完!

因此,我们必须对要阐述的内容做出选择,我们的决策大致情况如下:我们相当全面地描述了进程管理和内存管理。

我们涵盖了虚拟文件系统以及Ext2和Ext3文件系统,不过,很多功能仅仅是提及而已,并没有对其代码进行详尽描述;我们不讨论Linux所支持的其他文件系统。我们描述了占内核50%左右的设备驱动程序;但仅涉及有关的内核接口,而并不试图分析每个具体的驱动程序。

本书描述的是Linux内核2.6.11的正式版,可以从http://ww.kernel.org站点下载。注意,很多GNU/Linux发布版都对正式内核进行了修改,以实现新的特点或提高其效率。在少数情况下,由你喜爱的发布版所提供的源代码可能与本书所描述的源代码有很大的不同。

在很多实例中,我们展示了以易读但低效的方式重写的原始代码的片段。这些代码片段出现在关键时间点上,在这些点上,程序片段是用手工优化的C语言和汇编代码混合在一起编写的。再次声明,我们的目的是为研究Linux原始代码的人提供一些帮助。

在讨论内核代码时,我们常常同时描述Unix程序员熟悉的很多基础知识(共享内存和映射内存、信号、管道、符号链等等),也许他们听说过这些内容,但可能还想进一步了解。

三、目录

前言
第一章 绪论
Linux与其他类Unix内核的比较
硬件的依赖性
Linux版本
操作系统基本概念
Unix文件系统概述
Unix内核概述

第二章 内存寻址
内存地址
硬件中的分段
Linux中的分段
硬件中的分页
Linux中的分页

第三章 进程
进程、轻量级进程和线程
进程描述符
进程切换
创建进程
撤消进程

第四章 中断和异常
中断信号的作用
中断和异常
中断和异常处理程序的嵌套执行
初始化中断描述符表
异常处理
中断处理
软中断及tasklet
工作队列
从中断和异常返回

第五章 内核同步
内核如何为不同的请求提供服务
同步原语
对内核数据结构的同步访问
避免竞争条件的实例

第六章 定时测量
时钟和定时器电路
Linux计时体系结构
更新时间和日期
更新系统统计数
软定时器和延迟函数
与定时测量相关的系统调用

第七章 进程调度
调度策略
调度算法
调度程序所使用的数据结构
调度程序所使用的函数
多处理器系统中运行队列的平衡
与调度相关的系统调用

第八章 内存管理
页框管理
内存区管理
非连续内存区管理

第九章 进程地址空间
进程的地址空间
内存描述符
线性区
缺页异常处理程序
创建和删除进程的地址空间
堆的管理

第十章 系统调用
POSIX API和系统调用
系统调用处理程序及服务例程
进入和退出系统调用
参数传递
内核封装例程

第十一章 信号
信号的作用
产生信号
传递信号
与信号处理相关的系统调用

第十二章 虚拟文件系统
虚拟文件系统(VFS)的作用
VFS的数据结构
文件系统类型
文件系统处理
路径名查找
VFS系统调用的实现
文件加锁

第十三章 I/O体系结构和设备驱动程序
I/O体系结构
设备驱动程序模型
设备文件
设备驱动程序
字符设备驱动程序

第十四章 块设备驱动程序
块设备的处理
通用块层
I/O调度程序
块设备驱动程序
打开块设备文件

第十五章 页高速缓存
页高速缓存
把块存放在页高速缓存中
把脏页写入磁盘
sync()、fsync()和fdatasync()系统调用

第十六章 访问文件
读写文件
内存映射
直接I/O传送
异步I/O

第十七章 回收页框
页框回收算法
反向映射
PFRA实现
交换

第十八章 Ext2和Ext3文件系统
Ext2的一般特征
Ext2磁盘数据结构
Ext2的内存数据结构
创建Ext2文件系统
Ext2的方法
管理Ext2磁盘空间
Ext3文件系统

第十九章 进程通信
管道
FIFO
System V IPC
POSIX消息队列

第二十章 程序的执行
可执行文件
可执行格式
执行域
exec函数

附录一 系统启动
附录二 模块
参考文献
源代码索引

深入理解Linux内核-第3版 译者序、前言、目录 内核2.6.11相关推荐

  1. 深入理解Linux内核-第3版 第二章 内存寻址 内核2.6.11 强调:本章出现参见其他章节的地方不做深究,留到看到对应章节时深究

    本章介绍寻址技术.值得庆幸的是,操作系统自身不必完全了解物理内存:如今的微处理器包含的硬件线路使内存管理既高效又健壮,所以编程错误就不会对该程序之外的内存产生非法访问. 作为本书的一部分,本章将详细描 ...

  2. 《Jquery实战》第3版:译者序 Frank Xu Lei

    jQuery作为最流行的前端开发框架!是Web前端开发必备技能!我非常荣幸可以参与翻译<jQuery in Action>第3版,这是jQuery之父John Resig和jQuery基金 ...

  3. 《Linux游戏编程》——理解Linux文件系统标准

    Linux游戏编程 Programming Linux Games [美]John R. Hall 著 作者:[美]John R. Hall 单位:Loki Software, Inc. 时间:200 ...

  4. 深入理解Linux进程调度(0.4)

    学习方法论 写作原则 标题括号中的数字代表完成度与完善度 0.0-1.0 代表完成度,1.1-1.5 代表完善度 0.0 :还没开始写 0.1 :写了一个简介 0.3 :写了一小部分内容 0.5 :写 ...

  5. 深入理解Linux内存管理(0.3)

    学习方法论 写作原则 标题括号中的数字代表完成度与完善度 0.0-1.0 代表完成度,1.1-1.5 代表完善度 0.0 :还没开始写 0.1 :写了一个简介 0.3 :写了一小部分内容 0.5 :写 ...

  6. 深入理解Linux内核第3版--笔记-1.pdf

    深入理解Linux内核第3版.pdf         Understanding the Linux Kernel, 3rd Edition Preface    The Audience for T ...

  7. 深入理解LINUX内核(影印版第3版)》的笔记

    书名: 深入理解LINUX内核(影印版第3版) 作者: Daniel P.Bovet/Marco Cesati 副标题: Understanding the Linux Kernel 页数: 923 ...

  8. 深入理解LINUX内核 第三版2.6 笔记

    目录 第二章 内存寻址 分段 P41 Linux分段 P46 硬件中的分页 P50 第三章 进程 第四章 中断和异常 第五章 内核同步 第六章 定时测量 第七章 进程调度 第八章 内存管理 页框管理 ...

  9. 《深入理解Linux内核中文第三版》学习笔记——第7章 进程调度

    文章目录 第7章 进程调度 7.1. 调度策略 7.1.1. 进程的抢占 7.1.2. 一个时间片必须持续多长? 7.2. 调度算法 7.2.1. 普通进程的调度 基本时间片 动态优先级和平均睡眠时间 ...

最新文章

  1. var_export-输出或返回一个变量的字符串表示
  2. 动态检测secure日志文件,iptables拒绝恶意IP
  3. linux服务器垃圾箱,如何将Linux rm命令删除的文件放入垃圾箱
  4. python中join的用法
  5. android适配器持有者模式
  6. Java最佳实践– Char到Byte和Byte到Char的转换
  7. 依赖项出现感叹号怎么办_SpringBoot中如何对依赖进行管理?
  8. c#winform演练 ktv项目 MediaPlayer控件播放音乐
  9. 全国计算机等级内容,全国计算机等级内容
  10. shiro-cas------整合springboot客户端
  11. tomcat启动报错 关键字:java.lang.NoClassDefFoundError和 java.lang.ClassNotFoundExceeption
  12. uiso9|uiso9_cn.exe
  13. python花瓣网图片_python制作花瓣网美女图片爬虫
  14. MTK6589抓取Log,VM_Log,pcm data,寄存器抓取方法
  15. 临近空间大气环境特性
  16. 吉他调音器(1)之十二平均律
  17. 软件项目管理期末复习整理
  18. JSON.stringify(value[, replacer [, space]])
  19. 科达与中航工业签署战略合作协议
  20. 新版Q绑查询HTML源码

热门文章

  1. ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
  2. 深圳高新区发展专项计划管理办法(征求意见稿)
  3. CentOS7下利用qBittorrent+Flex搭建自己的在线视频播放站
  4. 点开计算机左侧没有桌面一项,为什么,我的电脑右键点选桌面空白弹出的右键选单里面没有了“萤幕解析度”一项啊?怎么添加回来啊急!1...
  5. 非均匀三次B样条曲线插值实现及MATLAB代码
  6. Neokylin7安装gedit
  7. 基于神经网络识别抑郁症附matlab代码
  8. 腾讯视频投屏显示无法连接服务器,腾讯视频突然不能投屏怎么办 投屏连接失败解决方法...
  9. 无线攻击 --aircrack-ng套件之一:Airbase-ng(攻击客户端多用途工具)
  10. 用VHDL编写testbench激励文件