Basic Input/Output System
Basic Input/Output System(ベーシック インプット/アウトプット システム、略称:BIOS バイオス)とは、ファームウェアの一つで、コンピュータに搭載されたプログラムのうち、ハードウェアとの最も低レベルの入出力を行うためのプログラムである。
BIOSソフトウェアはパーソナルコンピュータに組み込まれており、電源投入と同時に実行される。主な働きはハードウェアを初期化して記憶装置からブートローダーを呼び出すことで、そのほかにキーボードやディスプレイなどの入出力装置とプログラムが相互に作用するための抽象化した層(abstract layer)を提供する。システムのハードウェアの差異はBIOSによって隠され、プログラムはハードウェアに直接アクセスするのではなくBIOSが提供するサービスを利用する。近代的なオペレーティングシステム(OS)はこの抽象化層(abstract layer)を使用せず、OS自身が持つデバイスドライバでハードウェアに直接制御する場合がある。
IBM PC/XTのオリジナルのBIOSではユーザーインターフェースを提供せず、設定は基板上のジャンパスイッチで行ない、システムに不具合がある場合はエラーメッセージの表示とブザー音でエラーを通知した。近代的なWintelベースのコンピュータでは、起動時に特定のキーを押すことでセットアップルーチンが起動し、画面とキーボードで設定を行えるようになっている。
BIOSはマザーボード上の不揮発性メモリに格納されており、コンピューターのモデル毎に設計されている。初期のモデルではEP-ROM等に格納され、BIOSを書き換える場合はマザーボードからチップを取り外し、専用の書き換え装置で書き換えてからマザーボードに再度装着する必要があった。近代的なコンピュータではフラッシュメモリに格納され、マザーボードから取り外さなくても書き換えが可能になっている。これによりBIOSの更新やバグフィックスが容易になった代わりに、BIOSがRootkitに対して脆弱になる可能性が生じている。
1980年代より1990年代中盤まで独占的な地位を占めていたMS-DOSはディスク、キーボード、画面表示などでBIOSのサービスに依存していたが、MS Windows NT, Linux, その他プロテクトモードで動作するオペレーティングシステムでは一般に、BIOSはOSのロードと起動までを担い、起動後にはBIOSを使用しない。
BIOSテクノロジーは、2010年からUEFIに向けての移行の途上にある。[1]
目次
用語
"BIOS" とはもともとはゲイリー・キルドールがCP/Mの用語として1975年に初めて用いられたもので、OS起動時にマシン固有のハードウェアにアクセスする部分を記述していた。その後、他機種に対しても一般的に使われ、IBM PC互換機のファームウェアにおけるデファクトスタンダードとなった。 MS-DOSやPC DOS、DR-DOSでは含まれるファイル"IO.SYS", "IBMBIO.COM", "IBMBIO.SYS", "DRBIOS.SYS"などを、"CP/M BIOS"になぞらえて"DOS BIOS"と呼ぶ場合がある。(一般にCP/M対応機のROMには簡素なブートローダーしか格納されていない)
他の系列のコンピュータでは、ブートモニタ、ブートローダー、ブートROMなどの語が使われる。サンやPowerPC系列のコンピュータではOpen Firmwareという用語が当てられる。 従来の"レガシーBIOS"に代わるものとして、Extensible Firmware Interface、Open Firmware(OLPC XO-1で使用)、corebootなどが存在する。
パーソナルコンピュータにおいて、後述する設定画面を指してBIOSと称する向きもあるが、厳密には誤りである。
ハードウェアアクセス方法の実装と共通化
ハードウェアへのアクセスは主に入出力レジスタの操作を行うが、レジスタの動作や配置はハードウェアの種類によって異なる。また、読み書きのタイミングや順序にも所定の手順が設けられている。これらのハードウェアアクセス手順はアプリケーション側で逐一記述するより、ハードウェアの種類とセットでサブルーチンの形で用意しておくほうが有用である。このサブルーチンのことをBIOSと呼び、ISAやPCIボードなどの形の製品では同一ボード上でROMを接続し、BIOSプログラムをメモリ上に配置する。
また、同じ種類のハードウェアでも、操作方法が異なるデバイスが複数存在する場合、BIOSがない場合はアプリケーション側でそれぞれのハードウェア構成にあったアクセス手順を複数用意しておかなければならない。そこでBIOSの呼び出しインタフェースを共通化することで、アプリケーションはそのBIOSのサービスを呼ぶだけで複数のデバイスに対応できることになる。このような共通インタフェースはABI(Application Binary Interface 参考API)と呼ばれる。
PC/AT互換機のVGA BIOSを例に挙げると、共通化されたABIであるVGA BIOSを呼び出すことで、ハードウェアの違いを意識することなく一元的に文字の表示や画像の表示を行えるようにしたものである。 同様にハードディスクやフロッピーディスクの読み書き、キーボード入力などさまざまな入出力機器の処理を行うBIOSが存在する。
しかし最近ではこの役割がOSにとって代わられている。マルチタスクOSが動作している場合、各アプリケーションが個別にBIOSを呼び出すと、リエントラントが考慮されていないBIOS[2]もありOSもハードウェアリソースを管理することが難しくなる。このためOSが動作するシステム上では、ハードウェアの管理はOSがデバイスドライバを用いて一元的に行い、アプリケーションはOSが用意しているシステムコールを利用する。 アプリケーションが、OSのシステムコールではなくどうしてもBIOSコールを使いたい場合は、BIOSを呼び出すシステムコールが用意されているが、そのBIOSがアクセスするハードウェアがOSによって保護されている場合は、必ずしも動作するとは限らない。
また、組み込みシステムではハードウェアのバリエーションが少なく、BIOSといった中間層インタフェースは持たないためBIOSとは呼ばずファームウェアと呼ぶことが多い。
起動
装置の電源投入時には、最初に実行されるハードウェアの初期設定および、次の段階のブートローダを読み込むプログラムが必要になる。このため補助記憶装置を操作し、ファイルの読み込みが行える状態になるまでのプログラムをROMの形で用意しておく必要がある。これらのプログラムはInitial Program Loader (IPL) やブートストラップローダとも呼ばれる。 補助記憶装置のハードウェアの構成によって手順が異なるため、そのシステム固有のプログラムが用意される。
プロセッサーがリセットされると、リアルモードのアドレス空間1MB内最後尾付近の固定されたアドレス(0FFFF0h 番地)にある命令を実行する。BIOS ROMの内容はメモリにマップされており、前述のアドレスはこれの内部にある。そのアドレスに記されたジャンプ命令により、BIOSの実行コードの先頭にジャンプして処理が開始される。 システムが電源が投入された場合("コールドブート")はPower On Self Test (POST)が実行され、リセットボタンが押された場合("ウォームブート")はPOSTを省略し、メモリのテストにかかる時間を節約する。
Power On Self Testは、CPU、RAM、割り込み、DMAコントローラなどの搭載デバイスのほかに、チップセット、ビデオカード、キーボード、ハードディスクドライブ、光学ドライブその他の基本的なハードウェアによるシステム構成をテスト、認識、初期化する。次いでBIOSは起動デバイスに設定された記憶装置を探し、ブートローダープログラムの場所を特定して実行し、PCのコントロールを委ねる。この過程をブートストラップ、略してブートと呼ぶ。
また、PC/AT互換機のように、様々な種類のハードウェアが増設可能な(バリエーションが多い)場合、初期化手順やハードウェア構成に自由度を持たせておく必要があり、初期化内容などをディップスイッチやソフトスイッチで設定可能にするためパラメータを持つ場合がある。
BIOS拡張
IBM PCおよびAT互換機の場合、ハードディスクコントローラやビデオカードはBIOSを拡張するオプションのROMを搭載しており、追加の機能を提供している。拡張部のコードはオペレーティングシステムが記憶装置から読み出される前に実行される。これらのROMはハードウェアのテストと初期化を行い、BIOSの新しいサービスを提供あるいは既存のものを上書きする。 たとえばSCSIコントローラの場合は接続されたドライブにアクセスするBIOSを提供し、あるビデオカードの例ではマザーボードに搭載されたBIOSのビデオカードに取って代わる。 拡張ROMはOSとアプリケーションを含んだり、ネットワークから起動するような異なるブートプロセスを実現することもできる。 マザーボード上のBIOSは、POSTを完了した時点で"upper memory area"空間をスキャンして、発見されたROMのコードを順次実行する。ISAカード上のROMを探すためにBIOSは0xC0000~0xF0000 をスキャンして"0x55""0xAA"というシグネチャを探してROMのプログラムのエントリポイントを知り、それに制御を渡す。
ユーザーインターフェースの変遷
IBM PCとXTの時代にはユーザーインターフェースは用意されていなかった。XT世代以前のPCのBIOSはソフトウェアによる設定はできず、マザーボード上のディップスイッチを切り替えて設定していた。以降、80286CPU搭載機までの時代はBIOS設定は電池でバックアップされたCMOSメモリに保存されていた。ビデオカードの形式、メモリーサイズ、ハードディスクのパラメータは設定プログラムを実行する必要があり、IBM ATの場合、これはROMに組み込みではなく"reference diskette" という特別なディスクを挿入して行わなければならなかった。
近代的なBIOSではメニュー形式のユーザーインターフェース(UI)をキーボードで操作することができる。一般に、起動時に"Press F1 to enter CMOS Setup." のような表示が出る間に特定のキーを押すことでメニューに入ることができ、押すキーは機種によって異なっている。BIOSのUIでは
- ハードウェアの設定
- システム時刻の設定
- システム内コンポーネントの有効化/無効化
- ブートさせるデバイスの選択
- BIOS設定を保護するパスワード画面、承認されていない記憶デバイスの挿入による起動の防止
などを設定することが出来る。
パラメータ設定
近年のパーソナルコンピュータ (PC) では、起動時のハードウェア初期化で多くの項目に自由度があり、設定内容の一部をユーザーが指示できるようになっている。この場合VGA BIOSなどが正常に起動したあと、特定のキー操作でメニュー形式で画面上に項目を表示することができ、キーボードを使って設定内容を編集し、終了時にバッテリバックアップされたレジスタに保存することができる。編集画面で以前とは異なった内容を保存した場合は、その新たなメモリ内容でハードウェアの初期化が開始される。また次回以降の起動時にこのメモリの内容にしたがってハードウェアが初期化される。このパラメータ設定を行うソフトウェアや設定画面を BIOS Setup (バイオスセットアップ) と呼び、CMOS Setup (シーモスセットアップ)とも通称される。
プラグアンドプレイは、ハードウェアのメモリマップや割り込み要求信号 (IRQ) をプログラマブルに変更できる機能で、従来はジャンパーピンなどで設定していたものを、BIOSプログラムが起動時に一定の手順で自動的に設定するものである。BIOSのパラメータ設定を容易にするために登場した機構であるが、ISAのPnPデバイスでは一部不完全で問題が発生することがあり、手動で決め打ちの値に設定する必要がある場合がある。その場合、設定を変更するにもメニュー設定画面表示までBIOS起動が進行しないことがあり、問題解決はかえって複雑になる。
マザーボードリソースの設定も、動作クロックや電源電圧といったハードウェアに密接した設定もメニューから変更可能な場合がある。基本的には自動設定もしくは初期値が適切な値をとるが、自動での設定がうまくいかない場合等に備え、任意の設定を行うことも可能にしてあるものもある。中にはハードウェアの定格動作に反するオーバークロックといった仕様に基づいた設定としては不適切な状態にすることも可能であり、その設計マージンや個体差によって、起動できない状況も発生する場合もある。それが設定の範疇と故障を起こさないものであれば、後述のように設定を初期値に戻すことで、再度起動する状態に戻すことが可能である。
設定初期化(CMOSクリア)
PCトラブルの際に、BIOSの可変設定部分を初期状態に戻す事で解決するケースがある。
マザーボードのBIOSバックアップ用電池をいったん外し、しばらく待ってから(30秒〜1分)電池を入れなおすことで設定が初期化される。確実を期すなら、外した電池を戻す前に電池ホルダのプラス極とマイナス極を金属(例えばピンセット)で短絡させるのが良い。あるいは、マザーボードによってはBIOS初期化のリセットスイッチや、ジャンパポストが装備されている。またBIOSによってはメニュー内から初期化機能を持っているものがある。
この行為は、「CMOSクリア」と通称されている。また、しばしば誤って「BIOSを初期化する」と表されることがあるが、可変設定部分を初期化するための作業であって、BIOSプログラムそのものを書き換える訳ではなく、メーカーが用意した初期設定値が可変設定部分に読み込まれるに留まる。ファームウェア更新に失敗した場合などに備え、BIOSプログラム全体を初期の状態に書き戻す機能を備えたBIOS・マザーボードもあるが、この場合は文字通り「BIOSを初期化する」と言って良い。
BIOSのチップ
初代のIBM PCではBIOS(およびcasette BASIC)はマスクRead Only Memory (ROM)チップに格納され、マザーボードのソケットに挿入されていた。ROMは交換が可能だったが、ユーザーによる書き換えは出来なかった。更新を可能にするために、互換機メーカーはEEPROM、後年にはフラッシュメモリなどの再プログラム可能なデバイスを採用するようになった。 BIOS製造会社 Micro Firmware社のRobert Braver社長によると、Flash BIOSチップは1995年頃から主流になり、紫外線により消去するPROM(PROM)より安価かつ扱いが容易になったためとしている。EPROMでは書き換えのためにマザーボードから取り外す必要があるのに対し、フラッシュメモリは基板上に付けたまま再プログラムが可能である。
BIOSの書き換えとトラブル
BIOSはROMに格納され、コンピュータに組み込まれた形で提供される(2011年現在、BIOS ROMはLow Pin CountバスまたはSPIによってサウスブリッジに接続される)。基本的にはBIOSは書き換える必要がないものだが、バグの修正や新機能サポート時に更新されることがある。
1990年代中頃までのPCでは、ROMとしてマスクROMやOTPROM、UV-EPROMなどが用いられ、大きな問題がない限りBIOSの更新はあまり想定されていなかった。 また、ROMの書き込みにはROMライターといった装置が必要になり、ユーザの手元ではROMは書き換えられないのが普通であった。
フラッシュメモリが実用化され普及してくると、BIOSをフラッシュメモリに格納しユーザの手元でコンピュータを開けずにアップデートできることを売りにしたマザーボード製品が発売された。具体的な書き換え方法としては、書き換え用にフロッピーディスクに簡素なOS(主にMS-DOSやその互換OSが利用される)の環境を作成、そこから起動し、書き換え用ソフトウェアを起動することで簡単に書き換えを行う事が可能となった。さらに2000年以降はフロッピーディスクから起動せずともWindowsやUnix系OSといった統合環境上で直接書き換えすることができるようになった。現在では、「BIOSの設定画面上でBIOSを書き換える」といったシステムを備えたBIOSも登場し、書き換え方法の選択肢が広がっている。
しかしBIOSの書き換え中に停電など何らかのトラブルで書き換えに失敗した場合、そのコンピュータは全く起動しなくなる。したがって、メーカーは「PCに問題があってその解決方法がBIOSアップデート以外に存在しないときやOSのアップデート時にのみアップデートを実行してください」などと注意を促している。
BIOSはコンピュータの起動の根幹であるため、内容が破壊されるとそのコンピュータ自身では再セットアップすら出来なくなる。復旧する方法はBIOS ROMの交換、または専門の業者などで「ROM焼き」と呼ばれる復旧作業をしてもらうのいずれかである。BIOS ROMがソケットに差し込まれているタイプのマザーボードでは自身で同一のマザーボードを用意し、起動後に問題のあるBIOS ROMに差し替え再書き込みをするという荒業も可能ではあるが、起動中のコンピュータのBIOS ROMを抜く事は大変危険である為推奨されない。また、2000年以降に出回っているコンピュータ(マザーボード)によっては、ROMを2つないし4つ持っているものもあり、別バージョンへの切り替えができるようになっているものもある。
ブートブロック方式
以上に述べたように、BIOSの書き換えにはリスクを伴うが、このリスクの低減を図る目的で開発されたのがブートブロック方式であり、1999年ころから採用されるようになった。 これは、BIOS ROMを2つ以上の領域に分割し、出荷後に書き換えない部分と書き換える部分を設けるものである。書き換えない部分をブートブロックといい、BIOSを書き換えるための必要最小限の機能が含まれている。したがって、書き換え中の電源断などで書き換えに失敗した場合でも、ブートブロックを使用することで再度書き換えを実施することが可能である。
BIOSとマイクロコード
BIOS ROMには時としてマイクロコードが格納される。マイクロコードを利用するデバイスは、CPU(インテル Pentium Pro、AMD Athlon以降)、SCSIホストバスアダプタ(アダプテック社製品等)、ネットワークインターフェース(Marvell社、ブロードコム社製品等)等がある。これらはBIOSブート初期の段階でマイクロコードがデバイスに転送され、デバイスが活性化される。またマイクロコードではないが、FPGAベースのデバイスではロジックをBIOSが書き込んで活性化させる物もある。マイクロコードやロジックは新製品や機能改良によってバージョンアップが必要になる事がある。特にCPUのマイクロコードは新製品が出る都度に新しいマイクロコードが必ずといって良い程作られるので、マザーボードに最新CPUを搭載する為にBIOSアップデートによって最新のマイクロコード導入が必要となる場合がある。グラフィクスカードはマイクロコードを使用するにも関わらず例外的にBIOS ROMには含まれていない。通常、VGA相当の専用回路でVGA BIOS機能を提供し、オペレーティングシステム起動後デバイスドライバを経由してアプリケーション上のシェーダプログラムをマイクロコードにコンパイルしてGPUに転送して実行している。
BIOSに分類されるプログラム
- VGA BIOS
- ビデオサブシステム(主にテキストと低解像度グラフィクス)
- VESA BIOS
- ビデオサブシステム(SVGAグラフィクス)
- SCSI BIOS
- ディスクI/Oサブシステム(拡張ATAもこの形態をとる)
- APM BIOS
- 初期のパワーマネジメントシステム。後に改良されてACPI BIOSの一部となる。
- PCI BIOS
- I/Oサブシステム。後にACPI BIOSの一部となる。
- ACPI BIOS
- 現在主流となっているパワーマネジメントシステム及びI/Oサブシステム
- SM BIOS
- システムマネジメントシステム
脚注
- ↑ BIOSに代わるファームウェア“UEFI”とは一体何か? 1/2 | 震撼性能! Sandy Bridgeに死角なし!! | DOS/V POWER REPORT
- ↑ x86用のコードではプロセッサの構造上リアルモードでの命令セットを使わざるを得ないという制限もある。