Required Knowledge
跳到导航
跳到搜索
如果你认为你可以跳过这一步,那可能只是为了你。
编写操作系统“不是”初学者的任务。 事实上,编写操作系统通常被认为是最困难的编程任务。 在考虑像这样的项目之前,您需要高于平均水平的编程技能。 不遵守会让你看起来很傻。
您“将”需要知道的一些事情是:
- “基础计算机科学”:您需要非常熟悉十六进制和二进制表示法以及布尔逻辑和类似的基础知识,如数据结构、其构造和操作、搜索和排序算法、抽象编程概念等。。。
- “语言和词汇”:你需要有能力读写(技术)英语。几乎所有的技术文档都是英文的,您可以在web上找到的大部分资源(如此Wiki和[http://forum.osdev.org论坛)也是。使用不正确的术语会让你看起来很愚蠢,让那些愿意帮助你的人感到困惑。
- 语言和词汇,pt。2:本网站上的大多数操作系统以及大多数代码片段和示例都是用C(或[[C++])编写的。即使您选择使用另一种语言(如FreeBASIC或Pascal),C也是编程的“通用语言”,您应该能够掌握它的头绪。
- “'Assembly'”:您应该了解低级语言Assembly。读一本书在学校上课。编写一些用户空间代码来熟悉它。您“将”需要它,即使您计划用更高级的语言编写大部分操作系统。
- “编程经验”:学习操作系统项目的编程被认为是一个坏主意。你不仅应该知道你将要开发的语言,还应该熟悉版本控制、调试等。简言之,在尝试操作系统开发之前,你应该已经用这种语言成功地编写了很多用户空间程序。
- “编程实践”:您应该知道如何编写代码和用户文档,并准备好仔细记录代码和设计的各个方面,即使项目纯粹是供您个人使用。此外,您应该学习并使用合适的代码管理实践,包括设置和使用非现场存储库(例如Savannah、GitHub、GitLab、Heroku)。这两种做法本身将——不是梅,而是“将”——为你将来节省大量的麻烦,“如果”你遵循它们。
- “UNIX体验”:您很快就会注意到,操作系统开发中使用的许多工具都是为UNIX开发的,后来移植到Windows。Linux内核经常被用作如何完成事情的参考或示例,许多业余操作系统与Unix有一些相似之处。具有Unix命令行(最好是Bash或ksh)的经验是非常重要的要求。(Cygwin为Windows提供了易于安装的Unix命令行。)如果还没有,那就继续使用Linux或BSD一段时间。对于Windows用户来说,使用 virtualizer(见下文)托管虚拟系统,无需重新划分家庭系统,就可以轻松实现这一点。您还可以在Windows本身中安装Windows Linux子系统(WSL),以访问Unix命令行。对于macOS用户,您可以简单地使用终端——macOS构建在Unix变体内核(Mach和BSD内核的组合)上,因此只要您安装了Xcode和模拟器或虚拟机,就不需要其他工具(尽管您需要设置交叉编译器);默认的终端外壳是Bourne外壳,但C外壳和KornShell也可用。
- “工具链”:您必须了解编译器、汇编器、链接器和make实用程序的行为细节。您应该知道发出的警告和错误的含义。你应该手头有你使用的工具的文档,并在询问社区之前参考它们。请放心,关于GCC、 GNU as、NASM、 GNU LD、Visual Studio和GRUB的任何可能的初学者问题都已经回答了两次。三思而后行。
- “模拟器和虚拟机”:熟悉诸如Bochs、VirtualBox、QEMU或 Virtual PC等工具是在开发中实现合理转变的关键。这些工具在实际硬件和测试系统之间提供了一个缓冲区。虽然可以针对OS开发的特定目的学习这些内容,但在开始OS项目之前,您肯定希望了解它们是什么以及从何处获取它们。
- “可执行格式”:内核空间编程有许多应用程序开发未知的“附加”要求。能够解析可执行二进制文件就是其中之一(您“确实”希望您的操作系统加载和执行应用程序,不是吗?)让自己熟悉可执行文件类型,它们的内部结构,以及链接器如何生成它们。
- “‘平台’”:您应该已经学习了将为其编程的处理器的手册。它们包含您首先设计内核所需的信息。要求从这些文件中容易获得的信息只会导致“阅读(…)“手动”响应,或简单的RTFM。
- “‘概念’”:您应该了解现有操作系统在技术层面的功能(例如,通过阅读一些[[书籍]))、它们的优点或缺点,以及您希望如何使用自己的操作系统。已经完成了一些教程,然后问“现在怎么办?”在其中一个论坛上,你会看起来很傻。
另见
- A particularly good and excellent (but unfortunately unfinished as of yet) book on the topic: Operating Systems From 0 to 1. This focuses on everything you need to know, from the transistor to logic circuits, Assembly and C language, ELF format and debugging etc. Read (and understand!) this book to get a quick-start on required knowledge.