| 年が始まった | 1981年[ a ] |
|---|---|
| 組織 | 当初はIBMの独自ソフトウェアだったが、後に業界全体の事実上の標準となった。1996年、BIOSブート仕様はCompaq、Phoenix Technologies、Intelによって作成された。 |
| 後継 | UEFI |
コンピューティングにおいて、BIOS [ b ]またはBasic Input/Output System [ c ]は、オペレーティングシステムやプログラムにランタイムサービスを提供し、起動プロセス (電源投入時の起動) 中にハードウェアの初期化を実行するために使用されるファームウェアの一種です。[ 1 ] BIOS ファームウェアを使用するコンピュータでは、ファームウェアはコンピュータのマザーボードにプリインストールされています。
その名前は、 1975年にCP/Mオペレーティングシステムで使用されたBasic Input/Output Systemに由来します。 [ 2 ] [ 3 ] BIOSファームウェアは元々IBM PC専用でしたが、Compaq 、Phoenix Technologies 、 AMIなどの企業が互換性のあるシステムを作成するためにリバースエンジニアリングを行いました。そのオリジナルシステムのインターフェースは事実上の標準として機能しています。
古いPCのBIOSは、システムハードウェアコンポーネントを初期化およびテストし(電源投入時自己診断テスト、略してPOST)、マスストレージデバイスからブートローダーをロードしてカーネルを初期化します。DOSの時代には、BIOSはキーボード、ディスプレイ、ストレージ、その他の入出力(I/O)デバイス用のBIOS割り込み呼び出しを提供し、アプリケーションプログラムとオペレーティングシステムへのインターフェースを標準化していました。最近のオペレーティングシステムは、起動後にBIOS割り込み呼び出しを使用しません。[ 4 ]
ほとんどのBIOS実装は、システムチップセットをはじめとする様々なデバイスとインターフェースすることで、特定のコンピュータやマザーボードモデルと連携するように設計されています。当初、BIOSファームウェアはPCマザーボード上のROMチップに格納されていました。後のコンピュータシステムでは、BIOSの内容はフラッシュメモリに格納されるため、チップをマザーボードから取り外すことなく書き換えることができます。これにより、エンドユーザーはBIOSファームウェアを簡単にアップデートして新機能を追加したり、バグを修正したりすることが可能になりますが、同時にコンピュータがBIOSルートキットに感染する可能性も生じます。さらに、BIOSのアップグレードに失敗すると、マザーボードが故障する恐れもあります。
Unified Extensible Firmware Interface (UEFI) は、従来の PC BIOS の後継であり、その技術的な制限に対処することを目的としています。[ 5 ] UEFI ファームウェアには、UEFI ネイティブ動作をサポートしていないオペレーティングシステムやオプション カードとの互換性を維持するために、従来の BIOS との互換性が含まれる場合があります。[ 6 ] [ 7 ] [ 8 ] Intel は、プラットフォームに応じて 2020 年から 2024 年にかけて BIOS インターフェイスからのブートのサポートを段階的に終了しました。[ 9 ]従来の BIOS ファームウェアを使用する PC での実行を公式にサポートする最後のバージョンのMicrosoft WindowsはWindows 10であり、 Windows 11ではUEFI 準拠のシステムが必要です (バージョン 24H2以降の Windows 11 の IoT Enterprise エディションを除く[ 10 ] )。
/* CP / MBASICI / OSYSTEM (BIOS) 著作権:ゲイリー・A・キルダル 1975年6月 */ […] /* BASICDISKOPERATINGSYS TEM (BDOS) 著作権:ゲイリー・A・キルダル 1975年6月 */
—ローレンス・リバモア研究所(LLL)の CP/M 1.1 または 1.2 のPL/Mソース コード内の BDOS.PLM ファイル ヘッダーからの抜粋[ 2 ]
BIOS(Basic Input/Output System)という用語は、 Gary Kildall [ 11 ] [ 12 ]によって考案され、1975 年にCP/Mオペレーティングシステムに初めて登場しました[ 2 ] [ 3 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] 。これは、起動時にロードされ、ハードウェアと直接インターフェースする CP/M のマシン固有の部分を指します。[ 3 ](CP/M マシンは通常、ROM にシンプルなブートローダーしか持っていません。)
MS-DOS、PC DOS、またはDR-DOSの各バージョンには、「 IO.SYS」、「IBMBIO.COM 」、「IBMBIO.SYS」、「DRBIOS.SYS」など様々な名前のファイルが含まれています。このファイルは「DOS BIOS」(「DOS I/Oシステム」とも呼ばれる)として知られており、オペレーティングシステムの下位レベルのハードウェア固有の部分が含まれています。ROMに格納されている、ハードウェア固有ではあるもののオペレーティングシステムに依存しない「システムBIOS」と合わせて、「CP/M BIOS 」に相当するものです。
IBM PC専用だったBIOSは、互換性のあるシステムを開発しようとするCompaq、Phoenix Technologies、AMIなどの企業によってリバースエンジニアリングされてきた。
PS/2 マシンの導入に伴い、IBM はシステム BIOS をリアル モードとプロテクト モードに分割しました。リアル モード部分は、DOS などの既存のオペレーティングシステムとの下位互換性を提供することを目的としており、「CBIOS」(「Compatibility BIOS」の略)と名付けられました。一方、「ABIOS」(「Advanced BIOS」の略)は、OS/2などのマルチタスク オペレーティングシステムに特化した新しいインターフェイスを提供しました。[ 16 ]
初代IBM PCおよびXTの BIOS には対話型のユーザー インターフェイスはありませんでした。電源投入時の自己診断テスト(POST) がビデオ ディスプレイ アダプタの初期化に成功しなかった場合は、エラー コードまたはメッセージが画面に表示されるか、コード化された一連の音が生成されてエラーを知らせました。IBM PC および XT のオプションは、メイン ボードおよび拡張カード上のスイッチとジャンパーによって設定されました。1990 年代半ば頃から、BIOS ROM に「BIOS 構成ユーティリティ」 (BCU [ 17 ] ) または「BIOS セットアップ ユーティリティ」が含まれるのが一般的になり、システムの電源投入時に特定のキー シーケンスでアクセスできるようになりました。このプログラムを使用すると、キーボードで制御される対話型メニュー システムを介して、以前はDIP スイッチを使用して設定していたタイプのシステム構成オプションをユーザーが設定できるようになりました。その間、IBM ATを含むIBM 互換 PCは、バッテリー バックアップ RAM に構成設定を保持しEISAバスを搭載したコンピュータ全般に当てはまり、その構成プログラムはEISA構成ユーティリティ(ECU)と呼ばれていた。
最新のWintel互換コンピュータは、1990年代後半のROMに常駐するBIOSセットアップユーティリティと本質的に変わらないセットアップルーチンを備えています。ユーザーはキーボードとビデオディスプレイを使用してハードウェアオプションを設定できます。最新のWintelマシンでは、BIOS構成設定がフラッシュROMに保存されている場合があり、おそらくBIOS自体が格納されているのと同じフラッシュROMです。
ハードディスクドライブのホストバスアダプタやビデオカードなどの周辺機器カードには独自のファームウェアがあり、BIOS拡張オプションROMコードは拡張カードのファームウェアの一部である場合があります。このコードはBIOSに追加機能を提供します。オプションROMのコードは、BIOSがマスストレージからオペレーティングシステムを起動する前に実行されます。これらのROMは通常、ハードウェアのテストと初期化、新しいBIOSサービスの追加、または既存のBIOSサービスを独自のサービスに置き換えます。たとえば、SCSIコントローラには通常、そのコントローラを介して接続されたハードドライブのサポートを追加するBIOS拡張ROMがあります。拡張ROMには原則としてオペレーティングシステムが含まれる場合もあれば、ネットワークブートなどのまったく異なるブートプロセスを実装する場合もあります。BIOS拡張ROMを含むアダプタカード(またはROMチップ)を取り外したり挿入したりすることで、IBM互換コンピュータシステムの動作を完全に変更できます。
マザーボードの BIOS には、通常、統合ディスプレイと統合ストレージの初期化とブートストラップを行うコードが含まれています。初期化プロセスでは、初期化対象のデバイスに関連するコードの実行、デバイスの特定、デバイスタイプの検証、ベースレジスタの設定、ポインタの設定、割り込みベクタテーブルの設定、[ 18 ]デバイス内の利用可能なレジスタを整理する方法であるページングモードの選択、割り込みに関連するソフトウェアルーチンにアクセスするためのデフォルト値の設定、[ 19 ]およびデフォルト値を使用したデバイス構成の設定[ 20 ]などが行われる場合があります。さらに、 SCSI、RAID、ネットワークインターフェイスカード、ビデオカードなどのプラグインアダプタカードには、多くの場合、独自の BIOS (ビデオ BIOSなど) が含まれており、特定のコンポーネントのシステム BIOS コードを補完または置き換えます。マザーボードに組み込まれたデバイスでも、このように動作することがあります。オプション ROM がマザーボード BIOS の一部となる場合があります。
アドインカードがマザーボードのBIOSでサポートされていない場合、オプションROMが必要になります。これは、オペレーティングシステムをロードする前に、BIOSサービスを介してカードを初期化またはアクセス可能にする必要があるためです(通常、これはブートプロセスで必要となることを意味します)。初期のPCシステム(特にIBM PCjrなど)におけるROMのもう一つの利点は、ROMがメインシステムRAMよりも高速だったことです。(現代のシステムでは、これとは正反対で、BIOS ROMコードは通常RAMにコピー(シャドウイング)されるため、より高速に動作します。)

オプションROMは通常アダプタカードに搭載されています。しかし、初代PC、そしておそらくPC XTにも、オプションROMを挿入できるマザーボード(IBMの用語では「システムボード」)に予備のROMソケットがあり、BASICインタープリタを含む4つのROMを取り外して、オプションROMとなるカスタムROMに交換することもできます。IBM PCjrは、前面に2つのROMカートリッジスロットを備えている点で、PCの中でも独特です。これらのスロットのカートリッジは、オプションROMに使用される上位メモリ領域の同じ領域にマッピングされ、カートリッジにはBIOSが認識するオプションROMモジュールを含めることができます。カートリッジには、BASICプログラムなど、異なる方法で処理される他のタイプのROMモジュールを含めることもできます。1つのPCjrカートリッジには、異なるタイプの複数のROMモジュールを含めることができ、それらは1つのROMチップにまとめて格納されている可能性があります。
8086と8088 は物理アドレス FFFF0h から始まります。[ 21 ] 80286 は物理アドレス FFFFF0h から始まります。[ 22 ] 80386以降の x86 プロセッサは物理アドレス FFFFFFF0h から始まります。[ 23 ] [ 24 ] [ 25 ]システムが初期化されると、BIOS の最初の命令がそのアドレスに現れます。
システムの電源を入れた直後、またはリセットボタンが押された場合(「コールドブート」)、完全な電源投入時自己診断テスト(POST)が実行されます。Ctrl+Alt+Deleteキーが押された場合(「ウォームブート」)、BIOSによってテストされる不揮発性BIOSメモリ(「CMOS 」)に格納された特別なフラグ値により、時間のかかるPOSTとメモリ検出をスキップできます。
POSTは、CPU、チップセット、RAM、マザーボード、ビデオカード、キーボード、マウス、ハードディスクドライブ、光ディスクドライブ、および統合周辺機器を含むその他のハードウェアなどのシステムデバイスを識別、テスト、および初期化します。
初期のIBM PCには、POSTにキーボードポートを介してプログラムをRAMにダウンロードして実行するルーチンがありました。[ 26 ] [ 27 ]この機能は工場でのテストや診断目的で使用されていました。
マザーボードのBIOSがPOSTを完了すると、ほとんどのBIOSバージョンでは、BIOS拡張ROMとも呼ばれるオプションROMモジュールを検索して実行します。マザーボードのBIOSは、「上位メモリ領域」(x86リアルモードアドレス空間のアドレス0xA0000以上の部分)の一部にある拡張ROMをスキャンし、見つかった各ROMを順番に実行します。メモリマップされたオプションROMを検出するために、BIOSの実装では、2KB (2,048バイト)境界でリアルモードアドレス空間をスキャンし、2バイトのROMシグネチャ(0x55に続いて0xAA)を探します0x0C0000。有効な拡張ROMでは、このシグネチャの後に、拡張ROMがリアルメモリ内で占める512バイトブロックの数を示す1バイトが続き、次のバイトはオプションROMのエントリポイント(「エントリオフセット」とも呼ばれる)です。 ROMのチェックサムが有効な場合、BIOSは制御をエントリアドレスに渡します。通常のBIOS拡張ROMの場合、これは拡張機能の初期化ルーチンの開始アドレスになります。0x0F0000
この時点で、拡張ROMコードが処理を引き継ぎ、通常は制御対象のハードウェアのテストと初期化を行い、起動後のアプリケーションで使用するための割り込みベクタを登録します。また、BIOSサービス(以前に初期化されたオプションROMによって提供されるサービスを含む)を使用して、ユーザー設定インターフェースを提供したり、診断情報を表示したり、その他必要な処理を実行したりする場合があります。
オプションROMは通常、初期化処理が完了するとBIOSに戻ります。オプションROMがBIOSに戻ると(そして戻った場合)、BIOSはメモリ空間内のオプションROM領域全体がスキャンされるまで、他のオプションROMの検索を続け、見つかったオプションROMを順次呼び出します。オプションROMがBIOSに戻らない場合もあり、その場合はBIOSの起動シーケンスが完全に中断されます。

POSTが完了し、オプションROMをサポートするBIOSでは、オプションROMのスキャンが完了し、有効なチェックサムを持つすべてのROMモジュールが検出された後に、BIOSは割り込み19hを呼び出してブート処理を開始します。ブート後、ロードされたプログラムも割り込み19hを呼び出してシステムを再起動できますが、BIOSの再起動処理を妨げる可能性のある割り込みやその他の非同期ハードウェア処理を無効にするように注意する必要があります。そうしないと、再起動中にシステムがハングアップしたりクラッシュしたりする可能性があります。
割り込み 19h が呼び出されると、BIOS はハードディスク、フロッピーディスク、CD、DVDなどの「ブート デバイス」上でブート ローダーソフトウェアを探します。最初に見つかったブートソフトウェアをロードして実行し、PC の制御権を取得します。[ 28 ]
BIOS は、不揮発性 BIOS メモリ( CMOS ) または初期の PC ではDIP スイッチに設定されたブート デバイスを使用します。BIOS は、最初のセクタ (ブート セクタ)を読み込もうとすることで、各デバイスがブート可能かどうかを確認します。セクタが読み取れない場合、BIOS は次のデバイスに進みます。セクタが正常に読み取られた場合、一部の BIOS では、ブート セクタを受け入れてデバイスをブート可能とみなす前に、セクタの最後の 2 バイト (512 バイト) にブート セクタ署名 0x55 0xAA があるかどうかも確認します。[ d ]
起動可能なデバイスが検出されると、BIOSはロードされたセクタに制御を移します。BIOSは、ブートセクタの最後の2バイトにブートセクタの署名があるかどうかを確認する以外は、ブートセクタの内容を解釈しません。パーティションテーブルやBIOSパラメータブロックなどのデータ構造の解釈は、ブートセクタ内のブートプログラム、またはブートプロセスを通じてロードされる他のプログラムによって行われます。
ネットワークアダプタなどのディスク以外のデバイスは、オプションROMまたはマザーボードのBIOS ROMに組み込まれた同等のROMによって定義された手順に従って起動を試みます。そのため、オプションROMはマザーボードのBIOS ROMによって定義された起動プロセスに影響を与えたり、置き換えたりすることもあります。
El Torito光メディアブート規格では、光ドライブはブート目的でBIOSに対して3.5インチ高密度フロッピーディスクをエミュレートします。CD-ROMやDVD-ROMの「最初のセクター」を読み取る操作は、フロッピーディスクやハードディスクのように単純に定義できるものではありません。さらに、メディアの複雑さから、1つのセクターに有用なブートプログラムを作成することは困難です。ブート可能な仮想フロッピーディスクには、光メディアをネイティブ形式で利用できるソフトウェアを含めることができます。
拡張ROMが、ネットワークデバイスやSCSIアダプタなどからのシステム起動方法を変更したい場合、BIOSブート仕様(BBS)APIを使用して、その変更権限を登録できます。拡張ROMがBBS APIを使用して登録されると、ユーザーはBIOSのユーザーインターフェースから利用可能な起動オプションを選択できるようになります。そのため、ほとんどのBBS準拠PC BIOS実装では、拡張ROMの実行とBBS APIへの登録が完了するまで、ユーザーがBIOSのユーザーインターフェースにアクセスできないようになっています。
また、拡張ROMがシステムの起動方法を一方的に変更したい場合は、割り込み19h、または割り込み19hから通常呼び出される他の割り込み(例えば、BIOSディスクサービスである割り込み13hなど)をフックして、BIOSの起動プロセスを傍受することができます。そして、BIOSの起動プロセスを独自のプロセスに置き換えたり、独自の起動アクションを挿入したり、BIOSが特定のデバイスを起動可能として検出しないようにしたり、あるいはその両方を行うことで、起動シーケンスを変更したりすることができます。BIOSブート仕様が公布される前は、これが拡張ROMがマザーボードのネイティブBIOSで起動がサポートされていないデバイスの起動機能を実装する唯一の方法でした。
ユーザーはBIOSによって設定される起動優先順位を選択できます。例えば、ほとんどのコンピュータには起動可能なハードディスクが搭載されていますが、場合によっては起動優先順位の高いリムーバブルメディアドライブが搭載されていることもあります。そのため、ユーザーはリムーバブルディスクから起動するように設定できます。
最新のBIOSのほとんどでは、起動優先順位をユーザーが設定できます。古いBIOSでは、起動優先順位のオプションは限られており、初期のBIOSでは、フロッピーディスクドライブが最優先、次に固定ディスク(ハードディスク)が最優先という固定優先順位方式が採用されていました。通常、その他の起動デバイスはサポートされていませんでしたが、インストールされたオプションROMによってこれらのルールが変更されることがありました。初期のPCのBIOSは、たとえ2台のドライブが接続されていても、通常は最初のフロッピーディスクドライブまたは最初のハードディスクドライブからのみ起動していました。
オリジナルのIBM PCおよびXTでは、起動可能なディスクが見つからない場合、BIOSは割り込み18hへの割り込み呼び出しによってROM BASICの起動を試みました。ROMでBASICを使用するプログラムは少なかったため、クローンPCメーカーはROM BASICを省略しました。そのため、ディスクからの起動に失敗したコンピュータは「No ROM BASIC」と表示して停止しました(割り込み18hへの応答として)。
後期のコンピュータでは、「起動可能なディスクが見つかりません」といったメッセージが表示されるようになりました。中には、ディスクを挿入してキーを押すように促し、起動プロセスを再試行させるものもありました。最新のBIOSでは、起動プロセスが失敗した場合、何も表示されないか、自動的にBIOS設定ユーティリティに入る場合があります。
ブート プログラムの環境は非常に単純です。CPU はリアル モードであり、汎用レジスタとセグメント レジスタは、SS、SP、CS、DL を除いて未定義です。CS:IP は常に物理アドレス を指します0x07C00。CS と IP の実際の値は明確に定義されていません。一部の BIOS では CS:IP を に、0x0000:0x7C00他の BIOS では を使用する場合があります0x07C0:0x0000。[ 29 ]ブート プログラムは常にこの固定アドレスにロードされるため、ブート プログラムを再配置する必要はありません。DL には、割り込み 13hで使用されるブート デバイスのドライブ番号が含まれる場合があります。SS:SP は、ハードウェア割り込みをサポートするのに十分な大きさと思われる有効なスタックを指しますが、それ以外の場合は SS と SP は未定義です。 (割り込みを処理するにはスタックが既に設定されている必要があり、BIOS が少なくとも時刻カウントを維持するために常に使用し、POST 中に初期化するシステムタイマーティック割り込みをアクティブにしてキーボードを動作させるには、割り込みが有効になっている必要があります。BIOS のキーボードサービスが呼び出されなくてもキーボードは動作します。キーストロークは受信され、BIOS が管理する 15 文字のタイプアヘッドバッファに格納されます。)ブートプログラムは独自のスタックを設定する必要があります。BIOS によって設定されるスタックのサイズは不明であり、その場所も同様に可変であるためです。ブートプログラムは SS:SP を調べてデフォルトのスタックを調べることができますが、無条件に新しいスタックを設定する方が簡単で短くなります。
ブート時には、すべての BIOS サービスが使用可能で、アドレス以下のメモリ0x00400には割り込みベクタ テーブルが格納されています。BIOS POST は、システム タイマー、割り込みコントローラ、DMA コントローラ、およびその他のマザーボード/チップセット ハードウェアを、すべての BIOS サービスを準備完了状態にするために必要なとおりに初期化しています。従来型メモリおよび拡張メモリ内のすべてのシステム DRAM の DRAM リフレッシュが設定され、実行されていますが、必ずしも拡張メモリとは限りません。BIOS割り込みに対応する割り込みベクタは、BIOS 内の適切なエントリ ポイントを指すように設定され、BIOS によって初期化されたデバイスのハードウェア割り込みベクタは、BIOS が提供する ISR を指すように設定され、BIOS がプログラムがフックするために生成する割り込みを含むその他の割り込みは、すぐに戻るデフォルトのダミー ISR に設定されています。BIOS は、0x00400–0x004FFPOST 中に初期化されたさまざまなパラメータを持つシステム RAM の予約済みブロックをアドレスに保持しています。アドレスおよびそれより上のすべてのメモリは0x00500ブート プログラムで使用できます。ブート プログラム自身を上書きすることもできます。[ 30 ] [ 31 ]
BIOS ROMは、特定のメーカーのハードウェアに合わせてカスタマイズされており、キーストロークの読み取りやフロッピーディスクへのデータセクターの書き込みといった低レベルサービスを、オペレーティングシステムを含むプログラムに標準化された方法で提供できるようになっています。例えば、IBM PCにはモノクロディスプレイアダプタとカラーディスプレイアダプタ(それぞれ異なるディスプレイメモリのアドレスとハードウェアを使用)が搭載されている可能性がありますが、単一の標準的なBIOSシステムコールを呼び出すだけで、テキストモードまたはグラフィックモードで画面上の指定された位置に文字を表示できます。
BIOSは、周辺機器(キーボード、基本的なテキストおよびグラフィック表示機能など)を操作するための基本的な入出力関数の小さなライブラリを提供します。MS-DOSを使用している場合、アプリケーションプログラム(またはMS-DOS)は、割り込み13h命令を実行してディスク機能にアクセスしたり、文書化された他の多数のBIOS割り込み呼び出しのいずれかを実行してビデオ表示、キーボード、カセット、およびその他のデバイス機能にアクセスしたりすることで、BIOSサービスにアクセスできました。
この基本的なファームウェア機能に取って代わるように設計されたオペレーティングシステムと実行ソフトウェアは、アプリケーションソフトウェアに代替ソフトウェアインターフェイスを提供します。アプリケーションは、これらのサービスを自身に提供することもできます。これは、プログラマがグラフィック表示にBIOSのビデオサービスを使用すると非常に遅いことに気づいた1980年代のMS-DOS時代にすでに始まっていました。画面出力の速度を上げるために、多くのプログラムはBIOSをバイパスしてビデオディスプレイハードウェアを直接プログラムしました。他のグラフィックプログラマ、特にデモシーンのプログラマは、 IBM BIOSではサポートされておらず、それを回避しないと利用できないPCディスプレイアダプタの技術的機能があることに気づきました。AT互換BIOSはIntelリアルモードで動作していたため、286以降のプロセッサで保護モードで動作するオペレーティングシステムは、BIOSサービスを置き換えるために保護モード動作と互換性のあるハードウェアデバイスドライバを必要としました。
WindowsやLinuxなどの最新のオペレーティングシステムは、起動プロセス中にのみBIOS割り込み呼び出しを使用します。オペレーティングシステムの最初のグラフィカル画面が表示される前に、入力と出力は通常BIOSを介して処理されます。Windowsのテキストメニューなどのブートメニューは、ユーザーが起動するオペレーティングシステムを選択したり、セーフモードで起動したり、最後に正常に動作した構成を使用したりできるように、BIOSを介して表示され、BIOSを介してキーボード入力を受け取ります。[ 4 ]
多くの最新のPCは、システムにBIOSまたはCSM対応のUEFIファームウェアが搭載されていれば、コンソールとディスクのI/OにBIOSを多用するMS-DOSやDR-DOSなどの旧来のオペレーティングシステムを起動して実行することができます。
IntelプロセッサはP6マイクロアーキテクチャ以降、再プログラム可能なマイクロコードを備えています。[ 32 ] [ 33 ] [ 34 ] AMDプロセッサはK7マイクロアーキテクチャ以降、再プログラム可能なマイクロコードを備えています。BIOS には、初期プロセッサ マイクロコードのエラーを修正するプロセッサ マイクロコードへのパッチが含まれています。マイクロコードはプロセッサのSRAMにロードされるため、再プログラミングは永続的ではなく、システムを起動するたびにマイクロコードの更新がロードされます。再プログラム可能なマイクロコードがない場合、高価なプロセッサ交換が必要になります。[ 35 ]例えば、Pentium FDIV バグは、元の Pentium プロセッサの欠陥のあるマイクロコードを再プログラムできなかったため、製品のリコールが必要となり、Intel にとって高額な失敗となりました。オペレーティングシステムもマイクロコードを更新できます。[ 36 ] [ 37 ]
一部のBIOSには、ソフトウェアライセンス記述テーブル(SLIC)が含まれています。これは、 Dellなどの機器製造業者(OEM)によってBIOS内に配置されたデジタル署名です。SLICはACPIデータテーブルに挿入され、アクティブなコードは含まれていません。[ 38 ] [ 39 ]
Microsoft Windows および Microsoft アプリケーション ソフトウェアの OEM 版を配布するコンピュータ メーカーは、SLIC を使用して、Windows ソフトウェアを含む OEM Windows インストール ディスクおよびシステムリカバリ ディスクのライセンスを認証できます。SLIC を搭載したシステムは、OEM プロダクト キーで事前にアクティベートでき、BIOS で SLIC に対して XML 形式の OEM 証明書を検証して自己アクティベートします (システム ロック プレインストール、SLP を参照)。ユーザーが Windows を新規インストールする場合、アクティベーションを回避するには、OEM キー (SLP または COA) と SLIC のデジタル証明書の両方を所有している必要があります。[ 38 ]これは、ユーザーが OEM から提供された事前にカスタマイズされたイメージを使用して復元を実行すると実現できます。上級ユーザーは、OEM イメージから必要な証明書ファイルをコピーし、SLP プロダクト キーをデコードして、SLP アクティベーションを手動で実行できます。
BIOS の実装によってはオーバークロックが可能で、これはCPU をメーカーが保証する性能よりも高いクロックレートに調整する操作です。ただし、オーバークロックは冷却が不十分なコンピュータではシステムの信頼性を著しく損ない、一般的にコンポーネントの寿命を縮める可能性があります。また、オーバークロックを誤って行うと、コンポーネントが急速に過熱して機械的に破壊される可能性もあります。[ 40 ]
MS-DOSなどの古いオペレーティングシステムの中には、PC内のほとんどの入出力タスクを実行するためにBIOSに依存しているものがあります。[ 41 ]
保護モード(およびロングモード)のオペレーティングシステムでは、リアルモードBIOSサービスを直接呼び出すのは非効率的です。最新のマルチタスクオペレーティングシステムは、初期ロード後にはBIOS割り込み呼び出しを使用しません。
1990年代には、BIOSはMicrosoft WindowsやUnix系オペレーティングシステム向けに、 Advanced Power Management (APM)、Plug and Play BIOS、Desktop Management Interface (DMI)、VESA BIOS Extensions (VBE)、e820、MultiProcessor Specification (MPS)などの保護モードインターフェイスを提供していました。2000年以降、ほとんどのBIOSは最新のオペレーティングシステム向けにACPI、SMBIOS、VBE、e820インターフェイスを提供しています。[ 42 ] [ 43 ] [ 44 ] [ 45 ] [ 46 ]
オペレーティングシステムがロードされた後も、システム管理モードのコードはSMRAMで実行され続けます。2010年以降、BIOSテクノロジーはUEFIへの移行プロセスにあります。[ 5 ]
歴史的に、IBM PC および XT の BIOS には組み込みのユーザー インターフェイスはありませんでした。初期の PC (XT クラス) の BIOS バージョンはソフトウェアで構成できず、代わりにユーザーはマザーボード上のDIP スイッチを介してオプションを設定していました。80286 CPU を搭載したほとんどの IBM 互換機を含む後期のコンピュータには、BIOS 設定を保持するバッテリー バックアップの不揮発性 BIOS メモリ(CMOS RAM チップ) が搭載されていました。[ 47 ]ビデオ アダプタの種類、メモリ サイズ、ハードディスク パラメータなどのこれらの設定は、ROM に組み込まれているのではなく、ディスクから構成プログラムを実行することによってのみ構成できました。メモリ サイズなどの設定を構成するために、IBM ATには特別な「リファレンス フロッピー ディスク」が挿入されました。 [ 48 ]
初期の BIOS バージョンには、パスワードやブート デバイスの選択オプションはありませんでした。BIOS は、最初のフロッピー ドライブから起動するようにハード コード化されており、それが失敗した場合は最初のハードディスクから起動するようになっていました。初期の AT クラス マシンのアクセス制御は、物理的なキー ロック スイッチによって行われていました (コンピュータ ケースを開けることができれば、これを解除するのは難しくありませんでした)。[ 49 ]コンピュータの電源を入れることができる人は誰でも起動できました。[ 50 ]
その後、386クラスのコンピュータでは、BIOSコードとともにBIOSセットアップユーティリティがROM自体に統合されるようになりました。これらのコンピュータは通常、特定のキーまたはキーの組み合わせが押されるとBIOSセットアップユーティリティが起動し、そうでない場合はBIOS POSTとブートプロセスが実行されます。

最新のBIOSセットアップユーティリティは、 PC起動時にキーボードの特定のキーを押すことでアクセスできるテキストユーザーインターフェース(TUI)またはグラフィカルユーザーインターフェース(GUI)を備えています。通常、起動初期に「セットアップに入るにはDELキーを押してください」のように、そのキーが短時間表示されます。
実際のキーは特定のハードウェアによって異なります。設定キーは、多くの場合Delete(Acer、ASRock、Asus PC、ECS、Gigabyte、MSI、Zotac)とF2(Asus マザーボード、Dell、Lenovoノートパソコン、Origin PC、Samsung、Toshiba )ですが、 F1(Lenovo デスクトップ)やF10(HP )の場合もあります。[ 51 ]
BIOSセットアップユーティリティには通常、以下の機能が含まれています。
最新のBIOSセットアップ画面には、多くの場合、PCヘルスステータスまたはハードウェアモニタリングタブがあり、これはマザーボードのハードウェアモニターチップと直接インターフェースします。[ 52 ]これにより、CPUとシャーシの温度、電源ユニットから供給される電圧を監視したり、マザーボードに接続されているファンの速度を監視および制御したりすることが可能になります。
システムが起動すると、ハードウェアの監視とコンピュータのファン制御は通常、ハードウェアモニタチップ自体によって直接行われます。このチップは、I²CまたはSMBusを介してインターフェースされる独立したチップである場合もあれば、業界標準アーキテクチャ(ISA) またはローピンカウント(LPC) を介してインターフェースされるスーパー I/Oソリューションの一部として提供される場合もあります。 [ 53 ] NetBSD ( envsys付き)やOpenBSD (sysctl hw.sensors付き)などの一部のオペレーティングシステムは、ハードウェアモニタとの統合インターフェースを備えています。
しかし、状況によっては、BIOS はACPIを介してハードウェア監視に関する基礎情報も提供し、その場合、オペレーティングシステムは ACPI を使用してハードウェア監視を実行する可能性があります。[ 54 ] [ 55 ] [ 56 ] [ 57 ] [ 58 ]

現代のPCでは、BIOSは書き換え可能なEEPROM [ 59 ]またはNORフラッシュメモリ[ 60 ]に格納されており、その内容を置き換えたり変更したりすることができます。この内容の書き換えは、フラッシュと呼ばれることもあります。これは、通常システムの製造元が提供する専用プログラム、またはPOST時にハードドライブまたはUSBフラッシュドライブ内のBIOSイメージを使用して実行できます。このような内容を含むファイルは、「BIOSイメージ」と呼ばれることもあります。BIOSは、バグを修正したり、パフォーマンスを向上させたり、新しいハードウェアをサポートしたりするために、新しいバージョンにアップグレードするために再フラッシュされることがあります。一部のコンピュータでは、アップデートフロッピーディスクまたはハードドライブ上の専用パーティションを介してBIOSを更新することもできます。[ 61 ]

オリジナルの IBM PC BIOS (およびカセット BASIC) は、マザーボード上のソケットにあるマスク プログラムされた読み出し専用メモリ(ROM) チップに格納されていました。ROM はユーザーが交換することはできましたが、変更することはできませんでした。 [ 62 ]アップデートを可能にするために、多くの互換コンピュータは、 EPROM、EEPROM、そして後にフラッシュ メモリ(通常はNOR フラッシュ) デバイスなどの再プログラム可能な BIOS メモリ デバイスを使用しました。BIOS メーカー Micro Firmware の社長である Robert Braver 氏によると、フラッシュ BIOSチップは、電気的に消去可能な PROM (EEPROM) チップが標準的な紫外線消去可能な PROM ( EPROM ) チップよりも安価でプログラムしやすいため、1995 年頃に普及しました。フラッシュ チップは回路内でプログラム (および再プログラム) されますが、EPROM チップは再プログラムするためにマザーボードから取り外す必要があります。[ 63 ] BIOS バージョンは、新しいバージョンのハードウェアを活用し、以前のバージョンの BIOS のバグを修正するためにアップグレードされます。[ 64 ]
IBM AT 以降、PC は BIOS を介して設定可能なハードウェア クロックをサポートしました。2000 年になると手動で世紀を変更できる世紀ビットがありました。1995 年に作成されたほとんどの BIOS リビジョンと 1997 年に作成されたほぼすべての BIOS リビジョンは、1999 年 12 月 31 日の午前 12 月 31 日を過ぎたときに世紀ビットを自動的に設定することで、2000 年をサポートしました。 [ 65 ]
最初のフラッシュチップはISAバスに接続されていました。1998年からBIOSフラッシュは「ファームウェアハブ」(FWH)として知られる新しい標準実装に従ってLPCバスに移行しました。2005年にはBIOSフラッシュメモリはSPIバスに移行しました。[ 66 ]
BIOS のサイズ、および ROM、EEPROM、またはそれが格納される他のメディアの容量は、コードに新機能が追加されるにつれて時間とともに増加してきました。現在では、最大 32 メガバイトのサイズの BIOS バージョンが存在します。対照的に、オリジナルの IBM PC BIOS は 8 KB マスク ROM に格納されていました。一部の最新のマザーボードには、Linux ディストリビューションなどのコンパクトなオペレーティングシステム全体を格納できる、さらに大きな NANDフラッシュメモリIC が搭載されています。たとえば、一部の ASUS ノートブックには、NAND フラッシュメモリ IC に組み込まれたSplashtop OS が含まれていました。[ 67 ]ただし、オペレーティングシステムと BIOS を PC の ROM に含めるというアイデアは新しいものではありません。1980 年代には、Microsoft が MS-DOS 用の ROM オプションを提供し、 Tandy 1000 HXなどの一部の PC クローンの ROM に含まれていました。
IBM PC ATおよび初期の互換機には、別のタイプのファームウェアチップが搭載されていました。ATでは、キーボードインターフェースは独自のプログラマブルメモリを備えたマイクロコントローラによって制御されていました。IBM ATでは、これは40ピンのソケットデバイスでしたが、一部のメーカーはEPROMに似たEPROMバージョンのチップを使用していました。このコントローラには、 1メガバイトを超えるメモリを管理するためのA20ゲート機能も割り当てられていました。上位メモリを使用できるソフトウェアを活用するには、この「キーボードBIOS」のアップグレードが必要になる場合がありました。
BIOSには、メモリの初期化(例えば、 SPDやメモリタイミングの初期化)を担当するメモリ参照コード(MRC)などのコンポーネントが含まれている場合があります。[ 68 ]: 8 [ 69 ]
最新のBIOS [ 70 ]には、 Intel Management EngineまたはAMD Platform Security Processorファームウェアが含まれています 。
IBMは、初代PC、PC XT、PC AT、およびその他の当時のPCモデル向けに、各機種ごとのIBM PCテクニカルリファレンスマニュアルの付録としてBIOSの全リストを公開しました。BIOSリストの公開の利点は、ユーザーがBIOSの動作内容とその仕組みを正確に把握できることでした。しかし、これらのBIOSはIBMの著作権で保護されていたため、他のメーカーが使用することはできませんでした。
1983年3月、コンパックはクリーンルームで設計されたBIOSを搭載した「Compaq Portable」を発売した。これにより、コンパックはIBM PCのクローンを初めて成功させた企業となった。しかし、コンパックは自社のBIOSを他のコンピュータメーカーに提供することはなかった。

1984 年 5 月、Phoenix Software Associates は初の ROM-BIOS をリリースしました。この BIOS により、OEM は Compaq がPortableで行ったように IBM PC BIOS をリバースエンジニアリングすることなく、実質的に完全に互換性のあるクローンを構築できるようになりました。また、PC 互換機業界の成長と DOS の非 IBM 版の販売促進にも貢献しました。[ 73 ]初のAmerican Megatrends (AMI) BIOS は 1986 年にリリースされました。
BIOSに組み込まれた新しい規格は、通常、完全な公開ドキュメントやBIOSリストが存在しない。そのため、BIOSの中核となるサービスについて学ぶのに比べて、IBM以外の多くのBIOS追加機能の詳細を知ることは容易ではない。
多くの PC マザーボード サプライヤーは、独立 BIOS ベンダー (IBV) として知られる商用サードパーティから BIOS の「コア」とツールキットのライセンスを取得していました。マザーボード メーカーは、この BIOS を自社のハードウェアに合わせてカスタマイズしていました。そのため、更新された BIOS は通常、マザーボード メーカーから直接入手します。主な IBV には、American Megatrends (AMI)、Insyde Software、Phoenix Technologies、Byosoft などがありました。Microid Research とAward Software は1998 年にPhoenix Technologiesに買収されました。Phoenix は後に Award ブランド名を段階的に廃止しました (ただし、Award Software は 2001 ~ 2002 年まで AwardBIOS バージョンでクレジットされ、AWRDACPI は 2012 年後半まで Phoenix UEFI ファームウェアでクレジットされています)。2007 年に Phoenix に買収されたGeneral Softwareは、Intel プロセッサをベースとした組み込みシステム用の BIOS を販売していました。
SeaBIOSはオープンソースのBIOS実装です。
オープンソース コミュニティは、独自の BIOS とその後のバージョンをオープンソースの対応物で置き換えるための取り組みを強化しました。Open Firmware は、ブート ファームウェアのオープンな仕様を作成する初期の試みでした。これは当初、IEEE のIEEE 1275-1994標準で承認されましたが、2005 年に撤回されました。[ 74 ] [ 75 ]後期の例としては、OpenBIOS、coreboot、librebootプロジェクトがあります。AMDはcoreboot を使用する一部のチップセットの製品仕様を提供し、Google はこのプロジェクトを後援しています。マザーボードメーカーのTyan は、Opteronシリーズのマザーボードで標準 BIOS に加えてcorebootを提供しています。


EEPROMとフラッシュメモリチップは、ユーザーが簡単にアップデートできるため有利です。ハードウェアメーカーがBIOSアップデートをリリースして製品をアップグレードしたり、互換性を向上させたり、バグを修正したりするのは一般的です。しかし、この利点には、BIOSアップデートが正しく実行されなかったり、中断されたりすると、コンピュータやデバイスが使用不能になるリスクがありました。このような事態を避けるため、最近のBIOSでは「ブートブロック」と呼ばれる、最初に実行され、個別にアップデートする必要があるBIOSの一部が使用されています。このコードは、制御を移す前に、残りのBIOSが破損していないかどうか(ハッシュチェックサムなどの方法を使用)を確認します。ブートブロックがメインBIOSに破損を検出した場合、通常は、リムーバブルメディア(フロッピーディスク、CD、USBフラッシュドライブなど)から起動してリカバリプロセスを開始する必要があることをユーザーに警告し、ユーザーがBIOSのフラッシュを再度試みられるようにします。一部のマザーボードには、BIOSの破損から復旧するためのバックアップBIOS(DualBIOSと呼ばれることもあります)があり、BIOSの破損からのBIOS復旧には専用のPLCを使用しています。
BIOSを攻撃する既知のウイルスは少なくとも5種類あり、そのうち2種類はデモンストレーション目的で開発されたものです。最初に実環境で発見されたのは、中国のユーザーを標的としたMebromiというウイルスでした。
最初のBIOSウイルスはBIOS髄膜炎ウイルスで、BIOSチップを消去するのではなく感染させるものでした。BIOS髄膜炎ウイルスは、 CIHのようなウイルスに比べると比較的無害でした。
2番目のBIOSウイルスはCIH、別名「チェルノブイリウイルス」で、互換性のあるチップセットのフラッシュROM BIOSの内容を消去することができました。CIHは1998年半ばに出現し、1999年4月に活動を開始しました。感染したコンピュータは起動できなくなることが多く、マザーボードからフラッシュROM ICを取り外して再プログラムする必要がありました。CIHは当時広く普及していたIntel i430TXマザーボードチップセットを標的とし、当時広く普及していたWindows 9xオペレーティングシステムがすべてのプログラムへのハードウェア直接アクセスを許可していたことを利用しました。
最新のシステムは、Intel i430TX チップセットと互換性のないさまざまなチップセットや他のフラッシュ ROM IC タイプが使用されているため、CIH に対して脆弱ではありません。また、偶発的な BIOS 書き換えから保護されたブート ブロックや、クラッシュ時にバックアップ BIOS を使用できるデュアル BIOS 搭載システムなどの追加の保護もあります。さらに、FreeBSD、Linux、macOS、Windows NTベースの Windows OS ( Windows 2000、Windows XP以降など) といった最新のオペレーティングシステムはすべて、ハードウェア抽象化レイヤーを使用してユーザー モードプログラムがハードウェアに直接アクセスすることを許可していません。[ 76 ]
その結果、2008 年現在、CIH は基本的に無害になり、最悪の場合でも実行可能ファイルを感染させてアンチウイルス ソフトウェアを起動させることで迷惑をかける程度です。しかし、他の BIOS ウイルスは依然として存在します。[ 77 ] Windows Vista/7 の UAC がないほとんどの Windows ホーム ユーザーでは、すべてのアプリケーションを管理者権限で実行しているため、最新の CIH のようなウイルスは、エクスプロイトを最初に使用しなくても、原理的にはハードウェアにアクセスできる可能性があります。オペレーティングシステムOpenBSD は、すべてのユーザーがこのアクセスを持つことを防止し、Linux カーネルの grsecurity パッチもデフォルトでこの直接ハードウェア アクセスを防止しますが、違いは、攻撃者がはるかに困難なカーネル レベルのエクスプロイトまたはマシンの再起動を必要とすることです。
3番目のBIOSウイルスは、英国に拠点を置くNext-Generation Security Softwareの主席セキュリティコンサルタントであるJohn Heasman氏が発表した手法です。2006年のBlack Hat Security Conferenceで、彼はフラッシュメモリに格納されている通常のACPI関数を置き換える悪意のある手順を使用して、権限を昇格し物理メモリを読み取る方法を示しました。[ 78 ]
4番目のBIOSウイルスは、「永続的なBIOS感染」と呼ばれる手法でした。これは2009年にバンクーバーで開催されたCanSecWestセキュリティカンファレンスとシンガポールで開催されたSyScanセキュリティカンファレンスで発表されました。Core Security Technologiesの研究者であるAnibal Sacco氏[ 79 ]とAlfredo Ortega氏は、BIOSの解凍ルーチンに悪意のあるコードを挿入する方法を実証し、オペレーティングシステムが起動する前であっても、起動時にPCをほぼ完全に制御できるようにしました。この概念実証はBIOS実装の欠陥を悪用するものではなく、通常のBIOSフラッシュ手順のみを使用します。したがって、マシンへの物理的なアクセス、またはユーザーがroot権限を持っている必要があります。これらの要件にもかかわらず、Ortega氏は自身とSacco氏の発見の重大な意味を強調しました。「ドライバにパッチを適用して、完全に機能するルートキットをドロップできます。アンチウイルスを削除または無効にできる小さなコードもあります。」[ 80 ]
Mebromiは、 AwardBIOS、Microsoft Windows、および中国の2社(Rising AntivirusとJiangmin KV Antivirus)のアンチウイルスソフトウェアを搭載したコンピュータを標的とするトロイの木馬です。 [ 81 ] [ 82 ] [ 83 ] Mebromiは、マスターブートレコードに感染するルートキットをインストールします。
2013年12月に60 Minutesのインタビューで、米国国家安全保障局( NSA)の情報保証部長であるデボラ・プランケットは、NSAが外国による米国の金融システムを標的としたBIOS攻撃の可能性を発見し阻止したと主張した。[ 84 ]この番組は、匿名の情報源を引用し、これは中国の陰謀だと主張した。[ 84 ]しかし、ガーディアン紙[ 85 ]、アトランティック誌[ 86 ]、Wired [ 87 ]、レジスター誌[ 88 ]の続報記事は、NSAの主張を否定した。
最新のIntelプラットフォームでは、 Intel Boot Guard(IBG)テクノロジーが有効になっています。このテクノロジーは起動時にBIOSのデジタル署名をチェックし、IBGの公開鍵はPCHに組み込まれています。エンドユーザーはこの機能を無効にすることはできません。
UEFI( Unified Extensible Firmware Interface)は、多くの新しいマシンでBIOSを補完するものです。当初はIntel Itaniumアーキテクチャ向けに開発されたUEFIは、現在ではx86およびArmプラットフォームでも利用可能です。仕様開発は、業界の特別利益団体であるUnified EFI Forumによって推進されています。EFIブートは、 GPTをサポートするMicrosoft Windowsバージョン[ 89 ]、Linuxカーネル2.6.1以降、およびIntelベースのMac上のmacOS [ 90 ]でのみサポートされています。2014年現在近年、新しい PC ハードウェアには主に UEFI ファームウェアが搭載されています。ルートキット保護のアーキテクチャは、システムがユーザー自身のソフトウェア変更を実行するのを防ぐこともできるため、オープンハードウェアコミュニティでは、UEFI は従来の BIOS の代替として議論の的となっています。UEFI は、Windows 8 [ 91 ] [ 92 ]以降を搭載したデバイスで必須です。同様に、 Windows 11 も起動に UEFI が必要です[ 93 ]。ただし、Windows 11 の IoT Enterprise エディションは例外です[ 10 ]。
2010年代にUEFIが普及した後、BIOS割り込み呼び出しをサポートしていた旧バージョンのBIOSは「レガシーBIOS」と改名された。
x86の世界における「レガシーBIOS」の機能の代替手段としては、corebootやlibrebootなどが挙げられる。
一部のサーバーやワークステーションは、 Forthプログラミング言語に基づいたプラットフォーム非依存のオープンファームウェア(IEEE-1275)を使用しています。これは、SunのSPARCコンピュータ、IBMのRS/6000シリーズ、CHRPマザーボードなどの他のPowerPCシステム、およびx86ベースのOLPC XO-1に搭載されています。
少なくとも2015年以降、AppleはIntelベースのMacのUEFIモニターから従来のBIOSサポートを削除しました。そのため、BIOSユーティリティは従来のオプションをサポートしなくなり、「このシステムではレガシーモードはサポートされていません」と表示されます。
2017年、インテルは2020年までにレガシーBIOSのサポートを終了すると発表した。2019年以降、新しいインテルプラットフォームのOEM PCはレガシーオプションをサポートしなくなった。[ 94 ]
+0x1FE0x55 0xAA0x55+0x1FE0xAA+0x1FF0xAA550x55AA286 は物理位置 FFFFF0H の命令でリアルモードで実行を開始します。
実行は、CS レジスタと IP レジスタの初期内容によってアドレス指定された命令から始まります。初期化ソフトウェアをアドレス空間の最上位の ROM に配置できるようにするため、コード セグメントに割り当てられたアドレスの上位 12 ビットは、ファー ジャンプや呼び出しなど、CS レジスタをロードする最初の命令まで設定されます。その結果、命令のフェッチはアドレス 0FFFFFFF0H から始まります。
ウェア リセット後にフェッチおよび実行される最初の命令は、物理アドレス FFFFFFF0h にあります。このアドレスは、プロセッサの最上位の物理アドレスから 16 バイト下です。ソフトウェア初期化コードを含む EPROM は、このアドレスに配置する必要があります。