答えは

CのBIOS


簡単な説明

Basic Input/Output System(ベーシック インプット/アウトプット システム、略称:BIOS バイオス)
パソコンは電源を入れると、まず最初にBIOSno読み込みが始まります。

ハードウェアへのアクセスは主にレジスタの操作を行うが、レジスタの動作や配置はハードウェアの種類によって異なる。また、読み書きのタイミングや順序にも制限があることがある。これらのハードウェアアクセス手順はアプリケーション側で逐一記述するより、ハードウェアの種類とセットでサブルーチンの形で用意しておくほうが有用である。このサブルーチンのことをBIOSと呼び、ISAやPCIボードなど形の製品では同一ボード上でROMを接続し、BIOSプログラムをメモリ上に配置する。

また、同じ種類のハードウェアで、操作方法が異なるデバイスが複数存在する場合、BIOSがない場合はアプリケーション側でそれぞれのハードウェア構成にあったアクセス手順を複数用意しておかなければならない。
そこでBIOSの呼び出しインタフェースを共通化することで、アプリケーションはそのBIOSコールにあわせるだけで複数のデバイスに対応できることになる。
このような共通インタフェースはABI(Application Binary Interface 参考API)と呼ばれる。

PC/AT互換機のVGA BIOSを例に挙げると、共通化されたABIであるVGA BIOSを呼び出すことで、ハードウェアの違いを意識することなく一元的に文字の表示や画像の表示を行えるようにしたものである。 同様にハードディスクやフロッピーディスクの読み書き、キーボード入力などさまざまな入出力機器の処理を行うBIOSが存在する。

最近ではこの役割がOSにとって代わられている。マルチタスクOSが動作している場合、各アプリケーションが個別にBIOSコールを呼び出すと、リエントラントが考慮されていないBIOSもありOSもハードウェアリソースを管理することが難しくなる。
このためOSが動作するシステム上では、ハードウェアの管理はOSがデバイスドライバを用いて一元的に行い、アプリケーションはOSが用意しているシステムコールを 利用する。
アプリケーションが、OSのシステムコールではなくどうしてもBIOSコールを使いたい場合は、BIOSを呼び出すシステムコールが用意されているが、そ のBIOSがアクセスするハードウェアがOSによって保護されている場合は、必ずしも動作するとは限らない。

また、組み込みシステムではハードウェアのバリエーションが少なく、BIOSといった中間層インタフェースは持たないためBIOSとは呼ばずファームウェアと呼ぶことが多い。


装置の電源投入時には、最初に実行されるハードウェアの初期化および、次の段階のブートローダを読み込むプログラムが必要になる。このため補助記憶装置を操作し、ファイルの 読み込みが行える状態になるまでのプログラムをROMの形で用意しておく必要がある。
これらのプログラムはInitial Program Load (IPL) やブートストラップとも呼ばれる。 補助記憶装置のハードウェアの構成によって手順が異なるため、そのシステム固有のプログラムが用意される。

また、PC/AT互換機のように、様々な種類のハードウェアが増設可能な(バリエーションが多い)場合、初期化手順やハードウェア構成に自由度を持たせておく必要があり、初期化内容などをディップスイッチやソフトスイッチで設定可能にするためパラメータを持つ場合がある。