MPL OS の構成

モジュール構成

システム内部は以下のような構造です。

モジュール関連図 モジュール関連図

※実際には上図に加えて全モジュールから参照される共有コードが含まれます。

まずハードウェアの上に MPL カーネルが乗ります。
その上で アプリケーションサブシステムドライバー 等のタスクが動作します。
各タスクは RPC や割り込み等で相互接続し協調動作します。

MPL カーネル

MPL カーネルはメモリー管理やタスク管理等の基本機能及び、複数のタスクが協調動作するために必要な機能を提供します。
サポートライブラリーは C の関数で、以下の機能を提供します。(カーネルコール)

一部の機能はサブシステムで独占的に使用され、アプリケーションは使用できません。

サブシステム

サブシステムはカーネルで提供しない高度な機能を提供します。
カーネルの上で動作するアプリケーションとして記述され、RPC 経由でサービスを提供します。
以下のサブシステムがあります。

デバイスドライバー

デバイスドライバーはハードウェアを制御します。
サブシステムと同様、アプリケーションとして記述しますが、 特権モードで動作して直接ハードウェアを操作します。

現在、以下のドライバーがあります。

アプリケーション

ユーザーアプリケーションは .X ファイルとして作成します。
カーネルコール及び RPC 経由のサブシステム呼び出しで、OS のサービスを受けます。
開発は human68k 上の gcc で行います。
また、実数演算には富永丈博さんが公開している f2hs.x のソースを使用しています。

処理の流れ

アプリケーションプログラムが呼び出すOS機能は主に3つの部分で処理されます。

LIBC と SC は自身で処理可能な事は OS を呼び出さずに処理しますが、それ以外の場合は KC 経由でカーネルを呼び出し(必要なら IM をサブシステムに送り)ます。

IM(インストラクションメッセージ) はサブシステム間で命令を伝達するメッセージです。

機能依存図 機能依存図

ハードウェアの制御

本来は、OS 側でドライバーを用意し、アプリケーションはドライバー経由でアクセスを行うべきですが、十分な対応が出来ないので特権モードタスクを使った直接操作を開放しています。
当然、不正アクセスやコンフリクト等の問題は有りますが、「おもちゃ OS だから有り」と割り切っています。

inserted by FC2 system