@7shi
UNIX V6を8086に移植して、ソフトウェアのレイヤーで必要とされる基礎を学ぶ
UNIX V6
1975年生まれ
ずっとLions本が基礎だった
- pre K&Rという古いC言語
- PDP-11
- V6カーネルの大半はC言語
教材としてのUNIX V6
- カーネルが一人でも把握できるサイズ
- ユーザーランドまで含めるとコンパクト
ツールチェイン
- コンパクトなコンパイラやアセンブラ
- OS学習の一貫としてソースを追える
- バイナリの生成過程を重視
歴史的経緯
- 今のUNIX系OSでも活用できる知識
歴史的連続性
- UNIXV1-7
- 1-4BSD
- FreeBSD
- NetBSD
- OpenBSD
PDP-11
- アセンブラ入門としてのPDP-11を使用
- UNIX V6カーネル学習ができる
でも不人気
- 古い知識を勉強するのは興味がない?
x86の教材用OSを検討
- MINIX xv6など、コンパイラは大規模だったり連続性がなかったりして、教材として使えるのだろうかというとかなり疑問
コンパイラ
- ACK
結論
- 自前でV6をx86に移植(アセンブラとコンパイラ)
OSやコンパイラを移植する作業を通して勉強する
16bit リアルモード
- セグメント(メモリ管理) Tinyモデル(CS=DS)
- ユーザーでセグメントを触らない紳士協定
将来的には80286のプロテクトモード
BIOS経由の同期アクセス
工程
- ユーザーモードシミュレータ
- システムコールをシミュレートするQEMUのようなインタプリタを作る(JITなし)
- V6上で作業するのは大変なので、現在のOS上でコンパイルとかシミュレータを動かす
アセンブラのC言語化
- アセンブラ自体がアセンブリ言語で書かれている
- C言語に移植
- C言語化は出来た(Xinuでそのまんまのやつが発見された)
アセンブラの8086対応
libcのトランスレート
- システムコールのラッパー(定型処理ばかり)
- トランスレータ(アセンブラを参考に)
コンパイラの8086対応
pre K&Rのままだけど代入演算子は修正予定
ユーザーランドの移植
カーネルの移植
- MI(機種非依存)
- MD(機種依存)
- デバッグ