(57)【要約】【課題】ＯＳの無停止アップデートを実現すること。【解決手段】新ブートプログラムのダウンロードおよび静的ベリファイが終了し、緊急度が低い場合（ステップＳ１５０３：低）、旧ＯＳ（マスタ）１２２が、旧ブートプログラムを用いてブートしたコアのうち、プロセスが割り当てられていないコアがあるか否かを判断する（ステップＳ１５０５）。旧ＯＳ（マスタ）１２２が、プロセスが割り当てられていないコアがあると判断した場合（ステップＳ１５０５：Ｙｅｓ）、ハイパーバイザ１２１がブートプログラムの参照領域を旧ブートプログラム領域から新ブートプログラム領域に変換し（ステップＳ１５１１）、変換後の参照領域を指定するリブート指示をプロセスが割り当てられていないコアへ通知する（ステップＳ１５１２）。【選択図】図１５
2014029739.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアと、
前記複数のコアで実行される第１のブートプログラムおよび前記複数のコアがブート時にアクセスするブートアドレスを記憶する記憶部と
を有するマルチコアプロセッサシステムであって、前記複数のコアのうちの第１のコアは、
前記記憶部において前記第１のブートプログラムの記憶領域と異なる記憶領域に第２のブートプログラムを書き込み、前記第１のブートプログラムに基づきブートした前記複数のコアのうち、プロセスが割り当てられていない第２のコアがリブート時に参照する参照領域を前記第１のブートプログラムの記憶領域から前記第２のブートプログラムの記憶領域に変換し、変換後の前記参照領域を指定するリブート指示を前記第２のコアへ通知する
マルチコアプロセッサシステム。
【請求項２】
前記第１のコアは、前記複数のコアの全てに前記リブート指示が通知された場合に、前記第１のブートプログラムの記憶領域に基づく前記ブートアドレスを前記第２のブートプログラムの記憶領域に基づくアドレスに書き換える、請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
複数のコアと、前記複数のコアで実行される第１のブートプログラムおよび前記複数のコアがブート時にアクセスするブートアドレスを記憶する記憶部を有するマルチコアプロセッサシステムの制御方法であって、前記複数のコアのうちの第１のコアが、
前記記憶部において前記第１のブートプログラムの記憶領域と異なる記憶領域に第２のブートプログラムを書き込む処理と、
前記第１のブートプログラムに基づきブートした前記複数のコアのうち、プロセスが割り当てられていない第２のコアがリブート時に参照する参照領域を前記第１のブートプログラムの記憶領域から前記第２のブートプログラムの記憶領域に変換する処理と、
変換後の前記参照領域を指定するリブート指示を前記第２のコアへ通知する処理と
を実行するマルチコアプロセッサシステムの制御方法。
【請求項４】
前記第１のコアが、前記複数のコアの全てに前記リブート指示を通知した場合に、前記第１のブートプログラムの記憶領域に基づく前記ブートアドレスを前記第２のブートプログラムの記憶領域に基づくアドレスに書き換える、請求項３に記載のマルチコアプロセッサシステムの制御方法。
【請求項５】
複数のコアと、前記複数のコアで実行される第１のブートプログラムおよび前記複数のコアがブート時にアクセスするブートアドレスを記憶する記憶部を有するマルチコアプロセッサシステムの制御プログラムであって、前記複数のコアのうちの第１のコアに、
前記記憶部において前記第１のブートプログラムの記憶領域と異なる記憶領域に第２のブートプログラムを書き込む処理と、
前記第１のブートプログラムに基づきブートした前記複数のコアのうち、プロセスが割り当てられていない第２のコアがリブート時に参照する参照領域を前記第１のブートプログラムの記憶領域から前記第２のブートプログラムの記憶領域に変換する処理と、
変換後の前記参照領域を指定するリブート指示を前記第２のコアへ通知する処理と
を実行させるマルチコアプロセッサシステムの制御プログラム。
【請求項６】
前記第１のコアに、前記複数のコアの全てに前記リブート指示を通知させた場合に、前記第１のブートプログラムの記憶領域に基づく前記ブートアドレスを前記第２のブートプログラムの記憶領域に基づくアドレスに書き換えさせる、請求項５に記載のマルチコアプロセッサシステムの制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オペレーティングシステムを更新するマルチコアプロセッサシステム、制御プログラム、および制御方法に関する。
【背景技術】
【０００２】
従来の携帯型端末では、オペレーティングシステム（以下、「ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）」と称する。）の更新に当たり、更新期間中にはアプリケーションの動作を停止させる必要があった。このため、更新期間中には、利用者はアプリケーションの動作（以下、「機能」と称する。）を利用することができないので、深夜時間帯など利用者の利用頻度が下がる時間帯に更新が行われていた。しかし、汎用計算機とは異なり、携帯型端末などの組み込みシステムは２４時間３６５日動かし続けることを想定しており、機能を停止させなければならないことが問題となっていた。
【０００３】
サーバ分野においては、無停止でアップデートを行う２つの手法が提案されている。一つ目は、主系統の他に待機系統を用意し、主系統のアップデート中には待機系統で処理を行うもの（従来技術１）である（たとえば、下記特許文献１，２を参照。）。２つ目は、仮想マシンを運用し、アップデート期間中にＯＳを含むソフトウェアを仮想マシンで動作させること（従来技術２）である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開昭５４−１０６１４６号公報
【特許文献２】特開２００３−３３０７４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術１および従来技術２の場合、組み込みシステムにおいては、システム規模や費用の増加を招くという問題があった。一方、待機系統や仮想マシンがない場合、アップデートを代行することができないため、アップデートの際に機能を停止しなければならないという問題があった。
【０００６】
このように、携帯型端末などの組み込みシステムは２４時間３６５日動かし続けることを想定しており、従来では、更新期間中には、利用者は機能を利用することができず、また、機能を停止させなければならないことが問題となっていた。
【０００７】
本発明は、上述した従来技術による問題点を解消するため、システム規模や費用の低減化を図りつつ、ＯＳの無停止アップデートを実現することができるマルチコアプロセッサシステム、制御プログラム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一観点によれば、複数のコアと、前記複数のコアで実行される第１のブートプログラムおよび前記複数のコアがブート時にアクセスするブートアドレスを記憶する記憶部とを有するマルチコアプロセッサシステムであって、前記複数のコアのうちの第１のコアは、前記記憶部において前記第１のブートプログラムの記憶領域と異なる記憶領域に第２のブートプログラムを書き込み、前記第１のブートプログラムに基づきブートした前記複数のコアのうち、プロセスが割り当てられていない第２のコアがリブート時に参照する参照領域を前記第１のブートプログラムの記憶領域から前記第２のブートプログラムの記憶領域に変換し、変換後の前記参照領域を指定するリブート指示を前記第２のコアへ通知するマルチコアプロセッサシステム、制御プログラム、および制御方法を提供する。
【発明の効果】
【０００９】
本マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、システム規模や費用の低減化を図りつつ、ＯＳの無停止アップデートを実現することができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】実施の形態にかかるマルチコアプロセッサシステムのハードウェア構成を示すブロック図である。
【図２】マルチコアプロセッサシステム１００の機能的構成を示すブロック図である。
【図３】新ブートプログラムのダウンロード準備例とダウンロード例を示す説明図である。
【図４】新ブートプログラム領域が設定される例を示す説明図である。
【図５】ＣＰＵ＃Ｎがリブートされる例を示す説明図である。
【図６】ハイパーバイザ１２１によるメモリアクセス制限例を示す説明図（その１）である。
【図７】ハイパーバイザ１２１によるメモリアクセス制限例を示す説明図（その２）である。
【図８】ハイパーバイザ１２１によるメモリアクセス制限例を示す説明図（その３）である。
【図９】ハイパーバイザ１２１によるメモリアクセス制限例を示す説明図（その４）である。
【図１０】ＣＰＵ＃Ｎで新ＯＳがブートされた例を示す説明図である。
【図１１】ＣＰＵ＃Ｍで新ＯＳをブートさせる準備例を示す説明図である。
【図１２】ＣＰＵ＃Ｍに割り当てられているプロセスがすべて完了した例を示す説明図である。
【図１３】すべてのＣＰＵで新ＯＳがブートされた例を示す説明図である。
【図１４】マルチコアプロセッサシステム１００によるＯＳの更新手順を示すフローチャート（その１）である。
【図１５】マルチコアプロセッサシステム１００によるＯＳの更新手順を示すフローチャート（その２）である。
【図１６】ハイパーバイザ１２１によるメモリアクセス制限の制限処理手順を示すフローチャートである。
【図１７】マルチコアプロセッサシステム１００によるＯＳの更新手順を示すフローチャート（その３）である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、制御プログラム、および制御方法の好適な実施の形態を詳細に説明する。
【００１２】
（マルチコアプロセッサシステムのハードウェア構成）
図１は、実施の形態にかかるマルチコアプロセッサシステムのハードウェア構成を示すブロック図である。図１において、マルチコアプロセッサシステム１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）♯Ｍと、ＣＰＵ＃Ｎと、調停回路１０２と、共有メモリ１０３と、ストレージ１０４と、Ｉ／Ｆ（ＩｎｔｅｒＦａｃｅ）１０５と、を備えている。また、各構成部は、バス１０１によってそれぞれ接続されている。
【００１３】
ここで、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのＣＰＵ＃ＭとＣＰＵ＃Ｎの２つのプロセッサが並列に接続されているプロセッサ群を例に挙げて説明する。
【００１４】
ＣＰＵ＃ＭとＣＰＵ＃Ｎは、独立して動作可能なコアとキャッシュとレジスタなどを備えている。ストレージ１０４に記憶されているプログラムは、ＣＰＵ＃ＭまたはＣＰＵ＃Ｎによって共有メモリ１０３にマッピングされ、ロードされることで、コーディングされている処理をＣＰＵ＃ＭまたはＣＰＵ＃Ｎに実行させることとなる。
【００１５】
調停回路１０２は、別々のＣＰＵから同時に共有メモリ１０３へのアクセスが発生しても競合しないように調停する回路である。調停回路１０２内の優先度の情報は、ＣＰＵごとの優先度を示す情報であり、調停回路１０２は優先度の情報に基づいて共有メモリ１０３へのアクセスを調停する。本実施の形態では、優先度は高いか否かの２段階とする。高優先は優先度が高いことを示し、低優先は優先度が高くないことを示す。
【００１６】
共有メモリ１０３は、ＣＰＵ＃Ｍローカル領域１１０やＣＰＵ＃Ｎローカル領域１１１を有するメモリである。共有メモリ１０３は、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などにより構成されている。たとえば、ＲＡＭは、ＣＰＵ＃ＭとＣＰＵ＃Ｎのワークエリアとして使用される。
【００１７】
ストレージ１０４は、ＭＢＲ１０８と、旧ブートプログラムの記憶領域（以下、「旧ブートプログラム領域１０９」）と、ユーザのファイルシステム領域を有している。ストレージ１０４は、たとえば、フラッシュＲＯＭやハードディスクドライブなどにより構成されている。
【００１８】
ＭＢＲ（Ｍａｓｔｅｒ  Ｂｏｏｔ  Ｒｅｃｏｒｄ）１０８とは、ＣＰＵ＃ＭやＣＰＵ＃Ｎの起動時に最初に読み込まれるストレージ１０４上の先頭部分(セクタ)である。ＭＢＲ１０８には、ストレージ１０４内に収められたどのＯＳをどのように起動するかなどの情報が記録され、具体的には、ブートストラップローダ、パーティションテーブル、ブートシグニチャがそれぞれ格納されている。
【００１９】
ブートストラップローダには、起動用のプログラムが格納されている。パーティションテーブルにはブートプログラムが格納されている開始アドレスおよび終了アドレスが示されている。ブートシグニチャには０ｘＡＡ５５という値が識別子として格納され、該ブートシグニチャに０ｘＡＡ５５が格納されていればＭＢＲ１０８が有効であることを示し、０ｘＡＡ５５が格納されていなければＭＢＲ１０８が無効であることを示している。
【００２０】
ここで、ブートプログラムとは、ＯＳの中核部分のプログラムである。たとえば、Ｌｉｎｕｘ（登録商標）の場合、ＯＳの中核部分はカーネルである。旧ブートプログラム領域１０９は、旧ブートプログラムが記憶されている領域であり、該領域の開始アドレスから終了アドレスはパーティションテーブルに記憶されている。本実施の形態で示すブートプログラムの新・旧は、先にストレージ１０４に記憶されているか否か、または版数が更新されているか否かを示している。
【００２１】
ＣＰＵ＃Ｍ（またはＣＰＵ＃Ｎ）を起動するとまずＭＢＲ１０８が読み込まれ、ブートストラップローダに格納されている起動用のプログラムにコーディングされている処理がＣＰＵ＃Ｍ（またはＣＰＵ＃Ｎ）に実行される。ブートストラップローダはパーティションの位置や大きさなどを記録したパーティションテーブルを読み込み、ＯＳの旧ブートプログラムの開始アドレスを読み込む。
【００２２】
ここで、ＣＰＵ＃Ｍは旧ブートプログラムを読み込み、読み込んだ旧ブートプログラムを共有メモリ１０３にマッピングする。ＣＰＵ＃Ｍがマッピングした旧ブートプログラムの共有メモリ１０３内の領域が、上述のＣＰＵ＃Ｍローカル領域１１０である。そして、ＣＰＵ＃Ｍが、マッピングした旧ブートプログラムにコーディングされている処理を旧ＯＳ（マスタ）１２２として起動する。
【００２３】
一方、ＣＰＵ＃Ｎは旧ブートプログラムを読み込み、読み込んだ旧ブートプログラムを共有メモリ１０３にマッピングする。ＣＰＵ＃Ｎがマッピングした旧ブートプログラムの共有メモリ１０３内の領域が、上述のＣＰＵ＃Ｎローカル領域１１１である。そして、ＣＰＵ＃Ｎが、マッピングした旧ブートプログラムにコーディングされている処理をマスタＯＳの旧ＯＳ（スレーブ）１２３として起動する。
【００２４】
そして、Ｉ／Ｆ１０５は、ネットワーク１０６と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０５には、たとえばモデムなどを採用することができる。Ｉ／Ｆ１０５は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１０６に接続され、このネットワーク１０６を介してＯＳの更新データ配信元１０７に接続される。
【００２５】
つぎに、ハイパーバイザ１２１は、ＣＰＵ＃ＭとＣＰＵ＃Ｎなどのハードウェア上で直接動作するプログラムであり、該ハードウェア内のレジスタに記憶されているプログラムである。ハイパーバイザ１２１はＣＰＵごとに独立して動作するが、すべて同一処理を実施するため、図１では省略してハイパーバイザ１２１のみ記載している。
【００２６】
なお、たとえば、後述する旧ブートプログラムの削除処理であれば、複数のハイパーバイザ１２１が一つしか存在しない旧ブートプログラムを削除しているようであるが、最も早く削除処理まで処理がたどり着いたＣＰＵのハイパーバイザ１２１が削除を行う。よって、あとから他のＣＰＵのハイパーバイザ１２１が削除処理を行っても破棄する旧ブートプログラムはすでに存在しないだけである。
【００２７】
ハイパーバイザ１２１は、ＣＰＵ＃ＭやＣＰＵ＃Ｎ内のレジスタを直接参照したり、ＣＰＵ＃ＭやＣＰＵ＃Ｎ内のレジスタの情報を読み出したり、ＣＰＵ＃ＭやＣＰＵ＃Ｎ内のレジスタの情報を書き換えたりする特権命令を実施することができる。
【００２８】
さらに、ＣＰＵ＃ＭやＣＰＵ＃Ｎへのリブート指示もハイパーバイザ１２１の特権命令である。ハイパーバイザ１２１によるリブート指示とは、具体的には、パーティションテーブル内に記述されている旧ブートプログラム領域１０９の開始アドレスにジャンプするようにＣＰＵ＃ＭやＣＰＵ＃Ｎへ指示することである。本実施の形態では、新ブートプログラムの記憶領域（以下、「新ブートプログラム領域」と称する。）の開始アドレスへジャンプするようにＣＰＵ＃ＭやＣＰＵ＃Ｎへ指示することで、ＣＰＵ＃ＭやＣＰＵ＃Ｎは新ブートプログラムでＯＳを起動する。
【００２９】
旧ＯＳ（マスタ）１２２および旧ＯＳ（スレーブ）１２３は、ハイパーバイザ１２１上で動作するソフトウェアである。ＯＳにおけるマスタ・スレーブとＣＰＵ間の接続関係におけるマスタ・スレーブとは意味が異なる。マスタＯＳ（本実施の形態では旧ＯＳ（マスタ）１２２）ではプロセスの割り当てを決定するスケジューラを動かし、スレーブＯＳ（本実施の形態では旧ＯＳ（スレーブ）１２３）はスケジューラにより割り当てられたプロセスを実行する。
【００３０】
マスタＯＳは、プロセスの割り当て結果をタスクテーブルに登録する。ここで、タスクテーブルは、一般的なＯＳで管理されているプロセス情報のテーブルである。起動時間、メモリリソース、プロセス番号、起動したユーザ名、実行条件（リンクしているＯＳがサービスするライブラリの版数など）、実行形式ファイルのパスなどが記載されている。すなわち、ＣＰＵ＃Ｍは、旧ＯＳ（マスタ）１２２によりタスクテーブルから起動時間や実行条件を読み出すことで、各アプリケーション（プロセス）がどのＯＳに割り当てられているか、どのアプリケーション（プロセス）が実行終了したかを監視することができる。
【００３１】
また、更新検出アプリ１３１は、ＯＳ上で動作するアプリケーションプログラムであり、ブートプログラムの更新を検出する。更新検出アプリ１３１は、旧ＯＳ（マスタ）１２２上に割り当てられている。また、ＧＵＩ（Ｇｒａｐｈｉｃ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）のプロセスであるメインプロセス１３３が旧ＯＳ（マスタ）１２２に割り当てられている。
【００３２】
ダウンローダ１３２は、ＯＳ上で動作するアプリケーションプログラムであり、ブートプログラムやライブラリをダウンロードする。ダウンローダ１３２は、旧ＯＳ（マスタ）１２２と旧ＯＳ（スレーブ）１２３のうちいずれのＯＳ上で動作しても良いが、ここでは、旧ＯＳ（スレーブ）１２３に割り当てられている。
【００３３】
ダウンローダ１３２は、Ｉ／Ｆ１０５を介してＯＳの更新データ配信元１０７から新ブートプログラムをダウンロードし、静的ベリファイを実施する。静的ベリファイとは、ブートプログラムのバイナリデータに誤りがないか、規格に従っているかなどを検査することである。動的ベリファイとは、新ブートプログラムで正常にブートされるかを検査することである。
【００３４】
（マルチコアプロセッサシステム１００の機能的構成）
図２は、マルチコアプロセッサシステム１００の機能的構成を示すブロック図である。マルチコアプロセッサシステム１００で起動されているハイパーバイザ１２１は、設定部２０１と、受付部２０２と、判断部２０３と、変換部２０４と、通知部２０５と、検出部２０６と、削除部２０７と、を含む構成である。上述のようにハイパーバイザ１２１は通知プログラムを備えるプログラムであるため、ストレージ１０４または共有メモリ１０３内のＲＯＭに記憶されたハイパーバイザ１２１をＣＰＵ＃ＭおよびＣＰＵ＃Ｎに実行させることにより、各機能（設定部２０１から削除部２０７）を実現する。
【００３５】
まず、設定部２０１は、新ブートプログラムの更新指示を受け付けると、旧ブートプログラム領域１０９と所定のマスク値に基づいて新ブートプログラム領域を設定する。
【００３６】
つぎに、受付部２０２は、設定部２０１により新ブートプログラム領域が設定された後、新ブートプログラムのダウンロードに関する旧ブートプログラム領域１０９へのアクセスの入力を受け付ける。
【００３７】
判断部２０３は、受付部２０２により受け付けられたアクセスがライトアクセスであるかリードアクセスであるかを判断する。
【００３８】
変換部２０４は、判断部２０３によりアクセスがライトアクセスであると判断された場合、ライトアクセスで指定されたアドレスを、前記所定のマスク値に基づいて新プログラム領域を指定するアドレスに変換する。
【００３９】
通知部２０５は、アクセスがリードアクセスの場合、リードアクセスで指定されたアドレスへのアクセス指示をリードアクセスのアクセス元へ通知する。一方、通知部２０５は、アクセスがライトアクセスの場合、変換部２０４による変換後のアドレスへのアクセス指示をライトアクセスのアクセス元へ通知する。つぎに、新ブートプログラムがダウンロードされた後の処理について説明する。
【００４０】
検出部２０６は、マルチコアプロセッサの中で旧ブートプログラムを用いてブートしたＣＰＵのうち、プロセスが割り当てられていないＣＰＵを検出する。本実施の形態では、後述するがＯＳはプロセスが割り当てられていないコアを検出し、ハイパーバイザ１２１へ検出したコアにプロセスが割り当てられていないことを通知する。そして、ハイパーバイザ１２１はこの通知を受け付けることをプロセスが割り当てられていないコアを検出するとしている。
【００４１】
変換部２０４は、検出部２０６によりプロセスが割り当てられていないＣＰＵが検出されると、参照領域を旧ブートプログラム領域１０９から新ブートプログラムの記憶領域に変換する。
【００４２】
通知部２０５は、変換部２０４よる変換後の参照領域を指定するリブート指示を完了したＣＰＵへ通知する通知する。
【００４３】
また、検出部２０６は、プロセスが割り当てられていないＣＰＵが検出されない場合、割り当てられていたすべてのプロセスの動作が完了したＣＰＵを検出する。
【００４４】
そして、変換部２０４は、検出部２０６により該完了したＣＰＵが検出されると、参照領域を旧ブートプログラム領域１０９から新ブートプログラム領域に変換する。通知部２０５は、変換部２０４よる変換後の参照領域を指定するリブート指示を完了したＣＰＵへ通知する通知する。
【００４５】
変換部２０４は、通知部２０５によりリブート指示が通知されると、記憶装置のマスターブートレコードに記憶されている旧ブートプログラム領域１０９を指定するアドレスを所定のマスク値に基づき新ブートプログラム領域を指定するアドレスに変換する。
【００４６】
削除部２０７は、変換部２０４により記憶装置のマスターブートレコードに記憶されている旧ブートプログラム領域１０９が変更されると、旧ブートプログラム領域１０９に格納されている旧ブートプログラムを削除する。
【００４７】
以上を踏まえて図を用いてマルチコアプロセッサシステム１００の詳細な動作について説明する。
【００４８】
図３は、新ブートプログラムのダウンロード準備例とダウンロード例を示す説明図である。まず、更新検出アプリ１３１がＩ／Ｆを介してブートプログラムへの更新を検出し、（１）旧ＯＳ（マスタ）１２２へブートプログラムの更新を通知する。つぎに、旧ＯＳ（マスタ）１２２がブートプログラムの更新を受け付けると、（２）ハイパーバイザ１２１へブートプログラムの更新を通知する。そして、ハイパーバイザ１２１が新ブートプログラムの更新を受け付けると、（３）新ブートプログラム領域１１２を所定のマスク値と旧ブートプログラムの領域に基づいて設定する。
【００４９】
図４は、新ブートプログラム領域１１２が設定される例を示す説明図である。ここで、（３）新ブートプログラムの領域の設定について詳細例を説明する。ハイパーバイザ１２１はＭＢＲ１０８のパーティションテーブル４０１を参照し、旧ブートプログラム領域１０９の開始アドレスおよび終了アドレスを取得する。ハイパーバイザ１２１は旧ブートプログラム領域１０９の開始アドレスとマスク値との論理和を取ることにより新ブートプログラム領域１１２の開始アドレスを算出する。
【００５０】
ハイパーバイザ１２１は旧ブートプログラム領域１０９の終了アドレスとマスク値との論理和を取ることにより新ブートプログラム領域１１２の終了アドレスを算出する。ハイパーバイザ１２１は、ストレージ１０４内の算出した新ブートプログラムの開始アドレスが示す領域から算出した新ブートプログラムの終了アドレスが示す領域までを新ブートプログラムの領域として確保する。
【００５１】
図３に戻って、（４）ハイパーバイザ１２１が旧ＯＳ（マスタ）１２２へダウンロード開始指示を通知し、新ブートプログラムのダウンローダ１３２および静的ベリファイに関する旧ブートプログラムへのアクセスを監視する。旧ＯＳ（マスタ）１２２がダウンロード開始通知を受け付けると、（５）ダウンローダ１３２へダウンロード開始指示を通知する。そして、ダウンローダ１３２はダウンロード開始指示を受け付けると、Ｉ／Ｆ１０５を介してＯＳの更新データ配信元１０７から新ブートプログラムをダウンロードする。
【００５２】
そして、ダウンローダ１３２が新ブートプログラムをダウンロード中、旧ブートプログラムへのライトアクセスを行うために（６）旧ＯＳ（スレーブ）１２３へ旧ブートプログラムへのアクセスを入力する。旧ＯＳ（スレーブ）１２３が、新ブートプログラムのダウンロードに関する旧ブートプログラムへのアクセスを受け付けると、（７）ハイパーバイザ１２１へ該アクセスを入力する。
【００５３】
そして、ハイパーバイザ１２１が、新ブートプログラムのダウンロードに関する旧ブートプログラムへのアクセスを受け付けると、該アクセスがライトアクセスであるかリードアクセスであるかを判断する。ハイパーバイザ１２１がライトアクセスであると判断した場合、該ライトアクセスが示すアドレスを所定のマスク値に基づいて新ブートプログラム領域１１２を指定するアドレスに変換する。
【００５４】
そして、ハイパーバイザ１２１が、（８）変換後のアドレスへのアクセス指示を旧ＯＳ（スレーブ）１２３へ通知する。一方、ハイパーバイザ１２１がリードアクセスであると判断した場合、リードアクセスで指定されたアドレスへのアクセス指示を旧ＯＳ（スレーブ）１２３へ通知する。
【００５５】
アクセスが指定するアドレスを０ｘ１１１０とし、所定のマスク値を０ｘ１０００とすする。たとえば、リードアクセスの場合、ハイパーバイザ１２１が０ｘ１１１０へのアクセス指示を旧ＯＳ（スレーブ）１２３へ通知する。たとえば、ライトアクセスの場合、ハイパーバイザ１２１が０ｘ１１１０と０ｘ１０００の論理和を算出する（下記式（１））ことで新ブートプログラム領域１１２を指定するアドレスに変換する。そして、変換後のアドレスへのアクセス指示を旧ＯＳ（スレーブ）１２３へ通知する。
【００５６】
ブートプログラム領域を指定するアドレス＝０ｘ１１１０＋０ｘ１０００
＝０ｘ０１１０              ・・・（１）
【００５７】
ここで、「＋」が論理和を示している。よって、ハイパーバイザ１２１が０ｘ０１１０へのアクセス指示を旧ＯＳ（スレーブ）１２３へ通知する。
【００５８】
旧ＯＳ（スレーブ）１２３は、ハイパーバイザ１２１からアクセス指示を受け付けると、（９）ダウンローダ１３２へアクセス指示を通知する。図３では、ライトアクセスを示しているため、ダウンローダ１３２は、（１０）変換後のアドレスへのアクセスを実行する。
【００５９】
図５は、ＣＰＵ＃Ｎがリブートされる例を示す説明図である。新ブートプログラム領域１１２への新ブートプログラムのダウンロード後、更新検出アプリ１３１が（１１）更新条件情報を旧ＯＳ（マスタ）１２２へ通知する。更新条件情報は、実行制約と、対象版数と、更新実施ＣＰＵ数と、緊急度の情報とを有している。緊急度の情報は緊急度が高いか否かに関する情報である。
【００６０】
旧ＯＳ（マスタ）１２２は、更新条件情報を受け付けると、受け付けた更新条件情報から緊急度の情報を読み出し、読み出した緊急度の情報が、緊急度が高いことを示す場合、タスクテーブルを用いて更新実施ＣＰＵに割り当てられているプロセスを特定し、（１２）強制マイグレートする。ここでは、プロセス１３４が特定される。強制マイグレートにより更新実施ＣＰＵに割り当てられているプロセス１３４がＣＰＵ＃Ｍに割り当てられている。
【００６１】
ここで、更新実施ＣＰＵをＣＰＵ＃Ｎとする。更新実施ＣＰＵとは、他のＣＰＵに先だって新ブートプログラムでリブートするＣＰＵである。更新実施ＣＰＵの決定方法については、少なくとも旧ＯＳへのプロセスの割り当てが可能なマスタＯＳが旧ＯＳの中で最後にリブートされればよいため、特に限定しない。
【００６２】
たとえば、４つのＣＰＵによりマルチコアプロセッサが構成されている場合、マスタＯＳの処理を実行するＣＰＵを除く残余のＣＰＵから２つのＣＰＵを更新実施ＣＰＵとする。そして、マスタＯＳの処理を実行するＣＰＵともう一つのＣＰＵを更新実施ＣＰＵがリブート後にリブートするＣＰＵとしてもよい。また、マスタＯＳの処理を実行するＣＰＵを除く残余のＣＰＵをすべて更新実施ＣＰＵとしてもよい。
【００６３】
また、読み出した緊急度の情報が、緊急度が高くない（緊急度が低い）ことを示す場合、旧ＯＳ（マスタ）１２２が、マルチコアプロセッサのうちマスタＯＳを動作するＣＰＵを除くＣＰＵからいずれのプロセスも割り当てられていないＣＰＵを検出する。ＣＰＵ＃Ｎには、プロセスが割り当てられているため、いずれのプロセスも割り当てられていないＣＰＵは検出されない。つぎに、旧ＯＳ（マスタ）１２２が、ＣＰＵ＃Ｎへのディスパッチを禁止し、ＣＰＵ＃Ｎに割り当てられているプロセスが終了するのを検出する。
【００６４】
そして、強制マイグレートまたはプロセスの終了によってＣＰＵ＃Ｎに割り当てられていたプロセスが無くなると、（１３）旧ＯＳ（マスタ）１２２がＣＰＵ＃Ｎに割り当てられていたプロセスが完了したこと（または、更新実施ＣＰＵでもよい。）およびメモリアクセス制限指示をハイパーバイザ１２１へ通知する。ハイパーバイザ１２１が該通知を受け付けると、（１４）共有メモリ１０３のアクセス制限を開始する。ハイパーバイザ１２１が共有メモリ１０３のアクセス制限を開始すると、たとえば、各ＯＳやアプリケーションはハイパーバイザ１２１からのアクセス指示を受け付けるまで共有メモリ１０３へアクセスできないこととする。
【００６５】
そして、ハイパーバイザ１２１が、共有メモリ１０３のアクセス制限を開始した後、ブートプログラムの参照領域を旧ブートプログラム領域１０９から新ブートプログラム領域１１２へ変換し、（１５）変換後の参照領域を指定するリブート指示を旧ＯＳ（スレーブ）１２３へ通知する。旧ＯＳ（スレーブ）１２３は、リブート指示を受け付けると、（１６）新ブートプログラムを参照してリブートを開始する。また、更新対象ＣＰＵのうち一つのＣＰＵが新ＯＳをマスタＯＳとしてリブートする。ここでは、ＣＰＵ＃Ｎのみであるため、ＣＰＵ＃Ｎが新ＯＳをマスタＯＳとしてリブートする。つぎに、ハイパーバイザ１２１によるメモリアクセス制限について図６から図９を用いて説明する。
【００６６】
図６は、ハイパーバイザ１２１によるメモリアクセス制限例を示す説明図（その１）である。図では、（１７）リブート中の旧ＯＳから共有メモリ１０３内のＣＰＵ＃Ｍローカル領域１１０へのアクセスが発生した場合について説明する。ハイパーバイザ１２１は、メモリアクセス制限を開始すると、アプリケーションから共有メモリ１０３へのアクセスおよびアクセスのアドレスをすべて検出する。
【００６７】
ハイパーバイザ１２１が（１８）リブート中の旧ＯＳから共有メモリ１０３内のＣＰＵ＃Ｍローカル領域１１０へのアクセスとアクセスのアドレスを検出する。ハイパーバイザ１２１がＣＰＵ＃Ｎからのアクセスか否かを判断し、ここでは、旧ＯＳ（スレーブ）１２３からのアクセスであるためＣＰＵ＃Ｎからのアクセスであると判断される。つづいて、ハイパーバイザ１２１が他のＣＰＵのローカル領域へのアクセスか否かを検出したアクセスのアドレスに基づいて判断する。
【００６８】
ここでは、検出されたアクセスがＣＰＵ＃Ｍローカル領域１１０へのアクセスであると判断され、（１９）ハイパーバイザ１２１が旧ＯＳ（スレーブ）１２３の更新失敗を出力、またはダウンロードした新ブートプログラムが不正であることを出力する。出力形式としては、たとえば、ディスプレイへの表示、Ｉ／Ｆ１０５による外部装置への送信がある。また、共有メモリ１０３内の各ＣＰＵのローカル領域を除く領域などに記憶することとしてもよい。
【００６９】
ブート中であるＣＰＵ＃ＮからＣＰＵ＃ＭのワークエリアであるＣＰＵ＃Ｍローカル領域１１０へのアクセスは正常なブートプログラムであれば発生しない。したがって、（１７）〜（１９）により異常であるブートプログラムで更新するのを防止することができる。
【００７０】
図７は、ハイパーバイザ１２１によるメモリアクセス制限例を示す説明図（その２）である。図７では、（２０）リブート中の旧ＯＳから共有メモリ１０３内のＣＰＵ＃Ｎローカル領域１１１へのアクセスが発生した場合について説明する。
【００７１】
ハイパーバイザ１２１が（２１）リブート中の旧ＯＳから共有メモリ１０３内のＣＰＵ＃Ｎローカル領域１１１へのアクセスを検出する。ハイパーバイザ１２１がＣＰＵ＃Ｎからのアクセスか否かを判断し、ここでは、旧ＯＳ（スレーブ）１２３からのアクセスであるためＣＰＵ＃Ｎからのアクセスであると判断される。つづいて、ハイパーバイザ１２１が他のＣＰＵのローカル領域へのアクセスか否かを検出したアクセスが指定するアドレスに基づいて判断する。
【００７２】
ここでは、検出されたアクセスがＣＰＵ＃Ｎローカル領域１１１へのアクセスであると判断され、ハイパーバイザ１２１が（２２）調停回路１０２内のＣＰＵ＃Ｎに関する優先度の情報を低優先に設定する。そして、ハイパーバイザ１２１がアクセス指示を通知する。
【００７３】
ブート中であるＣＰＵ＃Ｎは、各種テーブルの初期化やシステムファイルの更新、システムファイルの一時退避・復元、該一時退避・復元にともなうキャッシュデータのフラッシュなどを行う。すなわち、ブート中であるＣＰＵ＃Ｎは、通常のアプリケーションを動作中であるＣＰＵ＃Ｍと比較して共有メモリ１０３へのアクセスが多い。
【００７４】
上述のように調停回路１０２内のＣＰＵ＃Ｎに関する優先度の情報が低優先に設定されることで、メモリコンテンション（メモリアクセス権の争奪）を防止することができる。そして、ブート中でないＣＰＵ＃Ｍで動作しているアプリケーションに影響を与えることなくＯＳを更新できる。
【００７５】
図８は、ハイパーバイザ１２１によるメモリアクセス制限例を示す説明図（その３）である。図８では、（２３）旧ＯＳ（マスタ）１２２から共有メモリ１０３内のＣＰＵ＃Ｍローカル領域１１０へのアクセスが発生した場合について説明する。
【００７６】
ハイパーバイザ１２１が（２４）旧ＯＳ（マスタ）１２２から共有メモリ１０３内のＣＰＵ＃Ｍローカル領域１１０へのアクセスを検出する。ハイパーバイザ１２１が検出したアクセスがＣＰＵ＃Ｎからのアクセスか否かを判断し、ここでは、旧ＯＳ（マスタ）１２２からのアクセスであるためＣＰＵ＃Ｎからのアクセスでないと判断される。つづいて、ハイパーバイザ１２１が他のＣＰＵのローカル領域へのアクセスか否かを検出したアクセスが示すアドレスに基づいて判断する。
【００７７】
ここでは、検出されたアクセスがＣＰＵ＃Ｍローカル領域１１０へのアクセスであると判断され、ハイパーバイザ１２１が（２５）調停回路１０２内のＣＰＵ＃Ｎに関する優先度の情報を低優先に設定する。そして、ハイパーバイザ１２１が旧ＯＳ（マスタ）１２２へアクセス指示を通知する。
【００７８】
図９は、ハイパーバイザ１２１によるメモリアクセス制限例を示す説明図（その４）である。図９では、（２６）旧ＯＳ（マスタ）１２２から共有メモリ１０３内のＣＰＵ＃Ｎローカル領域１１１へのアクセスが発生した場合について説明する。
【００７９】
ハイパーバイザ１２１が（２７）旧ＯＳ（マスタ）１２２から共有メモリ１０３内のＣＰＵ＃Ｎローカル領域１１１へのアクセスを検出する。ハイパーバイザ１２１が検出したアクセスがＣＰＵ＃Ｎからのアクセスか否かを判断し、ここでは、旧ＯＳ（マスタ）１２２からのアクセスであるためＣＰＵ＃Ｎからのアクセスでないと判断される。つづいて、ハイパーバイザ１２１が共有メモリ１０３内の他のＣＰＵのローカル領域へのアクセスか否かを検出したアクセスが示すアドレスに基づいて判断する。
【００８０】
ここでは、検出されたアクセスがＣＰＵ＃Ｎローカル領域１１１へのアクセスであると判断され、ハイパーバイザ１２１が（２８）アクセスエラーを出力する。出力形式としては、たとえば、ディスプレイへの表示、Ｉ／Ｆ１０５による外部装置への送信がある。また、共有メモリ１０３内の各ＣＰＵのローカル領域を除く領域などに記憶することとしてもよい。
【００８１】
図１０は、ＣＰＵ＃Ｎで新ＯＳがブートされた例を示す説明図である。図１０では、ＣＰＵ＃Ｎで新ＯＳ（マスタ）１２４がマスタＯＳとしてブートされている。ここで、新ＯＳと旧ＯＳごとにマスタＯＳが存在することとなる。新たに割り当てられる新規起動プロセス１３６は新ＯＳ（マスタ）１２４によりスケジュールされて実行されるため、マルチコアプロセッサシステム１００において新旧のマスタＯＳが共存していても競合することはない。また、プロセス１３５は旧ＯＳ（スレーブ）１２３がブート中に旧ＯＳ（マスタ）１２２に割り当てられたプロセスである。
【００８２】
そして、ハイパーバイザ１２１が、ＣＰＵ＃Ｎで新ＯＳ（マスタ）１２４がブートされると、（２９）メモリアクセス制限を解除し、（３０）調停回路１０２内の優先度の情報を元に戻す。調停回路１０２内の優先度の情報は、たとえば、メモリ制限開始直前に共有メモリ１０３内に複製して記憶しておき、メモリ制限解除後に複製した優先度の情報を用いて調停回路１０２内の変更された優先度の情報を復元する。
【００８３】
図１１は、ＣＰＵ＃Ｍで新ＯＳをブートさせる準備例を示す説明図である。旧ＯＳ（マスタ）１２２が、旧ＯＳ（マスタ）１２２に割り当てられているプロセスをプロセステーブルに基づいて特定する。特定したプロセスのうち旧ブートプログラムにダイナミックリンクもしくはオープンしているプロセスは、旧ＯＳ（マスタ）１２２で処理を続行する。一方、（３１）旧ＯＳ（マスタ）１２２は、特定したプロセスのうち旧ブートプログラムにダイナミックリンクおよびオープンしていないプロセス（ここでは、メインプロセス１３３と更新検出アプリ１３１）を新ＯＳ（マスタ）１２４へマイグレートする。
【００８４】
図１２は、ＣＰＵ＃Ｍに割り当てられているプロセスがすべて完了した例を示す説明図である。図１２では、旧ＯＳ（マスタ）１２２に割り当てられていたプロセスの処理が終了した。すなわち、旧ＯＳ（マスタ）１２２により旧ＯＳ（マスタ）１２２に割り当てられているプロセスが特定されない場合である。そして、（３２）旧ＯＳ（マスタ）１２２がハイパーバイザ１２１へ旧ＯＳ（マスタ）１２２に割り当てられているプロセスがすべて完了したことを通知する。
【００８５】
（３３）ハイパーバイザ１２１が該通知を受け付けると、ＭＢＲ１０８に記憶されているパーティションテーブル４０１が示すブートプログラムの参照領域を新ブートプログラム領域１１２に変換する。そして、（３４）ハイパーバイザ１２１が旧ＯＳ（マスタ）１２２へリブート指示を通知する。すでにパーティションテーブル４０１が示すブートプログラムの参照領域は変換済みであるため、（３５）旧ＯＳ（マスタ）１２２はリブート指示を受け付けると、新ブートプログラムでリブートを開始する。ここで、旧ＯＳ（マスタ）１２２は新ＯＳ（スレーブ）１２５としてブートされる。そして、（３６）ハイパーバイザ１２１が旧ブートプログラムを廃棄する。
【００８６】
図１３は、すべてのＣＰＵで新ＯＳがブートされた例を示す説明図である。図１３では、旧ＯＳ（マスタ）１２２が新ＯＳ（スレーブ）１２５として起動されている。さらに、ストレージ１０４内での旧ブートプログラムの領域が空いている。
【００８７】
（マルチコアプロセッサシステムによるＯＳの更新手順）
図１４は、マルチコアプロセッサシステム１００によるＯＳの更新手順を示すフローチャート（その１）である。ここでは、ハイパーバイザ１２１と旧ＯＳ（マスタ）１２２とダウンローダ１３２と更新検出アプリ１３１によるダウンロード開始前とダウンロードおよび静的ベリファイ時の処理手順を説明する。まず、更新検出アプリ１３１がブートプログラムの更新を検出し（ステップＳ１４０１）、更新検出アプリ１３１がブートプログラムの更新を検出した場合、旧ＯＳ（マスタ）１２２へブートプログラムの更新を通知する（ステップＳ１４０２）。旧ＯＳ（マスタ）１２２が、ブートプログラムの更新を受け付けると、ハイパーバイザ１２１へブートプログラムの更新を通知する（ステップＳ１４０３）。
【００８８】
ハイパーバイザ１２１が、ブートプログラムの更新を受け付けると、新ブートプログラム領域を旧ブートプログラムと所定のマスク値に基づいて設定し、旧ＯＳ（マスタ）１２２へダウンロード開始指示を通知する（ステップＳ１４０４）。そして、ハイパーバイザ１２１が、ブートプログラム領域へのブートプログラムに関するアクセスを監視する（ステップＳ１４０５）。アクセスの監視は、ステップＳ１４０９〜ステップＳ１４１１までの処理を指す。
【００８９】
旧ＯＳ（マスタ）１２２が、ハイパーバイザ１２１からのダウンロード開始指示を受け付けると、ダウンローダ１３２へダウンロード開始指示を通知する（ステップＳ１４０６）。そして、ダウンローダ１３２が、ダウンロード開始指示を受け付けると、ダウンロードと静的ベリファイを開始する（ステップＳ１４０７）。ダウンローダ１３２が、ダウンロード中や静的ベリファイ中にストレージへのアクセスを行う場合、旧ＯＳ（マスタ）１２２へアクセスを入力し、ダウンローダ１３２を動かすＯＳが、ストレージへのアクセスを受け付けると、ハイパーバイザ１２１へアクセスを入力する（ステップＳ１４０８）。
【００９０】
そして、ハイパーバイザ１２１が、アクセスの入力を受け付けると、受け付けたアクセスがライトアクセスであるかリードアクセスであるかを判断する（ステップＳ１４０９）。ハイパーバイザ１２１が、該アクセスがライトアクセスであると判断した場合（ステップＳ１４０９：ライトアクセス）、ライトアクセスで指定されたアドレスを所定のマスク値に基づいて変換する（ステップＳ１４１０）。そして、ハイパーバイザ１２１が、変換後のアドレスへのアクセス指示を、ダウンローダ１３２を動かすＯＳへ通知する（ステップＳ１４１１）。
【００９１】
一方、ハイパーバイザ１２１が、該アクセスがリードアクセスであると判断した場合（ステップＳ１４０９：リードアクセス）、リードアクセスで指定されたアドレスへのアクセス指示を通知する（ステップＳ１４１１）。ステップＳ１４１１のつぎに、ダウンローダ１３２を動かすＯＳがアクセス指示を受け付けると、ダウンローダ１３２へアクセス指示を通知し（ステップＳ１４１２）、ダウンローダ１３２が、アクセス指示を受け付けると、ストレージへアクセスする（ステップＳ１４１３）。ステップＳ１４０７とステップＳ１４１３間の矢印は、アクセス結果に沿ってダウンロードと静的ベリファイが続行されることを示している。
【００９２】
図１５は、マルチコアプロセッサシステム１００によるＯＳの更新手順を示すフローチャート（その２）である。ここでは、ハイパーバイザ１２１と旧ＯＳ（マスタ）１２２とダウンローダ１３２によるダウンロードおよび静的ベリファイ後から更新実施ＣＰＵのリブートが完了するまでの処理手順を説明する。更新実施ＣＰＵには、旧ＯＳ（マスタ）１２２が含まれていないこととする。まず、ダウンローダ１３２が、ダウンロードと静的ベリファイを完了させると（ステップＳ１５０１）、更新条件情報を通知する（ステップＳ１５０２）。
【００９３】
旧ＯＳ（マスタ）１２２が、更新条件情報を受け付けると、更新条件情報から緊急度を読み出し、緊急度を判断する（ステップＳ１５０３）。緊急度が高い場合（ステップＳ１５０３：高）、旧ＯＳ（マスタ）１２２が、更新実施ＣＰＵに割り当てられたプロセスを強制マイグレートし（ステップＳ１５０４）、ステップＳ１５０７へ移行する。
【００９４】
一方、緊急度が低い場合（ステップＳ１５０３：低）、旧ＯＳ（マスタ）１２２が、プロセスが割り当てられていないＣＰＵがあるか否かを判断する（ステップＳ１５０５）。そして、旧ＯＳ（マスタ）１２２が、プロセスが割り当てられていないＣＰＵがあると判断した場合（ステップＳ１５０５：Ｙｅｓ）、プロセスが割り当てられていないＣＰＵを更新実施ＣＰＵに設定し（ステップＳ１５０６）、ステップＳ１５０９に移行する。ここでは、更新実施ＣＰＵは、プロセスが割り当てられていないＣＰＵのみである。
【００９５】
そして、旧ＯＳ（マスタ）１２２が、プロセスが割り当てられていないＣＰＵがないと判断した場合（ステップＳ１５０５：Ｎｏ）、更新実施ＣＰＵへのディスパッチを禁止する（ステップＳ１５０７）。そして、旧ＯＳ（マスタ）１２２が、更新実施ＣＰＵに割り当てられたプロセスが終了したか否かを判断する（ステップＳ１５０８）。旧ＯＳ（マスタ）１２２が、更新実施ＣＰＵに割り当てられたプロセスが終了していないと判断した場合、（ステップＳ１５０８：Ｎｏ）、ステップＳ１５０８へ戻る。
【００９６】
一方、旧ＯＳ（マスタ）１２２が、更新実施ＣＰＵに割り当てられたプロセスが終了したと判断した場合（ステップＳ１５０８：Ｙｅｓ）、共有メモリへのアクセス制限指示と更新対象ＣＰＵをハイパーバイザ１２１へ通知する（ステップＳ１５０９）。
【００９７】
ハイパーバイザ１２１が、共有メモリへのアクセス制限指示と更新対象ＣＰＵとを受け付けると、アクセス制限を開始する（ステップＳ１５１０）。アクセス制限のフローチャートについては後述する。そして、ハイパーバイザ１２１が、ブートプログラムの参照領域を新ブートプログラム領域に変換する（ステップＳ１５１１）。
【００９８】
つぎに、ハイパーバイザ１２１が、変換後の参照領域を指定するリブート指示を更新実施ＣＰＵ上のＯＳへ通知する（ステップＳ１５１２）。更新実施ＣＰＵ上のＯＳとは、更新実施ＣＰＵに処理を実行させているＯＳである。ここでは、更新実施ＣＰＵのうちいずれか一つのＣＰＵへ新ブートプログラムで起動する際にマスタＯＳとなるように指示する。更新実施ＣＰＵ上のＯＳは、リブート指示を受け付けると、リブートし、リブートが完了するとリブートの完了をハイパーバイザ１２１へ通知する（ステップＳ１５１３）。そして、更新実施ＣＰＵの全ＣＰＵからリブートの完了を受け付けると、共有メモリのアクセス制限を終了し（ステップＳ１５１４）、調停回路内の優先度の情報を通常に戻す（ステップＳ１５１５）。調停回路内の優先度の情報は、アクセス制限により変更されるため、優先度の情報を通常に戻すとは、アクセス制限開始前の優先度の情報に戻すことを意味する。
【００９９】
図１６は、ハイパーバイザ１２１によるメモリアクセス制限の制限処理手順を示すフローチャートである。まず、ハイパーバイザ１２１が、メモリアクセス制限を開始すると、アプリケーションから共有メモリへのアクセスを検出する（ステップＳ１６０１）。つぎに、ハイパーバイザ１２１が、更新対象ＣＰＵからのアクセスか否かを判断する（ステップＳ１６０２）。ここで、更新対象ＣＰＵは、リブート中である。そして、ハイパーバイザ１２１が、更新対象ＣＰＵからのアクセスであると判断した場合（ステップＳ１６０２：Ｙｅｓ）、他のＣＰＵのローカル領域へのアクセスか否かを判断する（ステップＳ１６０３）。
【０１００】
ハイパーバイザ１２１が、他のＣＰＵのローカル領域へのアクセスであると判断した場合（ステップＳ１６０３：Ｙｅｓ）、更新失敗を出力し（ステップＳ１６０４）、復旧する（ステップＳ１６０５）。一方、ステップＳ１６０２において、ハイパーバイザ１２１が、更新対象ＣＰＵからのアクセスでないと判断した場合（ステップＳ１６０２：Ｎｏ）、他のＣＰＵのローカル領域へのアクセスか否かを判断する（ステップＳ１６０６）。ハイパーバイザ１２１が、他のＣＰＵのローカル領域へのアクセスであると判断した場合（ステップ１６０６：Ｙｅｓ）、アクセスエラーを出力する（ステップＳ１６０７）。
【０１０１】
一方、ハイパーバイザ１２１が、他のＣＰＵのローカル領域へのアクセスでないと判断した場合（ステップＳ１６０３：Ｎｏ、またはステップＳ１６０６：Ｎｏ）、調停回路内の更新対象ＣＰＵに関する優先度の情報を低優先に設定する（ステップＳ１６０８）。そして、アクセス指示をアクセス元へ通知する（ステップＳ１６０９）。なお、ハイパーバイザ１２１が、メモリアクセス制限終了指示を受け付けるまで、処理を繰り返す。
【０１０２】
図１７は、マルチコアプロセッサシステム１００によるＯＳの更新手順を示すフローチャート（その３）である。まず、新ＯＳが起動されると、新ＯＳ（マスタ）１２４は、新既プロセスを新ＯＳに割り当てるように制御する（ステップＳ１７０１）。つぎに、旧ＯＳ（マスタ）１２２が、旧ＯＳで既動作のプロセスをタスクテーブルに基づいて特定する（ステップＳ１７０２）。
【０１０３】
そして、旧ＯＳ（マスタ）１２２が、旧ＯＳで既動作のプロセスがあるか否かを判断する（ステップＳ１７０３）。まず、旧ＯＳ（マスタ）１２２が、旧ＯＳで既動作のプロセスがあると判断した場合（ステップＳ１７０３：Ｙｅｓ）、未選択の既動作のプロセスがあるか否かを判断する（ステップＳ１７０４）。旧ＯＳ（マスタ）１２２が、未選択の既動作のプロセスがないと判断した場合（ステップＳ１７０４：Ｎｏ）、ステップＳ１７０２へ戻る。一方、旧ＯＳ（マスタ）１２２が、未選択の既動作のプロセスがあると判断した場合（ステップＳ１７０４：Ｙｅｓ）、未選択の既動作のプロセスから任意のプロセスを選択する（ステップＳ１７０５）。
【０１０４】
そして、旧ＯＳ（マスタ）１２２が、選択したプロセスがシステムファイルにダイナミックリンクまたはオープンしているかを判断する（ステップＳ１７０６）。旧ＯＳ（マスタ）１２２が、システムファイルにダイナミックリンクまたはオープンしていると判断した場合（ステップＳ１７０６：Ｙｅｓ）、ステップＳ１７０４に戻る。一方、旧ＯＳ（マスタ）１２２が、システムファイルにダイナミックリンクおよびオープンしていないと判断した場合（ステップＳ１７０６：Ｎｏ）、選択したプロセスを新ＯＳへマイグレートし（ステップＳ１７０７）、ステップＳ１７０４へ戻る。
【０１０５】
一方、旧ＯＳ（マスタ）１２２が、旧ＯＳで既動作のプロセスがないと判断した場合（ステップＳ１７０３：Ｎｏ）、ハイパーバイザ１２１へ既動作のプロセスがないことを通知する（ステップＳ１７０８）。つづいて、ハイパーバイザ１２１が、パーティションテーブル内の参照領域を新ブートプログラム領域に変換し（ステップＳ１７０９）、変換後の参照領域を指定するリブート指示を旧ＯＳへ通知する（ステップＳ１７１０）。
【０１０６】
そして、旧ＯＳ（マスタ）１２２を含む旧ＯＳが、リブート指示を受け付けると、新ブートプログラムでリブートする（ステップＳ１７１２）。ステップＳ１７１０のつぎに、ハイパーバイザ１２１が、旧ブートプログラムを破棄する（ステップＳ１７１１）。
【０１０７】
以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、旧ブートプログラムでブートしたコアのうちプロセスが割り当てられていないコアから順に新ブートプログラムでリブートさせるリブート指示を通知する。したがって、リブート指示を通知されて受け付けたコアが新ブートプログラムでリブートする。これにより、空いているコアから直ぐにリブートするため、プロセスを停止させず、ＯＳを無停止で更新することができる。
【０１０８】
また、プロセスが割り当てられていないコアが無い場合、割り当てられているプロセスが完了したコアへ新ブートプログラムでリブートさせるリブート指示を通知することにより、動作中のプロセスを停止させることなくＯＳを更新できる。
【０１０９】
また、新ブートプログラムの更新を受け付けてから、新ブートプログラムをダウンロードする新ブートプログラム領域を設定することで、ストレージ内の容量を効率的に使用できる。
【０１１０】
また、リブート指示後にマスターブートレコードのパーティションテーブル内の旧ブートプログラム領域のアドレスを新ブートプログラム領域のアドレスに変換する。これにより、新ブートプログラムでリブートしたＣＰＵの電源が再投入されても、該ＣＰＵが新ブートプログラムでブートすることができる。
【符号の説明】
【０１１１】
１００  マルチコアプロセッサシステム
２０１  設定部
２０２  受付部
２０３  判断部
２０４  変換部
２０５  通知部
２０６  検出部
【図１】
2014029739.tif 000003
【図２】
2014029739.tif 000004
【図３】
2014029739.tif 000005
【図４】
2014029739.tif 000006
【図５】
2014029739.tif 000007
【図６】
2014029739.tif 000008
【図７】
2014029739.tif 000009
【図８】
2014029739.tif 000010
【図９】
2014029739.tif 000011
【図１０】
2014029739.tif 000012
【図１１】
2014029739.tif 000013
【図１２】
2014029739.tif 000014
【図１３】
2014029739.tif 000015
【図１４】
2014029739.tif 000016
【図１５】
2014029739.tif 000017
【図１６】
2014029739.tif 000018
【図１７】
2014029739.tif 000019