割り込みベクタテーブルにのみ追加されず、システムコールテーブルがあるのはなぜですか?

割り込みベクタテーブルにのみ追加されず、システムコールテーブルがあるのはなぜですか?

割り込みベクタテーブルにのみ追加されず、システムコールテーブルがあるのはなぜですか?ここではデザインの選択を理解していません。イベント区別のパフォーマンスが向上した場合、システムコールはなぜできませんか?

ベストアンサー1

私はいくつかの理由でi386のシステムコールに単一の割り込み(0x80)を使用する歴史的背景を調べていません。いいえシステムコールごとに個別のソフトウェア割り込みを使用します。

  • ソフトウェア割り込みの数が制限され、システムコールの数が制限されます(x86では、他の目的には多くの割り込み記述子テーブルエントリが必要です)。ソフトウェア割り込みを使用するほとんどのアーキテクチャがサポートできるよりも多くのシステムコールがあります。
  • 多くのアーキテクチャには、ソフトウェア割り込み(またはそれに対応するエントリ)を使用しない専用のシステムコール命令があります。これにはx86-64が含まれます。専用SYSCALL命令がソフトウェア割り込みよりも高速なシステムコールアクセスを提供する場合man 2 syscall各アーキテクチャのシステムコールルールの詳細が提供されます。

ARM / OABIアーキテクチャの詳細を見ると、システムコール番号が命令にエンコードされているため、割り込みテーブルが使用されていると考えることができます。該当するガイドライン固定ソフトウェア割り込みが実行され、エンコードされた番号は無視され、システムコールハンドラは命令自体から番号を検索します。 EABIはキャッシュ汚染を引き起こしたので、このアプローチを放棄しました(最新のARM CPUには別々の命令とデータキャッシュがあります)。

おすすめ記事