What Order Should I Make Things In?
这是一个风格问题。 你可以从头开始,然后直接不断深入,编写一个引导扇区,然后是一个最小的内核,然后从那里开始搭建。 你也可以跳过引导扇区部分,使用像 GRUB 这样的现成的引导加载程序, (实现自己的引导加载程序是一种宝贵的经验还是浪费时间,不同人看法不同)。 你也可以不按特定的顺序写一些零碎的东西,然后把它们最后放在一起。 做这件事可能没有对或错的方法。 如果你想概览一些开展日常工作(并且实际上是每个操作系统所必需的工作)的有益风格,则可以继续阅读本文。
起步阶段
- 在屏幕上打印字符串和整数(包括小数和十六进制)肯定是必须的。 这是最基本的调试方法之一,几乎我们所有人都经历了0.01版中的kprint() 或kout。(译者注:指内核实现的屏幕输出函数)
- 可以在串口输出,将节省大量调试时间。 你不必担心会因为屏幕滚动而丢失信息。 你将能够从控制台测试你的操作系统,过滤感兴趣的调试消息,并自动化一些测试。
- 拥有一个工作可靠的中断/异常处理系统,可以转储寄存器的内容(可能还有故障地址),这将非常有用。
- 规划你的内存映射(虚拟的和物理的):决定你想要将数据放在哪里
- 堆: 在运行时分配内存 (malloc 和 free) 几乎不可能没有。 应该尽快实施。
一旦完成这些步骤,在拥有文件系统、多任务处理或模块加载之前,你是否会尝试开始建立一个可工作的GUI完全取决于你。 试着勾勒出组成部分间的依赖关系,并以 “最小依赖优先” 的顺序做事情。
例如,GUI需要依赖文件系统来加载位图或资源,而在GUI中肯定会遇到需要位图。 那么在这种情况下,建议你首先设计文件系统的接口(可以是打开/关闭/读/写或其他),然后根据两边的接口继续推进你喜欢的下一步工作。
极端风格
在OSDev社区现有的开发者中有几种"风格原型",而且俗话说“物似主人形”他们开发的操作系统也各有千秋。(译者注:这里作者给各种OS开发计划风格起了一些揶揄的名字,以供各位开发者对号入座:)) 来吧让我在下面列出大多数人对“完整”内核的看法(也许还不是全部)和代表项目。
Lino Commando
- 正文: Lino Commando
DOS时代的 “裸露美” 给他留下了深刻的印象。 他想要的第一件事是在“>”符号后有一个闪烁的光标,这样他就可以键入命令了。 能否同时启动两个程序先放一边不说:他只需要一个文本编辑器和一个文件系统驱动程序。
Nick Stacky
- 正文: Nick Stacky
他的测试机没有键盘,也没有屏幕 (谁需要啊)。 他所需要的只是网卡... 大量的网卡...以及一根以太网电缆,以查看他的内核是否响应ping并正确路由数据包。 当然,他的内核拥有强大的多线程和完整的TCP/IP协议栈实现。
James T. Klik
- 正文: James T. Klik
来看看这个视窗系统: 看到带有alpha混合和抗锯齿字体的背景吗? 看屏幕的角落位置, 那是Klik的开始菜单! 呃,不: 我没有所谓的“程序”文件夹,因为我现在还无法加载任何应用程序,但下面是我的WidgetToolKit的16项测试用例清单。
Eleanore Semaphore
奋斗在到处都是任务清单的小黑屋里。 自去年以来,她的系统发生了很大的变化,尽管她可以向你展示的内容还没怎么变: 在她用快捷组合键控制的文本控制台上,一堆AB字母以意义不明的顺序显示着。 你会了解到她在谈论如何为调度器实现组件编程、自动依赖解析和虚拟时钟算法。
Alta Lang
- 正文: Alta Lang
为什么会有人想要用像C这样笨重而古老的东西来编写像操作系统这样复杂的东西呢? Alta希望为她的系统提供一些不同的东西: 一种用于更优雅的操作系统的新语言。 她花在语言设计上的时间至少与花在系统设计上的时间一样多,希望如果她能设计出足够干净、足够强大的语言,那么系统就完全到位啦。
Stan Dard
- 正文: Stan Dard
斯坦知道事情应该是怎样的。 标准上写得很好。 他看到了它们如何结合在一起,形成了一个美丽的体系,就是你要忽略所有标准中愚蠢的部分。 他对他所知道的领域有相当完整的实现,而对于他不熟练的领域,他的代码并不令人印象深刻。
Richard Theseus
- 正文: Richard Theseus
理查德非常喜欢他现在用的操作系统,除了一件事: 它不是他写的。 他想用自己的代码一点一点地部分替换当前操作系统。 他的最终目标是拥有一个与他的主机操作系统完全相同的副本,但带有他的代码。
Mister Perfect
- 正文: Mister Perfect
完美先生希望编写一个完美的操作系统,因为他着眼于当前操作系统的所有缺陷。 他研究了许多设计和实现的可能性,以决定什么更好。 为了保证质量和完美,他从头开始了很多次。
Andy Microbaum
- 正文: Andy Microbaum
Andy是小型内核的粉丝,他将原来在整体内核中完成的许多工作放入了用户空间。
Dizz Tracked
- 正文: Dizz Tracked
Dizz是个三心二意的人,她被不必要的次要项目分散了注意力。
Mono Lizzy
- 正文: Mono Lizzy
Lizzy喜欢把所有的东西都放在一个大内核里。
风格榜
- Edward Scissorhands(剪刀手爱德华) - 听起来像纸上谈兵的东西,可以做所有事情,但在实践中却完全弄不起来,我感觉就是在画饼。 (剪刀手可盖不了能住的房子)
- Real Man(实在人) - 用汇编写整个操作系统,更喜欢搞实模式。 Abhors Quiche Eaters和Pascal
- Vizier Studio(VS爱好着) - Visual Studio人员。
- Barry Pi(派爱好者) - ARM人员。
- Racing Carl(竞速魔) - 在保护模式汇编程序中执行所有操作,并重写最新的3D库,还试图从代码中挤出最后一点速度。