Comments
Description
Transcript
FM-80S-9 - 香川共同リポジトリ
OLIVE 香川大学学術情報リポジトリ FM-80S-9の改造 中村邦彦 I まえがき 近年,企業へのパーソナルコンピ a ーター(以下ノ 4ソコンと略す〉の導入が, 急速に進み,ある調査によると,上場企業の 7割強が,来上場企業の 4割強が, すでにパソコンを導入しており, さらに今後の導入意欲も極めて高いとし、う。 昨年(昭和 5 7年〕までは, ビジネス用パソコンといっても,そのほとんどが 8 ピット CPUを持つ機種であり,またどちらかと言えばホビー向きに設計され たような機種が多く,能力の上でも,操作性の上でも不十分なものが多かった 8年〉に入ってからは,国内大手メーカーの が,今年(昭和 5 相次いで発表され, 1 6ビット機種が ビジネスパソコンは新しい段階に入 ったようである。とこ F ろが,これらパソコンのハードウェア上の著しい性能の向上に比べて,パソコ Sと略す〉の方は,全 ン操作の要ともいえるオベレーティングシステム(以下 O 体的に貧弱なものが多く,特に 8ビット機では, B A S I C言語プロセ γ サーにい Sらしいコマンドを組込んだだけのものが多いが,これなどは OS くつかの O とは雷い難いものである。フロッピーディスクを持つシステムのための O Sと P/Mが機種の違いを越えて最も普及してはいるが、日本のビジネス分 しては, C 野ではあまり多くなし、。 1 6ビット機になると、さすがに B A S I Cだけの OSとい P / M 8 6または MS-DOSを第 1の OSとして うのは少なくなってきており、 C Sはいずれもシンク守ルユーザー,シングノレタスクの いるものが多し、。これらの O 6ピット機でも少し大きなシステム(これをマイクロ システムであるが,同じ 1 Sとして UNIXを採用 メインフレームと呼んで区別することもある〉では, O OLIVE 香川大学学術情報リポジトリ 5 8 9 -119ー FM-80S-9の改造 しているものが多し、。 UNIXは,ベル研究所が作成した,マルチユーザー,マル チプログラミングの OSで,これが比較的小型であるにもかかわらず,操作性の よいこと, OSの大部分が C言語で記述されていて移植性が良いことから,今 後の高性能パソコンの標準的な OSとして,広く普及していくものと予想され ている。 それでは今後のパソコンの OSとしては, UNIXのみを考えておればよいの かというと,もちろんそうはならないであろう。その理由としては,まず,す でに 8ビット機がかなり普及してしまっており,今後もしばらくは引き続いて 使用されると予想されること,もうひとつは,新しいポータフをル型のパソコン (ハンドヘルドコンピューターともいわれる〉が出現したことによって,新た な需要が喚起され,これが普及していくと予想されることである。それではこ のような小型のコンピュータにはどのような OSが必要なのであろうか。まず 第 Hこ考えられることは, OS自体が小型であることである。第 2はマルチプロ グラミングの機能があることである。これは現在でもコンピコーターの通信機 能が重要視されるようになっており,今後ますますその必要性が高まるであろ うと考えられるからである。他のシステムと確実に通信しながら,なお独自の 処理を続けようとすれば,マルチユーザーの機能は不必要であるとしても,マ ルチプログラミングの機能は必要になる。その他操作性の良いこと,信頼性の 高いことはいうまでもなく大切なことである。 こうした観点から, 8ビットマイクロプロセッサ -6809のための OS,OS-9 は注目すべき存在である。 OS-9というのは,モトローラ社とマイクロウェア社 が , 1 9 7 8年Lから 1 9 8 0年にかけて開発した 6 8 0 9のための OSで , UNIXをモデ ルとして作成された,マルチユーザー,マノレチプログラミングの OSである。日 本では 1 9 8 2年に星光電子が,これを富士通のマイクロ 8 (以下 FM8と略す〉 司 や , 目立のベーシックマスターレベル 3等,数機種に移植して発売した。これ を用いることにより,主記憶 64KBとフロッピーディスクのあるパソコンにお いて,本格的な TSSが可能になるばかりでなく, UNIXによく似たユーザーイ ンターフェースが実現されるというのであるから,注目されてよいわけである。 OLIVE 香川大学学術情報リポジトリ 第5 6巻 第 2号 -120ー 5 9 0 本稿では,将来小型のビジネスパソコンのための良い OSを開発するための 第一歩として,この OS-9の特徴と構造を明らかにし,さらにその操作を良くす るために行ったいくつかの改造について報告する。 I I OS-9の特徴 21 OS-9の概要 OS-9は マ イ ク ロ プ ロ セ ッ サ 6 8 0 9の た め の 高 水 準 プ ロ グ ラ ミ ン グ 言 語 BASIC09を開発する過程で,それをサポートする OSとしてつくられたもので ある。 OS-9は,いわゆるパソコンレベルのシステムを想定して設計されており, 補助記憶装置としては, フロッピーディスク装置,または小型のハードディス ク装置をサポートする。主記憶のアドレス空間は, レベノレ lでは 64KB, レベ ル 2では 1MBとなっている。 OS-9の特徴をまとめると次のようになる。 1 6 8 0 9を CPUとする小規模な計算機システムのための OSである。 2 マルチユーザー,マルチプログラミングの OSである。 3 . . UNIXによくイ以たユーザーインターフェースをもっている。 4 ソフトウョアの ROM化が可能である。 5 階層的なファイルシステムをもっている。 6 装置とは独立な同格化された 1 / 0システムをもっている。 8 0 9のための UNIXライクな 以上の諸特徴は、 4を除けば簡単に, OS-9は 6 OSであるということができょう。 OS-9はもともと UNIXをモデルとしとデザインされているので,両者間に は共通点が多いが, UNIXは小型の OSであるとはいっても,元来は PDPllの ような,比較的大きなミニコンのための OSであるから,それをそのままパソコ ンレベルのマシーンに持込むことは無理である。したがって, UNIXのもつ多 彩な機能の多くは削除されてしまってはいるが, OSの設計思想、上共通点が多 いということである。そこで次に OS-9とUNIXとの主な相違点をまとめてみる。 1 プログラムサイズを小さくし,実行速度を上げるために, Cではなくア センブリ一言語で書かれている。 OLIVE 香川大学学術情報リポジトリ FM-80S-9の改造 5 9 1 -121- 2 ROMと RAMが混在しているシステムを想定している。 3 そジュール聞のダイナミックなリンケージを組込んだ¥¥メモリーモ れ ジューノレ"とし、う概念を導入している。 4 複数のファイルマネージャーをサポートすることによって,クラスの異 なった装置とファイノレシステムとのインターフェースが可能となっている。 5 FORKとEXECUTEシステムコールは, UNIXに比べてより速く,メモ リーをより効率的に使用するようになっている。 6 - s実行が開始されたプログラムは,スワップイン,スワップアウトさ れることはなし、。 現在,高級パソコンの OSとして, UNIXがもてはやされているのには,い くつかの理由が考えられるが,ユーザーインターフェースからみたその特徴は, 大旨次の 4点であろう。 1 階層化されたファイルシステム 2 . . 1/0のリダイレクト 3 . p i p e 4 . s h e l l OS-9において,これらがどのように実現されているか,以下順にみていくこ とにする。 2 . 2 階層化されたファイルシステム OS-9のファイルシステムは, UNIXとほぼ同様の階層的なディレクトリー 構造をもっている。ただし UNIXではその階層の頂点となるノレートディレクト リーは、 OS-9では,補助記憶装置 1台につきひとつずつ割付けられており,こ れらを他の入出力装置と一緒にして,デバイスデレグトリーとして統一的に管 理している。また UNIXでは,ひとつのファイノレが複数のディレグトリーを親 とすることができるが, OS-9では親はただひとつだけとなっている。ファイ ノレを階層化すると,異なるユーザー聞のファイルが区別しやすくなり,また, c l ) デ ィ ス F ファイノレ中に含まれる情報には,リンクカウントが含まれているが,今のところ多 重リンクはサポートされていない。 OLIVE 香川大学学術情報リポジトリ -122- 第5 6 巻 第 2号 5 9 2 同一ユーザーにおいても仕事別にファイルを分離しておくことが可能となって 便利である。 このようなトリー状のファイルの中のひとつを指定する場合に,ルートから そこに到るまでの道順(パスリスト〉をすべて書いていたのでは長くなってし まうので,ワーキングディレグトリーというものが用意されている。 UN1Xで は,これ以外にパスリストを表す特別な変数として,郵便を受取るファイルを 表 す $m a i l,ホームディレクトリーを表す$home,実行させるコマンド名が指 a t hがあるが, OS-9 定されたとき、それを捜すパスリストとその順序を表す$p にはない。このうち$p a t hに代るものとして, OS-9では実行ディレグトリー というものがあって,コマンド名が指定されると,その中を捜すようになって るが,捜すのはそこー箇所だけなので不便である。 BAS1C組込み型の OSゃ CP/Mのファイルシステムは階層化されていない。ただ CP/Mのファイノレに 5のユーザーコードが設定可能になっており ( 0はシステムユー は Oから 1 ザー),これでファイノレをグループに分けたり,持主を識別したりできるが,操 作中に一旦他のユ}ザーコードを指定すると,その他のユーザーコードを持つ ファイノレは,それがシステムのコマンドファイルであっても使用できなくなる ので不便である。 最近では, UN1Xに習って階層型のファイルシステムをもつものが増加して おり, MS-DOSパージョン 20では階層構造をもっファイルシステムが採用 された。 23 1 / 0のリダイレクト 1 / 0のリダイレクトというのは,文字どおりプログラムの入出力先を指定し なおすことで, この種の機能そのものは特に目新しいというわけではないが, UN1X(OS-9もそうである〉では,これを非常に簡単に行えるようにしたこと ,UN1Xには に特徴がある。 OS-9 0, 1, 2と 3つの標準的な入出力パス (UNIXではfi1ed e s c r i p t o r ) というものがあって o が標準入力 1が標準 出力, 2が標準エラー出力と決められている。 UN1Xではこれらの標準入出力 に対して豊富なリダイレクト指示子があって,入出力先等を簡単に変更できる OLIVE 香川大学学術情報リポジトリ FM-80S-9の改造 5 9 3 -123- のであるが, OS-9では次の 3つだけとなっている。 < 標準入力のリダイレクト > 標準出力のリダイレクト >> 標準エラー出力のリダイレクト NIXにおいては">>"の指示子は,標準出力を指定ファイルに追 ただし U 加する, という意味になっている。指定先は,ディスクファイルであろうが, 1 / 0装置であろうが全く同様の形式で記述できる。 BASIC中心のシステムでは,このような機能は全くない。 CP/Mでは, CRT ターミナル,プリンター,紙テープリーダー/パンチャーといった入出力聞であ れば相互に切換えられるが,ディスクファイルの入出力とは別系統になってい るのでリ夕、、イレグトできなし、。パソコンクラスの OSでリダ、イレクトで、きるも のとしては,例えばサイログ社の MCZのOS,RIOは入出力装置,ファイル間 でも自由に切換えが可能である。 24 イプ ノ4 あるプログラムの標準出力を別のプログラムの標準入力に接続する機能で UNIXではれ│りを使って れ ! "( prog1!prog2 のように記述する。従来のシステムでは(かなり大型のシステムでも),前のプ ログラムの出力を-1:.1.外部へ一時ファイルとして書出し,そのプログラムの実 行が終了した後に初めて次のプログラムが実行されて,このファイルを読出す というのが普通であった。 UNIXでは,この前後のプログラムが同時に実行さ れ,データーの授受は一時ファイノレを介さずに主記憶上守で、行ってしまうわけで ある。これによって UNIXシステムのユーティリティプログラムは,標準入力 からデーターを受取り,何か加工して標準出力に出すという単機能のプログラ ム(これをフィノレターと呼んでいる〉を数多く取揃えておけばよいことになっ た。ユーザーは,必要なフィルターを選んで、パイプで接続するだけで,多様な 処理が効率良く行なえるようになった。さらにユーザー自身がユーティリティ プログラムを作る必要がある場合においても,これを単機能のフィルターの集 OLIVE 香川大学学術情報リポジトリ -124- 第5 6 巻 第 2号 5 9 4 まりとして作成すれば良いので,プログラム作りが簡単になり,組合せ方によっ ては別の目的でも利用する機会が期待できるなどのメリットもある。 S 9で使えるというので購入時は大いに期待していた このパイプ機能が O で、はリリースされていなし、。 が,残念ながら,今までのところ,レベノレ l O S 9で は,マルチプログラミングが可能であり,プロセス開通信の手段が用意されて いるので,パイプをインプリメントすることは原理的にはそう困難なことでは ないので,自作しょうかとも考えたが,星光電子によれば,まもなくリリース するということなので,それを待つことにした。 25 シェル シェル ( s h e ll)というのは U NIXのコマンドインタプリンターのことで, OS 9でも同じ名前を付けているが,その中味はかなり異なっている。 UNIXシス s h e l l~.こ対するコマンドの記述の仕易さに負 うところが大であるが,実はこの s h e l lというのは,システム上はユーザープロ h e l lを作成すると グラムとして扱われている。従ってユ}ザー自身が新しい s テムの使い易さというのは,この いうことが原理的には簡単にできるわけで,パークレー版またはその流れを汲 NIXには,標準 s h e l lの他に,これを拡張した むU c s h e l lというもうひとつの コマンドインタプリンターが用意されている。ユーザーは必要に応じて(ある いは好みに従って〉どちらでも使用することができる。 O S 9の s h e l lにはどのような機能があるか,簡単にみてみる。第 1表に O S 9s h e l lのコマンド一覧表を掲げる。 まず内蔵コマンドで気の付く点は, c h dと c h xで,これは先に述べたワーキ a t hの扱いが変ったことによる。次の e xは,本家 ングディレクトリー及び$p では e xというエディタを呼ぶことになるが, O S 9では e x e cシステムコーノレ に対応するコマンドで,指定したモジュー/レを起動すると s h e l l自身の領域が 解放される。ただし、 s h e l lが常駐プログラムであるようなシステムでは,プロ さて グラム部分は解放されず,データ領域のみが解放される。特殊文字のところで UNIXでは任意のマッチングキャラクターの印であった電*'が,単なる注釈 記号になってしまっているのが残念である。 γは c s h e l lにおいては注釈記号で は , OLIVE 香川大学学術情報リポジトリ FM-80S-9の改造 5 9 5 -125- 第 l表 OS-9 SHELLの内蔵コマンド c h d chx 実行ディレクトリーの変更 ワーキングディレグトリーの変更 e x e x e cシステムコーノレによる実行 w 他のプロセスが終了するまで W aitする * 注釈記号 プロセスをアボートさせる Ki 1 I s e t p r x プロセスの優先順位を変更する エラーが起きたら SHELLをアボートさせる -x エラーが起きても SHELLをアボートさせない p プロンプトを表示させる -p プロンプトを表示させない t SHELLの入力行をエコーバッグする SHELLの入力行をエコーパックしない -t コマンド セパレークー コマンドを連続的に実行させる & コマンドを並行して実行させる パイプで連結する > <>>t コマンド モテ、イファイヤー 標準入力をリダイレクトする 標準出力をリダイレクトする 標準エラー出力をりダイレクトする プログラムのメモリーサイズを変更する その他 〉 あるが, コマンドのグノレーピングをする O S 9では実行時の作業領域の大きさを指定する記号となっている。こ れはメモリーの小さなマルチプログラミングシステムとしでは必要である。 s h e l lの便利な機能として s h e l lp r o c e d u r eとし、うものがあるが, O S 9の s h e l l には引数の代入機能がない。このことは O S 9の使い勝手を大いに低下させて いる。全体的には,他の多くの小規模な OSに比べて, UNIXのもつ機能をこ こまで組込んでいることは評価してよい。 OLIVE 香川大学学術情報リポジトリ 第5 6 巻 第 2号 -126- 5 9 6 I I I OS-9の構造 31 核 OS-9の核はカーネルと呼ばれ,システム管理,資源管理,サービスリクエス ト(システムコール〉の処理を行う。カーネルは,標準システムでは 2KBの ROM 2個 で 供 給 さ れ る 。 内 容 は 4つのモジュール (OS9, OS9p2, Boot, I n i t )と 第 2表の l OS-9SERV1CEREQUESTSUMMARY USERMODEFUNCT10NREQUEST CODE MNEMON1C FUNCT10N 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 。 。 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 OA OB OC OD OE OF 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 LOAD UNLK FORK WAIT CHAN EXIT MEM SEND 1CPT SLEP ID SSW1 PERR PNAM CNAM SB1T ABIT DB1T T1ME STIM CRC 1 L i n kt om e m o f r r y omodule Loadmodulef r o mm a s s s t o r a g e U n l i n kmodule S t a r tnewmodule 口 、 S S R T S N v e 担 u e o 1 a t s t u r t p u 1 m d z S t n g n 1 I g m s u f g I 1 p o t z d 伊 n p a n D r a l o t r o l p l m e 語 a o e t r l m z o g p Y I d g c 溺 t m n S o e 潟 a e I z s t z l c d p s o e I e r s D 河 o n s p c 色 t e t w s z s a m p o d u l e e t u r np r o c e s s S e tp s o r o f t c w e s a s I E p r i i o r i t y S e ts o f t w a r ei n t e r r u p tv e c t e r P r i n te r r o rm e s s a g e a r s ep a t h l i s tname C o m p c h a r etwonames S e a r ab i tm b a i t p b l l o c a t ei nab i tmap j )e al 1c o a t ei nab i tmap R e t u r nc u r r e n tt i m e S e tc u r r e n tt i m e G e n e r a t eCRC e : SYSTEMMODEPR1V1LEGEDFUNCT10NREQUESTS 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 2 8 2 9 2A 2B 2C 2D 2E 2F 3 0 3 1 3 2 3 3 S R Q T R M M t 回 e t t e 出 e r m 1 I a / R c z m t Q o y l i e a v q m p n e 聞o o ぽ m l r u l i y o e n c g z z e e d 舗 t q a m u b q e z e u t eu e S S h h E y y a s s I I A O R P Q Q R U C NPRC VMOD F 6 4 A64 R64 10DL S t a r tn e x tp o r d o 1 1 c 1 e e s s V a l i d a t emo A I F R n i e l s n l t t o d u a c r l 6 a l n 4 t a e a b f a y 6 u t 4 n 6 e 4 c b m t y b i o t e y e n m t e m r o e m r e G y m e e m b s o t l I o o y I c y k bl b l o c k o c k r e q e s t D e l e t e1 / 0module OLIVE 香川大学学術情報リポジトリ FM-80S-9の改造 5 9 7 -'-127- 第 2表の 2 O S 9SERVICEREQUESTSUMMARY INPUT/OUTPUTSERVICEREQUESTS MNEMONIC F UNCTION CODE 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 1 0 3 F 8 0 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 8A 8 B 8 C 8 D 8 E 8 F 2 ATCH A t t a c hI I / / Od e v i c e e v i c e DTCH D e t a c hI/Od DUP D u p l i c a t ep a t h CREA C r e a t eanewf i l e tap w d a h o t r h e k c t l t n o o g r a y d nf e x i s t i n gt i l e O P E N O M p a e k n MDIR Makead i r e c t o r v i l e CDIR C h a n g ew o r k i n gd i r e c t o r y DLET D e l e t eaf i l e READ R e a dd a t a WRIT W r i t ed a t a RDLN R e a dl i n e WRLN W r i t el i n e GSTT G e td e v i c es t a t u s SSTT S e td e v i c es t a t u s CLOS C l o s eap a t h ブートストラップとなっている。 カーネルの主な機能を次に示す。 1 リスタート後のシステムの初期化 2 サービスリクエスト(システムコール〉の処理 れ 3“ メモリー管理 4 . . CPU管理 5 引 割込みの基本処理 ここには入出力機能が含まれていないが,カーネノレは入出力処理は行わず, その要求がくると直接入出力管理プログラム (IOMAN) に渡してしまう。 カーネノレの初期化手続きは特徴があって,まず RAM領域を確認したあと, ROMの中のモジュールを捜してモジュールディレクトリに登録する。そのた めに O S-9のモジュールは,メモリーモジコーノレと呼ばれる特別の形式をもっ S-9はメモリー ており,ヘッダーや CRCコードが含まれている。これにより, O 常駐部分を必要に応じて ROM 化できるようになっているわけである。極端な 場合は,機器組込み型で補助記憶装置のないシステムをも構成することが可能 である。 OLIVE 香川大学学術情報リポジトリ -128- 第5 6 巻 第 2号 5 9 8 サービスリクエスト(システムコール〉は,ユーザーモード用に 2 3,システ 2,入出力用に 1 6,合わせて 5 1が用意されている(第 2表〉。このうち ム用に 1 $で始まるものは入出力関係で,すべて ニーモニックが 1 F $で始まるものの中では, IOMANが担当する。 F$TIMEと F$STIMが CLOCKというモジュー ルで、処理される他は,すべてカーネノレの担当である。システムコーノレは, のS W I 2命令の後に機能を表す 1バイトをおくことによって実行される。 第 1図 TYPICALMEMORYMAP <-$FFFF OS-9ROMS( 4 K ) <- $F00O 1 / 0DEVICEADDRESS <- $E000 FILEMANAGERS, DEVICEDRIVERS, ETC (APPROXIMATELY 6 K ) <-ENDOFRAMMEMRY SHELL( l K ) OS-9DATA STRUCTURES (APPROXIMATELY l K ) FREEMEMORYFOR GENERALUSE <- $0400 OS-9DATA STRUCTURES ANDDIRECTPAGE <-$000OBEGINNIGOF RAMMEMORY 6 8 0 9 OLIVE 香川大学学術情報リポジトリ -129ー FM-80S-9の改造 5 9 9 システムコールの体系は大旨 UNIXに似ているが,名前が似ていても内容が 全然異なっているものもある。 UNIXにおいて新しいプロセスを起動させるシ o r kと execは , OS-9では F$FORK ,F$CHANにそれぞれ対 ステムコール, f 応する。ただし UNIXの f orkは,それを呼出したプロセスのイメージが複製さ れて起動するのに対し, OS-9では別のプログラムが起動される。 次に OS-9のメモリー管理をみてみる。第 l図 に 標 準 シ ス テ ム の メ モ リ ー マップを示す。カーネルはアドレスの最上位に配置され,その下に常駐プログ ラム,ユーザープログラムと続く。 O番地から lKBはシステム作業領域で,内 訳は次のようになっている。 内 番 地 ' * " 廿 OOOO-OOFF システムパラメータと割込み処理テーブル OlOO-OllF メモリのビットマッフ 0120-01FF サービスリクエスト処理ルーチンテーブル 0200-02FF モジュールディレクトリー 0300-03FF システムスタック領域 第 2図 6 4BYTEBLOCKMEMORYSTRUCTURE → BASEPAGE- ANY2 5 6BYTE MEMORYBLOCK PAGETABLE ( 6 4b y t e s ) × × × BLOCK1 ( 6 4b y t e s ) BLOCK2 ( 6 4b y t e s ) BLOCK3 ( 6 4b y t e s ) ANY2 5 6BYTE MEMORYBLOCK × × × × 」ー BLOCK4 ( 6 4b y t e s ) BLOCK5 ( 6 4b y t e s ) BLOCK6 ( 6 4b y t e s ) BLOCK7 ( 6 4b y t e s ) OLIVE 香川大学学術情報リポジトリ -130- 第5 6巻 第 2号 6 0 0 フリーメモリーの割付け,解放は 2 5 6ノミイト単位で行われ,ユーザープログ ラムのコード部分は上位番地から,データ領域は下位番地から割付けられる。 これ以外にシステムが必要とする各種のテーブノレ領域については 6 4バイト単 4ノミイトの領域の構造は,メモリー管理プ 位の割付けも可能にしている。この 6 5 6ノミイト(これをページという〉を確保し,その最 ログラムによって,まず 2 4ノミイトをページテーフソレとする。ページテープ、ルの第 nパイト自には, 初の 6 n番目 (n=Oから数えて〉のページの上位アドレスの 1バイトを置く(割付け されていないときは o)。各々のページは 64ノミイトのブロッグに分けられその ろではメモ 最初の lパイトにそのブロック番号を置く。このようにして OS リーの有効利用を図っている(第 2図) OS-9のプロセスは, F$FORK(fork)または F$CHAN(exec)システムコー ルにより生成される。プログラムはすべてアドレスインデペンデント(モトロー ラ社では p o s i t i o ni n d e p e n d e n tとし、っているので,以下 P Iと略す〉になってし、 なければならず,またデータ領域はコード部分と分離されていて,これはプロ セス生成時に割付けられる。データ領域の初期化機能はなし、。ひとつのプロセ スは,ある時点では次の 3つの状態のうちのどれかにある。 ACTIVE 実行可能な状態 WAITING 子プロセス(そのプロセスが生成したプロセス〉の終 了 , またはシグナノレを待っている状態 SLEEPING 一定時間,またはシグナノレを待っている状態 これらの状態に対応して,それぞれひとつのキューがある。アクティブなプ ロセスのスケジューリングは,擬似ラウンドロビン法によっている。各プロセ 4バイト スは,プロセスディスグリプタにより管理されているが,これは先の 6 ブロックが使用され,ブロック番号がそのままプロセス I Dとなる。 OS-9における外部割込みは,標準では 6 8 0 9の IRQによるものとし,その他 は使用していなし、。 IRQによる割込みが発生すると,まずハードウェア機構に よりカーネノレ内の割込みルーチンへ飛び,そこでシステム領域内のベクターに より CLOCKへ飛ぶ。 CLOCKでは,それがタイマー割込みかどうかを調べ, OLIVE 香川大学学術情報リポジトリ 6 0 1 FM-80S-9の改造 -131ー そうであればカーネル内のタイマー割込み処理へ,そうでなければ一般の IRQ ハンドラーへ渡す。一般の IRQサービスはすべて IRQポーリングテーフゃルに 登録されており,そこには,ポーリングアドレス,マスクパイト, フリップ。バ イト,処理ルーチンアドレス,作業領域アドレスが含まれている。割込み処理 の登録,削除はシステムコール F$IRQによって行われる。 32 メモリーモジュール O S 9においてメモリーにロードされるものは,メモリーモジュールという ひとつの形式に従わねばならない。メモリー中のメモリーモジコールは,モ ジューノレディレグトリーによって管理される。そこには,モジコーノレのアドレ スとそのモジューノレを使用しているプロセスの数が記録されている。そのモ ジュールを使用しているプロセスがなくなると,モジューノレディレクトリーか ら削除される。ただし ROM上のモジ z ールやメモリー常駐モジューノレは削除 されない。 モジューノレには,プログラム(ユーザープログラム),サブルーチン,マルチ モジュール,データ,システムモジューノレ, ファイノレマネージャー,デバイス ドライパー,デパイスデスクリプターの 8種類があって,その形式も少し異なっ ているものがあるが,実行可能なプログラムのメモリーモジュールを第 3図に 示す。 O S 9のプログラムは全部 P Iになるように作らなければならないことはす 8 0 9の命令セットをもってすれば比較的簡単なことであ でに述べたが,これは 6 る。またデーター領域は,そのプログラムが起動されるときに初めて割付けら 8 0 9の れ,その先頭番地がレジスタ U にセットされることになっているので, 6 一部のアドレッシングモードは使用が制限される。ただしデーター領域の最初 のページが夕、、イレクトページレジスターにセットされているのでダイレクト モードは利用可能である。またこのようなメモリーモジュールを取入れたこと により,実行時の動的なリンク機能が実現されたが,他方ひとつのプログラム をいくつかのモジュールに分けてコーディングして, まとめるとし、う通常の方法は不可能となった。 リンカーによって一本に OLIVE 香川大学学術情報リポジトリ -132- 第 56巻 第 2号 602 第 3図 EXECUTABLEMEMORYMODULEFORMAT R e l a t i v e A d d r e s s CheckRange Usage $ 0 0 S y n cB y t e s( $ 8 7 C D ) トー $ 0 1 $ 0 2 ModuleS i z e( b y t e s ) $ 0 3 $ 0 4 $ 0 5 一 ModulenameO f f s e t $ 0 6 Type Language $ 0 7 A t t r i b u t e s R e v i s i o n $ 0 8 HeaderP a r i t yCheck h e a d e r p a r i t y i module CRC $ 0 9 E x e c u t i o nO f f s e t $0A $0B PermanentS t o r a g eS i z e トーー $0C ( A d d ' lo p t i o n a lh e a d e r e x t e n t i o n sl o c a t e dh e r e $0D .. . . ModuleBody 。 b j e c tc o d e, c o n s t a n t s, e t c 一 一 CRCCheckV a l u e ここにみられる技法は,あまりにも 6 8 0 9のアーキテクチャーに深くかかわり すぎており, OSの実装技術としては,普遍性に乏しいといわねばならなし、。ま たメモリー内のプログラムは,このメモリーモジュールの名前によってのみ区 別される。二人以上のユーザーが別々のプログラムに同じ名前を付けた場合、 OLIVE 香川大学学術情報リポジトリ 6 0 3 -133ー FM-80S-9の改造 システムとしてはこれを区別できなし、。この点は真のマルチユーザーシステム としては大きな欠点である。 33 同格化された入出力システム OS-9はハードウェアに独立な同格化された入出力システムをもっている。 これがどのように実現されているかをみてみよう。 すべての入出力サービスリクエストは,カーネルから直接入出力管理プログ ラム (IOMAN)に渡される。 IOMANは入出力ノ fスのデータ構造を準備する 等,何がしかの処理をするが,多くの仕事はファイルマネージャー,デバイス ドライバー,デバイスデスクリプターが行う。入出力関係モジューノレの階層構 造を第 4図に示す。 第 4図 STRUCTUREOFHIERARCHICAL1/0SYSTEM 1 n p u t / O u t p u tManager 乱1 AN) ( 1 0 ー More >opt 恥1 0 r e ->opt h RBFD e v i c eD e s c r i p t o r s SCFD e v i c eD e s c r i p t o r s ー >More o p t IOMANは入出力のシステムコールの第 1レベルの処理をするとともに,デ バイステーフツレとパステーブルによって入出力システムを管理する。デバイス OLIVE 香川大学学術情報リポジトリ -134- 第5 6巻 第 2号 6 0 4 テープ、ノレは,ひとつのデバイスに対してひとつが用意される。その最大値はシ ステム生成時に決定されている。ひとつのエントリーはわずか 9バイト長で, その中に,そのデバイスに対するデバイスドライバー,デバイスデスグリプタ, ファイルマネージャーの各アドレスと,デバイスの状態及び使用しているプロ セスの数が含まれる。 パステーフ、、ルはノ 4スデスグリプターのテープ、/レで,パスデスクリプターは, プロセスがオープンするすべてのパスに対してひとつずつ用意される。これは 4ノミイトのメモリー構造をもち,そのプロック番号がシステムのパス番号 先の 6 になる。各プロセスはパス番号によって入出力を行うが,それは Oから 1 5まで のプロセスに固有のパス番号である。以上の関係を第 5図に示す。 第 5図 D E V I C ETABLEANDP ATHTABLE I 1 0 r e q u e s tt r o u g hi t hp a t h p r o c e s sd e s c r i p t o r l I III O J o123 p r o c e s s ' sl o c a lp a t hnumber j t hp a t hd e s c r i p t o r 日 d e v i c et a b l e f i l emanager d e v i c ed r i v e r d e v i c ed e s c r i p t o r JhJ p a t ht a b l e I 1 0 b u f f e r D OLIVE 香川大学学術情報リポジトリ 6 0 5 -135ー FM-80S-9の改造 ファイルマネージャーは今のところ二種類あって, ランダムブロッグファイ ルを扱う RBFMANと,文字単位の入出力を扱う SCFMANがある。今のとこ ろと言ったのは,あと 2つ,ノミイプ型とシーケンシヤ/レブロックファイル型が 予約されているからである。ファイルマネージャーは,各種装置の特殊性を超 えた共通の処理を行う。データのバッファリング,バッファメモリーの割付け, キャリッジリターンの後のラインフィードの処理等がこれに含まれる。 デバイスドライパーは,各入出力装置との聞で,低レベルの入出力を実行す るサフツレーチンパッケージである。従ってこれは同一種類の装置, コントロー ラーに対してひとつずつ用意される。 デパイスデスクリプターは,特定の入出力装置とその論理名,ハードウエア コントローラーの番地,デバイスドライパーの名前,ファイルマネージャーの 名前,初期化パラメータ等を結びつけるための情報をもった,小さな非実行型 のそジュールで、ある。これは各入出力装置ひとつに対してひとつがかならず定 義され,その名前がシステムにおける論理装置名となり,パスリスト中で表れ る名前となる 34 ディスグファイル O S 9のディスクメディアは,そのセクター長が 2 5 6ノミイトである。これは RBFMANレベノレで 固定されているので,それ以外の物理セクター長をもっメ h デァに対しては,各ドライパーでブロッキング/デブロッキングをする必要があ る。以下ではメディアの物理セグター長が 2 5 6バイトであるとして話を進める。 まず全セクターに O 番から始まる通し番号を付け,これを LSN( L o g i c a lS e c - t o rN u m b e r )とし、う。 まず L SNOは識別セクターで,メディアの総容量や構造等が書かれている ( 第 3表〉。 LSNlはアローケーションピットマップが置かれる。 lビットは lクラス ターに対応し 1クラスターは 2の巾乗数 1, 2, 4, 8,…でセクターをひ とまとめにしたものである。このビットマップが m セクターを占めるとすると 次の LSNl+mからルートディレクトリーが始まる。ルートディレクトリーと OLIVE 香川大学学術情報リポジトリ 第5 6巻 第 2号 -136- 6 0 6 第 3表 name DISKIDENTIFICATIONSECTOR s l z e d e s c r i p t i o n a d d r DDTOT DD .TKS DD.MAP DDBIT DDDIR DD .OWN DDATT DDDSK DDFMT DDSPT DD .RES DDBT DDBSZ DDDAT DDNAM 3 l 2 2 3 2 0 3 0 4 0 6 0 8 OB OD OE 1 0 2 l 2 2 3 2 5 3 2 1 1 1 3 1 5 1 8 1A 1F T o t a lnumbero fs e c t o r sonmesia Numbero fs e c t o r s i n p a e r l lt r a c k Numbero fb y t e si na l l o c a t i o nmap Numbero fs e c t o r sp e rc l u s t e r U S t W a I r l t e i I n ' s gs e c t o ro fI 0 0 td i r e c t o r y u s e rnumber D i s ka t t r i b u t e s D i s ki d e n t i f i c a t i o n( f o ri n t e r n a lf u s s e i d ) numbero fs i d e s D i s kf o r m a t :d e n s i t y, Numbero fs e c t o r sp e rt r a c k R e s e r v e df o rf u t u r eu s e S t a r t o i n f g bs e c t o ro fb o o t ( i s M t n r b a . y p D t e f : i s l ) e H S i z eo fb o o t s t r a pf i l e Timeo fc r e a t i o n :Y:M:D:H:M Volumename:l a s tc h a rhass i g nb i ts e t いっても構造は普通のディレグトリーと同じで,ディレグトリーといっても通 常のデーターファイルとその構造上は全く閉じである。 2ノミイト長で,その最初の 2 9バ ディレクトリー中のひとつのエントリーは 3 イトが名前,残りの 3バイトがそのファイルの最初の LSNである。ディレクト リーファイルの最初の 2つ の エ ン ト リ ー は , そ の 親 デ ィ レ グ ト リ ー ( 名 前 が 第 4表 FILEDESCRIPTORSECTOR 町l e na a d d r l 2 5 l 4 3 2 4 0 d e s c r i p t i o n F i l ea t t r i b u t e s :D SPXP WPRX W R Owner'su s e rnumber Datel a s tm o d i f i e d :Y M D H M L inkcount F i l es i z ea ( n t e u d m : b e Y ro fD b y t e s ) Datec r e a t e d :Y M Segmentl i s t , + 目 ︾ &E ρ i 、 ゐ'﹄円、拘河 f es北f 。 。 .1 c 2R t 三 f N eu -: f 北 ¥!SU5・ 1M v ト &' 凶 γ 匂 丸 XWRf 一 ui fc hdE辻 e・ 民e vyexmn ea -f -E S 1 i e 明r 目 r e s A ‘ t i f m vo b M c u e l ML t-a ・ ・ ・ eci -i 1 AL u 日 ct d b 泡 釦bbb e・悶a ibhuuuxh e 伐 DSPPPERR n .1 ρν . d d 63F h山 。 3 . 1 加 DSpppxnHR ・ e 令EL VA &Ei 9u ・ - Pす A e l - LH ρ l v r ρ i v W FD.ATT FDOWN .DAT FD FDLNK FD.SIZ FD.DCR FDSEG s l z e OLIVE 香川大学学術情報リポジトリ ケ'' nd v'a- FM-80S-9の改造 6 0 7 ¥ ¥ . .")と,自分自身(名前が¥¥.'りとなっている。 すべてのファイル(ディレグトリーファイルも含む〉の最初のセグターは, ファイルデスクリプターと呼ばれ,第 4表に示す内容が置かれる。表中のセグ 8個から成るもので,こ メントリストというのは, 5バイト長のエントリーが 4 れでそのファイノレを構成する物理的に連続するセクターのブロックの集りとし て,その続き具合を表す。 5バイトのうち最初の 3パイトはブロックの最初の セクターの LSN,あとの 2バイトがセグター単位のブロッグ長である。 フロッピーディスクメディアの場合は 8インチ 5インチ,両面,片面, 単密度,倍密度等,種々のタイプに適合するように準備されている。星光電子 の FM-8版は,メディアのフォーマッティングの際にセクタースキュー 3が設 定されている。 I V OS-9の改造 41 ハードウェアアダプタを不要にすること リ FM-8用の OS-9としては,現在タイプ E とタイプ Sの二種類が発売されて いる。筆者が購入したのは,タイプ Eの方であるが,これらは通常の FM-8シ ステムに追加するハードウェアアダプタが異なるのみで, ソフトウエア上は全 く問じものである。このアダプタには, RS232Cシリアルポート(コントロー CIA6850)が 2つ,プリンタ用のノミラレノレポート(コントローラーは ラーは A PIA6821)が 2つ,カレンダクロック ( R T C 1 4 6 8 1 8 )が含まれている。 FM8本体 にはもともとシリアルポート(コントローラーは USART8251)が lつ , TTL によるプリンター用パラレルポートが 1つ備わっている。したがってこれらす ,キーボードも含めると,同時に 4 べてのポートを使用し,さらに本体の CRT 人が 3台のプリンタを使い分けることが可能なシステムになるわけであるが, ノ f ソコンでそのような使い方をすることは非現実的であろう。 主記憶 64KBの かといってほとんど不要なアダプタをいつもぶらさげてお〈というのも気のき かない話であるので,まずこのアダプタなしで OS-9走らせることにしたわけ である。 OLIVE 香川大学学術情報リポジトリ 第5 6 巻 第 2号 -138- さて, として, 6 0 8 O S 9はマルチプログラミングの OSであるから,ハードウェアの機能 リアルタイムクロックと割込み処理可能なキーボードは必須である。 まずクロックの方は, FM-8のサブシステム内にあるタイマー機能を用いるこ 0ミリ秒単位で計時しており,その整数倍の一定時間毎に とができる。これは 2 メイン CPUに割込みをかけることも可能になっているので問題はない。次に, 主たる端末としては当然本体についているキーボード及びCRTを用いたいわ けであるが,これは残念ながら割込み駆動方式にはなっていなし、。出力側は問 題ないとしても、入力側は何とかしなければならないので,これはタイマーに よって割込み}がかけられたとき,ついでにキーボードをセンスして,そのとき にもしキ一入力があれば,あたかもキーボードからの割込みがあったかのよう にみせかけることにした。これでとりあえずハードウェアの方は解決したこと にして,次のソフトウェアの変更について説明する。 O S 9における割込み要求はすべて 6 8 0 9の I R Q信号によるものと仮定され M-8のタイマー割込みは F I R Qを発生するようになっている。そこ ているが F でプログラムにより F I R Qによる割込みを I R Qの場合と同じ状態になるよう に調整することにした。外部からの割込みが発生すると,まず 6 8 0 9のシステム ベクターで示される番地のプログラムが起動されるが,それはカーネノレ内の割 込みベクターによって最終的にはすべて CLOCKというモジューノレに入、って くる。このモジュールは, 日付及び時刻の設定,読出しのシステムコーノレも処 理 し て い る の で , 要 す る に こ の CLOCKという 2 5 0ノミイト程度のモジュ ールひとつだけを書きなおすことによって,アダプタは不要となる。第 6図 に CLOCKの割込み処理のフローチャートを示す。この図の中で,サブシステ ムがビジーかどうか調べて,ビジーでないときだけキーボードをセンスさ せているが,星光電子版ではこれを行っていなかった。星光電子版の文字表示 ドライパーは,単に 1文字を出力する機能だけしかサポートしておらず, しか もサブシステムに表示命令を与えるときは,割込み禁止にしてその命令の終了 を待つことになっていたからである。しかし今後サブシステムのグラフイヅグ 機能等,命令処理に長時間かかるものをも使用する場合,その間すべての割込 OLIVE 香川大学学術情報リポジトリ 6 0 9 FM-80S-9の 改 造 みを禁止して待つとし、うわけにはし、か -139第 6図 CLOCKの流れ図 ないので,図のように変更したもので ある。 42 一枚のディスクにより システムを立上げること 標準の OS-9は,カーネルを ROM で、提供するので,星光電子のものは, これをシステムディスクとは別にして, ブートディスクという形で発売してい る。そのため,システムを立ち上げ、る 時は,まずブートディスクよりカーネ ノレを主記憶にロードし,次にこれをシ ステムディスクと取り換えてやらなけ ればならなし、。 OS-9ばかりを使う人は これでもかまわないかも知れないが, 現状では複数の OSを使いわけなけれ ばならないという理由もあり,ブート ディスクなるものをなくすることにし 出 口 lその他の割込み処理へ た 。 星光電子版の I PL手順は次のようである。 ( 1 ) FM-8のROMのブートストラップによって,ブートディスクの第 Oト ラックの第 1セクタが読込まれる。 ( 2 ) このプログラムが,ブートディスクからカーネルを読込む。 ( 3 ) ディスクを交換後カーネノレを起動させる。 ( 4 ) カーネルはシステムディスクの最初のセクターから, OS9BOOTという ファイルの位置と長さを知り,これを読込む。 ( 5 ) システムを初期化して SYSGOを起動する。 これでわかるように 1枚のディスクのみでシステムを立上げるには,上記 OLIVE 香川大学学術情報リポジトリ -140- 第5 6巻 第 2号 6 1 0 OS9BOOTというファイルの中に,システムのメモリー常駐部分を全部含めて しまうようにすればよい。 しかしここで,ディスクの第 1セグタをどうするかとしづ問題が生ずる。 FM -8 のROMのブートストラップは,ここに次のブートストラップが入っている ことを要求するのに対して, O S-9はここにディスクの識別情報(以後 d i s k I D と記す〉を入れている。解決方法としては, O S-9がそのセクターを使わないよ うに全体を後方にズラせばよいのであるが,そうしてしまうと,今後メーカー 提供のディスクがそのままでは読めなくなってしまう。そこで,最初のセクター にブートストラップと d i s k I Dを同居させることにした。 d i s k I Dの大きさは 6 4バイトであるので,残り 1 9 2ノミイトまでは使える。ただし,ブートストラッ プは先頭から書いておかなければならないので,システムが d i s k I Dを読むと きは,そこにブートストラップがあるかどうかを調べて, もしそうならば正し いd i s k I Dを返すようにしておく,これは d i s k 5というフロッピーディスク・ ドライパを修正するだけですんだ。こうして新しいシステム立上げ手順は,次 のようになった。 ( 1 ) ROMのブートストラップによって,最初のブートストラップが読込ま れる。 ( 2 ) これにより,第 2のブートストラップが読込まれる(元の OS9BOOTの ようにその位置と長さは, d i s k I Dの中に書いてある〉。 ( 3 ) 第 2のブートストラップが,全システム常駐部分 (OS9・SYSと名付け た〉を読込み,カーネルを起動させる。 ( 4 ) カーネルが SYSGOを起動させる。 こうして,従来はディスグの入替えや,キー操作等で約一分かかっていたシ 0秒ほどで終了するよ ステム立上げが,単にリセットボタンを押すだけで,約 1 うになった。 4,3 システム常駐部分の縮小 マルチプログラミング・システムにおいては,どんなにすぐれた OSであろう と,ユーザーの使用可能なメモリーが小さくなって,事実上マルチプログラミ OLIVE 香川大学学術情報リポジトリ FM80S-9の改造 6 1 1 -141ー 司 ングが不可能になってしまったのでは意味がない。 FM-8は,ハードウェアの構 成上, RAM領域は 63KBで,星光電子版の OS-9では,そのうちの 17KBをシ ステムが占めている。これは標準 CP/Mが 7KBであるのに比べてかなり大き い感じがするので,これを縮小することを考えた。 今回行った縮少法は次の 2点である。 ( 1 ) カーネル部分には,システムを初期化する部分と,カーネル以外の常駐 部分を読込む部分が含まれているので,これを分離する。 ( 2 ) s h e l lは常駐とせず,必要なときだけ自動的にロードされるようにする。 (1)によって分離された初期化部分は,先の第 2ブートストラップに含ませる。 またこれに伴って,ハードウェア・アダプタのためのドライパ一等は全部削除 した。その結果,プログラム部分で 29KB ,データ部分で O7KB ,合わせて れ れ 36KBが節約された。 44 FM-8~こ固有のデ、パイス・ドライパの作成 ハードウ z ア・アダプタを使用しないことにしたことに伴い,もともと FM-8 に備わっていたプリンターボートとシりアルインターフェースに対するドライ パープログラムを作成した。プリンターボートは,プリンタのレディー信号に よる割込みを行わせることはできないので, ドライパーは大変簡単である。シ リアルポートの方は割込み処理可能であるので, このドライパーを作成するこ とは,割込み駆動型プログラム作成のよい練習問題である。またこれらを簡単 に作成可能かどうかは,よい OSかどうかの判断材料ともなる。 プリンタードライパー,シワアノレインタフ z ースドライパ共に OS-9では SCFタイプのドライバーとなる。このドライバーは,次の 5つのエントリーを もつひとつのモジュールとして書かれなければならない。 INIT デノミイスの初期化 READ 1文字読込み WRITE l文字書出し GETSTA デバイス・ステータスの読取り SETSTA デバイス・ステータスの設定 OLIVE 香川大学学術情報リポジトリ -142- TERM 第5 6 巻 第 2号 6 1 2 デパイスの終了 プリンターの場合は割込みがないの で , WRITEだけを用意すればよく,他は 第 7図 プリンター出力の流れ図 何もせず,エラーなしで正常にリターン すればよし、。 WRITEに対する流れ図を 第 7図に示す。プリンターが, ビジーの ときにどれだけプロセスをスリープさせ たらよし、かについては,十分検討してい ない。それぞれのプリンタの特性に合わ せて,適当な値を選んでやれば,割込み を行っていないことによる効率の低下 が,多少でも補われるかもしれない。 次にシリアルインタフェースドライ パーであるが、今度は先の 5つのエント リー対する処理の飽,デパイスからの割 込みに対応した処理ルーチンもこの中に 含めなければならない。 1文字出力 INIT ①システムより レスと 1 / 0ポートのアド 1 / 0モードを受取り,デバ イスを初期化する。 $IRQにより,割 ②システムコーノレ I 込み処理の登録をする。 出 口 ③入出力バッファーを初期化する。 ④デバイスの入力割込みを可能にする。 READ ① CPUへの割込みを禁止する。 ②入力バッファーを調べて,文字があれば③へ,なければ SLEEPルーチン OLIVE 香川大学学術情報リポジトリ 6 1 3 FM-80S-9の改造 -143- を呼んで司①・へ戻る。 ③文字を取出し,文字ポインタを進める。 ④ CPUへの割込みを許可する。 WRITE ① CPUへの割込みを禁止する。 ②出力パップァーを調べて一杯で、なければ③へ,一杯なら SLEEPルーチ ンを呼んで①へ戻る。 ③出力パッファーに文字を書いて,文字ポインターを進める。 ④ CPU、への割込みを許可、する。 ⑤デバイスの出力割込みを可能にする。 GETSTA 入力文字がレディーかどうかということと, EOFかどうかという間合わせ が可能である。 PUTSTA あり得ない。 TERM ①出力バッファーが空になるまで SLEEPルーチンを呼んで待つ。 ②デバイスの入力割込みを禁止する。 ③システムコール F$IRQにより,割込み処理登録を削除する。 ここで SLEEPルーチンというのは,そのプロセスが,デバイスの入出力動作 の終了を待つところであるが,プロセスがスリープ状態から再起動されるのは, プロセスの強制終了等のシグナノレを受取った場合も含まれるので注意しなけれ ばならなし、。 SLEEP処理(1/0の終了を待つ〉 ①このプロセスのプロセス IDを待っているプロセス I Dの変数に移す。 ②システムコール F$SLEPにより,無期限のスリープに入る。 ③シグナルによって起動されたものかどうか調べて,そうでなければ呼出 し元へ正常に復帰する。 OLIVE 香川大学学術情報リポジトリ -144- 第5 6 巻 第 2号 6 1 4 ④シグナルが致命的なものであれば,ひとつ前の呼出し元へ直接復帰する。 それ以外はシグナルの内容により,無視して再びスリープするか,正常 に復帰するかする。 2 5 1からの 次に割込み処理ルーチンについて説明する。この場合, USART8 割込みは,入力文字がレディーになったときと,出力文字の送信が終わったと きに起り得るが,両者共に共通の割込みルーチンが登録してあるのでまず割込 みが来たら,それが入力割込みによるものか,出力割込みによるものかを調べ て,それぞれに対応した処理を行なってやる。 入力割込み処理 ①デノミイスから入力文字を取出し,入力パップアーにしまう。 ②入力パッファーがあふれないかを調べてあふれなければポインターを進 める。あふれるときはポインターを進めず,オバーランエラーをセット する。 ③入力文字を調べ,普通の文字なら,待っているプロセスに WAKEUP信 号を送る。 ④特別な文字であれば,それに対応した処理をする。(例えば,割込み文字 のときは,待っているプロセスに,アボート信号を送る。〉 出力割込み処理 ①出力バッファーがすでに空になっておれば,デバイスの出力割込みを禁 止して④へ行く。 ②出力バッファーから文字を取出し,デバイスに書込み,ポインタを進め る 。 ③その文字が,バッファー中の最後の文字ならデバイスの出力割込みを禁 止する。 ④待っているプロセスに WAKEUP信号を送る。 このように, OS-9においては比較的簡単に独自の割込み駆動型ドライパー を書くことが可能であった。 OLIVE 香川大学学術情報リポジトリ FM-80S-9の改造 6 1 5 -145- V むすび 以上,超小型マノレチユーザー,マルチプログラミングのオベレーティングシ ステム, OS-9の特徴と構造を明らかにし, FM-8上でさらに使い易くするため の改造を行ったわけであるが, まだまだ不満の点が多し、。本文中に触れたもの の他,カタカナさらには漢字機能,グラフィック機能等も今後追加していかな ければならないだろう。 UNIXの普及に伴い,既存の OS中に UNIX流 の 機 能 を組込む (MS-DOS2 “0 )とか, C言語によって書かれた UNIX用プログラム を 利 用 で き る OS(CPjM-68K) とか,既存の OS~こ UNIX 流のユーザーイン ターフェースを追加する (CPjMのための M icroshell,UNICA)とか,様々な 製品開発や実験が行われているようである。より良い OSを 求 め て , さ ら に 研 究を進めてし、かねばならなし、。 なお,本稿において, OS-9に関する引用については,いちいちその出典を明 示しなか、ったが,参考文献の C2J , C3], C4 ] , C5Jから適宣引用したこと をお断りしておく。 参考文献 (1)日経パソコン」創刊前・春号 3 0ペ ー ジ C2J 山根裕一, rOS-9の特徴と構造 J,r インターフェース J 1 9 8 1年 9月号 (3J マイクロウェア社, r O S 9レベノレ lシステムプログラマーズマエュアノレ J 1 9 8 2年 (4J 側マイクロボード,紛星光電子, r O S 9ユーザーズマ Z ュアノレ』 (5J 側星光電子, rFM-8用OS-9使用の手引き』 (6J D a v i dF i e d e r, “ UNIXF a c i l i t i e so nCP1M:M i c r o s h e l l, " Micro.~ystems V0 14No .1 ( 1 9 8 3 ) (7J AnthonyS k j e l l u m, “ UNICA:A U NIX-likeU t i l i t yS y s t e mf o rCP/M, " Mi ι r o s . y s 14N01( 1 9 8 3 ) t e m sV0 (8) T .H . .C r o w l e ye ta l“ UNIXT i m e S h a r i n gS y s t e m, "TheB e l l' n ωh i c a l] o u r n a l Vo157N o . . 6P a r t2 (9J Z i l o gI n c .$ y s t e m8000Z e u sRψr e n c eManz ωl C 10 J Z i l o gI n c .$ y s t e m8000Z e u sU t i l i t i e sManual