Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理(正文黑白印刷)[按需印刷]
- 定价:¥79.00
- POD价:¥98.00
- 评分:
(已有70条评价)
- 电子书:Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理(正文黑白印刷)[按需印刷]
- 促销活动:
- 我要买:
- ·如此书原封面缺失,印刷将采用出版社授权的新封面;
- ·如电子文件出现问题,可能延长印制周期,我们将提前与您沟通
基本信息

编辑推荐
《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》对操作系统内核的驾驭能力和深刻理解程度达到世界顶尖级水平,是一本能真正引导你深入理解Linux内核设计思想的经典著作。
结合真实的源码、349幅内核运行时序图和详细的文字描述,以一种开创性的方式对Linux内核进行了极为直观和透彻地阐述,读者可通过阅读本书提出自己的设计思想。
内容简介
计算机书籍
关于Linux内核的书已经不计其数,但这本书却是独树一帜的,它的内容代表着Linux内核研究成果的世界水平,它在世界范围内首次提出并阐述了操作系统设计的核心指导思想——主奴机制,这是所有操作系统研究者的一笔宝贵财富。本书可能也代表着同类图书的水平,是一本真正能引导我们较为容易地、极为透彻地理解Linux内核的经典之作,也可能是当前能从本质上指引我们去设计和开发拥有自主知识产权的操作系统的著作。它的出版也许会成为Linux内核研究领域的一个里程碑事件。
《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》的特点是它的写作方式和内容组织方式,与同类书完全不同。它在深刻地分析了传统讲解方法的利弊之后,破旧立新,从认知学的角度开创了一种全新的方式。以操作系统的真实运行过程为主线,结合真实的内核源代码、349幅精确的内核运行时序图和具有点睛之妙的文字说明,对操作系统从开机加电到系统完全准备就绪的整个过程进行了系统而完整地分析,深刻地揭示了其间每一个动作的设计意图和实现原理,完美地再现了操作系统设计者的设计思路。阅读本书就如同跟随着操作系统设计者一起去思考,我们会在阅读的过程中发现Linux内核设计的精妙,会发现原来处处都“暗藏玄机”,哪怕是一行很短的代码。
《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》在所有细节上都力求完美。为了保证知识的准确性,操作系统运行过程中的每个动作都经过了严格的考证;为了让我们真正理解Linux内核的原理,它突破传统,以Linux的真实运行过程为主线进行讲解;为了做到真正易于理解,创新性地使用了图解的方式,精心绘制了349幅分辨率600dpi的时序图,图中表现的运行时结构和状态与操作系统实际运行时的真实状态完全吻合;为了提高阅读体验,本书采用了双色印刷,以便于我们更清楚地观察每一幅图中的细节。
作译者
团队始终不自量力地奉行高举高打的策略,只对计算机领域中基础的、有体系的事情感兴趣,且只做自己感兴趣的事。
团队不相信二流水平、三流心态,能作出世界顶级的工作。团队相信成功的决定因素是人,而不是物。
团队对艺术、对鉴赏力、对欣赏品味、对一切美好的事物都有着近乎狂热的追求。认为科学、技术的最高境界是艺术,认为世界的本源是通的。
团队崇尚理论体系、崇尚个性鲜明、崇尚独立思考。“没体系”是团队成员之间善意贬损的常用语,也是判断一件事是否值得关注的标准之一。
团队鄙视抄袭、弄虚作假。对别人热炒、做熟的事情不感兴趣,更不喜欢在别人的体系上狗尾续貂、移花接木,粉饰为“自主创新”。
团队强调理论,注重实践,讲究科学的研究方法,不屈膝权威,不迷信盲从。提出基础假设,构建逻辑自洽的体系,证伪、修正、再证伪、再修正,不断推进体系的完善。
团队钻研学术,但决不死板,学术和商业结合,彼此互为推进,最终改变整个时代的商业格局,是团队追求的目标。
团队特别注重诚信,提倡公平、公正。
团队内部是一方净土,既相互竞争,又相互帮助、相互协作。团队成员都在高高兴兴做自己喜欢的、感兴趣的事,没有时间顾及其他。勾心斗角、尔虞我诈、溜须拍马、拉帮结派……,在团队内部没有市场。
团队在上述思想的指导下,研发了基于图形、图像(而非基于字符、语句)的图示化程序设计集成开发环境,已成功的移植了linux 0.11,正确编译,正确boot,正确运行。现在正在研发新的操作系统,已初步实现了与现有的基于块概念的文件系统有较大差异的新的文件系统,据我们测试,相对于基于块设备的文件系统,在文件的读写速度上有较大优势。《Linux内核设计的艺术》一书,体现了我们设计新操作系统的过程中,对操作系统的理解。可能在不久的将来,我们也将我们在设计图示化程序设计平台中,对编译原理的理解,奉献给广大读者。
目录
前言
第1章 从开机加电到执行main函数之前的过程
1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
1.1.1 BIOS的启动原理
1.1.2 BIOS在内存中加载中断向量表和中断服务程序
1.2 加载操作系统内核程序并为保护模式做准备
1.2.1 加载第一部分代码—引导程序(bootsect)
1.2.2 加载第二部分代码—setup7
1.2.3 加载第三部分代码—system模块
1.3 开始向32位模式转变,为main函数的调用做准备
1.3.1 关中断并将system移动到内存地址起始位置0x00000
1.3.2 设置中断描述符表和全局描述符表
1.3.3 打开A20,实现32位寻址
1.3.4 为在保护模式下执行head.s做准备
1.3.5 head.s开始执行
1.4 本章小结
第2章 从main到怠速
2.1 开中断之前的准备工作
2.1.1 复制根设备号和硬盘参数表
前言
我带领的“新设计团队”(主要由中国科学院研究生院已毕业的学生组成)在实际开发自己的操作系统的过程中,最先遇到的问题就是如何培养学生真正看懂Linux操作系统的源代码的能力。开源的Linux操作系统的源代码很容易找到,但很快就会发现,培养学生看懂Linux操作系统的源代码是一件非常非常困难的事。
操作系统的代码量通常都是非常庞大的,动辄几百万行,即使是浏览一遍也要很长时间。比庞大的代码量更让学习者绝望的是操作系统有着极其错综复杂的关系。看上去,代码的执行序时隐时现,很难抓住脉络。代码之间相互牵扯,相互勾连,几乎无法理出头绪。更谈不上理解代码背后的原理、意图和思想。
对于学生而言,选择从源代码的什么地方开始分析本身就是一个难题。通常,学生有两种选择:一种是从main函数,也就是从C语言代码的总入口开始,沿着源代码的调用路线一行一行地看下去,学生很快就会发现源代码的调用路线莫名其妙地断了,但直觉和常识告诉他操作系统肯定不会在这个地方停止,一定还在继续运行,但却不知道后续的代码在哪里,这种方法很快就走进了死胡同;另一种则是从某一模块入手,如文件系统,但这样会无形中切断操作系统源码之间复杂的关系,如文件系统与进程管理的关系,文件系统与内存管理的关系,等等。使学生孤立地去理解一个模块,往往只能记住一些名词和简单概念,难以真正理解操作系统的全貌。用学生的话讲,他们理解的操作系统变成了“文科”的操作系统。
由于操作系统是底层系统程序,对应用程序行之有效的调试和跟踪等手段对操作系统的源代码而言,几乎无效。就算把每一行源代码都看懂了,对源代码已经烂熟于心,知道这一行是一个for循环,那一行是一个调用……但仍然不知道整个代码究竟在做什么,以及起什么作用,更不知道设计者的意图究竟是什么。
我们在操作系统的课程上学习过进程管理、内存管理、文件系统等基础知识,但是这些空洞的理论在一个实际的操作系统中是如何实现的却不得而知。他们在源代码中很难看出进程和内存之间有什么关联,内核程序和用户程序有什么区别,为什么要有这些区别。也很难从源代码中看清楚,我们实际经常用到的操作,比如打开文件,操作系统在其中都做了哪些具体的工作?想在与常见的应用程序的编程方法有巨大差异的、晦涩难懂的、浩瀚如海的操作系统底层源代码中找到这些问题的答案,似乎比登天还难。
对熟悉操作系统源代码的学生而言,他们也知道像分页机制这样知识点,但是未必能够真正理解隐藏在机制背后的深刻意义。
这些都是学生在学习Linux操作系统源代码时遇到的实际问题。中国科学院研究生院的学生应该是年轻人中的佼佼者,他们遇到的问题可能其他读者也会遇到。我萌发了一个想法,虽然学生的问题早已解决,但是否可以把他们曾经在学习、研发操作系统的过程中遇到的问题和心得体会得拿出来供广大读者分享?
当时,针对学生的实际问题,我的解决方法是以一个真实的操作系统为例,让学生理解源代码,把操作系统在内存中的运行时状态画出图来。实践证明,这个方法简单有效。
现在我们把这个解决方案体现在这本书中。就是以一个真实的操作系统的实际运行为主线;以图形、图像为核心,突出描述操作系统在实际运行过程中内存的运行时结构;强调站在操作系统设计者的视角,用体系的思想方法,整体把握操作系统的行为、作用、目的和意义。
在全书的讲解过程中,我们不仅详细分析了源代码、分析了操作系统的执行序,我们还特别分析了操作系统都作了哪些“事”,并且把“事”与“事”之间的关系和来龙去脉,这些“事”意味着什么,为什么要做这些“事”,这些“事”背后的设计思想是什么……都做了非常详细且深入的分析。
更重要的是,对于所有重要的阶段,我们几乎都用图解的方式把操作系统在内存中的实际运行状态精确地表示了出来。我们用600dpi的分辨率精心绘制了349张图,图中表现的运行时结构和状态与操作系统实际运行的真实状态完全吻合。每一条线、每一个色块、每一个位置、每一个地址及数字都经过了我们认真反复地推演和求证,并最终在计算机上进行了核对和验证。看了这些绘制精美的图后,在读者的头脑中就不再是一行行、一段段枯燥的、令人眩晕的源代码,而是立体呈现的一件件清晰的“事”,以及这些“事”在内存中直截了当、清晰鲜活的画面。用这样的方法讲解操作系统是本书的一大特色。理解这些图要比理解源代码和文字容易得多,毫不夸张地说,只要你能理解这些图,你就理解了操作系统的80%,这时你可以自豪的说,你比大多数用别的方法学过操作系统的人的水平都要高出一大截。
作者和机械工业出版社的编辑作了大量的检索工作,就我们检索的范围而言,这样的创作方法及具有这样特色的操作系统专著在世界范围都是第一次。
我们分三个部分来讲解Linux操作系统:第一部分由第1章和第2章组成,分析了从开机加电到操作系统启动完成并进入怠速状态的整个过程;第二部分由第3章、第4章、第5章、第6章、第7章组成,讲述了操作系统进入系统怠速后,在执行用户程序的过程中,操作系统和用户进程的实际运行过程和状态;第三部分由第8章组成,阐述整个Linux操作系统的设计指导思想,本章内容是从微观到宏观的回归。
第一部分,我们详细讲解了开机加电启动BIOS,通过BIOS加载操作系统程序,对主机的初始化,打开保护模式和分页,调用main函数,创建进程0、进程1、进程2以及shell进程,并且具备用文件的形式与外设交互。
第二部分,我们设计了几个尽可能简单又有代表性的应用程序,并以这些程序的执行为引导,详细讲解了安装文件系统、文件操作、用户进程与内存管理、多个进程对文件的操作以及进程间通信。
我们将操作系统的原理自然而然地融入到了讲解真实操作系统的实际运行过程中。在读者看来,操作系统原理不再是空对空的、“文科”概念的计算机理论,而是既有完整的、体系的理论,又有真实、具体、实际的代码和案例,理论与实际紧密耦合。
第三部分是全书水平最高的部分,我们尝试从操作系统设计者的视角讲解操作系统的设计指导思想。详细阐述了主奴机制以及实现主奴机制的三项关键技术:保护和分页、特权级、中断,分析了保障主奴机制实现的决定性因素——先机,还详细讲解了缓冲区、共享页面、信号、管道的设计指导思想。希望帮助读者用体系的思想理解、把握、驾驭整个操作系统以及背后的设计思想和设计意图。
在本书中,我们详细讲解了大家在学习操作系统的过程中可能会遇到的每一个难点,如main函数中的pause()调用,虽然已经找不到后续代码,但该调用结束后,程序仍然执行的原因是:中断一经打开,进程调度就开始了,而此时可以调度的进程只有进程1,所以后续的代码应该从进程1处继续执行……
我们还对一些读者不容易理解和掌握的操作系统特有的底层代码的编程技巧作了详细的讲解。如用模拟call的方法,通过ret指令“调用”main函数……