os%e8%87%aa%e4%bd%9c

自作OSもくもく会

ついに行ってきました! 張り切りすぎて(?)前日にサイボウズさんのビルの目の前まで行って 下見を済ませたくらいだったので当日はとってもスムーズに行くことが出来ました😃 とりあえず 『macOS上で緑本をやってみました』 系の記事を探して、取り掛かろうかなぁ。なんて考えていましたが Kindleで探したら 「30日でできる!OS自作入門」 の、6日目くらいまでは無料サンプルでいけそうだったので 6日目まで続いたら買おう😃 と、いうことでKindle版をDLして進めることにしました。 そしてmacOS上で自作するための開発環境も GitHub上に上がっているのを見つけました! 『30日でできる! OS自作入門』のmacOS開発環境構築 こちらの開発環境でOSを起動させてみました。 あと、結構参考になるお勧め記事がこちらです。 http://electricsheep.hatenadiary.jp/entry/2019/09/23/103235 また、手前味噌ですが より簡易的なOSを自作したblogがこちらになります。 (内容的には緑本の2~3日目くらいまでだと思います) https://wp.suwa3.me/2019/12/14/os%e8%87%aa%e4%bd%9c/ 以下読書感想文なのですが レジスタは機械語ににおける変数のようなもので、CPUにとってメモリは外部記憶装置にあたるが、CPUのコアに内蔵されている記憶回路はレジスタしかない。 OS自作入門 というのを読んで目から鱗でした。 以前、簡易的なOS自作をしたさいにまとめた自分のレジスタについての説明も読み返したけれども 「レジスタ: CPU内の記憶装置です。それぞれに役割があり〜」 と、書かれていて 「そうだけど..うーん」 となる感じ。 説明的には正しいけれども、腹の底からわかってはいないのでは? と、過去の自分に突っ込みたくなるときあるあるって感じでした。 OS屋にとっては、ソースプログラムなんて、結局は機械語を得るための「手段」であって目的ではないのです。 OS自作入門 外側から見るか内側から見るかなのかなぁ。 プログラマは世の中の営みを抽象化してプログラミングというツールをつかい落とし込むけれども OS屋はそこから低レイヤーになって、視点が一つ下の層に移動した感覚があるのかな?と、感じました。 自分が普段扱っているコンピューターについて向き合いながら 少しずつでも知ることができて嬉しいです。

OS自作

かねがねOSの自作をしてみたいなと思っていたので まずは簡易的なOSの実装にチャレンジしてみました。 OSを自作したいと感じたきっかけというか、経緯を簡単に書きたいと思います。 以前参加したOSCにて、サイボウズさんがブース出展をされていて そのブースには何冊か本が並べてあったのですが たまたま手にとった本が川合秀実さんのOS自作入門でした。 「うちの社員が書いた本です。初見でそれを手に取るのですねぇ」 と、話しかけて頂いて OSについて知りたいというよりは (表紙デザインの猫が可愛らしいな) と思って手にとったので その感想をそのまま正直に伝えつつ、本の中身をしばらく見ているうちに コンピューターの内部について知るためにも いつかOSを書いてみたいなぁ と、ふんわり考えるようになりました。 今回の内容は、書籍を参考にOS自作を始める前段階として 取っ掛かりになるような、もっとハードルの低いものから徐々に機能を追加していきたいなぁという気持ちがあり ちょうど手頃なチュートリアルを見つけたので、試してみたものを簡単な解説とともに作業ログ的にまとめました。 主に参考にした記事です OSを書く:初歩から一歩ずつ | POSTD 実行環境を整える まず、実行環境ですが Macbookにnasmとmakeとqemu をインストールします。 ※DockerやVMなどを用いてローカル環境を汚さずに行うことも可能です。 ただ今回の内容程度であれば、特に問題ないと判断しました。 今後、自作OSを続けたい場合はgit管理などで仮想マシンへの移動をスムーズにすると良いかもしれません。 $ brew install nasm $ brew install make $ brew install qemu nasm: アセンブラです。機械が理解できる命令プログラム(アセンブリコード)を機械が理解できる命令(バイナリコード)に置き換えてコンピューターが実行できるようにします。 make: コンパイルを自動化するツールです。 qemu: キューエミューと読みます。自作したOSは、このエミュレーターを介して実行されます。いわゆる仮想マシンです。 コンピューターの起動 コンピューターが起動してからの処理について わかりやすい概要を見つけたので記載します。 0から作るOS開発 電源ボタンをONするとまずBIOS(BasicInputOutputSystem)が動き出します。BIOSはその名の通り基本的な(Basic)入力(Input)と出力(Output)を制御するハードウェアとソフトウェアのシステム(System)です。(このあたりは別に読み飛ばしても問題ありません)。BIOSが動き出すとPOST(PowerOnSelfTest)と呼ばれている処理を行います。POST処理では接続されたデバイスのチェック・初期設定、メモリーのチェックを行って正常にシステムが起動できるかどうかをチェックします。起動できると判断すると次にブートローダーまたはOSをメモリーにロードします。ブートローダーまたはプログラムがロードされた後にそのプログラムが様々な処理を簡単に行えるように、BIOSは入出力デバイスの操作をプログラムから利用できるインターフェースを用意しています。 0から作るOS開発 vol.0 MBR(マスターブートレコード)の容量には上限があり、それを解決するためにブートローダーが用いられます。今回作成するOSはとてもシンプルなため、ブートローダを使用してさらにコードをロードすることはありません。 アセンブリコードを書いてみる 実際にアセンブリコードを書いてみます。 $ vi boot.asm ; boot.asm hang: jmp hang times 510-($-$$) db 0 ; This is a comment db 0x55 db 0xAA hang: コード内の名前つきマーカーです。