2

または、言い換えると、syscallとの違いは何int <kernel-interrupt-number>ですか?

考えられる唯一の明らかな理由は、オペレーティング システムによって割り込み数が異なり、新しい固有の命令を使用することで一貫性が向上することです。ただし、システム コールの数と引数は依然としてオペレーティング システムによって異なるため、一貫性の向上は非常に低くなります。

おそらく割り込みをインターセプトするには、カーネルにより多くの作業が必要ですか? (したがって、を使用するとパフォーマンスが向上しますsyscall)

4

1 に答える 1

2

あなたは正しい道を進んでいます。syscall指導の動機は主にパフォーマンスでした。詳細については、AMD の「SYSCALL and SYSRET Instruction Specification」を参照してください。

ドキュメントからの抜粋:

オペレーティング システムへの呼び出しを開始するために、アプリケーションはゲート記述子 (タスク、割り込み、トラップ、または呼び出しゲート) を介して OS に制御を転送します。コントロール転送は、CALL 命令またはソフトウェア割り込みのいずれかを使用して行われます。これらのコントロール ゲートの設定 (および RET または IRET 命令によるその後の復帰) は、セグメンテーション関連のオーバーヘッドによって遅くなります。
....
SYSCALL と SYSRET は、低レイテンシのシステム コールに使用される命令であり、フラット メモリ モデルとセグメンテーションのないオペレーティング システムで戻ります。これらの命令は、現在の CALL/RET 命令メソッドと比較して、コールまたはリターンにかかる内部クロック サイクル数が 4 分の 1 未満になるように、通常行われるチェックとメモリ参照の数を減らすことによって最適化されています。

于 2013-06-25T11:11:21.677 に答える