前言
这不是一本由几万行代码简单罗列成的书,也不是一本由各种技术文档堆砌成的书。当你在学习计算机操作系统原理时迷失了方向,它会为你点亮一盏灯,照亮前方的路。
计算机相关专业的读者们在大学时都学习过《操作系统》这门课程。对于什么是操作系统,老师们普遍以理论概念为主进行教授,比如,什么是进程,什么是线程,什么是文件系统等知识点。可是,像进程与线程的创建过程、空间换时间的应用场景等内容却鲜有提及。以上这些问题,我在学生时代的时候特别想弄清楚,但却无从着手,就算有些思路,也因为学艺不精,半途而废了。即使向老师们请教,也只得到理论性的解释,无法获得清晰、准确、具体的答案。我想,也许正在阅读本书的你们也难以将其缘由娓娓道来。不过,可能有些人觉得没有必要非常清楚这些问题,以前的我也曾有过此种想法。待到有幸从事几年Linux内核级的研发工作后,我才逐渐对上述问题有了比较直观、深刻的认知,并且慢慢体会到,如果不清楚操作系统原理,某些问题解决起来非常困难。
在计算机领域,中国的发展速度仍然落后于发达国家,师资力量不足是在所难免的。一些学校只是概括性地传授微机原理、汇编语言、计算机组成原理、编译原理、操作系统等基础知识,甚至还可能只将它们作为选修课程。当时作为学生的我觉得这些课程不重要,没有认真细致学习,但在工作多年的反思中才发现,它们是融会贯通计算机领域的必要知识,它们往往决定了一个人能在计算机行业走多远。而且,目前中国软件行业仍以外包为主,能够静下心来做技术储备、基础知识培训的自主研发型公司少之又少,这种局面使得我们想在工作中弥补基础知识依然十分困难。
现今,网络上已有不少关于操作系统实践类的文章和图书,这些文章和图书作为入门学习是很不错的选择。可是,这些文章和图书内容的一个通病是,操作系统普遍采用Intel 32位处理器的虚拟平台进行开发、研制。这个32位处理器的虚拟平台虽然学起来简单,但如果用到工作中举一反三的话,还是存在诸多差距与不足。比较典型的例子有,虚拟平台与物理平台在软硬件执行流程上的差异、多核处理器间的通信机制、高级中断控制器的配置、先进的64位处理器体系结构等,这些问题难以正确分析、推理及解决,会导致理论与实践脱节。
出于以上种种原因,作者想通过一系列图书把现代操作系统的真实面貌展现给读者,并希望借此寻找有兴趣和有能力的朋友们一起开发这款操作系统。考虑到对操作系统感兴趣的读者不在少数,基础知识的掌握水平势必参差不齐。为了照顾到各个方面,本书将尽量做到既适合在校学习理论知识的初学者,又适合在职工作的软件工程师或有一定基础的业余爱好者。
这是一个基于Intel处理器IA-32e体系结构编写的操作系统雏形。虽说它只是一个操作系统雏形,但为了使读者能够在学习Linux内核源代码时得到一些助力,本系统还将Linux内核的精髓(提炼自多版Linux内核)融入其中,并以物理平台作为主要运行环境、虚拟平台作为辅助运行环境。IA-32e体系结构可以通俗理解为“64位处理器”。阅读过Intel技术文档的读者应该知道,64位处理器是在原有32位处理器的基础上扩展而得的,其对32位处理器的运算速度、数据带宽乃至运行时的高效性、安全性都进行了全面升级与优化。因此,64位操作系统比32位操作系统“快”是有诸多理由的,这些理由很难用几句话解释清楚。
本书从计算机上电启动开始,循序渐进地实现了一个64位操作系统的雏形。先介绍一下本书操作系统的硬件运行环境。作者使用Lenovo ThinkPadX220T笔记本电脑作为操作系统的物理平台,其上搭载着一枚Intel (R) Core (TM) i7-2620 M CPU @ 2.70 GHz(这串字符将在正文里通过程序从处理器中取得)双核四线程处理器,并配有8 GB容量的物理内存。如果条件允许的话,读者还可以准备一台电脑作为编译环境,否则反复重启同一台电脑会严重影响开发效率。除此之外,还必须准备一个U盘,要在物理平台下运行操作系统,怎能少得了U盘引导呢!U盘的容量无需太大,16 MB或8 MB足矣。