自作OS

メモリ情報の習得

ここらで,僕らの興味の対象はメモリ管理へと移る。マシンに搭載されているメモリの量を知らなければ,僕らのメモリ管理の物語は始まらないので,搭載メモリ容量を習得する方法について模索しよう。 起動されたプロテクトモードの OS から,搭載メモリ容量を…

printfを作ってみる

前回までに文字を表示する関数を作ったが,簡単のためこの関数は変数を表示できなかった。動的な変数の値が確認できれば,開発を効率よく進められるだろうから,そろそろprintf関数を作っておこう。 video.c 今回の video.c は次のようになる: #include "i3…

GRUBでOSを起動する

前回はフロッピーイメージファイルに GRUB をインストールした。今回はその GRUB から OS を起動する。 GRUB とは GRUB とは,Multiboot Specification に準拠したブートローダーである。 Multiboot Specification とはブートローダーと OS 間のインターフェ…

キーボードで割り込んでみる

前回は,ハードウェア割り込みについて学んだ。 今回は,キーボードを例に実際に割り込みを実現するためのプログラムを書いてみよう。具体的には,キーボードが使用されると,IRQ1 割り込み信号が PIC へ届きベクタに変換され CPU へ伝達される。そして,割…

ハードウェア割り込みについて

今回は割り込みについて学ぼう。 割り込みとは CPU はメモリ上の命令を逐次実行していくが,プログラマがあらかじめ全ての処理を予測し順序良く記述しておくことは困難である。(例えば,ユーザーがキーボードを押すタイミングを,プログラマが予め予測する…

文字を表示する関数を作ってみよう

文字の表示には,VRAM と呼ばれるメモリ領域に ASCII コードを書き込むだけでよく,カーソルの移動には,表示した文字数をビデオコントローラーに教えるだけでよいことが前回までに分った。 これらを踏まえ文字列を表示する関数を作ってみることにしよう。 m…

I/Oポートを使ってカーソルを動かす

前回はVRAMを操作し文字の表示を行ったが,ビデオコントローラーには直接命令を送ることはしなかった。ビデオコントローラーへ直接命令を送ることで,表示モードの変更や,カーソルの表示・移動などを行うことが出来る。 今回は,ビデオコントローラーが提供…

C言語でカーネルを書き始める

前回はIPLを書いたので,いよいよカーネルを書き始めることが出来る。 今回からはC言語を使ってOSの開発を行う。普段私たちは,C言語でアプリケーションプログラムの開発を行うとき,main関数からプログラムを書き始める,これはmain関数からプログラムが実…

やっつけIPL

512byteより大きなプログラムを実行してみよう。 前回は小さなプログラムを書いて,画面に文字を表示することが出来た。AT互換機はディスクの最初のセクタ,つまり512byteを読み込んで実行してくれる分けだから,ただディスクの先頭セクタにそのプログラム…

gasとcでHello,worldしてみる

gasを使ってプログラムを書いてみよう。まずは伝統的にhello,worldからはじめる。 アセンブラで記述しなければならないのはセグメントレジスタの設定のみで、後はCで記述できる。 GAS ここではセグメントレジスタを設定したあとhelloへジャンプしている: cr…

メモ

久しぶりの更新ですね。 OSの開発は知らないことが多くてなかなか思うように進みません。 試行錯誤で開発しているので今まで書いた記事にもウソが結構あるようです。たいした数も書いてないんだけどね改善の必要がありそうなとこをメモしておきます。 IPLは…

AT互換機のブートの仕組み

私たちがPCの電源を入れるとしばらく待てばwindowsなどのOSが起動される。まあ当然のことなんだけどね。 OSを一から書き上げる場合、PCの電源を入れてからOSが起動するまでPCの内部でどの様な事が起こっているのかを少し知っていなきゃいけない。 ここではい…

x86なCPUについて

アセンブラはCPUに非常に近い言語であるので、アセンブラの解説を始める前にCPUを理解しておくのが賢明だろう。 x86なCPUとは8086互換のCPUのことである。例えばPentiumやAthlonなどはx86なCPUだ。 レジスタ CPUは主にデータの計算を行う回路だ(他にもする…

OSを作ろう

まず初めにOSを作る手順を紹介しよう。基本的にコードを書く→コンパイル→確認という手順になる。これはアプリケーションプログラムを作成する手順と同じである。なのでここではツールの使い方について簡単に説明する。 OS作成に必要なツールを揃えよう 私はd…