OS製作

起動するまでの長い道のり メモリ管理編(4) メモリ管理考察の巻

前回でページング機能を有効にすることまではできた。今回はこれを活用してメモリを管理する部分を考察する。因みに、まだ考察するだけ(汗)。

起動するまでの長い道のり メモリ管理編(3) ページングOnの巻

前回でメモリのどこからどこまで使用可能か分かるようになった。今度は使用可能な範囲のページ・ディレクトリとページ・テーブルを用意していよいよページングをOnにしてみたいと思う。

起動するまでの長い道のり メモリ管理編(2) メモリ・マップ取得の巻

ページングのことを書こうかと思ったが、まずマシンに何MBのメモリが搭載されているのか分からないと始まらない。それに、実はメモリ領域にも使えるところと使えないところがある。そういった情報も必要だ。 今回は、ACPIのファンクションを使ってメモリの領…

起動するまでの長い道のり メモリ管理編(1) ページング概要の巻

またしても再開……。 さて、D言語が普通に動かせるようになった。scope指定をすればクラス・オブジェクトも作れるようになった。 が、まだ動的なメモリ確保やオブジェクト作成ができない。もっと言えば、実行時にサイズが初めて確定するようなデータのメモリ…

起動するまでの長い道のり D言語編(4) 標準ライブラリ格闘の巻(2)

色々あったがようやく再開……。 さて前回で大量のリンク・エラーという壁にぶち当たった。そして、標準ライブラリを移植する必要があると分かった。 今回は、ビルドを通すためにどこをどう移植したかを説明する。はっきりいって不毛なので、読み飛ばしてソー…

起動するまでの長い道のり D言語編(3) 標準ライブラリ格闘の巻(1)

D言語を使って(あれを「使って」と言って良いなら……)、シリアル・ポートを叩くことに成功した。 しかし今のコードはカッコ悪い。IOを直に叩いているだけで、printfでHello,World!するのとあまり変わらない。これから先シリアル・ポートを叩く機会もたくさん…

起動するまでの長い道のり D言語編(2) それとなくシリアル・ポートの巻

D言語の関数を呼び出すことに成功した。これからどんどんD言語で機能を追加していく。 OSを作っている以上、外部デバイスをいじれないとつまらない。画面表示や何かに動いているという証が欲しい。今回は、割合制御が簡単なシリアル・ポートに文字列を出力さ…

起動するまでの長い道のり D言語編(1) 関数呼び出しの巻

不完全ながらプロテクト・モードに移行し、通常の32ビットコードを使う準備ができた。ここでいよいよD言語を導入していくことにする。

起動するまでの長い道のり プロテクト・モード移行編(2) セグメンテーション始動の巻

だいぶ間が空いてしまった(汗)。いよいよ実際にセグメンテーションを動かして、32ビットコードを実行するプロテクト・モードへ移行する。64KBの壁よさらば。今回のソース(setup.s)

起動するまでの長い道のり プロテクト・モード移行編(1) セグメンテーション薀蓄の巻

プロテクト・モードへの移行は起動処理の山場の一つだ。リアル・モードからプロテクト・モードに移って初めて32ビットのコードが動き、64KBの壁を破って4GBまでの全メモリにアクセスできるようになる。 x86系CPUでプロテクト・モードに移行するには、最低限…

起動するまでの長い道のり IPL編(10) qemuモニタリングの巻

カーネルが一括ビルドできるようになった。これで変更を加えてもコマンド一発で最新版が作れる。 だけど、デバッグはどうするのだろうか。文字表示はできるけど、まだ数字やレジスタの値を表示させることはできない。暴走したか単に無限ループで止まっている…

起動するまでの長い道のり IPL編(9) ビルド環境makeの巻

512バイトの制限を超えてカーネルの読み込みができるところまでをやった。これからソースファイルがどんどん増えていくと、ビルドがかなりめんどくさくなる。そこで今回は、makeを使った一括ビルドの方法を解説しようと思う。

起動するまでの長い道のり IPL編(8) カーネル読み込み実装の巻

前回でディスクからのデータ読み込み方法と、その時にぶつかる壁について解説した。今回はいよいよデータの読み込み処理を実装していく。

起動するまでの長い道のり IPL編(7) カーネル読み込みの巻

実は、今まで黙っていたが、起動時のIPLはディスク先頭の512バイト=1セクタしか読み込まれない。1セクタだけだからブートセクタなんて言うのだ。 言うのだ、なんて威張っても仕方ない。OSのカーネルがまさか512バイトに納まるわけはないので、残りの部分を…

起動するまでの長い道のり IPL編(6) 続CPU解説の巻

今回はセグメンテーションと割り込みテーブルについて。でも多分あんまり詳しくやらない。できないから(笑)。 しかしいつになったらD言語が出てくるんだろう……プロテクトモードに行くようになったら出てくるはずなので乞うご期待!

起動するまでの長い道のり IPL編(5) CPU解説の巻

前回まで実際のソースコードを元に不器用に説明したけど、いい加減CPUの説明抜きで話を進めるのが非常に辛いと分かったので、必要最低限解説しておこうと思う。

起動するまでの長い道のり IPL編(4) 続アセンブラ解説の巻

前回まででセグメントを設定するところまでは説明した。いよいよメッセージ表示の部分について説明する。

起動するまでの長い道のり IPL編(3) アセンブラ解説の巻

ひたすら打つべし! 打つべし! だったアセンブラのソースについていい加減解説する。

起動するまでの長い道のり IPL編(2) 文字表示の巻

前回でとりあえず起動するまではできた。だが、前回のコードでは、プログラムの部分が無限ループするだけで何もしない。せめて起動したというメッセージくらいは表示させて、俺はマジで本当に起動したのだということを主張させたい。そのためには、恐怖のア…

起動するまでの長い道のり IPL篇(1) ディスクイメージ作成の巻

PC/ATマシンで動くOSを作る場合、PC/ATでのOS起動規格に則ってブートセクタ等を用意しなければならない。

起動するまでの長い道のり 前置き篇

なんだかとても間が空いてしまった。色々忙しかったせいもあるけれど、それ以上に起動する部分で色々詰まってしまっていた。今日ようやく、FDからカーネルイメージを読み込み、D言語のクラスを使ってシリアルポートに文字を出力するところまで到達した。D言…

なぜD言語?

大事なことをまだ書いていなかった。なぜD言語を使うのか。――前置きばかりで全然製作に入っていないじゃないかとうんざりする人もいるかもしれない。でも読んでいる人なんてまだ誰もいないだろうからいいや。

情報を集める

OSを作るためには、プラットフォームとなるアーキテクチャに関する情報が必要だ。Webだけじゃなくて書籍からも積極的に情報を集めると良いような気がする。

ツールを集める

1からOSを作る場合にもとりあえずツールがいる。私は残念ながら普段Windowsユーザなので、Windowsで使えるツールを中心に集める。マシンと通信料以外にお金は掛からないので安心して欲しい。ただし時間は掛かるかもしれない。

なぜOS?

WindowsもMacOS XもそしてLinuxもある時代、どうしてまたOSなんか自作するのか。最近はOS製作が流行ってきて理解されつつあるけど、やはり「日曜大工が趣味で、ピラミッド作ってます!」と言うぐらいの滑稽さは感じられるかもしれない。 でもOSを作ることで…

D言語でOSを作る

いまD言語(GDC)でOSを作ろうとしている。ついさっき思いついたわけではなくて、2年くらい前からずっと考えている。D言語の本家ニュースグループでOSカーネルらしきソースの投稿を見かけてから、自分でも作れるかもしれないと思った。 自作カーネル(というかI…