内容简介 · · · · · ·
本书的第1版广获好评,版权被中国台湾和美国两家大型出版社引进,第2版根据读者的反馈和作者对操作系统的最新研究成果对第1版进行了大幅优化和重写,使其内容质量更上一层楼。本书在众多关于Linux内核的书中独树一帜,它在世界范围内首次提出并阐述了操作系统设计的核心指导思想主奴机制,这是所有操作系统研究者的一笔宝贵财富。它也是一本能真正引导我们较为容易地、极为透彻地理解Linux内核的经典之作,也可能是当前唯一能从本质上指引我们去设计和开发拥有自主知识产权的操作系统的著作。
本书的最大特点是它的写作方式和内容组织方式与同类书完全不同。它在深刻地分析了传统讲解方法的利弊之后,破旧立新,从认知学的角度开创了一种全新的方式。以操作系统的真实运行过程为主线,结合真实的内核源代码、300余幅精确的内核运行时序图和具有点睛之妙的文字说明,对操作系统从开机加电到系统完全准...
本书的第1版广获好评,版权被中国台湾和美国两家大型出版社引进,第2版根据读者的反馈和作者对操作系统的最新研究成果对第1版进行了大幅优化和重写,使其内容质量更上一层楼。本书在众多关于Linux内核的书中独树一帜,它在世界范围内首次提出并阐述了操作系统设计的核心指导思想主奴机制,这是所有操作系统研究者的一笔宝贵财富。它也是一本能真正引导我们较为容易地、极为透彻地理解Linux内核的经典之作,也可能是当前唯一能从本质上指引我们去设计和开发拥有自主知识产权的操作系统的著作。
本书的最大特点是它的写作方式和内容组织方式与同类书完全不同。它在深刻地分析了传统讲解方法的利弊之后,破旧立新,从认知学的角度开创了一种全新的方式。以操作系统的真实运行过程为主线,结合真实的内核源代码、300余幅精确的内核运行时序图和具有点睛之妙的文字说明,对操作系统从开机加电到系统完全准备就绪,及运行用户程序的整个过程进行了系统而完整地分析,深刻地揭示了其间每一个动作的设计意图和实现原理,完美地再现了操作系统设计者的设计思路。阅读本书就如同跟随着操作系统设计者一起去思考,我们会在阅读的过程中发现Linux内核设计的精妙,会发现原来处处都“暗藏玄机”,哪怕是一行很短的代码。
本书在所有细节上都力求完美。为了保证知识的准确性,操作系统运行过程中的每个动作都经过了严格的考证;为了让我们真正理解Linux内核的原理,它突破传统,以Linux的真实运行过程为主线进行讲解;为了做到真正易于理解,创新性地使用了图解的方式,精心绘制了300余幅分辨率600dpi的时序图,图中表现的运行时结构和状态与操作系统实际运行时的真实状态完全吻合;为了提高阅读体验,本书采用了双色印刷,以便于我们更清楚地观察每一幅图中的细节。
作者简介 · · · · · ·
新设计团队,一直在为设计一个自主的、有所突破和创新的操作系统而努力。为了让新的成员能更快、更容易地理解操作系统的精髓,从更高的角度去鉴赏和发现操作系统设计中的精妙与不足,团队成员以Linux0.11内核为例,对操作系统的设计思想和实现原理进行了深刻地剖析,取得了十分好的效果,很好地培养和锻炼了团队成员对操作系统的驾驭能力。为了实现让国人也能设计出自己的操作系统的目标,本书作者团队无私地将他们的独特研究方式与研究成果奉献了出来,希望所有想要深刻理解Linux内核和操作系统设计思想的朋友能从中受益。
本书的特点在于,既不是空泛地讲理论,也不是单纯地从语法的角度去逐行地分析源代码,而是以操作系统在实际运行中的几个经典事件为主线,将理论和实际结合在一起,精准地再现了操作系统在实际运行中究竟是如何运转的。宏观上,大家可以领略Linux0.11内核的设计指导思想...
新设计团队,一直在为设计一个自主的、有所突破和创新的操作系统而努力。为了让新的成员能更快、更容易地理解操作系统的精髓,从更高的角度去鉴赏和发现操作系统设计中的精妙与不足,团队成员以Linux0.11内核为例,对操作系统的设计思想和实现原理进行了深刻地剖析,取得了十分好的效果,很好地培养和锻炼了团队成员对操作系统的驾驭能力。为了实现让国人也能设计出自己的操作系统的目标,本书作者团队无私地将他们的独特研究方式与研究成果奉献了出来,希望所有想要深刻理解Linux内核和操作系统设计思想的朋友能从中受益。
本书的特点在于,既不是空泛地讲理论,也不是单纯地从语法的角度去逐行地分析源代码,而是以操作系统在实际运行中的几个经典事件为主线,将理论和实际结合在一起,精准地再现了操作系统在实际运行中究竟是如何运转的。宏观上,大家可以领略Linux0.11内核的设计指导思想,可以了解到各个环节是如何牵制并保持平衡的,以及软件和硬件之间是如何互相依赖、互相促进的;微观上,大家可以看到每一个细节的实现方式和其中的精妙之处。
目录 · · · · · ·
第1章从开机加电到执行
main函数之前的过程
1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
1.1.1 BIOS的启动原理
1.1.2 BIOS 在内存中加载中断向量表和中断服务程序
· · · · · · (更多)
第1章从开机加电到执行
main函数之前的过程
1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
1.1.1 BIOS的启动原理
1.1.2 BIOS 在内存中加载中断向量表和中断服务程序
1.2 加载操作系统内核程序并为保护模式做准备
1.2.1 加载第一部分内核代码--引导程序(bootsect)
1.2.2 加载第二部分内核代码--setup
1.2.3 加载第三部分内核代码--system模块
1.3 开始向32位模式转变,为main函数的调用做准备
1.3.1 关中断并将system移动到内存地址起始位置0x0000
1.3.2 设置中断描述符表和全局描述符表
1.3.3 打开A20,实现32位寻址
1.3.4 为保护模式下执行head.s做准备
1.3.5 head.s开始执行
1.4 本章小结
第2章设备环境初始化及激活进程
2.1 设置根设备、硬盘
2.2 规划物理内存格局,设置缓冲区、虚拟盘、主内存
2.3 设置虚拟盘空间并初始化
2.4 内存管理结构mem_map初始化
2.5 异常处理类中断服务程序挂接
2.6 初始化块设备请求项结构
2.7 与建立人机交互界面相关的外设的中断服务程序挂接
2.7.1 对串行口进行设置
2.7.2 对显示器进行设置
2.7.3 对键盘进行设置
2.8 开机启动时间设置
2.9 初始化进程
2.9.1 初始化进程
2.9.2 设置时钟中断
2.9.3 设置系统调用总入口
2.10 初始化缓冲区管理结构
2.11 初始化硬盘
2.12 初始化软盘
2.13 开启中断
2.14 进程0由0特权级翻转到3特权级,成为真正的进程
2.15 本章小结
第3章进程1的创建及执行
3.1 进程1的创建
3.1.1 进程0创建进程
3.1.2 在task[64]中为进程1申请一个空闲位置并获取进程号
3.1.3 调用copy_process函数
3.1.4 设置进程1的分页管理
3.1.5 进程1共享进程0的文件
3.1.6 设置进程1在GDT中的表项
3.1.7 进程1处于就绪态
3.2 内核第一次做进程调度
3.3 轮转到进程1执行
3.3.1 进程1为安装硬盘文件系统做准备
3.3.2 进程1格式化虚拟盘并更换根设备为虚拟盘
3.3.3 进程1在根设备上加载根文件系统
3.4 本章小结
第4章进程2的创建及执行
4.1 打开终端设备文件及复制文件句柄
4.1.1 打开标准输入设备文件
4.1.2 打开标准输出、标准错误输出设备文件
4.2 进程1创建进程2并切换到进程2执行
4.3 加载shell程序
4.3.1 关闭标准输入设备文件,打开rc文件
4.3.2 检测shell文件
4.3.3 为shell程序的执行做准备
4.3.4 执行shell程序
4.4 系统实现怠速
4.4.1 创建update进程
4.4.2 切换到shell进程执行
4.4.3 重建shell
4.5 本章小结
第5章文件操作
5.1 安装文件系统
5.1.1 获取外设的超级块
5.1.2 确定根文件系统的挂接点
5.1.3 将超级块与根文件系统挂接
5.2 打开文件
5.2.1 将进程的*filp[20]与file_table[64]挂接
5.2.2 获取文件i节点
5.2.3 将文件i节点与file_table[64]挂接
5.3 读文件
5.3.1 确定数据块在外设中的位置
5.3.2 将数据块读入缓冲块
5.3.3 将缓冲块中的数据复制到进程空间
5.4 新建文件
5.4.1 查找文件
5.4.2 新建文件i节点
5.4.3 新建文件目录项
5.5 写文件
5.5.1 确定文件的写入位置
5.5.2 申请缓冲块
5.5.3 将指定的数据从进程空间复制到缓冲块
5.5.4 数据同步到外设的两种方法
5.6 修改文件
5.6.1 重定位文件的当前操作指针
5.6.2 修改文件
5.7 关闭文件
5.7.1 当前进程的filp与file_table[64]脱钩
5.7.2 文件i节点被释放
5.8 删除文件
5.8.1 对文件的删除条件进行检查
5.8.2 进行具体的删除工作
5.9 本章小结
第6章用户进程与内存管理
6.1 线性地址的保护
6.1.1 进程线性地址空间的格局
6.1.2 段基址、段限长、GDT、LDT、特权级
6.2 分页
6.2.1 线性地址映射到物理地址
6.2.2 进程执行时分页
6.2.3 进程共享页面
6.2.4 内核分页
6.3 一个用户进程从创建到退出的完整过程
6.3.1 创建str1进程
6.3.2 str1进程加载的准备工作
6.3.3 str1进程的运行、加载
6.3.4 str1进程的退出
6.4 多个用户进程同时运行
6.4.1 进程调度
6.4.2 页写保护
6.5 本章小结
第7章缓冲区和多进程操作文件
7.1 缓冲区的作用
7.2 缓冲区的总体结构
7.3 b_dev、b_blocknr及request的作用
7.3.1 保证进程与缓冲块数据交互的正确性
7.3.2 让数据在缓冲区中停留的时间尽可能长
7.4 uptodate和dirt的作用
7.4.1 b_uptodate的作用
7.4.2 b_dirt的作用
7.4.3 i_uptodate、i_dirt和s_dirt的作用
7.5 count、 lock、wait、request的作用
7.5.1 b_count的作用
7.5.2 i_count的作用
7.5.3 b_lock、*b_wait的作用
7.5.4 i_lock、i_wait、s_lock、*s_wait的作用
7.5.5 补充request的作用
7.6 实例1:关于缓冲块的进程等待队列
7.7 总体来看缓冲块和请求项
7.8 实例2:多进程操作文件的综合实例
7.9 本章小结
第8章进程间通信
8.1 管道机制
8.1.1 管道的创建过程
8.1.2 管道的操作
8.2 信号机制
8.2.1 信号的使用
8.2.2 信号对进程执行状态的影响
8.3 本章小结
第9章操作系统的设计指导思想
9.1 运行一个最简单的程序,看操作系统为程序运行做了哪些工作
9.2 操作系统的设计指导思想--主奴机制
9.2.1 主奴机制中的进程及进程创建机制
9.2.2 操作系统的设计如何体现主奴机制
9.3 实现主奴机制的三种关键技术
9.3.1 保护和分页
9.3.2 特权级
9.3.3 中断
9.4 建立主奴机制的决定性因素--先机
9.5 软件和硬件的关系
9.5.1 非用户进程--进程0、进程1、shell进程
9.5.2 文件与数据存储
9.6 父子进程共享页面
9.7 操作系统的全局中断与进程的局部中断--信号
9.8 本章小结
结束语
“新设计团队”简介
· · · · · · (收起)
原文摘录 · · · · · ·
丛书信息
· · · · · ·
喜欢读"Linux 内核设计的艺术(第2版)"的人也喜欢 · · · · · ·
- 深入Linux内核架构 9.0
- 操作系统设计:Xinu方法 8.7
- 自制编译器 8.1
- 并行程序设计原理 8.2
- Scala 编程实战 8.3
- 程序员的自我修养 8.9
- 深入理解C指针 8.5
- 现代体系结构上的UNIX系统 8.6
Linux 内核设计的艺术(第2版)的书评 · · · · · · ( 全部 26 条 )
看Linux 0.11的代码不如做MIT的JOS实验
> 更多书评 26篇
论坛 · · · · · ·
在这本书的论坛里发言这本书的其他版本 · · · · · · ( 全部3 )
-
机械工业出版社 (2011)6.3分 142人读过
-
Auerbach Publications (2014)暂无评分 1人读过
在哪儿借这本书 · · · · · ·
以下书单推荐 · · · · · · ( 全部 )
- 杨福川策划的图书 (出版人杨福川)
- Unix/Linux操作系统 (whg)
- T (dhcn)
- Linux&Unix技术系列 (出版人杨福川)
- 技术-Linux (Edward Cheng)
谁读这本书? · · · · · ·
二手市场
· · · · · ·
- 在豆瓣转让 有542人想读,手里有一本闲着?
订阅关于Linux 内核设计的艺术(第2版)的评论:
feed: rss 2.0
0 有用 球化易形体 2015-04-05 17:07:03
图示得很到位。我看懂了加电到main函数之前的过程,之后就因为分页机制、调用之类的图示不很理解,偶尔出现的汇编而糊涂了,感觉还要再学几个月、写几个月的程序后再来学习比较合适。另外,这个主要是加深对底层的理解。平常还是写应用程序的,也不是那么着急。
0 有用 阅微草堂 2022-08-02 07:47:04
以内存的布局和内存的使用为核心讲解内核0.11,思路是对的---存储式机器理念。第二个关键:IDT表作为整体的数据结构关联了所有的函数和操作这个思想通过画图表示有启发。第三个main程序启动了三个进程,而0号进程作为特殊进程存在,第四将内核代码区与数据区分的很清晰这个概念和感觉特别重要。个别核心的代码是之前没有理解的,读程序的时候牢记数据结构,很多数据结构的操作会隐藏核心的计算和映射关系。这本书可... 以内存的布局和内存的使用为核心讲解内核0.11,思路是对的---存储式机器理念。第二个关键:IDT表作为整体的数据结构关联了所有的函数和操作这个思想通过画图表示有启发。第三个main程序启动了三个进程,而0号进程作为特殊进程存在,第四将内核代码区与数据区分的很清晰这个概念和感觉特别重要。个别核心的代码是之前没有理解的,读程序的时候牢记数据结构,很多数据结构的操作会隐藏核心的计算和映射关系。这本书可以作为理解和学习OS的入门和进阶的最后一环! (展开)
0 有用 小太爷 2020-08-24 21:35:20
适合源码学习,一,九章有启发
0 有用 Nemo 2014-11-07 18:39:06
很形象的图,跟赵炯的"内核完全解析"可以一起结合来看
0 有用 上校的金鱼 2019-07-28 16:31:11
非常详细的源码解读。准备根据ucore做实验重新理解一遍
0 有用 翩若惊鸿 2024-09-21 19:33:43 北京
配合杨力祥老师的课,很不错,能对整个Linux内核运行机制有一个比较细致的了解。需要汇编、体系结构等前置知识
0 有用 异口同笙 2024-09-14 17:08:41 新加坡
不要买,写得很乱。没有深度,莫名其妙地出现一些概念
1 有用 Napoleon 2024-06-06 16:54:37 湖北
去年读的,今年复习时又看了一下,写得通俗易懂,图解清晰,尽管现在的Linux版本与最初的Linux已有很大差别,但在某些基本原理方面还是一致的,0.11内核仍然有学习的价值。这本书非常适合入门Linux的底层原理,五星!
0 有用 Joker 2024-04-08 11:26:38 广东
这是一本彻头彻尾的垃圾书,一看就是沽名钓誉的教授指使研究生写的。 曾经有作家说过,在科普读物中每多一个公式你的读者就会减少10%,计算机科学领域书籍也是样的,每多一行代码读者就会喷你一次。 我认为计算机科学的书籍应该只允许使用伪代码。否则这样的作者更像是在向读者炫耀:“看我多牛逼能看懂这里的代码”,而不是传递知识与思想。 当然也不能完全否认这本书作者的工作,这书更像是一本说明书性质的东西
0 有用 阅微草堂 2022-08-02 07:47:04
以内存的布局和内存的使用为核心讲解内核0.11,思路是对的---存储式机器理念。第二个关键:IDT表作为整体的数据结构关联了所有的函数和操作这个思想通过画图表示有启发。第三个main程序启动了三个进程,而0号进程作为特殊进程存在,第四将内核代码区与数据区分的很清晰这个概念和感觉特别重要。个别核心的代码是之前没有理解的,读程序的时候牢记数据结构,很多数据结构的操作会隐藏核心的计算和映射关系。这本书可... 以内存的布局和内存的使用为核心讲解内核0.11,思路是对的---存储式机器理念。第二个关键:IDT表作为整体的数据结构关联了所有的函数和操作这个思想通过画图表示有启发。第三个main程序启动了三个进程,而0号进程作为特殊进程存在,第四将内核代码区与数据区分的很清晰这个概念和感觉特别重要。个别核心的代码是之前没有理解的,读程序的时候牢记数据结构,很多数据结构的操作会隐藏核心的计算和映射关系。这本书可以作为理解和学习OS的入门和进阶的最后一环! (展开)