(57)【要約】【課題】専用回路を設けること無しに、ＩＯデバイスの接続数を多数にするＩＯ空間の拡張手法を有したコンピュータシステムを提供する。【解決手段】コンピュータシステムを、ＩＯデバイス群を個別に管理するＩＯリソース管理テーブルを保持すると共に、ＩＯリソース管理テーブルで管理される各ＩＯデバイスに割り振ったＩＯ空間情報をＳＭＩに応じて切り替える割り込みハンドラを保持するＢＩＯＳと、ＯＳ‐ＩＯデバイス間にアクセスが生じて仮想ＩＯ空間にアクセスされる毎にＳＭＩを生成するチップセットを含み、ＳＭＩに応じて割り込みハンドラを読み出して、ＣＰＵ上に確保される所定ＩＯ空間を介して、各ＩＯデバイスに割り振られたＩＯ空間情報をＩＯリソース管理テーブルを参照して切り替えることで、ＯＳ‐ＩＯデバイス間のアクセスを可能に構成されたコンピュータハードウェアと、を用いて構成する。【選択図】図１
2019114197.tif 000002
【特許請求の範囲】
【請求項１】
物理的にＩＯインタフェースに接続されているＩＯデバイス群を個別に管理するＩＯリソース管理テーブルを保持すると共に、前記ＩＯリソース管理テーブルで管理される各ＩＯデバイスに割り振ったＩＯ空間情報をシステムマネージメント割り込みに応じて切り替える割り込みハンドラを保持するＢＩＯＳと、
ＯＳ‐ＩＯデバイス間にアクセスが生じて仮想ＩＯ空間にアクセスされる毎に前記システムマネージメント割り込みを生成するチップセットを含み、前記システムマネージメント割り込みに応じて前記割り込みハンドラを読み出して、ＣＰＵ上に確保される所定ＩＯ空間を介して、各ＩＯデバイスに割り振られたＩＯ空間情報を前記ＩＯリソース管理テーブルを参照して切り替えることで、前記ＩＯインタフェースを介してＯＳ‐ＩＯデバイス間のアクセスを可能に構成されたコンピュータハードウェアと、
を含むことを特徴とするコンピュータシステム。
【請求項２】
前記ＩＯリソース管理テーブルは、ＩＯデバイス毎に、前記所定ＩＯ空間の使用ポートを定めた仮想ＩＯポート情報と、前記ＩＯ空間情報を記録したデバイスＩＯ情報と、を含み成り、
ＩＯデバイス毎の前記仮想ＩＯポート情報には、ＣＰＵ内の所定ＩＯ空間の使用ポートを定めた仮想インデックスポートと仮想データポートが記録され、
ＩＯデバイス毎の前記ＩＯ空間情報には、ＩＯベースアドレスとして機能する仮想ＩＯベースアドレスと、ＩＯサイズとして機能する仮想ＩＯサイズとが記録される、
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記割り込みハンドラは、前記所定ＩＯ空間内でＩＯ空間情報を切り替える際に、ＩＯデバイスの仮想ＩＯポート情報を引数に前記ＩＯリソース管理テーブルから該当ＩＯデバイスのＩＯ空間情報を読み込んで、該当ＩＯデバイスに割り振られたＩＯ空間の値を前記所定ＩＯ空間に設置することを特徴とする請求項１又は２に記載のコンピュータシステム。
【請求項４】
前記ＩＯリソース管理テーブルには、ＩＯデバイス毎にテーブルナンバーが割り振られ、
前記割り込みハンドラは、前記所定ＩＯ空間内でＩＯ空間情報を切り替える際に、ＩＯデバイスのテーブルナンバーを引数に前記ＩＯリソース管理テーブルから該当ＩＯデバイスのＩＯ空間情報を読み込んで、該当ＩＯデバイスに割り振られたＩＯ空間の値を前記所定ＩＯ空間に設置する
ことを特徴とする請求項１又は２に記載のコンピュータシステム。
【請求項５】
ＢＩＯＳは、物理的にＩＯインタフェースに接続されているＩＯデバイス群を個別に管理するＩＯリソース管理テーブルを保持すると共に、前記ＩＯリソース管理テーブルで管理される各ＩＯデバイスに割り振ったＩＯ空間情報をシステムマネージメント割り込みに応じて切り替える割り込みハンドラを保持し、
コンピュータハードウェアは、チップセットが、ＯＳ‐ＩＯデバイス間にアクセスが生じて仮想ＩＯ空間にアクセスされる毎に前記システムマネージメント割り込みを生成させ、
前記システムマネージメント割り込みに応じて、ＣＰＵが前記ＢＩＯＳに格納された割り込みハンドラを読み込んで、ＣＰＵ内に確保された所定ＩＯ空間を介して、各ＩＯデバイスに割り振られたＩＯ空間情報を前記ＩＯリソース管理テーブルを参照して切り替え、
前記ＩＯインタフェースを介して、切替えられたＩＯ空間情報に基づいて、ＯＳ‐ＩＯデバイス間のアクセスを成立させる
ことを特徴とするＩＯデバイスアクセス方法。
【請求項６】
前記ＩＯリソース管理テーブルは、ＩＯデバイス毎に、前記所定ＩＯ空間の使用ポートを定めた仮想ＩＯポート情報と、前記ＩＯ空間情報を記録したデバイスＩＯ情報と、を含み成り、
ＩＯデバイス毎の前記仮想ＩＯポート情報には、ＣＰＵ内の所定ＩＯ空間の使用ポートを定めた仮想インデックスポートと仮想データポートが記録され、
ＩＯデバイス毎の前記ＩＯ空間情報には、ＩＯベースアドレスとして機能する仮想ＩＯベースアドレスと、ＩＯサイズとして機能する仮想ＩＯサイズとが記録される、
ことを特徴とする請求項５に記載のＩＯデバイスアクセス方法。
【請求項７】
前記割り込みハンドラは、前記所定ＩＯ空間内でＩＯ空間情報を切り替える際に、ＩＯデバイスの仮想ＩＯポート情報を引数に前記ＩＯリソース管理テーブルから該当ＩＯデバイスのＩＯ空間情報を読み込んで、該当ＩＯデバイスに割り振られたＩＯ空間の値を前記所定ＩＯ空間に設置することを特徴とする請求項５又は６に記載のＩＯデバイスアクセス方法。
【請求項８】
前記ＩＯリソース管理テーブルには、ＩＯデバイス毎にテーブルナンバーが割り振られ、
前記割り込みハンドラは、前記所定ＩＯ空間内でＩＯ空間情報を切り替える際に、ＩＯデバイスのテーブルナンバーを引数に前記ＩＯリソース管理テーブルから該当ＩＯデバイスのＩＯ空間情報を読み込んで、該当ＩＯデバイスに割り振られたＩＯ空間の値を前記所定ＩＯ空間に設置する
ことを特徴とする請求項５又は６に記載のＩＯデバイスアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムに関し、特に、多数のＩＯデバイス（Input/Output Devices）を接続可能とした管理手法に関する。
【背景技術】
【０００２】
コンピュータシステムの一アーキテクチャであるＩＡ（Intel Architecture）では、複数のＩＯデバイスを動作可能に接続する際に、各ＩＯデバイスにＩＯ空間を割り当てている。
【０００３】
ＩＡアーキテクチャのＩＯ空間には６４キロバイトの容量制限がある。このため、ＩＯ空間を消費するデバイスを多数実装しようとした際に、ＩＯ空間が枯渇した場合、一部のＩＯデバイスにＩＯ空間を割り当てることができなくなる。結果、ＩＯ空間を割り当てられなかったＩＯデバイスを使用することができない事象が発生する。
【０００４】
この問題に関して、ＩＯ空間を拡張する技術を用いて、動作可能に接続するＩＯデバイス数を増やす試みが行われている。例えば特許文献１には、専用回路を用いてＩＯ空間をメモリマップドＩＯ空間に変換する技術が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−２００３９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＩＡの標準アーキテクチャでは、ＢＩＯＳ（Basic Input/Output System）でＩＯ空間を個別のＩＯデバイスに割り当てる際、最大６４キロバイトのＩＯ空間を用いて各ＩＯデバイスを動作可能に接続している。また、ＩＯ空間が６４キロバイトを超える台数のＩＯデバイスが接続されていた場合、幾つかのＩＯデバイスの接続はＩＯ空間の不足によって動作不能な状態となる。
【０００７】
ＩＯデバイスの接続数を多数にする一つの対応策である、特許文献１に示されたＩＯ空間の拡張手法では専用回路が必要になる。
【０００８】
本発明は、上記課題に鑑みて成されたものであり、専用回路を設けること無しに、ＩＯデバイスの接続数を多数にするＩＯ空間の拡張手法を有したコンピュータシステムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一実施形態に係るコンピュータシステムは、物理的にＩＯインタフェースに接続されているＩＯデバイス群を個別に管理するＩＯリソース管理テーブルを保持すると共に、前記ＩＯリソース管理テーブルで管理される各ＩＯデバイスに割り振ったＩＯ空間情報をシステムマネージメント割り込み（System Management Interrupts：ＳＭＩ）に応じて切り替える割り込みハンドラを保持するＢＩＯＳと、ＯＳ（Operating System）‐ＩＯデバイス間にアクセスが生じて仮想ＩＯ空間にアクセスされる毎に前記システムマネージメント割り込みを生成するチップセットを含み、前記システムマネージメント割り込みに応じて前記割り込みハンドラを読み出して、ＣＰＵ（Central Processing Unit）上に確保される所定ＩＯ空間を介して、各ＩＯデバイスに割り振られたＩＯ空間情報を前記ＩＯリソース管理テーブルを参照して切り替えることで、前記ＩＯインタフェースを介してＯＳ‐ＩＯデバイス間のアクセスを可能に構成されたコンピュータハードウェアと、を含むことを特徴とする。
【００１０】
本発明の一実施形態に係るコンピュータシステムによるＩＯデバイスアクセス方法は、ＢＩＯＳは、物理的にＩＯインタフェースに接続されているＩＯデバイス群を個別に管理するＩＯリソース管理テーブルを保持すると共に、前記ＩＯリソース管理テーブルで管理される各ＩＯデバイスに割り振ったＩＯ空間情報をシステムマネージメント割り込みに応じて切り替える割り込みハンドラを保持し、コンピュータハードウェアは、チップセットが、ＯＳ‐ＩＯデバイス間にアクセスが生じて仮想ＩＯ空間にアクセスされる毎にシステムマネージメント割り込みを生成させ、前記システムマネージメント割り込みに応じて、ＣＰＵが前記ＢＩＯＳに格納された割り込みハンドラを読み込んで、ＣＰＵ内に確保された所定ＩＯ空間を介して、各ＩＯデバイスに割り振られたＩＯ空間情報を前記ＩＯリソース管理テーブルを参照して切り替え、前記ＩＯインタフェースを介して、切替えられたＩＯ空間情報に基づいて、ＯＳ‐ＩＯデバイス間のアクセスを成立させることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、専用回路を設けること無しに、ＩＯデバイスの接続数を多数にするＩＯ空間の拡張手法を有したコンピュータシステムを提供することができる。
【図面の簡単な説明】
【００１２】
【図１】実施形態のコンピュータシステム１の構成を示すブロック図である。
【図２】コンピュータシステム１で使用するＩＯリソース管理テーブルを可視化して示す説明図である。
【図３】コンピュータシステム１のＩＯデバイスアクセス方法を示すフローチャートである。
【図４】実施形態のコンピュータシステム１の別の構成を示すブロック図である。
【図５】コンピュータシステム１の初期化処理例を示すフローチャートである。
【図６】コンピュータシステム１のＩＯ空間仮想化処理例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
本発明の実施形態を図面に基づいて説明する。
【００１４】
［実施形態］ 
図１は、実施形態のコンピュータシステム１の構成を示すブロック図である。
【００１５】
コンピュータシステム１は、ＩＡを採用したコンピュータシステムである。このコンピュータシステム１は、物理的構成要素として、コンピュータハードウェア１０とＢＩＯＳ２０（ＢＩＯＳＲＯＭ）を含む。コンピュータハードウェア１０は、ＩＡを採用しているＣＰＵ、メモリ、チップセット、周辺回路を含む。また、コンピュータハードウェア１０には、物理的にＩＯデバイス群４０を接続するためのＩＯインタフェース３０が含まれている。コンピュータハードウェア１０（ＣＰＵ）上で動作するソフトウェアには、ＯＳと各ＩＯデバイスのドライバが含まれる。
【００１６】
また、コンピュータハードウェア１０（チップセット）は、ＯＳ（デバイスドライバ）から仮想ＩＯ空間へのアクセスに応じてシステムマネージメント割り込み（System Management Interrupts：ＳＭＩ）を生成するように作成されている。この機能を有することで、ＢＩＯＳは、ＯＳ‐ＩＯデバイス間のアクセス毎に、ＣＰＵが生成されたシステムマネージメント割り込みを受け付け、ＩＯシステムマネージメント割り込みモードで後述するＩＯ空間を切り替える処理を実行する。
【００１７】
ＩＯデバイス群４０は、一般的なＩＯデバイスであり、少なくとも１台以上接続され、必要に応じ多数が接続される。
【００１８】
ＢＩＯＳ２０は、ＩＯリソース管理テーブル２１を保持して管理する。また、ＢＩＯＳ２０は、割り込みハンドラ２２を保持する。
【００１９】
ＩＯリソース管理テーブル２１には、物理的にＩＯインタフェース３０に接続されているＩＯデバイス群４０を個別に管理するための、各ＩＯデバイスに割り振ったＩＯ空間情報が記録される。
【００２０】
図２は、ＩＯリソース管理テーブル２１のデータ構造を可視化した説明図である。このＩＯリソース管理テーブル２１は、ＩＯデバイス毎（図中のデバイスＡ，デバイスＢ毎）に、所定ＩＯ空間の使用ポートを定めた仮想ＩＯポート情報と、ＩＯ空間情報を記録したデバイスＩＯ情報と、を含む。この仮想ＩＯポート情報は、ＣＰＵ内の所定ＩＯ空間の各ＩＯデバイスの使用ポートを定める仮想ＩＯインデックスポート情報と仮想ＩＯデータポート情報を含む。また、ＩＯデバイス毎のＩＯ空間情報は、ＩＯベースアドレスとして機能する仮想ＩＯベースアドレスと、ＩＯサイズとして機能する仮想ＩＯサイズとを含む。この仮想ＩＯベースアドレスと仮想ＩＯサイズは、ＩＯ空間切り替え処理で各ＩＯデバイスに対して一時的に再割り当てする際のＩＯベースアドレスとＩＯデバイスのＩＯサイズを含む。また、ＩＯリソース管理テーブル２１は、図示したようにＩＯデバイス毎にコンフィグレーションアドレス情報が設けられていることが望ましい。このデバイスコンフィグレーションアドレス情報は、各ＩＯデバイスに対してＩＯポートアドレス設定を行う際に使用するアドレスを含む。同様に、ＩＯリソース管理テーブル２１には、ＩＯデバイス毎にテーブルナンバーを割り振ることとしてもよい。
【００２１】
割り込みハンドラ２２は、各ＩＯデバイスとＯＳとの間のアクセスに応じて通知されるシステムマネージメント割り込みに応じてＣＰＵに読み込まれ、ＩＯリソース管理テーブル２１で管理される各ＩＯデバイスに割り振ったＩＯ空間情報をアクセス先のＩＯデバイスに応じて切り替える。
【００２２】
割り込みハンドラ２２は、所定ＩＯ空間内でＩＯ空間情報を書き換える際に、ＩＯデバイスの仮想ＩＯポート情報を引数にＩＯリソース管理テーブルから該当ＩＯデバイスのＩＯ空間情報を読み込んで、該当ＩＯデバイスに割り振られたＩＯ空間の値を所定ＩＯ空間に設置する。
【００２３】
また、割り込みハンドラ２２は、所定ＩＯ空間内でＩＯ空間情報を書き換える際に、ＩＯデバイスのテーブルナンバーを引数にＩＯリソース管理テーブル２１から該当ＩＯデバイスのＩＯ空間情報を読み込んで、該当ＩＯデバイスに割り振られたＩＯ空間の値を所定ＩＯ空間に設置するようにしてもよい。
【００２４】
上記構成を有するＢＩＯＳ２０を、ＩＡを採用したコンピュータシステム１に組み込むことで、専用回路を設けること無しに、ＩＯデバイスの接続数を多数にするＩＯ空間の拡張手法を本発明は提供する。
【００２５】
コンピュータシステム１の動作は概して図３に示すフローチャートのように動作する。
【００２６】
コンピュータシステム１で提供されるＩＯデバイスアクセス方法は、上記説明したシステム構成を具備して、予め物理的に接続された多数のＩＯデバイスに関するＩＯ空間情報をＩＯリソース管理テーブル２１に記録する工程を含む（Ｆ１０１）。
【００２７】
次に、ＯＳ‐ＩＯデバイス間のアクセスが生じた際にコンピュータハードウェア１０（チップセット）は、対象となるＩＯデバイスのＩＯポートにアクセスして値（デバイスＩＯ情報）を取得する前に、対象となるＩＯデバイスのＩＯポートへのアクセスが生じたことを示したシステムマネージメント割り込みを都度生成する（Ｆ１０２）。
【００２８】
次に、コンピュータハードウェア１０（ＣＰＵ）は、チップセットによって生成されたシステムマネージメント割り込みを検出し、ＢＩＯＳ２０から割り込みハンドラ２２を読み込む（Ｆ１０３）。
【００２９】
次に、割り込みハンドラ２２は、ＩＯ空間切り替え処理として、ＣＰＵ上に確保される所定ＩＯ空間内でアクセスされた該当ＩＯデバイスの使用ＩＯポートに関して、ＩＯリソース管理テーブル２１に基づいてＩＯ空間情報を書き換える（Ｆ１０４）。すなわち、ＩＯ空間切り替え処理として、ＣＰＵは、ＢＩＯＳ２０からＩＯリソース管理テーブル２１に記録されている該当ＩＯデバイスの仮想ＩＯアドレスおよび仮想ＩＯサイズを参照し、該当ＩＯデバイスに対してＩＯ空間を一時的に割り当てる。
【００３０】
その後、ＯＳは、書き換えられたＩＯ空間情報を用いてＩＯデバイスにアクセスする（Ｆ１０５）。
【００３１】
別の観点で上記動作を説明すれば、コンピュータハードウェア１０は、ＯＳを介してデバイスドライバからのＩＯポート（仮想ＩＯポート）へのアクセスを受けると、システムマネージメント割り込みを生成しシステムマネージメント割り込みモードに移行する。コンピュータハードウェア１０は、システムマネージメント割り込みモード下でＩＯリソース管理テーブル２１を参照して、該当ＩＯデバイスに割り当てる仮想ＩＯアドレスおよび仮想ＩＯサイズにＩＯ空間を切り替える。この仮想ＩＯエミュレーション処理を経て、ＯＳは、書き換えられたＩＯ空間情報を用いてＩＯデバイスにアクセスする。
【００３２】
以後の動作は、ＩＯ空間が仮想化されていないＩＡのコンピュータシステムと同様であり、次のように動作する。デバイスドライバから仮想ＩＯポートのＩｎｄｅｘレジスタへのライトアクセスの場合、ＣＰＵは、Ｉｎｄｅｘの値から割り当てたＩＯ空間のアドレスを算出し、Ｄａｔａレジスタに対してリードデータを格納する。また、デバイスドライバから仮想ＩＯポートのＤａｔａレジスタへのライトアクセスの場合は、ＣＰＵは、Ｉｎｄｅｘ値から割り当てたＩＯ空間のアドレスを算出し、Ｄａｔａレジスタの値を該当レジスタへライトする。
【００３３】
上記フローＦ１０３及びフローＦ１０４によって、ＩＯ空間が対象ＩＯデバイスのＩＯ空間情報に切り替えられる。このシステムマネージメント割り込みを用いてコンピュータハードウェア１０内でＩＯ空間情報を切り替える工程を含むことで、ＩＯ空間を仮想的に対象ＩＯデバイスが必要とするＩＯ空間情報に切り替えることができる。結果、この切り替えが都度実施されることで、各ハードウェアが各ＩＯデバイスに割り振られたＩＯ空間を用いてＯＳ‐ＩＯデバイス間のアクセスが可能となる。
【００３４】
このようにコンピュータハードウェア１０は、ＯＳからの何れかのＩＯデバイスへのアクセスが生じた際に、ＢＩＯＳ２０内に管理されたＩＯリソース管理テーブル２１に基づいたＩＯアドレスおよびサイズの値をＣＰＵ上の所定ＩＯ空間に逐次配置することによって、ＩＯ空間の仮想化を実現する。
【００３５】
なお、上記ＩＯデバイスアクセス方法では、割り込みハンドラ２２がＩＯ空間情報を書き換える際にＩＯデバイスの仮想ＩＯポート情報を引数に仮想ＩＯ空間を設定することを説明したが、ＩＯデバイスのテーブルナンバーを引数に仮想ＩＯ空間を設定するようにしてもよい。
【００３６】
例えば、テーブルナンバーを引数に用いて図４に示すように仮想ＩＯポートを設置するようにしてもよい。このように構成することより、複数のＩＯデバイスの仮想ＩＯポートに対応する際、ＩＯデバイス毎にＩｎｄｅｘ、Ｄａｔａポートを新たに割り当てる回数が少なくなり、結果、ＩＯ空間を更に消費させなくすることが可能となる。
【００３７】
ここで、コンピュータシステム１の初期化処理とＩＯ空間仮想化処理とを例示して発明を説明する。
【００３８】
図５は、コンピュータシステム１の初期化処理例を示すフローチャートである。この処理によって、割り込みハンドラ２２およびＩＯリソース管理テーブル２１を初期化できる。
【００３９】
ＢＩＯＳ２０は、ＰＯＳＴ（Power On Self Test）時に、割り込みハンドラ２２およびＩＯリソース管理テーブル２１を初期化する。まず、ＢＩＯＳ２０は、初期化で使用する仮想ＩＯ Ｉｎｄｅｘ、Ｄａｔａ変数を初期化し、ＩＯリソース管理テーブル２１内のＴａｂｌｅ Ｎｏ変数を“１”に設定し、デバイスコンフィグレーションアドレスを“０”に設定する（Ｓ５０１）。
【００４０】
次に、ＢＩＯＳ２０は、デバイスコンフィグレーションアドレスを使用してＩＯデバイスがＩＯ空間を必要としているか確認し（Ｓ５０２）、ＩＯ空間を必要としている場合（５０３）はＩＯデバイスからＩＯサイズを取得する（Ｓ５０４）。ＢＩＯＳ２０は、ＩＯリソース管理テーブル２１のＴａｂｌｅ Ｎｏ変数が示すテーブル欄に、仮想ＩＯ Ｉｎｄｅｘポートのアドレス、Ｄａｔａポートのアドレス、仮想ＩＯベースアドレス、仮想ＩＯサイズ、デバイスコンフィグレーションアドレスを設定する（Ｓ５０５）。
【００４１】
次に、ＢＩＯＳ２０は、仮想ＩＯ Ｉｎｄｅｘ、仮想ＩＯ Ｄａｔａ、Ｔａｂｌｅ Ｎｏの各変数をインクリメントする（Ｓ５０６）。
【００４２】
次に、ＢＩＯＳ２０は、デバイスコンフィグレーションアドレスをインクリメントした後（Ｓ５０７）、他のＩＯデバイスがいないか確認を行う（Ｓ５０８）。他にＩＯデバイスが存在する場合、ＢＩＯＳ２０は、再度ＩＯデバイスがＩＯ空間を必要としているか確認する処理（Ｓ５０２）を実施する。他のＩＯデバイスが他にない場合、ＢＩＯＳ２０は、ＩＯリソース管理テーブル２１に登録された仮想ＩＯ Ｉｎｄｅｘ、Ｄａｔａ Ｐｏｒｔへのアクセスが来た際にチップセットからＳＭＩを生成させる設定を行う（Ｓ５０９）。
【００４３】
このようにコンピュータシステム１を動作させることで、割り込みハンドラ２２およびＩＯリソース管理テーブル２１を初期化できる。
【００４４】
図６は、コンピュータシステム１のＩＯ空間仮想化処理例を示すフローチャートである。このＩＯ空間仮想化処理は、ＣＰＵに読み込まれた割り込みハンドラ２２によって実行される。仮想ＩＯポートに対するＯＳ（デバイスドライバ）からのアクセスによるチップセットからのＳＭＩを受けると、ＢＩＯＳ２０からＣＰＵに割り込みハンドラ２２が読み込まれる。その後、割り込みハンドラ２２によって以下のようにＩＯ空間を仮想的に動作させる（仮想ＩＯエミュレーション処理を実行する）。
【００４５】
割り込みハンドラ２２は、アクセスがあった仮想ＩＯポートの情報をＩＯリソース管理テーブル２１から検索する（Ｓ６０１）。
【００４６】
次に、割り込みハンドラ２２は、ＩＯリソース管理テーブル２１のＩＯデバイスコンフィグレーションアドレス、仮想ＩＯベースアドレス情報を基に、該当ＩＯデバイスに対してＩＯベースアドレスの設定およびＩＯ空間を有効にする設定を行う（Ｓ６０２）。
【００４７】
次に、割り込みハンドラ２２は、仮想ＩＯ Ｉｎｄｅｘへのライトかどうか判断し（Ｓ６０３）、該当する場合は（Ｓ６０３のＹｅｓ）、ＩＯベースアドレスに対して仮想ＩＯ Ｉｎｄｅｘ Ｐｏｒｔに格納された値を加算したアドレスに対してリードアクセスを行う（Ｓ６０４）。
【００４８】
その後、割り込みハンドラ２２は、リードデータを仮想ＩＯ Ｄａｔａ Ｐｏｒｔに格納する（Ｓ６０５）。仮想ＩＯ Ｉｎｄｅｘへのライトではない場合（Ｓ６０３のＮｏ）、割り込みハンドラ２２は、続いて仮想ＩＯ Ｄａｔａへのライトかどうか判断し（Ｓ６０６）、該当する場合、ＩＯベースアドレスに対して仮想ＩＯ Ｉｎｄｅｘ Ｐｏｒｔに格納された値を加算したアドレスに対して、仮想ＩＯ Ｄａｔａの値をライトする。仮想ＩＯ Ｉｎｄｅｘへのライト、または仮想ＩＯ Ｄａｔａへのライトでない場合（Ｓ６０６のＮｏ）、割り込みハンドラ２２は、該当ＩＯデバイスへのアクセスは行わない。
【００４９】
その後、割り込みハンドラ２２は、該当ＩＯデバイスに対してＩＯベースアドレスのクリアとＩＯ空間の無効設定を行う（Ｓ６０８）。
【００５０】
このようにコンピュータシステム１を動作させることで、割り込みハンドラ２２によってＩＯ空間仮想化処理が実現できる。
【００５１】
以上説明したように、本発明を適用したコンピュータシステムは、専用回路を設けること無しに、ＩＯデバイスの接続数を多数にする仮想ＩＯ空間を提供できる。
【００５２】
本発明は、ＩＯ空間の枯渇を回避するために、ＢＩＯＳ２０で仮想ＩＯ空間を構築し、ＣＰＵからの仮想ＩＯ空間へのアクセスに対してＢＩＯＳ２０で実際に使用するＩＯ空間を切り替え、その後ＩＯデバイスへのアクセスを行う。結果、仮想ＩＯ空間を用いることで、ＩＯ空間の枯渇を気にすることなくＩＯデバイスを多数実装することが可能となる。
【００５３】
また、ＩＯ空間が枯渇した際には、ＰＯＳＴ（ＰｏｗｅｒＯｎＳｅｌｆＴｅｓｔ）でエラー検出しシステムが起動しないケースがある。本発明は、本ケースを改善することも可能となる。
【００５４】
なお、実施形態を例示して本発明を説明した。しかし、本発明の具体的な構成は前述の実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の変更があってもこの発明に含まれる。例えば、上述した実施形態のブロック構成の分離併合、手順の入れ替えなどの変更は本発明の趣旨および説明される機能を満たせば自由であり、上記説明が本発明を限定するものではない。
【００５５】
また、上記の実施形態の一部又は全部は、以下のようにも記載されうる。尚、以下の付記は本発明をなんら限定するものではない。  
［付記１］
物理的にＩＯインタフェースに接続されているＩＯデバイス群を個別に管理するＩＯリソース管理テーブルを保持すると共に、前記ＩＯリソース管理テーブルで管理される各ＩＯデバイスに割り振ったＩＯ空間情報をシステムマネージメント割り込みに応じて切り替える割り込みハンドラを保持するＢＩＯＳと、
ＯＳ‐ＩＯデバイス間にアクセスが生じて仮想ＩＯ空間にアクセスされる毎に前記システムマネージメント割り込みを生成するチップセットを含み、前記システムマネージメント割り込みに応じて前記割り込みハンドラを読み出して、ＣＰＵ上に確保される所定ＩＯ空間を介して、各ＩＯデバイスに割り振られたＩＯ空間情報を前記ＩＯリソース管理テーブルを参照して切り替えることで、前記ＩＯインタフェースを介してＯＳ‐ＩＯデバイス間のアクセスを可能に構成されたコンピュータハードウェアと、
を含むことを特徴とするコンピュータシステム。
【００５６】
［付記２］
前記ＩＯリソース管理テーブルは、ＩＯデバイス毎に、前記所定ＩＯ空間の使用ポートを定めた仮想ＩＯポート情報と、前記ＩＯ空間情報を記録したデバイスＩＯ情報と、を含み成り、
ＩＯデバイス毎の前記仮想ＩＯポート情報には、ＣＰＵ内の所定ＩＯ空間の使用ポートを定めた仮想インデックスポートと仮想データポートが記録され、
ＩＯデバイス毎の前記ＩＯ空間情報には、ＩＯベースアドレスとして機能する仮想ＩＯベースアドレスと、ＩＯサイズとして機能する仮想ＩＯサイズとが記録される、
ことを特徴とする付記１に記載のコンピュータシステム。
【００５７】
［付記３］
前記割り込みハンドラは、前記所定ＩＯ空間内でＩＯ空間情報を切り替える際に、ＩＯデバイスの仮想ＩＯポート情報を引数に前記ＩＯリソース管理テーブルから該当ＩＯデバイスのＩＯ空間情報を読み込んで、該当ＩＯデバイスに割り振られたＩＯ空間の値を前記所定ＩＯ空間に設置することを特徴とする付記１又は２に記載のコンピュータシステム。
【００５８】
［付記４］
前記ＩＯリソース管理テーブルには、ＩＯデバイス毎にテーブルナンバーが割り振られ、
前記割り込みハンドラは、前記所定ＩＯ空間内でＩＯ空間情報を切り替える際に、ＩＯデバイスのテーブルナンバーを引数に前記ＩＯリソース管理テーブルから該当ＩＯデバイスのＩＯ空間情報を読み込んで、該当ＩＯデバイスに割り振られたＩＯ空間の値を前記所定ＩＯ空間に設置する
ことを特徴とする付記１又は２に記載のコンピュータシステム。
【００５９】
［付記５］
ＢＩＯＳは、物理的にＩＯインタフェースに接続されているＩＯデバイス群を個別に管理するＩＯリソース管理テーブルを保持すると共に、前記ＩＯリソース管理テーブルで管理される各ＩＯデバイスに割り振ったＩＯ空間情報をシステムマネージメント割り込みに応じて切り替える割り込みハンドラを保持し、
コンピュータハードウェアは、チップセットが、ＯＳ‐ＩＯデバイス間にアクセスが生じて仮想ＩＯ空間にアクセスされる毎に前記システムマネージメント割り込みを生成させ、
前記システムマネージメント割り込みに応じて、ＣＰＵが前記ＢＩＯＳに格納された割り込みハンドラを読み込んで、ＣＰＵ内に確保された所定ＩＯ空間を介して、各ＩＯデバイスに割り振られたＩＯ空間情報を前記ＩＯリソース管理テーブルを参照して切り替え、
前記ＩＯインタフェースを介して、切替えられたＩＯ空間情報に基づいて、ＯＳ‐ＩＯデバイス間のアクセスを成立させる
ことを特徴とするＩＯデバイスアクセス方法。
【００６０】
［付記６］
前記ＩＯリソース管理テーブルは、ＩＯデバイス毎に、前記所定ＩＯ空間の使用ポートを定めた仮想ＩＯポート情報と、前記ＩＯ空間情報を記録したデバイスＩＯ情報と、を含み成り、
ＩＯデバイス毎の前記仮想ＩＯポート情報には、ＣＰＵ内の所定ＩＯ空間の使用ポートを定めた仮想インデックスポートと仮想データポートが記録され、
ＩＯデバイス毎の前記ＩＯ空間情報には、ＩＯベースアドレスとして機能する仮想ＩＯベースアドレスと、ＩＯサイズとして機能する仮想ＩＯサイズとが記録される、
ことを特徴とする付記５に記載のＩＯデバイスアクセス方法。
【００６１】
［付記７］
前記割り込みハンドラは、前記所定ＩＯ空間内でＩＯ空間情報を切り替える際に、ＩＯデバイスの仮想ＩＯポート情報を引数に前記ＩＯリソース管理テーブルから該当ＩＯデバイスのＩＯ空間情報を読み込んで、該当ＩＯデバイスに割り振られたＩＯ空間の値を前記所定ＩＯ空間に設置することを特徴とする付記５又は６に記載のＩＯデバイスアクセス方法。
【００６２】
［付記８］
前記ＩＯリソース管理テーブルには、ＩＯデバイス毎にテーブルナンバーが割り振られ、
前記割り込みハンドラは、前記所定ＩＯ空間内でＩＯ空間情報を切り替える際に、ＩＯデバイスのテーブルナンバーを引数に前記ＩＯリソース管理テーブルから該当ＩＯデバイスのＩＯ空間情報を読み込んで、該当ＩＯデバイスに割り振られたＩＯ空間の値を前記所定ＩＯ空間に設置する
ことを特徴とする付記５又は６に記載のＩＯデバイスアクセス方法。
【符号の説明】
【００６３】
１    コンピュータシステム
１０  コンピュータハードウェア
２０  ＢＩＯＳ
２１  ＩＯリソース管理テーブル
２２  割り込みハンドラ
３０  ＩＯインタフェース
４０  ＩＯデバイス群
【図１】
2019114197.tif 000003
【図２】
2019114197.tif 000004
【図３】
2019114197.tif 000005
【図４】
2019114197.tif 000006
【図５】
2019114197.tif 000007
【図６】
2019114197.tif 000008