一部のJavaのAPIを介して、いくつかの特権命令(sti、cliなど)を利用できるようにすることは可能ですか?
なぜだめですか?(または、そうである場合、これがどのように実装されるかについての概要/基本的なアイデアを教えていただけますか?)
ありがとう
一部のJavaのAPIを介して、いくつかの特権命令(sti、cliなど)を利用できるようにすることは可能ですか?
なぜだめですか?(または、そうである場合、これがどのように実装されるかについての概要/基本的なアイデアを教えていただけますか?)
ありがとう
STIとCLIは、プラットフォームに依存する低レベルの割り込みです。
Java(言語)でソースコードを作成する場合、Javaバイトコードを実行するJava仮想マシンを対象としています。したがって、ソースコードの指示は、物理マシンのマシンコードに直接変換されません。これはバイトコードに変換され、物理マシンをターゲットにするために実行されます(また、実行時にJITコンパイラによって再コンパイルされます)。
したがって、これらの特権命令を簡単に使用するためのオプションはありません(Javaの設計目標ではなく、これを公開することはあまり意味がありません)。それらは抽象化されることを意図しています。
理由から「高級」言語を使用します。
なぜそんなことに興味があるのかわかりませんが、まずはこの記事をご覧ください。
従来のJava実装では、唯一のオプションは、JNIまたはJNAを使用して呼び出すネイティブメソッドで特権命令を実行するコードを実装することです。そして、それはあなたに何の役にも立たないでしょう...ハードウェア/オペレーティングシステムが命令の実行を妨げるからです。(違法な命令トラップが発生します...そしてプログラムは強制終了されます。)
なぜだめですか?
基本的に、通常のJavaアプリケーション(またはその他のユーザースペースアプリケーション)が特権命令を実行できる場合、オペレーティングシステムが簡単にクラッシュする可能性があります。それは本当に悪い考えです。
Javaのベアメタル実装では、ネイティブコードを介して、または場合によっては他の手段によって、特権命令を実行できる場合があります。(たとえば、JNodeでは、ネイティブコードコンパイラは、慎重に制御された状況下で、特定の「魔法の」メソッド呼び出しを特権命令に置き換えます。)