カーネルモジュールはLinuxに固有のものですか、それとも一般的なメカニズムですか?

カーネルモジュールはLinuxに固有のものですか、それとも一般的なメカニズムですか?

私はオペレーティングシステムに関するTanenbaumの本にガードリングがあり、リング0がカーネルに属していることを読んだ。一般に、「カーネルモジュールはリング0のI / Oとメモリ管理を処理します」と言うことができます。それとも「カーネルモジュール」はLinuxに固有のもので、OpenBSDやMULTICSなどには適用されませんか?

ベストアンサー1

Andrew Tanenbaumによって提示されたアイデアは通常、Linux(または既存のモノリシックUnixカーネル)に直接適用することはできません。あなたの質問に対する答えは、あなたが提案したものよりはるかに簡単です。 Linuxカーネルモジュールは、カーネルイメージにリンクされず、別々のファイルにコンパイルおよびリンクされたカーネルコードです。この別々のカーネルオブジェクトファイル(.ko)は、実行時に必要に応じてカーネルアドレス空間にロードできます。カーネルモジュールでコンパイルできるほとんどすべてのドライバは、コードがロードされると機能的な違いなしにカーネルイメージに静的にリンクすることができます。

モジュールコードは、他のすべてのカーネルコードと同じ権限で実行されるカーネルコードです。原則として、カーネルモジュールはすべてのカーネルコードを置き換えることができますが、それをきちんと実行するには、カーネル自体からモジュールを接続するメカニズムを提供する必要があります。

用語に関する注意:ガードリングは、Multicsオペレーティングシステムによって導入された概念です。 「リング 0」から「リング 3」までは、Intel プロセッサに固有の用語です。他のプロセッサアーキテクチャは、ユーザー/管理モードなどの他の用語を使用します。 Intelプロセッサは4つの特権レベルを提供しますが、ほとんどのオペレーティングシステムは、ユーザーレベルのコード用のリング3とカーネルコード用のリング0、つまり他のプロセッサのユーザー/管理モードをミラーリングする2つの特権のみを使用します。 (3つの特権レベルを使用するOS / 2は例外です。)

最近、ハードウェアレベルの仮想化技術が登場し、権限レベルの概念が拡張されている。たとえば、ARMアーキテクチャは、ユーザー、スーパーバイザ、ハイパーバイザーという3つの権限レベルを定義します。冗談として、Intelベースのシステムでは4つのリングが使用されました。つまり、ユーザーレベルコード用リング3、(仮想マシン)カーネルコード用リング0、ハイパーバイザーコード用リング-1、SMMモード用リング-2です。

おすすめ記事