...

MMUのメモリ保護機能を 使ったプログラミング MMUのメモリ保護機能を

by user

on
Category: Documents
9

views

Report

Comments

Transcript

MMUのメモリ保護機能を 使ったプログラミング MMUのメモリ保護機能を
MMUのメモリ保護機能を
使ったプログラミング
中森 章
近年の組み込み機器の複雑化に伴い,MMU機能を使った大規模システムが作られるようになった.MMUを使えば,プロ
セスごとに独立した仮想アドレス空間を持つことができる上,一つのプロセスが暴走してもほかのプロセスやOSカーネル
に影響を与えないという利点がある.また,ページ・スワップを使えば,少ないメモリを有効に使うこともできる.
本稿では,OSの製作や,OSのない環境でメモリ保護機能を使うのに必要なMMUについて,ARM926コアを対象として
解説を行う.
(編集部)
¡アドレス変換
組み込みプログラムが高度になり,また複雑になるにつ
¡メモリ保護
れ,Symbian OS,Windows CE,Linux といった Operating System(OS)の必要性が高まっています.特に出来合
の二つの機能があります.
いのアプリケーション・プログラムは何らかの OS の下で
● アドレス変換――仮想アドレスを物理アドレスに変
換する
動作することを前提としているのが普通です.MMU
(Memory Management Unit)は OS を動作させるために
これは仮想アドレスを物理アドレスに変換する機能で
必須の機能といわれています.私達が一般的に入手可能な
す.プログラマに見えるアドレスが仮想アドレスです.も
評価ボードは汎用的な使用方法が想定され,OS が載るこ
ちろん,プロセッサも仮想アドレスに基づいて動作します.
とを前提としており,そこに搭載されるプロセッサも
一方,メモリ側から見える本当のアドレスが物理アドレス
MMU 内蔵のものが使われます.
です.
一方,MPU(Memory Protection Unit)機能を持つプロ
アプリケーション・プログラムのプログラマは,通常は
セッサは,OS を必要としない特定用途向けの System On
プログラムがメモリのどこに存在するかを意識することな
a Chip(SoC)や Application Specified Integrated Circuit
く,すべてのプログラムは同一のアドレス(例えば 0 番地)
(ASIC)に多く内蔵されます.しかし,私達がそのような
から始まっているものとしてプログラミングします.「ア
SoC や ASIC をプログラムする機会は少ないと思われるの
プリケーション A は 0x1000 番地から始まり,アプリケー
で,MPU の説明は今回は割愛します.
ション B は 0x2000 番地から始まる」などと考えてプログラ
以降,私達が最も目にする機会が多いと思われる ARM
ミングすることは,まずありません.すべて 0 番地から始
926 コアの MMU について説明します.プロセッサ・コア
まるという仮定でプログラミングします.逆にいうと,ア
を ARM926 に特定していますが,ほかの ARM9 系のプロ
プリケーションの数だけ同一の仮想アドレスが存在します.
セッサ(MMU を持つもの)に対しては同じような方法で
しかし物理アドレスの場合は,メモリというデバイスの
MMU を操作できます
注1
.
アドレスは一意なので,同一のアドレス上では一つのプロ
グラムしか実行できません.ところが現実には,幾つもの
1.MMU とは何か
アプリケーション・プログラムが一つの OS の下で同時に
動いています.これは OS が,各プログラムの存在するメ
本誌の読者に MMU の解説をするのは釈迦に説法かもし
れませんが,MMU の機能について簡単に説明しておきま
しょう.
MMU には大きく分けて,
Nov. 2008
注 1 :と は い え , ARM920T や ARM922T の TRM( Technical Reference
Manual)には MMU が ARMv4 準拠となっているのが気にかかる.
ARM926 の TRM では,MMU は ARMv5 準拠となっている.
KEYWORD ―― ARM,MMU,TLB,キャッシュ
105
モリ領域をずらしてメモリ上に配置しているからです.OS
る),特権領域にあるスタック上のデータを命令として実
は,プログラムの実行する仮想アドレスを実際のメモリ上
行すれば,アプリケーション・プログラムを特権レベルで
の物理アドレスに読み換えてプログラムを実行させます.
動かせます.このような悪意を持ったプログラムは OS の
これがアドレス変換です.アドレス変換はプログラムでは
実行を阻害したり停止させたりするからです.
意識されず,OS 内で自動的に処理されます.
アドレス変換の利点は何でしょうか? 一つは,上述し
たように,複数のプログラムを同時に(正確には時分割で)
ARM アーキテクチャでは ARMv5 までは実行許可属性
がなかったのですが,ARMv6 以降は実行許可属性が追加
されました.
一つの物理メモリで動作が可能になることです.これをマ
ルチタスクといいます.このほかに,メモリに入りきらな
2 ARM のアドレス変換
い程巨大なプログラムを,一部分ずつ交代して物理メモリ
に配置しての実行も可能になります.これはページ・ス
● アドレス変換の仕組み
ワップといいます.OS はマルチタスクとページ・スワッ
アドレス変換とは,仮想アドレスと 1 対 1 に対応する物
プを適宜に組み合わせ,物理メモリを効率良く利用しなが
理メモリ上のアドレス変換情報(これをページ・テーブル
ら,複数のプログラムを適正に動作させます.
という)を参照して,仮想アドレスから物理アドレスを生
● メモリ保護――特定の領域へのアクセスを禁止する
成することです.
これはあるプログラムに対して,特定の仮想アドレス領
域へのアクセスを禁止する機能です.逆にいえば,特定の
領域に対して,「リードのみ可能」,「ライトのみ可能」,
● 1 レベル方式と 2 レベル方式の 2 種類がある
ARM のアドレス変換の方式には,1 レベル方式と 2 レ
ベル方式があります.1 レベル方式は 1 回のページ・テー
「リードとライト可能」
,
「リードもライトも不可能」のよう
ブル参照で物理アドレスを生成します.2 レベル方式は 2
な属性を持たせることです.これにより,アプリケーショ
回のページ・テーブル参照で物理アドレスを生成します.
ン・プログラムが暴走しても,OS やほかのプログラムに
このような物理メモリ上のページ・テーブル参照を,ペー
影響を与えないようにできます.本稿では説明しません
ジ・テーブル・ウォークと呼びます.
が,ARM でいう Memory Protection Unit(MPU)も似た
ような機能を有しています.
ARM では仮想アドレスとして,CP15 のレジスタ 13 に
格納されている FCSE PID(Fast Context Switch Exten-
伝統的な MMU では,プログラムの実行可能性をリード
sion Process ID)と呼ばれるプロセス ID を考慮した MVA
可能性と同一視するものが多かったのですが,近年の
(Modified Virtual Address)という修正仮想アドレスを使
MMU はリード可能性と実行可能性を区別するのが流行で
用してアドレス変換を行います.今の時点では FCSE PID
す.アプリケーション・プログラムがスタックを意図的に
を考える必要はありません.
オーバフローさせて例外を発生させ(特権モードに移行す
コラム
ARM アーキテクチャの MMU とデータ・キャッシュの関係
筆者が ARM アーキテクチャに触れてまず最初に驚いたこと
は MMU(Memory Management Unit)を ON にしないとデー
使用するためになぜそこまでしなくてはならないのか理解に苦
しみました.
タ・キャッシュが使えないという事実です.それまで MMU と
ARM もプロセッサの種類によっては MMU を持たないもの
キャッシュは異なる概念だと思っていたのに,その既成概念が
もあります.しかし,その場合の多くは MMU の代わりに MPU
ぶち壊されてしまいました.ARM に限らず一般的なプロセッ (Memory Protection Unit)というメモリ保護機構を備えていま
サで MMU を使用するためにはページ・テーブルの設定など多
す.この場合でも MPU を ON にしないとデータ・キャッシュ
くの設定をする必要があります.たかがデータ・キャッシュを
が使えません.
106
Nov. 2008
Fly UP