OS-9

OS-9（オーエスナイン）は、Microwareによってモトローラの8ビットMPUである6809のために開発されたリアルタイムオペレーティングシステム（以下、RTOS）である。
当時、マイクロウェアシステムはモトローラの依頼でプログラミング言語BASIC09を共同開発しており、この言語の開発・実行環境としてOS-9が作られた。
その後、OS-9は680x0に移植され、さらにx86、PowerPC、SH、ARMなど、幅広いCPUに対応した。 
2001年にラディシス社によってマイクロウェアシステムが買収され、一部門となり、2013年に販売会社グループに売却されてマイクロウェアLP社として独立した。

**特徴**

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

**マルチプロセス**
多くの組み込み用RTOSでは、全ての実行コードを単一のロードイメージにリンクしてメモリに展開・実行するので、並行実行されるタスクはスレッドモデルであることが一般的だが、OS-9では各タスクは独立したプログラムイメージ（プログラムテキストは複数タスクで共有可）を実行するプロセスモデルである。
プロセスモデルでは各タスクは論理的に独立しているのでタスク間のデータの共有や通信にコストがかかりがちだが、OS-9では「データモジュール」と呼ばれる一種の共有メモリ機能で高速なプロセス間通信を提供している。ただし、タスク間通信に不可欠なセマフォが提供されたのはかなり後のことである。また後のバージョンではPOSIXに準拠したプロセス内の複数スレッドをサポートする。
OS-9/6809レベル2ではMMUを使った仮想アドレス空間をサポートしたが、その他のバージョンでは単一のアドレス空間しか持たないフラットメモリモデルである。OS-9/6809レベル2及びOS-9/68030以降のバージョンではハードウェアによるプロセス間のメモリ保護機能がある。
OS-9での新プロセス作成はUNIX流の現在のプロセスのコピーではなく、（仮想アドレス空間を持つOS-9/6809レベル2でさえ）実行プログラムを指定するWindowsの「spawn」に近いモデルである。これは、ベース（セグメント）レジスタを持たないCPUアーキテクチャでフラットメモリモデルを採用する限りある程度必然であり、UNIXでも多くの場合せっかくコピーした子プロセスの元の実行イメージは捨てられてexecで新しい実行イメージに置き換えられることを考えれば効率的でもある（マイクロウェアはこれを逆手にとって「OS-9のforkはUNIXよりX倍速い」と喧伝していた）。

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

**OS-9のモジュールの種類**
カーネルモジュール
**kernel（6809版を除くカーネル本体）
**OS9p1 拡張モジュール（6809版ではカーネルのうち起動に最小限必要部分）
**OS9p2（6809版ではカーネルのうちOS9p1に含まれない残り部分）
**OS9p3（漢字変換処理等の拡張で日本語版のみ）
*ioman - I/Oシステムの総合管理（後に68000版でkernelに吸収されモジュールとしては存在しなくなったが、OS-9000では再び独立したモジュールとしてkernelから分離された）
*ファイルマネージャモジュール
**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（PC-DOSファイルの操作）
**NVFM - non-volatile File Manager（CD-iのデータ保存のための、ディレクトリを持たず、バッファリングしないファイルシステム）
**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（OS-9/ISP - Internet Support Package に含まれている）
**IFMAN - 通信インターフェース・ファイル・マネージャ
**PKMAN - 仮想キーボード・ファイル・マネージャ
**SPF - Stacked Protocol File Manager（LANComm/SoftStax ネットワーク・サブシステム）
*デバイスドライバモジュール
**（例）sc6821 - MC6821用汎用コンソールドライバ
*デバイスディスクリプタモシュール
**（例）t0 - デバイスのアドレス、設定値などを保持
*プログラムモジュール
**（例）shell、標準ユーティリティプログラム
**cc - Microware C Compiler当時、マイクロウェアはMicroware C Compiler をANSI準拠と称していた。実際にパーサーも改良され、ANSI準拠のライブラリも準備されたが、最期までプロトタイプが実装されず、実質はK&R準拠のCコンパイラであった。 / ucc - Ultra C CompilerUltra C Compiler は ANSI X3.159-1989準拠のコンパイラである。
*データモジュール
**（例）init - システム初期化定数などを保持
*BASIC中間コードモジュール
*共有ライブラリモジュール（サブルーチンモジュール）
**runb - MW-BASIC/Basic09ランタイムライブラリ
**cio - Microware C Compiler 用入出力ライブラリ・サブルーチン・モジュール
**csl - C language shared libraryANSI C準拠ライブラリモジュール。Micoware Ultra Cでコンパイルされたモジュールを実行するのに必要となる。
**psl - presentation support library（CD-i用）
*システム・モジュール
**cache - メモリ・キャッシュの効率的使用
**ssm - System Security Module - MMU等を利用したメモリ保護機能
**fpu - 浮動小数点コプロセッサの利用（または演算ライブラリ）
**vector - ハードウェア割り込み管理 (OS-9000)
**ティッカ・ドライバ - 定周期割り込み
**RTCドライバ - 時刻の取得・設定
**align - アライメントエラーに相当するメモリアクセスの支援

**ダイナミックローディング**
カーネル以外の多くのモジュールが、システムの稼動中、任意の時点で追加、削除、更新が可能である。例えばデバイスドライバは任意の時点でメモリにリンク（ロード）/アンリンク（アンロード）が可能であるため、デバッグ中もカーネルを壊さない限りシステムの再起動を必ずしも必要としない。
またモジュールをメモリにリンク（ロード）するときにリンクカウントがインクリメントされるほか、モジュールを利用（オープン）する度にリンクカウントがインクリメントされ、プロセスでモジュールの利用が終わるとリンクカウントがデクリメントされる仕組みがある。よってモジュールを利用しているプロセスがある間は、故意にアンリンクしようとしてもアンリンク（アンロード）されない。またリンクカウントがゼロになるとモジュールがメモリからアンリンク（アンロード）される。

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

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

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

**OS-9LAN**
OS-9には独自のLANとしてOS-9LANがある。LAN上の他のコンピュータの資源に対して、透過的にアクセスが可能な優れたものである。フルパスリストの先頭にコンピュータ名を追加するだけで、そのコンピュータのファイルやデバイスにアクセス可能で、例えばシェルからリダイレクトして、LAN上の他のコンピュータに接続されたプリンタに出力可能である。
なお、開発は当初星光電子により、OS-9/6809と富士通FM-11+ARCNetという構成でおこなわれた。
X68000用のOS-9LANは、マイクロボードより販売されていた。

**ウィンドウシステム**
OS-9/680x0には以下のようなウィンドウシステムが発売された。
*X Window System:マイクロウェアが移植。Motifも付属。
*Personal-Window:マイクロウェアジャパンが、X68000のために開発。
*G-Windows: ドイツのGESPAC（代理店：フォークス）が開発。
*XiBase9: ドイツのXiSysが開発。

**欠点**
UNIXと異なり、仮想記憶機能が存在しないため、搭載された主記憶容量以上の記憶空間が使えない（もっとも、仮想記憶を利用するとリアルタイム性が担保できなくなるため、RTOSとしての意義がなくなる）。
*製品として販売した場合、極めて容易に分析、解析が可能である。また、実際にメモリ上にあるモジュールを保存することでコピーが可能であるため、いわゆるコピープロテクトが原理的に不可能である。
*ユーザプログラムがハードウェア資源に直接アクセスできるCP/MやMS-DOSなどのOSに慣れたユーザは、アドレス空間をユーザとスーパバイザに分離したOSにおいて、ハードウェアへのアクセスにドライバが必要なことに不満を述べることが多い（アドレス空間を分離するか否かは、OS-9のレベルやバージョン、使用するハードウェアによる）。
*プロセス優先順位の逆転現象OS-9ではプロセスのプライオリティはタイムスライス事に加算されるエイジの初期値であり、スケジューラはエイジの値によって次にアクティブにするプロセスを決定する。CPU時間が割り当てられたプロセスのエイジは初期化されるが、優先度が高いプロセスは優先度の低いプロセスより大きなエイジ値が維持されやすいのでCPU時間が割り当てられる可能性が高い。優先度の低いプロセスもCPU時間が割り当てられない事でエイジ値が大きくなり、どこかの時点で優先度の高いプロセスのエイジ値を上回る事になる。この「優先度の低いプロセスにもいつかは必ずCPU時間が割り当てられる」事がOS-9のスケジューラの特徴であり、優先度が高いプロセスがレディ状態であってもより優先度が低いプロセスがアクティブになる事がある理由である(この点からOS-9はリアルタイムOSではないとする主張もある)。後にシステム変数によって優先度の低いプロセスのエイジ値の上限を設定できるようになり、ある程度の制御は出来るようになった。が存在し、マイクロウェア社が顧客向けに発行する機関紙 "Microware Pipelines" においては、優先したいプロセスのプライオリティを極端に低く設定する事例が頻繁に紹介されていた。
*2013年現在、OS-9単独では対称型マルチプロセッシングをサポートしていない。

**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 (CPU) に680x0が広く採用されていたこと、ハードウェア資源を効率的に扱う多くの特徴を持っていること、OS-9自体の移植（ポーティング）が容易なことから必然的にそうなったのである。
例えば、ドライバ・モジュールのサンプルコードが多数提供されたことで、個別のハードウェアに対するドライバ・モジュールの移植が容易であり、ドライバモジュールの中であれば割り込み処理を通常のサブルーチンまたは関数として記述できるなど制約が少なく、安全で柔軟なシステム設計ができた。
また、アプリケーションをセルフで開発できることも評価されていた。ある程度規模の大きな産業用システムではVMEバスベースのシステムが採用されることが多かったが、これら自体によるセルフ開発が可能である。OS-9は数少ない、ターゲット上でセルフ開発が出来るRTOSであった（ただし、登場時のUNIXと同程度のCUIを利用する必要があった。その後、クロス開発環境が一般的になるにつれ、CodeWarriorが採用された時期もあった。現在ではWindowsで動作するGUIのクロス開発環境 Microware Hawk もしくはEclipse によるクロス開発のみ）。
様々な機能の追加による肥大化もあって、多機能版カーネル（デバッグ機能つき）と小型版カーネル（アトミックカーネル）の2種類に分化した。
（68000版を除いて）Ver.3からはセマフォ、マルチスレッド機能も追加され、必要な場合はPOSIXスレッドを使用することも可能となった。

**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のみとなっているEfn2|OS-9 Ver.3よりOS-9の名でRISCプロセッサをサポート。。6809用、680x0用OS-9の実体は従来のアセンブリ言語で書かれたOS-9、その他CPU用OS-9の実体はOS-9000である。

**OS-9の稼動する汎用のコンピュータ**
日本では、OS-9/6809が富士通FM-7/8シリーズ、FM-11シリーズに移植され富士通から発売、日立製作所のベーシックマスターレベル3シリーズやMB-S1にも移植された（開発はどちらも星光電子）。ベーシックマスターレベル3シリーズのうちMB-6890用OS-9 Level 1 Version 1.0は日立化成商事から発売され、画面分割型マルチウィンドウ採用、カナ文字サポート、コンカレント"BASIC09"が含まれていたp=92。また、シャープのX68000シリーズには、独自のウインドウシステム (Personal Window) を装備した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バス(VXIバス)、マルチバス、PCI/CompactPCIバスのボードがOS-9に対応していた（いる）。例えば、モトローラ（代理店：丸文）、アドバネット、アバールデータ、オムロン、シャープ、橘テクトロン、タンバック、電産、東京エレクトロン デバイス、フォークス、フォース・コンピュータ（代理店：インターニックス）、マイクロクラフトなどの製品である。（五十音順）
米国では、Apple II用の6809カード (The Mill) がOS-9/6809を標準OSとしていた他、タンディカラーコンピュータ (CoCo)、MM/1等、また、PC/ATに68020カード（アルプス電気製）を搭載してOS-9/68020を稼動させる製品が発売されていた。また、Macintosh用OS-9/68000も発売されていた。これは、すべてがスーパバイザモードで動作する当時のMacintosh OSをうまく利用し、TOOLBOXを利用可能としていた。

**OS-9が採用された代表的な機器**
モトローラのPDA。
*デジタルサンプリング・シンセサイザー（電子楽器） - フェアライトCMI (Fairlight CMI)。
*BMW・750iシリーズ純正カーナビゲーションシステム。
*マスプロ電工 カーナビゲーションシステム。
*ソニーとフィリップスが提唱したCD-i（セットトップボックスの統一規格で、OS部分は CD-RTOS と呼ばれた）。
*日立製作所の銀行用ATM。
*レーザープリンター用エンジン。
*TCP/IP用ルーター。
*情報端末機器 - サクサホールディングスSAXA (TAMRA) DT-300 （OS-9/SH3, MAUI を搭載）。
*携帯電話。
*POS端末。
*パチンコ台および玉の供給システム。
*ボウリングピン制御。
*かつてメダルゲーム機を製造するシグマが開発したビデオスロット、ビデオポーカー、メカニカルスロットのゲーム基板（6809を2つ搭載）。
*スペースシャトルメインエンジン

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

**関連書籍**

**洋書**
ref=harv
*ref=harv
*ref=harv
*ref=harv
*ref=harv
*ref=harv
*ref=harv

**和書**
Cite book |和書 |author=有吉久 |authorlink= |coauthors= |year= |title=OS-9&6809活用プログラミング|series=トランジスタ技術別冊 ソフトマインド (2) |publisher=CQ出版 |location= |page= |id= |isbn= |oclc= |ref=harv
*Cite book |和書 |author=金井隆 |authorlink= |coauthors= |year=1984 |title=FM-7・8 OS-9 Level 1 解析マニュアル I |series= |publisher=秀和システムトレーディング |location= |page= |id= |isbn=978-4-87966-033-6 |oclc= |ref=harv
*ref=harv
*ref=harv
*Cite book |和書 |author=千葉憲昭 |authorlink=千葉憲昭 |coauthors= |year=1988 |title=68000システムの製作全科（上） ―CPUの詳細からOS-9の移植開始まで― |series=HARDWARE BOOKS 6 |publisher= 技術評論社 |location= |page= |id= |isbn=978-4-87408-972-9 |oclc=674063566 |ref=harv
*ref=harv
*ref=harv
*ref=harv
*ref=harv
*Cite book |和書 |author=高澤嘉光 |authorlink= |coauthors= |year=1989 |title=OS-9/68000 |series= |publisher=共立出版 |location= |page= |id= |isbn=978-4-320-02401-4 |oclc=47416254 |ref=harv
*Cite book |和書 |author=中島浩司 |authorlink= |coauthors= |year=1991 |title=OS-9/68000プログラマーズハンドブック―第1巻 オペレーション編 |series= |publisher=ケルビンシステムズ |location= |page= |id= |isbn= |oclc= |ref=harv
*ref=harv
*ref=harv

**脚注**

**注釈**

**出典**

**外部リンク**
 マイクロウェアオフィシャルサイト- 株式会社ルネサステクノロジ - リアルタイムOS- 株式会社エーアイコーポレーション - 「OS-9向けに組込み用電源断対応ファイルシステム『RTFiles』の供給を開始」- nikkeibp.jp - 「日通工、電話やLANに接続できるタッチパネル式情報端末『Addシリーズ』を発売」- NECインフロンティア株式会社 - テレデータターミナル Addシリーズ- Sun Java Platform Resellers Deliver Java Technology for Embedded Devices - Microware- Real-Time Services Inc. - OS-9 World Wide Archive- ARK Systems USA(旧ページ)- Embedded業界紳士録 - 星 光行- 富士通株式会社 - 富士通ミュージアム - FM-11AD2+- 情報処理学会 - コンピュータ博物館 - 【富士通】FM-11- 株式会社フォークス- サクサ株式会社 - ディスプレイターミナル DT300