Comments
Description
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