原文链接:https://wiki.osdev.org/Required_Knowledge
主页:https://blog.csdn.net/qq_37422196/article/details/122591214
下面的链接如果指向原网站的话,大概是还没有翻译
在赶了在赶了……
如果你认为你可以跳过这篇文章的话,它正是为你而写的
编写操作系统不是初学者的任务。事实上,编写操作系统通常被认为是最困难的编程任务。在考虑这样的项目之前,您将需要高于平均水平的编程技能。不遵守这个忠告会让你看起来很傻
你会需要知道的知识有:
- 基础计算机科学:您需要非常熟悉十六进制和二进制表示法以及布尔逻辑和类似的基础知识,如数据结构、它们的构造和操作、搜索和排序算法、抽象编程概念等
- 语言和词汇:您需要能够胜任(学术)英语读写。几乎所有的技术文档都是英文的,您可以在网络上找到的大多数资源(例如这个 Wiki 和论坛)也是英文的。使用不正确的术语会让你看起来很蠢,并让愿意帮助你的人感到困惑
- 计算机语言:本网站上的大多数操作系统以及大部分代码片段和示例都是用C(或C++)编写的。即使您选择使用其他语言(如FreeBASIC或Pascal),C也是编程的通用语言,你应该能完全胜任它
- 汇编:你应该了解作为低级语言的汇编语言。读一本书,在学校学习一门课程,编写一些用户空间代码以熟悉汇编。即使您打算用高级语言编写大部分操作系统,您也会需要汇编
- 编程经验:通过操作系统项目学习编程是一个坏主意。你不仅应该了解你将用于开发的语言,你还应该熟悉版本控制、调试等工具与技术。简而言之,在尝试操作系统开发之前,你应该已经成功地用该语言编写了相当多的用户空间程序
- 编程实践:您应该知道如何编写代码和用户文档,并准备好详细记录您的代码和设计的各个方面,即使该项目纯粹是供您个人使用的。此外,您应该学习和使用合适的代码管理方案,包括设置和使用远程存储库(例如 Savannah、GitHub、GitLab、Heroku)。如果你遵循这两个建议 ,每一个都会(没有"可能")在未来为你减少很多麻烦
- UNIX经验:您很快就会注意到,在操作系统开发中使用的许多工具都是为Unix开发的,后来才被移植到Windows上。Linux内核经常被看作完成任务的参考或示例,许多因爱好而编写的操作系统与Unix有一些相似之处。具有使用Unix命令行(最好是Bash或ksh)的经验是一项非常重要的要求。(Cygwin为Windows提供了易于安装的Unix命令行。)如果还没有,请先使用Linux或BSD一段时间。对于Windows用户,这可以通过使用虚拟机(见下文)轻松托管一个虚拟系统,而无需重新分区您的宿主系统。您还可以在Windows本身内安装适用于Linux的Windows子系统(WSL)以访问Unix命令行。对于macOS用户,您可以简单地使用终端——macOS构建在Unix变体内核(Mach和BSD内核的组合)上,因此只要您安装了Xcode和模拟器或虚拟机,就不需要其他工具(尽管您需要设置一个交叉编译器);默认终端shell是Bourne-Again Shell,但也可以使用C shell和KornShell
- 工具链:你必须了解编译器、汇编器、链接器和make的行为细节;应该知道发出的警告和错误的意思;且应该有您手头使用的工具的文档,并在询问社区之前检索文档。请放心,所有初学者关于GCC、GNU as、NASM、GNU ld、Visual Studio和GRUB的问题都已经有无数的回答。在你问之前先搜索一下
- 模拟器与虚拟机:熟悉Bochs、VirtualBox、QEMU或Virtual PC等工具是在开发过程中实现合理周转的关键。这些工具在您的真实硬件和测试系统之间提供了一个缓冲。虽然可以针对操作系统开发的特定目的学习这些内容,但您肯定希望在操作系统项目开始之前就了解它们以及从哪里获得它们
- 可执行文件格式:内核空间编程有许多应用程序开发所没有的附加要求,能够解析可执行二进制文件就是其中之一。(你肯定希望你的操作系统能加载和执行应用程序,不是吗?)熟悉可执行文件类型、它们的内部结构以及链接器如何生成可执行文件
- 平台:你应该已经研究过你要编程的处理器的手册。它们首先包含设计内核所需的信息。询问可以从这些文档中轻松获得的信息只会收到“阅读……手册”的回复,或者RTFM(TMD去读用户手册)
- 概念:您应该在技术层面了解现有操作系统的功能(比如如通过阅读一些书籍),它们的优点或缺点,以及你希望如何开发自己的操作系统。完成了一些教程,然后在论坛上问“接下来怎么办?” 只会让你看起来很傻
相关内容
一本关于操作系统的特别好的(但不幸目前尚未完成)的书:操作系统从0到1。这本书侧重于你需要了解的所有内容,从晶体管到逻辑电路、汇编和C语言、ELF格式和调试等。阅读(并理解)本书来快速获得所需知识
文章
操作系统开发相关书籍