小型組み込み機器向けLinux ──MMUを持たないマイクロプロセッサで動作するしくみ
uClinuxとは――一般的なLinuxとの違い
uClinuxと通常のLinuxの根本的な違いは,MMUをサポートしていないことです.しかし,カーネルとユーザ空間に及ぶ影響はわずかです.
MMUがない環境での開発課題を熟知している組み込みシステム開発者はともかく,一般的なLinux開発者の場合,uClinuxを使用すると多少の違いに気づきます.LinuxとuClinuxの違いは,メモリ・プロテクションと仮想メモリ・モデルをサポートしていないことです.これらはuClinuxからMMUサポートを除いた結果といえます.カーネルやユーザ・アプリケーションの開発に携わる設計者にとっては重大な違いであり,カーネルへの特定のシステム・コールにも影響を及ぼします.
●メモリ・プロテクション
メモリ・プロテクション機能を持たないことに起因する問題として,特権のあるプロセスでなくてもエラーを引き起こす原因となったり,潜在的に障害が発生する可能性が残ったり,最悪の場合,ポインタへの不正な参照によってシステムのシャットダウンを招くといったことが挙げられます.システムそのものに関連するこうしたコードについては,安定性とセキュリティを確保するための,念入りなプログラミングとテストが必要になります.
●仮想メモリ
仮想メモリなしでLinuxを走らせる場合,大きく三つの課題があります.
まず最初に,カーネルでロードされたプロセスは,メモリ内で独立して実行されなければなりません.これを実現するためには,いったんRAMにロードされた時点でプログラム内のアドレス参照を固定するか,もしくは相対アドレッシング(ポジション独立コードを参照する)によるコードを生成しなければなりません.uClinuxは,上記のどちらの方法もサポートしています.
次に,フラットなメモリ・モデル内で起こるメモリの割り当てと開放の問題があります.動的なメモリ割り当てを行うと,システムに不完全なリソースを残すフラグメンテーションを発生しやすくなります.動的なメモリ割り当てを行うアプリケーションを安定動作させるためには,malloc()コールを前もって割り当てたバッファ・プールからのリクエストに置き換える必要があります.
uClinuxでは仮想メモリが使われておらず,再びRAM内の同じ場所にロードされる保証がないため,実メモリのスワッピング・ページ・インおよびページ・アウトの機能は実装されていません.しかし組み込みシステムでは,実質的に使用可能なサイズを超えるRAMを使用してアプリケーションをサスペンドすることはほぼありえないので,問題にはならないでしょう.