Mercurial > hg > Events > OSC2019
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/poster/os9/os9.html Fri Apr 19 18:23:10 2019 +0900 @@ -0,0 +1,301 @@ +<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>