<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Beginner_Mistakes</id>
	<title>Beginner Mistakes - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Beginner_Mistakes"/>
	<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;action=history"/>
	<updated>2026-04-06T23:29:42Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;diff=435&amp;oldid=prev</id>
		<title>2022年2月12日 (六) 15:20 Zhang3</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;diff=435&amp;oldid=prev"/>
		<updated>2022-02-12T15:20:14Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2022年2月12日 (六) 15:20的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l15&quot;&gt;第15行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第15行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 一个残酷的真相 ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 一个残酷的真相 ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''''&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;就算拥有多年在各种语言和环境中开发经验丰富的开发人员，在做操作系统开发前仍需要三思。 &lt;/del&gt;十多年的编程，包括几年汇编语言和/或系统语言（如C）的低级编码，才是理解操作系统开发的最低要求'''''&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''''&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;就算拥有多年在各种语言和环境中开发丰富经验的开发人员，在做操作系统开发前仍需要三思。 &lt;/ins&gt;十多年的编程，包括几年汇编语言和/或系统语言（如C）的低级编码，才是理解操作系统开发的最低要求'''''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;更重要的是，随着不同的“标准”、计算机和移动设备型号、外围设备和设计概念的数量不断扩大，开发操作系统的背景门槛越来越高。  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;更重要的是，随着不同的“标准”、计算机和移动设备型号、外围设备和设计概念的数量不断扩大，开发操作系统的背景门槛越来越高。  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l23&quot;&gt;第23行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第23行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;这个现象可能也有例外，但并不多；不要指望自己就是那个千里挑一的人。 如果你认为你是，请阅读[https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect 邓宁-克鲁格效应]，再重新考虑这件事。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;这个现象可能也有例外，但并不多；不要指望自己就是那个千里挑一的人。 如果你认为你是，请阅读[https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect 邓宁-克鲁格效应]，再重新考虑这件事。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;哦，郑重声明，林纳斯·托瓦兹 (Linus Torvalds) 并不是其中之一 &lt;/del&gt;-- 他在编写linux内核时是一名研究生，并且已经使用C进行了多年编码。 虽然他离十几年的标准还差得很远，但作为一名研究生，他把自己的爱好变成了他的硕士论文，他比大多数人投入更多的时间从事这个项目。 不管怎么说，他在1991年向USENET发布著名的“Linux0.0.1”版本只不过是一个循环调度程序，远远谈不上是一个完整的系统。 而达到这一点花了他一年的时间。 明白了吗？&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;哦，郑重声明，Linus Torvalds也并不是万众无一的天才 &lt;/ins&gt;-- 他在编写linux内核时是一名研究生，并且已经使用C进行了多年编码。 虽然他离十几年的标准还差得很远，但作为一名研究生，他把自己的爱好变成了他的硕士论文，他比大多数人投入更多的时间从事这个项目。 不管怎么说，他在1991年向USENET发布著名的“Linux0.0.1”版本只不过是一个循环调度程序，远远谈不上是一个完整的系统。 而达到这一点花了他一年的时间。 明白了吗？&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;虽然这个维基的大多数贡献者确实很早就开始尝试操作系统开发了，但对我们大多数人来说，这是一个由于缺乏经验而产生的错误。 这个小组的大多数先驱者甚至不知道一个小型OS项目的规模和复杂性，也不知道他们正在进入什么领域。 这是一个难以下咽的苦药，尤其是在像这个维基这样的资源被广泛使用'''以前'''。 我们不能强迫你们从我们的错误中吸取教训，但至少我们可以传递这个警告。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;虽然这个维基的大多数贡献者确实很早就开始尝试操作系统开发了，但对我们大多数人来说，这是一个由于缺乏经验而产生的错误。 这个小组的大多数先驱者甚至不知道一个小型OS项目的规模和复杂性，也不知道他们正在进入什么领域。 这是一个难以下咽的苦药，尤其是在像这个维基这样的资源被广泛使用'''以前'''。 我们不能强迫你们从我们的错误中吸取教训，但至少我们可以传递这个警告。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l30&quot;&gt;第30行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第30行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 是否有关于...的教程？ ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 是否有关于...的教程？ ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;因为这个地方不能也不适合初学者开发人员，所以经常会有人问起：在其他地方是否有提供更好的解释或易于理解的教程读物。 &lt;/del&gt;然而，'''它们不存在'''。 困难的学科不能用轻松的散文来描述，就像世上很多东西太复杂了，作为猴子是无法成功学会的一样。 如果你在阅读官方文档时遇到问题，那么这恰恰是练习的好时机。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;因为这个地方不能也不适合初学者开发人员，所以经常会有人问起：在其它地方是否有提供更好的解释或易于理解的教程读物。 &lt;/ins&gt;然而，'''它们不存在'''。 困难的学科不能用轻松的散文来描述，就像世上很多东西太复杂了，作为猴子是无法成功学会的一样。 如果你在阅读官方文档时遇到问题，那么这恰恰是练习的好时机。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;事实上，目前绝大多数的教程都存在一点两点的问题，所以你最好不要一开始就相信它们。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;事实上，目前绝大多数的教程都存在一点两点的问题，所以你最好不要一开始就相信它们。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l55&quot;&gt;第55行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第55行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===假设它不会有任何结果===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===假设它不会有任何结果===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;与上述相反，有些人认为他们的操作系统将无处可去。 &lt;/del&gt;由于这个原因，他们的项目有丑陋的代码，重要的方面不考虑，通常依赖丑陋的黑客式技巧。 最糟糕的是，他们做出的决策不会带来可用性和可扩展性。 这样，他们的假设就变成了一个自我实现的预言。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;与上述相反，有些人认为他们的操作系统将毫无用处。 &lt;/ins&gt;由于这个原因，他们的项目有丑陋的代码，重要的方面不考虑，通常依赖丑陋的黑客式技巧。 最糟糕的是，他们做出的决策不会带来可用性和可扩展性。 这样，他们的假设就变成了一个自我实现的预言。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;实际上，虽然让操作系统在测试机器之外运行的可能性很低，但从这个社区开始的高级操作系统项目有很多了。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;实际上，虽然让操作系统在测试机器之外运行的可能性很低，但从这个社区开始的高级操作系统项目有很多了。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l62&quot;&gt;第62行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第62行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;初学者经常问 “做X的“ 最容易 ”的方法是什么？” 而不是 “做X的最佳，适当，正确的方法是什么？” 这是危险的，因为新手不会花时间去理解实现某个东西的更好方法，而是从教程中选择概念上更简单的方法。 事实上，更简单的路线往往“太简单”，从长远来看，最终会造成更多问题，因为初学者对更好的替代方案一无所知，也不知道什么时候换更好。 走难走的路又有什么不好？&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;初学者经常问 “做X的“ 最容易 ”的方法是什么？” 而不是 “做X的最佳，适当，正确的方法是什么？” 这是危险的，因为新手不会花时间去理解实现某个东西的更好方法，而是从教程中选择概念上更简单的方法。 事实上，更简单的路线往往“太简单”，从长远来看，最终会造成更多问题，因为初学者对更好的替代方案一无所知，也不知道什么时候换更好。 走难走的路又有什么不好？&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;常见的例子包括懒得使用[[GCC Cross-Compiler|交叉编译器]]，不理解[[Real Mode|实模式]]、[[Unreal Mode|非实模式]]、[[Protected Mode|保护模式]]，以及[[Long Mode]]，从一个点到另一个点跳得太快，而没有首先了解如何收集所有重要配置并充分利用其所有功能（尤其是在引导和初始化期间使用BIOS检测基本功能），依赖于非标准的[[BIOS]]调用，不学习在自己的操作系统以及Windows和Linux下编写硬件驱动程序以获得最大的便利，在全球范围内公开测试功能，使用简单二进制文件而不是[[ELF]]&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;，不学习可执行文件、归档文件、图形、文档和其他文件格式以及压缩算法，等等。 &lt;/del&gt; 有经验的开发人员使用更好的替代方案是有原因的，你可能还不明白这一点。 经验丰富的开发人员在某些情况下选择使用劣质方法，但这是因为他们可以仔细分析它是否合适，并且知道何时 “不” 使用它。 作为一名初学者或中级开发人员，你可能不太了解这些方法和技术，无法判断劣质解决方案是否适合你。 记住，如果你反对一种方法，你应该足够了解它，知道它的所有错误和正确的做法。 无论哪种方式，懒惰和无知只会导致麻烦。 当有疑问时，选择看似保守的选项，而不是简单的选项。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;常见的例子包括懒得使用[[GCC Cross-Compiler|交叉编译器]]，不理解[[Real Mode|实模式]]、[[Unreal Mode|非实模式]]、[[Protected Mode|保护模式]]，以及[[Long Mode]]，从一个点到另一个点跳得太快，而没有首先了解如何收集所有重要配置并充分利用其所有功能（尤其是在引导和初始化期间使用BIOS检测基本功能），依赖于非标准的[[BIOS]]调用，不学习在自己的操作系统以及Windows和Linux下编写硬件驱动程序以获得最大的便利，在全球范围内公开测试功能，使用简单二进制文件而不是[[ELF]]&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;，不学习可执行文件、归档文件、图形、文档和其它文件格式以及压缩算法，等等。 &lt;/ins&gt; 有经验的开发人员使用更好的替代方案是有原因的，你可能还不明白这一点。 经验丰富的开发人员在某些情况下选择使用劣质方法，但这是因为他们可以仔细分析它是否合适，并且知道何时 “不” 使用它。 作为一名初学者或中级开发人员，你可能不太了解这些方法和技术，无法判断劣质解决方案是否适合你。 记住，如果你反对一种方法，你应该足够了解它，知道它的所有错误和正确的做法。 无论哪种方式，懒惰和无知只会导致麻烦。 当有疑问时，选择看似保守的选项，而不是简单的选项。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==设计==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==设计==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l83&quot;&gt;第83行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第83行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;''我想在我的操作系统上使用少于两千字节的空间！''&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;''我想在我的操作系统上使用少于两千字节的空间！''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;抱歉，那恐怕是不可能的。 使用如此少内存的操作系统几乎无法使用。 忘掉文件系统驱动程序、磁盘驱动程序、USB驱动程序等吧。 &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;如果你想开发一些小的东西，只需做一个简单的引导加载程序，而不是操作系统。&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;抱歉，那恐怕是不可能的。 使用如此少内存的操作系统几乎无法使用。 忘掉文件系统驱动程序、磁盘驱动程序、USB驱动程序等吧。 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;如果你想开发一些小的东西，只需做一个简单的bootloader，而不是操作系统。&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;你可以试试原生Forth（译者注：搜索结果，一个60年代开始的计算机解译程序，常用于天文）；它就像一个小操作系统，内核、命令解释器和汇编程序都在一个微小的二进制文件中！ 内核的某些部分甚至可以编写脚本。 你甚至不需要文件系统，许多Forth使用者会直接编辑和加载磁盘扇区。 有一个大问题： Forth的技术并不轻量级。 写好Forth完全是另一个星球，你需要深入了解它。 &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;令人惊讶的是，一些Forth粉丝擅长编写Foth解释器，但却不是很好的Forth程序员。 &lt;/del&gt;你需要成为一名优秀的Forth程序员，才能将OS设计概念与Forth相匹配，或者找出哪些概念是不需要的。 如果你无法做到这一点，那么你的操作系统将比Forth所需 “大得多”。;)(哈哈)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;你可以试试原生Forth（译者注：搜索结果，一个60年代开始的计算机解译程序，常用于天文）；它就像一个小操作系统，内核、命令解释器和汇编程序都在一个微小的二进制文件中！ 内核的某些部分甚至可以编写脚本。 你甚至不需要文件系统，许多Forth使用者会直接编辑和加载磁盘扇区。 有一个大问题： Forth的技术并不轻量级。 写好Forth完全是另一个星球，你需要深入了解它。 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;令人惊讶的是，一些Forth粉丝擅长编写Forth解释器，但却不是很好的Forth程序员。 &lt;/ins&gt;你需要成为一名优秀的Forth程序员，才能将OS设计概念与Forth相匹配，或者找出哪些概念是不需要的。 如果你无法做到这一点，那么你的操作系统将比Forth所需 “大得多”。;)(哈哈)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;找出减少代码大小的方法可能需要很多时间和思考。 Forth的发明者查尔斯·摩尔(Charles Moore)写了一个只有5行代码的CAD程序。 当被问及写这5行花了多长时间时，他回答: “哦，大约2年”!&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;找出减少代码大小的方法可能需要很多时间和思考。 Forth的发明者查尔斯·摩尔(Charles Moore)写了一个只有5行代码的CAD程序。 当被问及写这5行花了多长时间时，他回答: “哦，大约2年”!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l94&quot;&gt;第94行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第94行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;很抱歉打破了你的幻想，但这可能做不到。 即使只模拟一个系统也需要多年的工作，尤其是当它是专有的，比如Windows或Mac OS（Linux可能是四个系统中最简单的一个）。 [http://www.winehq.org/ Wine]，尽管自1993年以来一直在开发，并且是在用户空间中编写的，但许多Windows程序在上面运行仍然存在问题。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;很抱歉打破了你的幻想，但这可能做不到。 即使只模拟一个系统也需要多年的工作，尤其是当它是专有的，比如Windows或Mac OS（Linux可能是四个系统中最简单的一个）。 [http://www.winehq.org/ Wine]，尽管自1993年以来一直在开发，并且是在用户空间中编写的，但许多Windows程序在上面运行仍然存在问题。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;因此，与其专注于模仿其他系统，不如专注于自己的系统。设计它，开发它，并与它成为朋友。&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;因此，与其专注于模仿其它系统，不如专注于自己的系统。设计它，开发它，并与它成为朋友。&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===编程语言===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===编程语言===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;有些语言非常适合编写内核，而其他语言则不太适合。阅读有关&lt;/del&gt;[[Languages|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;C等其他语言&lt;/del&gt;]]的页面。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;有些语言非常适合编写内核，而其它语言则不太适合。阅读有关&lt;/ins&gt;[[Languages|&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;C等其它语言&lt;/ins&gt;]]的页面。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 内核映像 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 内核映像 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l106&quot;&gt;第106行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第106行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;当你的内核用C语言编写时，GCC会将字符串和常量放在一个称为“只读数据”的特殊部分中。 这个部分需要在你的链接器脚本中明确添加，否则它会导致各种奇怪的问题 (无法将文本打印到屏幕上，内核突然变大1MB，GRUB给出加载错误，说 “内核太大了”，等等)。 该节在[[ELF]]中名为''.rodata''，在COFF/PE（MinGW/Cygwin的输出格式）中称为''.rdata''。 构建[[GCC Cross-Compiler]]将帮助你安全地处理可能到处都是的“.rodata”。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;当你的内核用C语言编写时，GCC会将字符串和常量放在一个称为“只读数据”的特殊部分中。 这个部分需要在你的链接器脚本中明确添加，否则它会导致各种奇怪的问题 (无法将文本打印到屏幕上，内核突然变大1MB，GRUB给出加载错误，说 “内核太大了”，等等)。 该节在[[ELF]]中名为''.rodata''，在COFF/PE（MinGW/Cygwin的输出格式）中称为''.rdata''。 构建[[GCC Cross-Compiler]]将帮助你安全地处理可能到处都是的“.rodata”。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;你还可以调整你的链接器脚本以包括 &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;“其他” &lt;/del&gt;部分:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;你还可以调整你的链接器脚本以包括 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;“其它” &lt;/ins&gt;部分:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l151&quot;&gt;第151行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第151行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 如果你名不副实，尤其对那些更有经验的人，他们会对你非常警惕，缺乏加入的信任。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 如果你名不副实，尤其对那些更有经验的人，他们会对你非常警惕，缺乏加入的信任。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 如果你没有项目管理技能，少数几个“愿意”加入的人很快就会退出，因为他们忙于讨论事情，没有开始编写代码。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 如果你没有项目管理技能，少数几个“愿意”加入的人很快就会退出，因为他们忙于讨论事情，没有开始编写代码。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;而能加入的程序员通常比这里提到的程序员能力更差。&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;而随便加入的人员通常比这里提到的程序员能力更差。&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:OS Development]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:OS Development]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;diff=430&amp;oldid=prev</id>
		<title>2022年2月12日 (六) 12:27 Zhang3</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;diff=430&amp;oldid=prev"/>
		<updated>2022-02-12T12:27:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;amp;diff=430&amp;amp;oldid=429&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;diff=429&amp;oldid=prev</id>
		<title>2022年2月12日 (六) 11:50 Zhang3</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;diff=429&amp;oldid=prev"/>
		<updated>2022-02-12T11:50:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;amp;diff=429&amp;amp;oldid=428&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;diff=428&amp;oldid=prev</id>
		<title>2022年2月12日 (六) 11:43 Zhang3</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;diff=428&amp;oldid=prev"/>
		<updated>2022-02-12T11:43:43Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;amp;diff=428&amp;amp;oldid=9&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;diff=9&amp;oldid=prev</id>
		<title>Zhang3：创建页面，内容为““编写自己的操作系统”的想法把你带到了这里。 本维基旨在为您的事业提供帮助、指导和参考。  然而，新来者犯某些错误或对该主题所涉及的内容有共同的误解是很常见的。 这还不错——许多人以前犯过这些初学者错误，将来也会犯。 本页是关于在深入了解所提供的信息之前，确保您知道自己在做什么。  == 这不是什么 ==  这可能看起来像是一套…”</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Beginner_Mistakes&amp;diff=9&amp;oldid=prev"/>
		<updated>2021-12-16T01:45:55Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为““编写自己的操作系统”的想法把你带到了这里。 本维基旨在为您的事业提供帮助、指导和参考。  然而，新来者犯某些错误或对该主题所涉及的内容有共同的误解是很常见的。 这还不错——许多人以前犯过这些初学者错误，将来也会犯。 本页是关于在深入了解所提供的信息之前，确保您知道自己在做什么。  == 这不是什么 ==  这可能看起来像是一套…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;“编写自己的操作系统”的想法把你带到了这里。 本维基旨在为您的事业提供帮助、指导和参考。&lt;br /&gt;
&lt;br /&gt;
然而，新来者犯某些错误或对该主题所涉及的内容有共同的误解是很常见的。 这还不错——许多人以前犯过这些初学者错误，将来也会犯。 本页是关于在深入了解所提供的信息之前，确保您知道自己在做什么。&lt;br /&gt;
&lt;br /&gt;
== 这不是什么 ==&lt;br /&gt;
 这可能看起来像是一套要复制和粘贴的教程，加上一个论坛，当你遇到困难时可以问你问题。“事实并非如此。''“我们完全希望您[[所需知识|承担自己的责任]]，并在开始编写自己的操作系统之前成为一名经验丰富的用户空间应用程序程序员。 我们还希望您已经阅读了操作系统设计，并且已经研究了所选平台的相关文档。 不要期望这个Wiki或论坛成为某种“我自己操作系统的完整指南”，更不要说是编程技能的一般指南。&lt;br /&gt;
&lt;br /&gt;
您在这里找到的是在您之前的人留下的文档，他们通过阅读技术文档、可用的源代码、论坛帖子以及尝试和错误编程发现了这些东西。 其中一些是为了让那些人以后可以再次查找，一些是为了让我们可以指向一篇维基文章，而不是“再次”解释一个主题。&lt;br /&gt;
&lt;br /&gt;
你在这里找到的是一些小提示和路标，它们可能会帮助你走上人生道路。 “这不是一张完整的奥兹地图。”“也不应该。&lt;br /&gt;
&lt;br /&gt;
如果您还不知道[[Stack | Stack]]是什么，或者不知道如何使用[[GDB | debugger]]，我们不会特意向您解释。 访问这两页；您将看到，它们主要涉及操作系统的细节，而不是对该主题的一般介绍。 这不是一个缺陷，这是故意的。 如果你正在寻找一般编程的启示，你应该访问一般编程网站，如[http://www.stackoverflow.comStackOverflow]并在您立志成为“操作系统”开发人员之前先成为一名开发人员。&lt;br /&gt;
&lt;br /&gt;
这个维基“不会”扩展成初学者手册，因为这不是它的目的。 它是为了回答当人们觉得他们已经准备好投入内核空间编程时出现的“高级”问题。&lt;br /&gt;
&lt;br /&gt;
=== 确凿的事实 ===&lt;br /&gt;
 任何一个还没有在多种语言和环境中积累多年经验的开发人员都不应该考虑OS开发。十年的编程，包括几年汇编语言和/或系统语言（如C）的低级编码，几乎是理解该主题的最低要求。'''''&lt;br /&gt;
&lt;br /&gt;
更重要的是，随着不同“标准”、计算机和移动设备型号、外围设备和设计概念的数量不断扩大，这一点逐年增加。&lt;br /&gt;
&lt;br /&gt;
对于像丹尼斯·里奇、理查德·格林布拉特、加里·基尔达尔或史蒂夫·沃兹尼亚克这样的人来说，为硬件编写一个简单的操作系统是一回事，与他们已经非常熟悉的现有机器相比，这个操作系统相对简单，并且没有需要遵守的标准规范，也没有需要保持向后兼容性的现有积垢。 这在当前一代库存硬件上不再适用。 此外，他们中的每一个人都是经验丰富的工程师，已经做了多年的系统编程。 即便如此，它们也只是为这些体系提供了基础；大部分工作是在系统的核心（用现代术语来说就是内核）就位后，由一小群下属开发人员完成的。&lt;br /&gt;
&lt;br /&gt;
这条规则也有例外，但不多；不要指望自己是千里挑一。 如果你认为你是，请仔细阅读[https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effectDunning Kruger效应并再次考虑这件事。&lt;br /&gt;
&lt;br /&gt;
哦，作为记录，Linus Torvalds不是其中之一——他在编写Linux内核时是一名研究生，多年来一直在用C编写代码。 虽然他还差十年，但作为一名将业余爱好转化为硕士论文的研究生，他比大多数人有更多的时间从事这个项目。 无论如何，“Linux 0.0”。他在1991年向USENET发布的1'版本只不过是一个循环调度程序，离完整的系统还差得远。 他花了一年时间才达到这一点。 明白了吗？&lt;br /&gt;
&lt;br /&gt;
诚然，这个维基的大多数贡献者开始得更快，但对我们大多数人来说，这是一个因缺乏经验而产生的错误。 这个团队的大多数先驱者都不知道哪怕是一个小的操作系统项目的规模和复杂性，也不知道自己在做什么。 这是一个难以下咽的药丸，尤其是像这个Wiki这样的“以前”资源被广泛使用。 我们不能强迫你们从错误中吸取教训，但至少我们可以传递这个警告。&lt;br /&gt;
&lt;br /&gt;
现在，你不应该对此感到“太”气馁；重点不是你不能这么做，而是如果你和我们大多数人刚开始的时候一样，你可能“现在”还不能这么做。在开始这么大的项目时，耐心是一种美德。&lt;br /&gt;
&lt;br /&gt;
=== Is there a tutorial on...? ===&lt;br /&gt;
因为这个地方不能也不适合初学者开发人员，所以经常会问，哪个地方提供教程、好的解释或易懂的阅读。 但是，“它们不存在”。困难的主题不能用轻松的散文来描述，就像有太多太复杂的东西让猴子无法正确学习一样。 如果您在阅读官方文档时遇到困难，这将是一个很好的练习时间。&lt;br /&gt;
&lt;br /&gt;
事实上，目前绝大多数的教程至少有一种方式被破坏了，所以你最好不要一开始就相信它们。&lt;br /&gt;
&lt;br /&gt;
== 范围 ==&lt;br /&gt;
 === 截止日期 ===&lt;br /&gt;
无论是大学、业余爱好还是商业用途，操作系统开发都需要时间。Linux内核花了一年多的时间才变得有用，而Linus Torvalds所做的只是“模仿”现有的和有良好文档记录的行为，以获得一个已经存在的用户空间在其上运行。 此外，对于每一个像Linux这样成功的项目，实际上都有“数百”个项目消耗了一个人年或更多的工作，而没有托管一个功能shell。&lt;br /&gt;
&lt;br /&gt;
因此，为你想做的事情规划一个合理的路线图。 不要假设在3个月内，您的操作系统将拥有GUI和语音识别，因为操作系统开发中根本不包含任何RAD工具。 事实上，它们是完全没有的。 （“空虚”。这是个玩笑。 明白吗？）&lt;br /&gt;
&lt;br /&gt;
=== 最终目标定义 ===&lt;br /&gt;
当开始一个项目时，你应该估计你的最终目标，你的最终用户，项目开发的目的，等等。 操作系统开发与此无异。 对你的目标有一个大致的了解会给你动力和你需要前进的方向。 然而，当你想到更好的事情时，不要停留在最初的最终目标上。&lt;br /&gt;
&lt;br /&gt;
不幸的是，许多操作系统开发人员没有估计他们最终的操作系统会是什么样子；因此，他们不知道该往哪个方向走，于是问：“下一步怎么办？”&lt;br /&gt;
&lt;br /&gt;
然而，应该提到的是，为了估计最终目标，您应该了解现有操作系统如何工作的整个（技术）概念。&lt;br /&gt;
&lt;br /&gt;
=== 商用OSDev ===&lt;br /&gt;
不要以为构建这么好的操作系统会让你变得富有。如果说有什么不同的话，历史已经告诉我们，最好的操作系统从来没有获得过任何商业成功，而那些几乎完全缺乏设计和灵感的操作系统却获得了商业成功，这是因为它们采取了巧妙的商业行动，在正确的时间，在正确的地点，进行了正确的掩盖。&lt;br /&gt;
&lt;br /&gt;
尽管如此，尽管论坛的“工作”部分相对空白，一些单独开发的操作系统已经取得了一些商业成功。 一个例子是[[User:01000101 | 01000101]]和“Drop-in-Network Security”，这是一个设计用于充当专用深度数据包分析器的操作系统。 请注意，它专门用于特定的应用程序。 要以这种方式营销您的操作系统，您需要像了解操作系统开发人员一样了解应用程序，可能需要更多，并且您需要非常擅长这两方面的编码。 Your customers will expect you to be professional.&lt;br /&gt;
&lt;br /&gt;
另一种可能是向目前使用MS-DOS进行过程控制的公司销售您的操作系统。 这似乎更容易，因为你不负责最终的应用程序，但你需要专业，并对客户的问题和查询作出响应。 它们可能需要长期支持。 他们可能不喜欢您真正想要实现的功能。&lt;br /&gt;
&lt;br /&gt;
=== 假设它哪儿也去不了 ===&lt;br /&gt;
与上述情况相反，一些人认为他们的操作系统将一事无成。 由于这个原因，他们的项目有难看的代码，不考虑重要的方面，并且通常依赖难看的黑客。 最糟糕的是，他们做出的决策不会带来可用性和可扩展性。 这样，他们的假设就变成了一个自我实现的预言。&lt;br /&gt;
&lt;br /&gt;
事实上，虽然让您的操作系统在测试机器之外运行的机会很低，但从这个社区开始的高级操作系统项目已经足够多了。&lt;br /&gt;
&lt;br /&gt;
=== Avoid Ignorance ===&lt;br /&gt;
初学者经常会问“做X最“简单”的方法是什么？”而不是“做X的最好、正确、正确的方法是什么？”这是危险的，因为新来者不会花时间去理解实现某些东西的高级方法，而是从教程中选择概念上更简单的方法。 事实上，简单的路线往往“过于简单”，最终会导致更多的长期问题，因为初学者不知道更好的选择，也不知道什么时候最好切换。 走艰难的路有什么不好？&lt;br /&gt;
&lt;br /&gt;
常见的例子包括懒得使用[[GCC交叉编译器|交叉编译器]]，不理解[[Real Mode]]、[[Unreal Mode]]、[[Protected Mode]]，和[[Long Mode]]以及从一个到另一个跳得太快，而没有首先了解如何收集所有重要配置并充分利用其所有功能（特别是在引导和初始化期间使用BIOS检测基本功能），依赖于非标准的[[BIOS]]调用，不学习在自己的操作系统中以及在Windows和Linux下编写硬件驱动程序以获得最大的便利，在全球范围内公开测试功能，使用平面二进制文件而不是[[ELF]]，不学习可执行文件、归档文件、图形、文档和其他文件格式以及压缩算法，等等。  有经验的开发人员使用高级替代方案是有原因的，您可能还不明白。 在某些情况下，有经验的开发人员选择使用较差的方法，但这是因为他们可以仔细分析它是否合适，并且知道何时“不”使用它。 作为初学者或中级开发人员，您可能不太了解这些方法和技术，无法判断劣质解决方案是否适合您。 记住，如果你反对一种方法，你应该非常了解它，知道它的所有错误（和正确）。 不管怎样，懒惰和无知都只会带来麻烦。 当有疑问时，选择看似保守的选项，而不是简单的选项。&lt;br /&gt;
&lt;br /&gt;
== 设计 ==&lt;br /&gt;
=== 设计图形界面 ===&lt;br /&gt;
从零开始，您可能需要几年时间才能真正完成任何与GUI相关的工作。 GUI的“外观”充其量只是次要的，因为它们可以很容易地追溯更改；真正决定GUI可用性的是“功能”，而不是用模型图形来表示。 如果您的目标是创建更好的外观而不是更好的操作系统，请考虑实现X窗口管理器而不是整个操作系统。&lt;br /&gt;
&lt;br /&gt;
=== 人气 ===&lt;br /&gt;
“我的操作系统将比Windows、Mac操作系统和Linux更受欢迎！”&lt;br /&gt;
&lt;br /&gt;
这是极不可能的。 要做到这一点需要相当多的时间、金钱和知识。 并非所有人都会下载您的操作系统，因为：&lt;br /&gt;
&lt;br /&gt;
*他们可能不知道什么是操作系统，也不知道如何安装操作系统&lt;br /&gt;
*您的操作系统存在安全风险&lt;br /&gt;
*您的操作系统支持的应用程序更少&lt;br /&gt;
*您的操作系统功能不全（最小的命令行界面或错误的GUI）&lt;br /&gt;
&lt;br /&gt;
你会幸运地得到一些人使用你的。 今天流行的操作系统之所以流行，唯一的原因是因为它们在几十年前就已经可用并满足了人们的需求，当时替代品较少。&lt;br /&gt;
&lt;br /&gt;
=== 内存使用 ===&lt;br /&gt;
“我想在我的操作系统中使用不到几千字节！”&lt;br /&gt;
&lt;br /&gt;
对不起，那可能是不可能的。 使用如此少内存的操作系统几乎无法使用。 忘记文件系统驱动程序、磁盘驱动程序、usb驱动程序等。 如果你想开发一些小东西，只需要做一个简单的引导加载程序，而不是一个操作系统。&lt;br /&gt;
&lt;br /&gt;
你可以试试本地的福思；它就像一个小操作系统，内核、命令解释器和汇编程序都在一个微小的二进制文件中！内核的某些部分甚至可以编写脚本。 您甚至不需要文件系统，许多Forth直接编辑和加载磁盘扇区。 这里有一个很大的陷阱：福斯的技术并不轻松。 写“好福思”是一个完全不同的星球，你需要理解它才能超越简单的基础。 令人惊讶的是，一些Forth的粉丝擅长编写Forth口译员，但他们是差劲的Forth程序员。 您需要成为一名优秀的（-ish）Forth程序员，以使操作系统设计概念适合Forth，或者找出哪些概念是不需要的。 如果你不能做到这一点，你的操作系统将比它需要的“大得多”。 ;)&lt;br /&gt;
&lt;br /&gt;
找出如何减少代码大小可能需要花费大量的时间和思考。 Forth的发明者查尔斯·摩尔（Charles Moore）编写了一个仅由5行代码构成的CAD程序。 当被问及写这5行需要多长时间时，他回答说：“哦，大约2年！”！&lt;br /&gt;
&lt;br /&gt;
=== 操作系统仿真 ===&lt;br /&gt;
“我的操作系统将能够运行来自Windows、Mac操作系统、Linux甚至PDP-11程序的程序！！！”&lt;br /&gt;
&lt;br /&gt;
我很抱歉打破了你的幻想，但可能不会。 即使只模拟一个系统也需要多年的工作，特别是当它是专有的，例如Windows或Mac OS（Linux可能是四个系统中最简单的一个）。[http://www.winehq.org/Wine]，尽管自1993年以来一直在开发中，并且是在用户空间中编写的，但许多程序仍然存在问题。&lt;br /&gt;
&lt;br /&gt;
因此，与其专注于模仿其他系统，不如专注于自己的系统。设计它，开发它，与它成为朋友。&lt;br /&gt;
&lt;br /&gt;
=== 程序设计语言 ===&lt;br /&gt;
有些语言非常适合编写内核，而另一些则不太适合。阅读关于[[语言|使用C以外的其他语言]]的页面。&lt;br /&gt;
&lt;br /&gt;
== 内核映像 ==&lt;br /&gt;
=== 引导问题 ===&lt;br /&gt;
特别是在早期阶段和使用自建引导加载程序时，引导问题的原因通常是从磁盘获取的扇区太少。 调整从磁盘获取的扇区数量，或者让引导加载程序/第二阶段加载程序解析文件系统。&lt;br /&gt;
&amp;lt;!-- TODO：嗯，这似乎不适合本教程，而且有些过时，因为我们总是建议使用交叉编译器。 我现在就把这个评论出来。 --~~~~&lt;br /&gt;
=== 串 ===&lt;br /&gt;
当内核用C编写时，gcc将字符串和常量放在一个称为“只读数据”的特殊部分中。此部分需要显式添加到链接器脚本中，否则可能会导致各种奇怪的问题（无法将文本打印到屏幕上，内核突然变大1MB，GRUB出现加载错误，说“内核太大”，等等）。该节名为“”。[[ELF]]和“”中的rodata“”。COFF/PE（MinGW/Cygwin的输出格式）中的rdata“”。构建[[GCC交叉编译器]]将帮助您安全地假定为“”。到处都是罗达。&lt;br /&gt;
&lt;br /&gt;
您还可以调整链接器脚本以包括“任意”部分：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// ...&lt;br /&gt;
.text 0x100000 {&lt;br /&gt;
  *(.text)&lt;br /&gt;
  *(.rodata*) /* &amp;lt;---- ELF Cross Compiler or ELF *NIX (eg. Linux) */&lt;br /&gt;
  *(.rdata*)  /* &amp;lt;---- COFF/PE MinGW or Cygwin on Windows */&lt;br /&gt;
}&lt;br /&gt;
// ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 故障排除/寻求帮助 ==&lt;br /&gt;
在论坛或IRC上寻求帮助之前，您应该自己采取所有可能的步骤来诊断问题的性质。 在诸如三重故障或“随机”异常等问题的情况下，对问题的原因进行假设是常见的错误。 当异常发生时，使用调试器或print语句来定位准确的点。 使用and emulator和调试器（如GDB和Bochs/QEMU）将帮助您定位难以跟踪的问题。 如果你提供一些关于问题的理论和你已经采取的解决问题的行动，人们会更容易地帮助你（即使你的理论不正确，它至少会让人们了解你对问题的看法、你可能已经尝试过的策略以及你可能错过的东西）。&lt;br /&gt;
&lt;br /&gt;
一般来说，在请求他人帮助之前，尽可能多地自己解决问题。 在你发帖之前，问问自己，“我已经尽了我所能诊断和解决这个问题了吗？”通常，在这个过程中，你会学到很多东西，你很可能能够自己解决问题（以及将来类似的问题），而不需要别人的帮助，这是一件好事。 当您请求帮助时，请提供与您的问题“相关”的代码。 但是，问题可能出在其他地方，因此也给其他人一种方法来查看代码的其他部分（如果您使用的是GitHub或Bitbucket之类的东西，这会稍微容易一些，但肯定还有很多其他方法）。&lt;br /&gt;
&lt;br /&gt;
关于论坛，请阅读论坛规则。 它们是阅读“”所必需的，将提高您帖子的质量，并使人们更有可能帮助您。 在IRC频道，如果你问一个问题，不要期望在10秒钟甚至5分钟内得到答案。 其他人也有生命。 如果您需要离开去做一些事情，并且想检查是否遗漏了任何内容，那么可以查看日志。 请参阅IRC主题中的链接了解这些信息。&lt;br /&gt;
&lt;br /&gt;
有关如何在寻求帮助时成为一名好的社区成员的更深入的指南，请咨询[http://www.catb.org/~esr/FAQ/smart问题。html如何提问]。 这是一本很棒的读物，理想情况下，你应该在向任何地方寻求帮助之前阅读整本书（它没有那么长，很值得一读）。&lt;br /&gt;
&lt;br /&gt;
== 晋升 ==&lt;br /&gt;
=== 命名 ===&lt;br /&gt;
命名通常是最后一个要解决的问题，即使我们都希望为我们的酷概念取一个酷的名字。 因为名字的“酷”是一个品味的问题，我们不能帮助你找到它。 此外，如果您将项目名称与某个功能绑定在一起，您可能会在将来的某个地方发现，没有任何概念是完美的，您希望更改您最初认为是关键功能的内容。 没有什么比仅仅因为“想坚持一个名字”而不进化更愚蠢的了。。。&lt;br /&gt;
&lt;br /&gt;
在[[Topic:15250 | this]]线程中可以找到许多关于命名的好信息。 简单地说，命名您的操作系统&amp;lt;name&amp;gt;OS（JackOS、FredOS等）似乎是个好主意，直到您获得第二个项目成员。 一个好主意（由Solar公司提供）是选择一个代号（如Longhorn、Chicago等），然后在接近发布时间时编一个更好的名字。&lt;br /&gt;
&lt;br /&gt;
=== 项目网站 ===&lt;br /&gt;
许多osdev新手在网站上没有任何值得展示的内容之前就创建了项目网站。 在你还不知道你的项目的发展方向或任何代码、截图或下载来展示你已经制作的内容之前，创建一个网站对你的项目的未来计划做出戏剧性的声明是没有价值的。 这样一个网站看起来已经死了，并造成了坏名声。 宣布您的网站（例如在OSDev.org论坛上的公告论坛中）或在您的签名中链接到它时，上面只有一条“欢迎使用&amp;lt;在此插入花式项目名称&amp;gt;”的消息，这只会让人们在您开始之前对您的项目失去兴趣，如果/当你最终做出值得炫耀的东西时，你将面临一个已经很糟糕的名声，很难克服。&lt;br /&gt;
&lt;br /&gt;
== 团队合作 ==&lt;br /&gt;
第一个初学者错误出现在公告论坛上。 它通常以两种形式之一出现，尽管两种形式有相当多的重叠：&lt;br /&gt;
&lt;br /&gt;
=== 社区项目 ===&lt;br /&gt;
不要高估你让人们对“你的”项目感兴趣的机会。 即使是更成功的[[Projects | Projects]]通常也由一个或两个实际从事代码工作的人组成。 这并不是因为缺乏“需要”。&lt;br /&gt;
&lt;br /&gt;
布鲁克斯定律指出，参与项目的人数越多，项目所需时间越长。 解决这个问题的唯一方法是将项目分成几个部分，让人们参与其中，并且只参与其中。 祝你好运&lt;br /&gt;
&lt;br /&gt;
=== 招聘 ===&lt;br /&gt;
你需要一些东西来获得机会（避免痛苦地被告知你是个失败者）：&lt;br /&gt;
#如果您没有已建立的代码库，人们将不会加入，因为他们会看到您缺乏经验，并期望项目失败。&lt;br /&gt;
#如果你缺少一个设计，人们不会加入你，因为他们看不到你的操作系统比他们自己的设计更有趣。&lt;br /&gt;
#如果你的名声不如你，尤其是那些更有经验的人，他们会对你非常谨慎，缺乏加入的信任。&lt;br /&gt;
#如果你不具备项目管理技能，那么少数几个“确实”加入的人很快就会辞职，因为他们正在讨论一些东西，而不会编写代码。&lt;br /&gt;
然而，加入的人通常比为其编制此列表的人更糟糕。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OS Development]]&lt;/div&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
</feed>