{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/4873117127-implementation","result":{"data":{"markdownRemark":{"id":"1a9d345d-de8e-56e0-a0db-2a409314f857","html":"<p>『ゼロからのOS自作入門』の実装を完走したので、やってみた感想や、完走するための自分なりのポイントをまとめました。</p>\n<h2 id=\"書籍『ゼロからのos自作入門』とは\" style=\"position:relative;\"><a href=\"#%E6%9B%B8%E7%B1%8D%E3%80%8E%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AEos%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%8F%E3%81%A8%E3%81%AF\" aria-label=\"書籍『ゼロからのos自作入門』とは permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>書籍『<a href=\"https://amzn.to/3Rq6mHK\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ゼロからのOS自作入門</a>』とは</h2>\n<p><a href=\"https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AEOS%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80-%E5%86%85%E7%94%B0%E5%85%AC%E5%A4%AA-ebook/dp/B08Z3MNR9J?_encoding=UTF8&qid=1657445254&sr=8-1&linkCode=li3&tag=oshimayuki0d-22&linkId=dd467f6dec22daf0b3ac7dbc5ff74fd4&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08Z3MNR9J&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=oshimayuki0d-22\" ></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=oshimayuki0d-22&amp;l=li3&amp;o=9&amp;a=B08Z3MNR9J\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\"></p>\n<p>『ゼロからのOS自作入門』はタイトル通り、OS をゼロから作っていく書籍です。</p>\n<p>2021 年 3 月に発売されており、2021 年かなり話題だったと思います。</p>\n<h2 id=\"前提\" style=\"position:relative;\"><a href=\"#%E5%89%8D%E6%8F%90\" aria-label=\"前提 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>前提</h2>\n<p>さて、今回この本の OS (MikanOS) の実装に挑戦してみたのですが、私は実はこの本自体はすでに一周読んでいました。</p>\n<p>最初に実装なしで読んだときの感想については、「<a href=\"https://www.kanzennirikaisita.com/posts/4839975868\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">『ゼロからのOS自作入門』を読みました【感想・難しいと感じる方にオススメの事前準備】</a>」という記事にまとめてあります。</p>\n<p>読むだけでも色々と勉強になっていたものの、実装してみないと分からないことも色々あるだろうと思い、今回実装に挑戦しました。</p>\n<h2 id=\"感想\" style=\"position:relative;\"><a href=\"#%E6%84%9F%E6%83%B3\" aria-label=\"感想 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>感想</h2>\n<p>それでは、ここから実装してみての感想を書いていきます。</p>\n<h3 id=\"os-を作った達成感は大きい\" style=\"position:relative;\"><a href=\"#os-%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F%E9%81%94%E6%88%90%E6%84%9F%E3%81%AF%E5%A4%A7%E3%81%8D%E3%81%84\" aria-label=\"os を作った達成感は大きい permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>OS を作った達成感は大きい</h3>\n<p>実装してみて何より一番大きいのは、「OS を作った」という達成感があることです。</p>\n<p>多くの方が想像している通りだと思いますが、OS の自作は楽ではなかったです。</p>\n<p>その分、実際に作ってみた達成感は大きいですし、分かるようになったことも色々とあります。</p>\n<h3 id=\"感動ポイントがたくさんある\" style=\"position:relative;\"><a href=\"#%E6%84%9F%E5%8B%95%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%81%8C%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E3%81%82%E3%82%8B\" aria-label=\"感動ポイントがたくさんある permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>感動ポイントがたくさんある</h3>\n<p>OS の実装を進めていると、感動するポイントがいくつもあります。</p>\n<p>例えば、</p>\n<ul>\n<li>Hello World</li>\n<li>マウス操作</li>\n<li>ウインドウのドラッグ操作</li>\n<li>キーボード入力</li>\n<li>コンテキストスイッチ (プリエンプティブマルチタスク)</li>\n<li>ターミナルから外部コマンド (ELF ファイル) を実行</li>\n</ul>\n<p>などです。</p>\n<p>たしかに感動しそうだと思われるかもしれませんが、実際に実装してみると想像以上に大きな感動でした。</p>\n<p>また、個人的には第 27 章の「アプリのメモリ管理」が特に好きで、</p>\n<ul>\n<li>デマンドページング</li>\n<li>メモリマップドファイル</li>\n<li>コピーオンライト</li>\n</ul>\n<p>などの少し発展的な機能がこんなに普通に実装できるんだと感動しました。</p>\n<h3 id=\"os-以外の勉強にもなった\" style=\"position:relative;\"><a href=\"#os-%E4%BB%A5%E5%A4%96%E3%81%AE%E5%8B%89%E5%BC%B7%E3%81%AB%E3%82%82%E3%81%AA%E3%81%A3%E3%81%9F\" aria-label=\"os 以外の勉強にもなった permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>OS 以外の勉強にもなった</h3>\n<p>MikanOS の実装を進める中で、OS の勉強になったのはもちろんですが、関連して</p>\n<ul>\n<li>C 言語や C++</li>\n<li>ELF やローダー</li>\n</ul>\n<p>などの知識も得られました。</p>\n<p>個人的に C++ を学びたいと思っていたので、練習の題材としても良かったです。</p>\n<p>当然ですが、OS の勉強としてもこの上ないほど良かったです。</p>\n<h2 id=\"完走するための自分なりのポイント\" style=\"position:relative;\"><a href=\"#%E5%AE%8C%E8%B5%B0%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E8%87%AA%E5%88%86%E3%81%AA%E3%82%8A%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88\" aria-label=\"完走するための自分なりのポイント permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>完走するための自分なりのポイント</h2>\n<p>それではここから、自分なりに完走するためのポイントだと思うことを書いていきます。</p>\n<h3 id=\"理解できない点があっても一旦先に進む\" style=\"position:relative;\"><a href=\"#%E7%90%86%E8%A7%A3%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E7%82%B9%E3%81%8C%E3%81%82%E3%81%A3%E3%81%A6%E3%82%82%E4%B8%80%E6%97%A6%E5%85%88%E3%81%AB%E9%80%B2%E3%82%80\" aria-label=\"理解できない点があっても一旦先に進む permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>理解できない点があっても一旦先に進む</h3>\n<p>この本を読みながら実装していても、よく理解できない点がある程度出てくるかもしれません。</p>\n<p>OS の実装はただでさえボリュームが大きいので、よく分からなかった点も一旦飲み込んで実装を進めてみると良いと思います。\n(もちろん、なんとかして理解できるよう調べたりしてみるのも良いと思います)</p>\n<p>自分の場合も、特に</p>\n<ul>\n<li>UEFI 関連</li>\n<li>セグメンテーションの設定</li>\n<li>階層ページング構造の設定</li>\n</ul>\n<p>などについては、かなり理解が浅いですが、ここをしっかり理解するには自分でゼロから (本の通りではない) OS を作るのが良さそうだと考えて、先に進みました。</p>\n<h3 id=\"全然分からない場合は、前提知識をつけて再挑戦する\" style=\"position:relative;\"><a href=\"#%E5%85%A8%E7%84%B6%E5%88%86%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81%E5%89%8D%E6%8F%90%E7%9F%A5%E8%AD%98%E3%82%92%E3%81%A4%E3%81%91%E3%81%A6%E5%86%8D%E6%8C%91%E6%88%A6%E3%81%99%E3%82%8B\" aria-label=\"全然分からない場合は、前提知識をつけて再挑戦する permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>全然分からない場合は、前提知識をつけて再挑戦する</h3>\n<p>一部理解できないというよりも、全体的に全然よく分からないという場合もあると思います。</p>\n<p>よく分からないまま写経するのもある程度勉強になりますし、動作する様子のを見るのは楽しいですが、前提知識をつけるとより楽しめると思います。</p>\n<p>「<a href=\"https://www.kanzennirikaisita.com/posts/4839975868\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">『ゼロからのOS自作入門』を読みました【感想・難しいと感じる方にオススメの事前準備】</a>」という記事にも書きましたが、</p>\n<ul>\n<li>C 言語の基礎</li>\n<li>CPU の仕組みの概要</li>\n<li>OS の基礎</li>\n</ul>\n<p>の知識があると、理解度が一気に高くなります。</p>\n<p>特に OS に関して、</p>\n<ul>\n<li>『<a href=\"https://amzn.to/3crcUTQ\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識</a>』</li>\n<li>『<a href=\"https://amzn.to/3ggv3oz\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道</a>』</li>\n</ul>\n<p>の 2 冊を読んでおくのが非常にオススメです。</p>\n<p><a href=\"https://www.amazon.co.jp/dp/B079YJS1J1/ref=as_li_ss_il?ie=UTF8&linkCode=li1&tag=oshimayuki0d-22&linkId=766bf5a26e5668093829305b932d382c&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B079YJS1J1&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=oshimayuki0d-22&language=ja_JP\" ></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=oshimayuki0d-22&amp;language=ja_JP&amp;l=li1&amp;o=9&amp;a=B079YJS1J1\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\"></p>\n<p><a href=\"https://www.amazon.co.jp/dp/B075ST51Y5/ref=as_li_ss_il?ie=UTF8&linkCode=li1&tag=oshimayuki0d-22&linkId=6e34b0c75aa1195be3fdbc43945886e1&language=ja_JP\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B075ST51Y5&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=oshimayuki0d-22&language=ja_JP\" ></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=oshimayuki0d-22&amp;language=ja_JP&amp;l=li1&amp;o=9&amp;a=B075ST51Y5\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\"></p>\n<h3 id=\"起動手順をスクリプト化する\" style=\"position:relative;\"><a href=\"#%E8%B5%B7%E5%8B%95%E6%89%8B%E9%A0%86%E3%82%92%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E5%8C%96%E3%81%99%E3%82%8B\" aria-label=\"起動手順をスクリプト化する permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>起動手順をスクリプト化する</h3>\n<p>これは細かいテクニック的な話になりますが…</p>\n<p>MikanOS の実装をやり遂げるには、ある程度長い日数がかかります。</p>\n<p>途中で数日・数週間と時間が空いてしまう場合もあるかもしれません。</p>\n<p>MikanOS を起動するにはいくつかのコマンドを実行する必要があり、それらを毎回思い出して入力するのは大変です。</p>\n<p>そういった手順はスクリプト化したりすることで、実装に取り組むハードルを下げましょう。</p>\n<h3 id=\"筆者のコードを確認できるようにする\" style=\"position:relative;\"><a href=\"#%E7%AD%86%E8%80%85%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B\" aria-label=\"筆者のコードを確認できるようにする permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>筆者のコードを確認できるようにする</h3>\n<p>当たり前ではありますが、OS のデバッグは非常に大変です。</p>\n<p>エラーが起こったとき、根本原因が簡単には分からないことも多いです。</p>\n<p>自力でデバッグするのが一番ではありますが、MikanOS の実装はボリュームも大きいため、自力でのデバッグにばかり時間を割いていると大変です。</p>\n<p>そこで、筆者のコードを確認する環境を整えることをおすすめします。</p>\n<p>困ったときは、筆者のコードの 2 つの時点の差分を確認したり、自分のコードとの差分を確認したりしてみましょう。</p>\n<p>なお、筆者のコードについては、以下の Issue で指摘されている箇所以外は、私が見た範囲では全て動作しました。</p>\n<ul>\n<li><a href=\"https://github.com/uchan-nos/mikanos/issues/36\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">[day15b] OS起動後にTaskBWindowが一瞬表示されすぐ消える #36</a></li>\n</ul>\n<h3 id=\"熱意を持つ・時間を確保する\" style=\"position:relative;\"><a href=\"#%E7%86%B1%E6%84%8F%E3%82%92%E6%8C%81%E3%81%A4%E3%83%BB%E6%99%82%E9%96%93%E3%82%92%E7%A2%BA%E4%BF%9D%E3%81%99%E3%82%8B\" aria-label=\"熱意を持つ・時間を確保する permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>熱意を持つ・時間を確保する</h3>\n<p>最後のポイントとして、完走するために一番重要なのは、「OS を作りたい」という熱意だと思います。</p>\n<p>この本に従って OS を実装することは、<strong>難しいというよりも大変 (熱意や時間が必要)</strong> です。</p>\n<p>自分の場合、2022 年 3 月 8 日に取り組み始めて、実装完了したのが 2022 年 7 月 10 日と、4ヶ月ほどかかりました。</p>\n<p>実際のペースとしては、</p>\n<ul>\n<li>3 月 … day01-day02</li>\n<li>4 月 … day03-day04</li>\n<li>5 月 … day05-day07</li>\n<li>6 月 … day08-day10</li>\n<li>7 月 … day11-day30</li>\n</ul>\n<p>といったぐらいでだいぶ偏りがあり、7 月になって時間をとれたので一気に進めましたが、当初のペースでは 1 年近くかかったかもしれません。</p>\n<p>OS 自作に着手する前に、『<a href=\"https://amzn.to/3yTJHMM\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方</a>』(通称: Nand2Tetris) で CPU やコンパイラの実装をしたこともありますが、OS 自作のほうが遥かに時間がかかりました。</p>\n<p><a href=\"https://www.amazon.co.jp/dp/4873117127?&linkCode=li1&tag=oshimayuki0d-22&linkId=0ffd93df64e8701c5193192661ee4a36&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4873117127&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=oshimayuki0d-22\" ></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=oshimayuki0d-22&amp;l=li1&amp;o=9&amp;a=4873117127\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\"></p>\n<p>長期間かかるほど過去の内容を忘れやすくなるので、ある程度まとまった時間をとって取り組んだほうが、ゴールしやすいと思います。\n(そういう意味では、学生のうちにやっておくと良いと言われたりするのはよく分かります)</p>\n<h2 id=\"おわりに\" style=\"position:relative;\"><a href=\"#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB\" aria-label=\"おわりに permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>おわりに</h2>\n<p>以上、MikanOS を実装しての感想や自分なりのポイントを書いてきました。</p>\n<p>自分はこの実装を終えて、いわゆる低レイヤ関係でもっと色々作ってみたいと思いました。</p>\n<ul>\n<li>C++ でちょっとしたツールを作ってみる (ELF パーサやリンカ・ローダに興味あり)</li>\n<li>CLI (GUI なし) のみの OS を作ってみる</li>\n<li>デバイスドライバを作ってみる</li>\n<li>改めて Linux について勉強してみる</li>\n</ul>\n<p>などなど、今後もやっていこうと思います。</p>\n<p><a href=\"https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AEOS%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80-%E5%86%85%E7%94%B0%E5%85%AC%E5%A4%AA-ebook/dp/B08Z3MNR9J?_encoding=UTF8&qid=1657445254&sr=8-1&linkCode=li1&tag=oshimayuki0d-22&linkId=a29a66d9a8bfeba74f48782bea6f5758&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08Z3MNR9J&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=oshimayuki0d-22\" ></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=oshimayuki0d-22&amp;l=li1&amp;o=9&amp;a=B08Z3MNR9J\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\"></p>","fields":{"slug":"/posts/4873117127-implementation","tagSlugs":["/tag/os/"],"autoRecommendPosts":["4839975868","4877832394","linux-learning-roadmap","cpu-books"]},"frontmatter":{"date":"2022-07-10T11:41:32.724Z","description":"『ゼロからのOS自作入門』の実装を完走したので、やってみた感想や、完走するための自分なりのポイントをまとめました。","tags":["os"],"title":"【感想】『ゼロからのOS自作入門』の実装を終えて","socialImage":null,"recommendPosts":null}}},"pageContext":{"slug":"/posts/4873117127-implementation"}},"staticQueryHashes":["251939775","3942705351","401334301"]}