Mercurial > hg > Events > OSC2019
view poster/os9/os9.html @ 8:7fd82a802a66
add os9
author | anatofuz |
---|---|
date | Fri, 19 Apr 2019 18:23:10 +0900 |
parents | |
children |
line wrap: on
line source
<html> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>OS9</title> <!-- metadata --> <meta name="generator" content="o2s5" /> <meta name="version" content="0.1" /> <meta name="author" content="Shinji KONO" /> <meta name="company" content="" /> <!-- configuration parameters --> <meta name="defaultView" content="slideshow" /> <meta name="controlVis" content="hidden" /> <!-- style sheet links --> <!-- S6 style sheet links --> <link rel="stylesheet" href="os9.css" media="projection" id="styleProjection"> <link rel="stylesheet" href="ui/s6/screen.css" media="screen" id="styleScreen"> <link rel="stylesheet" href="ui/s6/print.css" media="print"> <!-- S6 JS --> <script src="ui/s6/jquery.js"></script> <script src="ui/s6/jquery.event.move.js"></script> <script src="ui/s6/jquery.event.swipe.js"></script> <script src="ui/s6/jquery.slideshow.js"></script> <script> $(document).ready( function() { Slideshow.init(); } ); </script> <!-- Better Browser Banner for Microsoft Internet Explorer (IE) --> <!--[if IE]> <script src="s6/jquery.microsoft.js"></script> <![endif]--> </head> <body> <div class="layout"> <div id="header"></div> <div id="footer"> <!-- <h1>Your Footer Here</h1> --> <!-- <h2>Your Subfooter Here</h2> --> </div> </div> <div class="presentation"> <!-- _S9SLIDE_ --> <!-- globle element --> </div> <!-- Title ---> <div class="slide"> <h1>OS9</h1> <h1></h1> <h1> 河野真治 </h1> <h1></h1> </div> </div> <div class="slide"> <h1>OS-9 の特徴</h1> <p> <p>Microware 社によりMotorola のMC6809用に作られた 8bit OS。<br> <p><pre> Module と言う単位をメモリ上にどこに配置しても良い<br> Time sharing を採用した並列実行(concurrent) (平行(parallel)ではない)<br> Unix like なshell とpipe<br> Unified file system ( Device descriptor, Device driver)<br> Floppy disk 128k 階層型ファイルシステム<br> Basic09 というPascal likeな言語を持つ。<br> </pre> </div> <div class="slide"> <h1>MC6809</h1> <p> <p><center><img src="6809.gig"></center><br> <p></div> <div class="slide"> <h1>Level 1/2</h1> <p> level 1 ROM上のOS9 p1 kernel で動作する。<br> level 1 MMUで2Mbyteのメモリを使える<br> <p></div> <div class="slide"> <h1> Module</h1> <p> <pre> 87CD から始まり、CRC24 で検証されたコードとデータの固まり<br> Relocatable<br> entry point とモードフラグ<br> </pre> ROMに常駐できる<br> <p>8bitなのでメモリ空間は64k(16bit addressing)<br> <p>8080/6809 は 8bit CPUというよりは、8bit busな16bit CPU<br> <p></div> <div class="slide"> <h1>何をするか</h1> <p> Emulator 上で OS-9 を動かそう。<br> <p><pre> できれば Level 2<br> </pre> </div> <div class="slide"> <h1>なんで?</h1> <p> <p>昔、自作のに乗っけれなかった。せっかく5万円も出して買ったのに。<br> <p>残念ながらハードはもうないけど、Emulator なら?<br> <p>20年前に「年取ったらやろう」と思っていたが、そろそろやるべき。<br> <p></div> <div class="slide"> <h1>level 2</h1> <p> <pre> アドレス変換に対応し、512kメモリを使用できる。<br> ユーザ空間とシステム空間を別にできる<br> </pre> 8k単位で16task*64k分を512kから自由に割り振れる<br> <p>TLB base ではなく、変換機構をメモリで実装する方式<br> <p></div> <div class="slide"> <h1>kernel構成</h1> <p> OS9p1<br> <pre> system callと割り込み処理<br> Module 発見と管理<br> </pre> OS9p2<br> <pre> メモリ管理<br> Task管理<br> Signal<br> </pre> </div> <div class="slide"> <h1>kernel構成2</h1> <p> <p>IOMan<br> <pre> SCF/RBFと device driver とdescriptor の登録<br> </pre> SCF<br> <pre> sequencial file io manager<br> </pre> RBF<br> <pre> randome block file io manager<br> file system管理<br> </pre> </div> <div class="slide"> <h1>Runtime module</h1> <p> <p>init<br> <pre> boot用初期データ<br> </pre> sysgo<br> <pre> clockとShellの起動<br> </pre> Clock<br> <pre> timer 割り込み<br> 日付計算<br> </pre> </div> <div class="slide"> <h1>Runtime module 2</h1> <p> <p>Shell<br> <p>Device descriptor<br> <pre> D0<br> Term<br> </pre> Device driver<br> <pre> PTY<br> PDisk<br> </pre> </div> <div class="slide"> <h1>nitros9</h1> <p> <p>OS9 をdisassemble したものらしい<br> <p>Tandy Coco 上で動いていたらしい<br> <p>ライセンス的にはだめかも<br> <p>大目に見られてる?<br> <p></div> <div class="slide"> <h1>Emulator</h1> <p> sbc09というアセンブラEmulator上に実装して動作させた<br> <p>Java版を作った人がいるらしい<br> <p>Unix上のOS9 emulator があるが動作せず<br> <p>osnineという途中まで作られたものがあった<br> <p>level 2 まで動かす?<br> <p></div> <div class="slide"> <h1>利点と欠点</h1> <p> 初期の8bit用のUnix like OS<br> <p>8bitのOSでMMUを持つものとしては唯一 (M/PMもあったが)<br> <p>comapct で信頼できるmodule構成<br> <p>CRCの意味は不明<br> <p>メモリ領域はmodule構成ではない<br> <p></div> <div class="slide"> <h1>利点と欠点 2</h1> <p> PICのせいもあり、比較的低速<br> <p>real-time scheduling を持ってない<br> <p>プロセス間通信は貧弱 (signal のみ)<br> <p>68K用などは現在も生きてる製品<br> <p></div> <div class="slide"> <h1>level 2</h1> <p> sbc09 を mmu 対応にして level 2 まで動かした。<br> <p>nitros9 という「まだメンテされている(〜2014)」ソースに対応した。<br> <p>Coco (tandy color computer) <br> <p><pre> 0xfe00-0xffff は MMU による影響を受けない<br> ROM切り替えで、2MBのfull ramとして使える<br> </pre> </div> <div class="slide"> <h1>vrbf</h1> <p> <p>仮想RBF (random block filer manager )<br> <p><pre> Unix 上のファイルを Emulator 側からos9のファイルシステムとして見せる<br> </pre> os9はopen されたファイルを path descriptor というioman が管理するデータ構造で実装する。それに対応する<br> 構造体を vrbf 内で用意する。256個と決まっているので固定配列で良い。そこに FILE *を置けばよい。<br> <p>os9はディレクトリを普通のファイルとして開いてしまうので、os9のディレクトリ構造を作って返す。<br> <p><pre> fmemopen というメモリ上のバッファを FILE* として開く機能を使う<br> </pre> </div> <div class="slide"> <h1>vrbf 続き</h1> <p> <p>dir -e はファイルの属性を持つ特別なsector (file descriptor)を getstat のundocumented commandを<br> 使ってアクセスするので、それを返す必要がある。<br> <p>os9は current directory をLSN( 24bit logical sector number)で持つが、面倒なので、current directory 名を256個のFIFOっで管理。<br> 同じ名前は再利用。<br> <p>path descriptor でcurrent directoryを管理してくれれば良いのだが、そうでなくて、LSN。しかも、path descriptor と別。なので、<br> 別に管理する必要がある。<br> <p></div> <div class="slide"> <h1>level2 での割り込み</h1> <p> 時分割処理に必要な clock module は割り込みを行う。<br> <p>割り込み時には、どのmmuにいるかわからない。なので、<br> <p><pre> os9にentry割り込みルーチンを登録する<br> os9 が割り込み後mmuを設定してentry割り込みルーチンを呼び出す<br> engry割り込みルーチンで、serviceタスクを SSvcIRQに登録して jmp [D.XIRQ] <br> すると iret してくれる<br> os9 側が暇な時に、serviceタスクをsystem mode で呼び出す<br> service は処理の後、task 切り替えをする用に jmp [>D.Clock] する<br> </pre> </div> <div class="slide"> <h1>level2 のoverhead</h1> <p> <p>vrbf はサービスするprocessとは別なシステムメモリ空間にいるので、データは copy sysetm callを使う必要がある。<br> <p>vrbf のC側からはos9のsystem callを呼べないので、mmu を一時的に作って、それを使ってアクセス。mmuの情報はprocess descriptor 上にある。<br> <p>call するプロセスのレジスタはsystem spaceにコピーされていて、そこに値を書き込むと返される。<br> <p>hook がたくさんあり、indirect jump ばっかりが増える。<br> <p>Coco ではIOは全部のプロセスに見えてしまってる。特に保護されてない。<br> <p></div> <div class="slide"> <h1>module 間のlink</h1> <p> os9 のlinkは、system に登録されるだけ。同じメモリ空間に登録されるとは限らない。<br> <p>同じ空間に登録されれば、module にアクセスできる。<br> <p>module に付属している固定メモリはある<br> <p>malloc されたものは自由に取り扱えるが、どこにあるかはprocess毎に異なる<br> <p></div> <div class="slide"> <h1>OS-9 上のソフト</h1> <p> <pre> BASIC09<br> FORTH<br> BASIC<br> GAME09<br> </pre> </div> <div class="slide"> <h1>Micro C</h1> <p> <p>mohta氏と手塚氏の作った 6809 用の整数Cコンパイラ。構造体がある。<br> <p><pre> かなり動いているんですが...<br> </pre> </div> <div class="slide"> <h1>さらに</h1> <p> <p>qemu で TLB base で動かす<br> <p>interpreter base の Emualtor ではなく、compile base にする<br> <p>nitros-9 のソースコードのコメントを増やす<br> <p> まぁ、あんまりやりすぎないように<br> <p> </body></html>