4

カーネルプログラミングはしませんでした。私はJava言語の優れたプログラマーであり、頻繁に使用しています。今、私はカーネルで何か面白いことをしたいと思っています。カーネルはハードウェアとOSの間に存在します。システムコールを使用してハードウェアと通信します。すべてのプログラミング言語では、高水準言語で記述されたコードをコンパイルするコンパイラが必要です。その後、低水準コードが生成されます。これは通常、アセンブリ言語コードです。カーネルがCで記述されている場合、マシンにCコンパイラをインストールする必要があるのではないかという疑問が生じます。最後に、カーネルがハードウェアと対話するときにアセンブリ言語を使用しますが、Java言語でカーネルを作成できますか?はいの場合、同じための要件は何ですか?ありがとうございました。

4

2 に答える 2

22

カーネルはハードウェアとOSの間に存在します

通常、カーネルはオペレーティングシステムの一部と見なされます。

システムコールを使用してハードウェアと通信します

システムコールは、OSがユーザーアプリケーションに提供するインターフェイスです。オペレーティングシステムは、他のメカニズム(たとえば、割り込みやメモリマップドレジスタ)を介してハードウェアと通信します。

すべてのプログラミング言語では、高水準言語で記述されたコードをコンパイルするコンパイラが必要です。その後、低水準コードが生成されます。これは通常、アセンブリ言語コードです。

コンパイラの出力は通常、ネイティブマシンコードまたは言語固有のバイトコード(Javaの場合など)のいずれかです。コンパイラは、CやJavascript(トランスパイル)などの別のプログラミング言語をターゲットにする場合もあります。

カーネルがCで記述されている場合、マシンにCコンパイラをインストールする必要があるのではないかという疑問が生じます。

それは必要ありません。Cコンパイラは、解釈せずにハードウェア上で直接実行できる出力を生成します。

最後に、カーネルがハードウェアと対話するとき、それはアセンブリ言語を使用します

CPUはアセンブリを理解していません。マシンコードを理解します。

Java言語でカーネルを作成できますか?

できました。

はいの場合、同じための要件は何ですか?

Javaでカーネルを作成する場合は、次のいずれかを行う必要があります。

  • Javaコードベース全体をマシンコードにコンパイルします
  • Javaバイトコードを実行できるCPUを入手してください
  • ベアメタル上で実行できるJavaVMとランタイムを検索または構築し、その中でJavaコードを実行します(巧妙に実行すれば、ランタイムの大部分と、おそらくJava自体でVMの一部を記述できます)。

さて、口に出さない、ほとんど倫理的な質問に移りましょう。

これは良い考えですか?

おそらくそうではありません。なんで?まず第一に、セットアップには何年もかかるからです。第二に、平均的なビジネスアプリケーションを開発する方法をコーディングするだけでは不十分だからです。非常にタイムクリティカルなコードのパフォーマンス(たとえば、コンテキストスイッチング、多くの場合、手作業で調整されたアセンブリが十分に高速である必要があります)、手動メモリ管理(MRUが物理アドレスを指定することを期待する場合があります)について考える必要があります。ページテーブルがある場所)、システム/ハードウェア固有のメカニズム(この特定のアーキテクチャでXYZコントローラーにアクセスする方法は?)、...

したがって、そもそもCのような低水準言語に比べてJavaが持つ多くの利点を失うことになります。

于 2012-04-21T18:03:26.813 に答える
1

はい、カーネルはJavaで記述できます。JNodeを参照してください。ダングリングポインタ、ポインタと配列アドレスの混同、ユニタライズされたデータ、およびCのその他の多くの機能に問題がないという利点があります。

于 2012-04-21T18:24:29.630 に答える