現代のコンピュータオペレーティングシステムは通常、仮想メモリを使用して、ユーザー空間とカーネル空間と呼ばれる別々のアドレス空間または単一のアドレス空間の領域を提供します。[ 1 ] [ a ]この分離は主に、悪意のあるソフトウェアや誤ったソフトウェアの動作から メモリとハードウェアを保護します。
カーネル空間は、特権を持つオペレーティングシステムカーネル、カーネル拡張、およびほとんどのデバイスドライバの実行専用に予約されています。一方、ユーザー空間は、アプリケーションソフトウェア、デーモン、および一部のドライバが実行されるメモリ領域であり、通常、プロセスごとに1つのアドレス空間が割り当てられます。
概要
ユーザー空間(またはユーザーランド)という用語は、オペレーティングシステムのカーネルの外で実行されるすべてのコードを指します。[ 2 ]ユーザー空間は通常、オペレーティングシステムがカーネルと対話するために使用するさまざまなプログラムとライブラリを指します。入出力を実行するソフトウェア、ファイルシステムオブジェクトの操作、アプリケーションソフトウェアなどです
各ユーザー空間プロセスは通常、独自の仮想メモリ空間で実行され、明示的に許可されない限り、他のプロセスのメモリにアクセスすることはできません。これは、今日の主流のオペレーティングシステムにおけるメモリ保護の基礎であり、特権分離の構成要素です。別のユーザーモードは、効率的な仮想マシンを構築するためにも使用できます。PopekとGoldbergの仮想化要件を参照してください。十分な権限があれば、プロセスはカーネルに対して、デバッガの場合のように、別のプロセスのメモリ空間の一部を自身のメモリ空間にマップするように要求できます。プログラムは他のプロセスと共有メモリ領域を要求することもできますが、プロセス間通信を可能にする他の手法も利用可能です。
| ユーザーモード | ユーザーアプリケーション | bash、LibreOffice、GIMP、Blender、0 AD、Mozilla Firefox、… | ||||
|---|---|---|---|---|---|---|
| システムコンポーネント | initデーモン: OpenRC、runit、systemd、… | システムデーモン: polkitd、smbd、sshd、udevd、... | ウィンドウシステム: X11、Wayland、SurfaceFlinger (Android) | グラフィック: Mesa、AMD Catalyst、... | その他のライブラリ: GTK、Qt、EFL、SDL、SFML、FLTK、GNUstep、... | |
| C標準ライブラリ | fopen、、、、、、、…(最大2000個のサブルーチン)glibcは高速化を目指し、muslはexecv軽量化を目指し、uClibcは組み込みシステムをターゲットにし、bionicはAndroid向けに書かれました。mallocすべてPOSIX / memcpySUS互換を 目指していますlocaltimepthread_create | |||||
| カーネルモード | Linuxカーネル | stat、、、、、、、、、、など(約380個のシステムコール)Linuxカーネルシステムコールインターフェース( SCI )spliceは、 POSIX / SUS互換を目指しています[ 3 ]dupreadopenioctlwritemmapcloseexit | ||||
| プロセススケジューリングサブシステム | IPCサブシステム | メモリ管理サブシステム | 仮想ファイルサブシステム | ネットワークサブシステム | ||
| その他のコンポーネント:ALSA、DRI、evdev、klibc、LVM、デバイスマッパー、Linuxネットワークスケジューラ、Netfilter Linuxセキュリティモジュール:SELinux、TOMOYO、AppArmor、Smack | ||||||
| ハードウェア(CPU、メインメモリ、データストレージデバイスなど) | ||||||
実装
カーネルモードとは別にユーザーモードを実装する最も一般的な方法は、オペレーティングシステムの保護リングを使用することです。保護リングはCPUモードを使用して実装されます。通常、カーネル空間のプログラムはカーネルモード(スーパーバイザーモードとも呼ばれます)で実行され、ユーザー空間の標準アプリケーションはユーザーモードで実行されます。
一部のオペレーティング システムは、単一アドレス空間のオペレーティング システムです。つまり、すべてのユーザー モード コードに対して単一のアドレス空間が割り当てられます (カーネル モード コードは、同じアドレス空間に配置されることもあれば、別のアドレス空間に配置されることもあります)。他のオペレーティング システムでは、プロセスごとのアドレス空間が割り当てられ、ユーザー モード プロセスごとに個別のアドレス空間が割り当てられます。
参照
注記
- ^ DOSやWindows 3.1xなどの古いオペレーティングシステムでは、このアーキテクチャは使用されません
参考文献
- ^ 「アドレス空間」。32ビットシステムのアドレス空間オプション
- ^ 「userland, n.」The Jargon File . Eric S. Raymond . 2017年7月18日時点のオリジナルよりアーカイブ。 2016年8月14日閲覧。
- ^ 「管理者ガイド README」。Kernel.org git リポジトリ。
外部リンク
- Linuxカーネル空間の定義
- Wayback Machineでユーザーモードに入る(2016年3月26日アーカイブ)