0から作るソフトウェア開発

日々勉強中。。。

0から作るOS開発

環境準備

環境設定

ブートローダ

カーネルローダ

GRUB

カーネル

ドライバーその他

ブートローダその1 BIOSとディスク

パソコンが起動してから

電源ボタンをONするとまずBIOS(Basic Input Output System)が動き出します。

BIOSはその名の通り基本的な(Basic)入力(Input)と出力(Output)を

制御するハードウェアとソフトウェア(System)です

ここらへんは別に読み飛ばしてください

BIOSが動き出すとPOST(Power On Self Test)と呼ばれている処理を

行います。POSTでは接続されたデバイスのチェック、メモリのチェックなどを行い

正常に起動できるかどうかをチェックします

正常に起動できると判断すると次にBIOSとしての処理が始まります

BIOSの処理

BIOSは入力と出力ができるように、もっと具体的には例えばフロッピーディスクから

データを読んだり書いたりできるようにするための、読み込み処理や書き込み処理などと

処理を呼び出すためのテーブルを用意します。この読み込み処理などのことを割り込み処理、

処理を呼び出すためのテーブルを割り込みベクタと呼ばれているようです

割り込みベクタとは?

割り込みベクタは決まった処理をする関数(ハンドラという言葉を聞いたことありますでしょうか)の

アドレスをテーブルにしたものです

割り込みベクタから割り込みハンドラの番地を読み取りその番地にジャンプして処理を行う

上図のように”フロッピーディスクからデータを読み込みたい”と思ったときに

①割り込みベクタの”104番地”を見てみる

②そこにフロッピーからデータを読み込む処理の番地(ここでは2000番地)が書かれているので

2000番地にジャンプして処理を行う

といったように処理を行います。このような割り込みベクタとその処理(もちろん入力・出力の処理)を

BIOSが用意してくれます(これがBasic Input/Outputと言われる由縁です)ので、

この処理をブートローダで利用していきます

割り込み処理が用意できたら

用意した読み込みの割り込み処理を使って、ようやくOSをブートさせるための

ブートローダをメモリに読み込みます

BIOSの設定をされたことはありますでしょうか?BIOSの設定にはどのデバイスから

システムを起動するのか決めることができたかと思います

この設定に従ってBIOSは例えば1番目にCD-ROMからブートローダを読み込み

CD-ROMにブートローダが無ければ、2番目にハードディスクからブートローダを

読み込むといった作業を行います

どこからブートローダを読み込むのか?

BIOSは設定されたデバイスの最初のセクタからブートローダを読み込みます

例えばフロッピーディスクなら1つのセクタは512バイトなので最初のセクタである512バイトを

読み込みます。CD-ROMであれば1つのセクタは2048バイト(2Kバイト)ですので、

最初のセクタである2048バイトをメモリに読み込みます

セクタとは?

セクタはフロッピーディスクやCD-ROMで扱うことができる最小データの単位です

ですのでディスクデバイスは512バイトや2048バイト単位でデータの読み書きをします

今パソコンのファイルサイズとかで使われているバイトという単位がわかりやすいので

バイトでいいのじゃないかと思いますが、ちょっと困ったことになるようです

例えばCD-ROMで1バイト目と1003バイト目を読み込むことを考えてみますと

高速に回転しているCD-ROMから1バイト目を探してからデータを読み込み、

次に1003バイト目を探してからデータを読み込まなければならないので

データを探す細かい機械の制御が必要になりなかなか難しくなります

逆に言えば一旦場所がわかれば、連続したデータを読み出すのは比較的簡単なので

(そしてそのほうが速い)1バイト目のデータを探して一気に2048バイトを読み出した

ほうが楽になるのはご想像いただけますでしょうか。

そのようなわけでディスクデバイスではセクタというちょっと大きな単位で読み書きします



更にバイトがメガバイト、ギガバイトと大きくなるようにセクタもシリンダ(トラック)、ヘッドと

単位が大きくなっていきます

トラックとは?シリンダ(トラック)とは?ヘッドとは?

何個かのセクタを集めたものをシリンダ(トラックとも言います)、

何個かのトラック(シリンダ)を集めたものをヘッドと思っていただければよいかと思います

(物理的な語弊はありますが、イメージそのような感じです)

ヘッドは

その名の通り、ディスクを読み出す機械の先がヘッドです

ディスクを読み出す機械の先がヘッド

HDDのディスクをイメージしてみますと上図のようにヘッドがいくつかあります

データを読みだすときはディスク上のデータまでヘッドを動かし読み出します

シリンダ(トラック)は

日本語で言うところの”円筒”です。

回転するディスクにヘッドがあたり円になる部分がシリン

回転するディスク上にヘッド部分を移動させると上図の赤い部分のように

円上のデータが読み取ることができます

各ヘッドについてこの円ができるのでちょうど”円筒”のような形になります

これをシリンダ(円筒)といいます

セクタは

このシリンダ(トラック)を更に細かく分けたものをいいます

シリンダを更に細かく分けたものがセクタ

上図のようにディスクを上から見て、ケーキを切るように線を引くと扇状に分かれるかと

思います。この扇状になったケーキのシリンダ(トラック)上にあるのがセクタとなります

このようにシリンダ(トラック)を何個か分けたものをセクタといいます

セクタはシリンダ(トラック)に何個入っているのかが決まっていて

例えばフロッピーディスクでは1つのシリンダ(トラック)に18個のセクタが

入っています

inserted by FC2 system