type
status
slug
summary
tags
category
icon
password
new update day
Property
Oct 22, 2023 01:31 PM
created days
Last edited time
Oct 22, 2023 01:31 PM

Required Knowledge

如果你认为你可以跳过这个,它可能只适用于你。
编写操作系统不是初学者的任务。事实上,编写操作系统通常被认为是最困难的编程任务。在考虑这样的项目之前,您将需要高于平均水平的编程技能。不遵守这个原则会让你看起来很傻。
你需要知道的一些事情是:
  1. 基础计算机科学:您需要非常熟悉十六进制和二进制符号以及布尔逻辑和类似的基础知识,如数据结构、它们的构造和操作、搜索和排序算法、抽象编程概念等...
  1. 语言和词汇1:你需要有足够的能力读写(技术)英语。几乎所有的技术文档都是英文的,你可以在网上找到的大部分资源(比如维基和论坛)也是英文的。使用不正确的术语会让你看起来很愚蠢,也会让那些愿意帮助你的人感到困惑。
  1. 语言和词汇2:本网站上介绍的大多数操作系统以及大多数代码片段和示例都是用C(或C++)编写的。C语言是编程的通用语言,即使你选择使用另一种语言(如FreeBASIC或Pascal),你也应该熟练掌握它。
  1. 汇编:你应该了解低级语言汇编。可以通过看书或者在学校上一门课来学习它、或者编写一些用户空间代码来熟悉它。即使你打算用高级语言编写大部分操作系统,你也将需要它。
  1. 编程经验:学习操作系统项目编程被认为是一个坏主意。你不仅应该彻底了解你开发将要使用的语言,还应该熟悉版本控制、调试等等。简而言之,在尝试操作系统开发之前,您应该已经用那种语言成功地编写了相当多的用户空间程序。
  1. 编程实践:您应该知道如何编写代码和用户文档,并准备好仔细记录您的代码和设计的各个方面,即使该项目纯粹是供你个人使用的。此外,你应该学习和使用合适的代码管理实践,包括建立和使用一个异地存储库(例如Savannah、GitHub、GitLab、Heroku)。如果你照着做,这两个练习将会(不是可能,而是将会)在未来为你省去许多麻烦。
  1. Unix经验:您很快会注意到,在操作系统开发中使用的许多工具都是为 Unix 开发的,后来被移植到 Windows 上。Linux内核经常被用作如何做事的参考或示例,许多爱好者的操作系统都与Unix有一些相似之处。具有使用 Unix 命令行(最好是 Bash 或 ksh)的经验是一项非常重要的要求。(Cygwin 为 Windows 提供了易于安装的 Unix 命令行。)如果还没有,那就继续使用Linux或BSD一段时间。对于Windows用户来说,这可以通过使用虚拟化软件(见下文)托管一个虚拟系统,这非常容易实现,而且不需要对您的家庭系统进行重新分区。您还可以在Windows本身中安装 Windows Subsystem for Linux (WSL),以访问Unix命令行。对于 macOS 用户,您可以简单地使用终端——MAC OS构建在Unix变体内核(Mach和BSD内核的组合)上,因此只要您安装了 Xcode 和模拟器或虚拟器,就不需要其他工具(尽管您需要设置一个交叉编译器);默认终端 shell 是 Bourne-Again Shell,但也可以使用 C shell 和 KornShell。
  1. 工具链:你必须知道你的编译器、汇编器、链接器和 make 工具的行为细节。您应该知道发出的警告和错误意味着什么。您应该准备好您所使用的工具的文档,并在询问社区之前参考它们。请放心,任何可能的初学者关于GCC、GNU as、NASM、GNU ld、Visual Studio和GRUB的问题都已经回答了两遍。问之前先搜索。
  1. 模拟器和虚拟化器:熟悉 Bochs、VirtualBox、QEMU 或 Virtual PC 等工具是在开发过程中实现合理周转的关键。这些工具在您的真实硬件和您的测试系统之间提供了一个缓冲。虽然可以针对 OS 开发的特定目的学习这些内容,但您肯定希望在开始 OS 项目之前了解它们是什么以及从哪里获得它们。
  1. 可执行格式:内核空间编程有许多应用程序开发未知的附加要求。能够解析可执行二进制文件就是其中之一(您确实希望您的操作系统加载和执行应用程序,不是吗?)让自己熟悉可执行文件类型、它们的内部结构以及链接器如何生成它们。
  1. 平台:你应该已经学习了你将要编程的处理器的手册。它们首先包含设计内核所需的信息。要求可以从这些文档中轻松获得的信息只会导致“阅读(...)手册”响应,或者只是 RTFM。
  1. 概念:您应该了解现有操作系统在技术层面的功能(例如,通过阅读一些书籍),它们的优点或缺点,以及您希望如何开发自己的操作系统。完成了一些教程,然后问“现在做什么?”只会让你看起来很傻。

也可以看看

一本关于该主题的特别优秀(但遗憾的是尚未完成)的书:从 0 到 1 的操作系统。它侧重于您需要了解的所有内容,从晶体管到逻辑电路、汇编和 C 语言、ELF 格式和调试等等。阅读(并理解!)这本书以获得所需知识的快速入门。

Articles

wiki.osdev.org 系列之(二)- How To Ask QuestionsUbuntu 18.04 将python 版本切换为 python3.7