“What Order Should I Make Things In?”的版本间差异

来自osdev
跳到导航 跳到搜索
(创建页面,内容为“这是一个风格问题。 您可以从一开始就开始,直接深入研究,编写一个引导扇区,然后编写一个最小内核,然后从那里构建。 您可以跳过引导扇区,使用像GRUB这样的现成引导加载程序(关于 Rolling Your Own bootloader是一种宝贵的经验还是浪费时间,可以进行讨论)。 你也可以不按特定的顺序写一些零碎的东西,然后把它们放…”)
 
(没有差异)

2021年12月20日 (一) 07:56的版本

这是一个风格问题。 您可以从一开始就开始,直接深入研究,编写一个引导扇区,然后编写一个最小内核,然后从那里构建。 您可以跳过引导扇区,使用像GRUB这样的现成引导加载程序(关于 Rolling Your Own bootloader是一种宝贵的经验还是浪费时间,可以进行讨论)。 你也可以不按特定的顺序写一些零碎的东西,然后把它们放在最后。做这件事可能没有正确或错误的方法。 如果你想了解一些方便使用的东西(实际上是每个操作系统的必备品),你可以继续阅读。

先发

  1. 必须在屏幕上打印字符串和整数(十进制和十六进制)。 这是最基本的调试方法之一,实际上我们所有人都经历过版本0.01中的kprint()或kout。
  2. 输出到串行端口将节省大量调试时间。 您不必担心由于滚动而丢失信息。 您将能够从控制台测试您的操作系统,过滤有趣的调试消息,并自动化一些测试。
  3. 拥有一个工作可靠的中断/异常处理系统,可以转储寄存器的内容(可能还有故障地址),这将非常有用。
  4. 规划内存映射(虚拟和物理):决定数据的位置
  5. 堆:在运行时分配内存(“malloc”和“free”)几乎是不可能的。 It should be implemented as soon as possible.

一旦这些步骤完成,在拥有文件系统、多任务处理或模块加载之前,是否尝试拥有一个工作的GUI完全取决于您。 试着勾勒出什么可能取决于什么,并以“最不依赖于什么”的顺序做事。

例如,GUI可以依赖文件系统来加载位图或资源,但您不一定需要在第一个GUI中使用位图。 在这种情况下,最好的建议是首先设计文件系统的接口(无论是打开/关闭/读/写还是其他),然后继续进行您喜欢的任何操作,同时尊重双方的接口。

极端风格

OSDev似乎在osdever(以及他们开发的操作系统)中有“原型”。 当然,大多数人对“完整”内核的理解包括下面列出的大部分(如果不是全部的话)项目。

利诺突击队

正文: Lino Commando

他对DOS时代的“裸体美”印象深刻。 他想要的第一件事是在“>”符号后有一个闪烁的光标,这样他就可以键入命令。 不管是否无法同时启动两个程序:他只需要一个文本编辑器和一个文件系统驱动程序。

Nick Stacky

正文: Nick Stacky

他的测试机没有键盘和屏幕(没有人需要)。 他所需要的只是网卡。。。大量的NIC。。。和一根以太网电缆,以查看他的内核是否响应ping并正确路由数据包。当然,他的内核具有强大的多线程和完整的TCP/IP堆栈。

James T. Klik

正文: James T. Klik

透过窗口看:看到alpha混合和抗锯齿字体的背景了吗?看到屏幕的角落了吗? 那是克里克的开始菜单!嗯,没有:我没有所谓的“程序”文件夹,因为我现在无法加载任何应用程序,但这里有一个16项的测试用例列表,用于我的WidgetToolKit。

Eleanore Semaphore

正文: Eleanore Semaphore

在一个小房间的黑暗角落里工作,到处都是物品清单。 自去年以来,她的系统有了很大的发展,尽管她能向你展示的仍然是一样的:在她用魔术组合键控制的文本控制台上,A和B的串没有明显的顺序显示。 你会听到她在谈论如何为她的调度器实现组件编程、自动依赖解析和虚拟时钟算法。

Alta Lang

正文: Alta Lang

为什么有人想在像C这样笨重而陈旧的东西中编写像操作系统这样复杂的东西? Alta希望她的系统有所不同:为更优雅的操作系统设计一种新的语言。她花在语言设计上的时间至少与花在系统设计上的时间一样多,希望如果她能设计出足够干净、足够强大的语言,那么系统就会简单地就位。

Stan Dard

正文: Stan Dard

斯坦知道事情应该是怎样的。 这些都很好地写在了标准中。 他看到了它们是如何结合在一起形成一个美丽的系统,如果你忽略了标准中所有愚蠢的部分。 对于他所知道的领域,他有一个相当完整的实现,对于他不熟练的领域,他没有令人印象深刻的代码。

Richard Theseus

正文: Richard Theseus

Richard非常喜欢他现在的操作系统,除了一件事:它不是他写的。 一点一点地,他想用自己的代码替换当前操作系统的部分。 他的最终目标是拥有一个与其主机操作系统完全相同的副本,但要使用他的代码。

Mister Perfect

正文: Mister Perfect

Perfect先生想写一个完美的操作系统,因为他看到了当前操作系统的所有缺陷。 他研究了许多设计和实现的可能性,以决定什么更好。 为了保证质量和完美性,他多次重新开始。

Andy Microbaum

正文: Andy Microbaum

Andy是小内核的粉丝,他把在单一内核中完成的很多事情放到用户空间中。

Dizz Tracked

正文: Dizz Tracked

Dizz被不必要的次要项目分散了注意力。

Mono Lizzy

正文: Mono Lizzy

丽萃喜欢把所有东西都放在一个大内核里。

Ideas for new Archetypes

  • Edward Scissorhands - 听起来像是设计在纸上做任何事情,但在实践中完全被打破了,我看到的是架构宇航员在做vaporware(例如,你永远看不到架构需要的剪刀式实现)* Real Man - 在汇编中写入整个操作系统,最好是以实模式。憎恶[吃蛋奶饼的人[1]。* Vizier Studio - Visual Studio people.* Barry Pi - ARM people.* Racing Carl - 在受保护模式下进行汇编,重写最新的3D库,并尝试从代码中挤出最后一点速度。

要避免的原型

  • Cowboy Coder - 一个没有任何计划就热衷于编码的人。* Dae Dreamer- 一个整天都在做白日梦和阅读操作系统的人,但还没有开始。* Duct von Tape - 重用大量代码并将其组合成可怕的弗兰肯斯坦项目的人。Or perhaps lovecraftian?* Sir Dunning-Kruger - Someone overestimating his/her skills dramatically.