What Order Should I Make Things In?

来自osdev
跳到导航 跳到搜索

这是一个风格问题。 你可以从头开始,然后直接不断深入,编写一个引导扇区,然后是一个最小的内核,然后从那里开始搭建。 你也可以跳过引导扇区部分,使用像 GRUB 这样的现成的引导加载程序, (实现自己的引导加载程序是一种宝贵的经验还是浪费时间,不同人看法不同)。 你也可以不按特定的顺序写一些零碎的东西,然后把它们最后放在一起。 做这件事可能没有对或错的方法。 如果你想概览一些开展日常工作(并且实际上是每个操作系统所必需的工作)的有益风格,则可以继续阅读本文。

起步阶段

  1. 在屏幕上打印字符串和整数(包括小数和十六进制)肯定是必须的。 这是最基本的调试方法之一,几乎我们所有人都经历了0.01版中的kprint() 或kout。(译者注:指内核实现的屏幕输出函数)
  2. 可以在串口输出,将节省大量调试时间。 你不必担心会因为屏幕滚动而丢失信息。 你将能够从控制台测试你的操作系统,过滤感兴趣的调试消息,并自动化一些测试。
  3. 拥有一个工作可靠的中断/异常处理系统,可以转储寄存器的内容(可能还有故障地址),这将非常有用。
  4. 规划你的内存映射(虚拟的和物理的):决定你想要将数据放在哪里
  5. 堆: 在运行时分配内存 (mallocfree) 几乎不可能没有。 应该尽快实施。

一旦完成这些步骤,在拥有文件系统、多任务处理或模块加载之前,你是否会尝试开始建立一个可工作的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

正文: 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 EatersPascal
  • Vizier Studio(VS爱好着) - Visual Studio人员。
  • Barry Pi(派爱好者) - ARM人员。
  • Racing Carl(竞速魔) - 在保护模式汇编程序中执行所有操作,并重写最新的3D库,还试图从代码中挤出最后一点速度。

该避免的风格

  • 编程牛仔 - 一个在没有任何计划的情况下热衷于编码的人。
  • 梦想家- 他们把所有的时间都花在白日做梦和阅读操作系统上,但还没有启动操作系统。
  • 缝合怪 - 重复使用大量代码并将其组合成一个项目的可怕科学怪人。 或者是克苏鲁
  • 无知者无畏 - 有些人会严重高估了他/她的技能。