ファームウェアとBIOSの意味

『ファームウェア』という言葉を聞いたことがあるでしょうか?
ファームウェアとは、電子機器に組み込まれたハードウェアの基本的な制御を行うプログラムです。
『ハードウェア化されたソフトウェア』と説明されることが多いのは、あらかじめ基盤上に実装されたROMなどの記憶域に保存されていて、ハードウェアが動作するのに必要不可欠な役割を果たしているから。『ハードウェア寄りのソフトウェア』という意味合いですね。たとえば、ルータやプリンタといった電子機器にも、ファームウェアは搭載されています。
BIOSは、PCのマザーボード上の不揮発性メモリ(ROMやフラッシュなど、電源を落としてもデータが消えないメモリ)に保存されたプログラム。ファームウェアの一種ですが、PCではBasic Input/Output System(基本入出力システム)と名付けられ、略してBIOS(バイオス)と呼ばれています。

マザーボードとROM BIOS
マザーボードとROM BIOS

 

PCの電源を入れた後、最初に起動するのはOSではありません。BIOSです。
そもそもOSは、ハードディスク(HD)のほか、フロッピーディスク(FD)や光学式メディア、フラッシュなどから起動されるプログラムです。一般的にはハードディスクからの起動が多いので、ここではOSがHDにインストールされていることを例に考えますが、HDが使える状態にならないとOSは起動できない。
OSをHDDにインストールしているということは、OSのプログラムをHDかに保存しているということです。OSはデータをファイルとして管理していて、プログラムとは実行形式のファイルです。誰かがHDにアクセスして、データを読み込まないことには、OSは起動できません。他のメディアからOSを起動する場合も、同様です。
PCの電源を入れた直後、マザーボードのROMに保存されたBIOSが実行されます。ハードディスクにOSをインストールしている場合は、BIOSが起動して、HDDにアクセス、OSの起動プログラムを実行してくれます。

 

BIOSの役割

BIOSの役割
BIOSの役割

実際には、『BIOS』と総称されるプログラムの役割は1つではありません。BIOSも時代とともに多機能化していますが、基本的な役割として、『POST』、『ハードウェアの初期化』、『ブートストラップ』、『CMOSメニュー』を例に挙げます。

【POST】
Power On Self Test:ハードウェアの自己診断プログラムです。ハードウェアのエラーが検出されると、『ピー、ピー、ピー』とか、『ピーピピ』といった電子音を鳴らして、ユーザーに異常を知らせます。

【ハードウェアの初期化】
マザーボード上のデバイスや、インターフェースを使える状態にします。
CPU、メモリ、HDD、光学式ドライブ、インターフェースなど、内部デバイスを検出します。また、ハードウェアもデータをやり取りするときに、メモリ空間を利用するので、デバイスが使用するメモリ領域を割り当てたり、CPUがそれぞれのデバイスやインターフェースを識別できるようにI/Oアドレスという番号を割り振ったり、ハードウェアが動作するために必要不可欠な設定を行っています。

【ブートストラップ】
たとえば、HDDにOSをインストールしているのなら、BIOSがHDDの先頭領域にアクセス、HDDに格納されたブートストラップコードを実行して、OSへの制御を橋渡しします。ブートストラップコードが実行されると、OSの起動に必要なプログラムが次々に読み込まれ、OSが起動することになります。

【CMOSメニュー/BIOSセットアップユーリティリティ】
ユーザーがBIOSレベルでの設定変更をするために、メニューが用意されていて、このプログラムもROM BIOSのなかに保存されています。ただ、ユーザーが設定変更した値そのものは、チップ内部にあるCMOSメモリに保存されるため、CMOSメニューとも呼ばれます。CMOSメモリは揮発性のメモリなので、電源供給が止まると、内容が保持されません。そのため、マザーボード上にはCMOSバッテリと呼ばれる丸電池が搭載され、CMOSメモリの内容を保持しています。

CMOSメニュー例
CMOSメニュー例

現在のBIOSは、複数の電源管理の仕組みや、CPUやグラフィックをはじめ、さまざまなデバイスの省電力機能設定、RAID、ネットワークブートといった、さまざまな機能もサポートしていますので、ハードウェアの設定をBIOSレベルで変更したいという場面には、CMOSメニューを利用して設定変更します。

 

OSはBIOSを認識してハードウェアを知る

OSはBIOS(ハードウェア)とアプリケーションを制御している
OSはBIOS(ハードウェア)とアプリケーションを制御している

BIOSは、ハードウェアをするために必要不可欠な制御を行うプログラムです。PCの世界では、よりハードウェアに近い処理、制御は、『低レベル』、『低次元』、『物理的』などと表現されることが多いですね。そのため、OSよりも、ハードウェアの近くで制御を行っているBIOSの説明でも、『ハードウェアの低レベル制御をするためのプログラム』といった表現も、よく使われています。
OSがハードウェアを認識するということは、ハードウェアの情報を持っているBIOSを認識し、BIOSからハードウェアの情報を貰っています。逆に、OS上から、ハードウェアの設定を変更したら、BIOSにも、その内容が反映されるようになっています。
そのため、OSはインストールされる時点で、そのマシンのBIOSを検出し、OSがそのBIOSと連携できるようにインストールされています。そのため、OSがインストールされているHDDを、他のマシンに接続して、既存の環境を利用しようという考えは、邪道ですっ! ええ、邪道ですともっ!! トラブルを避けたいのなら、やっちゃいけません。
と、前起きしたうえで、邪道について書きたいと思います。
あるPCで使っていたOSインストール済みのハードディスクを、別のPCに付け替えた場合、問題なくOSが起動する場合も、そうでない場合もあります。もともとのPCと、新しいPCのBIOS仕様に大差ない場合は、OSとBIOSの連携に支障がないので、ハードディスクを付け替えるだけでも、OSが問題なく起動する。でも、もともとのPCと、新しいPCのBIOS仕様が異なっていると、OSが起動しなかったり、動作が不安定になったりします。

BIOSのミスマッチ
BIOSのミスマッチ

たとえば、Windows2000が使われていた頃、もともとWindowsNTが使われていたマシンをWindows2000にアップグレードして、そのハードディスクを新しいマシンに接続したら、OSが起動しないと嘆く人が珍しくありませんでした。これは、前のマシンのBIOSと、新しいマシンのBIOSを、気にしていないユーザーの失敗談です。
前回も触れましたが、WindowsNTというOSはソフトウェア電源に対応したOSではありません。つまり、もともとNTで使われていたマシンは、ハードウェア電源のマシンです。このマシンにWindows2000をインストールしたら、OSはソフトウェア電源に対応していないBIOSを検出して、そのBIOSに合せてインストールされることになります。
ハードウェア電源用のBIOS上にインストールされたOSのハードディスクを、ソフトウェア電源のマシンに接続しても、そのハードディスクのOSは、うまく起動しません。新しいPCとはBIOSの中身が違ってしまっていて、OSの起動に支障をきたしたのです。

 

BIOSさん、さようなら。UEFIさん、こんにちは。

数年前、うちのWindows 7のメイン機(自作)がクラッシュしてしまいました。
どうしてマザボをオシャカにしてしまったかは、後日、保守メンテナンスの項目に書こうと思っていますが、マザーボードとCPUは新規に購入、あとのデバイスは使いまわすことにしました。それで、新しいマシンを組み、Windows7がインストールされたハードディスクを、そのまま、接続したわけです。結果、OSが起動しませんでした。
というのも、新しく組んだメイン機は、前世代のメイン機とBIOSの仕様が違い、新しいマシンのほうは、従来からのBIOSがUEFI(EFI)に変わっていたためです。CMOSメニューから、起動設定をBIOS互換モードに変えたら起動しましたが、そのまま、使い続けても動作が不安定になるリスクを背負うだけですから、OSはクリーンインストールしました。

とういわけで、次回は、BIOSに取って代わった新たなファームウェアUEFI(EFI)について書きたいと思います。