0 热身运动
0.1 前言
开发操作系统是很多程序员的终极梦想,但是很多人认为这是不可能的,其实,只要有爱,什么事都能办到(但超能力这种事情的话估计只有学园都市[1]了吧)。
操作系统的编写的确是不容易的,但是一步一个脚印,终究会换来成功。
什么操作系统是天方夜谭啊等等说法,其实是错误的。我们凭一己之力,虽然不一定做得出Windows这种动辄几GB的操作系统,也不一定能像Linux那样跨多平台,甚至不支持网络、音频设备,但是一定能有自己的用武之地,正如“天生我才必有用”。
我们的操作系统只求精简易用,而不求庞大复杂,毕竟我编写操作系统也是为了学习。好了,废话不多说(其实你还在讲呢),现在动工吧!
0.2 什么是操作系统
既然是编写操作系统,那必然需要先知道什么是操作系统。
虽然大家每天接触操作系统,但是很少有人能够给出个恰当的定义。操作系统(Operating System),是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。操作系统是计算机系统的关键组成部分,负责管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本任务。
操作系统的种类很多,各种设备安装的操作系统可从简单到复杂,可从手机的嵌入式操作系统到超级计算机的大型操作系统。目前流行的计算机作系统主要有Linux、MacOS X、Windows等,除了Windows等少数操作系统,大部分操作系统都为类Unix[2]操作系统。
历史上,还有MS-DOS这种古老的操作系统。但这种操作系统不具备现代操作系统的很多优点。我们既然做了,何不做好呢,是吧。
0.3 开发操作系统的语言选择
我们首先必须选择我们使用的语言。我的选择很简单,汇编和C语言搞定一切。为这么使用这两种语言是有原因的,首先,我们是要与机器打交道,操作系统与平台架构直接相关,汇编是必须的。其次,太高级的语言会封装非常多的东西,不仅增加文件大小而且还会影响性能。所以,本书要求读者有汇编和C语言基础。
另外,需要注意的是,我们开发的系统基于X86/64[3],苹果电脑[4]的各位只能使用虚拟机来开发书中所讲的一切了,看,谁说苹果电脑好了(笑)。