(57)【特許請求の範囲】
【請求項１】
第１ブート・ブロック・コードを保護し、第１ブート・ブロック・コードと同じセグメントまたは領域中に常駐する他のコードまたはデータの更新を可能にする方法であって、その際、第１ブート・ブロック・コードおよび他のコードもしくはデータはメモリの第１再書き込み可能セグメント中に格納されており、そのセグメントは初めに保護された書き込み不可能な状態に設定されており、
ａ）メモリの第１再書き込み可能セグメント中に格納されているすべての情報をメモリの第２再書き込み可能セグメント中にコピーするステップと、
ｂ）メモリの第２再書き込み可能セグメント中のコピーされた情報の妥当性検査をするステップと、
ｃ）第１再書き込み可能セグメントを保護されていない、書き込み可能な状態に設定するステップと、
ｄ）第１再書き込み可能セグメント中に格納されているすべての情報を消去するステップと、
ｅ）第１再書き込み可能セグメントを更新されたコードまたはデータで更新するステップとを含み、更新されたコードまたはデータは第２ブート・ブロック・コードを含み、
ｆ）第１再書き込み可能セグメント中に格納されている第２ブート・ブロック・コードを第２再書き込み可能セグメント中の第１ブート・ブロック・コードと比較するステップと、
ｇ） ステップｆ）の比較で、第１および第２再書き込み可能セグメント中にそれぞれ格納されている第２および第１ブート・ブロック・コードが同一である場合、第１再書き込み可能セグメントを保護された、書き込み不可能な状態に設定するステップと
を含む方法。
【請求項２】
ｈ）ステップｂ）およびｃ）の間に、ブート・ブロック更新フラグを設定するステップと、
ｉ）ステップｇ）の後に、ブート・ブロック更新フラグをリセットするステップとをさらに含み、
ブート・ブロック更新フラグが設定状態にある間にリブートが行われる場合、コンピュータが、第１再書き込み可能セグメント中に格納されている第２ブート・ブロック・コードからではなく、第２再書き込み可能セグメント中に格納されている第１ブート・ブロック・コードを使用して初期化される請求項１に記載の方法。
【請求項３】
第１および第２再書き込み可能セグメントが、同じサイズのセグメントだけを有する対称的フラッシュ・メモリのセグメントである請求項１に記載の方法。
【請求項４】
第１および第２再書き込み可能セグメントが、それぞれの第１および第２セグメントのすべての内容を消去し、次いでそれぞれの消去された第１および第２セグメントに情報を書き込むことによって再書き込み可能である請求項１に記載の方法。
【請求項５】
妥当性検査をするステップｂ）が第１および第２セグメント中の情報のバイトごとの比較によって実行される請求項１に記載の方法。
【請求項６】
妥当性検査をするステップｂ）が第１および第２セグメント中の情報のチェック・サム比較によって実行される請求項１に記載の方法。
【請求項７】
ブート・ブロック・コードと共に格納されるコードまたはデータがＢＩＯＳコードであり、更新されたコードまたはデータがそのＢＩＯＳコードを置きかえる更新されたＢＩＯＳコードである請求項１に記載の方法。
【請求項８】
第１ブート・ブロック・コードを保護し、第１ブート・ブロック・コードと同じセグメントまたは領域中に常駐する他のコードまたはデータの更新を可能にするコンピュータ・プログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記コンピュータ・プログラムの実行で、コンピュータによって次の手順が実行される、すなわち、
ａ）メモリの第１再書き込み可能セグメント中に格納されたすべての情報を、メモリの第２再書き込み可能セグメントの中にコピーする手順にして、当該コピーされた情報には第１ブート・ブロック・コードが含まれている、コピーする手順と、
ｂ）メモリの第２再書き込み可能セグメント中のコピーされた情報の妥当性検査をする手順と、
ｃ）第１再書き込み可能セグメントを保護されていない、書き込み可能な状態に設定する手順と、
ｄ）第１再書き込み可能セグメント中に格納されているすべての情報を消去する手順と、
ｅ）第１再書き込み可能セグメントを更新された情報で更新する手順にして、当該更新された情報には第２ブート・ブロック・コードが含まれている、更新する手順と、
ｆ）第１再書き込み可能セグメント中に格納されている第２ブート・ブロック・コードを第２再書き込み可能セグメント中の第１ブート・ブロック・コードと比較する手順と、
ｇ）手順ｆ）での比較で、第１および第２再書き込み可能セグメント中にそれぞれ格納されている第２および第１ブート・ブロック・コードが同一である場合、第１再書き込み可能セグメントを保護された、書き込み不可能な状態に設定する手順と
が実行される、コンピュータ・プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項９】
ｈ）手順ｂ）およびｃ）の間に、ブート・ブロック更新フラグを設定する手順と、
ｉ）手順ｇ）の後に、ブート・ブロック更新フラグをリセットする手順と
をさらに含み、
ブート・ブロック更新フラグが設定状態にある間にリブートが行われる場合、コンピュータが、第１再書き込み可能セグメント中に格納されている第２ブート・ブロック・コードからではなく、第２再書き込み可能セグメント中に格納されている第１ブート・ブロック・コードを使用して初期化される、請求項８に記載のコンピュータ・プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１０】
第１および第２再書き込み可能セグメントが、同じサイズのセグメントだけを有する対称的フラッシュ・メモリのセグメントである、請求項８に記載のコンピュータ・プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１１】
第１および第２再書き込み可能セグメントが、それぞれの第１および第２セグメントのすべての内容を消去し、次いでそれぞれの消去された第１および第２セグメントにデータを書き込むことによって再書き込み可能である、請求項８に記載のコンピュータ・プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１２】
手順ｂ）による妥当性検査が第１および第２セグメント中のデータのバイトごとの比較によって実行される、請求項８に記載のコンピュータ・プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１３】
手順ｂ）による妥当性検査が第１および第２セグメント中のデータのチェック・サム比較によって実行される、請求項８に記載のコンピュータ・プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１４】
手順ａ）における格納された情報には第１ブート・ブロック・コードと共にＢＩＯＳコードがあり、更新される情報がそのＢＩＯＳコードを置きかえる更新されたＢＩＯＳコードである、請求項８に記載のコンピュータ・プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
（発明の背景）
１．発明の分野
本発明は、ブート・ブロックまたはＢＩＯＳ回復領域を保護する一方、同じ領域に書き込みアクセスを可能にすることに関する。詳細には、本発明は、「保護された」セグメント内のあるコードまたはデータを保存する一方、同じセグメントに格納されている他のコードを更新できるようにすることに関する。
【０００２】
２．関連する技術の説明
パーソナル・コンピュータ（ＰＣ）などのコンピュータのスイッチを切ると、一般には、コンピュータは、アクセスする作業メイン・メモリの内容を失う。コンピュータが再起動またはブートアップすると、ＰＣによってアクセスされるすべてのドライブおよび構成要素を再初期化しなければならない。
【０００３】
この再初期化は、基本入出力システムすなわちＢＩＯＳにより実行される。ＢＩＯＳは、基本入出力動作のためのシステム・プログラムを含み、ＰＣハードウェアへのソフトウェア・インターフェースを用意している。典型的なＢＩＯＳ機能は、フロッピー・ディスク、ハード・ディスク・ドライブ、インターフェース、およびグラフィック・アダプタへアクセスすることである。たいていはＥＰＲＯＭ／Ｆｌａｓｈ  ＲＡＭである不揮発性記憶装置（ＮＶＲＡＭ）がＣＰＵで使用できるようにＢＩＯＳを格納している。
【０００４】
上述のＮＶＲＡＭを含むランダム・アクセス・メモリ（ＲＡＭ）および中央演算処理装置（ＣＰＵ）はマザーボードに含まれている。ＣＰＵは、ユーザがデータまたはコマンドを入力する手段であるキーボードに接続される。そのような入力を視覚的に表示するために、ＣＰＵは、グラフィック・アダプタにも接続される。グラフィック・アダプタは、表示するデータを受け入れ、データがモニタまたはディスプレイ上に表示できるようにデータを処理する。
【０００５】
マザーボードは、ＰＣが電源投入時に必要なプログラムおよびデータを格納するメモリも含む。ＰＣは、電源遮断時にそのメイン・メモリの内容を失うからである。ＣＰＵは、メモリ中のプログラムを読み取り、電源投入時にそれらを実行する。メモリ中には、キーボード、グラフィック・アダプタなどにアクセスするための様々な支援ルーチンが存在する。その支援ルーチンは既に示したように、集合的にＲＯＭ−ＢＩＯＳまたはＢＩＯＳとして知られる。
【０００６】
一般にグラフィック・アダプタ・カードは、それ自身のＲＯＭ−ＢＩＯＳを有し、そのＲＯＭ−ＢＩＯＳによって、マザーボード上のＣＰＵがバス・インターフェース（例えば、ＲＳ−２３２Ｃ）を介してグラフィック・アダプタ・カードのＲＯＭ−ＢＩＯＳ中の対応するプログラムを呼び出す。
【０００７】
新しい特徴、機能のための、あるいは単にバグを修正するためのサポートを加える必要があるとき、たいていのシステムは、更新されたＢＩＯＳをＰＣのＮＶＲＡＭ中に書き込むようにして、ＢＩＯＳを「フラッシュ」させる。一度ＢＩＯＳをフラッシュすると、ＰＣは更新されたＢＩＯＳを使用する。フラッシュ後にはそのＢＩＯＳは、古いＢＩＯＳを上書きしている。
【０００８】
リセットすると、ＰＣは、ブート・ブロック・コードが常駐する場所のブロックを実行し始める。たいていのシステムでは、ブート・ブロック域を含む領域は、書き込み保護され、上書きできず、電源投入またはリセットするとＰＣが実行するコードを備えている。ブート・ブロック・コードは、一般に約８Ｋバイトから３２Ｋバイトの範囲にある。ブート・ブロック・コードは、ＢＩＯＳのサブセットであり、フロッピー・ドライブを読み取り、フラッシュ部品に書き込むには十分の大きさである。ブート・ブロック・コードは、フロッピーなどから新しいＢＩＯＳのイメージを読み取り、そのイメージをフラッシュ部品に書き込むための十分なコードを有する内蔵式の「ミニＢＩＯＳ」とみなすことができる。
【０００９】
従来のＰＣ中のブート・ブロック・コードは上書きから保護されている。マザーボード製造業者は、一般に、回復コードの整合性を保護する目的で、ブート・ブロック領域を消去するための手段を提供しない。従来のフラッシュ部品またはフラッシュ・メモリは、異なったサイズのセグメントに設計されるという意味で非対称的である。データは、そのようなメモリ中にセグメントごとに書き込まれる。例えば、２つの８−Ｋバイト・セグメント、１つの１６−Ｋバイト・セグメント、１つの３２−Ｋバイト・セグメント、および複数の６４−Ｋバイト・セグメントが存在できる。８−Ｋバイト・セグメントの１つは、製造業者に関する情報（例えば、製造業者名、ＰＣのモデル番号など）を含む。１６−Ｋバイト・セグメントは、保護されたブート・ブロック・コードを含んでおり、他のセグメントは、更新可能なＢＩＯＳコードなどの他のデータを含む。セグメント中のデータは、ブランク・セグメント（例えば、すべて「０」）を作るようにセグメントの全内容を消去し、次いでそのブランク・セグメントに新しいデータを書き込むことによってのみ更新できる。
【００１０】
メモリのどこか特定のセグメントにアクセスするための手段は当業者に知られている。例えば、再書き込みのために特定のセグメントにアクセスする１つの方法は、ユーザが更新すべき特定のセグメント中のアドレス位置に専用の消去コマンド・バイトを与えることである。メモリのライト・イネーブル・ピンに適切な電圧Ｖｐｐ（５ボルトなど）を供給するなどによってそのピンがイネーブルされると同時に、この専用の消去コマンド・バイトを与える。一度これが実行されると、特定のセグメントが消去される。次いで類似のプロセスが、特定のセグメントに書き込むように実行される（例えば、ライト・イネーブル・ピンをイネーブルすると同時に特定のセグメントに専用の書き込みコマンド・バイトを提供すること）。消去および再書き込みのためのメモリの特定のセグメントを選択する他の方法は知られているが、製造業者ごとに異なる。
【００１１】
上述の例のブート・ブロック・コードを含む１６−Ｋバイトのセグメントは、一般に更新（例えば、消去および再書き込み）できない。ブート・ブロック・コードを保持する１６−Ｋバイト・セグメント中のブート・ブロック・コードの目的は、ＢＩＯＳイメージが更新（フラッシュ）され、電源がそのプロセスの間に失われた場合に、読み取られるＢＩＯＳイメージが不良となる可能性があるからである。そのケースでは、不良ＢＩＯＳイメージからブートしようとした場合、ユーザは障害のあるＢＩＯＳイメージのためにそうすることができない。しかし、上書きできないブート・コード中に存在する回復コードを有することによって、ＰＣの電源を投入するたびに実行されるブート・ブロック・コードは、ＢＩＯＳイメージが不良であるかどうかを決定するためのコードを含む。ＢＩＯＳイメージが正しい場合、次いでブート・ブロック・コードは、その中に取り込まれている回復プロセス・コードをスキップし、そのＢＩＯＳイメージを実行できるように、制御をそのＢＩＯＳイメージに通すことになる。
【００１２】
ＢＩＯＳイメージが不良である場合、それは、例えばブート・ブロック・コードを実行している間にＢＩＯＳイメージ上の単純なチェック・サムを実行することによって決定できるが、ブート・ブロック・コードにより、ＢＩＯＳイメージを実行することができないことになる。その代わり、ブート・ブロック・コードは回復プロセスを実行する。回復プロセスでは、ＰＣのディスク・ドライブ中に挿入されたフロッピー・ディスク中に格納されたＢＩＯＳイメージをブート・ブロック・コードによって取り出すなどによって、ＢＩＯＳイメージが再書き込みされる。次いでブート・ブロック・コードは、更新されたＢＩＯＳイメージをチェックし、上で説明したのと同じように続行する。
【００１３】
非対称的フラッシュ部品またはメモリは、一般に対称的フラッシュ部品よりも製造費が高い。つまり、複数の６４−Ｋバイト・セグメントだけを有するフラッシュ部品は、複数の６４−Ｋバイト・セグメント、１つまたは複数の１６−Ｋバイト・セグメント、および１つまたは複数の８−Ｋバイト・セグメントを有するフラッシュ部品よりも製造費が安い。しかし、ブート・ブロック・コードは、上書きできないため、（通常、約１６−Ｋバイトのサイズである）ブート・ブロック・コードだけのために用意した１６−Ｋバイト・セグメントを有することは有用である。その方法では無駄なメモリ空間は生じないからである。
【００１４】
具体的には、ブート・ブロック・コードは、容易に消去し、次いで書き込むことができないので、ブート・ブロック・コードを６４−Ｋバイト・セグメントなど、より大きいセグメント中に設ける場合、そのセグメントは、利用可能なメモリ空間の利用度を最大にするように、消去して書き込むことのできない他のコードをも含まなければならないことになる。あるいは、６４−Ｋバイト・ブート・ブロック・セグメントの残りの空間は、ブランクのままに、したがって利用しないようにすることもできる。したがって、ブート・ブロック・コードが１６Ｋバイトのサイズである場合、６４Ｋバイト・ブート・ブロック・セグメントの他の４８Ｋバイトを利用しない（例えば、ブランク）か、そこに更新できないコードを入れなければならない。
【００１５】
ある意味では、ブート・ブロック・コードは、ＢＩＯＳコードの更新不可能な部分とみなすことができる。更新可能なＢＩＯＳは、一般に更新不可能なブート・ブロック・コードと隣接して置かれる。ビデオ・ドライバまたは電源投入時に表示すべきロゴについての情報など、あまり頻繁には更新されないＢＩＯＳコードの部分も存在することもあるが、そのようなコードでも時々更新することが望ましい。しかし、その中でブート・ブロック・セグメントがブート・ブロック・コードを保持し他は保持しないような大きさに作られた非対称的フラッシュ部品では、それは問題ではない。
【００１６】
（発明の概要）
本発明は、非対称的フラッシュ部品の保護されたブート・ブロック・セグメント中に従来は常駐するフラッシュ回復コードを保護するための方法を提供することを目的とする。
【００１７】
本発明の上述の目的および他の利点は、同じブロック中に常駐する他のコードまたはデータを更新することを可能にすると同時にブート・ブロック・コードを保護する方法によって達成することができる。ブート・ブロック・コードと他のコードまたはデータは、第１書き込み可能セグメント中に格納され、このメモリはたいてい保護された書き込み不可能な状態に設定される。この方法は、メモリの第１書き込み可能セグメント中に格納されたすべてのデータをメモリの第２書き込み可能セグメント中にコピーするステップを含む。この方法は、メモリの第２書き込み可能セグメント中のコピーされたデータの妥当性検査をするステップも含む。この方法は、第１書き込み可能セグメントを保護されていない、書き込み可能な状態に設定するステップをさらに含む。この方法は、第１書き込み可能セグメント中に格納されているすべてのデータを消去するステップをさらに含む。この方法は、第１書き込み可能セグメントを更新されたコードまたはデータで更新するステップも含み、その更新されたコードまたはデータは、ブート・ブロック・コードを含む。この方法は、第１書き込み可能セグメント中に格納されているブート・ブロック・コードを第２書き込み可能セグメント中のブート・ブロック・コードと比較するステップをさらに含む。この比較で、第１および第２書き込み可能セグメントに格納されたブート・ブロック・コードが同一の場合、この方法は、第１書き込み可能セグメントを保護された、書き込み不可能な状態に設定するステップを含む。
【００１８】
上述の目的および他の利点は、コンピュータをブートアップするために使用されるブート・ブロック・コードの保護を提供するための装置によっても達成することができる。この装置は、複数の書き込み可能セグメントを有するセグメント化されたメモリを含む。そのセグメントの１つは、その中にブート・ブロック・コードが格納されるセグメント、別の１つは、その中にブート・ブロック・コードのコピーが格納されるセグメントである。この装置は、フラグの状態を格納するための記憶要素も含む。その状態は、コンピュータのブートアップが実行されるときに、ブート・ブロック・コードをセグメントの１つから、またはセグメントの別の１つから実行すべきかを示す。
【００１９】
本発明の上述の目的および他の利点は、添付の図面と共に読むときに、上の詳細な説明からより完全に明らかになるであろう。その図面は、全体を通して、対応する部分を示す同じ参照番号を有する。
【００２０】
（好ましい実施形態の詳細な説明）
本発明は、添付の図との関連で以下に詳細に述べられている。図１は、ブート・ブロック・コードと再書き込み可能なＢＩＯＳコードなどの他のコードまたはデータを保持するための、従来のＰＣで使用される非対称的フラッシュ部品を示す。図１では、ブート・ブロック・コードは、非対称的フラッシュ・メモリ１００のセグメント０中に格納されている。セグメント０は、１６Ｋバイトの記憶容量を有する。セグメント０は、ロックダウンまたは保護され、非対称的フラッシュ・メモリ１００の製造業者がブート・ブロック・コードを第１セグメント０中に書き込んだ後は上書きできない。そのようにして、ブート・ブロック・コードの整合性は、常に保たれる。
【００２１】
図１は、非対称的フラッシュ・メモリ１００の別のセグメント１も示す。セグメント１は、８Ｋバイトの記憶容量を有する。図１は、８Ｋバイトの記憶容量を有するさらに別のセグメント２をさらに示す。製造業者特有の情報（例えば、ロゴ、製造業者の名前など）は、一般にこの第３セグメント中に格納される。非対称的フラッシュ部品１００は、複数の６４−Ｋバイト・セグメント４、５、．．．Ｎを有し、そのセグメント中に他のコードまたはデータが格納される。ブート・ブロックすなわちブート・セグメント０と違って、他のセグメントは、それらのセグメント中に格納されるコードまたはデータを更新するように書き込むことができる。その結果、非対称的フラッシュ・メモリ１００に格納された現行のＢＩＯＳイメージは新しいイメージで更新またはフラッシュすることができる。しかし、第１セグメント中のブート・ブロック・イメージは更新できない。
【００２２】
ＰＣのＣＰＵは、ブート・ブロック・コードに以下のようにアクセスする。ＢＩＯＳは、マザーボード上に置かれるＥＰＲＯＭなどのメモリに格納されている。ＥＰＲＯＭは、上で述べた非対称的フラッシュ部品１００に対応する。ＣＰＵは、ＥＰＲＯＭから直接的にブート・ブロック・コードにアクセスする。ＰＣが始めに電源投入されるとき、またはＰＣをリセットすると、電源投入シーケンスによりＣＰＵはＥＰＲＯＭのＣＰＵアドレス範囲の一番上の４−Ｇバイト領域に接続される。例えば、現行インテル・プロセッサについては、電源を投入すると、ＣＰＵはアドレス位置ＦＦＦＦＦＦＦ０hexのコードの実行を開始する。このアドレス位置は、４Ｇバイト領域の終わり近くである。たいてい、ＦＦＦＦＦＦＦ０hexの最初の命令は、４Ｇバイト領域中の他のアドレスへのジャンプであり、そのアドレスにブート・ブロック・コードが常駐する。前で説明した通り、ブート・ブロック・コードは、ＢＩＯＳコードが動作可能かを決定するためのそのＢＩＯＳコード上のチェック・サムまたは他の妥当性検査処理を実行することになる。ＢＩＯＳコードが動作可能な場合、ブート・ブロック・コードは、そのＢＩＯＳコードへジャンプする。ＢＩＯＳコードが動作可能でない場合（例えば、チェック・サムが失敗した場合）、ブート・ブロック・コードは、ユーザに新しいＢＩＯＳイメージ中に書き込むことを強制する回復プロセスを実行する。その新しいＢＩＯＳイメージはＥＰＲＯＭ中にフラッシュされる。
【００２３】
ブート・ブロック・コードは、一般に以下のいずれかの理由で回復モードに入る。ａ）ＢＩＯＳイメージのチェック（例えば、チェック・サム）によりＢＩＯＳイメージが障害のあることが明らかになる、ｂ）回復プロセスを開始するようにジャンパが（ユーザによって）置かれる、ｃ）ＰＣのパラレル・ポートにジャンパ・プラグが置かれ、やはり回復プロセスが開始される。
【００２４】
図２は、本発明により使用できる対称的フラッシュ部品またはフラッシュ・メモリ２２０を示す。対称的フラッシュ部品２２０は、複数の同一サイズの領域２００−１、２００−２、．．．、２００−Ｎを含む。好ましい実施形態では、各領域は、６４Ｋバイトの記憶容量を有する。ＢＩＯＳイメージの更新不可能な部分に対応し、例えば１６Ｋバイトのサイズを有するブート・ブロック・コードは、第１領域２００−１中に格納される。ＢＩＯＳイメージの更新可能な部分などの他のコードまたはデータは、ブート・ブロック・コードと共に第１領域２００−１中に格納される。ＢＩＯＳイメージの更新可能な部分は、通常、その一部を第２領域に格納しなければならないほど十分大きい。言い換えると、ＢＩＯＳイメージの更新部分は、一般に４８Ｋバイトよりも大きい。本発明による更新されたＢＩＯＳイメージを書き込む方法は、対称的フラッシュ部品に適用でき、以下で詳細に述べる。
【００２５】
どんなフラッシュ部品も、ある領域は、その領域中の全体のデータを消去することによって書き込まれる。したがって、６４−Ｋバイト領域については、全体の６４−Ｋバイト領域を消去し、次いで新しいデータで更新する。その結果、ＢＩＯＳイメージの一部がブート・ブロック・コードと同じ領域に格納されているＢＩＯＳイメージを更新したい場合、ブート・ブロック・コードを保護すると同時に、同じ領域に同様に格納されているＢＩＯＳイメージの更新できる方式を開発しなければならない。
【００２６】
図３は、本発明による方法を示すフロー・チャートである。このような方法は対称的フラッシュ部品に適用できる。その対称的フラッシュ部品では、ブート・ブロック・コード（約１６Ｋバイト・サイズ）は、フラッシュ部品の第１領域中に格納され、更新可能なＢＩＯＳコードの開始部分（最初の約４８Ｋバイト）も第１領域中に格納される。説明を容易にするために、限定の手段としてではなく、対称的フラッシュ部品の第１領域（セグメント）およびすべての他の領域（セグメント）は、６４Ｋバイトのサイズを有する。この例では、ＢＩＯＳコードの残りの部分は、第１領域に（メモリ・アドレス可能な意味で）隣接する第２領域中に格納される。
【００２７】
第１ステップ３００では、ブート・ブロック・コードが格納される第１領域の全体の６４−Ｋバイトを、例えば第２領域などの他の領域にコピーし、それによって第２領域の内容が上書きされる。この例では、第１領域は、ＦＦＦＦＦ００００hex〜ＦＦＦＦＦＦＦＦhexの範囲のメモリ・アドレスを有すると仮定する。さらに、第２領域は、ＦＦＦＦＥ００００hex〜ＦＦＦＦＥＦＦＦＦhexの範囲のメモリ・アドレスを有すると仮定する。第１ステップ３００では、更新可能なＢＩＯＳイメージの部分だけでなくブート・ブロック・コード（更新不可能なＢＩＯＳイメージ）も対称的フラッシュ部品の第１領域から第２領域にコピーする。
【００２８】
第２ステップ３１０では、第２領域へのコピーの妥当性検査をする目的で第１および第２領域のイメージを比較する。好ましい実施形態では、この比較はバイトごとに行う。第２ステップ３１０は、第２領域へのコピーが正しく行われたこと、したがって第２領域中のブート・ブロック・コードのコピーは第１領域中のブート・ブロック・コードと厳密に同じであることを保証するために行われる。
【００２９】
妥当性検査が確認されると、次いで第３ステップ３２０では、ブート・ブロック（第１領域）が更新されているという表示を行うためにフラグが設定される。そのようなフラグを、本発明では進行中ブート・ブロック（ｂｏｏｔ−ｂｌｏｃｋ−ｉｎ−ｐｒｏｇｒｅｓｓ）フラグと呼び、それは、ハードウェア・スティッキ・ビットなどであることがある。進行中ブート・ブロック・フラグは、ＢＩＯＳの更新が実行されているという表示を行う。そのようなフラグは、例えばラッチまたはフリップ・フロップに設定されているビットによって設定できる。それによって、電源の障害が発生した場合、ＰＣの電源投入またはリセット時にそのビットをまだ設定された状態のままとすることができる。設定状態にあるフラグの状態でリセットまたは電源投入が行われると、ＣＰＵは、第１領域中のブート・ブロック・イメージからではなく、第２領域中のバックアップ・ブート・ブロック・イメージからＰＣをブートする。
【００３０】
第４ステップ３３０では、第１領域を、保護されていない状態に設定する。第１領域は、このステップの前では保護された状態にあった。ブート・ブロックを保護されていない状態に設定することは、従来のメモリ素子ではできないが、本発明による対称的フラッシュ部品では可能である。すなわち、本発明によるシステムおよび方法は、対称的フラッシュ部品のブート・ブロックまたはブート領域を含む各領域の設定を保護されていない状態または保護された状態のいずれかにすることができる。この設定は、例えば適当な電圧（例えば、５ボルト）を対称的フラッシュ部品に関する外部ピンに適用することによって行うことができる。
【００３１】
第５ステップ３４０では、第１領域の内容を消去する。フラッシュ部品の領域の内容を消去する１つの方法は、前で説明した。もちろん、当業者に周知の他の方法も利用することができる。
【００３２】
第６ステップ３５０では、第１領域の内容を新しいイメージで更新する。新しいＢＩＯＳイメージは、例えばＰＣのフロッピー・ドライブ中に装着されたフロッピー・ディスクから得ることができる。新しいＢＩＯＳイメージは、更新不可能なＢＩＯＳコードに対応するブート・ブロック・コードおよび更新可能なＢＩＯＳコードのどちらも含む。
【００３３】
第７ステップ３６０では、対称的フラッシュ部品の第１および第２領域の内容の比較を行う。具体的には、第１領域内のフラッシュ後に入れられたイメージのブート・ブロック・コードの内容が、コピーされた第２領域内のブート・ブロック・コードと厳密に同じかどうかに関して比較を行う。この比較は、バイトごとの比較、または第１および第２領域の両方でブート・ブロック・イメージのチェック・サム値をチェックすることによって、またはメモリ素子の異なる領域中に格納されたデータを比較するための当業者に周知の他の方法によって行うことができる。
【００３４】
第７ステップ３６０で行う比較によって、第１および第２領域中のブート・ブロック・コードが合致した場合、この方法は第８ステップ３７０に進む。例えば新しいＢＩＯＳイメージの第１領域への書き込みが不良であったなどのために合致しない場合、この方法は第５ステップ３４０に戻る。その第５ステップ３４０で、第１領域の消去および第１領域への書き込みを再び試行する。本発明では、第７ステップ３６０で実行される比較が合致しなかった回数をカウントするためにカウンタ（示していない）を利用することがある。カウンタがある固定値、例えば４に達すると、本発明による方法は、第２領域中のブート・ブロック・イメージを第１領域に書き戻し、かつ第１領域の別の再書き込みが可能でないステップにジャンプする。このＢＩＯＳの更新プロセスからのジャンプは、対称的フラッシュ部品中にＢＩＯＳイメージを書き込む際に数回試みが失敗した後に行われる。そのような場合は、ユーザは、例えばモニタ上に提供されるメッセージによってその問題の知らせを受け、後で再び試行するために適切な処置（例えば、フラッシュＢＩＯＳを含む他のフロッピー・ディスクを入手する）をとらなければならなくなる。
【００３５】
第７ステップ３６０での比較が成功した場合、第８ステップ３７０を実行する。第８ステップ３７０では、第１領域は、保護された状態に設定されている。これは、例えば、適当な電圧（例えば、０ボルト）を対称的フラッシュ部品の特定のピンに適用することによって行うことができる。
【００３６】
第９ステップ３８０では、第３ステップ３２０で設定される進行中ブート・ブロック・フラグをリセットする（例えば「０」）。進行中ブート・ブロック・フラグがリセットされることで、ＰＣは、第１領域中のブート・ブロック・コードからブートアップすることが可能となる。
【００３７】
第１０ステップ３９０では、第２領域の内容を消去する。第１１ステップ３９５では、第２領域の内容を新しいデータで更新する。この新しいデータは、ＢＩＯＳコード更新をする前に第２領域に格納されていたデータに対応するか（以前にそれがメモリの他のセクションに適切にコピーされた場合）、よりありそうなこととしては第１領域中に書き込まれていた新しいＢＩＯＳコードの残りの部分を使用して更新が実行される。
【００３８】
前で説明した通り、ＢＩＯＳコードは、一般に１つの６４Ｋバイト・セグメントのサイズよりも大きい。そのためＢＩＯＳを更新するときは、対称的フラッシュ部品の第１および第２領域の内容を更新する必要があることになる。
【００３９】
例えば第３〜８ステップを実行する間に時々生じる電源の障害のために、第９ステップ３８０が完了しなかった場合、ブート・ブロック・コードは、不安定または使用不可能になることがある。このことが起こった場合、第２領域中のバックアップ・ブート・ブロック・イメージが、第１領域の内容を回復するために使用される。この状況では、進行中ブート・ブロック・フラグは、ＰＣのリブート時にまだ設定状態にある。好ましい実施形態では、ＰＣハードウェアは、アドレス線Ａ１６に関するアドレス線スワップを提供するために構成される。このＡ１６は、最小桁から１６番目のアドレス線に対応する。例えば、３２ビットアドレス線については、アドレス線の最小桁ビットをＡ０として指定し、アドレス線の次に小さい桁のビットをＡ１として指定し、．．．、アドレス線の最大桁ビットをＡ３１として指定する。リブートを実行するときに進行中ブート・ブロック・フラグが設定状態にある場合、アドレス線１６は、ブート・ブロック・コードがアドレス位置ＦＦＦＦＦ００００hex（第１領域の始め）からではなく、アドレス位置ＦＦＦＦＥ００００hex（第２領域の始め）から始まる物理アドレス領域から取り出されるように、反転されることになる。このＰＣハードウェアの構成は、ブート動作中に進行中ブート・ブロック・フラグが設定状態にあるときだけアドレス線Ａ１６中に反転器がイネーブルされるようにすることができる。図４は、そのような構成を示す。その構成では、２：１のスイッチ４１０を反転器４２０と共に使用し、それによってブート動作中に進行中ブート・ブロック・フラグ値４３０が設定状態にあるとき、スイッチ４１０は、反転器を通じてアドレス線Ａ１６を送るように配置されるが、進行中ブート・ブロック・フラグ値４３０がリセット状態にあるときは、反転器４２０を迂回するように配置される。進行中ブート・ブロック・フラグ値４３０は、スイッチ４１０の制御入力に提供され、それによってスイッチ４１０は、進行中ブート・ブロック・フラグ値４３０の現状態に基づいた２つの可能な状態のどちらか一方になる。
【００４０】
進行中ブート・ブロック・フラグ値４３０の重要な特徴は、ＰＣの電源遮断が起こったときでもその値が保存されることである。そうであれば、リブートが実行されると、進行中ブート・ブロック・フラグ値４３０は、電源遮断前に存在していたのと同じ状態に維持され、値が設定またはリセットであるかに基づいてブーティング・プロセスの正しい実行に備えることができる。
【００４１】
図４の構造を有さないなど、ＰＣ中にブーティング・アドレスに物理的に変更を加えるためのハードウェアが存在しない場合、ユーザは、ＢＩＯＳフラッシュ操作中に問題が発生した場合に、特定の処理を実行するために通知を受けなければならない。その場合、ＣＰＵは、第２領域中のコピーされたブート・ブロック・コードからリブートを自動的に実行しないので、ユーザは、ＣＰＵに第１領域中の恐らく壊れているブート・ブロック・コードとは異なる第２領域中の壊れていないブート・ブロック・コードを取り出させるための何らかのことを物理的に行わなければならない。ユーザは、普通ＢＩＯＳのフラッシュ操作を行う前に指示を与えられる。その指示は、ＢＩＯＳ更新中に電源の障害があった場合に、ユーザがＡ１６アドレス線を反転させるためにマザーボード上の特定の位置にジャンパを設けなければならないことを警告することになる。この指示は、あるいはユーザに技術サポートの代表に連絡するよう指示することもできる。その技術サポートの代表は、ユーザがマザーボード上の適切な位置にジャンパ（例えば、ワイヤ）を適切に置けるようにユーザに必要な指示を与える。ジャンパを適切な位置に置くことによって、ＣＰＵは、それが第１領域とみなす場所にあるコードを実行することになるが、しかし実際にはその場所は、フラッシュ部品の第２領域である。一度ＣＰＵがリブートし、ＢＩＯＳイメージが適切に第１領域に書き込まれると、ユーザはジャンパを取り去ることができる。
【００４２】
したがって、上で説明した通り、第９ステップが首尾良く完了せず、ブート動作が開始されたときにＰＣハードウェアが、進行中ブート・ブロック・フラグが設定状態にあることに基づいてアドレス線スワップを自動的に実行しない場合、アドレス線Ａ１６をスワップするために回復ジャンパを使用し、それによって物理アドレスＦＦＦＦＥ００００hexをアドレス位置ＦＦＦＦＦ００００hexに再配置することができる。システムは、次いで第２領域中のコピーされたブート・ブロック・イメージを使用してブートし、次いで第１領域中に再書き込みを行うために回復プロセスを行うことができる。ユーザによって物理的にマザーボード上に置かれるジャンパを適切な位置に置くことによって、回復ジャンパが有効な限り第１領域への更新だけが行える。結果として、第２領域中のバックアップ・ブート・ブロックイメージは、回復ジャンパを取り去るまで保護される。
【００４３】
本発明は、ＢＩＯＳフラッシュまたは更新の間に不良ＢＩＯＳイメージまたは停電が発生した場合に、ブート・ブロック・コードが常に回復可能なようにブート・ブロック・コードの整合性を保護するための装置または方法を提供する。
【００４４】
本明細書で好ましい実施形態を述べたが、添付の請求の範囲に記載の本発明の範囲から逸脱することなく、本発明の教示に従う記載の実施形態の修正は、当業者には明らかであろう。例えば、本発明を約１６Ｋバイトのサイズを有するブート・ブロック・コードに則して述べたが、本発明は、例えば８Ｋバイトや３２Ｋバイトなどの他のブート・ブロック・コードのサイズにも同様に適用できる。そのブート・ブロック・コードは、そのサイズよりも大きい、同一サイズのセグメントを有する対称的フラッシュ部品中に格納することができる。
【００４５】
さらに、本発明をブート・ブロック・コード（およびフラッシュ部品の第１領域中の他のコード）のコピーがフラッシュ部品の隣接する第２領域にコピーされることに則して述べたが、そのコピーは、その代わりに第１０の６４Ｋバイトセグメントなどの、フラッシュ部品のどんな他の特定の領域中にも置くことができる。その場合では、ＢＩＯＳ更新中に障害が発生した場合、ＣＰＵは、次のブーティング動作のためのコピーされたブート・ブロック・イメージを、第１０の６４Ｋバイトセグメントから取り出さなければならないことになる。したがって、アドレス線スワップは、ＣＰＵのためのブート・ブロック・コードを第１セグメントからではなくて、第１０セグメントから取り出すために構成しなければならないことになる。
【図面の簡単な説明】
【図１】  従来のＰＣのための、ブート・ブロック・コードを格納するために使用される非対称的フラッシュ部品の構成である。
【図２】  本発明による、ブート・ブロック・コードを格納するために使用できる対称的フラッシュ部品の構成である。
【図３】  本発明に従ってＢＩＯＳコードの更新を可能にすると同時にブート・ブロック・コードを保護する方法のフロー・チャートである。
【図４】  本発明に従って対称的フラッシュ部品の第１領域からではなく、第２領域からブート・ブロック・コードを読み取るための回路である。
【図１】
0004668416.tif 000002
【図２】
0004668416.tif 000003
【図３】
0004668416.tif 000004
【図４】
0004668416.tif 000005