在很远很远的的过去... 哦,让我翻翻我的日记...,哦,大约是在2001年夏季,我开始开发我的操作系统,我把它命名为Views。我翻了翻我那块远古年代的硬盘,找到了这个称之为Views系统的第一个源代码文件。它的开头是这样的:
BOOTSEG equ 07c0h
INITSEG equ 09000h
cseg segmentassume cs:cseg,ds:cseg
org 100h
start:
start_of_code = $
jmp next
;不知道有什么用的数据
db 2AH,62H,6DH,26H,49H,49H,48H
... ...
我不禁为我的坦诚会心一笑。只有一个诚实的人才会写出“不知道有什么用的数据”这样的注释。这是程序员可贵的品质。虽然现在的我,没有成为一名程序员,但我仍然欣赏和喜欢那时还是大一新生的我。
我突然有些好奇:为什么我会如此痴迷与操作系统的制作呢?要知道,那时我还是一个材料工程系的一个新生,原本应该沉浸与“二十一世纪是材料的世纪”的无边意淫中,去玩那些瓶瓶罐罐,混合那些有色液体并自得其乐;去泡妞,让悸动的心跳得更猛烈些;去网吧,在CS中以一敌百,留名青史;再不济也该去当个群演,发个传单,换个酒肉钱...
所以,唯一的解释就是,哥享受的是那种控制感,全部掌控的快乐。
我拥有第一台电脑的年代是1998年,那台电脑是奔腾133MHz的CPU,运行着DOS和WINDOWS 3.1系统。使用DOS的快乐在于你能完全掌握你的CPU,想让它干什么它就干什么。虽然我那时拙劣的技术让这台电脑常常死机,但我仍然乐此不疲。从最基本的BASIC到C,C++乃至汇编语言,我自学并完成了我对编程的最原始认识。
90年代末,盗版光盘风靡。让现在的吃瓜群众们难以置信的是,那些光盘中不仅有香艳的内容,居然还有编程宝典 —— 那些来自BBS“大虾”(90年代网络用词,指那些贡献内容的博主)的技术资料!可惜的是,当年的我,居然不知道JPG为何物,也不知道有名叫“SEA”的DOS下看图软件... 唉,那些香艳的内容,与我无缘。那些编程宝典,因为文件格式是txt,一目了然,倒是让我学了个遍,让我和编程结下了不解之缘。
那时,我迷恋制作与Windows 3.2相仿的用户界面,迷恋开发那些中看不中用的功能,享受着控制计算机哦快乐。然而,受制于16色模式下色彩的贫乏,我的作品感觉颇low。一种编号为13的VGA 256色模式(320 x 200 256色)也被我考虑过,这是当时游戏最常用的显示模式(DOS版的“红色警报”,“仙剑奇侠传”就使用了这种色彩模式),操作非常简便,我至今还清晰地记得,只要使用:
mov ax, 13
int 10h
即可进入这种色彩模式。然后,向A000:0000连续的64K DOS地址中写入的颜色索引值,将被直接反映到屏幕上。这是我所喜欢的简单粗暴
然而,这低分辨率带来酸爽的马赛克效果,还是让我无法接受。当然,办法总是有的,在那个信息闭塞的年代,我花了近半年时间,买了无数盗版光碟,终于让我找到了一本叫”VBE规范“的宝典。
VBE是Video BIOS Extensions的缩写,有些人称之为VESA规范。这个规范允许在DOS下达到高分辨率和真彩色的图像显示质量。我试了下,在我那块只有1MB显存的Curris Logic牌显卡上,居然能够达到1024 x 768 256色的显示。在800 x 600的分辨率下能达到24位真彩的显示效果。在那个年代,在一台15寸的CRT显示器上,几乎已经达到了现在4K电视的显示质量。完美!
可是,在DOS下进行图像相关的开发,迅速地640K内存就被用完了。Bill Gates曾经有句经典的词儿:”在任何情况下640K都足够了“,用于吹捧他当时赖以为继的DOS系统。我迅速地意识到了这句话是多么的扯淡
我遇到瓶颈了,我突然发现DOS下的那些概念是多么的无聊。那些被造出来的时髦的词儿,如:微模式(Tiny),紧凑模式(Compat),巨模式(Huge),其英文名字已经足够唬人,被我们的科学家们翻译后就显得更加曲(脱)高(离)和(群)寡(众)。我想,这不就是8086的16位寻址模式遭的孽么,向我们这些用386以上的”高端机“的”高端人士“,为何不玩一下32位寻址模式呢?
此外,原始的DOS系统是一个单任务系统。当我第一次在阅读操作系统科普读物时候,我被人类的智慧而点赞:居然可以在一个CPU上执行多个任务,居然可以使用物理磁盘来模拟内存。
使用物理磁盘来模拟内存是一个看起来非常自然的事情,科普读物上描述的很简单易懂:当内存不足时,将一些不常用的内容保存到磁盘上,借此空出一些空间。但真正想想怎么在做的时候,却发现困难重重。直到我真正搞清楚”段“,”页“,”虚拟内存“等概念后,这件事情才逐步开始明朗。
在一个CPU上执行多个任务,这听起来相当美妙,但这怎么可能呢?科普读物给了很简单的答案:时间片。每个任务都只执行很短的时间(这个时间就是时间片),CPU交替地执行每一个任务,只要时间片足够短,人们就有多个任务同时执行的错觉。同样的,真要做此事,会发现困难重重。
但是,一旦把这几件事情都搞定了,我将有一个比DOS更好的环境,给我掌控计算机的权利,又让我能更好地运用系统资源。我后来才知道,这个东西就是个操作系统。
我被我自己的想法震惊了。作为一个刚刚自学了几年编程的业余爱好者,就要挑战一项如此复杂的任务,目标只是支持我那些”业余作品“更好的运行。后来,我才明白制作操作系统是多么复杂的工作,以至于我原来规划在自制操作系统上跑的”业余作品“显得无足轻重。站在今天的角度看,我后来并没有开发过什么惊天动地的”业余作品“,而几乎将我全部的精力放到”操作系统“的开发中去了。
最后,我要为我的操作系统其个名字。这根本不是个事儿。我把我拗口的英文笔名的若干字母拼凑组合后,得到了这个朗朗上口的名字:Views。
这样,2001年的那个夏天,当我拿到大学录取通知书后,我想,我可以开始干这件事儿啦。
2008年的初夏的一个周末,记忆中的阳光总是那么明媚。那天,我参加了微软的面试。在美罗城的某个楼面,一位微软的技术经理面试我:
经理:你有什么专长?
(我) :我对操作系统和Intel x86架构有超出常人的深入理解(我说的很自信)
经理:那介绍下Linux的balabalabala机制吧
(我) :好的,balabalabala...
经理:你说的不对,Linux并不是这样的 ... ...
我心里默想,你批评的对,我说的其实不是Linux,我说的是Views!因为那个系统中每一行代码都是我写出来的!
我落选了。或许当时我应该告诉他真相,那样或许我能进入那个行业。但做一行恨一行,或许那样的我再也不会对Views抱有童真般的兴趣和热情了吧。
未完待续~