是否可以仅使用C语言创建OS

时间:2018-10-29 09:01:37

标签: operating-system

请问如何使用C语言创建操作系统。请我只想了解基本知识。可以仅使用c来完成,还是需要将内联汇编与c一起使用?如果可能的话,我只想从引导加载程序开始。

1 个答案:

答案 0 :(得分:2)

在典型内核的某些部分中,有必要做一些C不支持的事情,包括:

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

要使用纯C语言编写OS,您需要避免所有这些事情(可能会受到严重限制-例如,单任务处理,单个地址空间,无保护,无IRQ等),或者通过向C添加“非标准实现定义的扩展”。

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

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