BIOSとUEFIの歴史

BIOSの歴史

BIOSIBM PC(1981年)と共に登場し、「IBM PC互換機」が普及した事によりパソコンの標準ファームウェアとなりました。
以降、ハードウェアもBIOS自身も当時とは全く異なる姿になるまで大きく拡張・変更され続けていますが、アプリケーション互換性を保たなければならなかった過去の経緯から、未だBIOSは大変古い仕組みを使い続けており、機能の実装に大きな制約があります。
具体的に一番大きい制約は、リアルモード(CPUがオリジナルのIBM PCに搭載されていた8086をエミュレートするモード)で動作しているということです。
これにより、一度にアクセスできるデータサイズは64KBに制限され、メモリ空間全体でも通常1MBまでしかアクセス出来ません。
プロテクトモードやロングモード(64bitモード)でOSを走らせるためには、CPUのモード切替の作業が必要になり、ブートローダやOSの構造はやや複雑になります。
また、BIOSがハードディスクからロードするブートローダのサイズも決められており、既に現代のブートローダはここに入りきらないサイズに達してしまい、「多段ブート」と呼ばれる、ブートローダが更に大きなブートローダをロードするという対処療法的な実装がなされています(参考)。
USBやBluetooth、LANやWiFiなど、最近のハードウェアのBIOSからの利用もなかなか困難になってきています。
このような状況で「古い仕組み」と認識されつつも、ずっと根本的な変更が加えられぬまま放置されてきたBIOSですが、最近になって新たに問題が発生し、新しい仕組みである「UEFI」への移行が進みつつあります。
現在BIOS搭載機上のHDDで使われている「MBR」と呼ばれるパーティーションテーブルですが、これは2TBまでのサイズしかサポートしておらず、新たなパーティーションテーブルと、新たなパーティーションテーブルからブートする仕組みが必要になったのです。

EFIの歴史

EFIは、1990年代にIntelとHPがIA64アーキテクチャを設計した時に、IA64とIA32両方で使えるレガシーフリーファームウェア仕様を作ったのが始まりで、当初IA32では必要性が薄く殆ど採用されなかったのに対し、IA64にはEFIしかファームウェア標準が無いため初めてのIA64サーバ・ワークステーションリリース時から採用されています。
Appleは例外で、Intel Macはリリース時からEFIを搭載しています。
但しこれはEFI 1を基にし、OSXに合わせて仕様をやや変更しているようです(参考:How Apple makes even Microsoft seem well-behaved and conformant)。
EFIはその後Unified EFI Forumへ権利を移管してUEFIと呼ばれるようになり、2.x系の仕様がリリースされました。
IA32(Intel 64含む)でも、2TB以上のHDDが普及すると共に新しいハードウェアで採用が本格化してきています。
また、Windows RTタブレットやARMサーバにおいて、UEFIを採用したARMマシンも出てきているようです。

レガシーフリーと先に書いた通り、IA32におけるEFIはプロテクトモードまたはロングモードで動作するためメモリ空間の制約を持たず、GPTと呼ばれる新たなパーティーションテーブルを採用して2TB以上のHDDをサポートし、NICやUSBなど様々なデバイスをサポートしています。
OSのブートローダのサイズにも制限がありません。
更に、レガシ互換機能としてBIOSブートもサポートされます。

いいことずくめのEFIですが、ちょっと今までのBIOSブートとは使い勝手が異なるので分かりづらい面もあるようです。
次の記事ではその辺りを書いてみます。