だから私が明確ではないのは、ユーザー空間からカーネル空間への変換がアーキテクチャに依存する理由です。例えば、Linux カーネル v5.4 システムは、カーネル空間に入るコードを呼び出します。これはアーキテクチャが他のx86とは異なり、Cコードだけでなく、アーキテクチャに依存するアセンブリ命令も含みます。
なぜこれですか?なぜLinuxカーネル全体をCで直接書くことができないのですか?
どんなアイデアにも感謝します。
ありがとうございます。
答え1
カーネルモードユーザーモードとはかなり異なります。カーネルは必要なものは何でもでき、ハードウェアのすべての部分にアクセスできますが、ユーザースペースはそうではありません。コードがハードウェアにモード間切り替えを指示する方法は、アーキテクチャによって異なります。したがって、変換メカニズムは機械語コードで実装されますが、Cライブラリにカプセル化されます。オペレーティングシステムがハードウェアとインタフェースする場所、つまりデバイスドライバで同じものを見つけることができます。
Cは、オペレーティングシステムを作成し、アーキテクチャ間の移植性を提供するための言語です。