以下に、本発明にかかる情報処理装置の実施形態を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
(第1の実施形態)
図1は、第1の実施形態の情報処理装置のハードウェア構成を示すブロック図である。情報処理装置1は、CPU部10、主記憶部20、ディスプレイ30、入力機器40及びストレージ部50を備えている。CPU部10はレジスタ部11、割込み制御部12、モード管理部13、及び非図示の演算部を備えている。ストレージ部50には、モニタ部51、OS部52といったCPU部10で実行されるプログラム群が格納される。また、主記憶部20は、例えばRAMなどの記憶メモリにより構成されており、レジスタの値を待避させる待避用メモリ部21を含んでいる。
CPU部10は主記憶部20に格納された命令列の実行を行う。主記憶部20には、OS部52のプログラムがロードされ、CPU部10により実行される。OS部52は各種デバイスの管理などを行い、アプリケーションから利用できるようにする特殊なプログラムである。またCPU部10は複数のOS部52を実行する機能を有する。モニタ部51は、OS部52の起動や切替え、各OS部52が利用するハードウェアリソースの管理などといったOS部52の管理を行うためのプログラムである。同時に実行可能なOS部52の数はCPU部10が同時に実行できるプログラムの数、すなわちコアの数に依存するが、時分割で各OS部52を切替えて実行することで仮想的にOS部52を複数実行しているように見せかけることができる
OS部52側の要求やハードウェアからの割込みなどによりモニタ部51が呼び出され、モニタ部51によりOS部52の切替えが制御される。また、CPU部10はOS部52を実行するためのモード、OS部52上で動作するユーザプログラムを実行するためのモード、割込みを処理するモードなど複数のモードで実行される。このモードはモード管理部13により制御される。例えば、ARM社のプロセッサにおいては割込みを処理するFIQモード、及びIRQモード、ユーザプログラムを実行するためのUSRモード、OS部52を実行するためのSVCモード、モニタ部を実行するためのMONモードなどが存在する。各モードでアクセスできるハードウェアリソースなどが異なる。以降では、割込みを処理するモードのことをまとめて割込み関連モードと呼ぶ。
また、各モードでレジスタ部11を共有するとモード切替えの度にレジスタの待避、及び復帰処理が必要になり、モード切替えの効率が悪い。例えばユーザプログラムを実行中に割込み処理を行おうとすると、ユーザプログラムが使っていたレジスタを待避させ、割込み処理を行い、割込み処理完了後ユーザプログラムが使っていたレジスタを復帰させて処理を継続させる必要がある。ARMプロセッサなど一部のプロセッサにおいては、レジスタは部分的に重複したバンクに配置され、モードごとに異なるバンクレジスタが使用される。重複したバンクに配置されたレジスタのことをバンクレジスタ、バンクされないレジスタのことを非バンクレジスタと呼ぶ。図1の構成においてもCPU部10は、各モード専用のレジスタである非図示のバンクレジスタ部をレジスタ部11の内部に持ち、モード切替えの際にバンクレジスタ部を切替える。これにより、バンクレジスタ部はモード切替えの際にソフトウェアから待避、復帰処理を行う必要がなくなり、モード切替え時の処理を簡略化させて高速化している。しかしながら、バンクレジスタ部が増えるとモード切替えが高速化できる一方で、ハードウェア規模が増大するため、図1の構成ではレジスタ部11の内部にはモード間で共有される非図示の非バンクレジスタ部も設けられる。例えば組み込み機器向けで利用されることが多いARMプロセッサにおいては、SVCモード、IRQモードなどではR13、R14と呼ばれるレジスタが、FIQモード、USRモードではR8、R9、R10、R11、R12、R13、R14と呼ばれるレジスタがバンクレジスタとなっている。すなわち、SVCモードからIRQモードに切替える際にはR13、R14レジスタの待避、復帰を行う必要はない。
図2−1はCPU部10や主記憶部20を含むハードウェアとCPU部10で動作するソフトウェア構成の一例を示している。図2−1に示されるモニタ部200及び第1OS部300、第2OS部400はソフトウェアである。また、図中ではOS部は2つのみの構成を示しているが、3つ以上存在しても良い。以降、高速なOS切替えを実現するモニタ機能を有する第1の実施形態について詳細に説明する。
まず各OS部300、400が有する機能について説明する。各OS部300、400はOSの各種処理を実行するためのOS実行部301、401、OS切替えを要求するOS切替命令部302、402、そのOSが利用するモードをモニタ部200に対して通知するためのモード利用通知部303、403を備える。
情報処理装置1を起動すると各OS部300、400が主記憶部20にロードされ、各OS部300、400の内部に存在するOS実行部301、401によるOS処理の実行が開始される。OS実行部301、401はOSの各種処理を実行する機能を有する。例えば、プログラムの開始、終了などのタスク管理機能、ファイルに対する読み書き機能、デバイスに対するアクセス機能などである。特にOS実行部301、401は別のOS上で動作する処理を実行するためにOS切替命令部302、402を呼び出す機能やOS起動時にモード利用通知部303、403を呼び出す機能を有する。
モード利用通知部303、403はOS実行部301、401より呼び出され、自OSが利用するモードを待避レジスタ決定部205に通知する機能を有する。モード利用通知部303、403はOS起動時にモードの通知を行う。例えば、ユーザプログラムが動作せず、割込みを扱わないOSの場合にはOS動作用モード(以降「SVCモード」とい。)のみ使うことを待避レジスタ決定部205に通知する。これにより、待避レジスタ決定部205は各OSがどのモードを利用するかを知ることができる。
OS切替命令部302、402はOS実行部301、401より呼び出され、モニタ部200のOS命令検出部202に対してOS切替えを要求する機能を有する。例えば実行したい処理が別OS上で動作するような場合に、OS切替えを要求する。特に3種類以上のOSが同時に動作する場合などにおいて、明示的に呼び出したいOSが存在する場合にはモニタに対して切替え先のOSを指定する機能を有しても良い。これにより、例えば暗号化処理を第2OS部400上で実行させ、第1OS部300上で動作するプログラムから暗号化機能を呼び出す、といったことが可能になる。
続いてモニタ部200が有する機能について説明する。モニタ部200は、OS命令検出部202、OS切替部201、レジスタ待避・復帰部204、待避情報管理部203、待避レジスタ決定部205、バンクレジスタ判定部206を備える。OS命令検出部202は、OS切替え命令を検出する。OS切替部201は、OS切替えを実行する。レジスタ待避・復帰部204は、OS切替えのためのレジスタの待避及び復帰を行う。待避情報管理部203は、OS切替え時に待避したレジスタ情報を管理する。待避レジスタ決定部205は、最低限待避が必要なレジスタを決定する。バンクレジスタ判定部206はバンクレジスタ情報を管理する。モニタ部200がOS部300、400から与えられる情報を元に、最低限待避が必要なレジスタを判定し、待避するレジスタ数を削減することでOS切替え処理を高速化する。
OS命令検出部202は、OS切替命令部302、402から発行されるOS切替え命令を検出し、切替え元のOSと切替え先のOSを決定し、その情報をOS切替部201に渡して呼び出す。切替え先のOSの決定方法については、明示的に切替え先OSが切替え元OSによって指定されている場合にはその情報を利用しても良いし、ラウンドロビンにより順にOSを切替えても良いし、各OS上で動作するアプリケーションのリアルタイム制約や各OSの実行優先度により決定しても良い。
OS切替部201は、OS命令検出部202から切替え元及び切替え先のOS情報を受け取り、レジスタ待避・復帰部204を切替え元OS、切替え先OSを指定して呼び出してコンテキストの待避及び復帰を指示する。また、OS切替部201は、図5の各OSのコンテキスト待避領域に対してOS切替え時の戻り先をレジスタ部11から取得して保存する機能、及び取得してレジスタ部11に設定してOS実行部301、401を呼び出す機能を有する。
レジスタ待避・復帰部204はOS切替部201から呼び出され、切替え元OSのレジスタを待避させ、切替え先OSのレジスタを復帰させる。レジスタ待避・復帰部204はCPU部10が有するモード一覧を列挙し、待避レジスタ決定部205に切替え元OS情報と切替え先OS情報とモード情報とを渡して呼び出し、待避が必要なレジスタの情報を取得する。プロセッサが持つ全てのモードについて待避が必要なレジスタを判定するため、例えばプロセッサがSVCモードとUSRモードの2つのモードを持つ場合には待避レジスタ決定部205は2回呼び出される。切替え元OS情報、及び切替先OS情報は、第1OS部300や第2OS部400の識別子などが用いられる。モード情報は、切替え先OSをいずれのモードで起動するかを指定する情報である。レジスタ待避・復帰部204は、取得した情報を元に待避用メモリ部21に対して待避が必要なレジスタ部11の値を待避させる。
待避用メモリ部21には図5のような待避レジスタ管理表が記憶されており、例えばレジスタ待避・復帰部204は第1OS部300から第2OS部400に切替える場合にSVCモードのレジスタ待避が必要となった場合には、第1OS部300のSVCモードのコンテキスト待避領域に対してバンクレジスタの待避を行う。待避後の待避用メモリ部21のコンテキスト待避領域は図5のようになる。また、レジスタ待避・復帰部204は待避情報管理部203に対して切替え元OSの情報と待避したレジスタの情報を渡して保存を依頼する。
また、レジスタ待避・復帰部204は切替え先OS情報を待避情報管理部203に渡して、前回切替え先OSから別のOSに切替えた際に待避したレジスタの情報を取得し、待避用メモリ部21の図5の表から待避したレジスタの値を取得し、レジスタ部11にセットする。例えば図7の状態で第1OS部300に切替える場合には、レジスタ待避・復帰部204はSVCモードのR13レジスタに対してX、R14レジスタに対してY、StatusRegisterに対してYをセットする。なお、非バンクレジスタについては必ず待避及び復帰を行う。
待避情報管理部203は、図5、図7のようなOSと各モード、前回待避の有無の関係を示す表を管理する。レジスタ待避・復帰部204から待避情報の設定を依頼された場合には、待避情報管理部203は、渡された切替え元OS情報と待避レジスタ情報を元に表を更新する。例えば、切替え元OSが第1OS部300の場合にSVCモードのレジスタを待避させた場合には、待避情報管理部203は、図5のように第1OS部300のSVCモードの前回待避欄を「無し」から「有り」に変更する。
一方レジスタ待避・復帰部204から切替え先OSを指定して前回待避したレジスタの情報の取得要求があった場合には、待避情報管理部203は、切替え先OSの項目を参照し、前回待避したレジスタ、すなわち前回待避の欄が有りとなっているモードの情報を返す。例えば図5の状態において切替え先OSとして第2OS部400が指定された場合には、待避情報管理部203は、復帰が必要なレジスタはなしという情報、第1OS部300が指定された場合には、SVCモードレジスタの復帰が必要という情報をそれぞれ返す。本構成では待避されるレジスタが切替え元OSのモード利用状況や別のOSのモード利用状況によって変わるため待避情報管理部203が必要になる。
待避レジスタ決定部205はレジスタ待避・復帰部204から切替え元OSと切替え先OSとモード情報を受け取り、そのモードのレジスタで待避すべきレジスタを決定する。待避レジスタ決定部205は、バンクレジスタ判定部206にモード情報を渡して、そのモードのバンクレジスタ一覧を受け取る。待避レジスタ決定部205は、図5の各OSがどのモードを利用するか記載された表より、そのバンクレジスタのモードを切替え元OSが利用するかどうか判定する。切替え元OSがそのモードを利用しない場合には待避の必要なしと判定する。一方、切替え元OSがそのモードを利用する場合には、待避レジスタ決定部205は別のOSがそのモードを利用するかどうか判定し、利用する場合には待避が必要、利用しない場合には待避の必要なしと判定する。例えば、図5の例では第1OS部300から第2OS部400に切替える場合、SVCモードは第2OS部400でも利用するのでSVCモードレジスタは待避の必要有り、IRQモードでは第1OS部300では使うが第2OS部400では使わないのでIRQモードレジスタは待避の必要なし、USRモードは第1OS部300では使わないのでUSRモードレジスタは待避の必要なし、FIQモードは第1OS部300と第2OS部400の両方で使わないのでFIQレジスタは待避の必要なしと判定される。
すなわち待避が必要なのはSVCモードレジスタのみと判定される。さらにこの結果より、待避レジスタ決定部205は、待避が必要とされた場合には当該モードのバンクレジスタ一覧を、待避が必要ないと判断された場合には待避が必要なレジスタ無しとの情報を呼び出し元のレジスタ待避・復帰部204に返信する。待避レジスタ決定部205によってモードの利用状況から最低限待避が必要なレジスタが決定されることで、レジスタ待避・復帰時間を削減してOS切替えを高速化することができるようになる。また、待避レジスタ決定部205はモード利用通知部から各OSが利用するモード情報を受け取りモード利用欄を更新する。
バンクレジスタ判定部206はバンクレジスタと非バンクレジスタ一覧を待避レジスタ決定部205に返す。バンクレジスタ判定部206は図4のような表を管理し、表の内容を返信する。図4に示されるように、例えばR0は非バンクレジスタである。また、SVCモードのR13レジスタやUSRモードのR8レジスタなどはバンクレジスタである。非バンクレジスタはどのモードでも利用され、OS切替の際に待避が必要であるため、バンクレジスタ判定部206によるバンクレジスタ判定を実行する。呼び出し元OSに返す内容を決定するために、バンクレジスタ判定部206は呼び出し時に非バンクレジスタ取得命令、又はモード情報を引数としたバンクレジスタ取得命令を受け取る。例えば、呼び出し元OSから非バンクレジスタの取得を命令された場合には、バンクレジスタ判定部206はR0〜R12を、SVCモードのバンクレジスタ一覧の取得を依頼された場合にはR13、R14、StatusRegisterを返す。
レジスタ部11は非バンクレジスタとモード別のバンクレジスタを持ち、レジスタ値設定やレジスタ値取得を行う。また、待避用メモリ部21は図5のような表を格納する領域を有し、表に対して値の取得及び設定を行う機能を有する。
なお、図2−1の構成ではモード利用通知部303、304はOS部300、400に存在していたが、図2−2のようにモニタ部200にモード利用通知部207を備える形態への変更も可能である。あらかじめ動作するOSがわかっているような場合には、モニタ部200にモード利用通知部207を設けることにより各OSが利用するモードをモニタ部200の起動時に待避レジスタ決定部205に伝える。これにより、OS部300、400にはモード利用通知部を設ける必要がなくなり、既存のOS部300、400の構成を最大限流用することが可能になる。
次に図3のフローチャートに示されるストレージに格納されるOS部の起動時の処理手順について述べる。なお、OS部300、400が起動されるより前にモニタ部200は起動している。まず、各OS部300、400のモード利用通知部303、403は起動時にそのOS部がどのモードを利用するかモニタ部200の待避レジスタ決定部205に通知する(ステップS101)。または、図2−2の構成のようにモニタ部200にモード利用通知部207が存在する場合には、モニタ部200の起動時に各OSのモード利用情報を待避レジスタ決定部205に通知する。
するとまず、待避レジスタ決定部205は待避用メモリ部21にOSコンテキスト待避用メモリ領域を確保する(ステップS102)。例えば図5では第1OS部300と第2OS部400の欄があらかじめあるが、別の第3のOSから通知があった場合には、待避レジスタ決定部205は第3OS部のデータ記入用領域を確保し、初期化する。この際前回待避の欄はなし、コンテキスト待避領域は空とする。
さらに、待避レジスタ決定部205は図5の呼び出し元OSのモード利用欄を更新する(ステップS103)。例えば図5の場合、第1OS部300についてはSVCモード及びIRQモード利用あり、USRモード及びFIQモードの利用なしとなっている。以上でOS起動時の通知処理は完了となる。
続いて図6のフローチャートに示されるOS切替え時の処理手順について述べる。まずOS切替え時にはOS切替命令部302、402がOS切替え命令を発行する(ステップS201)。続いてOS命令検出部202がOS切替え命令を検出する(ステップS202)。さらに、OS命令検出部202は切替え先OSを決定する(ステップS203)。このアルゴリズムとしては、切替え元OSから明示的に指定される際にはそのOSを切替え先としても良いし、ラウンドロビン、優先度付きスケジューリング、EDF(Earliest Deadline First)などのよく知られたスケジューリング方法により決定しても良い。
OS命令検出部202はさらにOS切替部201を呼び出し、OS切替部201は切替え元OSのコンテキスト待避メモリを取得し(ステップS204)、取得したコンテキスト待避メモリに対して切替え元OSの戻り先アドレスを保存する(ステップS205)。さらにOS切替部201はレジスタ待避・復帰部204を呼び出し、レジスタ待避・復帰部204はバンクレジスタ判定部206から非バンクレジスタの一覧を取得し、非バンクレジスタを切替え元OSコンテキスト待避メモリに待避させる(ステップS206)。
さらに待避レジスタ決定部205とレジスタ待避・復帰部204は切替え元OSのバンクレジスタの待避を行う。以下、バンクレジスタの待避の処理の詳細を説明する。まず、レジスタ待避・復帰部204はCPU部10が持つモードを列挙するために未処理モードが存在するかどうかを判定する(ステップS207)。未処理モードとは、上述したSVCモードや、IRQモードのうち処理が完了されていないモードであり、レジスタ待避・復帰部204が保持する各モードの処理済み状況から判断される。未処理モードが存在しないと判定された場合(ステップS207:No)、必要なレジスタの待避が全て終了したため、ステップS212に移行する。
一方、未処理モードが存在したと判定された場合(ステップS207:Yes)、レジスタ待避・復帰部204は待避レジスタ決定部205を呼び出し、待避レジスタ決定部205は切替え元OSがそのモードを扱うかどうか判定する(ステップS208)。扱わないと判定された場合(ステップS208:No)、レジスタ待避の必要はないため、ステップS207に戻り、次のモードの処理に移行する。扱うと判定された場合(ステップS208:Yes)、待避レジスタ決定部205は別のOSが当該モードを扱うかどうかの判定に移る。これは別のOSが当該モードを扱う場合、当該モードのバンクレジスタを破壊する可能性があるため、そのモードのバンクレジスタは待避が必要であるためである。まず待避レジスタ決定部205は自分のOS以外のOSを列挙し、各OSについて以下の処理を行う。
まず、待避レジスタ決定部205は未処理OSがあるかどうか判定する(ステップS209)。未処理OSがないと判定された場合(ステップS209:No)、全OSの処理が終了したと判定し、ステップS207に戻る。未処理OSがあると判定された場合(ステップS209:Yes)、待避レジスタ決定部205は図5の待避レジスタ管理表を参照しそのOSが当該モードを扱うかどうかを判定する(ステップS210)。扱わないと判定された場合(ステップS210:No)、ステップS209に戻り、次のOSについて処理を行う。そのOSが当該モードを扱うと判定された場合(ステップS210:Yes)、待避レジスタ決定部205はレジスタの待避が必要と判断し、当該モードのバンクレジスタの一覧を取得し、レジスタの内容を切替え元OSのコンテキスト保存領域に待避させ(ステップS211)、ステップS207に戻って次のモードの処理を行う。全てのモードの処理が終わった場合には、レジスタ待避・復帰部204は待避情報管理部203に待避したレジスタ情報と切替え元OS情報を渡し、待避情報管理部203は切替え元OSの待避情報を保存する(ステップS212)。すなわち、図5における切替え元OSの各モードの前回待避の欄を更新する。例えば、第1OS部300から第2OS部400にOSを切替える際に図7のように非バンクレジスタとSVCモードのバンクレジスタのみを待避させた場合には、第1OS部300のSVCモードの前回待避の欄を「有り」に、第1OS部300のUSRモード、IRQモード、FIQモードの欄を「無し」に設定する。
続いて、レジスタ待避・復帰部204と待避情報管理部203は切替え先OSが前回別OSに切替えられた際に待避したレジスタ値を復帰する処理を次のように行う。まず、レジスタ待避・復帰部204は切替え先のOSのコンテキストが保存されているメモリのアドレスを取得する(ステップS213)。さらに、全てのモードについて前回待避が行われたかを確認するためにレジスタ待避・復帰部204は取得したコンテキスト待避用メモリのアドレスを渡して待避情報管理部203を呼び出してコンテキスト待避用メモリのアドレスから切替先待避情報を取得する(ステップS214)。次いで、待避情報管理部203は取得した未処理のモードがあるか確認する(ステップS215)。未処理のモードがないと判定された場合(ステップS215:No)、全てのモードの処理が終わったと判定してステップS218に移行する。
未処理モードがあると判定された場合(ステップS215:Yes)、待避情報管理部203は未処理モードの中から一つのモードを取りだし、そのモードのバンクレジスタが前回待避されたかを図5の待避レジスタ管理表から確認する(ステップS216)。待避されていない場合には(ステップS216:No)、次のモードの処理を行うためにステップS215に移行する。
一方、選択したレジスタが前回待避されていた場合(ステップS216:Yes)、レジスタ待避・復帰部204は切替え先のコンテキスト保存領域からそのモードのバンクレジスタの値を取り出し、レジスタを復帰する(ステップS217)。その後ステップS215に戻る。バンクレジスタの復帰が終わると、レジスタ待避・復帰部204は非バンクレジスタの復帰を行い(ステップS218)、さらにOS切替部201は前回切替え先OSから別のOSに切替えた際に保存した切替え先OSの戻り先を取得し(ステップS219)、その戻り先にジャンプしてOS切替えを終了する(ステップS220)。
(第2の実施形態)
以上の処理では、各OS部が利用するモード情報からのみ待避するバンクレジスタを決定していた。しかし、特定モードの処理(ハンドラ)の途中でOS切替えが起きないことが保証できる場合には、そのモードのレジスタを破壊して良い場合がある。ただし、処理の途中でOS切替えが起きないことが保証できたとしても、当該モードに入る際に毎回スタックポインタを設定しない場合など、レジスタの破壊が許されない場合もある。破壊が許されるかどうかはOSの設計に依存する。すなわち、処理の途中でOS切替えが起きないことが保証でき、なおかつレジスタの破壊が許される場合にはレジスタの待避の必要はない。さらに、OS切替えが起きないことが保証でき、なおかつレジスタの破壊が許されるかどうかの情報(ハンドラポリシ情報)をOSがモニタ部に伝えることで、モニタ部はその情報からOS切替え時にレジスタ待避が必要かどうかを判断できる。各OSが利用するモード情報からのみ待避するバンクレジスタを決定する場合よりもOS切替え時に待避が必要なレジスタをさらに削減できる可能性がある。
図8−1はモード利用情報に加えてハンドラポリシ情報から待避が必要なレジスタを判定し、最低限のレジスタのみを待避させることでOS切替えの高速化を実現するための構成である。図8−1は図2−1とはハンドラポリシ設定部304、404を有することと、及び待避レジスタ決定部205aの内部処理が異なる。それぞれの処理について次に説明する。
ハンドラポリシ設定部304、404はOS起動時に待避レジスタ決定部205aに対して当該OSの各モードにおいて、そのモードの処理中に処理中断が起きるかどうかの情報を設定する。なお、処理中断がない場合においてもレジスタ破壊が許されない場合には処理「中断有り」と設定する。
待避レジスタ決定部205aはハンドラポリシ設定部304、404からの要求に従い、各OSの各モードのハンドラポリシの設定を行う機能を持つとともに、各モードのレジスタ待避が必要かどうかの判定を行う機能を有する。ハンドラポリシ設定部304、404からの設定要求があった場合には、図9のハンドラポリシの設定元OSのハンドラポリシ欄を更新する。一方、各モードのレジスタ待避が必要かどうかの判定を行う際には、図2−1の場合と各モードのバンクレジスタの待避が必要かどうかを判定する方法が異なる。待避レジスタ決定部205aは、切替え元OSが当該モードを扱うとともに切替え元OSの当該モードが中断ありに設定されており、さらに当該モードを扱うOSが別に存在する場合に限り当該モードのバンクレジスタの待避が必要と判断する。
なお、図8−1の構成ではモード利用通知部303及びハンドラポリシ設定部304、404はOS部300、400に存在していたが、図8−2のようにモニタ部200にモード利用通知部207、ハンドラポリシ設定部214を備える形態への変更も可能である。あらかじめ動作するOSがわかっているような場合には、モニタ部200にモード利用通知部207とハンドラポリシ設定部214を設けることにより各OSが利用するモードとハンドラポリシ情報を情報処理装置1の起動時に待避レジスタ決定部205aに伝える。これにより、OS部300、400にはモード利用通知部とハンドラポリシ設定部を設ける必要がなくなり、既存のOS部の構成を最大限流用することが可能になる。
次に図10のフローチャートに示されるポリシ設定の処理手順について述べる。ハンドラポリシ設定部304、404は待避レジスタ決定部205aに対して、各モードのハンドラポリシを通知する(ステップS302)。もしくは図8−2のようにモニタ部200にハンドラポリシ設定部214を設ける場合には、ハンドラポリシ設定部214はモニタ部200の起動時に待避レジスタ決定部205aに対して各OSのハンドラポリシを通知する。待避レジスタ決定部205aは当該OSのハンドラポリシ欄を各モードについて設定し(ステップS303)、ハンドラポリシの設定を終了する。
続いて、OS切替え時の処理のうち、コンテキスト待避処理の流れについて図11を用いて説明する。なお、図11は図6におけるステップS207〜S212に対応する処理を抜き出して記載しており、その他の処理は図6と同等である。まず全てのモードについてバンクレジスタの待避が必要かを判断するためにレジスタ待避・復帰部204はモードの列挙を行い、未処理のモードがあるかどうかを判定する(ステップS402)。未処理のモードがないと判定された場合(ステップS402:No)、レジスタ待避・復帰部204は待避情報管理部203を呼び出し、切替え元OSの待避したバンクレジスタのモード情報について図9の前回待避情報の欄を更新し(ステップS408)、コンテキスト待避を終了する。
一方、未処理モードがある場合(ステップS402:Yes)、レジスタ待避・復帰部204は待避レジスタ決定部205aを呼び出し、待避レジスタ決定部205aはそのモードについて切替え元OSが扱うかどうかを判定する(ステップS403)。扱わない場合(ステップS403:No)、待避レジスタ決定部205aはレジスタ待避の必要がないと判定しステップS402に戻る。当該モードを扱うと判定された場合(ステップS403:Yes)、待避レジスタ決定部205aは当該モードの中断があるかどうかを図9の待避レジスタ管理表を参照して確認する(ステップS404)。
中断がないと判定された場合(ステップS404:No)、待避レジスタ決定部205aはレジスタ待避の必要がないと判断しステップS402に戻る。一方、中断があると判定された場合(ステップS404:Yes)、待避レジスタ決定部205aは別OSがそのモードを扱うかどうか判定する処理に移行する。具体的には、待避レジスタ決定部205aは全OSを列挙し未処理OSがあるかどうか判定する(ステップS405)。未処理OSがないと判定された場合(ステップS405:No)、待避レジスタ決定部205aは次のモードの処理に移るためステップS402に移る。未処理OSがあると判定された場合(ステップS405:Yes)、待避レジスタ決定部205aはそのOSの当該モードの利用情報を取り出し、当該モードを扱うか否かを判定する(ステップS406)。OSがモードを扱わないと判定された場合(ステップS406:No)、ステップS405に戻る。当該モードを扱うと判定された場合(ステップS406:Yes)、待避レジスタ決定部205aはそのモードのバンクレジスタの待避が必要と判定し、バンクレジスタの一覧を取得し、その値の待避を行って(ステップS407)、ステップS402に戻る。
本実施形態の情報処理装置1にあっては、各OSのモード利用情報とハンドラポリシ情報を利用してOS切替え時に待避が必要なレジスタを決定することにより、待避するレジスタを削減し、OS切替えの処理を高速化することができる。また、本実施形態にあっては、このような構成を実現するために、特別なコンパイラなども必要ないため実装も容易である。なお、本実施形態ではOS切替えの度にレジスタ待避が必要かどうかの判定を行っているが、モード利用に関する設定が変わらなければ待避が必要なバンクレジスタは変わらないため、これに限らずあらかじめ一度だけバンクレジスタの待避が必要かどうかの判定をしておき、その結果からバンクレジスタの待避の有無を決定しても良い。
(第3の実施形態)
上記実施形態では待避するレジスタをモード利用情報などのOS部300、400から設定される情報により決定していた。これはOS部300、400にモニタ部200への情報通知機能を設けることが必要ということを意味する。一方でOS部から通知される情報のみに頼らず、モードの利用の有無が一部でもモニタ部側で自動的に判別判定できれば、OS部300、400からの情報通知機能を削除、もしくは簡略化できる。これにより高速化のためにOS部300、400側に特別な機構を設ける必要がなくなるか、もしくは簡略化することができるようになり、既存のOS部300、400の設計を最大限流用できることとなる。以下、本実施形態の詳細について図面を参照して説明する。
図12は第3の実施形態におけるCPU部10や主記憶部20を含むハードウェアとCPU部10で動作するソフトウェア構成の一例を示している。図12は図8−1とOS部300、400が割込み可否設定部305、405を有する点、モニタ部200が割込み検出部210、割込み状態管理部209、割込みポリシ判定部208を有する点、ハードウェア部100が割込み制御部12を有する点、モード通知部とハンドラポリシ設定部が存在しない点が異なる。また、待避レジスタ決定部205bの内部処理も異なる。なお、図12の構成においては割込み入力可否情報はOS起動から終了まで変わらないことを想定している。また、図13に示す待避用メモリ部21に格納される表の構造が図5と異なる。図13で示される待避レジスタ管理表は、図5からモード利用欄が削除され、割込み状態欄が追加されている。割込み状態欄の初期値は「--」となっている。以下ではそれぞれについて説明する。
割込み可否設定部305、405は自OSが割込みを受け付けるかどうかをハードウェア部100の割込み制御部12に対して設定する。受付不可と設定した場合には、OSに対して割込みが入力されなくなる。一方受付許可を設定した場合には、割込み発生時にOS実行部301、401内に設けられた割込みハンドラが呼び出されるようになる。すなわち、割込みを処理するモードの場合、割込みを受け付けるかどうかと、そのモードで動作しうるかどうかは多くの場合に等しいため、この割込み可否設定部305、405による設定からモード利用の有無が判定できる。
例えば、IRQ割込みがIRQモードで処理されるプロセッサの場合、あるOSがIRQ割込みを受け付けない設定になっていれば、そのOSはIRQモードで動作することはないということになる。すなわち、そのOSから別のOSに切替える際にはIRQレジスタは待避させる必要がない。
割込み制御部12はOS部300、400からの割込み入力可否の設定要求に従い、割込み入力可否を設定する。さらに、割込みポリシ判定部208に割込み入力可否設定時に、設定元のOS情報と入力可否を通知する。割込み発生時には、割込み入力可を設定されている際にはモニタ部200の割込み検出部210に割込みの発生を通知し、割込み入力不可が設定されている場合には割込みを無視する。
割込み検出部210は割込みが起きた際に、割込み制御部12から呼び出される。本実施形態ではモニタ部200の内部に割込み検出部210が設けられているが、OS部300、400内部に設けても良い。割込み検出部210は、現在実行中のOS情報や割込みの種別から割込み処理を行うOSを判定する。判定後、割込み検出部210は、割込み入力先OSと割込みモードを割込み状態管理部209に渡し、割込み状態の処理中への変更を割込み状態管理部209に依頼する。
この割込み処理を行うOSの判定方法は特定のOSに入力するようにあらかじめ決定しておいても良いし、OS側が受け付ける割込みの種別をモニタに対して通知しても良いし、割込み発生時に動作していたOSに入力しても良い。また、割込み検出部210はOSによる割込み処理の終了時にも呼び出される。その際には、割込みが入力されていたOSの情報と、割込み種別を判定後、割込み入力先OSと割込みモードを割込み状態管理部209に渡し、割込み状態の処理完了への変更を割込み状態管理部209に依頼する。OSの設計にもよるが、割込み処理が完了していれば当該割込み処理モードのレジスタ破壊を起こしても良い場合が多いため、OSの設計によってはレジスタ待避を省くことが可能である。このため、割込み処理が完了しているか、割込み処理中かを判定するため、割込み検出部210が設けられている。
割込み状態管理部209は割込み検出部210からの要求に応じて、図13の表における「割込み状態」の情報を変更する。図13の待避レジスタ管理表の「割込み状態」の初期値は割込み処理を行うモード(IRQ/FIQなど)については「無効」、それ以外のモードについては「--(割込みモード外)」となっている。割込みモード外とは、割込み検出部210がそのモードへの切替えを検出できないモードのことである。例えば、USRモードなどは割込みによりそのモードに遷移しないため、割込みモード外となる。割込み状態管理部209は割込み検出部210から割込み入力先のOS情報と、割込み処理モードを受け取る。割込み処理中への変更依頼を受信した場合は、割込み状態管理部209は図13の表の「割込み状態」の該当欄を「処理中」に更新する。例えば、割込み入力先が第1OS部300、割込み種別がFIQの場合には「処理中」に変更する。逆に割込み処理完了への変更要求の場合には、図13の表の「割込み状態」の該当欄を「完了」に更新する。例えば、割込み入力先が第1OS部300、割込み種別がIRQの場合には「完了」に変更する。これにより、各OSの各割込みモードで処理中の割込みがあるかどうかを待避レジスタ管理表から判断することができるようになり、割込み処理中でなければ、後述のハンドラポリシ情報によっては割込み関連レジスタは破壊しても良いこととなるため、一部レジスタの待避処理を省くことが可能となる。
また、割込み状態管理部209は待避レジスタ決定部205bからの要求に従い、指定されたOSと割込みモードで割込み処理中かどうかを返す。例えば、OSとして第2OS部400、割込みモードとしてIRQを指定された場合には「完了」を返す。また、図13の割込み状態欄で「無効」が指定されている場合には割込み入力が不可能と設定されているため「無効」を、「--」が設定されている場合には割込みを扱うモードではないと判定し、「--(割込みモード外)」を返す。すなわち、割込み状態管理部209から返される情報は「処理中」、「完了」、「無効」、「--(割込みモード外)」のいずれかが返されることとなる。
割込みポリシ判定部208は割込み可否設定が起きた際に、図13の表における割込み状態の欄を更新する。割込み制御部12から設定元OS情報と入力可否情報を受け取り、対応する図13の表の割込み状態欄を、割込み可否設定が可に設定された場合には「完了」に、不可に設定された場合には「無効」に設定する機能を有する。
待避レジスタ決定部205bは各モードのレジスタ待避が必要かどうかの判定を行う。各モードのレジスタ待避が必要かどうかの判定を行う際には、第1の実施形態の場合と各モードのバンクレジスタの待避が必要かどうかを判定する方法が異なる。待避レジスタ決定部205bは図13の表の割込み状態の欄からそのモードが割込み関連のモードかどうかを判断する。すなわち割込み状態の欄が「--」以外であれば割込み関連のモードであると判断できる。割込み関連のモードの場合は図13の表の「割込み状態」の切替え元OSの欄から切替え元のOSが割込み処理中かを判定する。割込み関連のモードの場合でさらに切替え元のOSが割込み処理中の場合には、切替え元以外のOSがレジスタを破壊する可能性がある場合にはそのモードのバンクレジスタの待避が必要となる。割込み関連のモードの場合でさらに切替え元OSの割込み処理が完了している場合には、そのモードのバンクレジスタは破壊でき、レジスタ待避の必要はないと判定される。
一方、モードが割込み関連のモード以外の場合には、そのモードのバンクレジスタの待避が必要と判断される。また、切替え元以外のOSがレジスタを破壊する可能性があるどうかは、そのモードが割込み関連モードの場合には、切替え元以外のそれぞれのOSに対して、そのOSの図13の表の「割り込み状態」欄が割込み「無効」に設定されていれば割込みが入力されず、そのモードのバンクレジスタの破壊の可能性がないため、レジスタ待避は必要ないと判断される。割込みが可能に設定されている、すなわち切替え元以外のOSの図13のそのモードの割込み状態が「完了」もしくは「処理中」となっているOSがあった場合にはレジスタ待避が必要と判断される。レジスタ待避が必要と判定された場合には、待避レジスタ決定部205bはそのモードのバンクレジスタの一覧をバンクレジスタ判定部206から取得して呼び出し元に返す。
待避レジスタ決定部205bは、割込み処理中かどうかを割込み検出部210が設定した図13の割込み状態欄から判定するとともに、別のOSがバンクレジスタの破壊をしうるかどうかを割込み受け付け可否情報から判定し、バンクレジスタの待避が必要かどうかを自動的に判定する。
続いて図14のフローチャートに示されるOS切替え時のコンテキスト待避処理手順について述べる。なお、図14は図6におけるステップS207〜S212に対応する処理を抜き出して記載しており、その他の処理は図6と同等である。
まず、コンテキスト回避処理が開始するとまず全てのモードのバンクレジスタについて待避が必要か判定するため、レジスタ待避・復帰部204は未処理のモードがあるかどうか判定する(ステップ502)。未処理のモードがないと判定された場合(ステップS502:No)、レジスタ待避・復帰部204は待避情報管理部203に対して待避したバンクレジスタの情報の保存を依頼し、待避情報管理部203は図13の待避レジスタ管理表における前回待避の欄を更新し、処理を終了する(ステップS503)。
未処理のモードがあると判定された場合(ステップS502:Yes)、待避レジスタ決定部205bは未処理のモード情報を1つ取り出し、そのモードが割込み関連モードかどうかを判定する。この際の判定方法としては切替え元OSの当該モードの割込み状態欄が「--」となっているかどうかを判断し、「--」以外であれば割込み関連モードと判定する(ステップS504)。割込み関連モードであれば(ステップS504:No)、待避レジスタ決定部205は現在当該OSがそのモードの割込み処理中かどうかを割込み状態管理部209から割込み状態を取得して判定する。
すなわち図13における切替え元OSの当該モードの割込み状態欄が「処理中」であれば割込み処理中となり、それ以外(「完了」もしくは「無効」)であれば割込み処理中でないと判定する(ステップS505)。割込み処理中でないと判定された場合((ステップS505:No)、当該モードのバンクレジスタは待避の必要がないと判定してステップS502に戻り、次のモードの処理に移る。割込み処理中であると判定された場合(ステップS505:Yes)、待避レジスタ決定部205bは別のOSが当該モードのバンクレジスタを破壊する可能性がある場合にはバンクレジスタの待避が必要であるため、ステップS506以降の処理で別のOSがレジスタ破壊をしうるか判定することとなる。また、ステップS504において、処理中のモードが割込み関連のモードでない場合(ステップS504:Yes)には、当該モードのバンクレジスタの待避が必要と判定し、ステップS508に移る。ステップS506以降の処理では、待避レジスタ決定部205bは切替え元OS以外のOSが当該モードのバンクレジスタを破壊する可能性があるかどうかを判定する。破壊する可能性がなければ、当該モードのバンクレジスタは待避する必要がないためである。以降は切替え元OS以外の全てのOSについて当該モードのバンクレジスタを破壊する可能性があるかどうかを判定するステップ506以降の処理について詳細に説明する。
まず、切替え元OS以外の全てのOSについて当該モードのバンクレジスタを破壊する可能性があるかどうかを判定するため、待避レジスタ決定部205bは動作中のOSの中で未処理のOSがあるかどうかを判定する(ステップS506)。全てのOSについて判定が終わっており未処理のOSがないと判定された場合(ステップS506:No)、当該モードのバンクレジスタ待避の必要はないと判断し、ステップS502に戻る。未処理のOSがあると判定された場合(ステップS506:Yes)、待避レジスタ決定部205bは、未処理のOSの中から一つのOSを取り出し、割込みが不可能になっているかどうか、すなわち当該OSの当該モードの割込み状態欄が「無効」となっているかどうかを判定する(ステップS507)。
無効となっていると判定された場合(ステップS507:Yes)、割込み不可に設定されており、レジスタ破壊の可能性はないと判定し、次のOSの判定に移るためステップS506に戻る。一方、割込み状態欄が「無効」以外であると判定された場合(ステップS507:No)、割込み入力が行われる可能性があり、レジスタ破壊の可能性があるため、レジスタ待避・復帰部204はバンクレジスタ判定部206を介して当該モードのバンクレジスタ一覧を取得し、待避用メモリ部21に対して待避処理を行う(ステップS508)。その後次のモードの処理に移るため、ステップS502に戻る。
続いて図15のフローチャートに示される割込み可否設定時の処理手順について述べる。まず、割込み可否設定処理が開始されると、割込み可否設定部305、405はハードウェア部100の割込み制御部12に対して割込みモードの種別と割込み受け付け可否情報を渡し、割込み受付の可否を設定する(ステップS601)。続いて、割込み制御部12は割込みポリシ判定部208を呼び出して、割込み可否設定部305、405から渡された設定内容を渡し、割込み設定が行われたことを通知する(ステップS602)。割込み可否設定部305、405は現在実行中のOS情報を取得し、図13の対応するOS、対応するモードの欄の割込み状態欄を更新する(ステップS603)。この際、割込み可否設定部305、405は渡された割込み可否設定を判別し、割込み可であるか否かを判定する(ステップS604)。割込み可という設定が渡された場合(ステップS604:Yes)、割込み可否設定部305、405は割込み状態を「完了」に設定する(ステップS605)。一方、割込み不可という設定が渡された場合(ステップS604:No)、割込み可否設定部305、405は割込み状態を「無効」に更新する(ステップS606)。
次に図16のフローチャートに示される割込み発生時の処理手順について述べる。割込み制御部12は割込み発生時に割込み検出部210に対して割込みモード種別とともに割込みの発生を通知する(ステップS701)。割込み検出部210は割込み入力先のOSを判定する(ステップS702)。割込み検出部210は割込み状態管理部209に対して割込み入力先OSと割込みモードを通知し、割込み状態管理部209は当該OSとモードの割込み状態欄を「処理中」に変更する(ステップS703)。さらに、割込み検出部210はOS切替部201を呼び出し、OSを割込み入力先OSに切替えて、OS実行部301、401内の割込みハンドラを呼び出す(ステップS704)。さらに割込み処理終了後、元々動作していたOSに切替え、割込み検出部210は割込み入力先OSと当該モードの割込み状態欄を「完了」に設定し(ステップS705)、割込み発生時の処理を終了する。
上記では、割込み制御部12から割込みが通知された時点で割込み入力先OSにOSを切替えて、割込み処理を開始しているが、これに限らず、OS切替え命令部からの明示的なOS切替え命令発行の際に割込み入力先OSに切替えて、割込み処理を遅延させて処理を行っても良い。
本実施形態の情報処理装置1にあっては、割込み状態についてモニタ部200が自動的に検出することができるようになり、モード利用通知部207及びハンドラポリシ設定部304、404を設けずに待避するレジスタを削減することができる。よって、OS部について既存のOSの構成を最大限活かしつつOS切替えを高速化できる。
なお、図12の構成では、モード利用情報やハンドラポリシ情報を待避するレジスタの決定に利用していなかった。ゆえに特に割込み関連のモード以外の場合には常にバンクレジスタを待避させることとなり、実際にモードが利用されない場合にもレジスタ待避を行ってしまう可能性がある。またOSの割込みハンドラの設計によっては、たとえ割込み処理が完了していてもレジスタを破壊すると、OSが正しく動作しなくなる可能性もある。図17の構成では割込みの情報に加えて、モード利用情報とハンドラポリシ情報から待避するレジスタを決定する。これにより上述の問題に対処できる。以下この場合の構成について説明する。
図17は図12とOS部300、400がハンドラポリシ設定部304、404とモード利用通知部303、403を有する点が異なる。また、待避レジスタ決定部205cの内部処理も異なる。なお、図17の構成においても割込み入力可否情報、モード利用情報、ハンドラポリシ情報はOS起動から終了まで変わらないことを想定している。以下では図17の構成について、図12と異なる点を中心に説明する。
待避レジスタ決定部205cは、ハンドラポリシ設定部304、404からの要求に従い、各OSの各モードのハンドラポリシの設定を行う機能を持つとともに、各モードのレジスタ待避が必要かどうかの判定を行う機能を有する。ハンドラポリシ設定部304、404からの設定要求があった場合には、図18のハンドラポリシの設定元OSのハンドラポリシ欄を更新する。設定できる値は「中断あり」「中断なし」「破壊可」「破壊不可」の4状態である。
中断あり及び中断なしは割込みモード外、すなわち例えばSVCモードやUSRモードの場合の場合に設定される。OSの設計上、そのモードの実行途中でOS切替えが起きうるかどうかを示し、OS切替えが起きる場合には中断あり、起きえない場合には中断なしが設定される。破壊可及び破壊不可は割込みモード、すなわち例えばIRQモードやFIQモードの場合に設定される。OSの設計上、割込み処理が完了している場合にバンクレジスタを破壊して良いかどうかを設定する。一方、各モードのレジスタ待避が必要かどうかの判定を行う際には、上記各実施形態とは各モードのバンクレジスタの待避が必要かどうかを判定する方法が異なる。
まず、待避レジスタ決定部205cは図18の表の割込み状態の欄からそのモードが割込み関連のモードかどうかを判断する。すなわち割込み状態の欄が「--」以外であれば割込み関連のモードであると判断できる。さらに割込み関連のモードの場合は図18の表の「割込み状態」の欄から割込み処理中かを判定する。割込み処理中の場合には、別のOSがレジスタを破壊する可能性がある場合にはそのモードのバンクレジスタの待避が必要となる。
割込み処理が完了している場合には、レジスタが破壊できるかどうかを図18の表の「ハンドラポリシ」の欄から判断する。「破壊可」と設定されており、レジスタが破壊できる場合にはレジスタ待避が必要ない。「破壊不可」と設定されており、レジスタ破壊が不可能な場合には、別のOSがレジスタを破壊する可能性がある場合にはそのモードのバンクレジスタの待避が必要となる。一方、モードが割込み関連のモード以外の場合には、切替え元OSが当該モードを扱うか図18の「モード利用」の欄から判定し、モードを利用しない場合にはレジスタ待避の必要はないと判定する。一方で、モードを利用する場合にはモード中断があるかどうかを図18の表のハンドラポリシの欄から判定し、中断がある場合には別のOSがレジスタを破壊する可能性がある場合にはそのモードのバンクレジスタの待避が必要となる。ハンドラポリシの欄が中断有りであればモード中断あり、中断無しとなっていればモード中断無しと判定する。別のOSがレジスタを破壊する可能性があるどうかは、それぞれのOSに対してそのモードが割込み関連モードの場合には、当該OSが割込みが不可に設定されていれば割込みが入力されず、そのモードのバンクレジスタの破壊の可能性がないため、レジスタ待避は必要ないと判断する。割込みが可能に設定されている、すなわち図18の割込み状態が「完了」もしくは「処理中」の場合にはレジスタ待避が必要と判断する。一方でそのモードが割込みモード以外の場合には、図18のモード利用の表からモード利用の有無を判断し、そのモードを利用するOSがなければレジスタ破壊の可能性がないためレジスタ待避は必要ないと判断する。一方で、そのモードを利用するOSがあればレジスタ待避が必要と判断する機能を有する。レジスタ待避が必要と判定された場合には、待避レジスタ決定部205cそのモードのバンクレジスタの一覧をバンクレジスタ判定部206から取得して呼び出し元に返す。
図17におけるモード利用通知部は図8−1におけるモード利用通知部とほぼ同等の機能を有する。また、図17におけるハンドラポリシ設定部304、404は各モードに関して「中断あり」「中断なし」「破壊可」「破壊不可」を待避レジスタ決定部205cに通知する。
待避レジスタ決定部205cは割込み関連のモードの場合には割込み処理中かどうかを図18の割込み状態欄から判定するとともに、割込み関連のモード以外の場合にはモード利用欄からモード利用の有無を判定する。さらに、待避レジスタ決定部205cは別のOSがバンクレジスタの破壊をしうるかどうかを割込み受け付け可否情報やモード利用欄から判定し、バンクレジスタの待避が必要かどうかを自動的に判定する。
続いて図19のフローチャートに示されるOS切替え時のコンテキスト待避処理手順について述べる。なお、図19は図6におけるステップS207〜S212に対応する処理を抜き出して記載しており、その他の処理は図6と同等である。
コンテキスト待避処理が開始すると(ステップS801)、まず全てのモードのバンクレジスタについて待避が必要か判定するため、レジスタ待避・復帰部204は未処理のモードがあるかどうか判定する(ステップS802)。未処理のモードがないと判定された場合(ステップS802:No)、レジスタ待避・復帰部204は待避情報管理部203に対して待避したバンクレジスタの情報の保存を依頼し、待避情報管理部203は図18の表における前回待避の欄を更新し、処理を終了する(ステップS803)。
未処理のモードがあると判定された場合(ステップS802:Yes)、未処理のモード情報を1つ取り出し、待避レジスタ決定部205cはそのモードが割込み関連モードかどうかを判定する。この際の判定方法としては切替え元OSの当該モードの割込み状態欄が「--」となっているかどうかを判断し、「--」以外であれば割込み関連モードと判定する(ステップS804)。割込み関連モードであると判定された場合(ステップS804:No)、待避レジスタ決定部205cは現在当該OSがそのモードの割込み処理中かどうかを割込み状態管理部209から割込み状態を取得して判定する(ステップS807)。すなわち図18における切替え元OSの当該モードの割込み状態欄が「処理中」であれば、割込み処理中となり、それ以外であれば割込み処理中でないと判定する。
割込み処理中でないと判定された場合(ステップS807:No)、待避レジスタ決定部205cはレジスタが破壊可能かどうかを切替え元OSの当該モードのハンドラポリシ欄から判定する(ステップS808)。破壊可であると判定された場合(ステップS808:Yes)、当該モードのバンクレジスタは待避の必要がないと判定してステップS802に戻り、次のモードの処理に移る。
ハンドラポリシ欄が破壊不可と判定された場合(ステップS808:No)、別のOSが当該モードのバンクレジスタを破壊する可能性がある場合にはバンクレジスタの待避が必要であるため、別のOSがレジスタ破壊をしうるか判定するステップS809の処理に移る。
一方、処理中のモードが割込み関連のモードでないと判定された場合(ステップS804:Yes)、待避レジスタ決定部205cは切替え元OSが当該モードを扱うかどうかを判定する(ステップS805)。当該モードを扱わないと判定された場合(ステップS805:No)、そのモードのバンクレジスタの待避は必要ないと判断し、ステップS802に戻る。
一方、当該モードを扱うと判定された場合(ステップS805:Yes)、待避レジスタ決定部205cは切替え元OSの当該モードでの処理中にOS遷移が起きて中断が発生しうるかどうかを図18のハンドラポリシ欄から判定する(ステップS806)。中断無しとなっている場合(ステップS806:No)、待避レジスタ決定部205cは当該モードのバンクレジスタ待避の必要はないと判断し、ステップS802に戻る。
一方、中断有りとなっている場合(ステップS806:Yes)、別のOSが当該モードのバンクレジスタを破壊する可能性がある場合にはバンクレジスタの待避が必要であるため、待避レジスタ決定部205cは別のOSがレジスタ破壊をしうるか判定する処理に移る。具体的には、まず待避レジスタ決定部205cは切替え元OS以外のOSが当該モードのバンクレジスタを破壊する可能性があるかどうかを判定する。破壊する可能性がなければ、当該モードのバンクレジスタは待避する必要がないためである。まず、切替え元OS以外の全てのOSについて当該モードのバンクレジスタを破壊する可能性があるかどうかを判定するため、待避レジスタ決定部205cは動作中のOSの中で未処理のOSがあるかどうかを判定する(ステップS809)。全てのOSについて判定が終わっており未処理のOSがないと判定された場合(ステップS809:No)、待避レジスタ決定部205cは当該モードのバンクレジスタ待避の必要はないと判断し、ステップS802に戻る。
未処理のOSがあると判定された場合(ステップS809:Yes)、待避レジスタ決定部205cは未処理のOSの中から一つのOSを取り出し、当該モードが割込みモードかどうかを図18の割込み状態欄が「--」となっているかどうかから判定する(ステップS810)。「--」以外であると判定された場合(ステップS810:No)、待避レジスタ決定部205cは割込みモードと判定し、割込みが不可能になっているかどうか、すなわち当該OSの当該モードの割込み状態欄が「無効」となっているかどうかを判定する(ステップS811)。
無効となっていると判定された場合(ステップS811:Yes)、割込み不可に設定されており、レジスタ破壊の可能性はないと判定し、次のOSの判定に移るためステップS809に戻る。一方、割込み状態欄が「無効」以外の場合(ステップS811:No)、割込み入力が行われる可能性があり、レジスタ破壊の可能性があるため、レジスタ待避・復帰部204はバンクレジスタ判定部206を介して当該モードのバンクレジスタ一覧を取得し、待避用メモリ部21に対して待避処理を行う(ステップS813)。
一方、ステップ810において処理中のモードの当該OSの割込み状態欄が「--」の場合(ステップS810:Yes)、すなわち割込みモード以外と判定された場合には、待避レジスタ決定部205cはそのOSが当該モードを扱うかどうかを図18のモード利用欄から判定する(ステップS812)。モードを扱わない場合(ステップS812:No)、次のOSの判定に移るためステップS809に戻る。
一方、当該モードを扱う場合(ステップS812:Yes)、待避レジスタ決定部205cは当該モードのバンクレジスタ破壊の可能性があるため、当該モードのバンクレジスタの一覧を取得し、レジスタの値を待避する処理を行う(ステップS813)。その後次のモードの処理に移るため、ステップS802に戻る。
また、割込み可否設定時の処理手順は図15、割込み発生時の処理は図16と同等である。図19のフローで示したように、本実施形態ではまずステップS804でモードが割込みモードか否かを判定する。割込みモードであれば、それ以降当該モードを扱うか判定することはない。割込み制御に設定される割込み受け付け可否の設定を検出することで、割込みモードが利用されるかどうかを判断できるためである。すなわち、割込み関連モードについてはOSがモード利用通知部から明示的に待避レジスタ決定部205cに対してモード利用の有無を通知する必要がない。これにより、モード利用通知部の構造を単純化できる。また、本構成では割込みモード利用の有無だけによらず、実際に割込みが処理中か否かなどの情報によってレジスタ待避の必要性を判断するため、第1の実施形態の場合よりも割込み関連モードのバンクレジスタの待避を削減できる場合がある。また、図12の構成と異なりハンドラポリシ情報を参照するため、割込み完了時にレジスタを破壊してはならないOSにおいても利用できる方法である。また、割込み関連モード以外においても、モード利用情報によりバンクレジスタ待避の有無を判定するため、モード利用状況によってはレジスタ待避及び復帰処理を省略することができる。
また、本実施形態の構成においては、起動時にモードの取り扱いや割込みの有無設定が固定され、それ以降変わらないことを前提としていた。また、CPU部10についてはシングルコアプロセッサもしくは、マルチコアプロセッサ環境においてもOS切替えが起きるのは1つのコア上のみであり、他のコアについては動作させるOSを固定することを想定していた。近年、サーバから組み込み機器にまでマルチコアプロセッサが普及しており、マルチコアプロセッサの全てのコアについて柔軟にOS切替えできることが望ましい。図20−1は動的な設定変更及び、マルチコアプロセッサの全コアのOS切替えに対応する機能を有する情報処理装置である。
図20−1は図17と動的設定変更検出部211と、コア番号管理部212(コア管理部)を備える点が異なる。また、図17の構成では、レジスタ待避・復帰部204や、割込み状態管理部209などが待避用メモリ部21にアクセスする際には、直接待避用メモリ部21に対してアクセスしていたが、図20−1の構成ではコア番号管理部212を介して待避用メモリ部21にアクセスする点も異なる。加えて、待避用メモリ部21に置かれる、図21のコンテキスト待避などを行うための待避レジスタ管理表の構造も異なる。
コア番号管理部212はOS切替えが起きた場合や割込みが検出された場合に、それらの要因が起きたコアを判定する。例えば、コア1で実行されているOSからOS切替え命令が呼び出された場合にはコア1でOS切替え要求が起きたと判定する。マルチコアプロセッサにおいては、通常各コアがレジスタを持ち、独立したモードで動くことが可能である。例えば、コア1では第1OS部300をSVCモードで動かし、コア2では第2OS部400をIRQモードで動かすと行ったことが可能である。この場合に、コア単位でOS切替えを行えるようにするためには、コア単位でレジスタ待避・復帰を行う必要がある。このため、コア番号管理部212を設ける。さらにコア番号管理部212は割込み状態管理部209などによる割込み状態の変更や取得、レジスタ待避・復帰部204によるレジスタの待避と復帰、待避情報管理部203による前回待避欄の設定や設定取得など待避用メモリ部21が管理する図21の表に対するアクセス要求を受け付け、コア単位で情報を保存、返却する機能を有する。このため待避用メモリ部21に配置されるデータ表は図21に示すように割込み状態、コンテキスト待避領域、前回待避の各欄はコア毎に状態を持つことが可能なデータ構造を持つ。例えば第1OS部300のSVCモードのバンクレジスタの待避がレジスタ待避・復帰部204により行われる際、コア番号管理部212が待避要求を受け付け、待避要求が発行されたプロセッサがコア1であれば、図21のSVCモードのコア1の欄に、コア2であればコア2の欄にコア番号管理部212がレジスタの値を待避する。
動的設定変更検出部211は、割込みポリシ判定部208や待避レジスタ決定部205から設定変更時に呼び出され、OS起動後にモード利用設定変更もしくは割込み設定変更が行われた場合に変更を検出する。例えば、第1OS部300と第2OS部400が存在し、第1OS部300でUSRモードを扱い、第2OS部400ではUSRモードを扱わない設定になっている場合、第1OS部300から第2OS部400への切替え時にはレジスタ待避の必要がない。このとき第2OS部400でUSRモードを扱うように設定を変更すると、USRモードのバンクレジスタは待避されていないにもかかわらず、書き換えられてしまう可能性がある。書き換えられてしまうと、再度第1OS部300に切替えた際に第1OS部300のUSRモードで動くプログラムはプログラム設計者の意図しない動作を引き起こす可能性がある。このため、第2OS部400をUSRモードで実行させる前に第1OS部300のバンクレジスタを待避させる必要がある。そのため、動的設定変更検出部211はどのOSが設定変更が行われたモードを利用しているか判定する。また、割込みの無効化及びモードを利用しない設定がなされた場合や、別のOSがそのモードを利用しない場合、ハンドラの設計によってレジスタ待避が必要ない場合、複数のOSがそのモードを利用するため、元々レジスタ待避が行われている場合は改めてレジスタ待避を行う必要はない。よって、動的設定変更検出部211は、モード取り扱いが有効化されるか割込みが有効に変更されたか判定する。さらに動的設定変更検出部211は設定が有効された場合に、設定内容がモード利用設定変更であれば、コア番号管理部212を介して図21のデータ表から設定元のOS以外で当該モードの利用が有りかつハンドラポリシが中断ありの設定になっているOSを探す。そして、検索の結果一つだけ見つかった場合に、動的設定変更検出部211はそのモードのバンクレジスタを見つけたOSのコンテキスト待避領域に待避させる。一方、見つからなかった場合や2つ以上のOSが見つかった場合には、動的設定変更検出部211は何もせずに設定変更が検出される前に実行していた元の処理に戻る。
また、設定が割込み設定の変更であれば、動的設定変更検出部211は設定元のOS以外で当該モードで割込み状態欄が「処理中」か、ハンドラポリシが「破壊不可」となっているOSを探し、その結果一つだけ見つかった場合に、見つけたOS、すなわち「処理中」か、ハンドラポリシが「破壊不可」となっていたOSのコンテキスト待避領域にそのモードのバンクレジスタを待避させる。見つからなかった場合や2つ以上のOSが見つかった場合には何もしない。さらに、バンクレジスタを待避させた場合、動的設定変更検出部211は当該OSの当該モードの前回待避欄を「有り」に更新する。また動的設定変更検出部211は処理完了後、設定変更検出前に実行していた元の処理を再度実行する。
割込みポリシ判定部208はモード利用情報やハンドラポリシ情報が通知された際に動的設定変更検出部211を呼び出す。また、割込みポリシ判定部208は割込み可否設定が行われた際に動的設定変更検出部211を呼び出す。
また、レジスタ待避・復帰部204、割込み状態管理部209、割込みポリシ判定部208、動的設定変更検出部211、待避情報管理部203といった待避用メモリ部21にアクセスするブロックは、直接待避用メモリ部21にはアクセス命令を出すのではなく、コア番号管理部212に対してアクセス命令を出す点が図18の構成とは異なる。
次に、動的設定変更の流れを図22に示すフローを用いて説明する。まず、動的設定変更検出部211は設定変更を検出すると(ステップS901)、設定対象のモードを取得する(ステップS902)。例えばIRQが有効に設定された場合にはIRQモード、SVCモードが利用されるように設定された場合にはSVCモードが取得される。
次に動的設定変更検出部211は設定内容を取得し、モード取り扱いもしくは割込みが有効化されたかどうかを判断する(ステップS903)。無効化されたと判定された場合(ステップS903:No)、レジスタ破壊の可能性はないため、処理を終了する。
有効化されたと判定された場合(ステップS903:Yes)、さらに動的設定変更検出部211はOSカウント用カウンタを0に設定する(ステップS904)。続いて、各OSについて処理を行うため、動的設定変更検出部211は設定元OS以外に未処理OSが存在するかどうか判定する(ステップS905)。未処理OSが存在すると判定された場合(ステップS905:Yes)、その図21の表からコア番号管理部212を介してOSの情報を取り出し、設定対象モードの割込み状態欄の値を取得し、「--」となっているかどうかを判定する(ステップS906)。
割込み状態が「--」となっていると判定された場合(ステップS906:Yes)、動的設定変更検出部211は割込み関連モード以外と判定し、そのOSが当該モードを扱うかどうかを、コア番号管理部212を介してモード利用欄から取得して判定する(ステップS907)。モードを扱わないと判定された場合(ステップS907:No)、次のOSの処理に移るためステップS905に戻る。当該モードを扱うと判定された場合(ステップS907:Yes)、動的設定変更検出部211は切替え元OSの当該モードでの中断があるかを、コア番号管理部212を介して図21のハンドラポリシ欄から取得し判定する(ステップS908)。
中断があると判定された場合(ステップS908:Yes)、カウンタをインクリメントさせ(ステップS911)、次のOSの処理に移るためステップS905に戻る。中断がないと判定された場合(ステップS908:NO)、何もせずにステップS905に戻る。
ステップS906において割込み状態が「--」でない、すなわち割込みモードと判定された場合(ステップS906:No)、動的設定変更検出部211はコア番号管理部212を介して割込み処理中かどうかを図21の待避レジスタ管理表から取得して判定する(ステップS909)。割込み処理中であると判定された場合(ステップS909:Yes)、動的設定変更検出部211はカウンタをインクリメントし(ステップS911)、ステップS905に戻る。
一方、割込み処理中でなければ、動的設定変更検出部211はコア番号管理部212を介して図21の表からレジスタ破壊可能かどうかを判定する(ステップS910)。破壊可能であると判定された場合(ステップS910:Yes)、ステップS905に戻る。一方、破壊可能でないと判定された場合(ステップS910:No)、動的設定変更検出部211はカウンタをインクリメントさせてからステップS905に戻る。
またステップS905において設定元OS以外の全てのOSについて処理が完了したと判定された場合(ステップS905:No)、動的設定変更検出部211はカウンタが1かどうかを判定する(ステップS912)。カウンタが1と判定された場合(ステップS912:Yes)、当該モードのバンクレジスタが待避されていないが、設定変更によりバンクレジスタの待避が必要になった状態と判断し、動的設定変更検出部211は当該モードのバンクレジスタをカウンタをインクリメントしたOSの待避領域に待避させ(ステップS913)、前回待避欄を待避「有り」に変更して終了する(ステップS914)。カウンタが0の場合(ステップS912:No)、もしくは2以上の場合には、レジスタ待避の必要がない、もしくはすでにレジスタ待避が行われていると判定し、何も行わずに終了する。
また、図20−1のようにコア番号管理部212を介して待避用メモリ部21にアクセスするのではなく、図20−2のように待避用メモリ部21へのアクセスをコア番号管理部212aが検知し、コア毎にアクセス先を自動的に変更するようにしても良い。すなわち、レジスタ待避・復帰部204など待避用メモリ部21に対するアクセスを行うブロックが、同じアドレスにアクセス要求を行った場合にも、コア番号管理部212aがアクセス要求を検知して、コア毎に異なるアドレスにアクセスするように変更しても良い。例えばアドレスaに対してアクセスがあった場合に、Nを定数として、コア0からアクセスされた場合にはアドレスa、コア1からアクセスされた場合にはアドレスa+N、コアbからアクセスされた場合にはアドレスN×bに対してアクセスするように命令を変換する。これにより、レジスタ待避・復帰部204など待避用メモリ部21に対するアクセスを行うブロックは同じアドレスにアクセスしているように見えても実際にはコア毎に異なる領域にデータを保存、取得できるようになる。
この場合、コア番号管理部212aはOS切替えが起きた場合や割込みが検出された場合に、それらの要因が起きたコアを判定する機能に加えて、さらにコア番号管理部212aは割込み状態管理部209などによる割込み状態の変更や取得、レジスタ待避・復帰部204によるレジスタの待避と復帰、待避情報管理部203による前回待避欄の設定や設定取得が行われた際に、待避、復帰、設定、設定取得の各要求を検出して、コア単位で待避用メモリ部21の異なる領域に情報を保存、返却する。
本実施形態によれば、特定のモードに関してはモニタに対してOSからモード利用通知を行うための機能を設ける必要がなくなるため、OS部を簡略化でき、従来のOS設計を最大限活用できる。また、割込みの状態をモニタ側で把握することで、割込み関連のモードをOSが利用する場合においてもレジスタ待避を削減できる可能性があり、さらにOS切替えを高速化することが可能となる。また本実施形態によれば、マルチコアプロセッサ環境など、近年利用が進む環境においてもOS切替えを高速化することが可能である。また、あらかじめタスクが使うハードウェア資源を列挙しておく必要もなく、自動的に割込み処理完了情報などから待避するレジスタ情報を決定することができる。
(第4の実施形態)
上記各実施形態ではレジスタ待避を行うバンクレジスタの数を最小化し、OS切替えを高速化することを目的としていた。これは、レジスタ待避及び復帰を行わない場合には切替え元OSでセットしたレジスタの値が、切替え先のOSでもアクセスできることを意味する。しかしながら、例えば、データを暗号化するための鍵データをレジスタにセットして暗号化処理を行う場合など、セキュリティ上の理由でレジスタ値にアクセスされることは好ましくない場合も存在する。また、切替え先OSがレジスタ値を破壊しうるため切替え先OSが信用できない場合、切替え元OSの動作に影響を与える可能性もある。そこで、セキュリティ上の観点でレジスタ値を読まれるのが困る場合や、不正に書き換えられる可能性がある場合には、高速化の観点においてはレジスタ待避を省略できる場合でも、当該レジスタを待避させた上で当該レジスタの値を元の値と関係ない値に書き換えておく必要がある。
第4の実施形態では、セキュリティを考慮しつつ、OS切替えの高速化を行う情報処理装置について説明する。図23はCPU部10や主記憶部20を含むハードウェアとCPU部10で動作するソフトウェア構成の一例を示している。図23は図20−1と、第1OS部300がセキュリティ設定部307を備える点と待避レジスタ決定部205d、レジスタ待避・復帰部204a、待避情報管理部203aが有する機能が異なる。また、図24に示す待避用メモリ部21に格納されるコンテキスト待避用、設定用の表の構造も異なる。
セキュリティ設定部307はモニタ部200の待避レジスタ決定部205dに対して、セキュリティ設定の有効、無効を通知する。セキュリティ設定は別のOSからレジスタを読まれては困る場合や、信頼できないOSが動作する環境において、信頼できないOSによりレジスタの値が破壊されては困る場合に有効にする。信頼できないOSが動作しない場合や、待避しないレジスタを破壊されても問題がない場合、レジスタ値を読まれても困らない場合には、セキュリティ設定を無効に設定する。例えば、SVCモードのみを第1OS部300、第2OS部400が使う場合にはSVCモードのバンクレジスタのみを利用し、SVCモードのバンクレジスタの待避は必須である。一方、別のモードのバンクレジスタは利用せず、破壊されても読まれても問題ないためセキュリティ設定は無効に設定すればよい。セキュリティ要件はOSによって異なるため、セキュリティ設定部307はOS毎に設ける。
待避レジスタ決定部205dはハンドラポリシ設定部304、404からの要求に従い、各OSの各モードのハンドラポリシの設定を行うとともに、セキュリティ設定部307からセキュリティ設定の有効もしくは無効の情報を受け取り、図24に示す待避用メモリ部21に格納される表のセキュリティ有効欄を更新する機能を有する。また、各モードのレジスタ待避が必要かどうかの判定を行う機能に関しては、第3の実施形態で述べた処理と処理内容が異なる。
このうち、セキュリティ設定の有効もしくは無効の情報を受け取り、セキュリティ有効欄を更新する機能については、待避レジスタ決定部205dは、セキュリティ設定部307からセキュリティ有効もしくは無効のいずれかの情報を受け取り、図24の表の設定元OSのセキュリティ有効欄を有効、もしくは無効に更新する。第2の実施形態では待避レジスタ決定部205dは各モードが割込み関連のモードかどうかを判断し、割込み関連のモードの場合は割込み処理中かを判定していた。本実施形態では、待避レジスタ決定部205dは、割込み関連モードと判定された後に、まず切替え元OSのセキュリティ設定が「有効」となっているかどうかの判定を行う。セキュリティ設定が有効の場合には、待避レジスタ決定部205dはレジスタ待避が必要と判定する。さらに当該モードのクリアが必要というフラグをセットする機能を有する。一方割込み関連のモード以外の場合には、第2の実施形態では切替え元OSが当該モードを扱う場合に、当該モードのハンドラの途中でOS切替えが起きうるか判定する機能を有していた。
本実施形態では、待避レジスタ決定部205dは当該モードを扱う場合に、当該モードのハンドラの途中でOS切替えが起きうるか判定する前に、セキュリティ設定が有効か判定し、セキュリティ設定が有効な場合には待避レジスタ決定部205dはレジスタ待避が必要と判定する。さらにその場合には、当該モードのバンクレジスタの値のクリアが必要というフラグをセットする機能を有する。これにより、当該モードを扱う可能性がある場合には、他のOSの設定や割込み処理状況にかかわらず当該モードのバンクレジスタを必ず待避させることができる。
レジスタ待避・復帰部204aは、各モード毎に用意されるクリアフラグをOS切替部201からの呼び出し毎にリセットしておき、待避レジスタ決定部205dによる待避するレジスタの決定後に、各モードのクリアフラグをチェックし、クリアフラグがセットされている場合には当該モードのバンクレジスタの値をクリアする。レジスタ待避・復帰部204aはさらに待避情報管理部203aより復帰するレジスタの情報を取得して、レジスタ復帰が行われない場合にのみそのバンクレジスタをクリアするようにしても良い。これは、切替え先OSのバンクレジスタ復帰が行われる場合には、切替え元OSのバンクレジスタの内容は書き換えられるため、あらためてクリアする必要がないためである。
続いて図25、図26のフローチャートに示されるOS切替え時のコンテキスト待避及び復帰処理手順について述べる。なお、図25、26は図6におけるステップS207〜S212に対応する処理を抜き出して記載しており、その他の処理は図6と同等である。まず、図25のコンテキスト待避処理手順について述べる。ここでは第2の実施形態における図19のフローと異なるステップS1005以降の処理と、ステップS1002についてのみ説明する。
待避レジスタ決定部205dは判定中のモードが割込み関連モードかどうかを図24の表における切替え元OSの割込み状態欄が「--」であるかにより判定する(ステップS1005)。「--」以外であれば割込み関連モードと判定し(ステップS1005:No)、待避レジスタ決定部205dはセキュリティ設定が「有効」となっているかどうかを判定する(ステップS1009)。「有効」であれば(ステップS1009:Yes)、当該モードのレジスタが別のOSから閲覧もしくは破壊されると困るため、レジスタ待避・復帰部204aによる当該モードのバンクレジスタ待避を行い(ステップS1010)、待避レジスタ決定部205dは当該モードのクリアフラグをセットする(ステップS1011)。その後ステップS1003に戻る。
一方、ステップS1005で割込み状態欄が「--」と判定された場合(ステップS1005:Yes)、待避レジスタ決定部205dは切替え元OSが当該モードを扱うかどうか判定する(ステップS1006)。扱うと判定された場合には(ステップS1006:Yes)、待避レジスタ決定部205dはセキュリティ設定が「有効」かどうか判定する(ステップS1007)。有効である場合(ステップS1007:Yes)、同じくレジスタ待避・復帰部204aによる当該モードのバンクレジスタ待避後(ステップS1010)、待避レジスタ決定部205dは当該モードのクリアフラグをセットする(ステップS1011)。その後ステップS1003に戻る。なお、切替え元OSが当該モードを扱わない場合(ステップS1006:No)、そもそも当該モードのバンクレジスタの閲覧や破壊が起きても問題ないと考えられるため、セキュリティ設定が有効かどうかの判断は行わない。また、コンテキスト待避処理開始後に、レジスタ待避・復帰部204aはまず全モードのクリアフラグをリセットする処理を行う(ステップS1002)。
続いて、図26のフローチャートに示すコンテキスト復帰処理手順について述べる。まず、レジスタ待避・復帰部204aは全てのモードについてレジスタ復帰が必要かどうかを判定するため、未処理のモードが存在するかどうかを判定する(ステップS1102)。未処理のモードがない場合(ステップS1102:No)、コンテキスト復帰処理を終了する。一方、未処理のモードが存在する場合(ステップS1102:Yes)、レジスタ待避・復帰部204aはそのモードを取り出し、待避情報管理部203aに対して切替え先OSの当該モードのバンクレジスタが待避されたかどうかの判定を依頼する(ステップS1103)。
待避されていると判定された場合(ステップS1103:Yes)、レジスタ待避・復帰部204aは当該モードのバンクレジスタ一覧を取得し、レジスタの値を図24のコンテキスト待避領域から取得して復帰し(ステップS1104)、ステップS1102に戻る。一方、当該モードのバンクレジスタが待避されていないと判定された場合(ステップS1103:No)、レジスタ待避・復帰部204aはコンテキスト待避処理の中で更新を行った当該モードのクリアフラグがセットされているかどうか判定する(ステップS1105)。セットされている場合(ステップS1105:Yes)、当該モードのバンクレジスタをクリアし(ステップS1106)、ステップS1102に戻る。クリアフラグがセットされていない場合(ステップS1105:No)、何もせずにステップS1102に戻る。
なお、図23の構成ではセキュリティ設定部307はOS部内部に設けられていたが、図27のようにモニタ部200の内部に設ける構成の変更も考えられる。特にARMプロセッサにおいては、近年TrustZone(登録商標)と呼ばれる仮想化技術が搭載されている。TrustZoneはセキュアOSとノンセキュアOSとよばれる2種類のOSを動作させることができ、セキュアOS側で耐タンパ性が要求される処理を、ノンセキュアOS側で通常の処理を実行することを前提としている。セキュアOS側では信頼できるOSを動作させることが前提とされているため、セキュアOS側でノンセキュアOSのレジスタを悪意を持って破壊することは考えなくて良い。一方、ノンセキュアOSについては悪意のあるプログラムが入り込む可能性があり、悪意を持ったレジスタ破壊が起きる可能性がある。このため、セキュリティ設定部213をモニタ部200内部に設け、セキュアOS側の図24の表におけるセキュリティ有効欄を「有効」、ノンセキュアOS側のセキュリティ有効欄を「無効」としてあらかじめモニタ側で設定するような構成も考えうる。また、ハンドラポリシ設定部304、404やモード利用通知部303、403もOS部に設けられているが、あらかじめ動作するOSが決まっている場合などにおいては、第1の実施形態で述べたようにモニタ部200に設けることも可能である。
本実施形態により、セキュリティ面に配慮しつつOS切替えを高速化するモニタを実現することが可能となる。
上述した実施形態で説明した情報操作装置1の各構成部の少なくとも一部は、ハードウェアで構成してもよいし、ソフトウェアで構成してもよい。ソフトウェアで構成する場合には、装置・サーバの少なくとも一部の機能を実現するプログラムをフロッピー(登録商標)ディスクやCD−ROM等の記録媒体に収納し、コンピュータに読み込ませて実行させてもよい。記録媒体は、磁気ディスクや光ディスク等の携帯可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記録媒体でもよい。
また、情報操作装置1の少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線(無線通信も含む)を介して頒布してもよい。さらに、同プログラムを暗号化したり、変調をかけたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、あるいは記録媒体に収納して頒布してもよい。
なお、この発明は上記した実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を種々変形して具体化することができる。また、上記した実施の形態に開示されている複数の構成要素を適宜に組み合わせることにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素から幾つかの構成要素を削除しても良いものである。さらに、異なる実施の形態に係る構成要素を適宜組み合わせても良いものである。