システムコールインターフェイスは低レベルで実装されているため、「ジェネリック」コードではなく、アーキテクチャ/プラットフォームに依存します。
しかし、Linux 32ビットx86カーネルのシステムコールに、同様のアーキテクチャのLinux 64ビットx86_64で同じ値が保持されない理由がはっきりとわかりません。この決定の背後にある動機/理由は何ですか?
私の最初の推測は、バックグラウンド化の理由が32ビットアプリケーションをx86_64システム上で実行可能な状態に維持することであったため、システムコール番号への妥当なオフセットを介して、システムはユーザースペースが32ビットまたは64ビットであることを認識しますそれぞれ。ただし、そうではありません。少なくとも、x86_64のシステムコール番号0であるread()は、この考えと一致しないように思われます。
もう1つの推測は、システムコール番号の変更にはセキュリティ/強化の背景があるかもしれないということです。
アーキテクチャに依存するコード部分の実装の課題に無知であるため、システムコール番号を変更する必要はないように思われます(16ビットのレジスタでさえ、すべてを表すために現在〜346の数値よりも多くを格納するため)呼び出し)、互換性を破る以外の何かを達成するのに役立ちます(ただし、ライブラリlibcを介してシステムコールを使用すると、軽減されます)。