この記事は 自作OS Advent Calendar 2020 - Adventar の4日目の記事です。
自分が今まで読んできた本や資料の中で、自作OSに役に立ったなと思ったものを紹介します。
書籍編
30日でできる!OS自作入門
紹介するまでもない有名な本です。 この本で自分は自作OSを始めました。 試行錯誤の過程を踏みながら、最後には立派なOSが出来上がります。
12ステップで作る組込みOS自作入門

- 作者:坂井 弘亮
- 発売日: 2010/05/01
- メディア: 単行本
こちらはH8マイコン上で動く自作OSを作ります。 x86_64でスレッドのコンテキストスイッチを実装する際に参考になりました。
Xinuオペレーティングシステムデザイン 改訂2版

Xinuオペレーティングシステムデザイン 改訂2版 (アスキードワンゴ)
- 作者:Douglas Comer,神林 靖
- 発売日: 2020/03/04
- メディア: Kindle版
現実の製品でも使われているXinuと呼ばれるオペレーティングシステムを、ソースコードレベルで解説したものです。 排他制御の実装が記載されている貴重な本です、自分もこの本を参考にセマフォを実装しました。 またコーディングルールなども簡単に解説されていて、統一感のあるきれいなソースコードだなと思いました。 アーキテクチャはx86とArmに対応しているので、複数アーキテクチャに対応したい際にも参考になりそうです。 特におすすめです。
リンカ・ローダ実践開発テクニック

リンカ・ローダ実践開発テクニック―実行ファイルを作成するために必須の技術 (COMPUTER TECHNOLOGY)
- 作者:坂井 弘亮
- 発売日: 2010/08/01
- メディア: 単行本
ELFについて詳しく書かれた本です。 ブートローダやプログラムローダ、リンカスクリプトを書く際に大変参考になります。
低レベルプログラミング

- 作者:Igor Zhirkov
- 発売日: 2018/01/19
- メディア: Kindle版
x86_64アーキテクチャ上で自作OSをするなら読むといい本です。 低レイヤを広く取り扱っている(OSだけでなくバイナリ形式なども)ので、ざっと眺めておくと低レイヤでの地雷を回避できる確率が上がります。
Linuxのブートプロセスをみる
Linuxがgrubからブートする様子をソースコードを追って見ていく本です。 x86_64で64bitモードまで上げる際の呪文などが乗っているので、初期化処理を書く際に役立つでしょう。 Linuxの勉強にもなります。
web編
Intel SDM
何回も読むことになるマニュアルです。 これを読めばCPUの仕様はだいたい乗ってます。
osdev.org
自作OSを作る際の情報が英語でまとまっています。 大変参考になるサイトですが、たまに動かないサンプルコードが混じっているので注意。
osdev-jpのwiki
こちらは日本語で自作OSを作る上での情報がまとまっています。 なおosdev-jpはslackやメーリスなどもあります。
resea.org
nutaさんという方が作っているマイクロカーネルのページです。 reseaは本当にきれいに設計されており、ドキュメントがしっかりまとまっているので大変参考になります。
オペレーティングシステムⅡのページ
筑波大学のオペレーティングシステム2という授業のページです。 Linuxカーネルをコードリーディングしています。 実際にデータ構造を設計したりする際に参考になるかと思います。
QEMUのソースコード
なにかデバイスの挙動がわからないときに使えるかもしれないQEMUのソースコードです。 自分はAHCIを調査する際に(先輩に助けてもらいながら)読みました。 ただあまり細かい部分やマイナーなデバイスは雑なエミュレーションをしている可能性があるのでそこは注意してください。
他にもまだまだありますが
とりあえずパッと思いつくのを上げてみました。 これもいいよ!というものがあったらコメントなどで教えてください。