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

来自osdev
跳到导航 跳到搜索
第1行: 第1行:
这是一个风格问题。 您可以从一开始就开始,直接深入研究,编写一个引导扇区,然后编写一个最小内核,然后从那里构建。 您可以跳过引导扇区,使用像[[GRUB]]这样的现成引导加载程序(关于[[Rolling Your Own bootloader | Rolling Your Own bootloader]]是一种宝贵的经验还是浪费时间,可以进行讨论)。 你也可以不按特定的顺序写一些零碎的东西,然后把它们放在最后。做这件事可能没有正确或错误的方法。 如果你想了解一些方便使用的东西(实际上是每个操作系统的必备品),你可以继续阅读。
这是一个风格问题。 你可以从头开始,然后直接不断深入,编写一个引导扇区,然后是一个最小的内核,然后从那里开始构建。 你可以跳过引导扇区部分,使用像 [[GRUB]] 这样的现成的引导加载程序, (对[[Rolling Your Own Bootloader|实现你自己的引导加载程序]] 是一种宝贵的经验还是浪费时间还存在不同看法)。 你也可以不按特定的顺序写一些零碎的东西,然后把它们放在最后。 做这件事可能没有对或错的方法。 如果你想概览一些易于开展的日常工作 (并且实际上是每个操作系统所必需的工作),则可以继续阅读。


== 先发 ==
==对于初学者==


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


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


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


== 极端风格 ==
== 极端风格 ==
OSDev似乎在osdever(以及他们开发的操作系统)中有“原型”。 当然,大多数人对“完整”内核的理解包括下面列出的大部分(如果不是全部的话)项目。
在OSDev已有的开发者中有几种"原型",而且俗话说“物似主人形”他们开发的操作系统也各有千秋。 当然,下面列出列出了大多数人对“完整”内核的看法(也许还不是全部)和代表项目。


=== 利诺突击队 ===
=== Lino Commando ===
{{main|Lino Commando}}
{{main|Lino Commando}}
他对DOS时代的“裸体美”印象深刻。 他想要的第一件事是在“>”符号后有一个闪烁的光标,这样他就可以键入命令。 不管是否无法同时启动两个程序:他只需要一个文本编辑器和一个文件系统驱动程序。
DOS时代的 “裸露美” 给他留下了深刻的印象。 他想要的第一件事是在“>”符号后有一个闪烁的光标,这样他就可以键入命令了。 不管是否还无法同时启动两个程序:他只需要一个文本编辑器和一个文件系统驱动程序。


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


=== James T. Klik ===
=== James T. Klik ===
{{main|James T. Klik}}
{{main|James T. Klik}}
透过窗口看:看到alpha混合和抗锯齿字体的背景了吗?看到屏幕的角落了吗? 那是克里克的开始菜单!嗯,没有:我没有所谓的“程序”文件夹,因为我现在无法加载任何应用程序,但这里有一个16项的测试用例列表,用于我的WidgetToolKit。
来看看这个Window: 看到带有alpha混合和抗锯齿字体的背景吗? 看屏幕的角落位置, 那是Klik的开始菜单! 呃,不: 我没有所谓的“程序”文件夹,因为我现在还无法加载任何应用程序,但下面是我的WidgetToolKit的16项测试用例列表。


=== Eleanore Semaphore ===
=== Eleanore Semaphore ===
{{main|Eleanore Semaphore}}
{{main|Eleanore Semaphore}}
在一个小房间的黑暗角落里工作,到处都是物品清单。 自去年以来,她的系统有了很大的发展,尽管她能向你展示的仍然是一样的:在她用魔术组合键控制的文本控制台上,A和B的串没有明显的顺序显示。 你会听到她在谈论如何为她的调度器实现组件编程、自动依赖解析和虚拟时钟算法。
奋斗在小黑屋里,到处都是任务清单。 自去年以来,她的系统发生了很大的变化,尽管她可以向你展示的内容还没怎么变: 在她用快捷组合键控制的文本控制台上,一堆AB字母以意义不明的顺序显示着。 你会了解到她在谈论如何为调度器实现组件编程、自动依赖解析和虚拟时钟算法。


=== Alta Lang ===
=== Alta Lang ===
{{main|Alta Lang}}
{{main|Alta Lang}}
为什么有人想在像C这样笨重而陈旧的东西中编写像操作系统这样复杂的东西? Alta希望她的系统有所不同:为更优雅的操作系统设计一种新的语言。她花在语言设计上的时间至少与花在系统设计上的时间一样多,希望如果她能设计出足够干净、足够强大的语言,那么系统就会简单地就位。
为什么会有人想要用像C这样笨重而古老的东西来编写像操作系统这样复杂的东西呢? Alta希望为她的系统提供一些不同的东西: 一种用于更优雅的操作系统的新语言。 她花在语言设计上的时间至少与花在系统设计上的时间一样多,希望如果她能设计出足够干净、足够强大的语言,那么系统就完全到位啦。


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


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


=== Mister Perfect ===
=== Mister Perfect ===
{{main|Mister Perfect}}
{{main|Mister Perfect}}
Perfect先生想写一个完美的操作系统,因为他看到了当前操作系统的所有缺陷。 他研究了许多设计和实现的可能性,以决定什么更好。 为了保证质量和完美性,他多次重新开始。
完美先生希望编写一个完美的操作系统,因为他着眼于当前操作系统的所有缺陷。 他研究了许多设计和实现的可能性,以决定什么更好。 为了保证质量和完美,他从头开始了很多次。


=== Andy Microbaum ===
=== Andy Microbaum ===
{{main|Andy Microbaum}}
{{main|Andy Microbaum}}
Andy是小内核的粉丝,他把在单一内核中完成的很多事情放到用户空间中。
安迪 (Andy) 是小型内核的粉丝,他们将原来在整体内核中完成的许多工作放入了用户空间。


=== Dizz Tracked ===
=== Dizz Tracked ===
第58行: 第58行:
=== Mono Lizzy ===
=== Mono Lizzy ===
{{main|Mono Lizzy}}
{{main|Mono Lizzy}}
丽萃喜欢把所有东西都放在一个大内核里。
莉兹喜欢把所有的东西都放在一个大内核里。


=== Ideas for new Archetypes ===
==新原型的想法===


* '''Edward Scissorhands''' - 听起来像是设计在纸上做任何事情,但在实践中完全被打破了,我看到的是架构宇航员在做vaporware(例如,你永远看不到架构需要的剪刀式实现)* '''Real Man''' - 在汇编中写入整个操作系统,最好是以实模式。憎恶[http://en.wikipedia.org/wiki/Real_Men_Don“你吃蛋奶饼[吃蛋奶饼的人]和[http://en.wikipedia.org/wiki/Real_Programmers_Don%27t_Use_Pascal帕斯卡]* '''Vizier Studio''' - Visual Studio people.* '''Barry Pi''' - ARM people.* '''Racing Carl''' - 在受保护模式下进行汇编,重写最新的3D库,并尝试从代码中挤出最后一点速度。
* '''Edward Scissorhands(剪刀手爱德华)''' - 听起来像纸上谈兵的东西,可以做所有事情,但在实践中却完全弄不起来,我感觉还在画饼。 (剪刀手可盖不了能住的房子)
* '''Real Man(实在人)''' - 用汇编中写整个操作系统,更喜欢搞实模式。 Abhors [http://en.wikipedia.org/wiki/Real_Men_Do't_Eat_Quiche Quiche Eaters]和[http://en.wikipedia.org/wiki/Real_Programmers_Don%27t_Use_Pascal Pascal]
* '''Vizier Studio''' - Visual Studio人员。
* '''Barry Pi''' - ARM人员。
* '''Racing Carl''' - 在保护模式汇编程序中执行所有操作,并重写最新的3D库,还试图从代码中挤出最后一点速度。


=== 要避免的原型 ===
=== 避免的原型 ===


* '''[[Cowboy Coder]]''' - 一个没有任何计划就热衷于编码的人。* '''[[Dae Dreamer]]'''- 一个整天都在做白日梦和阅读操作系统的人,但还没有开始。* '''[[Duct von Tape]]''' - 重用大量代码并将其组合成可怕的弗兰肯斯坦项目的人。Or perhaps [[:Category:Lovecraftian|lovecraftian]]?* '''[[Sir Dunning-Kruger]]''' - Someone overestimating his/her skills dramatically.
* '''[[Cowboy Coder|编程牛仔]]''' - 一个在没有任何计划的情况下热衷于编码的人。
* '''[[Dae Dreamer|梦想家]]'''- 他们把所有的时间都花在白日做梦和阅读操作系统上,但还没有启动操作系统。
* '''[[Duct von Tape|缝合怪]]''' - 重复使用大量代码并将其组合成一个项目的可怕的科学怪人。 或者是[[:Category:Lovecraftian|克苏鲁]]
* '''[[Sir Dunning-Kruger|无知者无畏]]''' - 有些人会严重高估了他/她的技能。


[[Category:FAQ]]
[[Category:FAQ]]

2022年2月15日 (二) 03:10的版本

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

对于初学者

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

一旦完成这些步骤,在拥有文件系统、多任务处理或模块加载之前,你是否会尝试开始建立一个可工作的GUI完全取决于你。 试着勾勒出组成部分间的依赖关系,并以 “最小依赖优先” 的顺序做事情。

例如,GUI可以依赖文件系统来加载位图或资源,但在第一个GUI中不一定需要位图。 在这种情况下,好的建议是首先设计文件系统的接口(可以是打开/关闭/读/写或其他),然后根据两端的接口继续你喜欢的下一步工作。

极端风格

在OSDev已有的开发者中有几种"原型",而且俗话说“物似主人形”他们开发的操作系统也各有千秋。 当然,下面列出列出了大多数人对“完整”内核的看法(也许还不是全部)和代表项目。

Lino Commando

正文: Lino Commando

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

Nick Stacky

正文: Nick Stacky

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

James T. Klik

正文: James T. Klik

来看看这个Window: 看到带有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

莉兹喜欢把所有的东西都放在一个大内核里。

新原型的想法=

  • Edward Scissorhands(剪刀手爱德华) - 听起来像纸上谈兵的东西,可以做所有事情,但在实践中却完全弄不起来,我感觉还在画饼。 (剪刀手可盖不了能住的房子)
  • Real Man(实在人) - 用汇编中写整个操作系统,更喜欢搞实模式。 Abhors Quiche EatersPascal
  • Vizier Studio - Visual Studio人员。
  • Barry Pi - ARM人员。
  • Racing Carl - 在保护模式汇编程序中执行所有操作,并重写最新的3D库,还试图从代码中挤出最后一点速度。

避免的原型

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