SSブログ

BIOS(UEFI)というものについて頭を整理 [ソフトウェア]

パソコンを自分で部品を買ってきて組み立てる人にとって、“BIOS”という言葉は一般的だ。
この“BIOS”とは“Basic Input/Output Syastem”といい、コンピュータに電源を入れた時最初に実行するプログラムであり、パソコンの基板に搭載された128kbyte~1Mbyte程度のNOR Flash ROMに書き込まれている。だから、OSの入ったハードディスクやフロッピーディスクなどがコンピュータに接続されていなくても、コンピュータはBIOSに組み込まれたプログラムの機能の範囲で動作する。


ここでBIOSの基本的な機能を並べてみる。

1.ハードウエアのチェック及び初期化
2.各種インタフェースとの通信
3.イニシャルブートローダの実行

1の「ハードウエアのチェック及び初期化」は、文字通りの機能であり、CPUやメインメモリーを始め、これら以外にコンピュータに接続されるあらゆるハードウエアが正常かどうかチェックし、初期化していく。この段階でなんらかのエラーが検出された場合、エラーコードを吐き出してコンピュータを停止させる。

2の「各種インタフェースとの通信」は“Basic Input/Output Syastem”という名の通り、CPUに繋がるあらゆるインターフェイスと基本的なデータ通信をするための機能である。この機能は限定的ながらもハードウエアを使用するために必要十分なコマンドを扱えるため、OS側からBIOSの機能を呼び出して利用するという事も可能である。例えばWindowsなども各種デバイスドライバを読み込む前はBIOSの機能を使ってハードディスクからデータを読み出し、ディスプレイの表示を可能としている。(だからWindows起動画面は解像度が粗かったり使用できる色数が制限される時代があった)

3の「イニシャルブートローダの実行」は、Master Boot Record(以下MBR)に書き込まれたイニシャルブートローダを実行する機能で、この機能が無ければOSを読み込んで実行する事は出来ない。MBRとはディスクの先頭から512バイトの事で、ここに各種OSのイニシャルブートローダが書き込まれ、イニシャルブートローダによってOSが起動する事になる。


BIOSについて、これら以外の機能は基本的にオプション扱いである。
例えばPC/AT互換機でおなじみの“BIOS画面”。これはハードウエアの各種設定を可能にするユーザーインターフェイスだが、BIOSが登場した当初は存在しなかった。当時はハード的な“ディップスイッチ”による設定変更のみしかなかったのだ。
他にもオンボードで搭載するグラフィック、サウンド、USB、IDEやSATA等を制御するためのプログラムもオプション扱いであり、オンボードで搭載される各チップごと別途に組まれたプログラムをBIOSから呼び出して動作させている。
これは初期にBIOSを搭載したIBM PCが、CPUとその周辺のシステムバス以外のほとんどを拡張機能として提供していた名残である。(マザーボードには8ビット幅のISAスロットとキーボード用のコネクタしか存在せず、キーボード以外のデバイスは全てISAカードによる拡張で行われた)


さて、ここでUEFIの登場だ。
UEFIは“Unified Extensible Firmware Interface”の略で、BIOSの持つ基本機能(ハードウエアのチェックや初期化など)を核にさらなる拡張を目指して設計された“BIOSのようなもの”である。基本的な部分で実際やっている事はBIOSと大差ないが、拡張された部分に関しては従来のBIOSでは不可能な機能も多い。

そもそもUEFIはBIOSの拡張が限界に達した事で必要とされ生まれた規格である。
当初は“EFI”といい、IntelのItaniumというCPUを使ったシステムで必要とされ、IntelとHewlett Packardにより作られた。その後EFIを普及させるために標準規格として策定され“UEFI”となり、一般消費者向けのパソコンにも採用されるようになった。現在はx86系システムのほとんどがUEFIを使用していて、AppleのMachintoshシリーズもPower PCからx86に切り替わった時から採用する。

また、ARM系のシステムでも採用が進んでいて、Linux系カーネルがベースになっているAndroidも一部機種ではUEFIからブートローダを呼び出している。(これら以外のAndroid端末は、BIOSと同等機能のプログラムを含むブートローダーと呼ばれるファームウエアがNOR Flash ROMに書き込まれていると思われる)


しかし現在、UEFIに関するセキュリティ問題が出始めている。

BIOSには無かった柔軟性を持つUEFIは、コンピュータを動作させるために必要な最低限の機能以外にも様々なプログラムをUEFIの一部として提供できる仕様となっている。例えばプログラムサイズがNOR Flash ROMに収まるサイズであればゲームだって遊べる。そのためにUEFIを格納するNOR Flash ROMには大容量のROMが用いられ、大きなサイズのプログラムであっても余裕をもって格納できるようになっている。従って、ウイルスなども高機能なものを感染させる事が出来るのだ。
例えば、これはウイルスではないとされるがこんな例もある。

LenovoのPCにはBIOSレベルでWindowsのシステムファイルを上書きする
http://gigazine.net/news/20150813-lenovo-service-engine/

これはThinkpad以外の、いくつかの機種で採用されている「Lenovo Service Engine」というもので、UEFIに組み込まれ、Windowsのシステムファイルを書き換える機能を持つ。書き換えられたWindowsはパソコンの持つ固有情報や日時、地域情報などをサーバーに送信するという。

また、Windows8とWindows10にはOSからUEFIに実行ファイルを埋め込める機能が存在し、この機能によって例えばOSをクリーンインストールした場合でもUEFIからOEMプログラムのインストーラを呼び出してメーカーのサーバーからプリインストールソフトを自動的にダウンロード・インストールさせる、というような事も可能。

この機能を悪用すればパソコン内の情報を盗んだりウイルスを感染させたりやりたい放題出来るというわけだ。

・・・話が脱線した。

ともかくこのように、UEFIとは“非常に高機能なBIOS”という認識でかまわないと思う。

そして最後に、BIOSもUEFIも名称こそ違うが、要は“ファームウエア”であり、今の所は一部例外を省けば基本的にWindowsが動作するシステムだけで通用する言葉であり、これら以外で同等な機能を持つプログラムは単にファームウエアとかシステムROMとかブートローダーとか呼ばれているようである。
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0