您好,欢迎访问三七文档
着手开发之前前言何谓操作系统开发操作系统的各种方法无知则无畏如何开发操作系统操作系统开发中的困难学习本书时的注意事项(重要!)各章内容摘要1前言现在,挑选自己喜欢的配件来组装一台世界上独一无二的、个性化的PC(个人电脑)对我们来说已不再困难。不仅如此,只要使用合适的编译器①,我们就可以自己编写游戏、制作自己的工具软件;使用网页制作工具,我们还可以轻而易举地制作主页;如果看过名著《CPU制作法》②的话,就连自制CPU也不在话下。然而,在“自制领域”里至今还有一个无人涉足的课题——自己制作操作系统(OS)③,它看起来太难以至于初学者不敢轻易挑战。电脑组装也好,游戏、工具软件制作也好,主页也好,CPU也好,这些都已经成为初学者能够尝试的项目,而唯独操作系统被冷落在一边,实在有些遗憾。“既然还没有这样的书,那我就来写一本。”这就是笔者撰写本书的初衷。也许是因为面向初学者的书太少的缘故吧,一说起操作系统,大家就会觉着那东西复杂得不得了,简直是高深莫测。特别是像Windows和Linux这些操作系统,庞大得一张光盘都快装不下了,要是一个人凭着兴趣来开发的话,不知道需要历经多么漫长的过程才能完成。笔者也认为,像这么复杂的操作系统,单凭一个人来做,一辈子都做不出来。——————————①英文为compiler,指能够将源代码编译成机器码的软件。②《CPU制作法》,渡波郁著,每日Communications出版公司,ISBN4-8399-0986-5。③OperatingSystem的缩写,汉语译作“操作系统”。Windows、Linux、MacOS、MS-DOS等软件的总称。第0天12……第0天:着手开发之前不过大家也不必担心太多。笔者就成功地开发过一个小型操作系统,其大小还不到80KB①。麻雀虽小,五脏俱全,这个操作系统的功能还是很完整的。有人也许会怀疑:“这么小的操作系统,是不是只有命令行窗口②啊?要不就是没有多任务③?”不,这些功能都有。怎么样,只有80KB的操作系统,大家不觉得稍作努力就可以开发出来吗?即使是初学者,恐怕也会觉得这不是件难事吧?没错,我们用一个月的时间就能写出自己的操作系统!所以大家不用想得太难,我们轻轻松松地一起来写写看吧。以本书作者为主角开发的操作系统OSASK④大家一听到编译后的文件大小为80KB可能会觉得它作为程序来讲已经很小了,不过曾经编过程序的人可以查一查自己编的程序(.exe文件)的大小,这样就能体会到80KB到底是难是易了。——————————①kilobyte,程序及数据大小的度量单位,1字节(byte)的1024倍。一张软盘的容量是1440KB。顺便提一下,1024KB等于1MB(兆字节)。1字节是8个比特,正好能记录8位0和1的信息。B到底是指字节(byte),还是指比特(bit),有时容易混淆。这里根据一般的规则,用大写B表示字节,小写b表示比特。②console,通过键盘输入命令的一种方式,基本上只用文字进行计算机操作,是MS-DOS等老式操作系统的主流操作方式。③在操作系统的世界里,运行中的程序叫做“任务”,而同时执行多个任务的方式就被称为“多任务”(multitask)。④笔者与他人一起合作开发的操作系统(趁机宣传一下)。虽然只有小小的78KB,不过为了做它也花了好几年的时间。而这次能在短时间内开发完成操作系统,是因为我们较好地总结了开发操作系统所必要的知识。也就是说,如果笔者在年轻时可以看到现在这本书的话,可能在短时间内就能开发出OSASK了,所以笔者很羡慕大家呀。2何谓操作系统……3032021810169227121113151415没编过程序的人也可以下载一个看上去不是很复杂的自由软件,看看它的可执行文件有多大。Windows2000的计算器程序大约是90KB,大家也可以根据这个想象一下。本书对于不打算自己写操作系统,甚至连想都没想过这个问题的人来说也会大有裨益。举个例子,读本自己组装PC的书就能知道PC是由哪些组件构成的,PC的性能是由哪些部分决定的;读本如何编写游戏的书,就能明白游戏是怎样运行的;同理,读了本书,了解了操作系统的开发过程,就能掌握操作系统的原理。所以说,对操作系统有兴趣的人,哪怕并不想自己做一个出来,也可以看看这本书。阅读本书几乎不需要相关储备知识,这一点稍后还会详述。不管是用什么编程语言,只要是曾经写过简单的程序,对编程有一些感觉,就已经足够了(即使没有任何编程经验,应该也能看懂),因为这本书主要就是面向初学者的。书中虽然有很多C语言程序,但实际上并没有用到很高深的C语言知识,所以就算是曾经因为C语言太难而中途放弃的人也不用担心看不懂。当然,如果具备相关知识的话,理解起来会相对容易一些,不过即使没有相关知识也没关系,书中的说明都很仔细,大家可以放心。本书以IBMPC/AT兼容机(也就是所谓的Windows个人电脑)为对象进行说明。至于其他机型①,比如Macintosh(苹果机)或者PC-9821等,虽然本书也参考了其中某些部分,但基本上无法开发出在这些机型上运行的操作系统,这一点还请见谅。严格地说,不是所有能称为AT兼容机的机型都可以开发我们这个操作系统,我们对机器的配置要求是CPU高于386(因为我们要开发32位操作系统)。换句话说,只要是能运行Windows95以上操作系统的机器就没有问题,况且现在市面上(包括二手市场)恐怕都很难找到Windows95以下的机器了,所以我们现在用的机型一般都没问题。另外,大家也不用担心内存容量和硬盘剩余空间,我们需要使用的空间并不大。只要满足以上条件,就算机器又老又慢,也能用来开发我们的操作系统。2何谓操作系统说老实话,其实笔者也不是很清楚。估计有人会说:“连这个都不懂,还写什么书?”不好意思……笔者见过很多种操作系统,有的功能非常多,而有的功能特别少。在比较了各种操作系统之后,笔者还是没有找到它们功能的共同点,无法下定义。结果就是,软件作者坚持说自己做的就是操作系统,而周围的人也不深究,就那样默认了,以至于什么软件都可以算是操作系统。笔者现在就是这么认为的。既然就操作系统而言各有各的说法,那笔者也可以反过来利用这一点,一开始就根据自己的需要来定义操作系统,然后开发出一个满足自己定义条件的软件就可以了。这当然也算是开发操——————————①本书所讲的操作系统内容仅用Macintosh是开发不了的,并且开发出的操作系统也不能直接在Macintosh上运行。但是在PC上开发的操作系统,可以通过模拟器在Macintosh上运行。24……第0天:着手开发之前作系统了。哪怕做一个MS-DOS那样的,在一片漆黑的画面上显示出白字,输入个命令就能执行的操作系统也可以,这对笔者来说很简单。但这样肯定会让一些读者大失所望。现在初学者也都见多识广,一提到操作系统,大家就会联想到Windows、Linux之类的庞然大物,所以肯定期待自制操作系统至少能任意显示窗口、实现鼠标光标控制、同时运行几个应用程序,等等。所以为了满足读者的期待,我们这次就来开发一个具有上述功能的操作系统。3开发操作系统的各种方法开发操作系统的方法也是各种各样的。笔者认为,最好的方法就是从既存操作系统中找一个跟自己想做的操作系统最接近的,然后在此基础上加以改造。这个方法是最节省时间的。但本书却故意舍近求远,一切从零开始,完完全全是自己从头做起,这是因为笔者想向各位读者介绍从头到尾开发操作系统的全过程。如果我们找一个现成的操作系统,然后在此基础上删删改改的话,那这本书就不能涉及操作系统全盘的知识了,这样肯定无法让读者朋友满意。不过由于是全部从零做起,所以篇幅长些,还请读者朋友们耐下心来慢慢看。要开发操作系统,首先遇到的问题就是使用什么编程语言,这次我们想以C语言为主。“啊,C语言啊?”笔者仿佛已经听到大家抱怨的声音了(苦笑)。“这都什么年代了,用C语言多土啊”、“用C++多好呀”、“还是Java好”、“不,我就喜欢Delphi”、“我还是觉得VisualBasic最好”……大家个人喜好习惯各不相同。这种心情笔者都能理解,但为了讲解时能简单一些,笔者还是想用C语言,请大家见谅。C语言功能虽不多,但用起来方便,所以用来开发操作系统刚好合适。要是用其他语言的话,仅讲解语言本身就要花很长时间,大家恐怕就没兴趣看下去了。在这里先向大家传授一个从零开始开发操作系统的诀窍,那就是不要一开始就一心想着要开发操作系统,先做一个有点操作系统样子的东西就行了。如果我们一上来就要开发一个完整的操作系统的话,要做的东西太多,想想脑袋都大了,到时恐怕连着手的勇气也没有了。笔者就是因为这个,几年间遇到了很多挫折。所以在这本书里,我们不去大张旗鼓地想着要开发一个操作系统,而是编写几个像操作系统的演示程序①就行了。其实在开发演示程序的过程中大家就会逐步发现,演示程序不再是简单的演示程序,而是越来越像一个操作系统了。4无知则无畏当我们打算开发操作系统时,总会有人从旁边跳出来,罗列出一大堆专业术语,问这问那,像内核怎么做啦,外壳怎么做啦,是不是单片啦,是不是微内核啦,等等。虽然有时候提这些问——————————①演示程序的英文是demonstration。指不是为了使用,而是为了演示给人看的软件。344无知则无畏……5032021810169227121113151415题也是有益的,但一上来就问这些,当然会让人无从回答。要想给他们一个满意答复,让他们不再从旁指手画脚的话,还真得多学习,拿出点像模像样的见解才行。但我们是初学者,没有必要去学那些麻烦的东西,费时费力且不说,当我们知道现有操作系统在各方面都考虑得如此周密的时候,就会发现自己的想法太过简单而备受打击没了干劲。如果被前人的成果吓倒,只用这些现有的技术来做些拼拼凑凑的工作,岂不是太没意思了。所以我们这次不去学习那些复杂的东西,直接着手开发。就算知道一大堆专业术语、专业理论,又有什么意思呢?还不如动手去做,就算做出来的东西再简单,起码也是自己的成果。而且自己先实际操作一次,通过实践找到其中的问题,再来看看是不是已经有了这些问题的解决方案,这样下来更能深刻地理解那些复杂理论。不管怎么说,反正目前我们也无法回答那些五花八门的问题,倒不如直接告诉在一旁指手画脚的人们:我们就是想用自己的方法做自己喜欢的事情,如果要讨论高深的问题,就另请高明吧。■■■■■其实反过来看,什么都不知道有时倒是好事。正是因为什么都不知道,我们才可能会认真地去做那些专家们嗤之以鼻的没意义的“傻事”。也许我们大多时候做的都没什么意义,但有时也可能会发掘出专家们千虑一失的问题呢。专家们在很多方面往往会先入为主,甚至根本不去尝试就断定这也不行那也不行,要么就浅尝辄止。因此能够挑战这些问题的,就只有我们这种什么都不知道的门外汉。任何人都能通过学习成为专家,但是一旦成为专家,就再也找不回门外汉的挑战精神了。所以从零开始,在没有各种条条框框限制的情况下,能做到什么程度就做到什么程度,碰壁以后再回头来学习相关知识,也为时未晚。实际上笔者也正是这样一路磕磕绊绊地走过来,才有了今天。笔者没去过教授编程的学校,也几乎没学什么复杂的理论就开始开发操作系统了。但也正是因为这样,笔者做出的操作系统与其他的操作系统大不相同,非常有个性,所以得到了专家们的一致好评,而且现在还能有机会写这本书,向初学者介绍经验。总地说来,笔者从着手开发直到现在,每天都是乐在其中的。正是像笔者这样自己摸着石头过河,一路磕磕绊绊走过来的人,讲出的东西才简单易懂。不过在讲解过程中会涉及失败的经验,以及如何重新修正最终取得成功,所以已经懂了的人看着可能会着急。不好意思,如果碰到这种情况请忍耐一下吧。读了这部分内容或许有人会觉得“是不是什么都不学习才是最好的啊”,其实那倒不是。比如工作上需要编写某些程序,或者一年之内要完成某些任务,这时没有时间去故意绕远路,所以为了避免不必要的失败,当然是先学习再着手开发比较好。但这次我们是因为自己的兴趣而学习操作系统的开发的,既然是兴趣,那就是按自己喜欢的方式慢慢来,这样就挺好的
本文标题:30天自制操作系统
链接地址:https://www.777doc.com/doc-5537549 .html