【问题标题】:C language compiler for new OS (theoretical questions)? [closed]新操作系统的 C 语言编译器(理论问题)? [关闭]
【发布时间】:2023-04-07 17:27:01
【问题描述】:

假设我使用汇编语言编写了一个原始引导加载程序。 计算机仍处于实模式。 现在我想用 C 语言编写一个原始内核和 shell。 问题:

1.我是否需要为这个新操作系统编写汇编语言的 C 语言编译器,或者我可以使用在不同操作系统上运行的 C 编译器吗?我想可能两者兼而有之!

2.如果我使用来自不同操作系统的 C 编译器,可以编译 printf() 等函数以针对 BIOS 的函数而不是操作系统的 API 来避免依赖关系?

3.如果我的引导加载程序将计算机切换到保护模式,内核是否需要实现与 BIOS 功能等效的功能?

4. 假设问题 3 为“是”:如果我使用来自不同操作系统的 C 编译器,需要什么使其针对新的操作系统内核函数?重写头文件?

(EDIT) PD:这些都是理论问题。我不需要有关实际实现的具体细节。我只想验证这些概念。不要觉得有义务回答所有问题!

【问题讨论】:

  • 你为什么不提出这些单独的问题
  • 这些都是理论问题。每个问题都与下一个问题相关。不要觉得有义务回答所有问题!
  • 引人入胜的主题,但我认为单独的问题会很好地为您和社区服务。
  • 有什么办法可以取消这个问题来拆分它?

标签: c compiler-construction operating-system kernel


【解决方案1】:
  1. 你可以做任何一个。我强烈建议只使用标准编译器。编写一个好的编译器非常复杂且耗时。
  2. 只要您没有标准库的实现,就不要使用它。您可以告诉 C 编译器假设没有标准库并编写您自己的类似 printf 的函数。
  3. 您无法在实模式下访问 BIOS 功能。如果您需要它们,您确实需要重新实现它们。
  4. 实际上不需要太多更改。可执行文件是不完整的,需要链接到实现使用的标准库函数和使用的任何其他库的东西。您需要做的就是将可执行文件与以某种方式实现所需功能的(可能是自己编写的)库链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 2017-12-25
    • 2020-07-25
    • 2011-08-08
    相关资源
    最近更新 更多