Linuxの64ビットロングモードでは、SYSENTERは何をしますか?

Linuxの64ビットロングモードでは、SYSENTERは何をしますか?

x86コマンドがありますsysenter。これはIntelの高速システムコール方式のようです。SYSENTERIntelプロセッサでは、LONGモード(64ビット)で動作しているようです。 AMDが提供するsyscallように、このガイドラインはsyscallEIP / ESPなどを使用して設定することはユーザーの責任です。

あなたは見ることができますsysenter32ビットパラメータリスト。まったく心配しないでください。syscallチップがロングモードにあるとき、int 0x80Linuxではこのコマンドは何をしますか?sysenterそのまま受けても役に立ちませんか?

答え1

システムコールへのアクセスを提供するCPUコマンドは単独では存在せず、オペレーティングシステムABIのコンテキスト内でのみ有用です。64ビットx86 Linux ABI次のエントリポイントがサポートされています(詳細情報貯水温網):

  • SYSCALL64ビットコードから。
  • 32ビットおよび64ビットコードで0x80を割り込みます。
  • SYSENTER32ビットコードから。

(カーネルに文書化されている追加の32ビットは混乱する可能性がありSYSCALLます。これは、64ビットコードで32ビットポインタを使用するx32システムコールインターフェイスです。)

ユーザー空間では、状況はより簡単です。

  • i386コード(32ビットポインタを持つ32ビットコード)は__kernel_vsyscallvDSOで使用する必要があります(使用する呼び出しメカニズムが決まります)。
  • 他のものを使用する必要がありますSYSCALL

SYSENTER長いモードで64ビットコードをエクスポートしようとしたことはありませんが、これが役に立つタスクを実行するかどうかはわかりません。

関連情報