2007-01-01から1年間の記事一覧
前回でページング機能を有効にすることまではできた。今回はこれを活用してメモリを管理する部分を考察する。因みに、まだ考察するだけ(汗)。
前回でメモリのどこからどこまで使用可能か分かるようになった。今度は使用可能な範囲のページ・ディレクトリとページ・テーブルを用意していよいよページングをOnにしてみたいと思う。
新潟県柏崎へ災害ボランティアに行ったりしていて更新が滞っていました(汗)。さて、秘密プロジェクトが見事に失敗したのでお知らせします。実は、D言語でOS開発プロジェクトをあのIPA未踏ユースに提案していたのでした。で、今日正式に非採択通知が送られ…
ページングのことを書こうかと思ったが、まずマシンに何MBのメモリが搭載されているのか分からないと始まらない。それに、実はメモリ領域にも使えるところと使えないところがある。そういった情報も必要だ。 今回は、ACPIのファンクションを使ってメモリの領…
またしても再開……。 さて、D言語が普通に動かせるようになった。scope指定をすればクラス・オブジェクトも作れるようになった。 が、まだ動的なメモリ確保やオブジェクト作成ができない。もっと言えば、実行時にサイズが初めて確定するようなデータのメモリ…
ひみつプロジェクトの関連でまたしばらく潜伏します……。
色々あったがようやく再開……。 さて前回で大量のリンク・エラーという壁にぶち当たった。そして、標準ライブラリを移植する必要があると分かった。 今回は、ビルドを通すためにどこをどう移植したかを説明する。はっきりいって不毛なので、読み飛ばしてソー…
実は先の方が詰まっていて更新が滞っています……。 標準ライブラリ移植は実際ソースもあるし、さらに言えばコピペばっかりで特に書くようなことをしてないし(爆)、どうでもいいのですが、実はこの先にページング・メモリ管理・割り込み処理が待ち受けていて…
D言語を使って(あれを「使って」と言って良いなら……)、シリアル・ポートを叩くことに成功した。 しかし今のコードはカッコ悪い。IOを直に叩いているだけで、printfでHello,World!するのとあまり変わらない。これから先シリアル・ポートを叩く機会もたくさん…
D言語の関数を呼び出すことに成功した。これからどんどんD言語で機能を追加していく。 OSを作っている以上、外部デバイスをいじれないとつまらない。画面表示や何かに動いているという証が欲しい。今回は、割合制御が簡単なシリアル・ポートに文字列を出力さ…
不完全ながらプロテクト・モードに移行し、通常の32ビットコードを使う準備ができた。ここでいよいよD言語を導入していくことにする。
だいぶ間が空いてしまった(汗)。いよいよ実際にセグメンテーションを動かして、32ビットコードを実行するプロテクト・モードへ移行する。64KBの壁よさらば。今回のソース(setup.s)
プロテクト・モードへの移行は起動処理の山場の一つだ。リアル・モードからプロテクト・モードに移って初めて32ビットのコードが動き、64KBの壁を破って4GBまでの全メモリにアクセスできるようになる。 x86系CPUでプロテクト・モードに移行するには、最低限…
ここまでのソースコードをSourceforge.jpのSVNリポジトリにアップロードしました。 プロジェクト・ページ SVNリポジトリ 最新版がtrunk以下に入っています。またtags以下には、日記の各日付に対応したソースコードが入っています。 ビルド方法やライセンスは…
というわけで明日から更新再開します。ソースコードとかをsourceforgeプロジェクトにアップするかもしれません。きっとライセンスはNYSLでD言語で普通のOSを実装していくと思います。D言語ってOS書くための言語なんだね! という誤解を広めたいです(爆)。…
2日くらい外出するので、コメントや更新が停止します。
カーネルが一括ビルドできるようになった。これで変更を加えてもコマンド一発で最新版が作れる。 だけど、デバッグはどうするのだろうか。文字表示はできるけど、まだ数字やレジスタの値を表示させることはできない。暴走したか単に無限ループで止まっている…
512バイトの制限を超えてカーネルの読み込みができるところまでをやった。これからソースファイルがどんどん増えていくと、ビルドがかなりめんどくさくなる。そこで今回は、makeを使った一括ビルドの方法を解説しようと思う。
サイドバーにブックマーク表示追加 本サイトのネタ元がほぼ網羅されているので是非読もう。 スタック・セグメントの指定が間違っていたのを修正 0x0100にしなければいけないところが0x1000になっていた(汗)。 再修正。スタック・セグメントは0x0000のまま…
前回でディスクからのデータ読み込み方法と、その時にぶつかる壁について解説した。今回はいよいよデータの読み込み処理を実装していく。
実は、今まで黙っていたが、起動時のIPLはディスク先頭の512バイト=1セクタしか読み込まれない。1セクタだけだからブートセクタなんて言うのだ。 言うのだ、なんて威張っても仕方ない。OSのカーネルがまさか512バイトに納まるわけはないので、残りの部分を…
今回はセグメンテーションと割り込みテーブルについて。でも多分あんまり詳しくやらない。できないから(笑)。 しかしいつになったらD言語が出てくるんだろう……プロテクトモードに行くようになったら出てくるはずなので乞うご期待!
前回まで実際のソースコードを元に不器用に説明したけど、いい加減CPUの説明抜きで話を進めるのが非常に辛いと分かったので、必要最低限解説しておこうと思う。
タイトルの番号が間違っていたのを修正(汗)。 言い回しをちょっと修正。 セグメントセレクタ→セグメントレジスタ セグメントを示す値がセグメントセレクタ。それを入れるレジスタがセグメントレジスタ。
後から文章やソースコードを訂正したりした場合はこうやって記録する(汗)。 leawをmovwに修正。 IPLの文字列表示などでleawを使っていた箇所をmovwに直した。 IPLのprint関数の引数にあるカラーコードを削除。 設定しても反映されていなかった……。
前回まででセグメントを設定するところまでは説明した。いよいよメッセージ表示の部分について説明する。
ひたすら打つべし! 打つべし! だったアセンブラのソースについていい加減解説する。
前回でとりあえず起動するまではできた。だが、前回のコードでは、プログラムの部分が無限ループするだけで何もしない。せめて起動したというメッセージくらいは表示させて、俺はマジで本当に起動したのだということを主張させたい。そのためには、恐怖のア…
PC/ATマシンで動くOSを作る場合、PC/ATでのOS起動規格に則ってブートセクタ等を用意しなければならない。
qemuのウィンドウからの抜け方を加筆。