カーネルモードとユーザーモードの
違いを決める「リング保護機構」
x86系のCPUには、4重の「リング保護機構」がある(図3)。リング保護機構とは、アプリケーションのバグや不正なプログラムなどから、OSなどのシステム関連のソフトウェアを守るためのものだ。このリング保護機構は、同心円を使って説明される。
一番内側(Ring 0)が最もセキュリティーが高く、ここでは特権命令などすべてのCPUの命令が実行できる。基本的にカーネルは、この一番内側のリング内で動作する。そのため、この一番内側で動作している状態のことを「カーネルモードで動作する」と言う。
プログラムはすべて、この同心円のどこかで実行され、アプリケーションプログラムは通常、一番外側のリング(Ring 3)で動く。リングの内側からは、外側のプログラムのメモリーなどを操作できる。だが外側のリングで動作しているプログラムは、内側のリングに属するメモリーにはアクセスできない。また、機械語命令のジャンプ命令や分岐命令は、通常このリングをまたぐことはできない。特定の飛び先が指定されたときのみ、リングをまたぐことができるようになっていて、x86ではこれを「ゲート」という。
x86では、コードやデータはすべて「セグメント」と呼ぶメモリーの単位に置かれている。各セグメントをアクセスするには、CPU内のセグメントレジスターにセグメントセレクターをロードしてアクセスする。このとき、セグメントごとに「リングレベル」(特権レベル)が設定されているので、メモリーへのアクセスの際にはプログラムやデータのセグメントに割り当てられているリングレベル情報をOSが見て、低いレベルからのアクセスを禁止している。
リング保護は、Unixを生んだことで有名な「Multicsプロジェクト」で採用された。この時は、ハードウェアで8レベル、ソフトウェアを併用して64レベルの保護リングを利用したという。Windowsではシステムを簡単にするために、x86の一番内側のリング(Ring 0)と、一番外側のリング(Ring 3)しか使っていない。これがそれぞれ、「カーネルモード」と「ユーザーモード」と呼ばれる。カーネルモードで動作するプログラムは、システム制御のレジスターや特権命令などすべての命令が利用できるだけでなく、物理メモリーを直接扱うことができる。
これに対してユーザーモードでは、利用できる命令が制限されており、システムレジスターなどにもアクセスできない。実行できない命令を実行しようとするとCPUに割り込みがかかって、カーネルモードのプログラム(カーネル)がこれを処理することになる。
この連載の記事
-
第13回
PC
ARM版Windows 8実現の布石となったWindows 7の「MinWin」 -
第12回
PC
アプリがWindowsの機能を使うには? APIとDLLの仕組み -
第11回
PC
マルチコアCPUの消費電力はスケジューリングで変わる? -
第10回
PC
AMD FX向けにパッチで修正 スケジューラーが抱える難題 -
第9回
PC
マルチコアCPUを賢く使いこなす スケジューリングの秘密 -
第8回
PC
意味の違いがわかる? タスクとプロセスとスレッド -
第7回
PC
Windowsのメモリー管理をx86の仕組みから読み解く -
第6回
PC
メモリー不足を根本的に解決する64bit OSの仕組み -
第5回
PC
Windows 8でMetro Styleアプリを動かす「WinRT」 -
第4回
PC
Windowsを動かすデバイスドライバーの仕組み 前編 -
第3回
PC
OSの仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ