OS-9

OS-9は、label=マイクロウェアシステムによってモトローラの8ビットMPUである6809のために開発されたリアルタイムオペレーティングシステムである。 当時マイクロウェアシステムはモトローラの依頼により共同でプログラミング言語BASIC09を開発していた。この言語の開発・実行環境としてマイクロウェアが開発したのが OS-9 である。

その後680x0に移植され、さらにx86、PowerPC、SH、ARMなど幅広いCPUに対応した。 2001年にラディシス社によってマイクロウェアシステムが買収されて一部門となり、2013年に販社グループに売却されてマイクロウェアLP社として独立した。

1. 特徴
-----

1.1. プリエンプティブ・マルチタスク
--------------------

OS-9は、プリエンプティブ・マルチタスクをおこなうRTOSである。

1.2. マルチプロセス
------------

多くの組み込み用RTOSでは、全ての実行コードを単一のロードイメージにリンクしてメモリに展開・実行するので、並行実行されるタスクはスレッドモデルであることが一般的だが、OS-9では各タスクは独立したプログラムイメージを実行するプロセスモデルである。

プロセスモデルでは各タスクは論理的に独立しているのでタスク間のデータの共有や通信にコストがかかりがちだが、OS-9では「データモジュール」と呼ばれる一種の共有メモリ機能で高速なプロセス間通信を提供している。ただし、タスク間通信に不可欠なセマフォが提供されたのはかなり後のことである。また後のバージョンではPOSIXに準拠したプロセス内の複数スレッドをサポートする。

OS-9/6809レベル2ではMMUを使った仮想アドレス空間をサポートしたが、その他のバージョンでは単一のアドレス空間しか持たないフラットメモリモデルである。OS-9/6809レベル2及びOS-9/68030以降のバージョンではハードウェアによるプロセス間のメモリ保護機能がある。

OS-9での新プロセス作成はUNIX流の現在のプロセスのコピーではなく、実行プログラムを指定するWindowsの「spawn」に近いモデルである。これは、ベースレジスタを持たないCPUアーキテクチャでフラットメモリモデルを採用する限りある程度必然であり、UNIXでも多くの場合せっかくコピーした子プロセスの元の実行イメージは捨てられてexecで新しい実行イメージに置き換えられることを考えれば効率的でもある。

1.3. モジュール構造
------------

OS-9を構成するすべての部分は、モジュールと呼ばれる統一された構造を持っており、必要な機能だけを選択して使用することができ、自由度の高い構造になっている。これにより、OS-9は以下の特徴を有する。

移植性が高い移植に必要なモジュールだけを新たに作成すればよい。個々のモジュールも容易に作成可能。アップグレードが簡単対象モジュールのみ交換可能。再起動を必ずしも必要としない。外部プログラムを主記憶に常駐させる事が簡単主記憶  上のモジュールはモジュールディレクトリと呼ばれるファイルシステムのディレクトリに似た構造で管理される。外部記憶上のプログラムも予めロードする事によりROM化されたモジュールと同様に主記憶上に常駐した状態にすることが可能。セキュリティに強い各モジュールにCRCがあり、モジュールをモジュールディレクトリへ登録する際にチェックされるため、正当なモジュールのみメモリにロード可能。デバッグが簡単OS自体が構造化されているため、問題点の切り分けが行いやすい。リビジョン/エディションモジュールにはリビジョン番号とエディション番号があり、同一名のモジュールがメモリ中に複数ある場合、最新のモジュールのみ有効となる。ROM化されたシステムをアップグレードする場合、古いモジュールを削除することなく、新しいモジュールのROMを追加するだけでよい。ROM化可能すべてのモジュールがリロケータブルであることからROM化特有のアドレスを意識しないでプログラミングしたものを、そのままROM化できる。各モジュールは、すべて主記憶空間内のROM上で直接実行が可能である。プログラムが使用する変数・スタック領域はカーネルによって実行時に動的に割り当てられる。再入可能プログラムがリエントラントであることはOS-9において必須の条件であり、リエントラントでないコードは利用できない。プログラムは自身を実行中に書き換えてはならない。メモリ使用効率が高いプログラムがリエントラントであるため、コード領域を各プロセスで共有することが可能になり、メモリの利用効率が高くなる。また、OS自身がモジュールの集合であるので、必要なモジュールのみをロードすればよい。遅い汎用性は高いが、専用に設計されたモノリシックOSに比べるとオーバヘッドが生じる。例えばデバイスドライバはそれぞれ固有のスタティックストレージと呼ばれる大域変数領域を持つため、カーネルの機能を利用する際には単純な関数呼び出しではなく原則として
ソフトウェア割り込みを伴うシステムコールを用いる必要がある。

1.3.1. OS-9のモジュールの種類
--------------------

カーネルモジュール
kernel
OS9p1 拡張モジュール
OS9p2
OS9p3
ioman - I/Oシステムの総合管理
ファイルマネージャモジュール
RBF - Random Block File Manager
SCF - Sequential Character File Manager
SBF - Sequential Block File Manager
PipeMan - Pipe File Manager
IBF - IEEE 488 Interface Bus File Manager
PCF - PC-DOS equivalent File Manager
NVFM - non-volatile File Manager
CDFM - Compact Disc File Manager
NRF - Non-Volatile RAM File Manager
UCM - User Communication File Manager
DSM - Display Support Manager
GFM - Graphics File Manager
MFM - MAUI File Manager
NFM - Network File Manager
SOCKMAN - Socket File Manager
IFMAN - 通信インターフェース・ファイル・マネージャ
PKMAN - 仮想キーボード・ファイル・マネージャ
SPF - Stacked Protocol File Manager
デバイスドライバモジュール
sc6821 - MC6821用汎用コンソールドライバ
デバイスディスクリプタモシュール
t0 - デバイスのアドレス、設定値などを保持
プログラムモジュール
shell、標準ユーティリティプログラム
cc - Microware C Compiler / ucc - Ultra C Compiler
データモジュール
init - システム初期化定数などを保持
BASIC中間コードモジュール
共有ライブラリモジュール
runb - MW-BASIC/Basic09ランタイムライブラリ
cio - Microware C Compiler 用入出力ライブラリ・サブルーチン・モジュール
csl - C language shared library
psl - presentation support library
システム・モジュール
cache - メモリ・キャッシュの効率的使用
ssm - System Security Module - MMU等を利用したメモリ保護機能
fpu - 浮動小数点コプロセッサの利用
vector - ハードウェア割り込み管理 
ティッカ・ドライバ - 定周期割り込み
RTCドライバ - 時刻の取得・設定
align - アライメントエラーに相当するメモリアクセスの支援

1.4. ダイナミックローディング
-----------------

カーネル以外の多くのモジュールが、システムの稼動中、任意の時点で追加、削除、更新が可能である。例えばデバイスドライバは任意の時点でメモリにリンク/アンリンクが可能であるため、デバッグ中もカーネルを壊さない限りシステムの再起動を必ずしも必要としない。

またモジュールをメモリにリンクするときにリンクカウントがインクリメントされるほか、モジュールを利用する度にリンクカウントがインクリメントされ、プロセスでモジュールの利用が終わるとリンクカウントがデクリメントされる仕組みがある。よってモジュールを利用しているプロセスがある間は、故意にアンリンクしようとしてもアンリンクされない。またリンクカウントがゼロになるとモジュールがメモリからアンリンクされる。

1.5. メモリ保護
----------

ハードウェアがMMUを持つ場合、メモリ保護機能が有効となる。システム空間とユーザ空間が分離され、また、各ユーザプロセス間も分離される。デバッグ中のユーザープロセスが他のプロセスやシステムを破壊することがない。OS-9/6809では特にLevel2と呼び、最大2MBのメモリを管理できる。

1.6. マルチユーザ
-----------

組み込み用途だけではなく、一般のコンピュータとして使用可能であり、UNIXと同様のマルチユーザの機能を備えたTSSの環境がある。ユーザ、グループ別にファイルやプロセスのアクセス権がある。なお、PC用のOSとして見た場合、8bitや16bit時代の一般的なユーザには、マルチタスク・マルチユーザのメリットが理解されなかった。

1.7. UNIXライク
------------

以上のようなRTOSの上で、UNIXライクな開発環境が構築されている。簡易なものであるがシェルも実装されており、ファイルシステムも階層構造を始めとしてUNIXに近い機能を実現している。

1.8. OS-9LAN
------------

OS-9には独自のLANとしてOS-9LANがある。LAN上の他のコンピュータの資源に対して、透過的にアクセスが可能な優れたものである。フルパスリストの先頭にコンピュータ名を追加するだけで、そのコンピュータのファイルやデバイスにアクセス可能で、例えばシェルからリダイレクトして、LAN上の他のコンピュータに接続されたプリンタに出力可能である。

なお、開発は当初星光電子により、OS-9/6809と富士通FM-11+ARCNetという構成でおこなわれた。

X68000用のOS-9LANは、マイクロボードより販売されていた。

1.9. ウィンドウシステム
--------------

OS-9/680x0には以下のようなウィンドウシステムが発売された。

X Window System:マイクロウェアが移植。Motifも付属。
Personal-Window:マイクロウェアジャパンが、X68000のために開発。
G-Windows: ドイツのGESPACが開発。
XiBase9: ドイツのXiSysが開発。

1.10. 欠点
--------

UNIXと異なり、仮想記憶機能が存在しないため、搭載された主記憶容量以上の記憶空間が使えない。
製品として販売した場合、極めて容易に分析、解析が可能である。また、実際にメモリ上にあるモジュールを保存することでコピーが可能であるため、いわゆるコピープロテクトが原理的に不可能である。
ユーザプログラムがハードウェア資源に直接アクセスできるCP/MやMS-DOSなどのOSに慣れたユーザは、アドレス空間をユーザとスーパバイザに分離したOSにおいて、ハードウェアへのアクセスにドライバが必要なことに不満を述べることが多い。
プロセス優先順位の逆転現象が存在し、マイクロウェア社が顧客向けに発行する機関紙 "Microware Pipelines" においては、優先したいプロセスのプライオリティを極端に低く設定する事例が頻繁に紹介されていた。
2013年現在、OS-9単独では対称型マルチプロセッシングをサポートしていない。

2. OS-9/680x0
-------------

OS-9は、モトローラの16ビットCPU68000に移植された。以後、6809用はOS-9/6809、68000用はOS-9/68000と呼称されるようになった。その後、68000が68020、68030とシリーズ展開されるようになると、それらに最適化したOS-9/68020、OS-9/68030が開発された。

これらOS-9/680x0は、産業用RTOSとして高いシェアを占めていた。これは、20世紀末には、産業用システムのMPU  に680x0が広く採用されていたこと、ハードウェア資源を効率的に扱う多くの特徴を持っていること、OS-9自体の移植が容易なことから必然的にそうなったのである。

例えば、ドライバ・モジュールのサンプルコードが多数提供されたことで、個別のハードウェアに対するドライバ・モジュールの移植が容易であり、ドライバモジュールの中であれば割り込み処理を通常のサブルーチンまたは関数として記述できるなど制約が少なく、安全で柔軟なシステム設計ができた。

また、アプリケーションをセルフで開発できることも評価されていた。ある程度規模の大きな産業用システムではVMEバスベースのシステムが採用されることが多かったが、これら自体によるセルフ開発が可能である。OS-9は数少ない、ターゲット上でセルフ開発が出来るRTOSであった。

様々な機能の追加による肥大化もあって、多機能版カーネルと小型版カーネルの2種類に分化した。

Ver.3からはセマフォ、マルチスレッド機能も追加され、必要な場合はPOSIXスレッドを使用することも可能となった。

3. OS-9000
----------

その後、OS-9は全体がC言語で書き直され、OS-9000としてIntel 80386、MIPS、SPARC、PowerPC、ARM、日立 SH-3、SH-4、SH-5等に移植された。アメリカではCで書き直されたOS-9000/68000も発売されたが、市場からは全く相手にされず短期間で販売を終了した。

現在商標は統一され、OS-9のみとなっている。6809用、680x0用OS-9の実体は従来のアセンブリ言語で書かれたOS-9、その他CPU用OS-9の実体はOS-9000である。

4. OS-9の稼動する汎用のコンピュータ
---------------------

日本では、OS-9/6809が富士通FM-7/8シリーズ、FM-11シリーズに移植され富士通から発売、日立製作所のベーシックマスターレベル3シリーズやMB-S1にも移植された。ベーシックマスターレベル3シリーズのうちMB-6890用OS-9 Level 1 Version 1.0は日立化成商事から発売され、画面分割型マルチウィンドウ採用、カナ文字サポート、コンカレント"BASIC09"が含まれていたASCII 1983年4月号 。また、シャープのX68000シリーズには、独自のウインドウシステム  を装備したOS-9/680x0 Ver.2.4が、OS-9/X68000としてシャープから販売された。その後継製品として、マイクロウェアから、X68030用のOS-9/X68030 Ver.2.4.3も発売された。

他に、フォークスから、FM-11やFM-16β、PC-9801に68000ボードを搭載してOS-9/68000を稼動させる製品、FM-Rに68020ボードを搭載してOS-9/68020を稼動させる製品が発売されていた。

初期のOS-9/68000の開発環境として著名なものが、星光電子を始めとした国内のデベロッパーが広く使用していたマイクロボードの製品である。同社のVMEバスボードを筐体に収めてセット販売したもので、いわば純正品である。同社からはVMEバスの各種カードが産業用として発売されたが、それ以外にも、PC/ATマザーボードと同規格の基板に68030を載せたPCスタイルの製品も発売された。

また、マイクロボード以外にも多くのメーカーのVMEバス、マルチバス、PCI/CompactPCIバスのボードがOS-9に対応していた。例えば、モトローラ、アドバネット、アバールデータ、オムロン、シャープ、橘テクトロン、タンバック、電産、東京エレクトロン デバイス、フォークス、フォース・コンピュータ、マイクロクラフトなどの製品である。

米国では、Apple II用の6809カード  がOS-9/6809を標準OSとしていた他、タンディカラーコンピュータ 、MM/1等、また、PC/ATに68020カードを搭載してOS-9/68020を稼動させる製品が発売されていた。また、Macintosh用OS-9/68000も発売されていた。これは、すべてがスーパバイザモードで動作する当時のMacintosh OSをうまく利用し、TOOLBOXを利用可能としていた。

5. OS-9が採用された代表的な機器
-------------------

モトローラのPDA。
デジタルサンプリング・シンセサイザー - フェアライトCMI 。
BMW・750iシリーズ純正カーナビゲーションシステム。
マスプロ電工 カーナビゲーションシステム。
ソニーとフィリップスが提唱したCD-i。
日立製作所の銀行用ATM。
レーザープリンター用エンジン。
TCP/IP用ルーター。
情報端末機器 - サクサホールディングスSAXA  DT-300 。
携帯電話。
POS端末。
パチンコ台および玉の供給システム。
ボウリングピン制御。
かつてメダルゲーム機を製造するシグマが開発したビデオスロット、ビデオポーカー、メカニカルスロットのゲーム基板。
スペースシャトルメインエンジン

6. 評価と現状
--------

もともとオペレーティングシステムではなくマルチメディア関連のミドルウェアが目当てでマイクロウェアを2001年に買収したRadisysのウェブサイトでOS-9は[Microware OS-9]として紹介され、ライセンスの販売は古くからOS-9を手がけてきたシステムビルダ3社による代理販売となっていたが、Radisysは最終的に2013年3月にOS-9とMicrowareに関わるブランドを含む全権利をこの3社による共同事業体  に譲渡した。 誕生から30余年を経たOS-9は2015年現在も開発が続けられており、OS-9 v6.0のリリースが予定されている。

7. 関連書籍
-------

7.1. 洋書
-------

7.2. 和書
-------

8. 外部リンク
--------

[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]

9. 脚注
-----