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: コード内の名前つきマーカーです。