シンプルな Unix 風教育用オペレーティングシステム Xv6
(pdos.csail.mit.edu)- Xv6は、オペレーティングシステムの構造を学ぶために作られたシンプルな Unix 風の教育用 OS であり、MIT の学部科目 6.1810 で使われている
- 2006年夏に開発され、その後 6.1810 の授業向けに RISC-V へ移植され、現代の教育環境に合わせられた
- ソースとドキュメントは
xv6-riscv、xv6-riscv-bookの Git リポジトリとして提供されており、自分でビルドして読むことができる - 設計と学習の文脈は Unix V6 と John Lions の Commentary on UNIX' 6th Edition に根ざしている
- 元の Unix V6 コードまで併せて読むには、Lions の解説、V6 ソース、PDP11/40 Processor Handbook のような参考資料が役に立つ
Xv6 と 6.1810
- Xv6はシンプルな Unix 風の教育用オペレーティングシステムである
- 2006年夏に開発され、MIT の学部科目 6.1810 向けに RISC-V へ移植された
ソースと学習資料
- 最新の Xv6 ソースは次のコマンドで取得できる
- 最新の Xv6 ドキュメントは別リポジトリとして提供されている
- Xv6 は Unix V6 と John Lions の Commentary on UNIX' 6th Edition に着想を得ている
Unix V6 原典を読むための参考文献
- The PDP11/40 Processor Handbook は元の Unix V6 コードを理解するうえで有用な資料である
フィードバック募集
- Xv6 の使用経験、授業への導入経験、導入を容易にするための改善点、うまく機能した点とそうでなかった点についてのフィードバックを求めている
- 連絡先は
61810-staff@lists.csail.mit.edu
- 連絡先は
1件のコメント
Hacker News のコメント
MITでこの授業を受けたが、20/10でおすすめ。特にシステム系のバックグラウンドがない人に向いている。
教材はかなり理解しやすく、演習は理解度を確認するのにとても良い。ただし最初の挑戦では、ネットワークドライバは飛ばしたほうがいいかもしれない。
MITでこのOSを使う授業を受けたが、本当に素晴らしかった。
今日も授業サイトを見て回ったが、実質的に独学でも受講できる。講義ノート、演習、各演習ごとのブランチがあるxv6リポジトリ、自分で実行する方法まで全部載っていて、公開度の高さに驚くほどだ。
最初の演習: https://pdos.csail.mit.edu/6.1810/2023/labs/util.html
近いうちに全課程をもう一度、自分で最後までやってみるつもり。
大学のOS授業の多くのプロジェクトは、xv6オペレーティングシステム上に何かを作る形だった。
そのうちの1つはxv用スケジューラを作るプロジェクトで、オペレーティングシステムのさまざまな構成要素を学ぶには間違いなく良い方法だった。
スペインのある大学では、Plan 9を教育用に使っていた、または現在も使っている。
タイトルを最初に見たときは、古いxv画像ビューアの新リリースかと思った: http://www.trilon.com/xv/
以前からWindows NTカーネルを理解したいと思っていた。おそらく初期バージョンのほうが単純なので、そちらが良さそう。
最初のバージョンはVMSに近いと聞いたが、本当なのか気になる。VMSの資料があるのかも気になるし、OpenVMSはオープンソースだと聞いたが、バージョンが高すぎるように思う。
Dave CutlerがDEC内部でVMS関連プロジェクトを含む複数のプロジェクトを率いていたのは確かだが、Microsoft New TechnologyカーネルがVMSから受け継いだものは、設計やアーキテクチャ面での精神的な遺産くらいだった。
DaveはDECでチームが追い出される前から、すでにVMSの大規模な刷新、または後継作に取り組んでおり、そのビジョンのかなりの部分はWindowsに移ったが、ミニコンピュータ側の堅牢な設計パターンを犠牲にした面もあった。
CutlerはMSDOSチームを、間違った問題にスパゲッティ式の解決策を積み上げる初心者プログラマたちだと見ていたが、Bill GatesがOEM契約で市場をがっちり押さえていたため、BillはNeXTでSteveが作っていたものと競争できる本物のカーネルを彼に作らせるため、実質的に白紙小切手を渡した。
そのため機能や形態の面でNTはVMSとまったく同じではなく、実装面でもまったく異なる。VMSにはきれいなC標準ライブラリとコンパイラ群があった。ただし、ミニコンピュータ側の人たちがマイクロコンピュータの世界で競争するために降りてきた流れだったとは言える。
さらに詳しい雰囲気は、YouTubeのDave PlummerとCutlerのインタビューを見るとよい。
VMSの資料は非常に多く、もともと数メートル分の文書が付いてきた。今でも販売されており、無料のホビイスト向けVMイメージも入手できる。
OpenVMSはオープンソースではなく、バージョンが高すぎるという話も事実ではない。
質問する前に、前提を常に確認すべきだ。「AだからBが可能なのか?」と聞きたいなら、まずAが真かどうかを確認すべきだ。
なぜUnix v6なのか気になる。なぜ50年前の設計で教えるのか分からない。
オペレーティングシステムの基本であるスケジューリング、プロセス間通信、アドレス空間管理を教えるなら、マイクロカーネル設計のほうが良さそうに思う。
後で新しい技術に触れるときにより深く理解できるし、今後のキャリアでも視野を広げてくれる。
その歴史の一部を見逃した身としては、大学で学べていたら本当に良かったと思う。
十分に良く、単純で、学生が他の科目も履修している1学期の中で教えやすいから選ばれることが多いのだろう。マイクロカーネル設計のほうが良いだけでなく、教えるのもより簡単という意味なのか気になる。
Unix v6の基本的な抽象化は今でも有効だ。
マイクロカーネルとモノリシックカーネルの核心的な違いは、ユーザー空間とカーネルの間でアドレス空間をどう共有するかだが、マイクロカーネル設計がなぜより良いのかよく分からない。広く使われていない設計をなぜ教えるべきなのかも疑問だ。
インターネット上で動く大半のソフトウェアもマイクロカーネル上で動いているわけではなく、インターネットで入手できる大半のソフトウェアも同様だ。そうした授業では、カーネルを扱ったり仕事で出会ったりするカーネルを理解するための準備としては十分になりにくいように思う。
独学する人がこれを実際に触ってみるには、どんなやり方が良いのか気になる。
Plan 9も、理解するにはかなり単純なコードベースだ。
プロセスごとの名前空間、bind、すべてをファイルとして扱う方式は、他のUnix系OSではなかなか見られない優雅さを与えている。
前学期のオペレーティングシステム授業でPintOSを使ったが、もっと深く掘り下げる第2部の授業があればよかった。