UEFI(EFI)の登場

UEFI(Unified Extensible Firmware Interface)は、BIOSに変わるファームウェアです。もともとインテルとHP(ヒューレットパッカード)によって、EFI(Extensible Firmware Interface)という仕様名で開発されていました。のちに、標準化団体が設立され、特定の会社だけでなく、業界団体のデファクトスタンダートして開発されることになり、UEFIと規格名を変えました。ただ、もともとの名称がEFIだったので、今でも、単にEFIと言われることもあります。
BIOSは、リアルモードで実行されるプログラムなので、利用できるメインメモリ空間をバンバン増やすことができない。そのため、新しいデバイスへ対応することも難しいうえ、長い間、難しいことを、あの手この手で乗り切ってきたので、中身も煩雑化しています。
こうした現実を背景に、64bitCPU、64bitOS時代に向け、新たなファームウェア、UEFIが開発されることになりました。

PCのファームウェアがリアルモードの呪縛から解放された

なぜ、BIOSからUEFIになったのかという最大の理由は、BIOSがリアルモードで動作するソフトウェアで、今の時代となっては制限が厳しい。16bit時代の遺物を64bit時代のシステムに利用するのは、いい加減、苦しいという点です。ただ、リアルモードが何なのかということがよく分からない方もいると思うので、詳しい説明を入れておこうと思います。

もともと16bitCPUは、64KBのメインメモリ空間を利用していました。メインメモリは1バイトごとにアドレスを割り振るので、16bit分のアドレスバスを持つのなら、2の16乗バイト(655356バイト、64KB)のメモリ空間を扱えます。ですが、Intel社から発売された『8086』という16bitCPUは1MBのメモリ空間が使えるようになりました。20bitのアドレスバスを持っていたということです。
8086も16bitCPUですが、アドレス指定の仕組みを改良して、20bitのアドレスバスを扱えるようにしたのです。そして、リアルモードには、この1MB分のメモリ領域が登場したことが大きく関わっています。

MSDOSのメモリマップイメージ
MSDOSのメモリマップイメージ

16bitCPUに合せて開発されるOSを16bitOSと言います。16bitOSの代表格にMS-DOSというOSがあります。MS-DOS時代の1MBのメモリ空間を、ざっくりと図にしました。
MS-DOSでは、OSやアプリケーションが使えるコンベンショナルというユーザー領域は640KB、残りはシステムの予約域で、ROM BIOSやVRAMなどに割り当てられていました。システムが使う領域が決められていたということですね。

そのうち、アドレスの指定をさらに改良して、80286という16MBまでのメモリを扱える16bitCPUが登場しました。MS-DOSでも多少、1MBを上回るメインメモリを使うことができるようになるのですが、ほんのちょっとだけです。というのも、DOSはもともと1MBの領域を使うOSとして開発されているし、80286以降のCPUはマルチタスクをサポートする機能が搭載され、MS-DOSのようにシングルタスクのOSで使うことが前提のCPUではなかったからです。

OSとは、つきつめてしまえばCPUの機能を使いこなすためのソフトウェア。OSでマルチタスクが実現できるのは、マルチタスク環境を実現できる機能をCPUがサポートしているからです。

ピンと来ない方もいらっしゃるかもしれないので、こんな昔話を。
MS-DOS時代、モニタはブラウン管でした。そのため、画面の焼き付きを防ぐためスクリーンセーバーの設定をしていたのですが、ある日、PCの作業を中断して、席を離れ、戻ってきて作業を再開しようとすると、アプリやデータが飛んでました。この原因はスクリーンセーバーのバグだったのですが、スクリーンセーバーのプログラムが、他のプログラムが使っていたメモリ領域を乗っ取ってしまったような状態でした。

OS上で、いくつものアプリケーションを実行するとなると、たとえば、あるアプリが利用するメモリ空間に、他のプログラムが不正なアクセスをしたら、CPUが検知したり、ブロックしたりするメモリの保護機能が必要になりますね。マルチタスクをサポートしたCPUは、こうした機能を備えている。MS-DOSのあと、Windows95の前には、マルチタスクが使える16bitOS、Windows3.1といったOSも発売されています。MS-DOSは、マルチタスクを実現する機能がないCPUに合せて開発されたOSですからシングルタスク。ユーザーが1つのアプリを使うこと前提のPCでした。
仮に、80286を積んだPCに、MS-DOSをインストールしたとしても、マルチタスクにDOSが対応していないので、DOSがマルチタスクOSになるわけではありません。新しい機能には、ハードもソフトも両方対応する必要があるのです。

とはいえ、新しいPCで、前のPCで使っていたソフトウェアが使えないというのも困ります。PCは、ハードウェアもソフトウェアも互換性を大事にします。新しいマシンやOSにしたら、今のマシンで使っている周辺機器も、アプリケーションも、すべて使えないという状況はマズいですね。なぜなら新しい製品を買いたいと思う人間が激減してしまうからです。
16bitCPUの時代も同じで、新しいCPU、新しいOSになっても、前のシステムで使っていたハードやソフトとの互換性を保持する必要がありました。だいぶ古めかしくなったものは非対応になってゆきますが、さすがに、一つ前のOSで使っていたものが、動作できないという状況にはできません。

でも、1MBのメモリ空間を利用していた時代と、それ以上の領域を使えるようになったあとでは、メモリの管理制御の仕組みが違います。そこで、1MBまでの領域と、それ以上の領域を区別します。マルチタスクを実現できるメモリ領域を『プロテクトモード』と呼びました。一方、MS-DOSで使われていた最初から1MBの領域は『リアルモード』と呼び、もともとこの領域を使っていたソフトウエアの動作に支障がないようにしたのです。

その後、i386、Pentiumシリーズのような32bitCPUが登場することになり、OSも32bit化します。CPUには『仮想86モード』といった機能が搭載され、DOS用アプリは1MB以上の領域、プロテクトモードで動作することができるようになりました。
OSが仮想的に、DOS用アプリが動作できる環境を、提供できるようになったということです。アプリケーションのほうは実際は1MB以上のメモリ領域を使っていても、OSが提供するプログラムに騙されて、DOS時代と同じように1MBの領域で動いているようなものです。たとえば、かつのNT系OSには、OS上でDOS用アプリが使える『NT ヴァーチャルDOSマシン』という機能が搭載されていました。

ただ、BIOSは、アプリケーションとは事情が違います。マザーボード上のROMに保存されているファームウェアです。
OSの上に乗かって動いているアプリのように、OSの機能で、どうこうできる話じゃない。
そのため、32bitCPU登場以降も、BIOSは、DOS時代と何ら変わらず、リアルモードで動作するソフトウェアであり続けることになったのです。

左 UEFIのCMOSメニュー  右 BIOSのCMOSメニュー
左 UEFIのCMOSメニュー  右 BIOSのCMOSメニュー

 

図は、UEFIのCMOSメニューと、BIOSのCMOSメニューの画面例です。リアルモードのBIOSのほうはDOSのようなテキスト表示の画面で、メニュー選択もキーボード操作のみ。UEFIのほうは、プロテクトモード、いわば、今のプログラムの当たり前の環境ですから、画像を表示したり、マウスやトラックボールなどのデバイスを使って、操作することができます。

 

BIOSは新しいデバイスへの対応が難しい

リアルモードで限られたメモリ領域しか使えないBIOSで、新しいデバイスに対応するのは大変なことでした。そのため、BIOSにはOSのブートに必要不可欠な、言い替えれば、必要最低限の機能しか提供できません。実際のところ、基本機能だけでは、新しいデバイスに対応できないので、新しいデバイス制御のプログラムは、オプションROMとして実装されています。
ただ、こうした仕組みを使っていけば、BIOSの構造が煩雑なものにものになるのは避けられません。ネットワークやUSB接続されたドライブからOSを起動できるようにサポートしたオプションROMもありますが、オプションROMの内容はメーカーごとにばらつきがあり、どんな機能をサポートしているのかが統一されていないというのも問題です。

以前、BIOSは電源管理にも関わっているという内容を書いたのですが、ソフトウェア電源は当初、APMというBIOS主導型の規格でしたが、後にACPIというOS主導型の規格に変わりました。より、細かな設定を行うためには、BIOSごとに操作設定が異なる環境にするよりも、同じOSなら、同じように設定できるほうが、ユーザーにとっても分かりやすい。それで、OS側での設定に比重に傾けたということですね。

標準化団体で、統一規格が策定されれば、どんなPCのファームウェアも共通になりますから、ユーザーも使いがってがいいし、開発サイドも個別対応が減り、開発がしやすくなる。だから、BIOSと違い、PCの新しいファームウェアの規格、UEFIは標準化されることになったともいえます。

 

EFIの発祥起源はItanium

16bitCPU時代からの遺物に創意工夫を凝らし、ふっと気づけばPCのファームウェアは長いことBIOSで何とかなって来たのですが、64bitCPU時代を迎え、状況が変化しました。
1990年代半ばごろから、IntelやHPでは新たなファームウェア ― EFIを開発しています。というのも、Intel社のItaniumという64bitCPUは、大規模なネットワーク向けCPU。サーバーを主力として売り出す計画でした。でも、64bit環境、しかも、大規模ネットワーク向けのサーバーとなると、リアルモードで動作するBIOSではリアルモードがネックになり、プラットフォームに向いていないという結論が出されたからなのです。
そのため、新たなファームの開発がはじまり、2000年代に入ると、業界団体Unified EFI Forumが設立され、業界標準仕様として開発されることになりました。

今は個人が趣味で使うPCも、64bitCPU、64bitOSを搭載しているという時代です。ことBIOSのディスク管理では、容量の壁や、OS起動の問題が生じていたこともあり、エンドユーザーのPCでも、BIOSからUEFIへという時代になりました。
長くなりましたので、今回はここまで。

次回も、BIOSとUEFIの何が違うといった特徴をお話していきたいと思います。