BIOSの役割およびそのソフトウェア・インターフェースを定義した「UEFI(Unified Extensible Firmware Interface)」について解説します。
そもそもBIOSとは何か?
PCは、すべての処理をOSが行っている訳ではありません。PCにはあらかじめマザーボードの不揮発性メモリ(ROM)に組み込まれているプログラムがあり、これをBIOSといいます。BIOSはPCの電源投入後、真っ先に起動されるプログラムで、よく見るPCメーカーなどのロゴが表示されるあの画面も、BIOSによって表示されます。ディスクなどにインストールされたOSは、BIOSによって呼び出され、メモリにロードされて起動します。
PCの電源が投入されると、まずCPUはROMにあるBIOSを実行します。BIOSは最初に、CPU内部のキャッシュやレジスタなどの初期化を行い、動作モードを16bitモードに切り替えます。
続いて、マザーボード上の各種コントローラ(CPU、メモリコントローラ、外部キャッシュメモリ、割り込みコントローラ、ビデオ・コントローラ、リアルタイム・クロック、パラレル/シリアル・ポート、ディスク・コントローラ、バスコントローラ、キーボード コントローラなど)にアクセスし、状態を確認するとともに使用不可能な要素がある場合は、エラーを発します。
各コントローラが正常に動作している場合は、「POST(Power On Self Test)処理」を行います。これはビデオ、キーボード、メモリ、マウス、HDD、パラレル/シリアル・ポートといった周辺機器の検出・初期化・設定を行うもので、これを実行することで周辺機器を使用できるようになります。
POST処理を終えるとBIOSは、あらかじめ決められている優先順位に従ってブートメディア(起動対象OSが記録されている媒体)を指定します。ブートメディアを決定したBIOSは、そのメディアの先頭セクタにあるOSローダ(OSを検出し起動するプログラム)をロードします。これでBIOSのブート処理は終了し、以降はメモリにロードされたOSローダがOS本体をロードし、起動させます。
旧BIOSとUEFIの関係
ここまで簡単にBIOSの概要を紹介しました。このBIOSがOSを起動させる場合の仕様について、新しく定義したものをUEFIと呼びます。そして、この定義に準じて設計されたBIOSをUEFI・BIOS、そうでないものを旧BIOSと呼び区別します。したがってUEFIは厳密に言えば、あくまで仕様を定めたものであり、プログラムを指すものではありませんが、一般的には「BIOSの後継となるプログラム」とイメージされることが多いようです。
UEFIは、1999年にインテルが発表したEFI (Extensible Firmware Interface)が元となっており、これを拡張して旧BIOSとの互換性を高め、2005年にUEFIへと発展しました。UEFIの仕様はAMD、AMI、Apple、Dell、HP、IBM、Intel、Lenovo、Microsoft、Phoenix Technologiesなど、140 社以上の主要テクノロジー企業が参加する業界団体「UEFIフォーラム」にて決められています。
旧BIOSからUEFI・BIOSへの発展には、CPUの進化が大きく関わっています。現在のPCに採用されているCPUの大半は64bit・CPUを対象としたx64アーキテクチャが採用されています。x64アーキテクチャは初期の16bitパソコン時代から続く、PCのソフトウェア資産継承のために、大きく分けると「64bitモード」「32bitモード」「16bitモード(8086モード)」の3つの動作モードがあります。
64bitのOSに対応する64bitモードでは256TB(テラバイト)までのメモリ空間にアクセスできますが、32bitモードでは4GB(ギガバイト)、16bitモードでは1MB(メガバイト)のメモリ空間にしかアクセスできません。
PCの進化に伴う旧BIOSの問題点
旧BIOSは、長年に渡り16bitパソコン時代からの資産を引き継いできたため、16bitモードでしか動作しません。そのためPCの進化に伴い、次のような致命的な問題が発生しました
・1MBというメモリ制約により、セキュリティなどを含めたシステムの機能強化が困難である。
・EthernetやUSBにつながるディスクなど、新たなブートデバイスが追加されるたびに、OSのブートローダを変更しなければならない。
・マザーボードごとに、ファームウェアをアセンブラで開発する必要がある。
こうした問題を解消するためにUEFIが定義されてきたのです。実際に、旧BIOSから進化したUEFI・BIOSのメリットとしては、次のことが挙げられます。
・起動時間と再開時間が短縮される。
・OSが読み込まれる前に信頼されていないコードが実行されないようにする、セキュアブートや、出荷時に暗号化機能が組み込まれているドライブなどのセキュリティ機能を使うことができる。
・2TB以上の大容量ドライブを簡単にサポートできる。
・旧 BIOS と互換性がある。
・CPUに依存しないアーキテクチャとドライバを提供する。
・C言語を用いたモジュール式のファームウェア設計が可能。
UEFI・BIOSの構成。旧BIOSとの互換性は?
下の図に示すようにUEFI・BIOSは、UEFIに準拠したブート&ランタイム・サービスでの処理が基本ですが、これと共に過去の資産を継承できるように旧BIOSに対応した機能も用意されています。この機能はCSM(Compatibility Support Module)と呼ばれる互換性サポート・モジュールにより提供され、これにより旧BIOSとの互換を要求するOSのロードと起動(ブート)を実現しています。
ところが旧BIOSとの互換機能の提供は、UEFI普及の妨げになるとともに、セキュリティ面での問題を残したままになります。例えば旧BIOSでは、指定した起動デバイスより立ち上がったプロセスは無条件で実行されます。そのためこのプロセスに悪意のあるものが含まれていても対処の方法がなく、これがマルウェアの標的になりかねません。
これに対しUEFIは、許可がないプロセスからのブートを禁止できるセキュアブートに対応しています。これら旧BIOSの問題から、インテルは2017年10月30日から~11月3日に台湾で開催された「FALL 2017 UEFI PLUGFEST」で、2020年までにUEFIからCSMを削除する計画を発表しています。
ここまでBIOSおよびUEFIの概要についてご説明しましたが、後編では一般的な UEFI・BIOSセットアップの起動方法と、UEFI・BIOSで管理する各種情報の設定および確認方法について説明します。
パソコンでできるこんなことやあんなこと、便利な使い方など、様々なパソコン活用方法が「わかる!」「みつかる!」記事を書いています。