用C语言写一个OS

Writing an OS in C language

我想知道一个操作系统是否可以只用C这样的语言来编写。是否可以只使用C来完成还是我需要使用c的内联汇编?

典型内核的某些部分需要执行 C 不支持的操作,包括:

  • 访问CPU的特殊寄存器(例如 80x86 上的控制寄存器和 MSR)
  • 访问 CPU 的特殊功能(例如 CPUIDLGDTLIDT 80x86 指令)
  • 管理虚拟地址 spaces(例如 TLB 失效)
  • 在任务切换期间保存和加载状态
  • 正在访问特殊地址 spaces(例如 80x86 上的 IO 端口)
  • 支持CPU切换权限级别的方法

要用纯 C 编写 OS,您需要避免所有这些事情(这可能会受到严重限制 - 例如单任务、单地址 space、无保护、没有 IRQ,...) 或通过将 "non-standard implementation defined extensions" 添加到 C.

来作弊

请注意,您需要的装配数量非常少 - 例如一个由 500 万行 C 代码组成的内核可能只需要 100 行内联汇编,这相当于“0.00% 的代码(有一点舍入误差)”。

用于引导 code/boot 加载程序;这取决于引导环境。例如,如果你从 UEFI 固件启动那么它没问题(因为它的 API 是为高级语言设计的),但是如果你从 BIOS 固件启动那么你不能单独使用 C(由于 "unsupportable" 调用约定)。