查看“Required Knowledge”的源代码
←
Required Knowledge
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
'''在你认为可以跳过这部分前,请稍微阅读一下本页的内容。''' 编写操作系统''不是''初学者的任务。 事实上,编写操作系统通常被认为是最困难的编程任务。 在考虑像这样的项目之前,你需要高于平均水平的编程技能。 不遵守会让你看起来很傻。 你''将''需要知道的一些事情是: # '''基础计算机科学''': 你需要非常熟悉十六进制和二进制表示法,以及布尔逻辑和类似的基础知识,如数据结构、它们的构造和操作、搜索和排序算法、抽象编程概念等。。。 # '''语言和词汇''': 你需要有能力读写(技术)英语。 几乎所有的技术文档都是英文的,你可以在网上找到的大部分资源(比如这个Wiki和[http://forum.osdev.org 论坛)也是。 使用不正确的术语会让你看起来很愚蠢,让愿意帮助你的人感到困惑。 # '''语言和词汇,再重复一遍''': 本网站上的大多数操作系统,以及大多数代码片段和示例,都是用[[C]](或[[C++]])编写的。 即使你选择使用另一种语言(比如[[FreeBASIC]]或[[Pascal]]),C也是编程的''通用语言'',你应该有能力掌握它的基本用法。 # '''汇编''': 你应该了解低级语言[[Assembly|汇编]]。 读一本书 在学校上一门课。 可以先编写一些用户空间代码来熟悉它。 你''将''需要它,即使你计划用更高级的语言编写大部分操作系统。 # '''编程经验''': 用从操作系统项目去学习编程也许是个坏主意。(译者注:这里作者的意思应该是说,初学编程时如果没有现成的开发环境会比较麻烦。) 你不仅应该知道你将要开发的语言,还应该熟悉版本控制、调试等。 简而言之,在尝试操作系统开发之前,你应该已经用该语言成功地编写了很多用户空间程序。 # '''编程实践''': 你应该知道如何编写代码和用户文档,并准备好仔细记录代码和设计的所有方面,即使项目纯粹是供你个人使用。 此外,你应该学习并使用合适的[[Code Management|代码管理]]实践,包括设置和使用非现场存储库 (例如Savannah, GitHub, GitLab, Heroku)。 如果你拥有以上两项基础,光是这两点就可以为你将来打下很好的基础。 # '''UNIX使用经验''': 你很快就会注意到,操作系统开发中使用的许多工具都是为Unix开发,后来被移植到Windows上的。 Linux内核经常被如何实现的参考或示例,许多爱好者的操作系统与Unix有相似之处。 有Unix命令行(最好是Bash或ksh)的经验是非常重要的要求。([[Cygwin]]为Windows提供了一个易于安装的Unix命令行。)如果还没有者方面经验,那就保持使用Linux或BSD一段时间。 对于Windows用户来说,使用[[Emulators|虚拟机]](见下文)托管虚拟系统,无需重新安装家用的操作系统,也可以轻松实现这一点。 你还可以在Windows内部安装Windows Subsystem for Linux(WSL),以访问Unix命令行。 对于macOS用户,你可以直接地使用Terminal--macOS是构建在Unix变体内核(Mach和BSD内核的组合)上的,所以只要安装了Xcode和模拟器或虚拟机,就不需要其他工具了(尽管还需要设置交叉编译器); 默认的Terminal shell是Bourne-Again shell,但C shell和KornShell也可用。 # '''工具链''': 你必须了解编译器、汇编器、链接器和make工具集的行为细节。 你应该知道发出的警告和错误是什么意思。 你应该手头有你使用的工具的相关文档,并在询问社区之前参考它们。 请放心,关于[[GCC]]、[[GAS | GNU 汇编]]、[[NASM]]、[[LD|GNU LD]]、[[Visual Studio]]和[[GRUB]]的任何可能的初学者问题都已经被多次回答过了。 先搜索再提问。 # '''模拟器和虚拟机''': 熟悉[[Bochs]]、[[VirtualBox]]、[[QEMU]]或[[Microsoft_Virtual_PC | Virtual PC]]等工具是在开发中实现高效合理的关键。 这些工具在真实硬件和测试系统之间提供了一个缓冲区。 虽然这些知识可能仅用于操作系统开发的特定目的,但在开始一个操作系统项目之前,你肯定会想知道它们是什么,以及从哪里获得它们。 # '''可执行格式''': 内核空间编程有许多应用程序开发未知的''额外''需求。 能够解析可执行二进制文件就是其中之一(你''当然''希望你的操作系统加载并执行应用程序,不是吗?) 你要让自己熟悉[[:Category:Executable Formats|Executable File Types|可执行文件类型]],它们的内部结构,以及链接器如何生成它们。 # '''平台''': 你应该研究一下你将要为之编程的处理器的手册。 它们包含了设计内核所需的信息。 求助这些这些方面的信息,恐怕只会得到 读(…)手册的回应,甚至粗暴的RTFM(ReadTheFuckingManual)。 # '''理论知识''': 你应该了解现有操作系统在技术层面的功能(可以通过阅读这些[[Books|书籍]])、它们的优点或缺点,以及你想如何使用自己的操作系统。 仅仅看完一些入门教程,然后在一个论坛上问“现在要怎么办?”,这只会让你看起来很傻。 ==另见== *这是一本关于这个主题的特别优秀的书(但不幸的是尚未完成): [https://github.com/tuhdo/os01/blob/master/Operating_Systems_From_0_to_1.pdf 从0到1开发操作系统]。 该课程重点介绍你需要了解的所有知识,从晶体管到逻辑电路、汇编语言和C语言、ELF格式和调试等。 === 文章 === *[[Books|书籍]] [[Category:OS theory]]
返回至“
Required Knowledge
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
变体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息