内核可以用汇编语言编写吗?

时间:2012-04-21 17:56:44

标签: java kernel

我从未做过内核编程。我是Java语言的优秀程序员,经常使用它。现在我想用内核做一些有趣的事情。内核驻留在硬件和操作系统之间。它使用系统调用与硬件通信。每种编程语言都需要编译器来编译用高级语言编写的代码,然后生成低级代码,这通常是汇编语言代码。我怀疑,如果我们有用C编写的内核,那么我们应该在机器上安装C编译器吗?最后,当内核与硬件交互时它使用汇编语言,我可以创建内核吗?用Java语言?如果是,那么同样的要求是什么?谢谢。

2 个答案:

答案 0 :(得分:21)

  

内核驻留在硬件和操作系统之间

通常,内核被认为是操作系统的 part

  

使用系统调用与硬件通信

系统调用是操作系统向用户应用程序提供的接口。操作系统通过其他机制(例如中断或内存映射寄存器)与硬件通信。

  

每种编程语言都需要编译器来编译用高级语言编写的代码,然后生成低级代码,这通常是汇编语言代码。

编译器输出通常是本机机器代码或特定于语言的字节码(就像Java一样)。有时,编译器还会针对另一种编程语言,如C或Javascript(转换)。

  

我怀疑,如果我们有用C编写的内核,那么我们应该在机器上安装C编译器吗?

这不是必要的。 C编译器生成的输出可以直接在硬件上执行而无需解释。

  

最后,当内核与硬件交互时,它使用汇编语言

CPU不了解程序集。它了解机器代码。

  

我可以用Java语言创建内核吗?

has been done

  

如果是,那么同样的要求是什么?

如果你想用Java编写内核,那么你必须

  • 将整个Java代码库编译为机器代码
  • 给自己一个CPU that can execute Java bytecode
  • 找到或构建一个可以在裸机上运行并在其中运行Java代码的Java VM和运行时(如果你巧妙地这样做,你可以编写大部分运行时,也可能是Java本身的部分VM)。

现在谈到一个未说出口的,几乎是流变的问题:

  

这是个好主意吗?

可能不是。为什么?首先,因为设置需要很长时间。其次,因为您不能只编写开发平均业务应用程序的方式。您必须考虑非常时间关键代码的性能(例如,上下文切换,这通常需要手动调整组件足够快),手动内存管理(如:您的MRU可能希望您给它物理地址页表所在的位置),系统/硬件特定的机制(如何在这个特定的架构上访问XYZ控制器?),...

因此,您首先会失去Java在诸如C等低级语言方面的许多优势。

答案 1 :(得分:1)

是的,内核可以用Java编写,请参阅JNode。它的优点是没有问题:悬空指针,指针和数组地址的混合,单元化数据以及C的更多功能。