5

我使用 C++ 已经有一段时间了,我开始对驱动程序和其他东西等低级系统编程产生兴趣。即使是某种原始操作系统也可能是非常有趣的项目!

我不知道我可以从哪里开始。是否有任何不太具有挑战性的事情我可以开始?关于 C++ 有什么我应该尽量避免性能关键代码中的异常吗?

如果这很重要的话,我目前的操作系统是 Windows 7。

4

7 回答 7

14

用 C++ 编写 Windows 设备驱动程序并非不可能,没有多少 CRT 函数可以让您陷入困境。new 运算符不可用,例如,您不必担心 std::bad_alloc。除非你替换它,否则会减少相当多的标准 C++ 库类。

但这并不是设备驱动程序的真正意义,让它尽可能小是相当重要的。当您编写复杂的代码时,C++ 会得到回报。您明确不想在设备驱动程序中编写复杂的代码。调试它是红色的。

Linus 真的很喜欢内核中的 C。这是有充分理由的。

于 2010-11-22T22:34:45.893 回答
2

C++ 并未提供在其中实际实现完整操作系统所需的全部工具。有一些机器特定的事情不能在 C++ 中完成。这些事情是处理和引发中断,控制 MMU,控制对主管 cpu 指令的访问,以及一些其他的小事。

幸运的是,这些东西足够少,可以用从 C++ 访问的汇编语言编写。

于 2010-11-22T22:20:35.157 回答
1

看看osdev.org(在考虑开发自己的操作系统时会出现的许多问题都在这里得到解答)。

于 2010-11-22T22:16:38.460 回答
0

我强烈建议您从破解现有的开源设备驱动程序和内核开始,您实际上只能在 Linux 或 *BSD 中进行这些操作。这种体验还将让您很好地了解自己是否适合这种编程。

于 2010-11-22T22:17:18.773 回答
0

听说最近开源的 Symbian OS 是使用 C 和 C++ 编写的。不确定它的哪些部分是用 C++ 完成的,因为我没有阅读代码库。考虑调查一下。

Kerneltrap.org 对为什么 Linux 内核的代码库中没有 C++ 进行了一些很好的讨论。考虑阅读它。

于 2010-11-22T22:38:37.780 回答
0

Symbian OS 是用 C++ 的变体编写的。当然,低级的东西也有汇编代码,但这一切都结束了。您不能使用异常,并且对于实时驱动程序,您不能执行诸如动态内存分配之类的正常操作,即使在 C 语言中也是如此。

于 2010-11-22T22:39:23.187 回答
-1

我推荐C 编程语言和汇编程序。我不确定是否可以使用 C++ 进行低级操作。

于 2010-11-22T22:19:04.233 回答