(57)【要約】【課題】レジスタの待避・復帰処理を迅速に行うことができる情報処理装置を提供する。【解決手段】バンクレジスタ判定部は、バンクレジスタ、又は非バンクレジスタの取得命令、及びモードの情報を受信して、非バンクレジスタの一覧、又は取得命令において指定されたモードで使用されるバンクレジスタの一覧を返信する。待避レジスタ決定部は、切替え要求時に切替え元のオペレーティングシステムが当該モードを扱い、かつ別のオペレーティングシステムで当該モードを扱う場合に、当該モードのバンクレジスタの待避が必要と判断し、バンクレジスタ判定部から待避が必要なバンクレジスタの一覧を取得する。レジスタ待避・復帰部は、切替え先と、前切替え元のオペレーティングシステムの情報に基づき、待避が必要なバンクレジスタの一覧、及び非バンクレジスタの一覧を待避レジスタ決定部から取得するとともに、待避情報管理部から復帰させるレジスタの情報を取得して、レジスタ情報の待避及び復帰を行う。【選択図】図２−１
2015001947.tif 000002
【特許請求の範囲】
【請求項１】
複数のオペレーティングシステムが複数のモードで稼動可能な情報処理装置であって、
前記オペレーティングシステムのレジスタは、前記モード毎に領域が割り当てられたバンクレジスタと、前記モードで共通に使用される非バンクレジスタとを含み、
前記オペレーティングシステムの切替え命令を検出して、切替えを依頼する命令検出部と、
前記切替え命令が検出された場合に、前記命令検出部からの切替えの依頼に含まれる切替え元の前記オペレーティングシステムと、切替え先の前記オペレーティングシステムとを指定して、レジスタの待避、及び復帰を依頼する切替部と、
前記オペレーティングシステムが稼動可能な前記モードの情報と、前記オペレーティングシステムで使用する前記レジスタのうち切替え時に待避された前記レジスタの情報と、を保持する待避情報管理部と、
前記レジスタが、前記バンクレジスタ又は前記非バンクレジスタのいずれであるかのレジスタ情報を保持し、前記非バンクレジスタの取得命令又は前記バンクレジスタの取得命令と、前記モードの情報と、を受信して、前記非バンクレジスタの一覧又は受信した前記モードで使用される前記バンクレジスタの一覧を返信するバンクレジスタ判定部と、
前記待避情報管理部から切替え元の前記オペレーティングシステムが稼動可能な前記モードを取得し、切替え元の前記オペレーティングシステムが取得した前記モードで稼動可能であり、かつ別の前記オペレーティングシステムが前記モードで稼動可能な場合に、前記モードの前記バンクレジスタの待避が必要と判断し、前記バンクレジスタ判定部に前記モードの情報を渡して待避が必要な前記バンクレジスタの一覧を取得するとともに、前記バンクレジスタ判定部から前記非バンクレジスタの一覧を取得する待避レジスタ決定部と、
前記切替部からの依頼に基づき、待避が必要な前記バンクレジスタ及び前記非バンクレジスタの一覧を前記待避レジスタ決定部から取得するとともに、前記待避情報管理部から切替え先の前記オペレーティングシステムにおいて前回の切替え時に待避された復帰させる前記レジスタの情報を取得して、前記レジスタの待避及び復帰を行うレジスタ待避・復帰部と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記待避レジスタ決定部は、前記モードにおいて前記オペレーティングシステムの処理中断が起きるか否かの情報を受け取り、切替え要求時に切替え元の前記オペレーティングシステムが当該モードで稼動可能であり、別の前記オペレーティングシステムが当該モードで稼動可能な場合であって、かつ、切替え元の前記オペレーティングシステムから受け取った情報が前記処理中断が起こる可能性がないことを示す場合には、指定された前記モードの前記バンクレジスタの待避が不要と判断する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記オペレーティングシステムの前記モード毎に割込みを許可するか否かの設定と、前記モード毎の割込みの状態を保存する割込み状態管理部と、
前記割込みの発生を検出し、割込み入力先の前記オペレーティングシステムで割込み処理が開始したことを前記割込み状態管理部に通知するとともに、前記割込みの終了を検出し、割込み入力先の前記オペレーティングシステムで割込み処理が終了したことを前記割込み状態管理部に通知する割込み検出部と、
割込み可否の設定変更を検出し、割込み入力先の前記オペレーティングシステムの前記割込み状態の更新を行う割込みポリシ判定部と、
を更に備え、
前記待避レジスタ決定部は、現在処理中の前記オペレーティングシステムにおいて、割込み処理を行うモードの前記割込み状態を前記割込み状態管理部から取得し、割込み処理中であって、同じ前記モードにおける別の前記オペレーティングシステムが割込み不可能な場合には、前記バンクレジスタの待避が不要と判定し、割り込み処理を行うモードでない場合もしくは、前期オペレーティングシステムが割込み処理中であって同じ前記モードにおける別の前記オペレーティングシステムが割込み可能な場合には、前記バンクレジスタの待避が必要と判定する
ことを特徴とする請求項１、又は２に記載の情報処理装置。
【請求項４】
複数のプロセッサと、
前記複数のプロセッサ毎に、前記待避情報管理部、及び前記レジスタ待避・復帰部を制御するコア管理部と、
を更に備えることを特徴とする請求項１〜３のいずれか一項に記載の情報処理装置。
【請求項５】
前記オペレーティングシステム毎に、前記モードで稼動可能であるか否かの設定、及び前記モード毎に割込みを許可するか否かの設定の変更を検出し、設定元の前記オペレーティングシステムが前記バンクレジスタを破壊する可能性があるかどうかを判定するとともに、破壊する可能性がある場合であって、別の前記オペレーティングシステムが前記バンクレジスタを利用している場合に、前記バンクレジスタの待避を行う動的設定変更検出部を
さらに備えることを特徴とする請求項３に記載の情報処理装置。
【請求項６】
前記待避レジスタ決定部は、前記オペレーティングシステムから前記モードのセキュリティ設定が有効か無効かを受信し、前記セキュリティ設定が有効の場合には前記バンクレジスタの待避が必要ないと判断した場合であっても、前記バンクレジスタの値をクリアする必要があると判定し、
前記レジスタ待避・復帰部は、前記バンクレジスタの値をクリアする必要があると判定された場合に、前記バンクレジスタの値のクリアを行う
ことを特徴とする請求項１〜５のいずれか一項に記載の情報処理装置。
【請求項７】
複数のオペレーティングシステムが複数のモードで稼動可能であって、前記オペレーティングシステムのレジスタは、前記モード毎に領域が割り当てられたバンクレジスタと、前記モードで共通に使用される非バンクレジスタとを含むコンピュータを、
前記オペレーティングシステムの切替え命令を検出して、切替えを依頼する命令検出部と、
前記切替え命令が検出された場合に、前記命令検出部からの切替えの依頼に含まれる切替え元の前記オペレーティングシステムと、切替え先の前記オペレーティングシステムとを指定して、レジスタの待避、及び復帰をレジスタ待避・復帰部へと依頼する切替部と、
前記オペレーティングシステムが稼動可能な前記モードの情報と、前記オペレーティングシステムで使用する前記レジスタのうち切替え時に待避された前記レジスタの情報と、を保持する待避情報管理部と、
前記レジスタが、前記バンクレジスタ又は前記非バンクレジスタのいずれであるかのレジスタ情報を保持し、前記非バンクレジスタの取得命令又は前記バンクレジスタの取得命令と、前記モードの情報と、を受信して、前記非バンクレジスタの一覧又は受信した前記モードで使用される前記バンクレジスタの一覧を返信するバンクレジスタ判定部と、
前記待避情報管理部から切替え元の前記オペレーティングシステムが稼動可能な前記モードを取得し、切替え元の前記オペレーティングシステムが取得した前記モードで稼動可能であり、かつ別の前記オペレーティングシステムが前記モードで稼動可能な場合に、前記モードの前記バンクレジスタの待避が必要と判断し、前記バンクレジスタ判定部に前記モードの情報を渡して待避が必要な前記バンクレジスタの一覧を取得するとともに、前記バンクレジスタ判定部から前記非バンクレジスタの一覧を取得する待避レジスタ決定部と、
切替え先と、切替え元の前記オペレーティングシステムの情報に基づき、待避が必要な前記バンクレジスタの一覧及び前記非バンクレジスタを前記待避レジスタ決定部から取得するとともに、前記待避情報管理部から切替え先の前記オペレーティングシステムにおいて前回の切替え時に待避された復帰させる前記レジスタの情報を取得して、前記レジスタの待避及び復帰を行うレジスタ待避・復帰部と、
して実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置、プログラムに関する。
【背景技術】
【０００２】
近年、単一の計算機上で複数のオペレーティングシステム（以下、「ＯＳ」とする。）を同時に実行させるための仮想化技術が広く利用されつつある。単一の計算機ではプロセッサのコア数よりも多くＯＳを同時に動作させることは通常できない。コア数以上のＯＳを動作させる場合には、時分割でＯＳの切替えを行いながらプロセッサを動作させる必要があり、ＯＳの切替えを行うソフトウェアとしてモニタ部と呼ばれるプログラムが利用される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−０５０７０５号公報
【特許文献２】特開平１１−３１２０９２号公報
【特許文献３】特開平１０−１７１６７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述したモニタ部はＯＳを切替える際に、切替え元のＯＳが使っていたレジスタを主記憶などの記憶装置に待避させ、切替え先のＯＳが使うレジスタを主記憶などから復帰させる。このＯＳ切替えにおいてモニタ部によるレジスタの待避・復帰処理がＯＳ切替えの速度を制限する要因となっている場合が多く、例えばＡＲＭ（登録商標）のプロセッサなどレジスタ数が多い場合にはこの傾向は顕著である。
【０００５】
本発明の実施形態は、上記に鑑みてなされたものであって、レジスタの待避・復帰処理を迅速に行うことができる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するために、本発明の実施形態は、複数のオペレーティングシステムが複数のモードで稼動可能な情報処理装置であって、前記オペレーティングシステムのレジスタは、前記モード毎に領域が割り当てられたバンクレジスタと、前記モードで共通に使用される非バンクレジスタとを含む。情報処理装置は、命令検出部と、切替部と、待避情報管理部と、バンクレジスタ判定部と、待避レジスタ決定部と、レジスタ待避・復帰部とを備える。
【０００７】
命令検出部は、前記オペレーティングシステムの切替え命令を検出し、切替えを依頼する。切替部は、前記命令検出部からの切替えの依頼に含まれる切替え元の前記オペレーティングシステムと、切替え先の前記オペレーティングシステムとを指定して、レジスタの待避、及び復帰を依頼する。待避情報管理部は、前記オペレーティングシステムで取り扱われる前記モードの情報、及び前記オペレーティングシステムで使用する前記レジスタのうち、切替え時に待避された前記レジスタの情報を保持する。
【０００８】
バンクレジスタ判定部は、前記レジスタが、前記バンクレジスタ、又は前記非バンクレジスタのいずれであるかのレジスタ情報を保持し、前記バンクレジスタ、又は前記非バンクレジスタの取得命令、及び前記モードの情報を受信して、前記非バンクレジスタの一覧、又は前記取得命令において指定された前記モードで使用される前記バンクレジスタの一覧を返信する。
【０００９】
待避レジスタ決定部は、前記オペレーティングシステムにおける前記モードの取り扱いの有無を前記待避情報管理部から取得し、切替え要求時に切替え元の前記オペレーティングシステムが当該モードを扱い、かつ別の前記オペレーティングシステムで当該モードを扱う場合に、当該モードの前記バンクレジスタの待避が必要と判断し、前記バンクレジスタ判定部に当該モード情報を渡して待避が必要な前記バンクレジスタの一覧を取得とともに、前記バンクレジスタ判定部から前記非バンクレジスタの一覧を取得する。
【００１０】
レジスタ待避・復帰部は、切替え先と、前切替え元の前記オペレーティングシステムの情報に基づき、待避が必要なバンクレジスタの一覧、及び非バンクレジスタの一覧を前記待避レジスタ決定部から取得するとともに、前記待避情報管理部から復帰させる前記レジスタの情報を取得して、レジスタ情報の待避及び復帰を行う。
【図面の簡単な説明】
【００１１】
【図１】第１の実施形態の情報処理装置の全体構成を示すブロック図。
【図２−１】第１の実施形態のソフトウェアの機能構成を示すブロック図。
【図２−２】第１の実施形態の変形例のソフトウェアの機能構成を示すブロック図。
【図３】第１の実施形態の起動時の処理フローを示すフローチャート。
【図４】第１の実施形態のバンクレジスタ判定部が管理する表データを示す図。
【図５】第１の実施形態の待避用メモリ部に格納される表データを示す図。
【図６】第１の実施形態の切替え時の処理フローを示すフローチャート。
【図７】第１の実施形態の待避用メモリ部に格納される表データの一例を示す図。
【図８−１】第２の実施形態のソフトウェアの機能構成を示すブロック図。
【図８−２】第２の実施形態の変形例のソフトウェアの機能構成を示すブロック図。
【図９】第２の実施形態の待避用メモリ部に格納される表データの一例を示す図。
【図１０】第２の実施形態のハンドラポリシ情報設定時の処理を示すフローチャート。
【図１１】第２の実施形態のコンテキスト待避処理を示すフローチャート。
【図１２】第３の実施形態のソフトウェアの機能構成を示すブロック図。
【図１３】第３の実施形態の待避用メモリ部に格納される表データの一例を示す図。
【図１４】第３の実施形態のコンテキスト待避処理を示すフローチャート。
【図１５】第３の実施形態の割込み設定時の処理フローを示すフローチャート。
【図１６】第３の実施形態の割込み発生時の処理フローを示すフローチャート。
【図１７】第３の実施形態の変形例のソフトウェアの機能構成を示すブロック図。
【図１８】第３の実施形態の変形例の表データの一例を示す図。
【図１９】第３の実施形態の変形例のコンテキスト待避処理の処理を示すフローチャート。
【図２０−１】第３の実施形態の変形例におけるソフトウェア構成を示すブロック図。
【図２０−２】第３の実施形態の変形例のソフトウェアの機能構成を示すブロック図。
【図２１】第３の実施形態の変形例の待避用メモリ部に格納される表データの一例を示す図。
【図２２】第３の実施形態の変形例の動的設定変更時の処理フを示すフローチャート。
【図２３】第４の実施形態のソフトウェアの機能構成を示すブロック図。
【図２４】第４の実施形態の待避用メモリ部に格納される表データの一例を示す図。
【図２５】第４の実施形態のコンテキスト待避処理の処理を示すフローチャート。
【図２６】第４の実施形態のコンテキスト復帰処理の処理を示すフローチャート。
【図２７】第４の実施形態の変形例の情報処理装置の構成を示すブロック図。
【発明を実施するための形態】
【００１２】
以下に、本発明にかかる情報処理装置の実施形態を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【００１３】
（第１の実施形態）
図１は、第１の実施形態の情報処理装置のハードウェア構成を示すブロック図である。情報処理装置１は、ＣＰＵ部１０、主記憶部２０、ディスプレイ３０、入力機器４０及びストレージ部５０を備えている。ＣＰＵ部１０はレジスタ部１１、割込み制御部１２、モード管理部１３、及び非図示の演算部を備えている。ストレージ部５０には、モニタ部５１、ＯＳ部５２といったＣＰＵ部１０で実行されるプログラム群が格納される。また、主記憶部２０は、例えばＲＡＭなどの記憶メモリにより構成されており、レジスタの値を待避させる待避用メモリ部２１を含んでいる。
【００１４】
ＣＰＵ部１０は主記憶部２０に格納された命令列の実行を行う。主記憶部２０には、ＯＳ部５２のプログラムがロードされ、ＣＰＵ部１０により実行される。ＯＳ部５２は各種デバイスの管理などを行い、アプリケーションから利用できるようにする特殊なプログラムである。またＣＰＵ部１０は複数のＯＳ部５２を実行する機能を有する。モニタ部５１は、ＯＳ部５２の起動や切替え、各ＯＳ部５２が利用するハードウェアリソースの管理などといったＯＳ部５２の管理を行うためのプログラムである。同時に実行可能なＯＳ部５２の数はＣＰＵ部１０が同時に実行できるプログラムの数、すなわちコアの数に依存するが、時分割で各ＯＳ部５２を切替えて実行することで仮想的にＯＳ部５２を複数実行しているように見せかけることができる
【００１５】
ＯＳ部５２側の要求やハードウェアからの割込みなどによりモニタ部５１が呼び出され、モニタ部５１によりＯＳ部５２の切替えが制御される。また、ＣＰＵ部１０はＯＳ部５２を実行するためのモード、ＯＳ部５２上で動作するユーザプログラムを実行するためのモード、割込みを処理するモードなど複数のモードで実行される。このモードはモード管理部１３により制御される。例えば、ＡＲＭ社のプロセッサにおいては割込みを処理するＦＩＱモード、及びＩＲＱモード、ユーザプログラムを実行するためのＵＳＲモード、ＯＳ部５２を実行するためのＳＶＣモード、モニタ部を実行するためのＭＯＮモードなどが存在する。各モードでアクセスできるハードウェアリソースなどが異なる。以降では、割込みを処理するモードのことをまとめて割込み関連モードと呼ぶ。
【００１６】
また、各モードでレジスタ部１１を共有するとモード切替えの度にレジスタの待避、及び復帰処理が必要になり、モード切替えの効率が悪い。例えばユーザプログラムを実行中に割込み処理を行おうとすると、ユーザプログラムが使っていたレジスタを待避させ、割込み処理を行い、割込み処理完了後ユーザプログラムが使っていたレジスタを復帰させて処理を継続させる必要がある。ＡＲＭプロセッサなど一部のプロセッサにおいては、レジスタは部分的に重複したバンクに配置され、モードごとに異なるバンクレジスタが使用される。重複したバンクに配置されたレジスタのことをバンクレジスタ、バンクされないレジスタのことを非バンクレジスタと呼ぶ。図１の構成においてもＣＰＵ部１０は、各モード専用のレジスタである非図示のバンクレジスタ部をレジスタ部１１の内部に持ち、モード切替えの際にバンクレジスタ部を切替える。これにより、バンクレジスタ部はモード切替えの際にソフトウェアから待避、復帰処理を行う必要がなくなり、モード切替え時の処理を簡略化させて高速化している。しかしながら、バンクレジスタ部が増えるとモード切替えが高速化できる一方で、ハードウェア規模が増大するため、図１の構成ではレジスタ部１１の内部にはモード間で共有される非図示の非バンクレジスタ部も設けられる。例えば組み込み機器向けで利用されることが多いＡＲＭプロセッサにおいては、ＳＶＣモード、ＩＲＱモードなどではＲ１３、Ｒ１４と呼ばれるレジスタが、ＦＩＱモード、ＵＳＲモードではＲ８、Ｒ９、Ｒ１０、Ｒ１１、Ｒ１２、Ｒ１３、Ｒ１４と呼ばれるレジスタがバンクレジスタとなっている。すなわち、ＳＶＣモードからＩＲＱモードに切替える際にはＲ１３、Ｒ１４レジスタの待避、復帰を行う必要はない。
【００１７】
図２−１はＣＰＵ部１０や主記憶部２０を含むハードウェアとＣＰＵ部１０で動作するソフトウェア構成の一例を示している。図２−１に示されるモニタ部２００及び第１ＯＳ部３００、第２ＯＳ部４００はソフトウェアである。また、図中ではＯＳ部は２つのみの構成を示しているが、３つ以上存在しても良い。以降、高速なＯＳ切替えを実現するモニタ機能を有する第１の実施形態について詳細に説明する。
【００１８】
まず各ＯＳ部３００、４００が有する機能について説明する。各ＯＳ部３００、４００はＯＳの各種処理を実行するためのＯＳ実行部３０１、４０１、ＯＳ切替えを要求するＯＳ切替命令部３０２、４０２、そのＯＳが利用するモードをモニタ部２００に対して通知するためのモード利用通知部３０３、４０３を備える。
【００１９】
情報処理装置１を起動すると各ＯＳ部３００、４００が主記憶部２０にロードされ、各ＯＳ部３００、４００の内部に存在するＯＳ実行部３０１、４０１によるＯＳ処理の実行が開始される。ＯＳ実行部３０１、４０１はＯＳの各種処理を実行する機能を有する。例えば、プログラムの開始、終了などのタスク管理機能、ファイルに対する読み書き機能、デバイスに対するアクセス機能などである。特にＯＳ実行部３０１、４０１は別のＯＳ上で動作する処理を実行するためにＯＳ切替命令部３０２、４０２を呼び出す機能やＯＳ起動時にモード利用通知部３０３、４０３を呼び出す機能を有する。
【００２０】
モード利用通知部３０３、４０３はＯＳ実行部３０１、４０１より呼び出され、自ＯＳが利用するモードを待避レジスタ決定部２０５に通知する機能を有する。モード利用通知部３０３、４０３はＯＳ起動時にモードの通知を行う。例えば、ユーザプログラムが動作せず、割込みを扱わないＯＳの場合にはＯＳ動作用モード（以降「ＳＶＣモード」とい。）のみ使うことを待避レジスタ決定部２０５に通知する。これにより、待避レジスタ決定部２０５は各ＯＳがどのモードを利用するかを知ることができる。
【００２１】
ＯＳ切替命令部３０２、４０２はＯＳ実行部３０１、４０１より呼び出され、モニタ部２００のＯＳ命令検出部２０２に対してＯＳ切替えを要求する機能を有する。例えば実行したい処理が別ＯＳ上で動作するような場合に、ＯＳ切替えを要求する。特に３種類以上のＯＳが同時に動作する場合などにおいて、明示的に呼び出したいＯＳが存在する場合にはモニタに対して切替え先のＯＳを指定する機能を有しても良い。これにより、例えば暗号化処理を第２ＯＳ部４００上で実行させ、第１ＯＳ部３００上で動作するプログラムから暗号化機能を呼び出す、といったことが可能になる。
【００２２】
続いてモニタ部２００が有する機能について説明する。モニタ部２００は、ＯＳ命令検出部２０２、ＯＳ切替部２０１、レジスタ待避・復帰部２０４、待避情報管理部２０３、待避レジスタ決定部２０５、バンクレジスタ判定部２０６を備える。ＯＳ命令検出部２０２は、ＯＳ切替え命令を検出する。ＯＳ切替部２０１は、ＯＳ切替えを実行する。レジスタ待避・復帰部２０４は、ＯＳ切替えのためのレジスタの待避及び復帰を行う。待避情報管理部２０３は、ＯＳ切替え時に待避したレジスタ情報を管理する。待避レジスタ決定部２０５は、最低限待避が必要なレジスタを決定する。バンクレジスタ判定部２０６はバンクレジスタ情報を管理する。モニタ部２００がＯＳ部３００、４００から与えられる情報を元に、最低限待避が必要なレジスタを判定し、待避するレジスタ数を削減することでＯＳ切替え処理を高速化する。
【００２３】
ＯＳ命令検出部２０２は、ＯＳ切替命令部３０２、４０２から発行されるＯＳ切替え命令を検出し、切替え元のＯＳと切替え先のＯＳを決定し、その情報をＯＳ切替部２０１に渡して呼び出す。切替え先のＯＳの決定方法については、明示的に切替え先ＯＳが切替え元ＯＳによって指定されている場合にはその情報を利用しても良いし、ラウンドロビンにより順にＯＳを切替えても良いし、各ＯＳ上で動作するアプリケーションのリアルタイム制約や各ＯＳの実行優先度により決定しても良い。
【００２４】
ＯＳ切替部２０１は、ＯＳ命令検出部２０２から切替え元及び切替え先のＯＳ情報を受け取り、レジスタ待避・復帰部２０４を切替え元ＯＳ、切替え先ＯＳを指定して呼び出してコンテキストの待避及び復帰を指示する。また、ＯＳ切替部２０１は、図５の各ＯＳのコンテキスト待避領域に対してＯＳ切替え時の戻り先をレジスタ部１１から取得して保存する機能、及び取得してレジスタ部１１に設定してＯＳ実行部３０１、４０１を呼び出す機能を有する。
【００２５】
レジスタ待避・復帰部２０４はＯＳ切替部２０１から呼び出され、切替え元ＯＳのレジスタを待避させ、切替え先ＯＳのレジスタを復帰させる。レジスタ待避・復帰部２０４はＣＰＵ部１０が有するモード一覧を列挙し、待避レジスタ決定部２０５に切替え元ＯＳ情報と切替え先ＯＳ情報とモード情報とを渡して呼び出し、待避が必要なレジスタの情報を取得する。プロセッサが持つ全てのモードについて待避が必要なレジスタを判定するため、例えばプロセッサがＳＶＣモードとＵＳＲモードの２つのモードを持つ場合には待避レジスタ決定部２０５は２回呼び出される。切替え元ＯＳ情報、及び切替先ＯＳ情報は、第１ＯＳ部３００や第２ＯＳ部４００の識別子などが用いられる。モード情報は、切替え先ＯＳをいずれのモードで起動するかを指定する情報である。レジスタ待避・復帰部２０４は、取得した情報を元に待避用メモリ部２１に対して待避が必要なレジスタ部１１の値を待避させる。
【００２６】
待避用メモリ部２１には図５のような待避レジスタ管理表が記憶されており、例えばレジスタ待避・復帰部２０４は第１ＯＳ部３００から第２ＯＳ部４００に切替える場合にＳＶＣモードのレジスタ待避が必要となった場合には、第１ＯＳ部３００のＳＶＣモードのコンテキスト待避領域に対してバンクレジスタの待避を行う。待避後の待避用メモリ部２１のコンテキスト待避領域は図５のようになる。また、レジスタ待避・復帰部２０４は待避情報管理部２０３に対して切替え元ＯＳの情報と待避したレジスタの情報を渡して保存を依頼する。
【００２７】
また、レジスタ待避・復帰部２０４は切替え先ＯＳ情報を待避情報管理部２０３に渡して、前回切替え先ＯＳから別のＯＳに切替えた際に待避したレジスタの情報を取得し、待避用メモリ部２１の図５の表から待避したレジスタの値を取得し、レジスタ部１１にセットする。例えば図７の状態で第１ＯＳ部３００に切替える場合には、レジスタ待避・復帰部２０４はＳＶＣモードのＲ１３レジスタに対してＸ、Ｒ１４レジスタに対してＹ、ＳｔａｔｕｓＲｅｇｉｓｔｅｒに対してＹをセットする。なお、非バンクレジスタについては必ず待避及び復帰を行う。
【００２８】
待避情報管理部２０３は、図５、図７のようなＯＳと各モード、前回待避の有無の関係を示す表を管理する。レジスタ待避・復帰部２０４から待避情報の設定を依頼された場合には、待避情報管理部２０３は、渡された切替え元ＯＳ情報と待避レジスタ情報を元に表を更新する。例えば、切替え元ＯＳが第１ＯＳ部３００の場合にＳＶＣモードのレジスタを待避させた場合には、待避情報管理部２０３は、図５のように第１ＯＳ部３００のＳＶＣモードの前回待避欄を「無し」から「有り」に変更する。
【００２９】
一方レジスタ待避・復帰部２０４から切替え先ＯＳを指定して前回待避したレジスタの情報の取得要求があった場合には、待避情報管理部２０３は、切替え先ＯＳの項目を参照し、前回待避したレジスタ、すなわち前回待避の欄が有りとなっているモードの情報を返す。例えば図５の状態において切替え先ＯＳとして第２ＯＳ部４００が指定された場合には、待避情報管理部２０３は、復帰が必要なレジスタはなしという情報、第１ＯＳ部３００が指定された場合には、ＳＶＣモードレジスタの復帰が必要という情報をそれぞれ返す。本構成では待避されるレジスタが切替え元ＯＳのモード利用状況や別のＯＳのモード利用状況によって変わるため待避情報管理部２０３が必要になる。
【００３０】
待避レジスタ決定部２０５はレジスタ待避・復帰部２０４から切替え元ＯＳと切替え先ＯＳとモード情報を受け取り、そのモードのレジスタで待避すべきレジスタを決定する。待避レジスタ決定部２０５は、バンクレジスタ判定部２０６にモード情報を渡して、そのモードのバンクレジスタ一覧を受け取る。待避レジスタ決定部２０５は、図５の各ＯＳがどのモードを利用するか記載された表より、そのバンクレジスタのモードを切替え元ＯＳが利用するかどうか判定する。切替え元ＯＳがそのモードを利用しない場合には待避の必要なしと判定する。一方、切替え元ＯＳがそのモードを利用する場合には、待避レジスタ決定部２０５は別のＯＳがそのモードを利用するかどうか判定し、利用する場合には待避が必要、利用しない場合には待避の必要なしと判定する。例えば、図５の例では第１ＯＳ部３００から第２ＯＳ部４００に切替える場合、ＳＶＣモードは第２ＯＳ部４００でも利用するのでＳＶＣモードレジスタは待避の必要有り、ＩＲＱモードでは第１ＯＳ部３００では使うが第２ＯＳ部４００では使わないのでＩＲＱモードレジスタは待避の必要なし、ＵＳＲモードは第１ＯＳ部３００では使わないのでＵＳＲモードレジスタは待避の必要なし、ＦＩＱモードは第１ＯＳ部３００と第２ＯＳ部４００の両方で使わないのでＦＩＱレジスタは待避の必要なしと判定される。
【００３１】
すなわち待避が必要なのはＳＶＣモードレジスタのみと判定される。さらにこの結果より、待避レジスタ決定部２０５は、待避が必要とされた場合には当該モードのバンクレジスタ一覧を、待避が必要ないと判断された場合には待避が必要なレジスタ無しとの情報を呼び出し元のレジスタ待避・復帰部２０４に返信する。待避レジスタ決定部２０５によってモードの利用状況から最低限待避が必要なレジスタが決定されることで、レジスタ待避・復帰時間を削減してＯＳ切替えを高速化することができるようになる。また、待避レジスタ決定部２０５はモード利用通知部から各ＯＳが利用するモード情報を受け取りモード利用欄を更新する。
【００３２】
バンクレジスタ判定部２０６はバンクレジスタと非バンクレジスタ一覧を待避レジスタ決定部２０５に返す。バンクレジスタ判定部２０６は図４のような表を管理し、表の内容を返信する。図４に示されるように、例えばＲ０は非バンクレジスタである。また、ＳＶＣモードのＲ１３レジスタやＵＳＲモードのＲ８レジスタなどはバンクレジスタである。非バンクレジスタはどのモードでも利用され、ＯＳ切替の際に待避が必要であるため、バンクレジスタ判定部２０６によるバンクレジスタ判定を実行する。呼び出し元ＯＳに返す内容を決定するために、バンクレジスタ判定部２０６は呼び出し時に非バンクレジスタ取得命令、又はモード情報を引数としたバンクレジスタ取得命令を受け取る。例えば、呼び出し元ＯＳから非バンクレジスタの取得を命令された場合には、バンクレジスタ判定部２０６はＲ０〜Ｒ１２を、ＳＶＣモードのバンクレジスタ一覧の取得を依頼された場合にはＲ１３、Ｒ１４、ＳｔａｔｕｓＲｅｇｉｓｔｅｒを返す。
【００３３】
レジスタ部１１は非バンクレジスタとモード別のバンクレジスタを持ち、レジスタ値設定やレジスタ値取得を行う。また、待避用メモリ部２１は図５のような表を格納する領域を有し、表に対して値の取得及び設定を行う機能を有する。
【００３４】
なお、図２−１の構成ではモード利用通知部３０３、３０４はＯＳ部３００、４００に存在していたが、図２−２のようにモニタ部２００にモード利用通知部２０７を備える形態への変更も可能である。あらかじめ動作するＯＳがわかっているような場合には、モニタ部２００にモード利用通知部２０７を設けることにより各ＯＳが利用するモードをモニタ部２００の起動時に待避レジスタ決定部２０５に伝える。これにより、ＯＳ部３００、４００にはモード利用通知部を設ける必要がなくなり、既存のＯＳ部３００、４００の構成を最大限流用することが可能になる。
【００３５】
次に図３のフローチャートに示されるストレージに格納されるＯＳ部の起動時の処理手順について述べる。なお、ＯＳ部３００、４００が起動されるより前にモニタ部２００は起動している。まず、各ＯＳ部３００、４００のモード利用通知部３０３、４０３は起動時にそのＯＳ部がどのモードを利用するかモニタ部２００の待避レジスタ決定部２０５に通知する（ステップＳ１０１）。または、図２−２の構成のようにモニタ部２００にモード利用通知部２０７が存在する場合には、モニタ部２００の起動時に各ＯＳのモード利用情報を待避レジスタ決定部２０５に通知する。
【００３６】
するとまず、待避レジスタ決定部２０５は待避用メモリ部２１にＯＳコンテキスト待避用メモリ領域を確保する（ステップＳ１０２）。例えば図５では第１ＯＳ部３００と第２ＯＳ部４００の欄があらかじめあるが、別の第３のＯＳから通知があった場合には、待避レジスタ決定部２０５は第３ＯＳ部のデータ記入用領域を確保し、初期化する。この際前回待避の欄はなし、コンテキスト待避領域は空とする。
【００３７】
さらに、待避レジスタ決定部２０５は図５の呼び出し元ＯＳのモード利用欄を更新する（ステップＳ１０３）。例えば図５の場合、第１ＯＳ部３００についてはＳＶＣモード及びＩＲＱモード利用あり、ＵＳＲモード及びＦＩＱモードの利用なしとなっている。以上でＯＳ起動時の通知処理は完了となる。
【００３８】
続いて図６のフローチャートに示されるＯＳ切替え時の処理手順について述べる。まずＯＳ切替え時にはＯＳ切替命令部３０２、４０２がＯＳ切替え命令を発行する（ステップＳ２０１）。続いてＯＳ命令検出部２０２がＯＳ切替え命令を検出する（ステップＳ２０２）。さらに、ＯＳ命令検出部２０２は切替え先ＯＳを決定する（ステップＳ２０３）。このアルゴリズムとしては、切替え元ＯＳから明示的に指定される際にはそのＯＳを切替え先としても良いし、ラウンドロビン、優先度付きスケジューリング、ＥＤＦ（Ｅａｒｌｉｅｓｔ  Ｄｅａｄｌｉｎｅ  Ｆｉｒｓｔ）などのよく知られたスケジューリング方法により決定しても良い。
【００３９】
ＯＳ命令検出部２０２はさらにＯＳ切替部２０１を呼び出し、ＯＳ切替部２０１は切替え元ＯＳのコンテキスト待避メモリを取得し（ステップＳ２０４）、取得したコンテキスト待避メモリに対して切替え元ＯＳの戻り先アドレスを保存する（ステップＳ２０５）。さらにＯＳ切替部２０１はレジスタ待避・復帰部２０４を呼び出し、レジスタ待避・復帰部２０４はバンクレジスタ判定部２０６から非バンクレジスタの一覧を取得し、非バンクレジスタを切替え元ＯＳコンテキスト待避メモリに待避させる（ステップＳ２０６）。
【００４０】
さらに待避レジスタ決定部２０５とレジスタ待避・復帰部２０４は切替え元ＯＳのバンクレジスタの待避を行う。以下、バンクレジスタの待避の処理の詳細を説明する。まず、レジスタ待避・復帰部２０４はＣＰＵ部１０が持つモードを列挙するために未処理モードが存在するかどうかを判定する（ステップＳ２０７）。未処理モードとは、上述したＳＶＣモードや、ＩＲＱモードのうち処理が完了されていないモードであり、レジスタ待避・復帰部２０４が保持する各モードの処理済み状況から判断される。未処理モードが存在しないと判定された場合（ステップＳ２０７：Ｎｏ）、必要なレジスタの待避が全て終了したため、ステップＳ２１２に移行する。
【００４１】
一方、未処理モードが存在したと判定された場合（ステップＳ２０７：Ｙｅｓ）、レジスタ待避・復帰部２０４は待避レジスタ決定部２０５を呼び出し、待避レジスタ決定部２０５は切替え元ＯＳがそのモードを扱うかどうか判定する（ステップＳ２０８）。扱わないと判定された場合（ステップＳ２０８：Ｎｏ）、レジスタ待避の必要はないため、ステップＳ２０７に戻り、次のモードの処理に移行する。扱うと判定された場合（ステップＳ２０８：Ｙｅｓ）、待避レジスタ決定部２０５は別のＯＳが当該モードを扱うかどうかの判定に移る。これは別のＯＳが当該モードを扱う場合、当該モードのバンクレジスタを破壊する可能性があるため、そのモードのバンクレジスタは待避が必要であるためである。まず待避レジスタ決定部２０５は自分のＯＳ以外のＯＳを列挙し、各ＯＳについて以下の処理を行う。
【００４２】
まず、待避レジスタ決定部２０５は未処理ＯＳがあるかどうか判定する（ステップＳ２０９）。未処理ＯＳがないと判定された場合（ステップＳ２０９：Ｎｏ）、全ＯＳの処理が終了したと判定し、ステップＳ２０７に戻る。未処理ＯＳがあると判定された場合（ステップＳ２０９：Ｙｅｓ）、待避レジスタ決定部２０５は図５の待避レジスタ管理表を参照しそのＯＳが当該モードを扱うかどうかを判定する（ステップＳ２１０）。扱わないと判定された場合（ステップＳ２１０：Ｎｏ）、ステップＳ２０９に戻り、次のＯＳについて処理を行う。そのＯＳが当該モードを扱うと判定された場合（ステップＳ２１０：Ｙｅｓ）、待避レジスタ決定部２０５はレジスタの待避が必要と判断し、当該モードのバンクレジスタの一覧を取得し、レジスタの内容を切替え元ＯＳのコンテキスト保存領域に待避させ（ステップＳ２１１）、ステップＳ２０７に戻って次のモードの処理を行う。全てのモードの処理が終わった場合には、レジスタ待避・復帰部２０４は待避情報管理部２０３に待避したレジスタ情報と切替え元ＯＳ情報を渡し、待避情報管理部２０３は切替え元ＯＳの待避情報を保存する（ステップＳ２１２）。すなわち、図５における切替え元ＯＳの各モードの前回待避の欄を更新する。例えば、第１ＯＳ部３００から第２ＯＳ部４００にＯＳを切替える際に図７のように非バンクレジスタとＳＶＣモードのバンクレジスタのみを待避させた場合には、第１ＯＳ部３００のＳＶＣモードの前回待避の欄を「有り」に、第１ＯＳ部３００のＵＳＲモード、ＩＲＱモード、ＦＩＱモードの欄を「無し」に設定する。
【００４３】
続いて、レジスタ待避・復帰部２０４と待避情報管理部２０３は切替え先ＯＳが前回別ＯＳに切替えられた際に待避したレジスタ値を復帰する処理を次のように行う。まず、レジスタ待避・復帰部２０４は切替え先のＯＳのコンテキストが保存されているメモリのアドレスを取得する（ステップＳ２１３）。さらに、全てのモードについて前回待避が行われたかを確認するためにレジスタ待避・復帰部２０４は取得したコンテキスト待避用メモリのアドレスを渡して待避情報管理部２０３を呼び出してコンテキスト待避用メモリのアドレスから切替先待避情報を取得する（ステップＳ２１４）。次いで、待避情報管理部２０３は取得した未処理のモードがあるか確認する（ステップＳ２１５）。未処理のモードがないと判定された場合（ステップＳ２１５：Ｎｏ）、全てのモードの処理が終わったと判定してステップＳ２１８に移行する。
【００４４】
未処理モードがあると判定された場合（ステップＳ２１５：Ｙｅｓ）、待避情報管理部２０３は未処理モードの中から一つのモードを取りだし、そのモードのバンクレジスタが前回待避されたかを図５の待避レジスタ管理表から確認する（ステップＳ２１６）。待避されていない場合には（ステップＳ２１６：Ｎｏ）、次のモードの処理を行うためにステップＳ２１５に移行する。
【００４５】
一方、選択したレジスタが前回待避されていた場合（ステップＳ２１６：Ｙｅｓ）、レジスタ待避・復帰部２０４は切替え先のコンテキスト保存領域からそのモードのバンクレジスタの値を取り出し、レジスタを復帰する（ステップＳ２１７）。その後ステップＳ２１５に戻る。バンクレジスタの復帰が終わると、レジスタ待避・復帰部２０４は非バンクレジスタの復帰を行い（ステップＳ２１８）、さらにＯＳ切替部２０１は前回切替え先ＯＳから別のＯＳに切替えた際に保存した切替え先ＯＳの戻り先を取得し（ステップＳ２１９）、その戻り先にジャンプしてＯＳ切替えを終了する（ステップＳ２２０）。
【００４６】
（第２の実施形態）
以上の処理では、各ＯＳ部が利用するモード情報からのみ待避するバンクレジスタを決定していた。しかし、特定モードの処理（ハンドラ）の途中でＯＳ切替えが起きないことが保証できる場合には、そのモードのレジスタを破壊して良い場合がある。ただし、処理の途中でＯＳ切替えが起きないことが保証できたとしても、当該モードに入る際に毎回スタックポインタを設定しない場合など、レジスタの破壊が許されない場合もある。破壊が許されるかどうかはＯＳの設計に依存する。すなわち、処理の途中でＯＳ切替えが起きないことが保証でき、なおかつレジスタの破壊が許される場合にはレジスタの待避の必要はない。さらに、ＯＳ切替えが起きないことが保証でき、なおかつレジスタの破壊が許されるかどうかの情報（ハンドラポリシ情報）をＯＳがモニタ部に伝えることで、モニタ部はその情報からＯＳ切替え時にレジスタ待避が必要かどうかを判断できる。各ＯＳが利用するモード情報からのみ待避するバンクレジスタを決定する場合よりもＯＳ切替え時に待避が必要なレジスタをさらに削減できる可能性がある。
【００４７】
図８−１はモード利用情報に加えてハンドラポリシ情報から待避が必要なレジスタを判定し、最低限のレジスタのみを待避させることでＯＳ切替えの高速化を実現するための構成である。図８−１は図２−１とはハンドラポリシ設定部３０４、４０４を有することと、及び待避レジスタ決定部２０５ａの内部処理が異なる。それぞれの処理について次に説明する。
【００４８】
ハンドラポリシ設定部３０４、４０４はＯＳ起動時に待避レジスタ決定部２０５ａに対して当該ＯＳの各モードにおいて、そのモードの処理中に処理中断が起きるかどうかの情報を設定する。なお、処理中断がない場合においてもレジスタ破壊が許されない場合には処理「中断有り」と設定する。
【００４９】
待避レジスタ決定部２０５ａはハンドラポリシ設定部３０４、４０４からの要求に従い、各ＯＳの各モードのハンドラポリシの設定を行う機能を持つとともに、各モードのレジスタ待避が必要かどうかの判定を行う機能を有する。ハンドラポリシ設定部３０４、４０４からの設定要求があった場合には、図９のハンドラポリシの設定元ＯＳのハンドラポリシ欄を更新する。一方、各モードのレジスタ待避が必要かどうかの判定を行う際には、図２−１の場合と各モードのバンクレジスタの待避が必要かどうかを判定する方法が異なる。待避レジスタ決定部２０５ａは、切替え元ＯＳが当該モードを扱うとともに切替え元ＯＳの当該モードが中断ありに設定されており、さらに当該モードを扱うＯＳが別に存在する場合に限り当該モードのバンクレジスタの待避が必要と判断する。
【００５０】
なお、図８−１の構成ではモード利用通知部３０３及びハンドラポリシ設定部３０４、４０４はＯＳ部３００、４００に存在していたが、図８−２のようにモニタ部２００にモード利用通知部２０７、ハンドラポリシ設定部２１４を備える形態への変更も可能である。あらかじめ動作するＯＳがわかっているような場合には、モニタ部２００にモード利用通知部２０７とハンドラポリシ設定部２１４を設けることにより各ＯＳが利用するモードとハンドラポリシ情報を情報処理装置１の起動時に待避レジスタ決定部２０５ａに伝える。これにより、ＯＳ部３００、４００にはモード利用通知部とハンドラポリシ設定部を設ける必要がなくなり、既存のＯＳ部の構成を最大限流用することが可能になる。
【００５１】
次に図１０のフローチャートに示されるポリシ設定の処理手順について述べる。ハンドラポリシ設定部３０４、４０４は待避レジスタ決定部２０５ａに対して、各モードのハンドラポリシを通知する（ステップＳ３０２）。もしくは図８−２のようにモニタ部２００にハンドラポリシ設定部２１４を設ける場合には、ハンドラポリシ設定部２１４はモニタ部２００の起動時に待避レジスタ決定部２０５ａに対して各ＯＳのハンドラポリシを通知する。待避レジスタ決定部２０５ａは当該ＯＳのハンドラポリシ欄を各モードについて設定し（ステップＳ３０３）、ハンドラポリシの設定を終了する。
【００５２】
続いて、ＯＳ切替え時の処理のうち、コンテキスト待避処理の流れについて図１１を用いて説明する。なお、図１１は図６におけるステップＳ２０７〜Ｓ２１２に対応する処理を抜き出して記載しており、その他の処理は図６と同等である。まず全てのモードについてバンクレジスタの待避が必要かを判断するためにレジスタ待避・復帰部２０４はモードの列挙を行い、未処理のモードがあるかどうかを判定する（ステップＳ４０２）。未処理のモードがないと判定された場合（ステップＳ４０２：Ｎｏ）、レジスタ待避・復帰部２０４は待避情報管理部２０３を呼び出し、切替え元ＯＳの待避したバンクレジスタのモード情報について図９の前回待避情報の欄を更新し（ステップＳ４０８）、コンテキスト待避を終了する。
【００５３】
一方、未処理モードがある場合（ステップＳ４０２：Ｙｅｓ）、レジスタ待避・復帰部２０４は待避レジスタ決定部２０５ａを呼び出し、待避レジスタ決定部２０５ａはそのモードについて切替え元ＯＳが扱うかどうかを判定する（ステップＳ４０３）。扱わない場合（ステップＳ４０３：Ｎｏ）、待避レジスタ決定部２０５ａはレジスタ待避の必要がないと判定しステップＳ４０２に戻る。当該モードを扱うと判定された場合（ステップＳ４０３：Ｙｅｓ）、待避レジスタ決定部２０５ａは当該モードの中断があるかどうかを図９の待避レジスタ管理表を参照して確認する（ステップＳ４０４）。
【００５４】
中断がないと判定された場合（ステップＳ４０４：Ｎｏ）、待避レジスタ決定部２０５ａはレジスタ待避の必要がないと判断しステップＳ４０２に戻る。一方、中断があると判定された場合（ステップＳ４０４：Ｙｅｓ）、待避レジスタ決定部２０５ａは別ＯＳがそのモードを扱うかどうか判定する処理に移行する。具体的には、待避レジスタ決定部２０５ａは全ＯＳを列挙し未処理ＯＳがあるかどうか判定する（ステップＳ４０５）。未処理ＯＳがないと判定された場合（ステップＳ４０５：Ｎｏ）、待避レジスタ決定部２０５ａは次のモードの処理に移るためステップＳ４０２に移る。未処理ＯＳがあると判定された場合（ステップＳ４０５：Ｙｅｓ）、待避レジスタ決定部２０５ａはそのＯＳの当該モードの利用情報を取り出し、当該モードを扱うか否かを判定する（ステップＳ４０６）。ＯＳがモードを扱わないと判定された場合（ステップＳ４０６：Ｎｏ）、ステップＳ４０５に戻る。当該モードを扱うと判定された場合（ステップＳ４０６：Ｙｅｓ）、待避レジスタ決定部２０５ａはそのモードのバンクレジスタの待避が必要と判定し、バンクレジスタの一覧を取得し、その値の待避を行って（ステップＳ４０７）、ステップＳ４０２に戻る。
【００５５】
本実施形態の情報処理装置１にあっては、各ＯＳのモード利用情報とハンドラポリシ情報を利用してＯＳ切替え時に待避が必要なレジスタを決定することにより、待避するレジスタを削減し、ＯＳ切替えの処理を高速化することができる。また、本実施形態にあっては、このような構成を実現するために、特別なコンパイラなども必要ないため実装も容易である。なお、本実施形態ではＯＳ切替えの度にレジスタ待避が必要かどうかの判定を行っているが、モード利用に関する設定が変わらなければ待避が必要なバンクレジスタは変わらないため、これに限らずあらかじめ一度だけバンクレジスタの待避が必要かどうかの判定をしておき、その結果からバンクレジスタの待避の有無を決定しても良い。
【００５６】
（第３の実施形態）
上記実施形態では待避するレジスタをモード利用情報などのＯＳ部３００、４００から設定される情報により決定していた。これはＯＳ部３００、４００にモニタ部２００への情報通知機能を設けることが必要ということを意味する。一方でＯＳ部から通知される情報のみに頼らず、モードの利用の有無が一部でもモニタ部側で自動的に判別判定できれば、ＯＳ部３００、４００からの情報通知機能を削除、もしくは簡略化できる。これにより高速化のためにＯＳ部３００、４００側に特別な機構を設ける必要がなくなるか、もしくは簡略化することができるようになり、既存のＯＳ部３００、４００の設計を最大限流用できることとなる。以下、本実施形態の詳細について図面を参照して説明する。
【００５７】
図１２は第３の実施形態におけるＣＰＵ部１０や主記憶部２０を含むハードウェアとＣＰＵ部１０で動作するソフトウェア構成の一例を示している。図１２は図８−１とＯＳ部３００、４００が割込み可否設定部３０５、４０５を有する点、モニタ部２００が割込み検出部２１０、割込み状態管理部２０９、割込みポリシ判定部２０８を有する点、ハードウェア部１００が割込み制御部１２を有する点、モード通知部とハンドラポリシ設定部が存在しない点が異なる。また、待避レジスタ決定部２０５ｂの内部処理も異なる。なお、図１２の構成においては割込み入力可否情報はＯＳ起動から終了まで変わらないことを想定している。また、図１３に示す待避用メモリ部２１に格納される表の構造が図５と異なる。図１３で示される待避レジスタ管理表は、図５からモード利用欄が削除され、割込み状態欄が追加されている。割込み状態欄の初期値は「--」となっている。以下ではそれぞれについて説明する。
【００５８】
割込み可否設定部３０５、４０５は自ＯＳが割込みを受け付けるかどうかをハードウェア部１００の割込み制御部１２に対して設定する。受付不可と設定した場合には、ＯＳに対して割込みが入力されなくなる。一方受付許可を設定した場合には、割込み発生時にＯＳ実行部３０１、４０１内に設けられた割込みハンドラが呼び出されるようになる。すなわち、割込みを処理するモードの場合、割込みを受け付けるかどうかと、そのモードで動作しうるかどうかは多くの場合に等しいため、この割込み可否設定部３０５、４０５による設定からモード利用の有無が判定できる。
【００５９】
例えば、ＩＲＱ割込みがＩＲＱモードで処理されるプロセッサの場合、あるＯＳがＩＲＱ割込みを受け付けない設定になっていれば、そのＯＳはＩＲＱモードで動作することはないということになる。すなわち、そのＯＳから別のＯＳに切替える際にはＩＲＱレジスタは待避させる必要がない。
【００６０】
割込み制御部１２はＯＳ部３００、４００からの割込み入力可否の設定要求に従い、割込み入力可否を設定する。さらに、割込みポリシ判定部２０８に割込み入力可否設定時に、設定元のＯＳ情報と入力可否を通知する。割込み発生時には、割込み入力可を設定されている際にはモニタ部２００の割込み検出部２１０に割込みの発生を通知し、割込み入力不可が設定されている場合には割込みを無視する。
【００６１】
割込み検出部２１０は割込みが起きた際に、割込み制御部１２から呼び出される。本実施形態ではモニタ部２００の内部に割込み検出部２１０が設けられているが、ＯＳ部３００、４００内部に設けても良い。割込み検出部２１０は、現在実行中のＯＳ情報や割込みの種別から割込み処理を行うＯＳを判定する。判定後、割込み検出部２１０は、割込み入力先ＯＳと割込みモードを割込み状態管理部２０９に渡し、割込み状態の処理中への変更を割込み状態管理部２０９に依頼する。
【００６２】
この割込み処理を行うＯＳの判定方法は特定のＯＳに入力するようにあらかじめ決定しておいても良いし、ＯＳ側が受け付ける割込みの種別をモニタに対して通知しても良いし、割込み発生時に動作していたＯＳに入力しても良い。また、割込み検出部２１０はＯＳによる割込み処理の終了時にも呼び出される。その際には、割込みが入力されていたＯＳの情報と、割込み種別を判定後、割込み入力先ＯＳと割込みモードを割込み状態管理部２０９に渡し、割込み状態の処理完了への変更を割込み状態管理部２０９に依頼する。ＯＳの設計にもよるが、割込み処理が完了していれば当該割込み処理モードのレジスタ破壊を起こしても良い場合が多いため、ＯＳの設計によってはレジスタ待避を省くことが可能である。このため、割込み処理が完了しているか、割込み処理中かを判定するため、割込み検出部２１０が設けられている。
【００６３】
割込み状態管理部２０９は割込み検出部２１０からの要求に応じて、図１３の表における「割込み状態」の情報を変更する。図１３の待避レジスタ管理表の「割込み状態」の初期値は割込み処理を行うモード（ＩＲＱ／ＦＩＱなど）については「無効」、それ以外のモードについては「--（割込みモード外）」となっている。割込みモード外とは、割込み検出部２１０がそのモードへの切替えを検出できないモードのことである。例えば、ＵＳＲモードなどは割込みによりそのモードに遷移しないため、割込みモード外となる。割込み状態管理部２０９は割込み検出部２１０から割込み入力先のＯＳ情報と、割込み処理モードを受け取る。割込み処理中への変更依頼を受信した場合は、割込み状態管理部２０９は図１３の表の「割込み状態」の該当欄を「処理中」に更新する。例えば、割込み入力先が第１ＯＳ部３００、割込み種別がＦＩＱの場合には「処理中」に変更する。逆に割込み処理完了への変更要求の場合には、図１３の表の「割込み状態」の該当欄を「完了」に更新する。例えば、割込み入力先が第１ＯＳ部３００、割込み種別がＩＲＱの場合には「完了」に変更する。これにより、各ＯＳの各割込みモードで処理中の割込みがあるかどうかを待避レジスタ管理表から判断することができるようになり、割込み処理中でなければ、後述のハンドラポリシ情報によっては割込み関連レジスタは破壊しても良いこととなるため、一部レジスタの待避処理を省くことが可能となる。
【００６４】
また、割込み状態管理部２０９は待避レジスタ決定部２０５ｂからの要求に従い、指定されたＯＳと割込みモードで割込み処理中かどうかを返す。例えば、ＯＳとして第２ＯＳ部４００、割込みモードとしてＩＲＱを指定された場合には「完了」を返す。また、図１３の割込み状態欄で「無効」が指定されている場合には割込み入力が不可能と設定されているため「無効」を、「--」が設定されている場合には割込みを扱うモードではないと判定し、「--（割込みモード外）」を返す。すなわち、割込み状態管理部２０９から返される情報は「処理中」、「完了」、「無効」、「--（割込みモード外）」のいずれかが返されることとなる。
【００６５】
割込みポリシ判定部２０８は割込み可否設定が起きた際に、図１３の表における割込み状態の欄を更新する。割込み制御部１２から設定元ＯＳ情報と入力可否情報を受け取り、対応する図１３の表の割込み状態欄を、割込み可否設定が可に設定された場合には「完了」に、不可に設定された場合には「無効」に設定する機能を有する。
【００６６】
待避レジスタ決定部２０５ｂは各モードのレジスタ待避が必要かどうかの判定を行う。各モードのレジスタ待避が必要かどうかの判定を行う際には、第１の実施形態の場合と各モードのバンクレジスタの待避が必要かどうかを判定する方法が異なる。待避レジスタ決定部２０５ｂは図１３の表の割込み状態の欄からそのモードが割込み関連のモードかどうかを判断する。すなわち割込み状態の欄が「--」以外であれば割込み関連のモードであると判断できる。割込み関連のモードの場合は図１３の表の「割込み状態」の切替え元ＯＳの欄から切替え元のＯＳが割込み処理中かを判定する。割込み関連のモードの場合でさらに切替え元のＯＳが割込み処理中の場合には、切替え元以外のＯＳがレジスタを破壊する可能性がある場合にはそのモードのバンクレジスタの待避が必要となる。割込み関連のモードの場合でさらに切替え元ＯＳの割込み処理が完了している場合には、そのモードのバンクレジスタは破壊でき、レジスタ待避の必要はないと判定される。
【００６７】
一方、モードが割込み関連のモード以外の場合には、そのモードのバンクレジスタの待避が必要と判断される。また、切替え元以外のＯＳがレジスタを破壊する可能性があるどうかは、そのモードが割込み関連モードの場合には、切替え元以外のそれぞれのＯＳに対して、そのＯＳの図１３の表の「割り込み状態」欄が割込み「無効」に設定されていれば割込みが入力されず、そのモードのバンクレジスタの破壊の可能性がないため、レジスタ待避は必要ないと判断される。割込みが可能に設定されている、すなわち切替え元以外のＯＳの図１３のそのモードの割込み状態が「完了」もしくは「処理中」となっているＯＳがあった場合にはレジスタ待避が必要と判断される。レジスタ待避が必要と判定された場合には、待避レジスタ決定部２０５ｂはそのモードのバンクレジスタの一覧をバンクレジスタ判定部２０６から取得して呼び出し元に返す。
【００６８】
待避レジスタ決定部２０５ｂは、割込み処理中かどうかを割込み検出部２１０が設定した図１３の割込み状態欄から判定するとともに、別のＯＳがバンクレジスタの破壊をしうるかどうかを割込み受け付け可否情報から判定し、バンクレジスタの待避が必要かどうかを自動的に判定する。
【００６９】
続いて図１４のフローチャートに示されるＯＳ切替え時のコンテキスト待避処理手順について述べる。なお、図１４は図６におけるステップＳ２０７〜Ｓ２１２に対応する処理を抜き出して記載しており、その他の処理は図６と同等である。
【００７０】
まず、コンテキスト回避処理が開始するとまず全てのモードのバンクレジスタについて待避が必要か判定するため、レジスタ待避・復帰部２０４は未処理のモードがあるかどうか判定する（ステップ５０２）。未処理のモードがないと判定された場合（ステップＳ５０２：Ｎｏ）、レジスタ待避・復帰部２０４は待避情報管理部２０３に対して待避したバンクレジスタの情報の保存を依頼し、待避情報管理部２０３は図１３の待避レジスタ管理表における前回待避の欄を更新し、処理を終了する（ステップＳ５０３）。
【００７１】
未処理のモードがあると判定された場合（ステップＳ５０２：Ｙｅｓ）、待避レジスタ決定部２０５ｂは未処理のモード情報を１つ取り出し、そのモードが割込み関連モードかどうかを判定する。この際の判定方法としては切替え元ＯＳの当該モードの割込み状態欄が「--」となっているかどうかを判断し、「--」以外であれば割込み関連モードと判定する（ステップＳ５０４）。割込み関連モードであれば（ステップＳ５０４：Ｎｏ）、待避レジスタ決定部２０５は現在当該ＯＳがそのモードの割込み処理中かどうかを割込み状態管理部２０９から割込み状態を取得して判定する。
【００７２】
すなわち図１３における切替え元ＯＳの当該モードの割込み状態欄が「処理中」であれば割込み処理中となり、それ以外（「完了」もしくは「無効」）であれば割込み処理中でないと判定する（ステップＳ５０５）。割込み処理中でないと判定された場合（（ステップＳ５０５：Ｎｏ）、当該モードのバンクレジスタは待避の必要がないと判定してステップＳ５０２に戻り、次のモードの処理に移る。割込み処理中であると判定された場合（ステップＳ５０５：Ｙｅｓ）、待避レジスタ決定部２０５ｂは別のＯＳが当該モードのバンクレジスタを破壊する可能性がある場合にはバンクレジスタの待避が必要であるため、ステップＳ５０６以降の処理で別のＯＳがレジスタ破壊をしうるか判定することとなる。また、ステップＳ５０４において、処理中のモードが割込み関連のモードでない場合（ステップＳ５０４：Ｙｅｓ）には、当該モードのバンクレジスタの待避が必要と判定し、ステップＳ５０８に移る。ステップＳ５０６以降の処理では、待避レジスタ決定部２０５ｂは切替え元ＯＳ以外のＯＳが当該モードのバンクレジスタを破壊する可能性があるかどうかを判定する。破壊する可能性がなければ、当該モードのバンクレジスタは待避する必要がないためである。以降は切替え元ＯＳ以外の全てのＯＳについて当該モードのバンクレジスタを破壊する可能性があるかどうかを判定するステップ５０６以降の処理について詳細に説明する。
【００７３】
まず、切替え元ＯＳ以外の全てのＯＳについて当該モードのバンクレジスタを破壊する可能性があるかどうかを判定するため、待避レジスタ決定部２０５ｂは動作中のＯＳの中で未処理のＯＳがあるかどうかを判定する（ステップＳ５０６）。全てのＯＳについて判定が終わっており未処理のＯＳがないと判定された場合（ステップＳ５０６：Ｎｏ）、当該モードのバンクレジスタ待避の必要はないと判断し、ステップＳ５０２に戻る。未処理のＯＳがあると判定された場合（ステップＳ５０６：Ｙｅｓ）、待避レジスタ決定部２０５ｂは、未処理のＯＳの中から一つのＯＳを取り出し、割込みが不可能になっているかどうか、すなわち当該ＯＳの当該モードの割込み状態欄が「無効」となっているかどうかを判定する（ステップＳ５０７）。
【００７４】
無効となっていると判定された場合（ステップＳ５０７：Ｙｅｓ）、割込み不可に設定されており、レジスタ破壊の可能性はないと判定し、次のＯＳの判定に移るためステップＳ５０６に戻る。一方、割込み状態欄が「無効」以外であると判定された場合（ステップＳ５０７：Ｎｏ）、割込み入力が行われる可能性があり、レジスタ破壊の可能性があるため、レジスタ待避・復帰部２０４はバンクレジスタ判定部２０６を介して当該モードのバンクレジスタ一覧を取得し、待避用メモリ部２１に対して待避処理を行う（ステップＳ５０８）。その後次のモードの処理に移るため、ステップＳ５０２に戻る。
【００７５】
続いて図１５のフローチャートに示される割込み可否設定時の処理手順について述べる。まず、割込み可否設定処理が開始されると、割込み可否設定部３０５、４０５はハードウェア部１００の割込み制御部１２に対して割込みモードの種別と割込み受け付け可否情報を渡し、割込み受付の可否を設定する（ステップＳ６０１）。続いて、割込み制御部１２は割込みポリシ判定部２０８を呼び出して、割込み可否設定部３０５、４０５から渡された設定内容を渡し、割込み設定が行われたことを通知する（ステップＳ６０２）。割込み可否設定部３０５、４０５は現在実行中のＯＳ情報を取得し、図１３の対応するＯＳ、対応するモードの欄の割込み状態欄を更新する（ステップＳ６０３）。この際、割込み可否設定部３０５、４０５は渡された割込み可否設定を判別し、割込み可であるか否かを判定する（ステップＳ６０４）。割込み可という設定が渡された場合（ステップＳ６０４：Ｙｅｓ）、割込み可否設定部３０５、４０５は割込み状態を「完了」に設定する（ステップＳ６０５）。一方、割込み不可という設定が渡された場合（ステップＳ６０４：Ｎｏ）、割込み可否設定部３０５、４０５は割込み状態を「無効」に更新する（ステップＳ６０６）。
【００７６】
次に図１６のフローチャートに示される割込み発生時の処理手順について述べる。割込み制御部１２は割込み発生時に割込み検出部２１０に対して割込みモード種別とともに割込みの発生を通知する（ステップＳ７０１）。割込み検出部２１０は割込み入力先のＯＳを判定する（ステップＳ７０２）。割込み検出部２１０は割込み状態管理部２０９に対して割込み入力先ＯＳと割込みモードを通知し、割込み状態管理部２０９は当該ＯＳとモードの割込み状態欄を「処理中」に変更する（ステップＳ７０３）。さらに、割込み検出部２１０はＯＳ切替部２０１を呼び出し、ＯＳを割込み入力先ＯＳに切替えて、ＯＳ実行部３０１、４０１内の割込みハンドラを呼び出す（ステップＳ７０４）。さらに割込み処理終了後、元々動作していたＯＳに切替え、割込み検出部２１０は割込み入力先ＯＳと当該モードの割込み状態欄を「完了」に設定し（ステップＳ７０５）、割込み発生時の処理を終了する。
【００７７】
上記では、割込み制御部１２から割込みが通知された時点で割込み入力先ＯＳにＯＳを切替えて、割込み処理を開始しているが、これに限らず、ＯＳ切替え命令部からの明示的なＯＳ切替え命令発行の際に割込み入力先ＯＳに切替えて、割込み処理を遅延させて処理を行っても良い。
【００７８】
本実施形態の情報処理装置１にあっては、割込み状態についてモニタ部２００が自動的に検出することができるようになり、モード利用通知部２０７及びハンドラポリシ設定部３０４、４０４を設けずに待避するレジスタを削減することができる。よって、ＯＳ部について既存のＯＳの構成を最大限活かしつつＯＳ切替えを高速化できる。
【００７９】
なお、図１２の構成では、モード利用情報やハンドラポリシ情報を待避するレジスタの決定に利用していなかった。ゆえに特に割込み関連のモード以外の場合には常にバンクレジスタを待避させることとなり、実際にモードが利用されない場合にもレジスタ待避を行ってしまう可能性がある。またＯＳの割込みハンドラの設計によっては、たとえ割込み処理が完了していてもレジスタを破壊すると、ＯＳが正しく動作しなくなる可能性もある。図１７の構成では割込みの情報に加えて、モード利用情報とハンドラポリシ情報から待避するレジスタを決定する。これにより上述の問題に対処できる。以下この場合の構成について説明する。
【００８０】
図１７は図１２とＯＳ部３００、４００がハンドラポリシ設定部３０４、４０４とモード利用通知部３０３、４０３を有する点が異なる。また、待避レジスタ決定部２０５ｃの内部処理も異なる。なお、図１７の構成においても割込み入力可否情報、モード利用情報、ハンドラポリシ情報はＯＳ起動から終了まで変わらないことを想定している。以下では図１７の構成について、図１２と異なる点を中心に説明する。
【００８１】
待避レジスタ決定部２０５ｃは、ハンドラポリシ設定部３０４、４０４からの要求に従い、各ＯＳの各モードのハンドラポリシの設定を行う機能を持つとともに、各モードのレジスタ待避が必要かどうかの判定を行う機能を有する。ハンドラポリシ設定部３０４、４０４からの設定要求があった場合には、図１８のハンドラポリシの設定元ＯＳのハンドラポリシ欄を更新する。設定できる値は「中断あり」「中断なし」「破壊可」「破壊不可」の４状態である。
【００８２】
中断あり及び中断なしは割込みモード外、すなわち例えばＳＶＣモードやＵＳＲモードの場合の場合に設定される。ＯＳの設計上、そのモードの実行途中でＯＳ切替えが起きうるかどうかを示し、ＯＳ切替えが起きる場合には中断あり、起きえない場合には中断なしが設定される。破壊可及び破壊不可は割込みモード、すなわち例えばＩＲＱモードやＦＩＱモードの場合に設定される。ＯＳの設計上、割込み処理が完了している場合にバンクレジスタを破壊して良いかどうかを設定する。一方、各モードのレジスタ待避が必要かどうかの判定を行う際には、上記各実施形態とは各モードのバンクレジスタの待避が必要かどうかを判定する方法が異なる。
【００８３】
まず、待避レジスタ決定部２０５ｃは図１８の表の割込み状態の欄からそのモードが割込み関連のモードかどうかを判断する。すなわち割込み状態の欄が「--」以外であれば割込み関連のモードであると判断できる。さらに割込み関連のモードの場合は図１８の表の「割込み状態」の欄から割込み処理中かを判定する。割込み処理中の場合には、別のＯＳがレジスタを破壊する可能性がある場合にはそのモードのバンクレジスタの待避が必要となる。
【００８４】
割込み処理が完了している場合には、レジスタが破壊できるかどうかを図１８の表の「ハンドラポリシ」の欄から判断する。「破壊可」と設定されており、レジスタが破壊できる場合にはレジスタ待避が必要ない。「破壊不可」と設定されており、レジスタ破壊が不可能な場合には、別のＯＳがレジスタを破壊する可能性がある場合にはそのモードのバンクレジスタの待避が必要となる。一方、モードが割込み関連のモード以外の場合には、切替え元ＯＳが当該モードを扱うか図１８の「モード利用」の欄から判定し、モードを利用しない場合にはレジスタ待避の必要はないと判定する。一方で、モードを利用する場合にはモード中断があるかどうかを図１８の表のハンドラポリシの欄から判定し、中断がある場合には別のＯＳがレジスタを破壊する可能性がある場合にはそのモードのバンクレジスタの待避が必要となる。ハンドラポリシの欄が中断有りであればモード中断あり、中断無しとなっていればモード中断無しと判定する。別のＯＳがレジスタを破壊する可能性があるどうかは、それぞれのＯＳに対してそのモードが割込み関連モードの場合には、当該ＯＳが割込みが不可に設定されていれば割込みが入力されず、そのモードのバンクレジスタの破壊の可能性がないため、レジスタ待避は必要ないと判断する。割込みが可能に設定されている、すなわち図１８の割込み状態が「完了」もしくは「処理中」の場合にはレジスタ待避が必要と判断する。一方でそのモードが割込みモード以外の場合には、図１８のモード利用の表からモード利用の有無を判断し、そのモードを利用するＯＳがなければレジスタ破壊の可能性がないためレジスタ待避は必要ないと判断する。一方で、そのモードを利用するＯＳがあればレジスタ待避が必要と判断する機能を有する。レジスタ待避が必要と判定された場合には、待避レジスタ決定部２０５ｃそのモードのバンクレジスタの一覧をバンクレジスタ判定部２０６から取得して呼び出し元に返す。
【００８５】
図１７におけるモード利用通知部は図８−１におけるモード利用通知部とほぼ同等の機能を有する。また、図１７におけるハンドラポリシ設定部３０４、４０４は各モードに関して「中断あり」「中断なし」「破壊可」「破壊不可」を待避レジスタ決定部２０５ｃに通知する。
【００８６】
待避レジスタ決定部２０５ｃは割込み関連のモードの場合には割込み処理中かどうかを図１８の割込み状態欄から判定するとともに、割込み関連のモード以外の場合にはモード利用欄からモード利用の有無を判定する。さらに、待避レジスタ決定部２０５ｃは別のＯＳがバンクレジスタの破壊をしうるかどうかを割込み受け付け可否情報やモード利用欄から判定し、バンクレジスタの待避が必要かどうかを自動的に判定する。
【００８７】
続いて図１９のフローチャートに示されるＯＳ切替え時のコンテキスト待避処理手順について述べる。なお、図１９は図６におけるステップＳ２０７〜Ｓ２１２に対応する処理を抜き出して記載しており、その他の処理は図６と同等である。
【００８８】
コンテキスト待避処理が開始すると（ステップＳ８０１）、まず全てのモードのバンクレジスタについて待避が必要か判定するため、レジスタ待避・復帰部２０４は未処理のモードがあるかどうか判定する（ステップＳ８０２）。未処理のモードがないと判定された場合（ステップＳ８０２：Ｎｏ）、レジスタ待避・復帰部２０４は待避情報管理部２０３に対して待避したバンクレジスタの情報の保存を依頼し、待避情報管理部２０３は図１８の表における前回待避の欄を更新し、処理を終了する（ステップＳ８０３）。
【００８９】
未処理のモードがあると判定された場合（ステップＳ８０２：Ｙｅｓ）、未処理のモード情報を１つ取り出し、待避レジスタ決定部２０５ｃはそのモードが割込み関連モードかどうかを判定する。この際の判定方法としては切替え元ＯＳの当該モードの割込み状態欄が「--」となっているかどうかを判断し、「--」以外であれば割込み関連モードと判定する（ステップＳ８０４）。割込み関連モードであると判定された場合（ステップＳ８０４：Ｎｏ）、待避レジスタ決定部２０５ｃは現在当該ＯＳがそのモードの割込み処理中かどうかを割込み状態管理部２０９から割込み状態を取得して判定する（ステップＳ８０７）。すなわち図１８における切替え元ＯＳの当該モードの割込み状態欄が「処理中」であれば、割込み処理中となり、それ以外であれば割込み処理中でないと判定する。
【００９０】
割込み処理中でないと判定された場合（ステップＳ８０７：Ｎｏ）、待避レジスタ決定部２０５ｃはレジスタが破壊可能かどうかを切替え元ＯＳの当該モードのハンドラポリシ欄から判定する（ステップＳ８０８）。破壊可であると判定された場合（ステップＳ８０８：Ｙｅｓ）、当該モードのバンクレジスタは待避の必要がないと判定してステップＳ８０２に戻り、次のモードの処理に移る。
【００９１】
ハンドラポリシ欄が破壊不可と判定された場合（ステップＳ８０８：Ｎｏ）、別のＯＳが当該モードのバンクレジスタを破壊する可能性がある場合にはバンクレジスタの待避が必要であるため、別のＯＳがレジスタ破壊をしうるか判定するステップＳ８０９の処理に移る。
【００９２】
一方、処理中のモードが割込み関連のモードでないと判定された場合（ステップＳ８０４：Ｙｅｓ）、待避レジスタ決定部２０５ｃは切替え元ＯＳが当該モードを扱うかどうかを判定する（ステップＳ８０５）。当該モードを扱わないと判定された場合（ステップＳ８０５：Ｎｏ）、そのモードのバンクレジスタの待避は必要ないと判断し、ステップＳ８０２に戻る。
【００９３】
一方、当該モードを扱うと判定された場合（ステップＳ８０５：Ｙｅｓ）、待避レジスタ決定部２０５ｃは切替え元ＯＳの当該モードでの処理中にＯＳ遷移が起きて中断が発生しうるかどうかを図１８のハンドラポリシ欄から判定する（ステップＳ８０６）。中断無しとなっている場合（ステップＳ８０６：Ｎｏ）、待避レジスタ決定部２０５ｃは当該モードのバンクレジスタ待避の必要はないと判断し、ステップＳ８０２に戻る。
【００９４】
一方、中断有りとなっている場合（ステップＳ８０６：Ｙｅｓ）、別のＯＳが当該モードのバンクレジスタを破壊する可能性がある場合にはバンクレジスタの待避が必要であるため、待避レジスタ決定部２０５ｃは別のＯＳがレジスタ破壊をしうるか判定する処理に移る。具体的には、まず待避レジスタ決定部２０５ｃは切替え元ＯＳ以外のＯＳが当該モードのバンクレジスタを破壊する可能性があるかどうかを判定する。破壊する可能性がなければ、当該モードのバンクレジスタは待避する必要がないためである。まず、切替え元ＯＳ以外の全てのＯＳについて当該モードのバンクレジスタを破壊する可能性があるかどうかを判定するため、待避レジスタ決定部２０５ｃは動作中のＯＳの中で未処理のＯＳがあるかどうかを判定する（ステップＳ８０９）。全てのＯＳについて判定が終わっており未処理のＯＳがないと判定された場合（ステップＳ８０９：Ｎｏ）、待避レジスタ決定部２０５ｃは当該モードのバンクレジスタ待避の必要はないと判断し、ステップＳ８０２に戻る。
【００９５】
未処理のＯＳがあると判定された場合（ステップＳ８０９：Ｙｅｓ）、待避レジスタ決定部２０５ｃは未処理のＯＳの中から一つのＯＳを取り出し、当該モードが割込みモードかどうかを図１８の割込み状態欄が「--」となっているかどうかから判定する（ステップＳ８１０）。「--」以外であると判定された場合（ステップＳ８１０：Ｎｏ）、待避レジスタ決定部２０５ｃは割込みモードと判定し、割込みが不可能になっているかどうか、すなわち当該ＯＳの当該モードの割込み状態欄が「無効」となっているかどうかを判定する（ステップＳ８１１）。
【００９６】
無効となっていると判定された場合（ステップＳ８１１：Ｙｅｓ）、割込み不可に設定されており、レジスタ破壊の可能性はないと判定し、次のＯＳの判定に移るためステップＳ８０９に戻る。一方、割込み状態欄が「無効」以外の場合（ステップＳ８１１：Ｎｏ）、割込み入力が行われる可能性があり、レジスタ破壊の可能性があるため、レジスタ待避・復帰部２０４はバンクレジスタ判定部２０６を介して当該モードのバンクレジスタ一覧を取得し、待避用メモリ部２１に対して待避処理を行う（ステップＳ８１３）。
【００９７】
一方、ステップ８１０において処理中のモードの当該ＯＳの割込み状態欄が「--」の場合（ステップＳ８１０：Ｙｅｓ）、すなわち割込みモード以外と判定された場合には、待避レジスタ決定部２０５ｃはそのＯＳが当該モードを扱うかどうかを図１８のモード利用欄から判定する（ステップＳ８１２）。モードを扱わない場合（ステップＳ８１２：Ｎｏ）、次のＯＳの判定に移るためステップＳ８０９に戻る。
【００９８】
一方、当該モードを扱う場合（ステップＳ８１２：Ｙｅｓ）、待避レジスタ決定部２０５ｃは当該モードのバンクレジスタ破壊の可能性があるため、当該モードのバンクレジスタの一覧を取得し、レジスタの値を待避する処理を行う（ステップＳ８１３）。その後次のモードの処理に移るため、ステップＳ８０２に戻る。
【００９９】
また、割込み可否設定時の処理手順は図１５、割込み発生時の処理は図１６と同等である。図１９のフローで示したように、本実施形態ではまずステップＳ８０４でモードが割込みモードか否かを判定する。割込みモードであれば、それ以降当該モードを扱うか判定することはない。割込み制御に設定される割込み受け付け可否の設定を検出することで、割込みモードが利用されるかどうかを判断できるためである。すなわち、割込み関連モードについてはＯＳがモード利用通知部から明示的に待避レジスタ決定部２０５ｃに対してモード利用の有無を通知する必要がない。これにより、モード利用通知部の構造を単純化できる。また、本構成では割込みモード利用の有無だけによらず、実際に割込みが処理中か否かなどの情報によってレジスタ待避の必要性を判断するため、第１の実施形態の場合よりも割込み関連モードのバンクレジスタの待避を削減できる場合がある。また、図１２の構成と異なりハンドラポリシ情報を参照するため、割込み完了時にレジスタを破壊してはならないＯＳにおいても利用できる方法である。また、割込み関連モード以外においても、モード利用情報によりバンクレジスタ待避の有無を判定するため、モード利用状況によってはレジスタ待避及び復帰処理を省略することができる。
【０１００】
また、本実施形態の構成においては、起動時にモードの取り扱いや割込みの有無設定が固定され、それ以降変わらないことを前提としていた。また、ＣＰＵ部１０についてはシングルコアプロセッサもしくは、マルチコアプロセッサ環境においてもＯＳ切替えが起きるのは１つのコア上のみであり、他のコアについては動作させるＯＳを固定することを想定していた。近年、サーバから組み込み機器にまでマルチコアプロセッサが普及しており、マルチコアプロセッサの全てのコアについて柔軟にＯＳ切替えできることが望ましい。図２０−１は動的な設定変更及び、マルチコアプロセッサの全コアのＯＳ切替えに対応する機能を有する情報処理装置である。
【０１０１】
図２０−１は図１７と動的設定変更検出部２１１と、コア番号管理部２１２（コア管理部）を備える点が異なる。また、図１７の構成では、レジスタ待避・復帰部２０４や、割込み状態管理部２０９などが待避用メモリ部２１にアクセスする際には、直接待避用メモリ部２１に対してアクセスしていたが、図２０−１の構成ではコア番号管理部２１２を介して待避用メモリ部２１にアクセスする点も異なる。加えて、待避用メモリ部２１に置かれる、図２１のコンテキスト待避などを行うための待避レジスタ管理表の構造も異なる。
【０１０２】
コア番号管理部２１２はＯＳ切替えが起きた場合や割込みが検出された場合に、それらの要因が起きたコアを判定する。例えば、コア１で実行されているＯＳからＯＳ切替え命令が呼び出された場合にはコア１でＯＳ切替え要求が起きたと判定する。マルチコアプロセッサにおいては、通常各コアがレジスタを持ち、独立したモードで動くことが可能である。例えば、コア１では第１ＯＳ部３００をＳＶＣモードで動かし、コア２では第２ＯＳ部４００をＩＲＱモードで動かすと行ったことが可能である。この場合に、コア単位でＯＳ切替えを行えるようにするためには、コア単位でレジスタ待避・復帰を行う必要がある。このため、コア番号管理部２１２を設ける。さらにコア番号管理部２１２は割込み状態管理部２０９などによる割込み状態の変更や取得、レジスタ待避・復帰部２０４によるレジスタの待避と復帰、待避情報管理部２０３による前回待避欄の設定や設定取得など待避用メモリ部２１が管理する図２１の表に対するアクセス要求を受け付け、コア単位で情報を保存、返却する機能を有する。このため待避用メモリ部２１に配置されるデータ表は図２１に示すように割込み状態、コンテキスト待避領域、前回待避の各欄はコア毎に状態を持つことが可能なデータ構造を持つ。例えば第１ＯＳ部３００のＳＶＣモードのバンクレジスタの待避がレジスタ待避・復帰部２０４により行われる際、コア番号管理部２１２が待避要求を受け付け、待避要求が発行されたプロセッサがコア１であれば、図２１のＳＶＣモードのコア１の欄に、コア２であればコア２の欄にコア番号管理部２１２がレジスタの値を待避する。
【０１０３】
動的設定変更検出部２１１は、割込みポリシ判定部２０８や待避レジスタ決定部２０５から設定変更時に呼び出され、ＯＳ起動後にモード利用設定変更もしくは割込み設定変更が行われた場合に変更を検出する。例えば、第１ＯＳ部３００と第２ＯＳ部４００が存在し、第１ＯＳ部３００でＵＳＲモードを扱い、第２ＯＳ部４００ではＵＳＲモードを扱わない設定になっている場合、第１ＯＳ部３００から第２ＯＳ部４００への切替え時にはレジスタ待避の必要がない。このとき第２ＯＳ部４００でＵＳＲモードを扱うように設定を変更すると、ＵＳＲモードのバンクレジスタは待避されていないにもかかわらず、書き換えられてしまう可能性がある。書き換えられてしまうと、再度第１ＯＳ部３００に切替えた際に第１ＯＳ部３００のＵＳＲモードで動くプログラムはプログラム設計者の意図しない動作を引き起こす可能性がある。このため、第２ＯＳ部４００をＵＳＲモードで実行させる前に第１ＯＳ部３００のバンクレジスタを待避させる必要がある。そのため、動的設定変更検出部２１１はどのＯＳが設定変更が行われたモードを利用しているか判定する。また、割込みの無効化及びモードを利用しない設定がなされた場合や、別のＯＳがそのモードを利用しない場合、ハンドラの設計によってレジスタ待避が必要ない場合、複数のＯＳがそのモードを利用するため、元々レジスタ待避が行われている場合は改めてレジスタ待避を行う必要はない。よって、動的設定変更検出部２１１は、モード取り扱いが有効化されるか割込みが有効に変更されたか判定する。さらに動的設定変更検出部２１１は設定が有効された場合に、設定内容がモード利用設定変更であれば、コア番号管理部２１２を介して図２１のデータ表から設定元のＯＳ以外で当該モードの利用が有りかつハンドラポリシが中断ありの設定になっているＯＳを探す。そして、検索の結果一つだけ見つかった場合に、動的設定変更検出部２１１はそのモードのバンクレジスタを見つけたＯＳのコンテキスト待避領域に待避させる。一方、見つからなかった場合や２つ以上のＯＳが見つかった場合には、動的設定変更検出部２１１は何もせずに設定変更が検出される前に実行していた元の処理に戻る。
【０１０４】
また、設定が割込み設定の変更であれば、動的設定変更検出部２１１は設定元のＯＳ以外で当該モードで割込み状態欄が「処理中」か、ハンドラポリシが「破壊不可」となっているＯＳを探し、その結果一つだけ見つかった場合に、見つけたＯＳ、すなわち「処理中」か、ハンドラポリシが「破壊不可」となっていたＯＳのコンテキスト待避領域にそのモードのバンクレジスタを待避させる。見つからなかった場合や２つ以上のＯＳが見つかった場合には何もしない。さらに、バンクレジスタを待避させた場合、動的設定変更検出部２１１は当該ＯＳの当該モードの前回待避欄を「有り」に更新する。また動的設定変更検出部２１１は処理完了後、設定変更検出前に実行していた元の処理を再度実行する。
【０１０５】
割込みポリシ判定部２０８はモード利用情報やハンドラポリシ情報が通知された際に動的設定変更検出部２１１を呼び出す。また、割込みポリシ判定部２０８は割込み可否設定が行われた際に動的設定変更検出部２１１を呼び出す。
【０１０６】
また、レジスタ待避・復帰部２０４、割込み状態管理部２０９、割込みポリシ判定部２０８、動的設定変更検出部２１１、待避情報管理部２０３といった待避用メモリ部２１にアクセスするブロックは、直接待避用メモリ部２１にはアクセス命令を出すのではなく、コア番号管理部２１２に対してアクセス命令を出す点が図１８の構成とは異なる。
【０１０７】
次に、動的設定変更の流れを図２２に示すフローを用いて説明する。まず、動的設定変更検出部２１１は設定変更を検出すると（ステップＳ９０１）、設定対象のモードを取得する（ステップＳ９０２）。例えばＩＲＱが有効に設定された場合にはＩＲＱモード、ＳＶＣモードが利用されるように設定された場合にはＳＶＣモードが取得される。
【０１０８】
次に動的設定変更検出部２１１は設定内容を取得し、モード取り扱いもしくは割込みが有効化されたかどうかを判断する（ステップＳ９０３）。無効化されたと判定された場合（ステップＳ９０３：Ｎｏ）、レジスタ破壊の可能性はないため、処理を終了する。
【０１０９】
有効化されたと判定された場合（ステップＳ９０３：Ｙｅｓ）、さらに動的設定変更検出部２１１はＯＳカウント用カウンタを０に設定する（ステップＳ９０４）。続いて、各ＯＳについて処理を行うため、動的設定変更検出部２１１は設定元ＯＳ以外に未処理ＯＳが存在するかどうか判定する（ステップＳ９０５）。未処理ＯＳが存在すると判定された場合（ステップＳ９０５：Ｙｅｓ）、その図２１の表からコア番号管理部２１２を介してＯＳの情報を取り出し、設定対象モードの割込み状態欄の値を取得し、「--」となっているかどうかを判定する（ステップＳ９０６）。
【０１１０】
割込み状態が「--」となっていると判定された場合（ステップＳ９０６：Ｙｅｓ）、動的設定変更検出部２１１は割込み関連モード以外と判定し、そのＯＳが当該モードを扱うかどうかを、コア番号管理部２１２を介してモード利用欄から取得して判定する（ステップＳ９０７）。モードを扱わないと判定された場合（ステップＳ９０７：Ｎｏ）、次のＯＳの処理に移るためステップＳ９０５に戻る。当該モードを扱うと判定された場合（ステップＳ９０７：Ｙｅｓ）、動的設定変更検出部２１１は切替え元ＯＳの当該モードでの中断があるかを、コア番号管理部２１２を介して図２１のハンドラポリシ欄から取得し判定する（ステップＳ９０８）。
【０１１１】
中断があると判定された場合（ステップＳ９０８：Ｙｅｓ）、カウンタをインクリメントさせ（ステップＳ９１１）、次のＯＳの処理に移るためステップＳ９０５に戻る。中断がないと判定された場合（ステップＳ９０８：ＮＯ）、何もせずにステップＳ９０５に戻る。
【０１１２】
ステップＳ９０６において割込み状態が「--」でない、すなわち割込みモードと判定された場合（ステップＳ９０６：Ｎｏ）、動的設定変更検出部２１１はコア番号管理部２１２を介して割込み処理中かどうかを図２１の待避レジスタ管理表から取得して判定する（ステップＳ９０９）。割込み処理中であると判定された場合（ステップＳ９０９：Ｙｅｓ）、動的設定変更検出部２１１はカウンタをインクリメントし（ステップＳ９１１）、ステップＳ９０５に戻る。
【０１１３】
一方、割込み処理中でなければ、動的設定変更検出部２１１はコア番号管理部２１２を介して図２１の表からレジスタ破壊可能かどうかを判定する（ステップＳ９１０）。破壊可能であると判定された場合（ステップＳ９１０：Ｙｅｓ）、ステップＳ９０５に戻る。一方、破壊可能でないと判定された場合（ステップＳ９１０：Ｎｏ）、動的設定変更検出部２１１はカウンタをインクリメントさせてからステップＳ９０５に戻る。
【０１１４】
またステップＳ９０５において設定元ＯＳ以外の全てのＯＳについて処理が完了したと判定された場合（ステップＳ９０５：Ｎｏ）、動的設定変更検出部２１１はカウンタが１かどうかを判定する（ステップＳ９１２）。カウンタが１と判定された場合（ステップＳ９１２：Ｙｅｓ）、当該モードのバンクレジスタが待避されていないが、設定変更によりバンクレジスタの待避が必要になった状態と判断し、動的設定変更検出部２１１は当該モードのバンクレジスタをカウンタをインクリメントしたＯＳの待避領域に待避させ（ステップＳ９１３）、前回待避欄を待避「有り」に変更して終了する（ステップＳ９１４）。カウンタが０の場合（ステップＳ９１２：Ｎｏ）、もしくは２以上の場合には、レジスタ待避の必要がない、もしくはすでにレジスタ待避が行われていると判定し、何も行わずに終了する。
【０１１５】
また、図２０−１のようにコア番号管理部２１２を介して待避用メモリ部２１にアクセスするのではなく、図２０−２のように待避用メモリ部２１へのアクセスをコア番号管理部２１２ａが検知し、コア毎にアクセス先を自動的に変更するようにしても良い。すなわち、レジスタ待避・復帰部２０４など待避用メモリ部２１に対するアクセスを行うブロックが、同じアドレスにアクセス要求を行った場合にも、コア番号管理部２１２ａがアクセス要求を検知して、コア毎に異なるアドレスにアクセスするように変更しても良い。例えばアドレスａに対してアクセスがあった場合に、Ｎを定数として、コア０からアクセスされた場合にはアドレスａ、コア１からアクセスされた場合にはアドレスａ＋Ｎ、コアｂからアクセスされた場合にはアドレスＮ×ｂに対してアクセスするように命令を変換する。これにより、レジスタ待避・復帰部２０４など待避用メモリ部２１に対するアクセスを行うブロックは同じアドレスにアクセスしているように見えても実際にはコア毎に異なる領域にデータを保存、取得できるようになる。
【０１１６】
この場合、コア番号管理部２１２ａはＯＳ切替えが起きた場合や割込みが検出された場合に、それらの要因が起きたコアを判定する機能に加えて、さらにコア番号管理部２１２ａは割込み状態管理部２０９などによる割込み状態の変更や取得、レジスタ待避・復帰部２０４によるレジスタの待避と復帰、待避情報管理部２０３による前回待避欄の設定や設定取得が行われた際に、待避、復帰、設定、設定取得の各要求を検出して、コア単位で待避用メモリ部２１の異なる領域に情報を保存、返却する。
【０１１７】
本実施形態によれば、特定のモードに関してはモニタに対してＯＳからモード利用通知を行うための機能を設ける必要がなくなるため、ＯＳ部を簡略化でき、従来のＯＳ設計を最大限活用できる。また、割込みの状態をモニタ側で把握することで、割込み関連のモードをＯＳが利用する場合においてもレジスタ待避を削減できる可能性があり、さらにＯＳ切替えを高速化することが可能となる。また本実施形態によれば、マルチコアプロセッサ環境など、近年利用が進む環境においてもＯＳ切替えを高速化することが可能である。また、あらかじめタスクが使うハードウェア資源を列挙しておく必要もなく、自動的に割込み処理完了情報などから待避するレジスタ情報を決定することができる。
【０１１８】
（第４の実施形態）
上記各実施形態ではレジスタ待避を行うバンクレジスタの数を最小化し、ＯＳ切替えを高速化することを目的としていた。これは、レジスタ待避及び復帰を行わない場合には切替え元ＯＳでセットしたレジスタの値が、切替え先のＯＳでもアクセスできることを意味する。しかしながら、例えば、データを暗号化するための鍵データをレジスタにセットして暗号化処理を行う場合など、セキュリティ上の理由でレジスタ値にアクセスされることは好ましくない場合も存在する。また、切替え先ＯＳがレジスタ値を破壊しうるため切替え先ＯＳが信用できない場合、切替え元ＯＳの動作に影響を与える可能性もある。そこで、セキュリティ上の観点でレジスタ値を読まれるのが困る場合や、不正に書き換えられる可能性がある場合には、高速化の観点においてはレジスタ待避を省略できる場合でも、当該レジスタを待避させた上で当該レジスタの値を元の値と関係ない値に書き換えておく必要がある。
【０１１９】
第４の実施形態では、セキュリティを考慮しつつ、ＯＳ切替えの高速化を行う情報処理装置について説明する。図２３はＣＰＵ部１０や主記憶部２０を含むハードウェアとＣＰＵ部１０で動作するソフトウェア構成の一例を示している。図２３は図２０−１と、第１ＯＳ部３００がセキュリティ設定部３０７を備える点と待避レジスタ決定部２０５ｄ、レジスタ待避・復帰部２０４ａ、待避情報管理部２０３ａが有する機能が異なる。また、図２４に示す待避用メモリ部２１に格納されるコンテキスト待避用、設定用の表の構造も異なる。
【０１２０】
セキュリティ設定部３０７はモニタ部２００の待避レジスタ決定部２０５ｄに対して、セキュリティ設定の有効、無効を通知する。セキュリティ設定は別のＯＳからレジスタを読まれては困る場合や、信頼できないＯＳが動作する環境において、信頼できないＯＳによりレジスタの値が破壊されては困る場合に有効にする。信頼できないＯＳが動作しない場合や、待避しないレジスタを破壊されても問題がない場合、レジスタ値を読まれても困らない場合には、セキュリティ設定を無効に設定する。例えば、ＳＶＣモードのみを第１ＯＳ部３００、第２ＯＳ部４００が使う場合にはＳＶＣモードのバンクレジスタのみを利用し、ＳＶＣモードのバンクレジスタの待避は必須である。一方、別のモードのバンクレジスタは利用せず、破壊されても読まれても問題ないためセキュリティ設定は無効に設定すればよい。セキュリティ要件はＯＳによって異なるため、セキュリティ設定部３０７はＯＳ毎に設ける。
【０１２１】
待避レジスタ決定部２０５ｄはハンドラポリシ設定部３０４、４０４からの要求に従い、各ＯＳの各モードのハンドラポリシの設定を行うとともに、セキュリティ設定部３０７からセキュリティ設定の有効もしくは無効の情報を受け取り、図２４に示す待避用メモリ部２１に格納される表のセキュリティ有効欄を更新する機能を有する。また、各モードのレジスタ待避が必要かどうかの判定を行う機能に関しては、第３の実施形態で述べた処理と処理内容が異なる。
【０１２２】
このうち、セキュリティ設定の有効もしくは無効の情報を受け取り、セキュリティ有効欄を更新する機能については、待避レジスタ決定部２０５ｄは、セキュリティ設定部３０７からセキュリティ有効もしくは無効のいずれかの情報を受け取り、図２４の表の設定元ＯＳのセキュリティ有効欄を有効、もしくは無効に更新する。第２の実施形態では待避レジスタ決定部２０５ｄは各モードが割込み関連のモードかどうかを判断し、割込み関連のモードの場合は割込み処理中かを判定していた。本実施形態では、待避レジスタ決定部２０５ｄは、割込み関連モードと判定された後に、まず切替え元ＯＳのセキュリティ設定が「有効」となっているかどうかの判定を行う。セキュリティ設定が有効の場合には、待避レジスタ決定部２０５ｄはレジスタ待避が必要と判定する。さらに当該モードのクリアが必要というフラグをセットする機能を有する。一方割込み関連のモード以外の場合には、第２の実施形態では切替え元ＯＳが当該モードを扱う場合に、当該モードのハンドラの途中でＯＳ切替えが起きうるか判定する機能を有していた。
【０１２３】
本実施形態では、待避レジスタ決定部２０５ｄは当該モードを扱う場合に、当該モードのハンドラの途中でＯＳ切替えが起きうるか判定する前に、セキュリティ設定が有効か判定し、セキュリティ設定が有効な場合には待避レジスタ決定部２０５ｄはレジスタ待避が必要と判定する。さらにその場合には、当該モードのバンクレジスタの値のクリアが必要というフラグをセットする機能を有する。これにより、当該モードを扱う可能性がある場合には、他のＯＳの設定や割込み処理状況にかかわらず当該モードのバンクレジスタを必ず待避させることができる。
【０１２４】
レジスタ待避・復帰部２０４ａは、各モード毎に用意されるクリアフラグをＯＳ切替部２０１からの呼び出し毎にリセットしておき、待避レジスタ決定部２０５ｄによる待避するレジスタの決定後に、各モードのクリアフラグをチェックし、クリアフラグがセットされている場合には当該モードのバンクレジスタの値をクリアする。レジスタ待避・復帰部２０４ａはさらに待避情報管理部２０３ａより復帰するレジスタの情報を取得して、レジスタ復帰が行われない場合にのみそのバンクレジスタをクリアするようにしても良い。これは、切替え先ＯＳのバンクレジスタ復帰が行われる場合には、切替え元ＯＳのバンクレジスタの内容は書き換えられるため、あらためてクリアする必要がないためである。
【０１２５】
続いて図２５、図２６のフローチャートに示されるＯＳ切替え時のコンテキスト待避及び復帰処理手順について述べる。なお、図２５、２６は図６におけるステップＳ２０７〜Ｓ２１２に対応する処理を抜き出して記載しており、その他の処理は図６と同等である。まず、図２５のコンテキスト待避処理手順について述べる。ここでは第２の実施形態における図１９のフローと異なるステップＳ１００５以降の処理と、ステップＳ１００２についてのみ説明する。
【０１２６】
待避レジスタ決定部２０５ｄは判定中のモードが割込み関連モードかどうかを図２４の表における切替え元ＯＳの割込み状態欄が「--」であるかにより判定する（ステップＳ１００５）。「--」以外であれば割込み関連モードと判定し（ステップＳ１００５：Ｎｏ）、待避レジスタ決定部２０５ｄはセキュリティ設定が「有効」となっているかどうかを判定する（ステップＳ１００９）。「有効」であれば（ステップＳ１００９：Ｙｅｓ）、当該モードのレジスタが別のＯＳから閲覧もしくは破壊されると困るため、レジスタ待避・復帰部２０４ａによる当該モードのバンクレジスタ待避を行い（ステップＳ１０１０）、待避レジスタ決定部２０５ｄは当該モードのクリアフラグをセットする（ステップＳ１０１１）。その後ステップＳ１００３に戻る。
【０１２７】
一方、ステップＳ１００５で割込み状態欄が「--」と判定された場合（ステップＳ１００５：Ｙｅｓ）、待避レジスタ決定部２０５ｄは切替え元ＯＳが当該モードを扱うかどうか判定する（ステップＳ１００６）。扱うと判定された場合には（ステップＳ１００６：Ｙｅｓ）、待避レジスタ決定部２０５ｄはセキュリティ設定が「有効」かどうか判定する（ステップＳ１００７）。有効である場合（ステップＳ１００７：Ｙｅｓ）、同じくレジスタ待避・復帰部２０４ａによる当該モードのバンクレジスタ待避後（ステップＳ１０１０）、待避レジスタ決定部２０５ｄは当該モードのクリアフラグをセットする（ステップＳ１０１１）。その後ステップＳ１００３に戻る。なお、切替え元ＯＳが当該モードを扱わない場合（ステップＳ１００６：Ｎｏ）、そもそも当該モードのバンクレジスタの閲覧や破壊が起きても問題ないと考えられるため、セキュリティ設定が有効かどうかの判断は行わない。また、コンテキスト待避処理開始後に、レジスタ待避・復帰部２０４ａはまず全モードのクリアフラグをリセットする処理を行う（ステップＳ１００２）。
【０１２８】
続いて、図２６のフローチャートに示すコンテキスト復帰処理手順について述べる。まず、レジスタ待避・復帰部２０４ａは全てのモードについてレジスタ復帰が必要かどうかを判定するため、未処理のモードが存在するかどうかを判定する（ステップＳ１１０２）。未処理のモードがない場合（ステップＳ１１０２：Ｎｏ）、コンテキスト復帰処理を終了する。一方、未処理のモードが存在する場合（ステップＳ１１０２：Ｙｅｓ）、レジスタ待避・復帰部２０４ａはそのモードを取り出し、待避情報管理部２０３ａに対して切替え先ＯＳの当該モードのバンクレジスタが待避されたかどうかの判定を依頼する（ステップＳ１１０３）。
【０１２９】
待避されていると判定された場合（ステップＳ１１０３：Ｙｅｓ）、レジスタ待避・復帰部２０４ａは当該モードのバンクレジスタ一覧を取得し、レジスタの値を図２４のコンテキスト待避領域から取得して復帰し（ステップＳ１１０４）、ステップＳ１１０２に戻る。一方、当該モードのバンクレジスタが待避されていないと判定された場合（ステップＳ１１０３：Ｎｏ）、レジスタ待避・復帰部２０４ａはコンテキスト待避処理の中で更新を行った当該モードのクリアフラグがセットされているかどうか判定する（ステップＳ１１０５）。セットされている場合（ステップＳ１１０５：Ｙｅｓ）、当該モードのバンクレジスタをクリアし（ステップＳ１１０６）、ステップＳ１１０２に戻る。クリアフラグがセットされていない場合（ステップＳ１１０５：Ｎｏ）、何もせずにステップＳ１１０２に戻る。
【０１３０】
なお、図２３の構成ではセキュリティ設定部３０７はＯＳ部内部に設けられていたが、図２７のようにモニタ部２００の内部に設ける構成の変更も考えられる。特にＡＲＭプロセッサにおいては、近年ＴｒｕｓｔＺｏｎｅ（登録商標）と呼ばれる仮想化技術が搭載されている。ＴｒｕｓｔＺｏｎｅはセキュアＯＳとノンセキュアＯＳとよばれる２種類のＯＳを動作させることができ、セキュアＯＳ側で耐タンパ性が要求される処理を、ノンセキュアＯＳ側で通常の処理を実行することを前提としている。セキュアＯＳ側では信頼できるＯＳを動作させることが前提とされているため、セキュアＯＳ側でノンセキュアＯＳのレジスタを悪意を持って破壊することは考えなくて良い。一方、ノンセキュアＯＳについては悪意のあるプログラムが入り込む可能性があり、悪意を持ったレジスタ破壊が起きる可能性がある。このため、セキュリティ設定部２１３をモニタ部２００内部に設け、セキュアＯＳ側の図２４の表におけるセキュリティ有効欄を「有効」、ノンセキュアＯＳ側のセキュリティ有効欄を「無効」としてあらかじめモニタ側で設定するような構成も考えうる。また、ハンドラポリシ設定部３０４、４０４やモード利用通知部３０３、４０３もＯＳ部に設けられているが、あらかじめ動作するＯＳが決まっている場合などにおいては、第１の実施形態で述べたようにモニタ部２００に設けることも可能である。
【０１３１】
本実施形態により、セキュリティ面に配慮しつつＯＳ切替えを高速化するモニタを実現することが可能となる。
【０１３２】
上述した実施形態で説明した情報操作装置１の各構成部の少なくとも一部は、ハードウェアで構成してもよいし、ソフトウェアで構成してもよい。ソフトウェアで構成する場合には、装置・サーバの少なくとも一部の機能を実現するプログラムをフロッピー（登録商標）ディスクやＣＤ−ＲＯＭ等の記録媒体に収納し、コンピュータに読み込ませて実行させてもよい。記録媒体は、磁気ディスクや光ディスク等の携帯可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記録媒体でもよい。
【０１３３】
また、情報操作装置１の少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線（無線通信も含む）を介して頒布してもよい。さらに、同プログラムを暗号化したり、変調をかけたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、あるいは記録媒体に収納して頒布してもよい。
【０１３４】
なお、この発明は上記した実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を種々変形して具体化することができる。また、上記した実施の形態に開示されている複数の構成要素を適宜に組み合わせることにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素から幾つかの構成要素を削除しても良いものである。さらに、異なる実施の形態に係る構成要素を適宜組み合わせても良いものである。
【符号の説明】
【０１３５】
１  情報処理装置
１０  ＣＰＵ部
１１  レジスタ部
１２  割込み制御部
１３  モード管理部
２０  主記憶部
２１  待避用メモリ部
３０  ディスプレイ
４０  入力機器
５０  ストレージ部
５１  モニタ部
５２  ＯＳ部
１００  ハードウェア部
２００  モニタ部
２０１  ＯＳ切替部
２０２  ＯＳ命令検出部
２０３  待避情報管理部
２０４  レジスタ待避・復帰部
２０５  待避レジスタ決定部
２０６  バンクレジスタ判定部
２０７  モード利用通知部
２０８  割込みポリシ判定部
２０９  割込み状態管理部
２１０  割込み検出部
２１１  動的設定変更検出部
２１２  コア番号管理部
２１３  セキュリティ設定部
２１４  ハンドラポリシ設定部
３００  第１ＯＳ部
３０１  ＯＳ実行部
３０２  ＯＳ切替命令部
３０３  モード利用通知部
３０４  ハンドラポリシ設定部
３０５  割込み可否設定部
３０７  セキュリティ設定部
４００  第２ＯＳ部
【図１】
2015001947.tif 000003
【図２−１】
2015001947.tif 000004
【図２−２】
2015001947.tif 000005
【図３】
2015001947.tif 000006
【図４】
2015001947.tif 000007
【図５】
2015001947.tif 000008
【図６】
2015001947.tif 000009
【図７】
2015001947.tif 000010
【図８−１】
2015001947.tif 000011
【図８−２】
2015001947.tif 000012
【図９】
2015001947.tif 000013
【図１０】
2015001947.tif 000014
【図１１】
2015001947.tif 000015
【図１２】
2015001947.tif 000016
【図１３】
2015001947.tif 000017
【図１４】
2015001947.tif 000018
【図１５】
2015001947.tif 000019
【図１６】
2015001947.tif 000020
【図１７】
2015001947.tif 000021
【図１８】
2015001947.tif 000022
【図１９】
2015001947.tif 000023
【図２０−１】
2015001947.tif 000024
【図２０−２】
2015001947.tif 000025
【図２１】
2015001947.tif 000026
【図２２】
2015001947.tif 000027
【図２３】
2015001947.tif 000028
【図２４】
2015001947.tif 000029
【図２５】
2015001947.tif 000030
【図２６】
2015001947.tif 000031
【図２７】
2015001947.tif 000032