本当に30日で自作OSに入門可能なのか検証記録

この記事は自作OS Advent Calendar 2018の21日目の記事です。

こんにちは、hiroyukimです。自作OS超初心者枠で書いています。前々からOSは興味がありつつ忙しさにかまけてLinux Programming Interfaceとか読んでシステムコール越しに触れるとかしかしてなかったので、「30日で出来る自作OS入門」を30日で出来るのかやってみました。結論から言うと色々忙しすぎて最後の3日ぐらいは手を付けられませんでした。

ただですね、タイトルにあるように入門は可能だと思います。エミュレータからの起動、バイナリエディタでのマシン語アセンブラ、CPUの各種機能とそれをどう使うかの解説。低レイヤーを知りたいが手を出す機会がないと考えている人がいるなら是非読むべきだと思いました。もちろん1周廻っただけで完全に理解したとも思ってはいないし、他の環境で作れますかと言われれば厳しいですが、このまま自作OS方面を文字通りこの本を入門として深掘りしていけばどこかでそうなれるんじゃ無いかなと思わせてくれる良書でした。

以下は、自分なりに興味のある部分の感想等を書いてみました。基本的にウインドウ周りよりはエミュとかアセンブラ周りに興味が集中していたので前半が多いのですが。

QEMUというエミュレータ。前々から存在は知っていたのですが、本格的に意識して見たのは初めてです。本家のサイトを見に行くとthe FAST! processor emulator と書かれていますね(関係ないのですが、いまQEMUのサイトを覗いたらqemu-advent-calendarというものがありました)。 本の中ではcpuのエミュレータを使ってその上でOSのimgを動かすということをしていました。

naskというアセンブラ。これ、すごく嬉しくて今までアセンブラを学んでも使う機会が全くといって良いほど無かったので、具体的にOSを作るという目的でアセンブラのコードをいじれたのはテンションが上がりました。 しかも、ORG命令、JMP命令、レジスタとか言った物がどういう代物で何のために使うのかという解説がひたすらされてるんですよ。OSの勉強をしてると思ったらCPUとアセンブラの姿が頭に浮かんできて、これが自作OSを学と言うことかと感動しました。 あとは、昔から知識としては知っていたのだけど、CPUの16bitモードと32bitモードの話はも良かったです。( BIOSが16ビット用の機械語で書いてあるので32bitからは利用できないとか)

この本読んでいると、C言語というかコンピュータ言語の本来の姿が、アセンブラ機械語へ変換するための記法なんだなというコトが浮かび上がってきて、高いレイヤーにいると意識しづらい所なので いいですね。

マルチタスク。これの実現方法がタスクスイッチ。戻ってきたときに処理が再開出来るようにレジスタの値をメモリに書き込む処理。再開するときはメモリからレジスタに読み込とか。この辺でETPとか出てきて、これはこういう風に使うんだなと思いながらやってました。

あとは、どのセクタから読み出すとか、mallocとか、VRAM、メモリ管理とか1個づつ、現代ではどうなっているのかとか、一般的なOSはどうやっているのかとか無限に深掘り出来そうな内容が多かったです。まだ読んでない方是非読まれることをおすすめします。

あと、この場を借りて、お礼を言っておきたいのですが、Mac環境の整備を行っている方々がいらっしゃいましてこれらの成果を受け取ることが出来たのでなんとか進めることが出来ました。ありがとうございます。アセンブラ系の10年ほど前の本を読んだことあると分かると思いますが、少し昔の本だと環境構築をすることそのものが恐ろしく手間かそもそも同一環境を手に入れることがかなり厳しいことがある中で、2018年現在でも動作できる環境があることに驚きました。本自体が名著でファンが多い故と思われます。

最後に、カレンダー投稿機会を提供してくれたuchanさんありがとうございました。

30日でできる! OS自作入門

30日でできる! OS自作入門