view poster/os9/os9-level2.ind @ 8:7fd82a802a66

add os9
author anatofuz
date Fri, 19 Apr 2019 18:23:10 +0900
parents
children
line wrap: on
line source

-title: OS9 vrbf

Microware 社によりMotorola のMC6809用に作られた 8bit OS。

--level 2

sbc09 を mmu 対応にして level 2 まで動かした。

nitros9 という「まだメンテされている(〜2014)」ソースに対応した。

Coco (tandy color computer) 

    0xfe00-0xffff は MMU による影響を受けない
    ROM切り替えで、2MBのfull ramとして使える

--vrbf

仮想RBF (random block filer manager )

    Unix 上のファイルを Emulator 側からos9のファイルシステムとして見せる

os9はopen されたファイルを path descriptor というioman が管理するデータ構造で実装する。それに対応する
構造体を vrbf 内で用意する。256個と決まっているので固定配列で良い。そこに FILE *を置けばよい。

os9はディレクトリを普通のファイルとして開いてしまうので、os9のディレクトリ構造を作って返す。

   fmemopen というメモリ上のバッファを FILE* として開く機能を使う

dir -e はファイルの属性を持つ特別なsector (file descriptor)を getstat のundocumented commandを
使ってアクセスするので、それを返す必要がある。

os9は current directory をLSN( 24bit logical sector number)で持つが、面倒なので、current directory 名を256個のFIFOっで管理。
同じ名前は再利用。

path descriptor でcurrent directoryを管理してくれれば良いのだが、そうでなくて、LSN。しかも、path descriptor と別。なので、
別に管理する必要がある。

--level2 での割り込み

時分割処理に必要な clock module は割り込みを行う。

割り込み時には、どのmmuにいるかわからない。なので、

  os9にentry割り込みルーチンを登録する
  os9 が割り込み後mmuを設定してentry割り込みルーチンを呼び出す
  engry割り込みルーチンで、serviceタスクを SSvcIRQに登録して jmp   [D.XIRQ] 
  すると iret してくれる
  os9 側が暇な時に、serviceタスクをsystem mode で呼び出す
  service は処理の後、task 切り替えをする用に jmp   [>D.Clock] する



--level2 のoverhead

vrbf はサービスするprocessとは別なシステムメモリ空間にいるので、データは copy sysetm callを使う必要がある。

vrbf のC側からはos9のsystem callを呼べないので、mmu を一時的に作って、それを使ってアクセス。mmuの情報はprocess descriptor 上にある。

call するプロセスのレジスタはsystem spaceにコピーされていて、そこに値を書き込むと返される。

hook がたくさんあり、indirect jump ばっかりが増える。

Coco ではIOは全部のプロセスに見えてしまってる。特に保護されてない。

--module 間のlink

os9 のlinkは、system に登録されるだけ。同じメモリ空間に登録されるとは限らない。

同じ空間に登録されれば、module にアクセスできる。

module に付属している固定メモリはある

malloc されたものは自由に取り扱えるが、どこにあるかはprocess毎に異なる

--Gears OS でのlink

現在は単一メモリ空間で動いてる。

他の部分にアクセスされないことを保証できれば別メモリ空間である必要はない。

   Code Gear は割り当てられた Data Gear にしかアクセスできない

できないことをメモリ保護機能的に保証するべきか?

ライブラリとライブラリの別versionの問題。

   動く版の組み合わせリストのようなもの

ページングは、fragmentation とかに使う方が良い。

論理的には64bitで、全部単一のアドレス空間に割り当てることが可能。(IPv6みたいに)

全世界でだと少し足りないか。分散メモリ空間を全部の計算機に割り当てる。

--巨大なData Gear問題

許した方が過去との互換性がでる

GPGPUとの相性も良い

でも、Gers 的ではない