c++ - 内核开发和 C++

标签 c++ operating-system kernel

来 self 的 know ,即使常见的操作系统有部分是用其他语言编写的,内核完全是用 C 编写的。

我想知道用 C++ 编写内核是否可行,如果不可行,会有什么缺点。

最佳答案

有很多用 C++ 实现的常用操作系统(或其中的一部分)的例子 - IOKit - MacOSX 和 IOS 的设备驱动子系统在 EC++ 中实现.然后是 eCOS RTOS - 内核用 C++ 实现,甚至使用模板。

操作系统传统上充斥着用 C 语言实现的 OO 概念示例。在 linux 设备模型中,kobject 实际上是驱动程序和设备对象的基类,并带有 DIY v-表格和一些在宏中实现的时髦排列,用于上下转换。

Windows NT 内核具有更根深蒂固的内核对象继承层次结构。对于所有提示内核代码中异常处理的适用性的邻居来说,正是提供了这样一种机制。

传统上,反对在内核代码中使用 C++ 的论点是:

  • 可移植性:C++ 编译器适用于所有目标平台。这不再是一个真正的问题
  • RTTI 和异常等 C++ 语言机制的成本。显然,如果要使用它们,标准实现是不合适的,需要使用特定于内核的变体。这通常是使用 EC++ 背后的驱动程序
  • C++ API 的稳健性,尤其是 Fragile base-class problem

毫无疑问,使用异常和RAII范式将极大地提高内核代码质量 - 您只需查看 BSD 或 linux 的源代码即可查看替代方案 - 使用 goto 实现的大量错误处理代码。

关于c++ - 内核开发和 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12385485/

相关文章:

无法理解 "error: initializer element is not constant"的含义

c++ - 为什么 SO_RCVTIMEO 从监听套接字继承到接受套接字?

C++:向上舍入 long 以适应 64kb

linux - 将 I/O 驱动的调度合并到操作系统内核中

c++ - 我必须学习哪种 C++ 才能制作自己的操作系统内核?

linux - 什么会影响 Linux 内核的最终构建

c++ - 未定义对 `vtable for implementation' 错误的引用

c++ - 如何将枚举导入 C++ 中的不同命名空间?

memory - 计算2级页表的大小

linux - NMI 看门狗消息,即。 'Shutting down hard lockup detector on all cpus'