(57)【特許請求の範囲】
【請求項１】
第１、第２、第３のバスと、
前記第１と第２のバスとを接続し、前記第２のバス上のバスエラーを検出する第１のバスブリッジと、
前記第２と第３のバスとを接続し、前記第３のバス上のバスエラーを検出する第２のバスブリッジと、
前記第２のバスに接続される第１のデバイスと、
前記第３のバスに接続される第２のデバイスと、
前記バスエラーの検出に応じてバスエラーの発生を通知する割込みコントローラと、
マルチスレッドプロセッサとを備え、
前記マルチスレッドプロセッサは、
複数の仮想ＣＰＵの実行順序を定め、実行する複数の仮想ＣＰＵのデータを保持するスケジュールレジスタと、
前記スケジュールレジスタに設定された順序にしたがって、仮想ＣＰＵを実行する仮想ＣＰＵ実行部とを含み、
複数の仮想ＣＰＵは、それぞれ異なるＯＳを稼働し、複数の仮想ＣＰＵは、他のＯＳを管理する管理ＯＳを稼働する第１の仮想ＣＰＵを含み、
前記仮想ＣＰＵ実行部は、前記第２のバス上のバスエラー発生の通知を受けた場合は、前記第１の仮想ＣＰＵと、前記複数の仮想ＣＰＵのうち、前記第１のデバイス及び前記第２のデバイスを使用しないＯＳを稼働する仮想ＣＰＵとを動作させ、
前記第１の仮想ＣＰＵは、エラーが発生したバスを再初期化する、コンピュータシステム。
【請求項２】
前記仮想ＣＰＵ実行部は、前記第３のバス上のバスエラー発生の通知を受けた場合は、前記第１の仮想ＣＰＵと、前記複数の仮想ＣＰＵのうち、前記第２のデバイスを使用しないＯＳを稼働する仮想ＣＰＵとを動作させる、請求項１記載のコンピュータシステム。
【請求項３】
前記第１の仮想ＣＰＵは、前記第２のバス上のバスエラー発生の通知を受けた場合は、前記スケジュールレジスタに対し、前記第１のデバイスまたは前記第２のデバイスを使用するＯＳを稼働する仮想ＣＰＵの情報を前記第１の仮想ＣＰＵの情報に変更し、前記第３のバス上のバスエラー発生の通知を受けた場合は、前記スケジュールレジスタに対し、前記第２のデバイスを使用するＯＳを稼働する仮想ＣＰＵの情報を前記第１の仮想ＣＰＵの情報に変更する請求項２記載のコンピュータシステム。
【請求項４】
前記第１の仮想ＣＰＵは、前記第２のバス上のバスエラー発生の通知を受けた場合は、前記第２のバスの再初期化後、前記第１のデバイスまたは前記第２のデバイスを使用するＯＳを稼働する仮想ＣＰＵに対して、使用する前記第１のデバイスまたは前記第２のデバイスの再初期化を要求し、前記第３のバス上のバスエラー発生の通知を受けた場合は、前記第３のバスの再初期化後、前記第２のデバイスを使用するＯＳを稼働する仮想ＣＰＵに対して、前記第２のデバイスの再初期化を要求し、さらに、前記スケジュールレジスタへの変更を元に復元する、請求項３記載のコンピュータシステム。
【請求項５】
前記第１の仮想ＣＰＵは、前記第１乃至３のバスと、前記第１と第２のバスブリッジと、前記第１と第２のデバイスと、前記複数の仮想ＣＰＵで稼働されるＯＳとの関係を示す管理テーブルを有し、当該管理テーブルに基づいて稼働させる仮想ＣＰＵを決定する請求項１乃至４のいずれか１項に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムに関し、特に複数の仮想マシンが動作可能なコンピュータシステムに関する。
【背景技術】
【０００２】
制御システムのような高い信頼性・リアルタイム性が求められるコンピュータシステムと、映像音声処理を行う高機能なコンピュータシステムを１つのハードウエアで共存させる仕組みとして、仮想マシンを用いる方法がある。
【０００３】
仮想マシンは、仮想ＣＰＵ（Central Processing Unit)、仮想化された物理メモリ、仮想Ｉ／Ｏデバイスといった仮想部品から構成される。仮想マシンは各仮想部品を、物理部品（物理ＣＰＵ、物理メモリ、物理ＩＯデバイス）を占有／共有などの形態で割り当てて実現する。
【０００４】
この仮想マシンを用いる環境にて、デバイス（以降、ＩＯと記す）故障などによる異常事態が発生した際、そのエラーを検出し更なる被害の拡大を防止するために、「それぞれのＯＳ（Operating System）が利用するＩＯを関連付ける関連付けテーブルと、ＩＯのエラーを検出する手段とを設け、エラーが発生したら関連付けテーブルから対応する仮想マシンを特定し、特定した仮想マシンだけを停止させる」方法が提案されている（例えば、特許文献１を参照）。
【０００５】
また、制御システムのような高いリアルタイム性が求められるコンピュータシステムでは、プロセッサ使用時間を一定の時間ないし命令毎に区切り、複数の処理を切替えながら実行するマルチスレッドプロセッサが提案されている。切替え実行することで、映像音声といったマルチメディア処理を行いつつ、実時間（リアルタイム）処理のための時間を確保すること（時間保証）が実現しやすくなる。また、一定の処理の実行速度を加速するための「マルチスレッドプロセッサのスケジューリング処理において、複数のスケジューリングレジスタを設け、通常動作時と割込み処理時とで動作するスレッドの比率を切り換える」方法が提案されている（例えば、特許文献２を参照）。
【０００６】
また、「ＩＯ故障による異常状態が発生した際にバスブリッジを介して割込みを発生させ、ＯＳやデバイスドライバに対して再初期化の指示を出すと、ＯＳやデバイスドライバ等のソフトウエアは通信制御部の再初期化を実行する 」方法が提案されている（例えば、特許文献３を参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−３２３１４２号公報
【特許文献２】特開２０１０−８６１２９号公報
【特許文献３】特開２００３−３３０８１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献２に示すようなマルチスレッドプロセッサを用いることで、複数の仮想マシン上で動作するＯＳを同時に実行し易くなった。しかしながら、もともと別のハードウエアで動作していることを前提のＯＳを複数同じハードウエアで動作させると、以下に示す問題が生じる。
【０００９】
仮想マシン上のＯＳ（ＯＳ−Ａとする）からの異常アクセスにより該ＩＯ（ＩＯ−Ａ）からエラーが発生した場合、特許文献１のように、ＯＳ−Ａを止めることで、ＩＯ− Ａへのアクセスを行わなくすることが出来る。また、特許文献３のようにエラーをＯＳ−Ａに通知することで、ＩＯエラーを復旧することが出来る。しかしながら、ＩＯエラー発生時に、ＩＯ−Ａが接続するバス（バスｘ）へＩＯ−Ａの障害が波及する場合があり得る。この場合、バスｘに接続された他のＩＯ（ＩＯ−Ｂ）を利用する他のＯＳ（ＯＳ−Ｂとする）はバスｘが障害状態であることを知らないため、ＩＯ −Ｂへアクセスする。その結果ＯＳ−Ｂが異常停止してしまうという問題が生じる。
【００１０】
本発明は、上記のような問題点を解決するためになされたもので、障害波及の防止と復旧が可能なコンピュータシステムを提供することである。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明は、バスエラーの発生を通知する割込みコントローラと、マルチスレッドプロセッサとを備え、マルチスレッドプロセッサは、複数の仮想ＣＰＵの実行順序を定め、実行する複数の仮想ＣＰＵのデータを保持するスケジュールレジスタと、スケジュールレジスタに設定された順序にしたがって、仮想ＣＰＵを実行する仮想ＣＰＵ実行部とを含み、複数の仮想ＣＰＵは、それぞれ異なるＯＳを稼働し、複数の仮想ＣＰＵは、他のＯＳを管理する管理ＯＳを稼働する第１の仮想ＣＰＵを含み、仮想ＣＰＵ実行部は、バスエラー発生の通知を受けたときに、スケジュールレジスタの実行順序によらずに、第１の仮想ＣＰＵのみを動作させ、第１の仮想ＣＰＵは、エラーが発生したバスを再初期化する。
【発明の効果】
【００１２】
本発明によれば、障害波及の防止と復旧が可能となる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施形態のコンピュータシステムのハードウエア構成図である。
【図２】第１の実施形態のコンピュータシステムのソフトウエア構成を説明するための図である。
【図３】第１の実施形態のコンピュータシステムの起動処理の手順を表わすフローチャートである。
【図４】第１の実施形態において、バス１１３においてエラーが発生した際の復旧手順を表わすフローチャートである。
【図５】第２の実施形態のコンピュータシステムのソフトウエア構成を説明するための図である。
【図６】ＩＯ利用ＯＳ管理テーブルの例を表わす図である。
【図７】第２の実施形態において、バス１１３においてエラーが発生した際の復旧手順を表わすフローチャートである。
【図８】第３の実施形態のコンピュータシステムのソフトウエア構成を説明するための図である。
【図９】第３の実施形態のコンピュータシステムの起動処理の手順を表わすフローチャートである。
【図１０】第３の実施形態において、バスエラー割込み発生時のスケジュールを生成する手順を表わすフローチャートである。
【図１１】第３の実施形態において、バス１１３においてエラーが発生した際の復旧手順を表わすフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本発明の実施形態について図面を参照して説明する。
［第１の実施形態］
（ハードウエア構成）
図１は、第１の実施形態のコンピュータシステムのハードウエア構成図である。
【００１５】
図１に示すように、このコンピュータシステムは、マルチスレッドプロセッサ１００と、割込みコントローラ１０１と、主記憶（メモリ）１０２と、バスブリッジ１２０，１２１，１２２と、ＩＯ１３１〜１３５と、バス１１０〜１１３を備える。
【００１６】
マルチスレッドプロセッサ１００は、複数の仮想ＣＰＵを時間的に切り換えて実行する。マルチスレッドプロセッサ１００に関するより詳細な説明は、ソフトウエア構成の説明において行なう。
【００１７】
割込みコントローラ１０１は、ＩＯ１３０〜１３５やバスブリッジ１２０〜１２２、主記憶１０２からの割込み要求を受け取り、マルチスレッドプロセッサ１００へ割込み要求を伝える。この割込みコントローラ１０１は、マルチスレッドプロセッサ１００に含まれていても良い。それぞれの割込み要因に対して、優先度とＶＣＰＵ番号が設定されるものとしてもよい。
【００１８】
主記憶１０２は、ＲＡＭ（Random  Access Memory）で構成される。主記憶１０２は、マルチスレッドプロセッサ１００において動作させるプログラムやデータを格納する。
【００１９】
バス１１０は、マルチスレッドプロセッサ１００、割込みコントローラ１０１、主記憶１０２、バスブリッジ１２０、バスブリッジ１２１を接続するバスである。
【００２０】
バス１１１は、バスブリッジ１２０、バスブリッジ１２２、ＩＯ１３０を接続するバスである。
【００２１】
バス１１２は、バスブリッジ１２１、ＩＯ１３１、ＩＯ１３２を接続するバスである。
バス１１３は、バスブリッジ１２２、ＩＯ１３３〜１３５を接続するバスである。
【００２２】
バスブリッジ１２０は、バス１１０とバス１１１との通信を媒介する。バスブリッジ１２０は、バス１１１のバスエラーを検出して、バス１１０と接続する割込みコントローラ１０１へ通知する機能を有する。
【００２３】
バスブリッジ１２１は、バス１１０とバス１１２との通信を媒介する。バスブリッジ１２１は、バス１１２のバスエラーを検出して、バス１１０と接続する割込みコントローラ１０１へ通知する機能を有する。
【００２４】
バスブリッジ１２２は、バス１１１とバス１１３の間の通信を媒介する。バスブリッジ１２２は、バス１１３のバスエラーを検出して、バス１１０と接続する割込みコントローラ１０１へ通知する機能を有する。
【００２５】
ＩＯ１３０〜１３５は、それぞれディスプレイ、制御ネットワーク、不揮発性メモリ、タッチパネル、ＨＤＤ（Hard Disk Drive）、オーディオ機器などのデバイスである。なお、本実施の形態ではこれらデバイスが接続されている例を示すが、これらデバイスの一部が無くてもよく、さらに、他にもＲＯＭ（Read Only Memory）、ＦＤＤ（Floppy Disk Drive）、ＳＤ（Secure Digital）メモリカード、ＣＦ（Compact Flash（登録商標））カード、通信ボード（有線、無線）といったデバイスのいずれかが接続されていてもよい。
【００２６】
本実施の形態では、故障１４０が、ＩＯ１３４で発生し、故障１４１が、バス１１３で発生したものとして説明する。
【００２７】
（ソフトウエア構成）
図２は、第１の実施形態のコンピュータシステムのソフトウエア構成を説明するための図である。
【００２８】
ＶＣＰＵ２２０〜２２２は、仮想ＣＰＵであって、マルチスレッドプロセッサ１００が一定時間に実行する処理イメージを模式的なＣＰＵとして示したものである。
【００２９】
マルチスレッドプロセッサ１００は、複数のレジスタ群で構成されるスケジュールレジスタＡを有する。
【００３０】
スケジュールレジスタＡは、仮想ＣＰＵを実行する順序を定めた順序テーブルと、実行する仮想ＣＰＵで使用するデータを記憶するレジスタ群とを含む。本実施の形態では、順序テーブルには、ＶＣＰＵ＃０、ＶＣＰＵ＃１、ＶＣＰＵ＃２、ＶＣＰＵ＃２の順に循環的に繰り返し実行するように設定され、ＶＣＰＵ＃０、ＶＣＰＵ＃１、ＶＣＰＵ＃２に対応するレジスタ群が設けられている。本実施の形態では、３つのレジスタ群（ＶＣＰＵ＃０〜＃２）を有するマルチスレッドプロセッサとして説明するが、レジスタ群の個数は２つないしそれ以上存在してもよい。
【００３１】
仮想ＣＰＵ実行部２０１は、スケジュールレジスタを選択するか否かを定めたフラグ２０２を有する。
【００３２】
仮想ＣＰＵ実行部２０１は、フラグ２０２がセットされている場合、スケジュールレジスタ２１０内の順序テーブルを参照して、一定時間または命令ごとに選択するＶＣＰＵを切り換え、選択したＶＣＰＵに対応するレジスタ群を選択することによって、選択したＶＣＰＵを実行する。  
【００３３】
仮想ＣＰＵ実行部２０１は、フラグ２０２がクリアされている場合、ＶＣＰＵ＃０に対応するレジスタ群を選択することによって、ＶＣＰＵ＃０を実行する。
【００３４】
割込みコントローラ１０１は、割込み通知部２５１を備える。
割込み通知部２５１は、各ＩＯ１３０〜１３５やバスブリッジ１２０〜１２２、主記憶１０２から、それらのエラー発生時に割込み要求を受け取り、マルチスレッドプロセッサ１００へ割込み要求を伝える。
【００３５】
ＶＣＰＵ＃０は、他のＯＳを管理する管理ＯＳ２３０を稼働する。ＶＣＰＵ＃０は、管理ＯＳ２３０の下で動作するプログラムを実行することによって、初期化処理部２６１、バス再初期化部２４５、ＩＯ再初期化要求部２４４、割込み通知先設定部２４０として機能する。
【００３６】
初期化処理部２６１は、管理ＯＳに対する処理を行なう。
割込み通知先設定部２４０は、割込み通知部２５１からの割込みに対する設定を行なう。
【００３７】
ＩＯ再初期化要求部２４４は、デバイス再初期化部２４１、２４２に対して、関連するデバイスの再初期化を要求する。
ＶＣＰＵ＃１は、ＲＴ(Real time)ＯＳ２３１を稼働する。ＶＣＰＵ＃１は、ＲＴＯＳ２３１の下で動作するプログラムを実行することによって、複数の制御アプリケーション２５５、デバイス再初期化部２４１として機能する。
【００３８】
制御アプリケーション２５５は、制御機能を実行する。
デバイス再初期化部２４１は、ＶＣＰＵ＃１が利用するデバイスを再初期化するための処理を行なう。
【００３９】
ＶＣＰＵ＃２は、映像音声処理ＯＳ２３２を稼働する。ＶＣＰＵ＃２は、映像音声処理ＯＳ２３２の下で動作するプログラムを実行することによって、複数の映像音声アプリケーション２４３、デバイス再初期化部２４２として機能する。
【００４０】
映像音声アプリケーション２４３は、映像音声処理を実行する。
デバイス再初期化部２４２は、ＶＣＰＵ＃２が利用するＩＯを再初期化するための処理が行なわれる。
【００４１】
（動作）
次に、第１の実施の形態のコンピュータシステムの動作について説明する。
【００４２】
図３は、第１の実施形態のコンピュータシステムの起動処理の手順を表わすフローチャートである。ＶＣＰＵ＃０によって、コンピュータシステムが起動される。
【００４３】
まず、初期化処理部２６１が、管理ＯＳ２３０の通常の初期化処理を行う（Ｓ３００）。
【００４４】
次に、割込み通知先設定部２４０が、バス１１１〜１１３からのエラー通知（バスブリッジ１２０〜１２２から通知される）が管理ＯＳ２３０に通知されるように設定する（Ｓ３０１）。
【００４５】
次に、割込み通知先設定部２４０が、バスエラーによる割込みによって、フラグ２０２が無効になるように設定する（Ｓ３０２）。
【００４６】
その後、管理ＯＳは定常動作へ移行する。
図４は、第１の実施形態において、バス１１３においてエラーが発生した際の復旧手順を表わすフローチャートである。
【００４７】
バス１１３においてエラーが発生すると、バスブリッジ１２２が、割込みコントローラ１０１にエラーの発生を通知する。割込みコントローラ１０１は、マルチスレッドプロセッサ１００へ割込みを通知する（Ｓ４００）。
【００４８】
次に、割込みコントローラ１０１の割込み通知部２５１は、フラグ２０２を無効に設定する。これによって、仮想ＣＰＵ実行部２０１は、スケジュールレジスタＡを利用したＶＣＰＵ＃０〜＃２の順次選択実行からＶＣＰＵ＃０のみの実行に切り替える（Ｓ４０１）。Ｓ４０１によって、ＶＣＰＵ＃１とＶＣＰＵ＃２が動作しなくなる。
【００４９】
次に、バス再初期化部２４５が、バス１１３を再初期化する（Ｓ４０２）。Ｓ４０２により、バス１１３で発生したエラーは取り除かれる。
【００５０】
次に、ＩＯ再初期化要求部２４４が、ＲＴＯＳ２３１および映像音声処理ＯＳ２３２に対して、デバイス再初期化を要求する（Ｓ４０３）。
【００５１】
次に、仮想ＣＰＵ実行部２０１は、フラグ２０２をセットし、スケジュールレジスタＡを利用したＶＣＰＵ＃０〜ＶＣＰＵ＃２の順次選択実行へ切り替える（Ｓ４０４）。Ｓ４０４により、ＶＣＰＵ＃１とＶＣＰＵ＃２の動作が再開する。
【００５２】
次に、デバイス再初期化部２４１が、ＲＴＯ２３１で利用するデバイスを再初期化する（Ｓ４０５）。デバイス再初期化部２４２が、映像音声処理ＯＳ２３２で利用するデバイスを再初期化する（Ｓ４０６）。これによって、バスおよびそのバスに接続するデバイスを正常状態へ復旧する。その後、各ＯＳは定常動作へ戻る。
（効果）
以上のように、本実施の形態によれば、バスを再初期化する際に、全てのＯＳを停止させるので、バスエラーを安全に取り除くことができる。さらにに、各ＯＳへＩＯ再初期化を要求することによって、各ＯＳにおいてＩＯへの要求手順が途中（ＤＭＡ完了待ちなど）であっても、再度ＩＯへの要求手順を踏むことができ、安全に再開できる。
【００５３】
［第２の実施形態］
（ハードウエア構成）
本実施の形態のコンピュータシステムのハードウエア構成は、第１の実施の形態のハードウエア構成と同じであるため、説明、図示を省略する。ただし、本実施の形態のコンピュータシステムのハードウエア構成は、ＲＴＯＳが利用するＩＯ（デバイス）が、残りのＩＯ（デバイス）と別のバスに接続してあるものとして説明する。
【００５４】
（ソフトウエア構成）
図５は、第２の実施形態のコンピュータシステムのソフトウエア構成を説明するための図である。
【００５５】
第２の実施形態のソフトウエア構成が、第１の実施形態のソフトウエア構成と相違する点は以下である。
【００５６】
スケジュール変更部５４７は、ＩＯ利用ＯＳ管理テーブル６００に基づいて、バスエラー発生時に現状のスケジュールレジスタから、エラーを発生したバスに接続するデバイス（ＩＯ）を利用するＯＳが動作するＶＣＰＵ番号をＶＣＰＵ＃０に変更する。
【００５７】
図６は、ＩＯ利用ＯＳ管理テーブルの例を表わす図である。
各ＩＯ（列６０１）が接続されている接続バス（列６０２）と、該ＩＯを利用するＯＳ（列６０３）の関連が示されている。本実施の形態では、接続の有無を空欄と○、利用の有無を空欄と●で図示しているが、数字（例えば、０と１）で管理しても良い。
【００５８】
たとえば、このＩＯ利用管理テーブルによれば、ＩＯ１３０は、バス１１１と接続し、映像音声処理ＯＳを利用することが示されている。また、ＩＯ１３１は、バス１１２と接続し、ＲＴＯＳを利用することが示されている。
（動作）
次に、第２の実施形態のコンピュータシステムの動作を説明する。
【００５９】
第２の実施形態のコンピュータシステムの起動処理の手順は、図３で説明した第１実施の形態と同じであるため、説明および図示を繰り返さない。
【００６０】
図７は、第２の実施形態において、バス１１３においてエラーが発生した際の復旧手順を表わすフローチャートである。
【００６１】
バス１１３においてエラーが発生すると、バスブリッジ１２２が、割込みコントローラ１０１にエラーの発生を通知する。割込みコントローラ１０１は、マルチスレッドプロセッサ１００へ割込みを通知する（Ｓ７００）。
【００６２】
次に、割込みコントローラ１０１の割込み通知部２５１は、フラグ２０２を無効に設定する。これによって、仮想ＣＰＵ実行部２０１は、スケジュールレジスタＡを利用したＶＣＰＵ＃０〜ＶＣＰＵ＃２の順次選択実行からＶＣＰＵ＃０のみの実行に切り替える（Ｓ７０１）。Ｓ７０１によって、ＶＣＰＵ＃１とＶＣＰＵ＃２が動作しなくなる。
【００６３】
次に、スケジュール変更部５４７は、ＩＯ利用ＯＳ管理テーブル６００を参照して、バス１１３に接続したＩＯ（本例ではＩＯ１３３〜１３５）を使用するすべてのＯＳ（本例では映像音声処理ＯＳ２３２のみ）を抽出する。スケジュール変更部５４７は、スケジュールレジスタＡにおいて、抽出したＯＳで動作する仮想ＣＰＵ（ＶＣＰＵ＃０〜ＶＣＰＵ＃２のうち１つまたは複数）（本例では、映像音声処理ＯＳ５３２を利用するＶＣＰＵ＃２）をＶＣＰＵ＃０に書き換える（Ｓ７０２）。
【００６４】
次に、スケジュール変更部５４７は、フラグ２０２をセットし、変更したスケジュールレジスタＡを利用したＶＣＰＵの順次選択実行へ切り替える（Ｓ７０３）。Ｓ７０３により、ＶＣＰＵ＃１の動作が再開する。
【００６５】
次に、バス再初期化部２４５が、バス１１３を再初期化する（Ｓ７０４）。Ｓ７０４により、バス１１３で発生したエラーは取り除かれる。
【００６６】
次に、ＩＯ再初期化要求部２４４が、映像音声処理ＯＳ２３２に対し、デバイス再初期化を要求する（Ｓ７０５）。
【００６７】
次に、スケジュール変更部５４７は、Ｓ７０２においてスケジュールレジスタ５１０を変更した箇所（本例では、ＶＣＰＵ＃２をＶＣＰＵ＃０に変更）を元の状態に戻す（本例では、変更したＶＣＰＵ＃０をＶＣＰＵ＃２に戻す）。Ｓ７０６により、ＶＣＰＵ＃１の動作が再開する。
【００６８】
次に、デバイス再初期化部２４２が、映像音声処理ＯＳ２３２で利用するデバイスを再初期化する。これによって、バスおよびそのバスに接続するデバイスを正常状態へ復旧する。その後、映像音声処理ＯＳ２３２は定常動作へ戻る。
（効果）
以上のように、本実施の形態によれば、バスを再初期化する際に、該バスに関連のあるＯＳを全て停止させているため、安全にバスエラーを取り除くことができる。加えて、該バスに関連のないＯＳは動作を継続できるため、リアルタイム処理を第１の実施形態よりも早く再開することが出来る。さらに、該バスに関連のあるＯＳへＩＯ再初期化を要求することで、該バスに関連のあるＯＳにおいてＩＯへの要求手順が途中（ＤＭＡ完了待ちなど）であっても、再度ＩＯへの要求手順を踏むことができ、安全に再開できる。
【００６９】
［第３の実施形態］
（ハードウエア構成）
本実施の形態のコンピュータシステムのハードウエア構成は、第１の実施の形態のハードウエア構成と同じであるため、説明、図示を省略する。ただし、本実施の形態のコンピュータシステムのハードウエア構成は、ＲＴＯＳが利用するＩＯ（デバイス）が、残りのＩＯ（デバイス）と別のバスに接続してあるものとして説明する。
【００７０】
（ソフトウエア構成）
図８は、第３の実施形態のコンピュータシステムのソフトウエア構成を説明するための図である。
【００７１】
マルチスレッドプロセッサ１２００は、複数のスケジュールレジスタＡ，Ｂ，Ｃを含む。
【００７２】
スケジュールレジスタＡ，Ｂ，Ｃは、仮想ＣＰＵを実行する順序を定めた順序テーブルと、実行する仮想ＣＰＵで使用するデータを記憶するレジスタ群とを含む。
【００７３】
スケジュールレジスタＡの順序テーブルには、ＶＣＰＵ＃０、ＶＣＰＵ＃１、ＶＣＰＵ＃２、ＶＣＰＵ＃２の順に循環的に繰り返し実行するように設定され、ＶＣＰＵ＃０、ＶＣＰＵ＃１、ＶＣＰＵ＃２に対応するレジスタ群が設けられている。
【００７４】
スケジュールレジスタＢの順序テーブルには、ＶＣＰＵ＃０、ＶＣＰＵ＃１、ＶＣＰＵ＃０、ＶＣＰＵ＃０の順に循環的に繰り返し実行するように設定され、ＶＣＰＵ＃０、ＶＣＰＵ＃１に対応するレジスタ群が設けられている。
【００７５】
スケジュールレジスタＣの順序テーブルには、ＶＣＰＵ＃０、ＶＣＰＵ＃０、ＶＣＰＵ＃２、ＶＣＰＵ＃２の順に循環的に繰り返し実行するように設定され、ＶＣＰＵ＃０、ＶＣＰＵ＃２に対応するレジスタ群が設けられている。
【００７６】
スケジュール生成部１２４８は、ＩＯ利用ＯＳ管理テーブル６００に基づいて、バスエラー発生時に関連のあるＯＳをスケジュール対象から外したスケジュールを生成する（本例では、スケジュールレジスタＢおよびスケジュールレジスタＣを設定する）。
【００７７】
仮想ＣＰＵ実行部１２０１は、割込みコントローラ１０１からの割込み要求やＯＳ（ソフトウエア）からの要求に応じて、選択するスケジュールレジスタを切替える。
（動作）
次に、第３の実施の形態のコンピュータシステムの動作について説明する。
【００７８】
図９は、第３の実施形態のコンピュータシステムの起動処理の手順を表わすフローチャートである。ＶＣＰＵ＃０によって、コンピュータシステムが起動される。
【００７９】
まず、初期化処理部２６１が、管理ＯＳ２３０の通常の初期化処理を行う（Ｓ１４００）。
【００８０】
次に、スケジュール生成部１２４８は、各バスエラー割込み発生時に使用されるスケジュールレジスタを設定する（Ｓ１４０１）。
【００８１】
次に、割込み通知先設定部２４０が、バス１１１〜１１３からのエラー通知（バスブリッジ１２０〜１２２から通知される）が管理ＯＳ２３０に通知されるように設定する（Ｓ１４０２）。
【００８２】
その後、管理ＯＳは定常動作へ移行する。
図１０は、第３の実施形態において、バスエラー割込み発生時のスケジュールを生成する手順を表わすフローチャートである。以下の説明は１例であり、スケジュールの生成アルゴリズムは範囲を逸脱しない範囲で異なっていても実現できる。
【００８３】
Ｓ１５０１〜Ｓ１５０２のステップをバスリストのバスの数だけ繰り返される（Ｓ１５００）。
【００８４】
まず、スケジュール生成部１２４８は、ＩＯ利用ＯＳ管理テーブル６００を参照し、選択したバスに接続されたＩＯ（本例では、バス１１１の選択時には、ＩＯ１３０とバスブリッジ１２２）を特定し、これらのＩＯを使用するＯＳ（本例では、映像音声処理ＯＳ１２３２のみ）を特定する（Ｓ１５０１）。
【００８５】
次に、スケジュール生成部１２４８は、標準スケジュールレジスタであるスケジュールレジスタＡにおいて、特定したＯＳが動作するＶＣＰＵ＃Ｘ（Ｘ＝０〜２のいずれか１つまたは複数）をＶＣＰＵ＃０に変更したスケジュールを生成（本例では、ＶＣＰＵ＃２をＶＣＰＵ＃０に変更）し、仮想ＣＰＵ実行スケジュール１５１０に追加する。
【００８６】
Ｓ１５００が終了すると、仮想ＣＰＵ実行スケジュール１５１０には、バスリストのバスの数だけスケジュールが存在する。
【００８７】
次に、スケジュール生成部１２４８は、仮想ＣＰＵ実行スケジュール１５１０にあるスケジュールから重複するスケジュールを破棄する（Ｓ１５０３）。
【００８８】
次に、スケジュール生成部１２４８は、仮想ＣＰＵ実行スケジュール１５１０のスケジュールをスケジュールレジスタに登録し（本例では、スケジュールレジスタＢ，Ｃに登録）、バスエラー発生時に該当するスケジュールレジスタが選ばれるように、仮想ＣＰＵ実行部２０１に設定する（Ｓ１５０４）。
【００８９】
図１１は、第３の実施形態において、バス１１３においてエラーが発生した際の復旧手順を表わすフローチャートである。
【００９０】
バス１１３においてエラーが発生すると、バスブリッジ１２２が、割込みコントローラ１０１にエラーの発生を通知する。割込みコントローラ１０１は、マルチスレッドプロセッサ１２００へ割込みを通知する（Ｓ１６００）。
【００９１】
仮想ＣＰＵ実行部１２０１は、エラーが発生したバスに対応するスケジュールレジスタを選択（本例ではスケジュールレジスタＢ）し、実行スケジュールを切替える（Ｓ１６０１）。Ｓ１６０１によって、映像音声処理ＯＳ２３２は動作しなくなる。
【００９２】
次に、バス再初期化部２４５が、バス１１３を再初期化する（Ｓ１６０２）。Ｓ１６０２により、バス１１３で発生したエラーは取り除かれる。
【００９３】
次に、ＩＯ再初期化要求部２４４が、映像音声処理ＯＳ２３２に対し、デバイス再初期化を要求する（Ｓ１６０３）。
【００９４】
次に、仮想ＣＰＵ実行部２０１は、使用するスケジュールレジスタを標準スケジュールレジスタに変更（スケジュールレジスタＡに変更）し、実行スケジュールを切替える（Ｓ１６０４）。Ｓ１６０４により、映像音声処理ＯＳ１２３２は動作を再開する。
【００９５】
次に、デバイス再初期化部２４２は、映像音声処理ＯＳ２３２の使用するデバイスを再初期化（Ｓ１６０５）し、バスおよびそのバスに接続するデバイスを正常状態へ復旧する。その後、映像音声処理ＯＳ２３２は定常動作へ戻る。
（効果）
以上のように、本実施の形態によれば、バスを再初期化する際に、該バスに関連のあるＯＳを全て停止させているため、安全にバスエラーを取り除くことができる。更に、該バスに関連のあるＯＳへＩＯ再初期化を要求することで、該バスに関連のあるＯＳにおいてＩＯへの要求手順が途中（ＤＭＡ完了待ちなど）であっても、再度ＩＯへの要求手順を踏むことができ、安全に再開できる。加えて、該バスに関連のないＯＳは動作を継続するため、リアルタイム処理を止めずに復旧処理を行うことが出来る。
【００９６】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００９７】
１００，１２００  マルチスレッドプロセッサ、１０１  割込みコントローラ、１０２  主記憶、１１０〜１１３  バス、１２０〜１２２  バスブリッジ、１３０〜１３５  ２０１，１２０１  仮想ＣＰＵ実行部、２０２  フラグ、ＩＯ、２３０  管理ＯＳ、２３１  ＲＴＯＳ、２３２  映像音声処理ＯＳ、２４０  割込み通知先設定部、２４１，２４２  デバイス再初期化部、２４３  映像音声アプリケーション、２４４  ＩＯ再初期化要求部、２４５  バス再初期化部、２５１  割込み通知部、２５５  制御アプリケーション、２６１  初期化処理部、５４７  スケジュール変更部、６００  ＩＯ利用ＯＳ管理テーブル、１２４８  スケジュール生成部、１５１０  仮想ＣＰＵ実行スケジュール。
【図１】
0005933356.tif 000002
【図２】
0005933356.tif 000003
【図３】
0005933356.tif 000004
【図４】
0005933356.tif 000005
【図５】
0005933356.tif 000006
【図６】
0005933356.tif 000007
【図７】
0005933356.tif 000008
【図８】
0005933356.tif 000009
【図９】
0005933356.tif 000010
【図１０】
0005933356.tif 000011
【図１１】
0005933356.tif 000012