0. Sinos 操作系统自序
作为一名专业的计算机软件开发人员,我在关注日新月异的计算机技术的发展的同时,始终坚持着自己的Sinos操作系统的开发,因为我感到,操作系统是计算机科学中最奇妙的东西之一。
我对操作系统的兴趣来源有两处:Andrew S. Tanenbaum 的那本《Modern Operation System》和大学里的操作系统课程。
《Modern Operation
System》那本书写得非常不错,建议所有对操作系统有兴趣的朋友都应该去仔细读一下。我当时看的是第一版的中文版,而现在第二版已经出版了,可惜只有影引版,阅读英文资料是作为一个软件开发人员的必备技能之一,所以还是强烈建议大家去看第二版。书的第二版相对于第一版改进得太多了,除了一些原理性的东西没有变外,作者大量加入了Linux和Windows在各操作系统关键技术上的解决方案,对于我们理解现代操作系统原理非常有帮助。作者用他特有的方式将操作系统的奇妙与复杂表现在一本不是太厚的书中。为此,我差不多花了大学期间的一整个寒假去研究这本书,之后就忍不住开始了自己的操作系统设计之旅。
至于大学的操作系统课程,并不是因为它的引人入胜才激发起我的兴趣。恰恰相反,我大学时所用的教材还是那本绿皮的、尤晋元写的、八十年代的、讲述PDP-11上的Unix
V6的书,让人极度反感。我们教授选用这本书的理由是“Unix
V6是一个很成功的操作系统,是很多操作系统的原型,而且操作系统很多原理性的东西是不会变的”。话这么说是没错,但事实上呢?当年V6操作系统的确有很多精妙之处,但那根本是出于当时的硬件限制而不得已采用的方法,有很多方法根本不符合如今的写程序的规范!换句话说,以今的眼光来评价当年的代码,只有一句话,写得很糟糕。
在此我并不是想否认Unix V6的地位,只是对当年教授奉Unix
V6代码为宝典、甚至希望大家向它学习C语言编程的做法感到反感。在他的号召下,笔者周围的同学几乎人手一本《莱昂氏源代码》,把里边很多为了突破硬件限制而使用的技巧视为C语言的境界。相信看过V6代码的读者对代码中大量交叉引用的全局变量都会留下深刻的印像,这种“牵一发而动全身”(我们教授原话,用以对V6代码表示赞叹)的代码,根本就是现代软件开发中所不能容忍的,但确被教授说成是“Unix
V6的代码精妙所在”。所以当我看到有人在写程序时把+=写成=+时(当年的C语言语法),感到真的很不忍心......
有点扯远了,我只是想说,正是由于我大学时教授强行教那些古老的操作系统,激起了我想做一个现代硬件环境下的操作系统的兴趣。
我设计的操作系统我把它叫做Sinos,目标平台是PC,即基于Intel x86
CPU平台的PC系统。综观当前业界的两大操作系统Windows和Linux,发现它们都有一个共同的特点,就是历史负担太重。由于PC的发展史以及操作系统各自的发展史,两大操作系统为了向前兼容,兼容早期PC和早期版本,做出了太多太多的折衷了,很多地方没必要地增加了大量的复杂性。
所以,Sinos的设计目标就是Pentium以后X86系列CPU,并且完全不考虑向下兼容的限制,可以最大程度地简化设计,同时也可以在当前几乎所有的PC上运行。
我并不想仅仅写一系列介绍Sinos的文章,我希望能把开发Sinos的过程详细回顾一下,与广大网友探讨一下Sinos的开发经验。当然,Sinos并没有开发完,我会在写文章的同时继续Sinos的开发,欢迎有兴趣的网友与我联系交流。
(对读者的要求:希望读者具备基本的操作系统知识,PC硬件接口知识和一定的计算机系统结构知识。)