(57)【要約】【課題】複数のＣＰＵを搭載した計算機において、１つのＣＰＵにて動作する従来のマルチＯＳを変更することなく、各ＯＳにＣＰＵを占有させることを目的とする。【解決手段】マルチＣＰＵ計算機１００は、初期起動ＣＰＵ１１０と被起動ＣＰＵ１１１とを備える。また、マルチＣＰＵ計算機１００は、一つのＣＰＵで切り替わりながら動作するように作られた初期起動ＯＳ２００と被起動ＯＳとを備える。初期起動ＯＳ２００はＣＰＵを初期化するが、被起動ＯＳはＣＰＵを初期化しない。初期起動ＯＳ起動部２０１は初期起動ＣＰＵ１１０を初期化して初期起動ＯＳ２００を起動する。被起動ＣＰＵ初期起動部３１１は被起動ＣＰＵ１１１を起動し、被起動ＣＰＵ初期化部３１２は被起動ＣＰＵ１１１を初期化する。その後、被起動ＯＳ起動部２１１は被起動ＣＰＵ１１１で被起動ＯＳａ２１０を起動する。【選択図】図１
2010191886.tif 000002
【特許請求の範囲】
【請求項１】
第１のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、
第２のＣＰＵと、
起動後の第１のＣＰＵを用いて未起動である第２のＣＰＵを起動するＣＰＵ起動部と、
前記ＣＰＵ起動部により起動された前記第２のＣＰＵを初期化するＣＰＵ初期化部と、
前記ＣＰＵ初期化部により初期化された前記第２のＣＰＵを用いて特定のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を被起動ＯＳとして起動するＯＳ起動部と
を備えたことを特徴とする被起動ＯＳ動作計算機。
【請求項２】
前記被起動ＯＳ動作計算機は、さらに、
前記第１のＣＰＵで動作している初期起動ＯＳの情報を記憶装置に保存する初期起動ＯＳ情報保存部と、
前記初期起動ＯＳの代わりに前記ＣＰＵ起動部を前記第１のＣＰＵで動作させるＯＳ切替部と、
前記ＯＳ切替部により動作された前記ＣＰＵ起動部の代わりに前記初期起動ＯＳを前記初期起動ＯＳ情報保存部により保存された情報を用いて前記第１のＣＰＵで動作させる初期起動ＯＳ再開部と
を備えたことを特徴とする請求項１記載の被起動ＯＳ動作計算機。
【請求項３】
前記被起動ＯＳ動作計算機は、さらに、
前記第２のＣＰＵで動作している被起動ＯＳの情報であって前記初期起動ＯＳ情報保存部により保存される前記初期起動ＯＳの情報とは異なる情報を記憶装置に保存する被起動ＯＳ情報保存部と、
前記被起動ＯＳを動作させる代わりに被起動第２ＯＳを前記第２のＣＰＵで起動するＯＳ第２起動部と、
前記ＯＳ第２起動部により起動された前記被起動第２ＯＳの代わりに前記被起動ＯＳを前記被起動ＯＳ情報保存部により保存された情報を用いて前記第２のＣＰＵで動作させる被起動ＯＳ再開部と
を備えたことを特徴とする請求項２記載の被起動ＯＳ動作計算機。
【請求項４】
前記被起動ＯＳ動作計算機は、さらに、
前記第１のＣＰＵで動作している初期起動ＯＳの情報を記憶装置に保存する初期起動ＯＳ情報保存部と、
前記初期起動ＯＳを動作させる代わりに被起動第２ＯＳを前記第１のＣＰＵで起動するＯＳ第２起動部と、
前記ＯＳ第２起動部により起動された被起動第２ＯＳの情報であって前記初期起動ＯＳ情報保存部により保存される前記初期起動ＯＳの情報とは異なる情報を記憶装置に保存する被起動第２ＯＳ情報保存部と、
前記ＯＳ第２起動部により起動された前記被起動第２ＯＳの代わりに前記初期起動ＯＳを前記初期起動ＯＳ情報保存部により保存された情報を用いて前記第１のＣＰＵで動作させる初期起動ＯＳ再開部と、
前記初期起動ＯＳ再開部により動作された前記初期起動ＯＳの代わりに前記被起動第２ＯＳを前記被起動第２ＯＳ情報保存部により保存された情報を用いて前記第１のＣＰＵで動作させる被起動第２ＯＳ再開部と、
を備えたことを特徴とする請求項１記載の被起動ＯＳ動作計算機。
【請求項５】
前記被起動ＯＳ動作計算機は、さらに、
前記被起動ＯＳが使用する外部デバイスから前記第１のＣＰＵに割込み要求が通知された場合、前記被起動ＯＳが動作する前記第２のＣＰＵに割込み要求を転送し、前記初期起動ＯＳが使用する外部デバイスから前記第２のＣＰＵに割込み要求が通知された場合、前記初期起動ＯＳが動作する前記第１のＣＰＵに割込み要求を転送する割込み転送部
を備えたことを特徴とする請求項１〜請求項４いずれかに記載の被起動ＯＳ動作計算機。
【請求項６】
第１のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、第２のＣＰＵとを備える計算機のＯＳ起動方法であり、
ＣＰＵ起動部が、起動後の第１のＣＰＵを用いて未起動である第２のＣＰＵを起動し、
ＣＰＵ初期化部が、前記ＣＰＵ起動部により起動された前記第２のＣＰＵを初期化し、
ＯＳ起動部が、前記ＣＰＵ初期化部により初期化された前記第２のＣＰＵを用いて特定のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を被起動ＯＳとして起動する
ことを特徴とする計算機のＯＳ起動方法。
【請求項７】
請求項６記載のＯＳ起動方法を計算機に実行させるＯＳ起動プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、１つの計算機にて複数のＯＳが動作するマルチＯＳ環境において、２つ目以降のＯＳを起動する被起動ＯＳ動作計算機、計算機のＯＳ起動方法およびＯＳ起動プログラムに関するものである。
【背景技術】
【０００２】
オペレーティングシステム（以下、「ＯＳ」という）は１台の計算機上で動作するソフトウェアである。ＯＳは起動時に計算機の初期化処理を行い、計算機資源（ＣＰＵ、メモリ、割込みなど）を管理する。
ＯＳは単独で計算機資源を管理することを前提としており、複数のＯＳの共存は何らかの機構なしには不可能である。
【０００３】
１台の計算機上で複数のＯＳを並行して動作させるためには、大型計算機で実現されている仮想計算機方式（非特許文献１）がある。
仮想計算機方式では、全ての計算機資源を計算機制御プログラムが占有して管理し、ＯＳには仮想的な計算機として一部の資源が提供される。これにより、複数のＯＳそれぞれがあたかも異なる計算機上で単独に動作するため、複数のＯＳを並行動作させることができる。しかし、計算機資源の一部のみを提供する特別なハードウェア支援と特権命令のエミュレーションとが必要であるため、オーバヘッドが存在する。
【０００４】
一方で、ＯＳの初期化処理部分、割込み管理部分の変更および割込み管理プログラムの追加により、特別なハードウェア支援や特権命令のエミュレーションを不要にした発明（特許文献１）も提案されている。
この発明では、第一ＯＳの初期化処理において、第二ＯＳ，第三ＯＳが必要とする物理メモリ・外部デバイスなどの計算機資源を予約する。第二ＯＳ，第三ＯＳの起動処理では予約された計算機資源のみを占有して管理する。また、独立した管理プログラムが外部割込みを横取りして、割込み要因に応じて各ＯＳへ伝達する。これらにより、計算機資源を分割し、各ＯＳを並行動作させることができる。
【０００５】
また、複数ＣＰＵを備えた計算機上で、各ＣＰＵにＯＳをそれぞれ動作させる方式（非特許文献２）がある。
この方式では、計算機資源を分割して各ＯＳを並行動作させるために、各ＯＳが事前に割り振られたＣＰＵ上で動作する。さらに、割込みを割り振られた先のＣＰＵに通知するか、割込みを第一のＯＳから第二，第三のＯＳへ伝播する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−１４９３８５号公報
【非特許文献】
【０００７】
【非特許文献１】ＯＳシリーズ第１１巻  ＶＭ、岡崎世雄他著、共立出版株式会社
【非特許文献２】シングルチップマルチプロセッサ上のハイブリッドＯＳ環境の実現−ＯＳ間インタフェースの実装、管井、遠藤、山口、近藤著、情報処理学会第６６回全国大会、２Ｄ−６
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来のマルチＯＳは、初期起動ＯＳの起動処理にてＣＰＵを初期化し、被起動ＯＳの起動処理を変更してＣＰＵの初期化処理を無効にしている。このため、別のＣＰＵ上で被起動ＯＳを起動する際にＣＰＵが正常動作しないという課題があった。
また、割込み管理は初期起動ＯＳにて割込みの全てを自ＣＰＵに通知されるように設定し、被起動ＯＳの割込み管理処理では自ＣＰＵに入った割込みの伝播先として自ＯＳを登録するように変更されている。別ＣＰＵにて被起動ＯＳが動作した場合、割込みをどのＣＰＵへ通知するかを設定していないため、別ＣＰＵに割り込みが通知されず、別ＣＰＵで独立動作する際に割り込みを受けることが出来ないという課題があった。
既存の発明では、これらを解決するために被起動ＯＳの起動処理を変更している（非特許文献２）。
【０００９】
本発明は、例えば、複数のＣＰＵ（マルチコアＣＰＵ含）を搭載した計算機において、１つのＣＰＵにて動作する従来のマルチＯＳを変更することなく、各ＯＳにＣＰＵを占有させることを目的とする。
【課題を解決するための手段】
【００１０】
本発明の被起動ＯＳ動作計算機は、第１のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、第２のＣＰＵと、起動後の第１のＣＰＵを用いて未起動である第２のＣＰＵを起動するＣＰＵ起動部と、前記ＣＰＵ起動部により起動された前記第２のＣＰＵを初期化するＣＰＵ初期化部と、前記ＣＰＵ初期化部により初期化された前記第２のＣＰＵを用いて特定のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を被起動ＯＳとして起動するＯＳ起動部とを備える。
【発明の効果】
【００１１】
本発明によれば、例えば、従来のマルチＯＳを変更することなく、各ＯＳにＣＰＵを占有させることができる。そのため、被起動ＯＳを初期起動ＯＳと同じＣＰＵ上でも、別のＣＰＵ上でも起動できるようになる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１におけるマルチＣＰＵ計算機１００の構成図。
【図２】実施の形態１におけるマルチＯＳ拡張方式を示すフローチャート。
【図３】実施の形態１における初期起動ＯＳ起動処理（Ｓ１２０）のフローチャート。
【図４】実施の形態１における外部デバイス予約テーブル４１０の構造を示す図。
【図５】実施の形態１におけるＯＳ管理テーブル４００の構造を示す図。
【図６】実施の形態１におけるＯＳ動作ＣＰＵテーブル４２０の構造を示す図。
【図７】実施の形態１におけるＯＳ切替処理（Ｓ１３０、Ｓ１７０）のフローチャート。
【図８】実施の形態１における被起動ＣＰＵ起動処理（Ｓ１４０）のフローチャート。
【図９】実施の形態１における被起動ＯＳ起動処理（Ｓ１５０）のフローチャート。
【図１０】実施の形態２におけるマルチＣＰＵ計算機１００の構成図。
【図１１】実施の形態２におけるＯＳ管理テーブル４００の構造を示す図。
【図１２】実施の形態２におけるＯＳ一時停止処理のフローチャート。
【図１３】実施の形態２におけるＯＳ切替処理（Ｓ１３０、Ｓ１７０）のフローチャート。
【図１４】実施の形態２におけるＯＳ再開処理のフローチャート。
【図１５】実施の形態３におけるマルチＣＰＵ計算機１００の構成図。
【図１６】実施の形態３における割込み転送処理のフローチャート。
【発明を実施するための形態】
【００１３】
実施の形態１．
１つのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｃｅｓｓｉｎｇ  Ｕｎｉｔ）で動作するように作られた複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を複数のＣＰＵで動作させるマルチＯＳ拡張方式について説明する。
【００１４】
図１は、実施の形態１におけるマルチＣＰＵ計算機１００の構成図である。
実施の形態１におけるマルチＣＰＵ計算機１００の構成について、図１に基づいて以下に説明する。
【００１５】
マルチＣＰＵ計算機１００（被起動ＯＳ動作計算機の一例）は、初期起動ＣＰＵ１１０（第１のＣＰＵの一例）、被起動ＣＰＵ１１１（第２のＣＰＵの一例）、主記憶装置１２０などを備える。
【００１６】
初期起動ＣＰＵ１１０はマルチＣＰＵ計算機１００の起動時に起動し、第１のＯＳ（後述する「初期起動ＯＳ２００」）を動作させるＣＰＵである。
被起動ＣＰＵ１１１は第２のＯＳ（後述する「被起動ＯＳ」）が起動するときに起動し、第２のＯＳを動作させるＣＰＵである。
【００１７】
初期起動ＣＰＵ１１０と被起動ＣＰＵ１１１とは、制御レジスタ（アキュムレータ、スタックレジスタ、プログラムカウンタ、割り込みレジスタ、フラグレジスタ、起動レジスタなど）および汎用レジスタを備える。
【００１８】
例えば、ＣＰＵは、起動割込みや起動レジスタへの所定値の設定により起動される。
【００１９】
初期起動ＣＰＵ１１０と被起動ＣＰＵ１１１とは、バス１０１を介して主記憶装置１２０および複数の外部デバイス（１９１〜１９４）と接続し、主記憶装置１２０および複数の外部デバイスを制御する。
外部デバイス（１９１〜１９４）とは、ハードディスク、キーボード、ディスプレイ装置、ネットワークインタフェースカードなど、計算機（コンピュータ）に接続される機器のことである。
【００２０】
初期起動ＣＰＵ１１０と被起動ＣＰＵ１１１とは、個別のパッケージに実装されたプロセッサコアであっても、一つのパッケージに実装されたマルチコアプロセッサであっても構わない。
【００２１】
主記憶装置１２０は、初期起動ＯＳ２００、複数の被起動ＯＳ（２１０、２２０）、ＯＳ切替部３００、被起動ＣＰＵ起動部３１０、ＯＳ管理テーブル４００、外部デバイス予約テーブル４１０、ＯＳ動作ＣＰＵテーブル４２０などを記憶する。
以下、主記憶装置１２０の記憶領域を「メモリ領域」という。
【００２２】
ＯＳ（例えば、初期起動ＯＳ２００や被起動ＯＳ）は、ＣＰＵ、主記憶装置内のメモリ領域、外部デバイスなどの計算機資源を占有して動作する。
初期起動ＯＳ２００および複数の被起動ＯＳは、ＣＰＵが一つである計算機において互いに切り替わりながら一つのＣＰＵ上で動作するように作られたマルチＯＳである。
被起動ＯＳは、初期起動ＯＳ２００によりＣＰＵが初期化されることを前提に動作し、ＣＰＵが初期化されていないと誤動作を起こす。
ＣＰＵの初期化とは、例えば、所定のレジスタを初期設定することである。
【００２３】
初期起動ＯＳ２００は、初期起動ＯＳ起動部２０１を備え、マルチＣＰＵ計算機１００の起動時に初期起動ＣＰＵ１１０で起動する。
初期起動ＯＳ起動部２０１は、初期起動ＯＳ２００を起動する起動処理を初期起動ＣＰＵ１１０を用いて実行する。初期起動ＯＳ起動部２０１による起動処理では、初期起動ＣＰＵ１１０の初期化、被起動ＯＳａ２１０用の計算機資源の予約などが行われる。
【００２４】
各被起動ＯＳは、被起動ＯＳ起動部２１１（ＯＳ起動部の一例）を備え、マルチＣＰＵ計算機１００の起動完了後において特定のタイミングに初期起動ＣＰＵ１１０または被起動ＣＰＵ１１１で起動する。例えば、特定のタイミングとは、利用者による指定時や割り当てられた外部デバイスからの割込み発生時である。
被起動ＯＳ起動部２１１は、被起動ＯＳを起動する起動処理を初期起動ＣＰＵ１１０または被起動ＣＰＵ１１１（自ＯＳが動作する方）を用いて実行する。被起動ＯＳ起動部２１１による起動処理では、被起動ＯＳａ２１０用に予約された計算機資源の確認などが行われる。但し、被起動ＣＰＵ１１１の初期化は行われない。
【００２５】
ＯＳ切替部３００は、動作中のＯＳに替えて非動作中のＯＳを動作させる。
例えば、非動作中のＯＳとは、未起動のＯＳや待機中のＯＳ（起動済であるがＣＰＵの割り当てを待っているＯＳ）である。
【００２６】
被起動ＣＰＵ起動部３１０は、未起動の被起動ＣＰＵ１１１を起動し、被起動ＣＰＵ１１１を初期化し、被起動ＯＳ起動部２１１を呼出して被起動ＯＳを被起動ＣＰＵ１１１で起動させる。
被起動ＣＰＵ起動部３１０は、被起動ＣＰＵ初期起動部３１１（ＣＰＵ起動部の一例）と被起動ＣＰＵ初期化部３１２（ＣＰＵ初期化部の一例）とを備える。
被起動ＣＰＵ初期起動部３１１は、起動後の初期起動ＣＰＵ１１０を用いて未起動である被起動ＣＰＵ１１１を起動する。
被起動ＣＰＵ初期化部３１２は、被起動ＣＰＵ初期起動部３１１により起動された被起動ＣＰＵ１１１を初期化し、被起動ＯＳ起動部２１１を呼出して被起動ＯＳを被起動ＣＰＵ１１１で起動させる。
【００２７】
ＯＳ管理テーブル４００は、ＯＳ毎に起動状態、次に実行すべきコード、待機後に再開するために必要な情報（コンテキスト）を管理するためのテーブルである。
外部デバイス予約テーブル４１０は、各外部デバイスと当該外部デバイスを割り当てられたＯＳとの関係を管理するためのテーブルである。
ＯＳ動作ＣＰＵテーブル４２０は、各ＯＳと当該ＯＳが動作中のＣＰＵとの関係を管理するためのテーブルである。
【００２８】
実施の形態において「〜部」として説明する機能はプログラムとしてＣＰＵにより読み出され実行される。すなわち、プログラムは、「〜部」として計算機（コンピュータ）を機能させるものであり、また「〜部」の手順や方法を計算機に実行させるものである。
【００２９】
実施の形態においてフローチャートに含まれている矢印は主としてデータや信号の入出力を示す。
【００３０】
実施の形態において「〜部」として説明するものは「〜回路」、「〜装置」、「〜機器」であってもよく、また「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ファームウェア、ソフトウェア、ハードウェアまたはこれらの組み合わせのいずれで実装されても構わない。
【００３１】
図２は、実施の形態１におけるマルチＯＳ拡張方式を示すフローチャートである。
１つのＣＰＵで動作するように作られた初期起動ＯＳ２００と被起動ＯＳとを初期起動ＣＰＵ１１０と被起動ＣＰＵ１１１とで動作させるマルチＯＳ拡張方式（ＯＳ起動方法の一例）について、図２に基づいて以下に説明する。
【００３２】
マルチＣＰＵ計算機１００の起動時に初期起動ＣＰＵ１１０が起動し（Ｓ１１０）、初期起動ＣＰＵ１１０で初期起動ＯＳ２００が起動する（Ｓ１２０）。
その後、特定のタイミングにおいて初期起動ＣＰＵ１１０で被起動ＣＰＵ起動部３１０が被起動ＣＰＵ１１１を起動し（Ｓ１３０、Ｓ１４０）、被起動ＣＰＵ１１１で被起動ＯＳが起動する（Ｓ１５０）。
ＯＳを切り替える必要があるときには（Ｓ１６０）、いずれかのＣＰＵでＯＳ切替部３００がＯＳを切り替える（Ｓ１７０）。
【００３３】
以下に、各処理（Ｓ１１０〜Ｓ１７０）の詳細について説明する。
【００３４】
＜Ｓ１１０：初期起動ＣＰＵ起動処理＞
マルチＣＰＵ計算機１００に電源が入ると、マルチＣＰＵ計算機１００の起動処理により初期起動ＣＰＵ１１０が起動される。
Ｓ１１０の後、処理はＳ１２０に進む。
【００３５】
＜Ｓ１２０：初期起動ＯＳ起動処理＞
初期起動ＣＰＵ１１０が起動すると、マルチＣＰＵ計算機１００の起動処理により初期起動ＯＳ起動部２０１が初期起動ＣＰＵ１１０で動作して初期起動ＯＳ２００が起動する。
【００３６】
図３は、実施の形態１における初期起動ＯＳ起動処理（Ｓ１２０）のフローチャートである。
初期起動ＯＳ起動処理（Ｓ１２０）について、図３に基づいて以下に説明する。
以下に説明する各処理（Ｓ１２１〜Ｓ１２５）は、初期起動ＯＳ起動部２０１が初期起動ＣＰＵ１１０を用いて実行する。
【００３７】
＜Ｓ１２１＞
初期起動ＯＳ起動部２０１は、初期起動ＣＰＵ１１０を初期化する。
ＣＰＵの初期化とは、主記憶装置１２０に記憶される割込みテーブル（図示省略）のメモリアドレスの設定や動作モード（１６ビットモードまたは３２ビットモードまたは６４ビットモード）の設定など、ＣＰＵのアーキテクチャ依存部分に関する初期設定を行うことである。
例えば、初期起動ＯＳ起動部２０１は初期起動ＣＰＵ１１０の所定のレジスタに所定の初期値を設定する。
Ｓ１２１の後、処理はＳ１２２に進む。
【００３８】
＜Ｓ１２２＞
初期起動ＯＳ起動部２０１は、各外部デバイスを所定の処理により初期化する。
例えば、初期起動ＯＳ起動部２０１は、各外部デバイス内のコントローラ（制御プログラム）にＣＰＵへのデータ転送速度などの動作モードを初期設定する。
Ｓ１２２の後、処理はＳ１２３に進む。
【００３９】
＜Ｓ１２３＞
初期起動ＯＳ起動部２０１は、被起動ＯＳ（２１０、２２０）用の計算機資源を予約する。
例えば、初期起動ＯＳ起動部２０１は、外部デバイス予約テーブル４１０に基づいて被起動ＯＳ用の外部デバイスを予約する。
【００４０】
図４は、実施の形態１における外部デバイス予約テーブル４１０の構造を示す図である。
実施の形態１における外部デバイス予約テーブル４１０の構造について、図４に基づいて以下に説明する。
【００４１】
外部デバイス予約テーブル４１０には、各外部デバイスを識別する外部デバイス番号４１１と各外部デバイスを割り当てられたＯＳを識別するＯＳ番号４１２とが予め設定されている。
以下、外部デバイス番号４１１として各外部デバイスの符号を用い、ＯＳ番号４１２として各ＯＳの符号を用いて説明する。
図４の外部デバイス予約テーブル４１０は、初期起動ＯＳ２００に外部デバイスａ１９１と外部デバイスｂ１９２とが割り当てられ、被起動ＯＳａ２１０に外部デバイスｃ１９３が割り当てられ、被起動ＯＳｂ２２０に外部デバイスｄ１９４が割り当てられていることを示している。
【００４２】
外部デバイス予約テーブル４１０が図４の設定値を示す場合、Ｓ１２３（図３）において、初期起動ＯＳ起動部２０１は外部デバイスａ１９１と外部デバイスｂ１９２とを自ＯＳに割り当てられた外部デバイスとして自ＯＳ用のメモリ領域に設定する。
これにより、初期起動ＯＳ起動部２０１が他のＯＳに割り当てられた外部デバイスを使用することはなく、被起動ＯＳ用の外部デバイスが予約される。
【００４３】
Ｓ１２３（図３）の後、処理はＳ１２４に進む。
【００４４】
＜Ｓ１２４＞
初期起動ＯＳ起動部２０１は、初期起動ＯＳ２００のデータ構造を初期化する。
例えば、初期起動ＯＳ起動部２０１は、初期起動ＯＳ２００用のメモリ管理テーブルや割込みテーブル（図示省略）を初期設定する。
また、初期起動ＯＳ起動部２０１は、ＯＳ管理テーブル４００に自ＯＳが起動したことを設定し、ＯＳ動作ＣＰＵテーブル４２０に自ＯＳが初期起動ＣＰＵ１１０で起動したことを設定する。
【００４５】
図５は、実施の形態１におけるＯＳ管理テーブル４００の構造を示す図である。
実施の形態１におけるＯＳ管理テーブル４００の構造について、図５に基づいて以下に説明する。
【００４６】
ＯＳ管理テーブル４００には、各ＯＳ（と被起動ＣＰＵ起動部３１０）のＯＳ番号４０１毎にＯＳ起動情報４０２、ＯＳコード４０３およびＯＳコンテキスト４０４の初期値が予め設定されている。被起動ＣＰＵ起動部３１０は、ＯＳの一つとして扱われ、ＯＳ管理テーブル４００と後述するＯＳ動作ＣＰＵテーブル４２０とで管理されるものとする。
ＯＳ番号４０１には、各ＯＳを識別する番号が設定される。以下、ＯＳ番号４０１として各ＯＳの符号を用いて説明する。
ＯＳ起動情報４０２には、当該ＯＳの起動状態として「起動済」または「未起動」が設定される。ＯＳ起動情報４０２の初期値は「未起動」である。
ＯＳコード４０３には、当該ＯＳに実行させる実行コードが記憶されているメモリ領域のアドレスが設定される。初期起動ＯＳ２００のＯＳコード４０３の初期値は初期起動ＯＳ起動部２０１のアドレスであり、被起動ＯＳａ２１０と被起動ＯＳｂ２２０とのＯＳコード４０３の初期値はそれぞれの被起動ＯＳ起動部２１１のアドレスである。また、被起動ＣＰＵ起動部３１０のＯＳコード４０３の初期値は被起動ＣＰＵ初期起動部３１１のアドレスである。ＯＳコード４０３の設定値（被起動ＣＰＵ起動部３１０の設定値を除く）は、ＣＰＵで動作するＯＳが切り替わるときに変更される。被起動ＣＰＵ起動部３１０のＯＳコード４０３の設定値の変更は不要である。
ＯＳコンテキスト４０４には、ＯＳが動作を始めるために必要な情報（コンテキストまたはコンテキストが設定されるメモリ領域のアドレス）が設定される。ＯＳコンテキスト４０４の設定値（被起動ＣＰＵ起動部３１０の設定値を除く）は、ＣＰＵで動作するＯＳが切り替わるときに変更される。被起動ＣＰＵ起動部３１０のＯＳコンテキスト４０４の設定値の変更は不要である。
【００４７】
Ｓ１２４（図３）において、初期起動ＯＳ起動部２０１は、初期起動ＯＳ２００についてＯＳ管理テーブル４００のＯＳ起動情報４０２を「未起動」から「起動済」に変更する。
【００４８】
図６は、実施の形態１におけるＯＳ動作ＣＰＵテーブル４２０の構造を示す図である。
実施の形態１におけるＯＳ動作ＣＰＵテーブル４２０の構造について、図６に基づいて以下に説明する。
【００４９】
ＯＳ動作ＣＰＵテーブル４２０には、各ＯＳ（と被起動ＣＰＵ起動部３１０）を識別するＯＳ番号４２１と当該ＯＳが動作しているＣＰＵを識別するＣＰＵ番号４２２とが設定される。
ＯＳ番号４２１には、各ＯＳの識別番号が予め設定されている。
ＣＰＵ番号４２２は、各ＯＳが起動または動作を再開したときに設定される。
以下、ＯＳ番号４２１として各ＯＳの符号を用い、ＣＰＵ番号４２２として各ＣＰＵの符号を用いて説明する。
【００５０】
Ｓ１２４（図３）において、初期起動ＣＰＵ１１０で動作している初期起動ＯＳ起動部２０１は、初期起動ＯＳ２００についてＯＳ動作ＣＰＵテーブル４２０のＣＰＵ番号４２２に「１１０」を設定する。
【００５１】
Ｓ１２４の後、処理はＳ１２５に進む。
【００５２】
＜Ｓ１２５＞
初期起動ＯＳ起動部２０１は、初期起動ＯＳ２００の所定の初期プロセスを作成する。
初期プロセスの作成とは、初期プロセスを実行するためのメモリ領域の確保、外部デバイス（例えば、ハードディスク）からメモリ領域への初期プロセスの読み込み、ＣＰＵのレジスタへの初期プロセスの起動設定を意味する。
初期プロセスの作成により、初期プロセスが動作し、所定の処理（例えば、ログイン画面の表示）が行われる。
Ｓ１２５の後、初期起動ＯＳ起動処理（Ｓ１２０）は終了する。
【００５３】
図２に戻り、マルチＯＳ拡張方式の説明を続ける。
Ｓ１２０の後、処理はＳ１３０、Ｓ１４０に進む。
【００５４】
＜Ｓ１３０、Ｓ１４０：ＯＳ切替処理、被起動ＣＰＵ起動処理＞
ここで、被起動ＯＳａ２１０（または被起動ＯＳｂ２２０、Ｓ１５０まで以下同じ）を起動する特定のタイミングになったものとする。例えば、特定のタイミングとは、利用者から初期起動ＯＳ２００に対して被起動ＯＳａ２１０の起動を指定されたときや被起動ＯＳａ２１０用に予約された外部デバイスから初期起動ＣＰＵ１１０へ割込み要求があったときである。
このとき、ＯＳ切替部３００が初期起動ＣＰＵ１１０で動作して被起動ＣＰＵ起動部３１０を呼出し（Ｓ１３０）、被起動ＣＰＵ起動部３１０が初期起動ＣＰＵ１１０から被起動ＣＰＵ１１１を起動する（Ｓ１４０）。
【００５５】
図７は、実施の形態１におけるＯＳ切替処理（Ｓ１３０、Ｓ１７０）のフローチャートである。
実施の形態１におけるＯＳ切替処理（Ｓ１３０）について、図７に基づいて以下に説明する。
【００５６】
＜Ｓ１３１＞
ＯＳ切替部３００は、動作中のＯＳ（初期起動ＯＳ２００）のコンテキストをＯＳ管理テーブル４００のＯＳコンテキスト４０４に設定して保存する。
また、ＯＳ切替部３００は、動作中のＯＳの次の実行コードのメモリアドレスをＯＳ管理テーブル４００のＯＳコード４０３に設定する。
Ｓ１３１の後、処理はＳ１３２に進む。
【００５７】
＜Ｓ１３２＞
ＯＳ切替部３００は、新たに動作させるＯＳ（被起動ＯＳａ２１０）についてＯＳ管理テーブル４００のＯＳ起動情報４０２を参照する。
但し、ＯＳ切替部３００は、被起動ＣＰＵ１１１が未起動である場合には新たに動作させるＯＳのＯＳ起動情報４０２の代わりに、被起動ＣＰＵ起動部３１０のＯＳ起動情報４０２を参照する。
このとき、被起動ＣＰＵ起動部３１０のＯＳ起動情報４０２は「未起動」であるため、処理はＳ１３３に進む。
【００５８】
＜Ｓ１３３＞
ＯＳ切替部３００は、被起動ＣＰＵ起動部３１０の実行コードを所定の外部デバイス（例えば、ハードディスク）から所定のメモリ領域に読み込む。所定のメモリ領域は、ＯＳ管理テーブル４００内の被起動ＣＰＵ起動部３１０のＯＳコード４０３に示される領域である。実行コードは、テキスト（命令、関数）やスタックともいう。
Ｓ１３３の後、処理はＳ１３４に進む。
【００５９】
＜Ｓ１３４＞
ＯＳ切替部３００は、被起動ＣＰＵ起動部３１０についてＯＳ管理テーブル４００のＯＳ起動情報４０２を「未起動」から「起動済」に変更する。
そして、ＯＳ切替部３００は、ＯＳコード４０３に基づいて被起動ＣＰＵ起動部３１０の実行コードを呼出す。
実行コードの呼出しにより、被起動ＣＰＵ起動部３１０は被起動ＣＰＵ起動処理（Ｓ１４０）を開始する。
Ｓ１３４の後、ＯＳ切替処理（Ｓ１３０）は終了する。
【００６０】
図８は、実施の形態１における被起動ＣＰＵ起動処理（Ｓ１４０）のフローチャートである。
実施の形態１における被起動ＣＰＵ起動処理（Ｓ１４０）について、図８に基づいて以下に説明する。
被起動ＣＰＵ初期起動部３１１は以下に説明するＳ１４１〜Ｓ１４３、Ｓ１４８を初期起動ＣＰＵ１１０を用いて実行し、被起動ＣＰＵ初期化部３１２は以下に説明するＳ１４４〜Ｓ１４７を被起動ＣＰＵ１１１を用いて実行する。
【００６１】
＜Ｓ１４１＞
被起動ＣＰＵ初期起動部３１１は、所定のメモリ領域に被起動ＣＰＵ初期化部３１２の実行コードを被起動ＣＰＵ１１１の起動エントリとして設定する。
Ｓ１４１の後、処理はＳ１４２に進む。
【００６２】
＜Ｓ１４２＞
被起動ＣＰＵ初期起動部３１１は、被起動ＣＰＵ１１１を起動する。
Ｓ１４２の後、初期起動ＣＰＵ１１０での処理はＳ１４３に進み、被起動ＣＰＵ１１１での処理はＳ１４４に進む。
【００６３】
＜Ｓ１４３＞
初期起動ＣＰＵ１１０において、被起動ＣＰＵ初期起動部３１１は被起動ＣＰＵ１１１の起動完了を待つ。
【００６４】
＜Ｓ１４４＞
被起動ＣＰＵ１１１において、被起動ＣＰＵ初期化部３１２は被起動ＣＰＵ１１１を初期化する。被起動ＣＰＵ１１１の初期化は、初期起動ＣＰＵ１１０の初期化（Ｓ１２１）と同様である。
例えば、被起動ＣＰＵ初期化部３１２は、被起動ＣＰＵ１１１の所定のレジスタを初期設定する。
Ｓ１４４の後、処理はＳ１４５に進む。
【００６５】
＜Ｓ１４５＞
被起動ＣＰＵ初期化部３１２は、新たに動作するＯＳ（被起動ＯＳａ２１０）用に予約されている外部デバイスを外部デバイス予約テーブル４１０を参照して特定し、当該外部デバイスを使用できるようにする。
例えば、被起動ＣＰＵ初期化部３１２は、新たに動作するＯＳが起動される被起動ＣＰＵ１１１を割込み先のＣＰＵとして当該外部デバイスに割込み設定を行う。また、被起動ＣＰＵ初期化部３１２は、当該外部デバイスがＳ１２２において初期化されないデバイスであれば、当該外部デバイスを初期化する。
Ｓ１４５の後、処理はＳ１４６に進む。
【００６６】
＜Ｓ１４６＞
被起動ＣＰＵ初期化部３１２は、被起動ＣＰＵ１１１の起動完了を初期起動ＣＰＵ１１０で動作している被起動ＣＰＵ初期起動部３１１に通知する。
例えば、被起動ＣＰＵ初期化部３１２は、初期起動ＣＰＵ１１０への割込みや所定のメモリ領域へのフラグの設定により、被起動ＣＰＵ１１１の起動完了を被起動ＣＰＵ初期起動部３１１に通知する。
Ｓ１４６の後、被起動ＣＰＵ１１１での処理はＳ１４７に進み、初期起動ＣＰＵ１１０での処理はＳ１４８に進む。
【００６７】
＜Ｓ１４７＞
被起動ＣＰＵ初期化部３１２は、被起動ＯＳａ２１０の実行コードを所定の外部デバイスから被起動ＯＳａ２１０用のメモリ領域に読み込む。
また、被起動ＣＰＵ初期化部３１２は、ＯＳ管理テーブル４００内の被起動ＯＳａ２１０のＯＳ起動情報４０２を「未起動」から「起動済」に変更する。
そして、被起動ＣＰＵ初期化部３１２は、被起動ＯＳａ２１０の被起動ＯＳ起動部２１１を呼出す。
Ｓ１４７の後、被起動ＣＰＵ１１１において被起動ＣＰＵ起動処理（Ｓ１４０）は終了する。
【００６８】
＜Ｓ１４８＞
被起動ＣＰＵ初期起動部３１１は、ＯＳ動作ＣＰＵテーブル４２０内の被起動ＯＳａ２１０のＣＰＵ番号４２２に被起動ＯＳａ２１０を起動したＣＰＵの番号「１１１」を設定する。
また、被起動ＣＰＵ初期起動部３１１は、ＯＳ管理テーブル４００内の被起動ＣＰＵ起動部３１０のＯＳ起動情報４０２を「起動済」から「未起動」に変更する。
そして、被起動ＣＰＵ初期起動部３１１は、被起動ＣＰＵ起動部３１０から初期起動ＯＳ２００へのＯＳの切り替えをＯＳ切替部３００に要求する。被起動ＣＰＵ初期起動部３１１から要求を受けたＯＳ切替部３００は、ＯＳ管理テーブル４００内の初期起動ＯＳ２００のＯＳコンテキスト４０４を初期起動ＣＰＵ１１０のレジスタに設定する。初期起動ＣＰＵ１１０は、レジスタに設定されたＯＳコンテキスト４０４に基づいて初期起動ＯＳ２００の動作を再開させる。
Ｓ１４８の後、初期起動ＣＰＵ１１０において被起動ＣＰＵ起動処理（Ｓ１４０）は終了する。
【００６９】
図２に戻り、マルチＯＳ拡張方式の説明を続ける。
Ｓ１３０、Ｓ１４０の後、処理はＳ１５０に進む。
【００７０】
＜Ｓ１５０：被起動ＯＳ起動処理＞
Ｓ１４７において呼出された被起動ＯＳ起動部２１１は、被起動ＣＰＵ１１１で被起動ＯＳａ２１０を起動する。
【００７１】
図９は、実施の形態１における被起動ＯＳ起動処理（Ｓ１５０）のフローチャートである。
実施の形態１における被起動ＯＳ起動処理（Ｓ１５０）について、図９に基づいて以下に説明する。
被起動ＯＳ起動部２１１は、以下に説明する処理を被起動ＣＰＵ１１１を用いて実行する。
【００７２】
＜Ｓ１５１＞
被起動ＯＳ起動部２１１は、被起動ＯＳａ２１０用に予約された計算機資源を確認する。
例えば、被起動ＯＳ起動部２１１は、被起動ＯＳａ２１０用のメモリ領域に予め設定される外部デバイスの番号と外部デバイス予約テーブル４１０に被起動ＯＳａ２１０用として設定されている外部デバイス番号４１１とを比較し、被起動ＯＳａ２１０用に予約された外部デバイスを確認する。例えば、メモリ領域と外部デバイス予約テーブル４１０とのいずれにしか設定されていない外部デバイスがある場合、被起動ＯＳａ２１０は当該外部デバイスを使用しない。
Ｓ１５１の後、処理はＳ１５２に進む。
【００７３】
＜Ｓ１５２＞
被起動ＯＳ起動部２１１は、初期起動ＯＳ起動部２０１と同様に（Ｓ１２４）、被起動ＯＳａ２１０のデータ構造を初期化する。
Ｓ１５２の後、処理はＳ１５３に進む。
【００７４】
＜Ｓ１５３＞
被起動ＯＳ起動部２１１は、初期起動ＯＳ起動部２０１と同様に（Ｓ１２５）、被起動ＯＳａ２１０の初期プロセスを作成する。
Ｓ１５３の後、被起動ＯＳ起動処理（Ｓ１５０）は終了する。
【００７５】
図２に戻り、マルチＯＳ拡張方式の説明を続ける。
Ｓ１５０の後、処理はＳ１６０に進む。
【００７６】
＜Ｓ１６０＞
初期起動ＣＰＵ１１０で動作するＯＳ（例えば、初期起動ＯＳ２００）または被起動ＣＰＵ１１１で動作するＯＳ（例えば、被起動ＯＳａ２１０）を他のＯＳ（例えば、被起動ＯＳｂ２２０）に切り替える場合（ＹＥＳ）、処理はＳ１７０に進む。
例えば、他のＯＳに切り替える場合とは、利用者からＯＳの切り替え指示があった場合、動作していないＯＳ用に予約された外部デバイスから割込み要求があった場合、動作中のＯＳが外部デバイスからの割込み待ちになったためＣＰＵが空いた場合などである。
【００７７】
＜Ｓ１７０：ＯＳ切替処理＞
ＯＳ切替部３００は、初期起動ＣＰＵ１１０または被起動ＣＰＵ１１１で動作するＯＳを他のＯＳに切り替える。
ＯＳ切替処理（Ｓ１７０）について、図７に基づいて以下に説明する。
【００７８】
＜Ｓ１７１＞
ＯＳ切替部３００は、動作中のＯＳ（例えば、被起動ＯＳａ２１０）のコンテキストをＯＳ管理テーブル４００のＯＳコンテキスト４０４に設定して保存する。
Ｓ１７１の後、処理はＳ１７２に進む。
【００７９】
＜Ｓ１７２＞
ＯＳ切替部３００は、新たに動作させるＯＳ（例えば、被起動ＯＳｂ２２０）についてＯＳ管理テーブル４００のＯＳ起動情報４０２を参照する。
ＯＳ起動情報４０２が「未起動」である場合、処理はＳ１７３に進み、ＯＳ起動情報４０２が「起動済」である場合、処理はＳ１７５に進む。
【００８０】
＜Ｓ１７３＞
Ｓ１７２においてＯＳ起動情報４０２が「未起動」である場合、新たに動作させるＯＳは被起動ＯＳａ２１０または被起動ＯＳｂ２２０である。
ＯＳ切替部３００は、新たに動作させるＯＳの被起動ＯＳ起動部２１１の実行コードを所定の外部デバイスから当該ＯＳ用のメモリ領域に読み込む。
Ｓ１７３の後、処理はＳ１７４に進む。
【００８１】
＜Ｓ１７４＞
ＯＳ切替部３００は、新たに動作させるＯＳについてＯＳ管理テーブル４００のＯＳ起動情報４０２を「未起動」から「起動」に変更する。
そして、ＯＳ切替部３００は、ＯＳ管理テーブル４００内のＯＳコード４０３に基づいて、新たに動作させるＯＳの被起動ＯＳ起動部２１１の実行コードを呼出す。
実行コードの呼出しにより、被起動ＯＳ起動処理（Ｓ１５０）（図９参照）が実行され、新たに動作させるＯＳが起動する。
Ｓ１７４の後、ＯＳ切替処理（Ｓ１７０）は終了する。
【００８２】
＜Ｓ１７５＞
Ｓ１７２においてＯＳ起動情報４０２が「起動済」である場合、新たに動作させるＯＳのコンテキストは過去のＯＳ切替処理（Ｓ１７１）においてＯＳ管理テーブル４００のＯＳコンテキスト４０４に保存されている。
ＯＳ切替部３００は、新たに動作させるＯＳのＯＳコンテキスト４０４をＯＳを切り替えるＣＰＵのレジスタに設定する。ＣＰＵは、レジスタに設定されたＯＳコンテキスト４０４に基づいて、新たに動作させるＯＳの動作を再開させる。
Ｓ１７５の後、ＯＳ切替処理（Ｓ１７０）は終了する。
【００８３】
図２において、Ｓ１６０〜Ｓ１７０はマルチＣＰＵ計算機１００の電源が落とされるまで繰り返し実行される。
【００８４】
実施の形態１において、以下のようなマルチＯＳ拡張方式について説明した。
マルチＯＳ拡張方式は、複数のＣＰＵ（もしくはＣＰＵコア）を持つ計算機システム（マルチＣＰＵ計算機１００）でマルチＯＳを動作させる。ここで、マルチＯＳとは、各ＯＳに計算機資源を予約し、１つのＣＰＵを切り替えながら共有する複数のＯＳである。
マルチＯＳ拡張方式は（１）ＣＰＵ起動手段（被起動ＣＰＵ初期起動部３１１）と（２）ＣＰＵ初期化手段（被起動ＣＰＵ初期化部３１２）を計算機システムに備える。
（１）ＣＰＵ起動手段は、他のＣＰＵを起動する。
（２）ＣＰＵ初期化手段は、他のＣＰＵを初期化して動作中のＣＰＵと同じ状態にし、起動を要求された被起動ＯＳを他のＣＰＵにて動作させる。
マルチＯＳ拡張方式は、上記（１，２）により、共有するＣＰＵでしか起動できない被起動ＯＳを他のＣＰＵにて起動可能にする。
【００８５】
以上のように、マルチＯＳ拡張方式は、被起動ＯＳの起動直前に、ＣＰＵ起動手段により停止中のＣＰＵを起動し、ＣＰＵ初期化手段により被起動ＯＳの起動に必要な計算機環境を整える。
これにより、被起動ＯＳに変更を加えることなく、従来どおり初期起動ＯＳと被起動ＯＳとを１つのＣＰＵ上で同時動作させることも、初期起動ＯＳと被起動ＯＳとをそれぞれ独立したＣＰＵ上で並行動作させることも可能となる。今までは独立したＣＰＵ上で動作させるための変更をＯＳに加える必要があった。
被起動ＯＳに変更を加える必要がないため、複数のＣＰＵを備える計算機でも従来のマルチＯＳのソースコードをそのまま使用でき、計算機システムの開発期間の短縮や保守性の向上が見込める。
【００８６】
実施の形態１において、ＣＰＵが３つ以上あっても、被起動ＯＳが３つ以上あっても、ＣＰＵの数とＯＳの数（初期起動ＯＳ＋各被起動ＯＳ）が同じであっても構わない。
【００８７】
実施の形態２．
ＯＳを切り替える際に保存するコンテキストがＯＳ毎に異なる形態について説明する。
以下、実施の形態１と異なる事項について主に説明する。説明を省略する事項は実施の形態１と同様である。
【００８８】
図１０は、実施の形態２におけるマルチＣＰＵ計算機１００の構成図である。
実施の形態２におけるマルチＣＰＵ計算機１００の構成について、図１０に基づいて以下に説明する。
【００８９】
マルチＣＰＵ計算機１００は、実施の形態１の構成（図１参照）に加えて、初期起動ＯＳ２００および各被起動ＯＳがＯＳ一時停止部（２０２、２１２）とＯＳ再開部（２０３、２１３）とを備える。
【００９０】
ＯＳ一時停止部は、自ＯＳの再開に必要なコンテキストのみを自ＯＳ用のメモリ領域に保存する。ＯＳ一時停止部により保存される初期起動ＯＳ２００のコンテキスト、被起動ＯＳａ２１０のコンテキストおよび被起動ＯＳｂ２２０のコンテキストは、種類や数が同じでも違っても構わない。
【００９１】
ＯＳ再開部は、ＯＳ一時停止部により自ＯＳ用のメモリ領域に保存された自ＯＳのコンテキストを用いて自ＯＳの動作を再開させる。
【００９２】
図１１は、実施の形態２におけるＯＳ管理テーブル４００の構造を示す図である。
ＯＳ管理テーブル４００は、実施の形態１の構造（図５参照）からＯＳコンテキスト４０４を削除したものである。
各ＯＳのコンテキストはそれぞれのメモリ領域に保存されるため、ＯＳ管理テーブル４００にＯＳコンテキスト４０４を設定する必要はない。
【００９３】
マルチ拡張方式（図２参照）において、ＯＳ切替処理（Ｓ１３０、Ｓ１７０）が実行される前に、ＯＳ一時停止部によるＯＳ一時停止処理が実行される。
例えば、Ｓ１３０の前（被起動ＣＰＵの起動前）、初期起動ＯＳ２００のＯＳ一時停止部２０２が動作する。
また例えば、Ｓ１７０の前（被起動ＣＰＵの起動後）において新たに動作する被起動ＯＳが未起動である場合、利用者から被起動ＯＳの起動を指定されたＯＳのＯＳ一時停止部が動作する。
また例えば、Ｓ１７０の前（被起動ＣＰＵの起動後）において新たに動作するＯＳが起動済である場合、新たに動作するＯＳが前回動作したＣＰＵで動作中のＯＳのＯＳ一時停止部が動作する。
【００９４】
図１２は、実施の形態２におけるＯＳ一時停止処理のフローチャートである。
実施の形態２におけるＯＳ一時停止処理について、図１２に基づいて以下に説明する。
【００９５】
＜Ｓ２００＞
ＯＳ一時停止部は、自ＯＳのコンテキストを自ＯＳ用のメモリ領域に保存する。
また、ＯＳ一時停止部は、ＯＳ再開部の実行コードのメモリアドレスをＯＳ管理テーブル４００のＯＳコード４０３に設定する。
Ｓ２００の後、処理はＳ２１０に進む。
【００９６】
＜Ｓ２１０＞
ＯＳ一時停止部は、ＯＳ切替部３００の実行コードを呼出す。
実行コードの呼出しにより、ＯＳ切替処理（Ｓ１３０、Ｓ１７０）が実行される。
Ｓ２１０の後、ＯＳ一時停止処理は終了する。
【００９７】
図１３は、実施の形態２におけるＯＳ切替処理（Ｓ１３０、Ｓ１７０）のフローチャートである。
実施の形態２におけるＯＳ切替処理（Ｓ１３０、Ｓ１７０）について、図１３に基づいて以下に説明する。
【００９８】
ＯＳ切替処理（Ｓ１３０、Ｓ１７０）は、実施の形態１（図７参照）に対して、Ｓ１３１（Ｓ１７１）を削除し、Ｓ１７５をＳ１７５Ｂに変更したものである。
以下、Ｓ１７５Ｂについて説明し、他の処理の説明を省略する。
【００９９】
＜Ｓ１７５Ｂ＞
ＯＳ切替部３００は、ＯＳ管理テーブル４００内のＯＳコード４０３に基づいて、新たに動作させるＯＳのＯＳ再開部の実行コードを呼出す。
実行コードの呼出しにより、ＯＳ再開部によるＯＳ再開処理が実行される。
Ｓ１７５Ｂの後、ＯＳ切替処理は終了する。
【０１００】
図１４は、実施の形態２におけるＯＳ再開処理のフローチャートである。
実施の形態２におけるＯＳ再開処理について、図１４に基づいて以下に説明する。
【０１０１】
＜Ｓ２２０＞
ＯＳ再開部は、自ＯＳのメモリ領域に保存されている自ＯＳのコンテキストをＯＳを切り替えるＣＰＵのレジスタに設定する。ＣＰＵは、レジスタに設定されたコンテキストに基づいて、当該ＯＳの動作を再開させる。
Ｓ２２０の後、ＯＳ再開処理は終了する。
【０１０２】
例えば、上記のマルチＯＳ拡張方式により、以下のような処理が行われる。
初期起動ＯＳ２００のＯＳ一時停止部２０２（初期起動ＯＳ情報保存部の一例）は、初期起動ＣＰＵ１１０で動作している初期起動ＯＳ２００のコンテキストを主記憶装置１２０に保存する。
ＯＳ切替部３００は、初期起動ＯＳ２００の代わりに被起動ＣＰＵ起動部３１０を初期起動ＣＰＵ１１０で動作させる。
初期起動ＯＳ２００のＯＳ再開部２０３（初期起動ＯＳ再開部の一例）は、ＯＳ切替部ＯＳ切替部３００により動作された被起動ＣＰＵ起動部３１０の代わりに初期起動ＯＳ２００をＯＳ一時停止部２０２により保存されたコンテキストを用いて初期起動ＣＰＵ１１０で動作させる。
【０１０３】
また例えば、上記のマルチＯＳ拡張方式により、以下のような処理が行われる。
被起動ＯＳａ２１０のＯＳ一時停止部２１２（被起動ＯＳ情報保存部の一例）は、被起動ＣＰＵ１１１で動作している被起動ＯＳａ２１０のコンテキストであって初期起動ＯＳ２００のコンテキストとは異なるコンテキストを主記憶装置１２０に保存する。
被起動ＯＳｂ２２０の被起動ＯＳ起動部２１１（ＯＳ第２起動部の一例）は、被起動ＯＳｂ２２０を被起動ＣＰＵ１１１を用いて起動する。
被起動ＯＳａ２１０のＯＳ再開部２１３（被起動ＯＳ再開部の一例）は、被起動ＯＳｂ２２０の代わりに被起動ＯＳａ２１０をＯＳ一時停止部２１２により保存されたコンテキストを用いて被起動ＣＰＵ１１１で動作させる。
【０１０４】
また例えば、上記のマルチＯＳ拡張方式により、以下のような処理が行われる。
初期起動ＯＳ２００のＯＳ一時停止部２０２（初期起動ＯＳ情報保存部の一例）は初期起動ＣＰＵ１１０で動作している初期起動ＯＳ２００のコンテキストを保存する。
被起動ＯＳｂ２２０の被起動ＯＳ起動部２１１（ＯＳ第２起動部の一例）は、被起動ＯＳｂ２２０を初期起動ＣＰＵ１１０を用いて起動する。
被起動ＯＳｂ２２０のＯＳ一時停止部２１２（被起動第２ＯＳ情報保存部の一例）は、被起動ＯＳｂ２２０のコンテキストであって初期起動ＯＳ２００のコンテキストとは異なるコンテキストを主記憶装置１２０に保存する。
初期起動ＯＳ２００のＯＳ再開部２０３（初期起動ＯＳ再開部の一例）は、被起動ＯＳｂ２２０の代わりに初期起動ＯＳ２００をＯＳ一時停止部２０２により保存されたコンテキストを用いて初期起動ＣＰＵ１１０で動作させる。
被起動ＯＳｂ２２０のＯＳ再開部２１３（被起動第２ＯＳ再開部の一例）は、初期起動ＯＳ２００の代わりに被起動ＯＳｂ２２０をＯＳ再開部２１３により保存されたコンテキストを用いて初期起動ＣＰＵ１１０で動作させる。
【０１０５】
実施の形態２では、以下のようなマルチＯＳ拡張方式について説明した。
マルチＯＳ拡張方式は、（３）ＯＳ一時停止手段（２０２、２１２）と（４）ＯＳ再開手段（２０３、２１３）とを各ＯＳに備える。
（３）ＯＳ一時停止手段は、そのＯＳの動作に必要な現在の情報（コンテキスト）を保存し、ＯＳを一時停止させる。
（４）ＯＳ再開手段は、ＯＳ一時停止手段により保存された情報をもとに、ＯＳを再開させる。
マルチＯＳ拡張方式は、上記（３，４）により、各ＯＳのデータを各ＯＳの領域で保護し、不要な情報（他のＯＳの再開には必要であるが自ＯＳの再開には不要な情報）を削減することにより、高速なＯＳ切り替えを可能にする。
【０１０６】
以上のように、ＯＳコンテキストの保存場所を各ＯＳに持たせることにより、各ＯＳに必要な特別な情報のみ保存し、不要な情報を排除することにより、主記憶領域の節約やＯＳ切替の高速化が可能である。
【０１０７】
実施の形態３．
各外部デバイスからの割込みを特定のＣＰＵで受け付け、他のＣＰＵで動作するＯＳに割込みを通知する形態について説明する。
以下、実施の形態１と異なる事項について主に説明する。説明を省略する事項は実施の形態１と同様である。
【０１０８】
図１５は、実施の形態３におけるマルチＣＰＵ計算機１００の構成図である。
実施の形態３におけるマルチＣＰＵ計算機１００の構成について、図１５に基づいて以下に説明する。
【０１０９】
マルチＣＰＵ計算機１００は、実施の形態１の構成（図１参照）に加えて、被起動ＣＰＵ起動部３１０が割込み転送部３１３を備える。
さらに、マルチＣＰＵ計算機１００は、被起動ＯＳｃ２３０を備える。
【０１１０】
割込み転送部３１３は、外部デバイスから特定のＣＰＵに通知された割込み要求を他のＣＰＵで動作するＯＳに転送する。
例えば、割込み転送部３１３は、被起動ＯＳａ２１０が使用する外部デバイスから初期起動ＣＰＵ１１０に割込み要求が通知された場合、被起動ＯＳａ２１０が動作する被起動ＣＰＵ１１１に割込み要求を転送する。
また例えば、割込み転送部３１３は、初期起動ＯＳ２００が使用する外部デバイスから被起動ＣＰＵ１１１に割込み要求が通知された場合、初期起動ＯＳ２００が動作する初期起動ＣＰＵ１１０に割込み要求を通知する。
【０１１１】
以下、各外部デバイスには割込み要求先のＣＰＵとして初期起動ＣＰＵ１１０が設定されているものとして説明する。各外部デバイスからの割込み要求は初期起動ＣＰＵ１１０に通知され、各外部デバイスから被起動ＣＰＵ１１１に割込み要求は通知されない。
また、初期起動ＣＰＵ１１０で動作しているＯＳを初期起動ＯＳ２００、被起動ＣＰＵ１１１で動作しているＯＳを被起動ＯＳａ２１０とする。
さらに、被起動ＯＳｃ２３０は初期起動ＯＳ２００と切り替わりながら初期起動ＣＰＵ１１０で動作し、被起動ＯＳｂ２２０は被起動ＯＳａ２１０と切り替わりながら被起動ＣＰＵ１１１で動作するものとする。各ＯＳが動作するＣＰＵを示す情報はＯＳ動作ＣＰＵテーブル４２０に設定されているものとする。
【０１１２】
図１６は、実施の形態３における割込み転送処理のフローチャートである。
割込み転送部３１３により実行される割込み転送処理について、図１６に基づいて以下に説明する。
【０１１３】
割込み転送処理は、いずれかの被起動ＯＳ用に予約された外部デバイスから割込み要求があった場合に実行される。初期起動ＯＳ２００用に予約された外部デバイスから割込み要求があった場合、割込み転送処理は実行されず、初期起動ＯＳ２００が割込み要求を処理する。
【０１１４】
＜Ｓ３１０＞
いずれかの被起動ＯＳ用に予約された外部デバイスから割込み要求が通知されたとき、初期起動ＯＳ２００はＯＳ切替部３００に割込み転送部３１３の呼出しを要求し、ＯＳ切替部３００は割込み転送部３１３の実行コードを呼出す。
割込み転送部３１３は、初期起動ＣＰＵ１１０に割込み要求を通知した外部デバイスの予約ＯＳを外部デバイス予約テーブル４１０に基づいて特定する。
さらに、割込み転送部３１３は、特定したＯＳが動作するＣＰＵをＯＳ動作ＣＰＵテーブル４２０に基づいて特定する。
Ｓ３１０の後、処理はＳ３２０に進む。
【０１１５】
＜Ｓ３２０＞
割込み転送部３１３は、Ｓ３２０において特定したＣＰＵが初期起動ＣＰＵ１１０である場合、割込み要求を被起動ＣＰＵ１１１に転送する必要がないと判定し、Ｓ３２０において特定したＣＰＵが被起動ＣＰＵ１１１である場合、割込み要求を被起動ＣＰＵ１１１に転送する必要があると判定する。
割込み要求を被起動ＣＰＵ１１１に転送する必要がある場合（ＹＥＳ）、処理はＳ３３０に進み、割込み要求を被起動ＣＰＵ１１１に転送する必要がない場合（ＮＯ）、処理はＳ３５０に進む。
【０１１６】
＜Ｓ３３０＞
割込み転送部３１３は、割込み要求をＣＰＵ間割込みにより被起動ＣＰＵ１１１に転送する。
Ｓ３３０の後、処理はＳ３４０に進む。
【０１１７】
＜Ｓ３４０＞
被起動ＣＰＵ１１１で動作する被起動ＯＳａ２１０は、転送された割込み要求を通知した外部デバイスの予約ＯＳを外部デバイス予約テーブル４１０に基づいて特定する。
そして、被起動ＯＳａ２１０は、特定したＯＳが自ＯＳである場合、転送された割込み要求を処理し、特定したＯＳが他のＯＳ（被起動ＯＳｂ２２０）である場合、ＯＳ切替部３００の実行コードを呼出す。ＯＳ切替部３００の実行コードの呼出しにより、ＯＳ切替処理（Ｓ１７０）が実行され、被起動ＣＰＵ１１１で動作するＯＳが被起動ＯＳａ２１０から被起動ＯＳｂ２２０に切り替わる。ＯＳ切替処理後、被起動ＯＳｂ２２０は割込み要求を処理する。
Ｓ３４０の後、割込み転送処理は終了する。
【０１１８】
＜Ｓ３５０＞
割込み転送部３１３は、ＯＳ切替部３００の実行コードを呼出す。ＯＳ切替部３００の実行コードの呼出しにより、ＯＳ切替処理（Ｓ１７０）が実行され、初期起動ＣＰＵ１１０で動作するＯＳが初期起動ＯＳ２００から被起動ＯＳｃ２３０に切り替わる。ＯＳ切替処理後、被起動ＯＳｃ２３０は割込み要求を処理する。
Ｓ３５０の後、割込み転送処理は終了する。
【０１１９】
実施の形態３では、以下のようなマルチＯＳ拡張方式について説明した。
マルチＯＳ拡張方式の計算機システムは、外部割込みが特定のＣＰＵに通知されるように制限され、（５）割込み通知手段（割込み転送部３１３）を備える。
（５）割込み通知手段は、外部割込みを他のＯＳが動作するＣＰＵに伝播する。
マルチＯＳ拡張方式は、上記（５）により、割込み通知の制限を隠蔽することができる。
【０１２０】
以上のように、１つのＣＰＵにて外部割込みを受付け、他のＣＰＵへ転送することにより、割り込みを任意のＣＰＵへ通知できない外部デバイスが用いられても、マルチＯＳの動作が可能になる。
【０１２１】
実施の形態３において、実施の形態２で説明したように、ＯＳの切り替え時にＯＳ毎に異なるコンテキストを保存してもよい。
【符号の説明】
【０１２２】
１００  マルチＣＰＵ計算機、１０１  バス、１１０  初期起動ＣＰＵ、１１１  被起動ＣＰＵ、１２０  主記憶装置、１９１  外部デバイスａ、１９２  外部デバイスｂ、１９３  外部デバイスｃ、１９４  外部デバイスｄ、２００  初期起動ＯＳ、２０１  初期起動ＯＳ起動部、２０２  ＯＳ一時停止部、２０３  ＯＳ再開部、２１０  被起動ＯＳａ、２１１  被起動ＯＳ起動部、２１２  ＯＳ一時停止部、２１３  ＯＳ再開部、２２０  被起動ＯＳｂ、２３０  被起動ＯＳｃ、３００  ＯＳ切替部、３１０  被起動ＣＰＵ起動部、３１１  被起動ＣＰＵ初期起動部、３１２  被起動ＣＰＵ初期化部、３１３  割込み転送部、４００  ＯＳ管理テーブル、４０１  ＯＳ番号、４０２  ＯＳ起動情報、４０３  ＯＳコード、４０４  ＯＳコンテキスト、４１０  外部デバイス予約テーブル、４１１  外部デバイス番号、４１２  ＯＳ番号、４２０  ＯＳ動作ＣＰＵテーブル、４２１  ＯＳ番号、４２２  ＣＰＵ番号。
【図１】
2010191886.tif 000003
【図２】
2010191886.tif 000004
【図３】
2010191886.tif 000005
【図４】
2010191886.tif 000006
【図５】
2010191886.tif 000007
【図６】
2010191886.tif 000008
【図７】
2010191886.tif 000009
【図８】
2010191886.tif 000010
【図９】
2010191886.tif 000011
【図１０】
2010191886.tif 000012
【図１１】
2010191886.tif 000013
【図１２】
2010191886.tif 000014
【図１３】
2010191886.tif 000015
【図１４】
2010191886.tif 000016
【図１５】
2010191886.tif 000017
【図１６】
2010191886.tif 000018