《Unix内核源码剖析》点评赠书
| 2014-03-21 21:29
精读1万行代码,深入理解操作系统原理,超级计算机“京”的L1缓存设计者青柳隆宏经典著作。
本书是一本UNIX V6内核源代码的阅读指南。作者结合UNIX V6已公开的相关文档,对UNIX V6的内核源码进行详细剖析,旨在让读者更深入地理解进程、中断、块I/O系统、文件系统、字符I/O系统、启动系统等操作系统的基本原理。
本书适合操作系统的初中级学习者阅读,特别适合通过大学课程和其他入门书对操作系统有所了解,但是对具体细节缺乏深入理解的读者,以及那些对操作系统的具体实现有兴趣的读者。
《Unix内核源码剖析》 (日) 青柳隆宏 著;殷中翔 译
(图灵程序设计丛书)
出版社: 人民邮电出版社, 2014.3
ISBN: 978-7-115-34521-9
定价:79.00元
字数:433千字 2014年3月第 1 版
页码:368页
编辑推荐
精读1万行代码,深入理解操作系统原理!
超级计算机“京”的L1缓存设计者青柳隆宏经典著作!
彻底读懂Unix源代码!
内容简介
本书针对1975年由贝尔实验室①发布的UNIX第6版(Sixth Edition Unix,此后简称为UNIX V6)的内核源代码进行解说。面向的读者主要是计算机专业的学生,以及从事计算机相关行业的具有初中级水平的技术人员。
考虑到一部分读者会有诸如“我对内核源代码根本不感兴趣”或者“与这种老古董相比,我喜欢更现代的操作系统”等看法,笔者想先阐述一下阅读内核源代码的引人入胜之处,然后再解释 UNIX V6为何适合初次接触内核源代码的读者。
阅读内核源代码的意义
我们可以将操作系统(OS,Operating System)看做是一种软件(集合),它对包括硬件和软件在内的计算机系统的各个部分进行管理,并为用户提供便于使用的操作界面。 内核作为操作系统的核心部分,提供计算机系统必备的功能,因此也被称为狭义的操作系统。例如,shell之类的程序通常不是内核的一部分,而是利用内核提供的功能来实现的。内核以外的程序通常被称为用户空间(userland)程序,或用户程序。通过阅读并理解内核源代码,我们会有如下收获。
对计算机系统的全貌有更深入的了解
掌握了作为计算机系统核心部分的内核,不仅对操作系统,对计算机的全貌也会有更为深入的认识。对通过大学课程或其他途径学习的各种领域、各个层面的知识之间的关联性也会有更清晰的认识,让人有醍醐灌顶的感觉。
让操作计算机成为一种令人愉快的体验
理解了计算机系统的全貌,操作计算机本身也会变得更加令人愉快。比如,在计算机上执行某个程序的时候,如果能够准确把握系统内部所进行的操作,是不是一件很令人兴奋的事情呢?这种体验将加深读者对计算机的兴趣,使读者更有动力去提高自己的技术水平。
加深对知识的理解阅读代码与否,对知识的理解程度会有云泥之差。如果只学习了概要,既容易遗忘也难以应用。相反, 理解代码能够使你对学到的算法和思路举一反三,使之 成为可以受用一生的财富。
提升技术人员自身的水平
作为计算机行业的技术人员,阅读并理解了内核源代码有助于在专业领域里将自己提升到一个新的层次。尽管在全球范围内这个领域的从业者不断增加,但是在了解应用层面的同时,对操作系统等底层的知识也有所了解,并且能够对系统做出整体优化的技术人员,仍是凤毛麟角。
但是恰恰是具备这种素质的人,才能在第一线发挥不可替代的作用。如果想拉大与竞争对手的差距,是必须理解系统内核的。
为何选择UNIX V6
接下来想说明一下为什么不选择最新的操作系统,而将历史比较悠久的UNIX V6 作为本书的题材。
代码行数约为1万行
UNIX V6 的内核源代码包括设备驱动程序在内 约有1 万行,这个数量的源代码,初学者是能够充分理解的。有一种说法是一个人所能理解的代码量上限为1 万行,UNIX V6的内核源代码从数量上看正好在这个范围之内。看到这里,大家是不是也有“如果只有1万行的话没准儿我也能学会”的想法呢?
另一方面,最近的操作系统,例如Linux 最新版的内核源代码据说超过了1000万行。就算不是初学者,想完全理解全部代码基本上也是不可能的。
充实的资料
UNIX V6 的用户手册、相关资料和论文 都可以在网上找到。运行UNIX V6 所需的处理装置PDP-11以及周边设备的设计文档,很大一部分也可以检索到。
网罗了操作系统的基本功能UNIX V6 虽然比较老,但是 它实现了构成操作系统的大部分基本功能。目前最新的操作系统大部分都是以它为基础发展而来的,因此以UNIX V6 为入门教材对我们了解最新的操作系统来说会很有帮助。
线程、网络、GUI、多核支持、虚拟机等这些UNIX V6 不具备的功能在近些年的操作系统中得以实现。这些功能当中有很多其实是以UNIX V6 实现的功能为基础的。
简化的设计
UNIX V6 作为一种早期的操作系统,功能实现比较简单。而最新的操作系统要顾及更多的问题,同时也要考虑到性能的优化,因此实现也更为复杂。如果是首次阅读内核源代码,用相对简单的UNIX V6 更合适。
便于读者对系统有完整的了解前面已经说过,从代码量上看,通读UNIX V6 内核源代码对个人来说是可以做到的。如果更进一步,对系统内置的用户程序集(如shell)的代码或是周边设备的设计文档也有所涉猎的话,就会 对包括内核在内的计算机系统整体有更深入细致的了解。上述系统内置的用户程序集的代码或设计文档与最新产品相比,在实现上更为简单,也更容易理解。
有模拟器可供参考
simh[7] 这款模拟器能够模拟包括PDP-11系列的许多处理器,可以用来运行UNIX V6。因此 在阅读源代码时可以随时通过模拟器确认不太明白的地方。在simh上运行UNIX V6的方法请参考附录A.1 的[8]、[21] 和[22]。
几个难点
当然,UNIX V6 也存在它特有的问题。UNIXV6 的大部分代码使用了C语言编写,而当时的C语言还处于初期阶段,在语法规格上与现在的C语言有所不同(顺便提一下,C语言就是因为编写UNIX才诞生的)。当时的C语言使用K&R①之前的语法,因此也被称为preK&R。
估计会有读者提出“为什么函数hogehoge() 没有定义返回值和参数”、“为什么对int型的hoge②可以使用hoge-> 这样的写法”等疑问。这是由C 语言当时的语法决定的。
虽然存在这种语法上的差异,但pre K&R C的语法规格说明书[16]可以在网上获取,而且如果是了解当代C语言的读者,应该不会很难理解。而比较特殊的pre K&R C语法,请参考本书的附录。
另外,和其他很多程序一样,UNIX V6的一部分代码采用了汇编语言来编写。这对首次接触汇编语言的读者来说可能会有影响。但是,UNIXV6使用的PDP-11(参考第1章)的汇编语言的规格说明书[17]也可以在网上找到,慢慢熟悉就会适应了。
面向的读者
本书主要面向计算机专业的学生,以及从事计算机相关行业的具有初中级水平的技术人员。特别适合那些通过大学课程和其他入门书对操作系统有所了解,但是对具体细节缺乏深入理解的读者,或是那些 对操作系统的具体实现有兴趣的读者。
需要具备的知识基础UNIX V6 内核的大部分代码都是用C语言写成的,因此 读者必须具备C 语言的知识基础,也要掌握栈、队列等 基本数据结构和算法的知识。另外,如果能了解计算机的运行原理,比如程序在执行时需要首先加载到内存,然后从程序计数器指定的内存地址读取指令等,就更为理想了。
对那些完全不了解操作系统的朋友来说,本书的难度可能有点大。建议先参考在本书附录部分介绍的入门书籍(附录A.1 中的[5] 和[6]),等掌握了操作系统的基本知识后再来阅读本书,这样可能会达到事半功倍的效果。
本书的结构
第1 章介绍UNIX V6 的整体概要。
第2 章到第4 章介绍用来管理程序运行的进程(process)。第2 章概述进程。第3 章说明进程的控制方法。第4 章说明以有效利用有限内存空间为目的的交换(swap)处理。
第5 章和第6 章介绍因某种事项中断当前进程运行,并转而处理该事项的几种机制。第5 章首先介绍如何处理周边设备和CPU 内部发生的中断请求。然后介绍了系统调用(system call),系统调用是利用中断请求来连接用户程序和内核的机制。第6 章主要介绍信号(signal),信号用于实现进程间通信,会引起处理的中断或使处理内容发生变化。
第7 章和第8 章介绍磁盘等设备的I/O 处理。第7 章说明块(block)设备子系统,第8章说明块设备驱动程序。
第9 章和第10 章对文件系统进行说明。文件系统隐藏了块设备的存储细节,向用户提供访问数据的统一方法。第9 章介绍文件系统的概要,第10 章对文件的操作加以说明。
第11 章介绍用来实现进程间数据通信的管道(pipe)。
第12 章介绍行式打印机的I/O 处理。
第13 章介绍终端处理。终端处理使用户能够以会话的方式操作系统。
第14 章说明系统的启动处理。
作者简介
青柳隆宏 日本资深程序员,现在硅谷从事计算机处理芯片的设计工作。曾设计了超级计算机“京”的L1缓存,该计算机在2011年排名世界Top 500超级计算机的第1位,也是人类历史上第一台计算能力跨越1亿亿次每秒的计算系统。作者Email:v6@gachapin.jp。
译者简介
殷中翔 日本国立九州大学系统信息专业硕士学位。具有十余年软件开发经验,现主要从事企业Web系统服务器端的开发及维护工作。
黄炎 同济大学本科毕业,现供职于上海爱可生,从事数据库高可用软件开发。大学有幸师从陈闳中教授,一窥UNIX V6代码的门径。
周金杰 同济大学硕士,法国国立高等电信学院(TELECOMPARIS)硕士。曾通读并研究UNIX V6源代码,同时参与了面向对象操作系统的移植以及操作系统调试器的开发工作,熟悉系统底层相关的技术知识。崇尚设计,享受编程给生活带来的乐趣。
样章地址
http://www.ituring.com.cn/book/1165
购买链接
当当: http://product.dangdang.com/23420542.html
京东: http://item.jd.com/11407831.html
互动: http://product.china-pub.com/3769433
亚马逊: http://www.amazon.cn/gp/product/ ... s2&tag=ituring04-23
活动内容
活动时间:
2014年03月21日-03月28日
活动奖品:
活动结束后,我们会评选出3位积极参与评论的网友奖励《Unix内核源码剖析》图书1本。
活动要求:
1、 在Linux中国(http://linux.cn)对本书进行点评,要言之有物,有效评论不能低于40个字。
2、 本次话题主要关注Unix内核源码、编程及相关技术的讨论,以及对本书样章内容的点评。