このページの本文へ

基礎から覚える 最新OSのアーキテクチャー 第2回

ARM版Windows実現の鍵はマイクロカーネルにあり?

2011年08月11日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

カーネルモードとユーザーモードの
違いを決める「リング保護機構」

 x86系のCPUには、4重の「リング保護機構」がある(図3)。リング保護機構とは、アプリケーションのバグや不正なプログラムなどから、OSなどのシステム関連のソフトウェアを守るためのものだ。このリング保護機構は、同心円を使って説明される。

図3 x86 CPUのリング保護機構。WindowsではRing 0と3のみを使用する

 一番内側(Ring 0)が最もセキュリティーが高く、ここでは特権命令などすべてのCPUの命令が実行できる。基本的にカーネルは、この一番内側のリング内で動作する。そのため、この一番内側で動作している状態のことを「カーネルモードで動作する」と言う。

 プログラムはすべて、この同心円のどこかで実行され、アプリケーションプログラムは通常、一番外側のリング(Ring 3)で動く。リングの内側からは、外側のプログラムのメモリーなどを操作できる。だが外側のリングで動作しているプログラムは、内側のリングに属するメモリーにはアクセスできない。また、機械語命令のジャンプ命令や分岐命令は、通常このリングをまたぐことはできない。特定の飛び先が指定されたときのみ、リングをまたぐことができるようになっていて、x86ではこれを「ゲート」という。

 x86では、コードやデータはすべて「セグメント」と呼ぶメモリーの単位に置かれている。各セグメントをアクセスするには、CPU内のセグメントレジスターにセグメントセレクターをロードしてアクセスする。このとき、セグメントごとに「リングレベル」(特権レベル)が設定されているので、メモリーへのアクセスの際にはプログラムやデータのセグメントに割り当てられているリングレベル情報をOSが見て、低いレベルからのアクセスを禁止している。

 リング保護は、Unixを生んだことで有名な「Multicsプロジェクト」で採用された。この時は、ハードウェアで8レベル、ソフトウェアを併用して64レベルの保護リングを利用したという。Windowsではシステムを簡単にするために、x86の一番内側のリング(Ring 0)と、一番外側のリング(Ring 3)しか使っていない。これがそれぞれ、「カーネルモード」と「ユーザーモード」と呼ばれる。カーネルモードで動作するプログラムは、システム制御のレジスターや特権命令などすべての命令が利用できるだけでなく、物理メモリーを直接扱うことができる。

 これに対してユーザーモードでは、利用できる命令が制限されており、システムレジスターなどにもアクセスできない。実行できない命令を実行しようとするとCPUに割り込みがかかって、カーネルモードのプログラム(カーネル)がこれを処理することになる。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン