現代のコンピュータオペレーティングシステムは通常、仮想メモリを使用して、ユーザー空間とカーネル空間と呼ばれる別々のアドレス空間または単一のアドレス空間の別々の領域を提供します。[1] [a]主に、この分離は、悪意のあるソフトウェアの動作や誤ったソフトウェアの動作からメモリとハードウェアを保護するために役立ちます。
カーネル空間は、特権のあるオペレーティング システム カーネル、カーネル拡張、およびほとんどのデバイス ドライバーを実行するために厳密に予約されています。対照的に、ユーザー空間は、アプリケーション ソフトウェアと一部のドライバーが実行されるメモリ領域であり、通常はプロセスごとに 1 つのアドレス空間があります。
概要
ユーザー空間(またはユーザーランド)という用語は、オペレーティングシステムのカーネルの外で実行されるすべてのコードを指します。[2]ユーザー空間は通常、オペレーティングシステムがカーネルと対話するために使用するさまざまなプログラムとライブラリを指します。入出力を実行したり、ファイルシステムオブジェクトを操作したりするソフトウェア、アプリケーションソフトウェアなどです。
各ユーザー空間プロセスは通常、独自の仮想メモリ空間で実行され、明示的に許可されない限り、他のプロセスのメモリにアクセスすることはできません。これは、今日の主流のオペレーティングシステムにおけるメモリ保護の基礎であり、特権分離の構成要素です。別のユーザーモードを使用して、効率的な仮想マシンを構築することもできます。Popekと Goldberg の仮想化要件を参照してください。十分な権限があれば、プロセスはカーネルに対して、デバッガーの場合のように、別のプロセスのメモリ空間の一部を独自のメモリ空間にマップするように要求できます。プログラムは他のプロセスと共有メモリ領域を要求することもできますが、プロセス間通信を可能にする他の手法も利用できます。
実装
カーネル モードとは別にユーザー モードを実装する最も一般的な方法は、オペレーティング システムの保護リングを使用することです。保護リングは、CPU モードを使用して実装されます。通常、カーネル空間プログラムはカーネル モード (スーパーバイザー モードとも呼ばれます)で実行され、ユーザー空間の通常のアプリケーションはユーザー モードで実行されます。
一部のオペレーティング システムは単一アドレス空間オペレーティング システムです。つまり、すべてのユーザー モード コードに対して単一のアドレス空間を持ちます (カーネル モード コードは同じアドレス空間にある場合もあれば、2 番目のアドレス空間にある場合もあります)。その他のオペレーティング システムにはプロセスごとのアドレス空間があり、ユーザー モード プロセスごとに個別のアドレス空間があります。
実験的なオペレーティングシステムで採用されている別のアプローチは、すべてのソフトウェアに対して単一のアドレス空間を持ち、プログラミング言語のセマンティクスに依存して任意のメモリにアクセスできないようにすることです。アプリケーションは、アクセスが許可されていないオブジェクトへの参照を取得できません。 [4] [5]このアプローチは、 JXOS、Unununium、およびMicrosoftのSingularity研究プロジェクト で実装されています。
参照
注記
- ^ DOSやWindows 3.1xなどの古いオペレーティング システムでは、このアーキテクチャは使用されません。
参考文献
- ^ 「アドレス空間」。32 ビット システムのアドレス空間オプション。
- ^ 「userland, n.」The Jargon File . Eric S. Raymond . 2016年8月14日閲覧。
- ^ 「管理者ガイド README」。Kernel.org git リポジトリ。
- ^ 「Unununium System Introduction」。2001年12月15日時点のオリジナルよりアーカイブ。2016年8月14日閲覧。
- ^ "uuu/docs/system_introduction/uuu_intro.tex". UUU システム導入ガイド. 2001-06-01 . 2016-08-14閲覧。
外部リンク
- Linux カーネル空間の定義
- Wayback Machineでユーザー モードに入る(2016 年 3 月 26 日アーカイブ)
