Mercurial > hg > Events > OSC2019
comparison poster/os9/os9.html @ 8:7fd82a802a66
add os9
author | anatofuz |
---|---|
date | Fri, 19 Apr 2019 18:23:10 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
7:d8feb607c44e | 8:7fd82a802a66 |
---|---|
1 <html> | |
2 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> | |
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | |
4 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |
5 | |
6 <html xmlns="http://www.w3.org/1999/xhtml"> | |
7 | |
8 <head> | |
9 <title>OS9</title> | |
10 <!-- metadata --> | |
11 <meta name="generator" content="o2s5" /> | |
12 <meta name="version" content="0.1" /> | |
13 <meta name="author" content="Shinji KONO" /> | |
14 <meta name="company" content="" /> | |
15 <!-- configuration parameters --> | |
16 <meta name="defaultView" content="slideshow" /> | |
17 <meta name="controlVis" content="hidden" /> | |
18 <!-- style sheet links --> | |
19 | |
20 <!-- S6 style sheet links --> | |
21 <link rel="stylesheet" href="os9.css" media="projection" id="styleProjection"> | |
22 <link rel="stylesheet" href="ui/s6/screen.css" media="screen" id="styleScreen"> | |
23 <link rel="stylesheet" href="ui/s6/print.css" media="print"> | |
24 | |
25 <!-- S6 JS --> | |
26 <script src="ui/s6/jquery.js"></script> | |
27 <script src="ui/s6/jquery.event.move.js"></script> | |
28 <script src="ui/s6/jquery.event.swipe.js"></script> | |
29 <script src="ui/s6/jquery.slideshow.js"></script> | |
30 <script> | |
31 $(document).ready( function() { | |
32 Slideshow.init(); | |
33 } ); | |
34 | |
35 | |
36 </script> | |
37 | |
38 <!-- Better Browser Banner for Microsoft Internet Explorer (IE) --> | |
39 <!--[if IE]> | |
40 <script src="s6/jquery.microsoft.js"></script> | |
41 <![endif]--> | |
42 | |
43 | |
44 </head> | |
45 <body> | |
46 | |
47 <div class="layout"> | |
48 <div id="header"></div> | |
49 <div id="footer"> | |
50 <!-- <h1>Your Footer Here</h1> --> | |
51 <!-- <h2>Your Subfooter Here</h2> --> | |
52 </div> | |
53 </div> | |
54 | |
55 <div class="presentation"> | |
56 <!-- _S9SLIDE_ --> | |
57 <!-- globle element --> | |
58 </div> | |
59 | |
60 <!-- Title ---> | |
61 <div class="slide"> | |
62 <h1>OS9</h1> | |
63 <h1></h1> | |
64 <h1> 河野真治 </h1> | |
65 <h1></h1> | |
66 </div> | |
67 | |
68 | |
69 </div> | |
70 <div class="slide"> | |
71 <h1>OS-9 の特徴</h1> | |
72 <p> | |
73 <p>Microware 社によりMotorola のMC6809用に作られた 8bit OS。<br> | |
74 <p><pre> Module と言う単位をメモリ上にどこに配置しても良い<br> | |
75 Time sharing を採用した並列実行(concurrent) (平行(parallel)ではない)<br> | |
76 Unix like なshell とpipe<br> | |
77 Unified file system ( Device descriptor, Device driver)<br> | |
78 Floppy disk 128k 階層型ファイルシステム<br> | |
79 Basic09 というPascal likeな言語を持つ。<br> | |
80 </pre> | |
81 </div> | |
82 <div class="slide"> | |
83 <h1>MC6809</h1> | |
84 <p> | |
85 <p><center><img src="6809.gig"></center><br> | |
86 <p></div> | |
87 <div class="slide"> | |
88 <h1>Level 1/2</h1> | |
89 <p> | |
90 level 1 ROM上のOS9 p1 kernel で動作する。<br> | |
91 level 1 MMUで2Mbyteのメモリを使える<br> | |
92 <p></div> | |
93 <div class="slide"> | |
94 <h1> Module</h1> | |
95 <p> | |
96 <pre> 87CD から始まり、CRC24 で検証されたコードとデータの固まり<br> | |
97 Relocatable<br> | |
98 entry point とモードフラグ<br> | |
99 </pre> | |
100 ROMに常駐できる<br> | |
101 <p>8bitなのでメモリ空間は64k(16bit addressing)<br> | |
102 <p>8080/6809 は 8bit CPUというよりは、8bit busな16bit CPU<br> | |
103 <p></div> | |
104 <div class="slide"> | |
105 <h1>何をするか</h1> | |
106 <p> | |
107 Emulator 上で OS-9 を動かそう。<br> | |
108 <p><pre> できれば Level 2<br> | |
109 </pre> | |
110 </div> | |
111 <div class="slide"> | |
112 <h1>なんで?</h1> | |
113 <p> | |
114 <p>昔、自作のに乗っけれなかった。せっかく5万円も出して買ったのに。<br> | |
115 <p>残念ながらハードはもうないけど、Emulator なら?<br> | |
116 <p>20年前に「年取ったらやろう」と思っていたが、そろそろやるべき。<br> | |
117 <p></div> | |
118 <div class="slide"> | |
119 <h1>level 2</h1> | |
120 <p> | |
121 <pre> アドレス変換に対応し、512kメモリを使用できる。<br> | |
122 ユーザ空間とシステム空間を別にできる<br> | |
123 </pre> | |
124 8k単位で16task*64k分を512kから自由に割り振れる<br> | |
125 <p>TLB base ではなく、変換機構をメモリで実装する方式<br> | |
126 <p></div> | |
127 <div class="slide"> | |
128 <h1>kernel構成</h1> | |
129 <p> | |
130 OS9p1<br> | |
131 <pre> system callと割り込み処理<br> | |
132 Module 発見と管理<br> | |
133 </pre> | |
134 OS9p2<br> | |
135 <pre> メモリ管理<br> | |
136 Task管理<br> | |
137 Signal<br> | |
138 </pre> | |
139 </div> | |
140 <div class="slide"> | |
141 <h1>kernel構成2</h1> | |
142 <p> | |
143 <p>IOMan<br> | |
144 <pre> SCF/RBFと device driver とdescriptor の登録<br> | |
145 </pre> | |
146 SCF<br> | |
147 <pre> sequencial file io manager<br> | |
148 </pre> | |
149 RBF<br> | |
150 <pre> randome block file io manager<br> | |
151 file system管理<br> | |
152 </pre> | |
153 </div> | |
154 <div class="slide"> | |
155 <h1>Runtime module</h1> | |
156 <p> | |
157 <p>init<br> | |
158 <pre> boot用初期データ<br> | |
159 </pre> | |
160 sysgo<br> | |
161 <pre> clockとShellの起動<br> | |
162 </pre> | |
163 Clock<br> | |
164 <pre> timer 割り込み<br> | |
165 日付計算<br> | |
166 </pre> | |
167 </div> | |
168 <div class="slide"> | |
169 <h1>Runtime module 2</h1> | |
170 <p> | |
171 <p>Shell<br> | |
172 <p>Device descriptor<br> | |
173 <pre> D0<br> | |
174 Term<br> | |
175 </pre> | |
176 Device driver<br> | |
177 <pre> PTY<br> | |
178 PDisk<br> | |
179 </pre> | |
180 </div> | |
181 <div class="slide"> | |
182 <h1>nitros9</h1> | |
183 <p> | |
184 <p>OS9 をdisassemble したものらしい<br> | |
185 <p>Tandy Coco 上で動いていたらしい<br> | |
186 <p>ライセンス的にはだめかも<br> | |
187 <p>大目に見られてる?<br> | |
188 <p></div> | |
189 <div class="slide"> | |
190 <h1>Emulator</h1> | |
191 <p> | |
192 sbc09というアセンブラEmulator上に実装して動作させた<br> | |
193 <p>Java版を作った人がいるらしい<br> | |
194 <p>Unix上のOS9 emulator があるが動作せず<br> | |
195 <p>osnineという途中まで作られたものがあった<br> | |
196 <p>level 2 まで動かす?<br> | |
197 <p></div> | |
198 <div class="slide"> | |
199 <h1>利点と欠点</h1> | |
200 <p> | |
201 初期の8bit用のUnix like OS<br> | |
202 <p>8bitのOSでMMUを持つものとしては唯一 (M/PMもあったが)<br> | |
203 <p>comapct で信頼できるmodule構成<br> | |
204 <p>CRCの意味は不明<br> | |
205 <p>メモリ領域はmodule構成ではない<br> | |
206 <p></div> | |
207 <div class="slide"> | |
208 <h1>利点と欠点 2</h1> | |
209 <p> | |
210 PICのせいもあり、比較的低速<br> | |
211 <p>real-time scheduling を持ってない<br> | |
212 <p>プロセス間通信は貧弱 (signal のみ)<br> | |
213 <p>68K用などは現在も生きてる製品<br> | |
214 <p></div> | |
215 <div class="slide"> | |
216 <h1>level 2</h1> | |
217 <p> | |
218 sbc09 を mmu 対応にして level 2 まで動かした。<br> | |
219 <p>nitros9 という「まだメンテされている(〜2014)」ソースに対応した。<br> | |
220 <p>Coco (tandy color computer) <br> | |
221 <p><pre> 0xfe00-0xffff は MMU による影響を受けない<br> | |
222 ROM切り替えで、2MBのfull ramとして使える<br> | |
223 </pre> | |
224 </div> | |
225 <div class="slide"> | |
226 <h1>vrbf</h1> | |
227 <p> | |
228 <p>仮想RBF (random block filer manager )<br> | |
229 <p><pre> Unix 上のファイルを Emulator 側からos9のファイルシステムとして見せる<br> | |
230 </pre> | |
231 os9はopen されたファイルを path descriptor というioman が管理するデータ構造で実装する。それに対応する<br> | |
232 構造体を vrbf 内で用意する。256個と決まっているので固定配列で良い。そこに FILE *を置けばよい。<br> | |
233 <p>os9はディレクトリを普通のファイルとして開いてしまうので、os9のディレクトリ構造を作って返す。<br> | |
234 <p><pre> fmemopen というメモリ上のバッファを FILE* として開く機能を使う<br> | |
235 </pre> | |
236 </div> | |
237 <div class="slide"> | |
238 <h1>vrbf 続き</h1> | |
239 <p> | |
240 <p>dir -e はファイルの属性を持つ特別なsector (file descriptor)を getstat のundocumented commandを<br> | |
241 使ってアクセスするので、それを返す必要がある。<br> | |
242 <p>os9は current directory をLSN( 24bit logical sector number)で持つが、面倒なので、current directory 名を256個のFIFOっで管理。<br> | |
243 同じ名前は再利用。<br> | |
244 <p>path descriptor でcurrent directoryを管理してくれれば良いのだが、そうでなくて、LSN。しかも、path descriptor と別。なので、<br> | |
245 別に管理する必要がある。<br> | |
246 <p></div> | |
247 <div class="slide"> | |
248 <h1>level2 での割り込み</h1> | |
249 <p> | |
250 時分割処理に必要な clock module は割り込みを行う。<br> | |
251 <p>割り込み時には、どのmmuにいるかわからない。なので、<br> | |
252 <p><pre> os9にentry割り込みルーチンを登録する<br> | |
253 os9 が割り込み後mmuを設定してentry割り込みルーチンを呼び出す<br> | |
254 engry割り込みルーチンで、serviceタスクを SSvcIRQに登録して jmp [D.XIRQ] <br> | |
255 すると iret してくれる<br> | |
256 os9 側が暇な時に、serviceタスクをsystem mode で呼び出す<br> | |
257 service は処理の後、task 切り替えをする用に jmp [>D.Clock] する<br> | |
258 </pre> | |
259 </div> | |
260 <div class="slide"> | |
261 <h1>level2 のoverhead</h1> | |
262 <p> | |
263 <p>vrbf はサービスするprocessとは別なシステムメモリ空間にいるので、データは copy sysetm callを使う必要がある。<br> | |
264 <p>vrbf のC側からはos9のsystem callを呼べないので、mmu を一時的に作って、それを使ってアクセス。mmuの情報はprocess descriptor 上にある。<br> | |
265 <p>call するプロセスのレジスタはsystem spaceにコピーされていて、そこに値を書き込むと返される。<br> | |
266 <p>hook がたくさんあり、indirect jump ばっかりが増える。<br> | |
267 <p>Coco ではIOは全部のプロセスに見えてしまってる。特に保護されてない。<br> | |
268 <p></div> | |
269 <div class="slide"> | |
270 <h1>module 間のlink</h1> | |
271 <p> | |
272 os9 のlinkは、system に登録されるだけ。同じメモリ空間に登録されるとは限らない。<br> | |
273 <p>同じ空間に登録されれば、module にアクセスできる。<br> | |
274 <p>module に付属している固定メモリはある<br> | |
275 <p>malloc されたものは自由に取り扱えるが、どこにあるかはprocess毎に異なる<br> | |
276 <p></div> | |
277 <div class="slide"> | |
278 <h1>OS-9 上のソフト</h1> | |
279 <p> | |
280 <pre> BASIC09<br> | |
281 FORTH<br> | |
282 BASIC<br> | |
283 GAME09<br> | |
284 </pre> | |
285 </div> | |
286 <div class="slide"> | |
287 <h1>Micro C</h1> | |
288 <p> | |
289 <p>mohta氏と手塚氏の作った 6809 用の整数Cコンパイラ。構造体がある。<br> | |
290 <p><pre> かなり動いているんですが...<br> | |
291 </pre> | |
292 </div> | |
293 <div class="slide"> | |
294 <h1>さらに</h1> | |
295 <p> | |
296 <p>qemu で TLB base で動かす<br> | |
297 <p>interpreter base の Emualtor ではなく、compile base にする<br> | |
298 <p>nitros-9 のソースコードのコメントを増やす<br> | |
299 <p> まぁ、あんまりやりすぎないように<br> | |
300 <p> | |
301 </body></html> |