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>