操作系统真象还原主要观点

简介: 全面讲解开发一个操作系统需要的技术和知识。

作者简介

郑钢,毕业于北京大学,前百度运维高级工程师,对操作系统有深入的研究。好运动,喜钻研,热衷于尝试前沿技术,乐于分享学习成果。

内容提要

本书共分16章,讲解了开发一个操作系统需要的技术和知识,主要内容有:操作系统基础、部署工作环境、编写MBR主引导记录、完善MBR错误、保护模式入门、保护模式进阶和向内核迈进、中断、内存管理系统、线程、输入输出系统、用户进程、完善内核、编写硬盘驱动程序、文件系统、系统交互等核心技术。

本书适合程序员、系统底层开发人员、操作系统爱好者阅读,也可作为大专院校相关专业师生用书和培训学校的教材。

前言

本书面向操作系统基础知识薄弱,但又想把操作系统搞清楚、喜欢刨根问底的技术人,在此向你们致敬,本书用诙谐幽默的语言,把深奥的操作系统尽量讲解清楚,读者在轻松阅读中就学通了深奥的知识,是一本难得的好书。

多数学习操作系统的读者都会有这样的感受:

(1)“太难了,对于操作系统这个庞然大物我简直无从下手”;

(2)“很后悔选了这门课(大学一些专业中操作系统是选修课),甚至不想学习计算机了”;

(3)“上课完全听不懂,我都不想继续听下去了”;

(4)“即使实验做出来了,由于只是完成了局部功能,我依然不明白操作系统是怎样运行起来的,甚至不知道自己在做什么”。

以上的感受我都有过,坦白说,这门课并不是很难,但想把这门课完全搞明白真不容易。我是个喜欢刨根问底的人,为了弄清楚这背后的真相,我花了大量时间学习课程之外的内容,甚至付出了惨痛的代价——大学中第一次考试不及格,操作系统这门课我是第二次才考过的。这确实很“讽刺”——操作系统不及格的人在写操作系统书籍!但转念一想,考试过了的同学并不代表能够写出操作系统,因为试卷上并不是在考如何写一个操作系统。和技术能力相比,卷面成绩并不重要。

想象一下,如果是爱因斯坦那样的天才给我们讲物理知识,我们会觉得物理更容易理解吗?肯定是不会的,因为在爱因斯坦眼中比较容易的内容也许对我们来说非常深奥,他用B解释A的时候也许会让我们更迷惑,因为B我们也不懂,这就是基础的问题了。幸运的是阅读本书时读者只要有C语言和部分汇编语言的基础就行了,涉及的其他方面的知识我都会详细介绍,并以更易懂的方式去解释技术难点,读者不必担心看不懂本书。

回忆一下学车的经历:教练让学员先踩离合器再挂档,然后再踩油门,车子就开动啦。如果学员总是学不会这些,有可能是学员根本不知道什么是离合器,或者不知道离合器的作用是什么。即使把这些操作背下来,也会对驾车感到心有余而力不足,可见,只有了解了背后的原理,才会知道自己在做什么,驾车才变得游刃有余。

以上情况对我们学习操作系统来说也同样存在,比如当老师介绍中断发生时的上下文保护时,我们更多的疑问不是如何保存CPU的上下文数据,而是想知道为什么在不同的特权级下会使用不同的栈,这背后的原理是什么,并且这是如何做到的。

诸如此类的疑问需要了解硬件原生支持的运行机制,因为很多操作都是硬件自动完成的,比如处理器进入0特权级时,会自动在任务状态段TSS中获得0特权级的栈地址,这不需要人工干涉,完全由处理器维护。我们想知道的是,硬件在背后自动完成了哪些工作,这样才便于我们理解操作系统的全貌。

操作系统受制于硬件的支持,很大程度上它的能力取决于硬件的能力,因此,要想全面理解操作系统,不仅需要了解上层软件的算法、原理、实现,还要了解很多硬件底层的内容。和硬件相关的知识是在微机接口电路中讲解的,而绝大多数读者在学习这门课时,根本不知道它有何用,只有学习操作系统课程时才用到它,因此,本书内容兼顾相关的硬件知识。

除硬件外,本书还把操作系统中的理论付诸于实践,让读者真正学到包含在操作系统中的实实在在的技术,比如在代码中实现了著名的生产者消费者问题,还有进程、线性、阻塞、信号量、锁、文件系统、目录、shell、管道等。各个章节的代码都可独立运行,方便调试,本书更让读者有成就感的是,我们最终完成的一个操作系统总共代码量只有几千行左右,极大地减少了操作系统源码阅读的工作量。

版权:人民邮电出版社