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>