GNU/Linux >> Linux の 問題 >  >> Linux

x86 と x86_64 の Linux システムコール番号が異なるのはなぜですか?

他のどのアーキテクチャにも一致しない特定の番号付けの背後にある理由については [実際には x86_64 アーキテクチャの一部に過ぎない「x32」を除く]:深刻な下位互換性の制約により、すべてのシステム コールの番号が付け直され、キャッシュラインの使用レベルで最適化されました。

これらの選択の具体的な根拠を知るには、カーネル開発について十分な知識がありませんが、いくつかあるようです 既存のアーキテクチャから単にリストをコピーして未使用のものを削除するのではなく、これらの特定の番号ですべての番号を付け直すという選択の背後にあるロジック。順序は、それらがどれだけ一般的に呼び出されるかに基づいているようです-e.g.読み取り/書き込み/オープン/クローズは前もって。 exit と fork は「基本的」に見えるかもしれませんが、それぞれプロセスごとに 1 回だけ呼び出されます。

同じキャッシュ ライン内で一緒に一般的に使用されるシステム コールを保持することについても何かが起こっている可能性があります (これらの値は単なる整数ですが、カーネルにはそれぞれの関数ポインターを持つテーブルがあるため、8 つのシステム コールの各グループが占有されます)。そのテーブルの 64 バイトのキャッシュ ライン)


「amd64 linux でシステム コール番号が異なるのはなぜですか?」という質問に対する回答を参照してください。スタック オーバーフローについて。

要約すると、互換性のために、システム コール リストは安定しており、拡張することしかできません。 x86 64 アーキテクチャが登場したとき、ABI (引数の受け渡し、戻り値) が異なっていたため、カーネル開発者はこの機会に、待望の変更をもたらしました。


Linux
  1. SudoとSuを介して実行すると、パス変数が異なるのはなぜですか?

  2. Linux – Linuxのハイメモリとローメモリとは何ですか?

  3. Linux – Linux Utilsが現在の時刻を取得するためにシステムコールを使用しないのはなぜですか?

  1. x86_64 アセンブリ Linux システム コールの混乱

  2. Linux でシステム コール テーブルを変更する必要があるのはなぜですか?

  3. Linux でのライブラリ呼び出しとシステム呼び出しの違いは何ですか?

  1. Linux –システムにRootfsファイルシステムが存在しないのはなぜですか?

  2. Linux のカーネルがモノリシックであるのに、なぜ Linux は Unix に似ているのですか?

  3. 異なる Linux/Unix カーネルは互換性がありますか?