如何通过机器理解OS内核代码

Kra*_*ken 2 c compiler-construction assembly

我在这里有一个非常天真的问题,我希望你能纠正我在这里提出的任何错误概念.问题如下:

我在我的机器上安装了ubuntu,现在我用语言编写helloWorld.c程序C.现在,在操作系统上我安装了一个编译器,当我执行我的helloWorld.c程序时,操作系统安排编译器,基本上将我的代码编译成机器代码,最终,我执行.

现在我的内核代码是用C编写的,那么我的机器如何解释该代码呢?说我的内核代码helloWorld.c,现在不需要任何编译器,来编译这段代码.另外,如果我在ROM或其他东西中对编译器进行硬编码,那么它的语言是什么?汇编语言?

如果我已经清楚了解问题,请告诉我.

谢谢.

编辑:通过内核代码我的意思是,操作系统的代码.操作系统代码.我猜它是用C写的吗?

The*_*ist 13

我认为你的问题的关键是编译器的一种鸡蛋问题.

  1. C代码需要编译器来构建它.
  2. AC编译器本身是用C语言编写的
  3. 那么我们是如何构建编译器的呢?

现在我们有编译器可用.因此,当开发用C编写的较新版本的编译器(比如gcc4.7)时,首先使用较旧版本的编译器来构建它.即gcc4.6(已经存在)将用于编译代码并生成最新版本,即gcc4.7.

这可以追溯到第一个编译器,一路不断正如你正确地提及将需要组装编码的广泛的量.

您可能想看看有关第一个编译器的bootstrapping和历史的讨论.


更新:

使"第一" OS +编译器运行的一种相当常见的方法是交叉编译.这里是一个很好的描述什么都一个人需要以及如何人去了.在工程界中,此过程称为操作系统"移植"到特定设备/体系结构.

基本上是第一个需要的裸机:

  1. 核心
  2. 的libc
  3. 编译器
  4. 贝壳
  5. 基本的OS工具

  • @Kraken,启动计算机时不会编译内核.内核是在别人的计算机上编译的,已编译的,可立即运行的文件就是你的Ubuntu安装光盘上的文件. (2认同)

Jas*_*ban 6

内核也被编译成特定于处理器体系结构的机器语言,与生成的helloWorld程序相同.

正如你所说,有人在C中编写内核,但是在已经拥有操作系统且能够编译新内核的计算机上编译它.

曾几何时,内核是用机器语言手工编写的,然后使用它来编写更复杂的程序,包括用于编写替换内核的编辑器和编译器.剩下的就是历史......