Skip to content

OS ほんのちょっとだけ分かるための JOS

Published: at 09:27

修論を書き終えたあたりから、春休みに何をするか考えていた。4月からソフトウェアエンジニアとして働き、主にインフラの仕事をする予定だったので、まとまった時間が必要かつ将来役に立ちそうなことを考えた。

ちょうどその頃に turingcomplete.fm を聞いて、OS を学びたい気持ちになった。そうして始めたのが MIT の 6.828: Operating System Engineering の授業である。JOS という xv6 ライクな小さい x86 OS のスケルトンが用意されており、必要な部分を実装していくことが課題である。シェルの動作までを完成させた後、最終課題としてパケット送受信かオリジナル機能を実装して終了ということになっている。

選択した理由

30日OS本も検討していて図書館で借りた。書くべきコードはインターネットですべて入手可能だったため、本を眺めてなんとなく分かった気持ちになって終わる予想ができた。とにかく手を動かしたほうが絶対いいという確信があった。一方 JOS は、OS の動作原理を学ぶものなので、ハードウェアに近い部分の実装は与えられ、Operating Systems Engieering の文脈で重要だとされる部分に集中でき、かつ手を動かす必要がある。まさに自分の求めている題材だと感じた。課題にはテストケースが付属しており、実装が正しいかどうかはある程度確認できることも良い。OS を自作したいというより OS を学びたい気持ちが強かった。

目的

必要が生じた時に Linux のソースコードの該当部分を探して、その内容を理解できるように OS の知識を体系的に得ること

学べたこと

3/31 までに Lab 5 までを終えた時点で挙げた (粒度は雑)。作業ログ

x86 OS

Lab 1: Booting a PC

Lab 2: Memory Management

Lab 3: User Environments

Lab 4: Preemptive Multitasking

Lab 5: File System, Spawn and Shell

プログラミング技術

学ばなかった (知らなくても課題は解ける) こと

詳しく知りたくなったこと

感想

実際に手を動かしていくと、コードとの対応も取れ理解が進むように思えた。学びたい気持ちはあるけど題材がない場合、このような教材を使って無理やり学ぶという選択肢もアリだなと思った。

特にメモリ管理が勉強になった。元々多少は知識があったが、取り組む前と後では理解度が全然違った気がする。 次は Linux のどこか、もしくは xv6 を読んでみようと思う。