トップ :: G 物理学 :: G06 計算;計数




【発明の名称】 プロセッサ追加方法、計算機及び記録媒体
【発明者】 【氏名】関口 知紀

【氏名】新井 利明

【氏名】山下 洋史

【要約】 【課題】計算機において、(1)追加したいプロセッサを予め搭載していなくても、OS実行中に追加可能にすること、(2)不良プロセッサがある場合もOSを再起動させずに正常プロセッサに交換できること。

【解決手段】計算機に搭載されていないプロセッサをOS起動時に仮想的に形成し、該仮想形成した非搭載プロセッサに対し該プロセッサ固有のOS初期化処理を搭載プロセッサに実行させ、該初期化処理後、該搭載プロセッサのうちOSの実行を行うものを指定し、上記仮想形成した非搭載プロセッサが実際に追加されたときに該追加プロセッサをOSの実行に加えるようにして、OS実行中にプロセッサを動的に追加する。
【特許請求の範囲】
【請求項1】計算機に搭載されていないプロセッサをOS起動時に仮想的に形成する第1のステップと、該仮想形成した非搭載プロセッサに対し該プロセッサ固有のOS初期化処理を搭載プロセッサに実行させる第2のステップと、該初期化処理後、該搭載プロセッサのうちOSの実行を行うものを指定する第3のステップと、上記仮想形成した非搭載プロセッサが実際に追加されたときに該追加プロセッサをOSの実行に加える第4のステップと、を経て、OS実行中にプロセッサ追加が可能なようにすることを特徴とするプロセッサ追加方法。
【請求項2】計算機に搭載されていないプロセッサNをOS起動時に仮想的に形成する第1のステップと、OSが該非搭載プロセッサNを起動する時に任意の搭載プロセッサAを選択してその状態を保存し、該非搭載プロセッサNの代わりに該搭載プロセッサAで該非搭載プロセッサN固有のOS初期化処理を実行する第2のステップと、該初期化処理後該搭載プロセッサAの状態を該非搭載プロセッサNの状態として保存する第3のステップと、該保存した該搭載プロセッサAの状態を回復してOS実行を再開する第4のステップと、N番目のプロセッサを追加したときに、初期化完了時に保存した上記非搭載プロセッサNの状態を、追加したプロセッサに回復してOS実行に加える第5のステップと、を経て、OS実行中にプロセッサ追加が可能なようにすることを特徴とするプロセッサ追加方法。
【請求項3】上記第2のステップは、上記非搭載プロセッサN固有のOS初期化処理を、上記搭載プロセッサにより時分割で実行する請求項2に記載のプロセッサ追加方法。
【請求項4】上記第2〜第4のステップは、OSがプロセッサを起動する時に、OSによって呼び出される請求項2または請求項3に記載のプロセッサ追加方法。
【請求項5】上記第2〜第4のステップは、OSのプロセッサ起動処理がトラップされ起動対象のプロセッサが非搭載プロセッサである場合に実行される請求項2または請求項3に記載のプロセッサ追加方法。
【請求項6】上記第2〜第4のステップは、OSとは独立したプログラムとして実行される請求項2〜5のいずれかに記載のプロセッサ追加方法。
【請求項7】上記第1のステップは、OSとは独立したプログラムとして実行される請求項1〜5のいずれかに記載のプロセッサ追加方法。
【請求項8】上記第1のステップは、上記プロセッサ仮想形成処理を、OSの初期化が終了した時に終了するようにされている請求項1〜7のいずれかに記載のプロセッサ追加方法。
【請求項9】計算機に搭載されていないプロセッサをOS起動時に仮想的に形成する第1のステップと、該仮想形成した非搭載プロセッサに対し該プロセッサ固有のOS初期化処理を搭載プロセッサに実行させる第2のステップと、該初期化処理後、該搭載プロセッサのうちOSの実行を行うものを指定する第3のステップと、該指定されたプロセッサでだけOSを実行するようにプロセスをスケジュールする第4のステップと、外部機器からの割り込みを該指定プロセッサに配送するよう設定する第5のステップと、上記仮想形成した非搭載プロセッサが実際に追加されたときに該追加プロセッサをOSの実行に加える第6のステップと、を経て、OS実行中にプロセッサ追加が可能なようにすることを特徴とするプロセッサ追加方法。
【請求項10】上記各ステップが自動的に実行される請求項1から9のいずれかに記載のプロセッサ追加方法。
【請求項11】計算機に搭載されていないプロセッサをOS起動時に仮想的に形成する第1のステップと、該仮想形成した非搭載プロセッサに対し該プロセッサ固有のOS初期化処理を搭載プロセッサに実行させる第2のステップと、該初期化処理後、該搭載プロセッサのうちOSの実行を行うものを指定する第3のステップと、上記仮想形成した非搭載プロセッサが実際に追加されたときに該追加プロセッサをOSの実行に加える第4のステップと、OSが該追加されたプロセッサを起動する第5のステップと、OSがプロセッサ起動の成否を判定する第6のステップと、起動に失敗したと判定した場合にその不良プロセッサとは別のプロセッサの起動処理を続ける第7のステップと、全プロセッサの起動処理後に、上記プロセッサ仮想化手順により、正常起動したプロセッサに不良プロセッサのプロセッサ固有のOS初期化処理を実行させる第8のステップと、正常起動したプロセッサにOSの実行を行わせる第9のステップと、該不良プロセッサを正常なプロセッサに交換した時に、該正常プロセッサを追加プロセッサとしてOS実行に加える第10のステップと、を経て、OS実行中にプロセッサ追加が可能なようにすることを特徴とするプロセッサ追加方法。
【請求項12】上記プロセッサ追加は、該プロセッサを含むノードとして追加される請求項1から11のいずれかに記載のプロセッサ追加方法。
【請求項13】計算機に搭載されていないプロセッサをOS起動時に仮想的に形成する手段と、該仮想形成した非搭載プロセッサに対し該プロセッサ固有のOS初期化処理を搭載プロセッサに実行させる手段と、該初期化処理後、該搭載プロセッサのうちOSの実行を行うものを指定して該OSを実行させる手段と、上記仮想形成した非搭載プロセッサが実際に追加された時に該追加プロセッサをOSの実行に加える手段とを備え、OS実行中にプロセッサ追加が可能なようにした構成を特徴とする計算機。
【請求項14】計算機に搭載されていないプロセッサNをOS起動時に仮想的に形成する手段と、OSが該非搭載プロセッサNを起動するときに任意の搭載プロセッサAを選択してその状態を保存し、該非搭載プロセッサNの代わりに該搭載プロセッサAで該非搭載プロセッサN固有のOS初期化処理を実行する手段と、該初期化処理後該搭載プロセッサAの状態を該非搭載プロセッサNの状態として保存する手段と、該保存した該搭載プロセッサAの状態を回復してOS実行を再開する手段と、N番目のプロセッサを追加したときに、初期化完了時に保存した上記非搭載プロセッサNの状態を、追加したプロセッサに回復してOS実行に加える手段と、を備え、OS実行中にプロセッサ追加が可能なようにした構成を特徴とする計算機。
【請求項15】請求項1から12のいずれかに記載のプロセッサ追加方法における全ステップまたは一部のステップが記録されていることを特徴とする記録媒体。
【請求項16】請求項15に記載の記録媒体を用いて駆動されることを特徴とする計算機。
【発明の詳細な説明】【0001】
【発明の属する技術分野】本発明は、計算機の処理技術に関し、特に、OSの実行時にプロセッサを追加する技術に関する。
【0002】
【従来の技術】サーバ計算機に対する処理性能要求は急速に高まっており、また、どれほどの性能が将来、計算機に要求されるか予測するのも困難になってきている。また、インターネットの普及に伴い、サービスを停止できる時間も短くなっている。計算機性能の増設、特にCPUの増設のためには計算機を停止しなければならないが、計算機停止はサービスの停止や質の低下を招く。そのため、計算機を停止させることなく処理性能を増加させる方式の必要性が増している。
【0003】本発明の従来技術としては、次の2つが挙げられる。(a)計算機の実行中にCPUを追加する方式(CPUの動的追加方式)の従来技術例としては、日経コンピュータ1999年12月20号第16頁(日経BP社)に記載されたものがある。この方式では、計算機にはCPUが予め搭載されており、計算機の利用者は、そのうちから利用する台数分のCPUのライセンスを購入する。OSは、搭載されているCPUを全て使うように起動するが、起動完了後は計算機に与えられているCPUのライセンスに応じ、ライセンスされていないCPUをアイドルとするよう制御する。計算機の利用者は、既に購入してあるライセンス以上のCPUが必要となった場合は、ライセンスを追加購入する。この追加ライセンスに応じてOSのパラメータを設定すると、OSはアイドルとしていたCPUでも処理を実行するようにスケジュール処理を実施し、見かけ上は計算機を停止することなくCPUが追加される。(b)特開平11−53333号公報には、OSが最大限搭載可能なCPU数と実際に搭載されているCPU数とを初めから認識し、OS内部のデータ構造を初期化するようにした構成が記載されている。本方式では、計算機に実際にCPUが搭載されていなくてもよく、後からCPUを追加してOS実行に加えることができる。つまり、CPU増設を前提に、OSの構造がそれに対応している。
【0004】OSがCPU追加に対応していないというのは、その内部データ構造が、計算機起動時のCPU数に依存しているということである。OSは計算機起動時に実装されているCPU数を調べ、そのCPU数に応じてOS内部のデータ構造を初期化する。例えば、搭載CPU数に応じて、CPU毎の管理データを格納するバッファや、CPU毎にメモリ割当用のバッファを割り当てるといった初期化処理(Inside Win2K Scalability Enhancements, Part 1: Windows NT Magazine November, 1999 pp.51-)を実施する。このようなデータ構造の割り当ては、マルチCPU計算機用OSでは一般的に用いられる手法である。このように、OSは搭載CPU数に応じて内部のデータ構造を初期化する。
【0005】
【発明が解決しようとする課題】上記(a)の方式では、実際にCPUを計算機に搭載しなければならないため、製造コストが高くなるという問題がある。また、このような方式をとるのは、OSがCPUの動的追加に対応していないためである。また、既存のOSをそれに対応するように修正するのは困難である。また、上記(b)のような、計算機起動時の搭載CPU数に応じて内部データ構造を初期化するOSでは、後でCPUを追加しても、内部のデータ構造が追加されるCPUに対応していないため、そのCPUをOS実行に加えることはできない。さらに、デバイスドライバがOSのカーネル本体から分離しているようなOSでは、CPUの数に依存する初期化処理がOS内に散在しており、これらの処理を全てCPUの追加に対応するように修正するのは困難である。すなわち、上記のような従来技術におけるCPU動的追加方式では、OSがCPUの動的追加に予め対応している必要があった。OSが予めCPU動的追加に対応していない場合は、CPU数に依存する処理がOS内に散在しているため、CPU動的追加に対応するようOSを修正するのは困難である。そのため、そのようなOSでは、計算機負荷の増大に対応するために、計算機に予め搭載可能なCPUを搭載しておき、ライセンス情報により利用CPU数をOSが制御することで、見かけ上のCPU動的追加を実現していた。この方式では、CPUを予め搭載しておかなければならないため、上記のように、計算機の製造コストが高くなるという問題がある。また、OSの起動時に不良CPUがある場合、そのCPUを除外して起動することが可能なOSもある。しかし、上記のようなCPU数に依存する構造のOSでは、不良CPUを撤去して正常CPUを追加しても、そのCPUをOS実行に加えることができない。従って,かかる場合は、一旦計算機を停止してOSを起動し直す必要がある。
【0006】本発明の課題点は、かかる従来技術に鑑み、(1)追加したいプロセッサを予め搭載していなくても、OSの実行中にプロセッサの動的追加が可能なようにすること、(2)OSの起動時に不良プロセッサがあった場合にも再起動せずに正常プロセッサに交換できるようにすること、等である。
【0007】本発明の目的は、上記課題点を解決できる技術を提供することにある。
【0008】
【課題を解決するための手段】上記課題点を解決するために、本発明では、(1)計算機へのプロセッサ追加方法として、計算機に搭載されていないプロセッサをOS起動時に仮想的に形成する第1のステップと、該仮想形成した非搭載プロセッサに対し該プロセッサ固有のOS初期化処理を搭載プロセッサに実行させる第2のステップと、該初期化処理後、該搭載プロセッサのうちOSの実行を行うものを指定する第3のステップと、上記仮想形成した非搭載プロセッサが実際に追加されたときに該追加プロセッサをOSの実行に加える第4のステップと、を経て、OS実行中にプロセッサ追加が可能なようにする。
【0009】(2)計算機へのプロセッサ追加方法として、計算機に搭載されていないプロセッサNをOS起動時に仮想的に形成する第1のステップと、OSが該非搭載プロセッサNを起動するときに任意の搭載プロセッサAを選択してその状態を保存し、該非搭載プロセッサNの代わりに該搭載プロセッサAで該非搭載プロセッサN固有のOS初期化処理を実行する第2のステップと、該初期化処理後該搭載プロセッサAの状態を該非搭載プロセッサNの状態として保存する第3のステップと、該保存した該搭載プロセッサAの状態を回復してOS実行を再開する第4のステップと、N番目のプロセッサを追加したときに、初期化完了時に保存した上記非搭載プロセッサNの状態を、追加したプロセッサに回復してOS実行に加える第5のステップと、を経て、OS実行中にプロセッサ追加が可能なようにする。
【0010】(3)上記(2)において、上記第2のステップでは、上記非搭載プロセッサN固有のOS初期化処理を、上記搭載プロセッサAにより時分割で実行するようにする。
(4)上記(2)または(3)において、上記第2〜第4のステップでは、OSがプロセッサを起動するときに、OSによって呼び出されるようにする。
(5)上記(2)または(3)において、上記第2〜第4のステップでは、OSのプロセッサ起動処理がトラップされ起動対象のプロセッサが非搭載プロセッサである場合に実行される。
【0011】(6)上記(2)から(5)のいずれかにおいて、上記第2〜第4のステップが、OSとは独立したプログラムとして実行されるようにする。
【0012】(7)上記(1)から(5)のいずれかにおいて、上記第1のステップが、OSとは独立したプログラムとして実行されるようにする。
(8)上記(1)から(7)のいずれかにおいて、上記第1のステップでは、上記プロセッサ仮想形成処理を、OSの初期化が終了した時に終了するようにする。
【0013】(9)計算機のプロセッサ追加方法として、計算機に搭載されていないプロセッサをOS起動時に仮想的に形成する第1のステップと、該仮想形成した非搭載プロセッサに対し該プロセッサ固有のOS初期化処理を搭載プロセッサに実行させる第2のステップと、該初期化処理後、該搭載プロセッサのうちOSの実行を行うものを指定する第3のステップと、該指定されたプロセッサでだけOSを実行するようにプロセスをスケジュールする第4のステップと、外部機器からの割り込みを該指定プロセッサに配送するよう設定する第5のステップと、上記仮想形成した非搭載プロセッサが実際に追加されたときに該追加プロセッサをOSの実行に加える第6のステップと、を経て、OS実行中にプロセッサ追加が可能なようにする。
(10)上記(1)から(9)のいずれかにおいて、上記各ステップが自動的に実行されるようにする。
【0014】(11)計算機のプロセッサ追加方法として、計算機に搭載されていないプロセッサをOS起動時に仮想的に形成する第1のステップと、該仮想形成した非搭載プロセッサに対し該プロセッサ固有のOS初期化処理を搭載プロセッサに実行させる第2のステップと、該初期化処理後、該搭載プロセッサのうちOSの実行を行うものを指定する第3のステップと、上記仮想形成した非搭載プロセッサが実際に追加されたときに該追加プロセッサをOSの実行に加える第4のステップと、OSが該追加されたプロセッサを起動する第5のステップと、OSがプロセッサ起動の成否を判定する第6のステップと、起動に失敗したと判定した場合にその不良プロセッサを無視して他のプロセッサの起動処理を続ける第7のステップと、全プロセッサの起動処理後に、上記プロセッサ仮想化手順により、正常起動したプロセッサに不良プロセッサのプロセッサ固有のOS初期化処理を実行させる第8のステップと、正常起動したプロセッサにOSの実行を行わせる第9のステップと、該不良プロセッサを正常なプロセッサに交換したときに、該正常プロセッサを追加プロセッサとしてOS実行に加える第10のステップと、を経て、OS実行中にプロセッサ追加が可能なようにする。
(12)上記(1)から(11)のいずれかにおいて、上記プロセッサ追加を、該プロセッサを含むノードとして追加するようにする。
【0015】(13)計算機として、計算機に搭載されていないプロセッサをOS起動時に仮想的に形成する手段と、該仮想形成した非搭載プロセッサに対し該プロセッサ固有のOS初期化処理を搭載プロセッサに実行させる手段と、該初期化処理後、該搭載プロセッサのうちOSの実行を行うものを指定してOSを実行させる手段と、上記仮想形成した非搭載プロセッサが実際に追加されたときに該追加プロセッサをOSの実行に加える手段とを備え、OS実行中にプロセッサ追加が可能なようにした構成とする。
(14)計算機として、計算機に搭載されていないプロセッサNをOS起動時に仮想的に形成する手段と、OSが該非搭載プロセッサNを起動するときに任意の搭載プロセッサAを選択してその状態を保存し、該非搭載プロセッサNの代わりに該搭載プロセッサAで該非搭載プロセッサN固有のOS初期化処理を実行する手段と、該初期化処理後該搭載プロセッサAの状態を該非搭載プロセッサNの状態として保存する手段と、該保存した該搭載プロセッサAの状態を回復してOS実行を再開する手段と、N番目のプロセッサを追加したときに、初期化完了時に保存した上記非搭載プロセッサNの状態を、追加したプロセッサに回復してOS実行に加える手段と、を備え、OS実行中にプロセッサ追加が可能なようにした構成とする。
【0016】(15)記録媒体を、上記(1)から(12)のいずれかのプロセッサ追加方法における全ステップまたは一部のステップが記録されたものとする。
(16)計算機を、上記(15)の記録媒体を用いて駆動される構成とする。
【0017】
【発明の実施の形態】以下、本発明の実施例につき、図面を用いて説明する。
【0018】図1は、本発明の実施例として、計算機システムの構成例を示す図である。図1において、100は計算機、101〜103はCPU、105はI/Oバス制御装置、109はメモリ、104はバス、105はI/Oバス制御装置、106はI/Oバス、107は磁気ディスク装置、108は入出力コンソール、110は初期プログラムローダ(IPL)、111はCPU仮想化プログラム、112はCPU構成テーブルである。計算機100は、CPU101〜103、I/Oバス制御装置105、及びメモリ109から成り、それぞれをバス104が接続している。I/Oバス制御装置105からは、I/Oバス106が出ている。I/Oバス106には、磁気ディスク装置107、入出力コンソール108等の入出力装置が接続されている。I/Oバス制御装置105は、磁気ディスク107や入出力コンソール108のような外部機器とのデータのやりとりや、外部機器からの割り込みのCPUへの配送を制御する。I/Oバス制御装置105は、各外部機器がどのCPUへ割り込み配送可能かを示すテーブルを保持している。該テーブルは、OSにより設定される。図1では、メモリ109に、初期プログラムローダ(以下、IPLという)110とCPU仮想化プログラム111がロードされている様子を示している。IPL110は、計算機起動時の最初に実行されるプログラムで、通常は計算機100で実行するOSをメモリ109にロードする。本実施例では、IPL110は、OSの代わりにCPU仮想化プログラム111をロードする。メモリ109内のCPU構成テーブル112は、計算機に搭載されているCPUの構成情報を格納しているテーブルで、IPL110が構築する。テーブル112の構成は後述する。
【0019】図2は、図1に示した実施例におけるソフトウェア構成を示す。図2において、CPU仮想化プログラム111は、仮想CPU起動部201、CPU状態制御部202、及び特権命令実行部203を有して成る。仮想CPU起動部201は、OSのCPU起動処理部211で実行されるCPU起動指示をトラップしたときに実行される。該仮想CPU起動部201は、CPU状態制御部202と連携して、実際には計算機100に搭載されていないCPU(以下、論理CPUという)の状態を、計算機100に実際に搭載されているCPU(以下、物理CPUという)の上に作り出し、OSがCPU起動処理部211、及び、それに続くCPU固有のOS初期化処理を実行できるようにする。CPU状態制御部202は、物理CPUと論理CPUの対応関係を制御する。CPU状態制御部202は、論理CPUの実行状態の管理、論理CPUの状態回復・保存処理、物理CPUの論理CPUへの割り付け処理等を実施する。論理CPUは、物理CPUが割り付けられて実行可能となる。特権命令実行部203は、OSが実行するI/O命令、特権命令、仮想記憶の設定処理等をトラップし、その処理をエミュレートする。また、特権命令実行部203は、OSがCPU起動指示命令を実行したときにトラップが発生するようにOS実行環境を作り出す。特権命令実行部203は、OSが実行したCPU起動指示命令をトラップすると、仮想CPU起動部201を実行する。
【0020】計算機100が実行するOSは、CPU仮想化プログラム111と連動してOSの初期化処理を実施する。OS内部には、CPU起動処理部211、利用CPU指示部212、スケジューラ213、及び割り込み配送制御部214がある。利用CPU指示部212、スケジューラ213、及び割り込み配送制御部214が、CPU動的追加に対応するように構成されている部分である。CPU起動処理部211は、計算機100に搭載されているCPUを起動する処理を実施する。計算機100は、起動するとブートCPU(電源オンで最初に動き出すCPU)が実行を開始し、該ブートCPU上でOSが実行を開始する。OSは、初期化処理の中でブートCPU以外のCPUの起動処理を実行する。利用CPU指示部212は、OSが実際に実行するCPUの指定処理を実施する。OSは、CPU仮想化プログラム111により、計算機100に実際に搭載されているよりも多いCPUがあると想定して起動する。初期化終了後に、利用CPU指示部212は、実際に物理CPUでのみOSを実行するように、OSのスケジュールパラメータと割り込み配送経路を変更する。
【0021】図3は、図1の実施例におけるOS起動のフローチャートである。計算機を起動すると、ブートCPUはIPL110を実行する(ステップ301)。ここでは、ブートCPUはCPU101であるとする。IPL110は、メモリ109の決まった位置、すなわちCPU101が起動後に実行を開始するアドレスに存在しており、CPU101はIPL110を実行することができる。IPL110は、ハードウェアを走査して計算機100に実際に搭載されているCPU、すなわち物理CPUを数え、CPU構成テーブル112をメモリ109上に作成する(ステップ302)。次に、CPU仮想化プログラム111をメモリ109にロードして実行する(ステップ303)。通常、IPL110はOSをロードするが、本実施例ではIPL110がCPU仮想化プログラム111をロードするようIPL110を構成する。ステップ304以降は、CPU仮想化プログラム111が実行する。CPU仮想化プログラム111は、OSに対して搭載CPU数を仮想的に変えるため、CPU構成テーブル112を書き換える(ステップ304)。具体的には、実際に搭載されているCPU数よりも多いCPUが搭載されていると見えるように、CPU構成テーブル112を書き換える。続いて、OSをメモリ109にロードする(ステップ305)。CPU仮想化プログラム111は、OSをCPU101の非特権モードで実行するように実行環境を設定し、さらに、OSが特権命令を実行したときにCPU仮想化プログラム111の特権命令実行部203が制御を取れるようにして、OSに制御を渡す(ステップ306)。これにより、OSのCPU起動処理をトラップできる。
【0022】図4は、OSの初期化処理におけるCPU起動処理手順、及び、CPU固有の初期化処理手順を示すフローチャートである。図4の処理は、全てのCPUで初期化処理として実行される。計算機100が起動すると、ブートCPUがこの処理を実行する。最初に、CPU固有の初期化処理を実行する(ステップ401)。ここでは、CPUの内部レジスタの設定や、CPU毎メモリバッファの割当等が実施される。この処理を実行しているCPUがブートCPUである場合(ステップ402で判定)、CPU構成テーブル112を参照して、計算機100に搭載されているCPU数を取得する(ステップ403)。取得されるCPU数は、CPU仮想化プログラム111のステップ304で書き換えられたCPU数であって、実際に搭載されているCPU数よりも多い。続いて、搭載されているとされた全てのCPUに対し、ステップ404と405を実行する。ステップ404では、CPUを起動する命令を実行する。CPU起動方法は、計算機により異なるが、特定のメモリアドレスへの書き込みやI/O命令により実現される。本実施例では、CPU構成テーブル112に格納されている起動アドレス1002への書き込みにより起動するとする。CPU仮想化プログラム111は、これらの命令を実行するとトラップが発生するようにOSの実行を制御している。ここで発生したトラップは、CPU仮想化プログラム111内の特権命令実行部203により捕獲されて処理される。実際に搭載されているCPUへの起動指示の場合、そのまま命令を実行する。そうでなければ、仮想的に作り出したCPUの起動処理を実行する。このトラップ処理については後述する。起動を指示されたCPU、あるいは、仮想的に起動されたCPUが実行を開始して、実行を開始したCPUは、CPU固有の初期化処理を実行するため再びステップ401からの処理を実行する。ステップ401を終了後、該終了の旨をブートCPUに通知して(ステップ407)、アイドル状態へ遷移する。本実施例では、CPU仮想化プログラム111で仮想的CPUを仮想的に起動した場合、上記処理が該仮想的CPU上で実行される場合がある。この間、ブートCPUはCPUの起動完了通知を待つ(ステップ405)。全てのCPUの起動完了通知を受け取った時点で、OSはCPU構成テーブル112に示されたCPUの初期化が完了したように認識し、それらのCPUでOSを実行可能なデータ構造が整っている。ここで、実際に計算機100に搭載されているCPUだけでOSを実行するよう利用CPUを制限する(ステップ406)。その後、その他の初期化処理の実行へと進む。ステップ406の処理は、図7にて説明する。ここでは、CPU起動完了直後にステップ406の利用CPU制限を実行しているが、その他のCPU数に依存する初期化処理の完了を待ってから、利用CPU制限処理を実行してもよい。
【0023】図5は、CPU起動時のCPU仮想化プログラム111のトラップ処理のフローチャートである。
【0024】前述のように、OSがステップ404でCPU起動指示命令を実行するとトラップが発生し、CPU仮想化プログラム111の特権命令実行部203に制御が移る。特権命令実行部203は、実行された命令がCPU起動命令であると判定すると、仮想CPU起動部201を起動させる。仮想CPU起動部201は、起動されようとしているCPUが実際に計算機100に搭載されているCPUかどうか判定する(ステップ501)。仮想CPU起動部201は、IPL110が書き換える前のCPU構成テーブル112の内容を参照して、起動されようとしているCPUが実際に搭載されているかどうかを判定する。CPUが実際に搭載されているならば、CPU起動命令をそのまま実行してCPUを起動する(ステップ502)。CPUが搭載されていない場合は、搭載されているCPU(物理CPU)の1つを選択してステップ504からのCPU初期化処理を実行させるように、選択したCPUに指示する(ステップ503)。ここでは、M番目の論理CPUを起動しようとしており、選択されたCPUをCPU103とする。CPU103は3番目の物理CPUであり、これまで3番目の論理CPUであったとして説明する。ステップ503では、CPU103に割り込みを送信して、CPU103にステップ504からの処理を開始させる。CPU103は、その時点でのCPUの実行状態をCPU管理テーブル600に保存する(ステップ504)。そして、CPU管理テーブル600の論理CPUと物理CPUの対応関係を、3番目の論理CPUには物理CPUが割り当てられてなく、M番目の論理CPUがCPU103で実行されていることを示すように更新する(ステップ505)。そして、CPU起動を模擬するために、リセットが入力されたときにCPUが実行を開始するアドレス(リセットベクタ)へジャンプする(ステップ506)。これにより、CPU103はM番目のCPUとして起動してOS初期化処理を実行し、CPU固有のOS初期化処理であるステップ401からの処理を実行することになる。この時、OSはM番目のCPUを起動したものとしてCPU固有の初期化処理を実行する。つまり、OSは、実際には搭載されていないM番目のCPUが存在するとしてOS内部のデータ構造を初期化し、CPUのレジスタ等を設定する。その処理は、選択されたCPUであるCPU103が代行する。以降のOSの初期化処理において、CPU間で割り込みを用いた通信が発生する場合、特に、通信先の論理CPUに物理CPUが割り当てられていない場合、特別な処理が必要になる。この場合は、上記のようなCPU起動処理の場合と同様に、物理CPUを1つ選択してその状態を保存し、そのCPU上に通信先論理CPUの状態を設定して実行を再開させればよい。また、CPU間割り込みは特権命令、あるいは、I/O命令により実現されるので、特権命令実行部203がトラップして模擬することが可能である。外部割込みも同様に処理できる。
【0025】図6はCPU管理テーブル600の構成を示す。CPU管理テーブル600は、各論理CPUについて、論理CPU番号601、その論理CPUに割り当てられた物理CPUの番号602、及び、ある時点で論理CPUに物理CPUが割り当てられていない場合に、それまでの論理CPUの実行状態を保存しているCPU状態603を保持する。図6は、ステップ505までが実行された時のCPU管理テーブル600の様子を示している。3番目の論理CPUには物理CPUが割り当てられていなくて、それまでの実行状態が保存されており、M番目の論理CPUがCPU103で実行されている。
【0026】図7は、OSを実行するCPUを指定する処理手順を示すフローチャートである。
【0027】OSは、全てのCPUのCPU固有初期化処理が完了すると図7に示した利用CPUを制限する処理を実行し(ステップ406)、OSの実行を物理CPU(計算機100に実際に搭載されているCPU)に制限する。まず、ステップ701では、OSの実行を特権モードに移行する。次に、ステップ702で、外部機器からの割り込みが、物理CPUにのみ配送されるようI/Oバス制御装置105を設定する。続いて、物理CPU(実際に搭載されているCPU)でのみOSが実行されるように、スケジューラのパラメータを変更する(ステップ703)。以降の処理のステップ704ないしステップ708は、計算機100に搭載されている全てのCPUで実行する。まず、現在のCPU状態をCPU管理テーブル600のCPU状態603に保存し(ステップ704)、その他のCPUがそれぞれ状態を保存するのを待つ(ステップ705)。そして、実行している物理CPUが、指定された利用CPUに含まれるか検査する(ステップ706)。含まれない場合は、その物理CPUの実行を停止する。本実施形態では、計算機100に搭載されている全てのCPUを利用すると指定しているので、CPUが停止されることはない。実行中の物理CPUが利用CPUに含まれる場合は、そのCPUの物理番号と、その物理CPUが実行している論理CPUの論理番号とが一致しているか検査する(ステップ707)。一致している場合は、そのまま処理を継続する。実行中のCPUがその物理番号とは異なる論理番号のCPUの処理を実行している場合、物理番号と同じ番号の論理CPUの状態をCPU管理テーブル600より回復して(ステップ708)、論理CPUの実行を再開させる。以上の処理により、実際には計算機100に搭載されていないCPUについてCPU固有の初期化処理が実施されて、物理CPU(計算機100搭載されているCPU)だけでOSが実行されることになる。また、初期化処理完了後のCPUの状態はCPU管理テーブル600のCPU状態603に保持され、CPU毎に必要なOS内部のデータ構造も初期化されている。これらのデータ構造は、それぞれのCPUがOSを実行している時に参照され、CPUが実行していなければOS実行に影響しない。
【0028】図8は、CPU追加の処理例を示すフローチャートである。
【0029】本例では、計算機100のオペレータの指示によりCPU追加処理を開始することを前提としている。以下、N番目のCPUを追加する場合について説明する。CPUが計算機100に増設され、オペレータがCPU増設の指示を出すと、まず、追加CPUが起動した時にステップ803からの処理が実行されるように、メモリ109内のIPL110を書き換える(ステップ801)。その後、追加CPUを起動する命令を実行する(ステップ802)。追加CPUされたCPUは、起動してステップ803へ制御を移す。ステップ803では、CPU管理テーブル600に保存されているN番目の論理CPUの状態を回復し、N番目の論理CPUの実行を再開する。元の処理では、CPUの起動完了を待ち(ステップ804)、追加CPUへの割り込み配送設定(ステップ805)、及び、スケジューラのパラメータ変更を実施し(ステップ806)、追加CPUをOSの実行に参加させる。この時に、追加されるCPUが使う論理CPUの状態や、OSがCPU毎に割り当てている内部データ構造は既に準備ができており、追加したCPUは即座にN番目のCPUとしてOS実行に加わる。
【0030】図9はOSのスケジューラについての説明図である。本実施例の場合は、スケジューラのパラメータを変更してOSの利用CPUを制限する。これは、例えば、OS内に利用CPUを表現するデータ構造を設けて、スケジューラが実行する時に、該スケジューラが実行しているCPUの論理CPU番号を検査して(ステップ901)、利用CPUに含まれないならば強制的にアイドル状態へ移行させるようにする(ステップ902)。
【0031】図10はCPU構成テーブル112の構成を示す。
【0032】CPU構成テーブル112は、計算機100に実際に搭載されているCPUの物理CPU番号1001と、各CPUを起動するときに指示を書き込むメモリアドレス1002を格納している。物理CPU番号1001のENDは、これがCPU構成テーブル112の終わりであることを示している。CPU構成テーブル112は、IPL110により計算機100起動時に構成される。CPU仮想化プログラム111は、実際の搭載数よりも多くのCPUが搭載されていると見えるように、CPU構成テーブル112を書き換える。また、該CPU仮想化プログラム111は、CPU構成テーブル112を拡張して、実際よりも多くのCPUが搭載されているように見えるテーブルを作成する。さらにまた、該CPU仮想化プログラム111は、追加した行の起動アドレス1002をアクセスするとトラップが発生するアドレスに設定して、OSが搭載されていないCPUを起動しようとするのをトラップする。
【0033】上記実施例では、OSがCPUの動的追加に対応していなくても、計算機100が実行中にCPUを追加することが可能である。通常は、計算機の実行時にCPUを増設可能とするためには、CPUが増設されることを前提にOSが構成されていなければならないが、本実施例によれば、OSに、プロセスのスケジューラ、割り込みの配送先CPUの設定、利用CPUの指定追加等のわずかな変更を加えるだけでCPUの動的追加が可能となる。
【0034】以上の実施例では、OSが実行する特権命令をトラップすることにより、CPU起動指示をトラップしてCPU仮想化プログラム111が制御を行い、仮想的にOSにCPU初期化処理を実行させる方式について説明したが、CPU起動指示命令だけをトラップする方式でもよいし、あるいは、OSが直接CPU仮想化プログラム111を呼び出す方式でもよい。また、上記実施例では、CPU仮想化プログラム111がCPU構成テーブル112を書き換えて、OSに対し、実際の搭載CPU数よりも多いCPU数を見せかけるが、OSのCPU起動処理部211をCPU追加に対応させ、搭載されていない仮想的CPUについてもCPU起動処理を実施するようにしてもよい。また、上記実施例では、CPU仮想化プログラム111内に特権命令実行部203を設け、仮想的CPUの起動処理をOSの外で実施するようにしたが、これをOS内で行うようにしてもよい。つまり、OSのCPU起動処理部211を修正して、OS内に設けたCPU仮想化プログラム111と連携するようにしてもよい。
【0035】図11は、本発明の別の実施例としての計算機の構例成を示す図である。
【0036】本実施例は、CPUを含むノード単位で、該CPUの追加が行う構成例である。計算機1160は、ノード1100と1110、それを接続するノード接続装置1150を備えて構成される。図11において、ノード1100、1110はそれぞれ、CPU、メモリ、及びノード制御装置から構成される。ノード1100内のノード制御装置1101はスイッチ1120を介してノード接続装置1150と接続され、ノード1110内のノード制御装置1111はスイッチ1121を介して該ノード接続装置1150と接続されている。ノード制御装置1101は、ノード外のCPUとの通信やメモリ参照を制御する。ノード接続装置1150は、各ノードのノード制御装置1101と連携してノード間のCPU間通信やデータ転送を実現する。ノードは、それ自体で計算機1160より抜き差し可能な装置として構成され、ノード接続装置1150との接続はスイッチ1120、1121により制御される。スイッチ1120は、ノード制御装置1101とノード接続装置1150に、接続状態の変更を通知する信号線を有している。また、ノード接続装置1150は、それに接続するスイッチの接続状態が変わった時に割り込みを生成して、計算機1160で実行中のOSに通知する。ここでは、ノード1110を新たにノード接続装置1150に接続する場合につき、CPU追加処理の流れを説明する。まず、計算機1160で実行するOSは、CPUが全部で4台搭載されている(ノード1100中に2台、ノード1110中に2台)として起動し、ノード1100に搭載されている2台にCPUで実行するように起動する。次に、計算機1160のオペレータがノード1110の接続するスイッチ1121を操作して、ノード1110をノード接続装置1150に接続する。変更すると、ノード接続装置1150がスイッチ1121より通知を受けて割り込みを生成する。これで、OSは増設されたCPUがあることを認識できる。一方、ノード1110のノード制御装置1111も接続された旨の通知を受け、ノード制御装置1111はノード1110内の初期化処理を実施する。OSは、ノード1100と1110間で通信ができるようにノード接続装置1150を構成する。この後、オペレータの指示により、あるいは、OSが、上記実施例で説明したと同様に,自動的にCPU追加処理を実行する。
【0037】図12は、本発明のさらに他の実施例の説明図で、計算機に搭載されているCPUに障害が発生して正常起動しない場合におけるOSのCPU起動手順を示すフローチャートである。
【0038】本実施例は、計算機に搭載されているCPUに障害が発生して正常起動しない場合に、CPU仮想化プログラム111により正常なCPUに該不良CPU固有の初期化を代行させ、後で該不良CPUを正常CPUに交換した時、CPU追加手順により正常な実行状態へ復帰する。ここでは、図1の計算機100内のCPU102が不良CPUであって起動できないものとして説明する。まず、ステップ1201では、CPU構成テーブル112を参照して、計算機100に搭載されているCPU数を取得する。そして、計算機100に搭載されているブートCPU以外のCPUについて、ステップ1202からステップ1205を実行する。まず、CPU起動命令を実行してCPUを起動する(ステップ1202)。次に、CPUが正常に起動したかどうかを判定する(ステップ1203)。この判定は、OSのCPU固有の初期化処理が終了したかどうかを検査する。CPUに障害があって正常にCPUが起動しなかった場合、そのCPUを不良CPUとして記録する(ステップ1204)。全てのCPUについて起動処理を実行したら(ステップ1205)、不良CPUがあったかどうか検査する(ステップ1206)。不良CPUがある場合は、仮想CPUの起動処理を実行する。すなわち、搭載されているCPUの1つを選び、例えばCPU103上に、CPU102が実行する論理CPUの状態を仮想的に作り出し、CPU103でOSのCPU固有の初期化処理を実行する(ステップ1207)。最後に、OSは、利用するCPUを正常起動したCPUに制限して(ステップ1208)、正常なCPUだけで以降のOS処理を実行する。この例では、CPU101が1番目の論理CPU、CPU103が2番目のCPUとなるようにする。不良CPUを撤去し正常CPUと交換した時には、上記実施例で説明したCPU追加手順を実行して、計算機100を正常な実行状態とする。ここでは、CPU102を正常CPUに交換すると3番目のCPUとしてOS実行に加える。
【0039】本実施例によれば、計算機100に搭載されているCPUのいくつかが不良で起動しない場合であっても、計算機100を起動でき、さらに加えて、起動時に、不良CPUも含めてCPU固有の初期化処理を実行させているため、後で正常CPUに交換した時に、そのCPUを即座にOS実行に加えることができる。
【0040】
【発明の効果】本発明によれば、動的に追加したいCPUを予め搭載していない計算機でも、OS実行中に該CPUを追加できる。また、OS起動時に不良CPUがあっても、OSを再起動することなく、代わりの正常CPUをOS実行に加えることができる。
【出願人】 【識別番号】000005108
【氏名又は名称】株式会社日立製作所
【出願日】 平成12年10月20日(2000.10.20)
【代理人】 【識別番号】100068504
【弁理士】
【氏名又は名称】小川 勝男 (外2名)
【公開番号】 特開2002−132741(P2002−132741A)
【公開日】 平成14年5月10日(2002.5.10)
【出願番号】 特願2000−321327(P2000−321327)