(57)【要約】【課題】コンテキストの切り替えにかかる時間を短縮することを課題とする。【解決手段】計算機は、プロセスが処理の実行に使用する情報を記憶する複数のレジスタを有する。計算機は、第１のプロセスから第２のプロセスに切り替わる場合、複数のレジスタ内で、第２のプロセスが第２のレジスタを使用する予定がない場合には、第１のプロセスが使用中の第１のレジスタに記憶される情報を第２のレジスタに退避する。計算機は、第２のレジスタを使用する予定がある場合には、第１のレジスタに記憶される情報を記憶装置に退避する。【選択図】図５
2017037370.tif 000002
【特許請求の範囲】
【請求項１】
プロセスが処理の実行に使用する情報を記憶する複数のレジスタと、
第１のプロセスから第２のプロセスに切り替わる場合、前記複数のレジスタ内で、前記第２のプロセスが第２のレジスタを使用する予定がない場合には、前記第１のプロセスが使用中の第１のレジスタに記憶される情報を前記第２のレジスタに退避し、前記第２のレジスタを使用する予定がある場合には、前記第１のレジスタに記憶される情報を記憶装置に退避する退避部と
を有することを特徴とする計算機。
【請求項２】
前記第２のプロセスに含まれる関数の先頭アドレスと、当該関数が使用するレジスタの情報とを対応付けた予定情報を用いて、前記複数のレジスタの中から前記第２のレジスタを検出する検出部をさらに有し、
前記退避部は、前記検出部によって前記第２のレジスタが検出された場合に、前記第１のレジスタに記憶される情報を前記第２のレジスタに退避し、前記検出部によって前記第２のレジスタが検出されない場合に、前記第１のレジスタに記憶される情報を前記記憶装置に退避することを特徴とする請求項１に記載の計算機。
【請求項３】
前記検出部は、前記第２のプロセスの開始位置を示すプログラムカウンタに基づいて、前記予定情報から前記第２のプロセスが使用を予定する予定レジスタを抽出し、前記予定レジスタに含まれないレジスタを前記第２のレジスタとして検出することを特徴とする請求項２に記載の計算機。
【請求項４】
各プロセスの内容が記述されるプログラムに対するコンパイル時に、関数ごとに各関数が使用するレジスタの情報を抽出して前記予定情報を生成し、前記予定情報を前記プログラムの実行バイナリデータに付加する生成部をさらに有し、
前記検出部は、前記プログラムが実行された場合に、前記実行バイナリデータから前記予定情報を取得することを特徴とする請求項２に記載の計算機。
【請求項５】
前記検出部は、前記第２のプロセスの後に実行される第３のプロセスに対応する前記予定情報から、前記第３のプロセスの開始位置を示すプログラムカウンタに基づいて、前記第３のプロセスが使用を予定する予定レジスタを抽出し、前記第２のプロセスに対応する前記予定レジスタのうち、前記第３のプロセスに対応する前記予定レジスタに含まれない予定レジスタを、前記第２のレジスタとして検出することを特徴とする請求項３に記載の計算機。
【請求項６】
前記退避部は、前記第２のプロセスから前記第１のレジスタを使用する第３のプロセスに切り替わる場合、前記第３のプロセスが第３のレジスタを使用する予定がない場合には、前記第１のプロセスが使用中の第１のレジスタに記憶される情報を前記第３のレジスタに退避し、前記第３のレジスタを使用する予定がある場合には、前記第１のレジスタに記憶される情報を記憶装置に退避することを特徴とする請求項１に記載の計算機。
【請求項７】
コンピュータが、
第１のプロセスから第２のプロセスに切り替わる場合、各プロセスが処理の実行に使用する情報を記憶する複数のレジスタ内で、前記第２のプロセスが第２のレジスタを使用する予定がない場合には、前記第１のプロセスが使用中の第１のレジスタに記憶される情報を前記第２のレジスタに退避し、
前記第２のレジスタを使用する予定がある場合には、前記第１のレジスタに記憶される情報を記憶装置に退避する
処理を実行することを特徴とするプロセス制御方法。
【請求項８】
コンピュータに、
第１のプロセスから第２のプロセスに切り替わる場合、各プロセスが処理の実行に使用する情報を記憶する複数のレジスタ内で、前記第２のプロセスが第２のレジスタを使用する予定がない場合には、前記第１のプロセスが使用中の第１のレジスタに記憶される情報を前記第２のレジスタに退避し、
前記第２のレジスタを使用する予定がある場合には、前記第１のレジスタに記憶される情報を記憶装置に退避する
処理を実行させることを特徴とするプロセス制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機、プロセス制御方法およびプロセス制御プログラムに関する。
【背景技術】
【０００２】
ＣＰＵ（Central  Processing  Unit）の多くは、ＦＰＵ（Floating  Point  Unit：浮動小数点演算処理装置）などの演算装置を有している。例えば、このようなＣＰＵは、ＦＰＵが使用中であるか否かを示す状態レジスタを保持し、ＦＰＵが使用中ではないコンテキストでＦＰＵを使用する命令を実行した場合に、例外処理を実行する。
【０００３】
また、マルチプロセスをサポートするＯＳ（Operating  System）では、定期的に又はイベント契機によって、ＣＰＵを使用するプロセスの切り替えが発生する。ＯＳは、プロセスの切り替えに伴って、コンテキストの切り替え（以降、コンテキストスイッチと記載する場合がある）を実行する。例えば、ＯＳは、ＣＰＵで元々実行中であったプロセスを将来再開するために、ＣＰＵのレジスタ上に保存されている情報をメモリ上に保存し、新たに割り当てるプロセスに対して、当該プロセスが使用する情報をメモリから読み出してレジスタに復元する。
【０００４】
なお、コンテキストスイッチの際に、情報の退避や復元が発生するレジスタはコンテキストレジスタと呼ばれる。例えば、コンテキストレジスタとしては、ＦＰＵによる演算時に使用されるＦＰＵレジスタやコンテキストの状態を管理する状態レジスタなどが知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００６−５０２４７０号公報
【特許文献２】国際公開第２００９／０９０６８４号
【特許文献３】特開２００８−０５９４５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記技術では、コンテキストの切り替えに時間がかかる。例えば、コンテキストレジスタの数が多いＣＰＵアーキテクチャでは、退避や復元も多く、メモリへのアクセスが多くなるので、より顕著に時間がかかる。
【０００７】
１つの側面では、コンテキストの切り替えにかかる時間を短縮することができる計算機、プロセス制御方法およびプロセス制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
第１の案では、計算機は、プロセスが処理の実行に使用する情報を記憶する複数のレジスタを有する。計算機は、退避部を有する。退避部は、第１のプロセスから第２のプロセスに切り替わる場合、前記複数のレジスタ内で、前記第２のプロセスが第２のレジスタを使用する予定がない場合には、前記第１のプロセスが使用中の第１のレジスタに記憶される情報を前記第２のレジスタに退避する。退避部は、前記第２のレジスタを使用する予定がある場合には、前記第１のレジスタに記憶される情報を記憶装置に退避する。
【発明の効果】
【０００９】
一実施形態によれば、コンテキストの切り替えにかかる時間を短縮することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係る計算機の全体構成例を説明する図である。
【図２】図２は、実施例１に係る計算機のハードウェア構成例を説明する図である。
【図３】図３は、レジスタ使用予定の例を示す図である。
【図４】図４は、ＦＰＵレジスタを説明する図である。
【図５】図５は、実施例１に係る計算機の機能構成を示す機能ブロック図である。
【図６】図６は、レジスタの復元処理の流れを示すフローチャートである。
【図７】図７は、レジスタの退避処理の流れを示すフローチャートである。
【図８】図８は、退避先選択処理の流れを示すフローチャートである。
【図９】図９は、プロセス１実行時のレジスタ配置の具体例を示す図である。
【図１０】図１０は、プロセス１およびプロセス２のレジスタ使用予定の具体例を示す図である。
【図１１】図１１は、他のレジスタグループへの退避例を説明する図である。
【図１２】図１２は、メモリへの退避例を説明する図である。
【図１３】図１３は、複数プロセスの制御例を説明する図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する計算機、プロセス制御方法およびプロセス制御プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。各実施例は、矛盾のない範囲内で適宜組み合わせることができる。
【実施例１】
【００１２】
［全体構成］
図１は、実施例１に係る計算機の全体構成例を説明する図である。図１に示す計算機１０は、メモリ１２とＦＰＵレジスタ１３ｃ（以下では単にレジスタと表記する場合がある）とを有するコンピュータの一例である。メモリ１２は、各種処理の実行に使用されるデータやプログラム等を記憶する記憶装置の一例であり、ＦＰＵレジスタ１３ｃは、浮動小数点演算に使用されるレジスタの一例である。なお、ここでは、ＦＰＵレジスタを例にして説明するが、これに限定されるものではなく、整数レジスタなど他のレジスタについても同様に処理することができる。
【００１３】
また、この計算機１０は、マルチプロセスをサポートしており、プロセッサを複数のプロセスが共有する。したがって、計算機１０は、定期的に又はイベント契機によって、ＣＰＵを使用するプロセスの切り替えを実行し、このときにコンテキストスイッチを実行する。つまり、計算機１０は、プロセスの切替えに伴ってＦＰＵレジスタ１３ｃに記憶される情報の退避や復元を実行する。
【００１４】
具体的には、図１に示すように、計算機１０は、Ａ、Ｂ、Ｃ、Ｄの４つのＦＰＵレジスタ１３ｃを有する。なお、図１に示す１−Ａなどの表記は、プロセスが使用するレジスタの情報を意味し、１−Ａの場合は、プロセス１のレジスタＡの情報を意味する。
【００１５】
また、計算機１０は、プロセス１、プロセス２、プロセス３それぞれのレジスタ使用予定の一覧を保持する。具体的には、レジスタ使用予定の一覧には、はじめに実行されるプロセス１がレジスタＡを使用し、次に実行されるプロセス２がレジスタＢを使用し、次に実行されるプロセス３がレジスタＡとＢを使用することを特定する情報が保持される。
【００１６】
このような状態において、まず、計算機１０は、レジスタＡに記憶される情報（１−Ａ）を使用するプロセス１を実行する。次に、計算機１０は、プロセス１からプロセス２に切り替わるのに伴って、コンテキストスイッチ１−２を実行する。このとき、計算機１０は、プロセス２がレジスタＢを使用することから、メモリ１２に記憶される情報（２−Ｂ）を読み出してレジスタＢに復元する。
【００１７】
その後、計算機１０は、プロセス２からプロセス３に切り替わるのに伴って、コンテキストスイッチ２−３を実行する。このとき、計算機１０は、プロセス３がレジスタＡおよびレジスタＢを使用することから、レジスタＡに記憶される情報（１−Ａ）とレジスタＢに記憶される情報（２−Ｂ）の退避を実行する。
【００１８】
そこで、計算機１０は、プロセス３によって使用されないレジスタを検出し、検出されたレジスタに、レジスタＡに記憶される情報（１−Ａ）とレジスタＢに記憶される情報（２−Ｂ）を退避する。
【００１９】
具体的には、計算機１０は、レジスタＡからＤのうち、切り替わる対象のプロセス３が使用しないレジスタとして、レジスタＣとレジスタＤを検出する。そして、計算機１０は、検出されたレジスタＣに、レジスタＡに記憶される情報（１−Ａ）を退避し、検出されたレジスタＤに、レジスタＢに記憶される情報（２−Ｂ）を退避する。つまり、計算機１０は、後続のプロセスで使用されないレジスタに退避する。その後、計算機１０は、メモリ１２に記憶される情報（３−Ａ）を読み出してレジスタＡに復元し、メモリ１２に記憶される情報（３−Ｂ）を読み出してレジスタＢに復元する。
【００２０】
このように、計算機１０は、コンテキスト切替時にレジスタの情報を退避させる際、後続のプロセスが使用しないレジスタがあれば、メモリではなく当該レジスタに退避させる。したがって、計算機１０は、メモリアクセスを減らし、コンテキストの切替時間を短縮することができる。
【００２１】
［ハードウェア構成］
図２は、実施例１に係る計算機のハードウェア構成例を説明する図である。図２に示すように、計算機１０は、入出力装置１１、メモリ１２、プロセッサ１３を有する。なお、ここで示したハードウェアは一例であり、例えばハードディスクや記憶媒体読み取り装置など他のハードウェアを有していてもよい。
【００２２】
入出力装置１１は、各種情報の入力を受け付けたり、各種情報を出力したりする装置であり、例えばマウスやディスプレイである。メモリ１２は、各種情報を記憶し、コンテキストスイッチの退避先となる記憶装置である。また、メモリ１２は、構造体記憶領域１２ａを有する。
【００２３】
構造体記憶領域１２ａは、プロセスが実行されると生成され、プロセスが終了すると削除されるプロセス構造体を記憶するメモリ領域である。プロセス構造体は、プロセスごとに生成され、各プロセスに関する情報を保持する。具体的には、プロセス構造体は、プロセス番号、レジスタ退避領域、メモリ管理情報、ファイル管理情報、レジスタ使用予定へのポインタを含むプロセス構造体を記憶する。
【００２４】
ここで、プロセス番号は、プロセスを識別する情報である。レジスタ退避領域は、コンテキストスイッチに伴ってレジスタに記憶される情報の退避先となるメモリ１２内の領域である。また、レジスタ退避領域には、プログラムカウンタ等も記憶される。メモリ管理情報は、メモリ１２における仮想アドレスと物理アドレスの対応付けなどを記憶する。ファイル管理情報は、プロセスがオープンしているファイルの情報等を記憶する。レジスタ使用予定へのポインタは、後述する実行部２２がプログラム実行時にメモリ１２等に展開したレジスタ使用予定へのアクセスポインタである。
【００２５】
ここで、レジスタ使用予定について説明する。図３は、レジスタ使用予定の例を示す図である。図３に示すレジスタ使用予定の一例について説明すると、「関数の先頭アドレス、使用レジスタのビットマップ」を有する。
【００２６】
「関数の先頭アドレス」は、アーキテクチャごとに長さが決まっている、プロセスに含まれる関数の先頭の仮想アドレスである。「使用レジスタ」は、関数が使用するレジスタを特定する情報である。ここで、「使用レジスタ」は、レジスタグループごとに１ビットで表現したビットマップの使用の有無を表したものである。この例では、８ビットを割り当てているが、これもレジスタグループの数に任意に決定することができる。
【００２７】
図３の１行目は、「０ｘ１０００」で始まる関数がレジスタグループＡおよびレジスタグループＢを使用予定であることを示し、２行目は、「０ｘ２０００」で始まる関数がレジスタグループＡおよびレジスタグループＤを使用予定であることを示す。なお、本実施例では、説明上、関数の先頭アドレスの代わりにプロセス名を対応付けた例で説明する場合がある。
【００２８】
プロセッサ１３は、計算機１０全体を司る処理部であり、例えばＣＰＵ（Central  Processing  Unit）などである。プロセッサ１３は、演算器１３ａ、整数レジスタ１３ｂ、ＦＰＵレジスタ１３ｃ、キャッシュメモリ１３ｄを有する。また、プロセッサ１３は、図示したハードウェア以外にも、ＦＰＵレジスタ１３ｃの現状態を管理するＦＰＵ状態レジスタ（図示しない）などを有する。すなわち、プロセッサ１３は、ＦＰＵレジスタ１３ｃの状態を更新するたびに、当該更新にあわせてＦＰＵ状態レジスタを更新する。このようにして、プロセッサ１３は、現在のコンテキストの状況を、ＦＰＵ状態レジスタを用いて管理する。
【００２９】
演算器１３ａは、整数演算や浮動小数点演算などを実行する装置である。整数レジスタ１３ｂは、整数演算に使用されるレジスタである。ＦＰＵレジスタ１３ｃは、浮動小数点演算に使用されるレジスタである。キャッシュメモリ１３ｄは、使用頻度の高いデータ等を記憶する高速なメモリである。
【００３０】
本実施例では、プロセッサ１３は、コンテキストの管理として、ＦＰＵレジスタ１３ｃ全体を使用しているか否かではなく、ＦＰＵレジスタ１３ｃを複数のグループに分割して、そのグループごとに使用中であるか否かを管理する。なお、本実施例では、このグループをレジスタグループと記載する場合がある。
【００３１】
図４は、ＦＰＵレジスタ１３ｃを説明する図である。図４に示すように、プロセッサ１３は、合計１２８レジスタのＦＰＵレジスタ１３ｃを３２個ずつのグループに分け、各グループをＦＰＵ状態レジスタで管理する。つまり、プロセッサ１３は、３２個のレジスタを有するレジスタグループＡ、レジスタグループＢ、レジスタグループＣ、レジスタグループＤを用いて、コンテキストの管理を実行する。なお、ここで示した分割数や各数字は一例であり、これに限定されるものではない。また、ＦＰＵ状態レジスタは、各レジスタグループが現在のプロセスによって使用されているか、すなわち各レジスタグループに保存される情報が現在のプロセスの情報かを保持するレジスタである。このＦＰＵ状態レジスタは、ＦＰＵレジスタ１３ｃの利用者が変更されるたびに更新される。
【００３２】
また、プロセッサ１３は、ＦＰ  ｏｗｎｅｒ（Lazy  FPU  Switching）機能を実行し、ＦＰ  ｏｗｎｅｒ機能を用いて各レジスタグループを管理する。ＦＰ  ｏｗｎｅｒ機能は、コンテキストスイッチ時にＦＰＵレジスタ１３ｃの退避復元を行わず、実際にプログラムがＦＰＵを使用するタイミングまで先延ばしにすることで、ＦＰＵを使用しないプログラムのコンテキスト切り替え時間を短縮する。なお、プロセッサ１３で実行中のプロセスとは独立にＦＰＵの所有者（owner）を定義する。これにより、コンテキストスイッチとは独立したタイミングでも、ＦＰＵレジスタ１３ｃの退避先プロセスを特定することができる。なお、一例として、ＦＰ  ｏｗｎｅｒ機能で定義される、ＦＰＵごとの所有者に対する参照情報は、メモリ等に記憶される。
【００３３】
［機能構成］
図５は、実施例１に係る計算機の機能構成を示す機能ブロック図である。図５に示すように、計算機１０のプロセッサ１３は、ＦＰＵレジスタ１３ｃ、コンパイル部２１、実行部２２、切替部２３を有する。なお、ＦＰＵレジスタ１３ｃは、図２等で説明したので詳細な説明は省略する。コンパイル部２１、実行部２２、切替部２３は、プロセッサ１３が実行するプロセスの一例やプロセッサ１３が有する電子回路の一例である。
【００３４】
コンパイル部２１は、各プロセスとしての実行内容が記述されるプログラムをコンパイルする処理部である。例えば、コンパイル部２１は、プログラムをコンパイルして実行バイナリデータを生成する。
【００３５】
このとき、コンパイル部２１は、各プロセスについて、関数ごとにその中で使用するレジスタグループの一覧を算出し、図３に示したレジスタ使用予定を生成する。そして、コンパイル部２１は、生成したレジスタ使用予定を、実行バイナリデータのヘッダに埋め込む。なお、コンパイル部２１は、生成部の一例である。
【００３６】
実行部２２は、プロセスを実行する処理部である。具体的には、実行部２２は、コンパイル部２１が生成した実行バイナリデータを実行し、各プロセスの起動、停止、切替を実行する。また、実行部２２は、プロセスを実行すると、当該プロセスに対応するプロセス構造体を生成する。また、実行部２２は、実行バイナリデータの実行時に、実行バイナリデータのヘッダからレジスタ使用予定を読出してメモリ１２に展開する。
【００３７】
具体的には、実行部２２は、レジスタ使用予定とプログラム本体から構成される実行バイナリデータを読み込み、プログラム本体をメモリ１２上に展開する。続いて、実行部２２は、レジスタ使用予定を保存するための領域をメモリ１２上に確保し、実行バイナリデータのヘッダから読み込んだレジスタ使用予定を、確保した領域に展開する。その後、実行部２２は、レジスタ使用予定が保存される領域へのポインタを、プロセス構造体に追加する。また、実行部２２は、各プロセスの実行や停止等に伴って、プロセス構造体にプログラムカウンタを格納する。
【００３８】
切替部２３は、検出部２４、退避部２５、復元部２６を有し、これらによって、プロセス切替に伴うコンテキストスイッチが実行される場合に、ＦＰＵレジスタ１３ｃに記憶される情報の退避や復元を実行する処理部である。
【００３９】
検出部２４は、プロセス切替が発生してコンテキストスイッチを実行する場合に、情報の退避先や復元先を検出する処理部である。具体的には、検出部２４は、プロセスがアクセスするレジスタグループに該当する情報が記憶されていない場合に、復元対象の情報を検出して、該当情報の復元や退避等を実行させる。
【００４０】
例えば、検出部２４は、ＦＰＵ状態レジスタやＦＰＵ  ｏｗｎｅｒ情報等を参照して、該当レジスタグループが使用中か否かを判定し、使用中ではない場合、該当レジスタグループを復元先として復元部２６に復元処理の実行を要求する。このとき、検出部２４は、対象となっているレジスタグループや実行中のプロセスを特定する情報を復元部２６に通知することもできる。
【００４１】
一方、検出部２４は、該当レジスタグループが使用中である場合、後続のプロセスに使用されない退避先レジスタグループの検出を実行する。具体的には、検出部２４は、ＦＰＵレジスタ１３ｃの使用状況と、現在と次のタイムスライスのプロセスディスパッチの順序と、各プロセスが次のタイムスライスで使用するレジスタのリストとを用いて、次のプロセスに使用されないレジスタグループを検出する。
【００４２】
なお、ＦＰＵレジスタ１３ｃの使用状況は、実行部２２がコンテキストスイッチの度に更新するＦＰＵ状態レジスタから取得することができる。また、プロセスディスパッチの順序は、ＯＳカーネルのプロセススケジューラから取得することができる。また、レジスタのリストは、メモリ１２に展開されるレジスタ使用予定である。
【００４３】
ここで検出処理の具体例を説明する。一例として、プロセス２、プロセス１、プロセス２がスケジューリングされている状況で、プロセス２からプロセス１に切り替わる例で説明する。また、プロセス１でレジスタグループＣの情報を使用するタイミングで、レジスタグループＣにプロセス２が使用する情報が記憶されており、退避対象がレジスタグループＣであることとする。
【００４４】
（切替手法１）
例えば、検出部２４は、切替後のプロセスが使用しないレジスタグループを退避先として選択し、切替後のプロセスが使用しないレジスタグループがない場合は、メモリ１２を退避先に選択する。
【００４５】
一例を挙げると、検出部２４は、プロセス１のプロセス構造体やＦＰＵ状態レジスタの情報から、切り替わるプロセス１が使用するレジスタグループがレジスタグループＡとレジスタグループＢとレジスタグループＣであることを特定する。つまり、検出部２４は、切替後のプロセス１がレジスタグループＤを使用しないことを特定し、レジスタグループＤを退避先に設定する。
【００４６】
その後、検出部２４は、退避対象のレジスタグループがレジスタグループＣであることと、退避先のレジスタグループがレジスタグループＤであることを退避部２５に通知する。このとき、検出部２４は、実行対象のプロセスがプロセス１であることを退避部２５に通知することもできる。
【００４７】
（切替手法２）
例えば、検出部２４は、切替後のプロセスが使用しないレジスタグループのうち、さらに後続のプロセスが使用しないレジスタグループ退避先として選択し、該当するレジスタグループがない場合は、メモリ１２を退避先に選択する。
【００４８】
一例を挙げると、検出部２４は、プロセス１のプロセス構造体やＦＰＵ状態レジスタの情報から、切り替わるプロセス１が使用するレジスタグループがレジスタグループＡとレジスタグループＢとレジスタグループＣであることを特定する。また、検出部２４は、プロセススケジューラから、後続のプロセスがプロセス２であることを特定する。続いて、検出部２４は、プロセス２に対応するプロセス構造体から、プログラムカウンタおよびレジスタ使用予定へのポインタを抽出する。
【００４９】
そして、検出部２４は、ポインタを用いてメモリ１２からプロセス２のレジスタ使用予定を読み込み、プログラムカウンタを用いて次に実行される関数および当該関数が使用するレジスタグループを特定する。
【００５０】
ここで、検出部２４は、プロセス２が次にディスパッチされたときに使用するレジスタグループがレジスタグループＡおよびレジスタグループＢである場合、後続のプロセスに使用されないレジスタグループＤを退避先と特定する。そして、検出部２４は、退避対象のレジスタグループがレジスタグループＣであることと、退避先のレジスタグループがレジスタグループＤであることを退避部２５に通知する。このとき、検出部２４は、実行対象のプロセスがプロセス１であることを退避部２５に通知することもできる。
【００５１】
また、検出部２４は、プロセス２が次にディスパッチされたときに使用するレジスタグループがレジスタグループＡ、レジスタグループＣ、レジスタグループＤである場合、退避先のレジスタグループがないと特定する。そして、検出部２４は、退避対象のレジスタグループがレジスタグループＣであることと、退避先レジスタグループがないことを退避部２５に通知する。このとき、検出部２４は、実行対象のプロセスがプロセス１であることを退避部２５に通知することもできる。
【００５２】
退避部２５は、コンテキストスイッチに伴って、ＦＰＵレジスタ１３ｃに記憶される情報の退避を実行する処理部である。具体的には、退避部２５は、新たなプロセスが使用するレジスタグループに既に記憶される情報を退避先レジスタグループまたはメモリ１２に退避する。
【００５３】
例えば、退避部２５が、検出部２４から、退避対象のレジスタグループがレジスタグループＣであることと、退避先のレジスタグループがレジスタグループＤであることと、対象のプロセスがプロセス１であることを受信したとする。
【００５４】
このとき、退避部２５は、ＦＰＵ状態レジスタを参照して、退避先であるレジスタグループＤに情報が記憶されているか否かを判定する。ここで、退避部２５は、レジスタグループＤに情報が記憶されていない場合、退避対象のレジスタグループＣに記憶される情報をレジスタグループＤに退避する。
【００５５】
一方、退避部２５は、退避先であるレジスタグループＤに情報が記憶されている場合、メモリ上のＦＰＵ  ｏｗｎｅｒ情報を参照して、当該情報を使用するプロセスがプロセス２であることを特定する。そして、退避部２５は、レジスタグループＤに記憶される情報をプロセス２のプロセス構造体のレジスタ退避領域に退避する。その後、退避部２５は、レジスタグループＣに記憶される情報をレジスタグループＤに格納する。なお、退避部２５は、プロセス構造体に情報を退避する場合、どのレジスタの情報かを特定する情報を対応付けて格納することができる。
【００５６】
また、退避部２５が、検出部２４から、退避対象のレジスタグループがレジスタグループＣであることと、退避先レジスタグループがないことと、実行対象のプロセスがプロセス１であることを受信したとする。
【００５７】
この場合、退避部２５は、ＦＰＵ  ｏｗｎｅｒ情報を参照して、コンテキスト切替前のレジスタグループＣに既に記憶される情報を使用するプロセスがプロセス２であることを特定する。そして、退避部２５は、レジスタグループＣに記憶される情報を、プロセス２に対応するプロセス構造体のレジスタ退避領域に格納する。なお、退避部２５は、情報を退避する場合に、どのレジスタの情報かを特定する情報を対応付けて格納することができる。
【００５８】
上述した処理の後、退避部２５は、情報が退避済みであるレジスタグループＣへの復元指示および実行対象のプロセスがプロセス１であることを復元部２６に通知する。
【００５９】
復元部２６は、コンテキストスイッチに伴って、メモリ１２からＦＰＵレジスタ１３ｃへの復元を実行する処理部である。具体的には、復元部２６は、新たなプロセスが使用するレジスタグループに、該当する情報をメモリ１２から復元させる。
【００６０】
上述した例で説明すると、復元部２６が、実行中のプロセス１が使用する該当レジスタグループＣが未使用であることを示す通知を検出部２４から受信したとする。この場合、復元部２６は、通知された該当プロセス１のプロセス構造体とＦＰＵ  ｏｗｎｅｒ情報およびＦＰＵ状態レジスタを参照して、該当情報の保存先を特定する。そして、復元部２６は、プロセス構造体に保存されている場合は、該当する情報をレジスタ退避領域から読み出して、通知されたレジスタグループＣに復元する。また、復元部２６は、他のレジスタグループに保存されている場合は、該当する情報を当該他のレジスタグループから読み出して、通知されたレジスタグループＣに復元する。
【００６１】
また、復元部２６は、退避部２５からレジスタグループＣへの復元指示を受信した場合、該当するプロセス１のプロセス構造体のレジスタ退避領域から該当する情報を読み出して、レジスタグループＣに格納する。
【００６２】
［処理の流れ］
次に、計算機が実行する各処理について説明する。ここでは、復元処理、退避処理、退避先選択処理について説明する。
【００６３】
（復元処理の流れ）
図６は、レジスタの復元処理の流れを示すフローチャートである。図６に示すように、検出部２４は、プロセス切替に伴ってコンテキストスイッチが発生した場合、復元対象であるレジスタグループが過去に使用したレジスタグループか否かを判定する（Ｓ１０１）。例えば、検出部２４は、実行されているプロセスに対応するレジスタ使用予定等を用いて、判定する。
【００６４】
続いて、検出部２４は、復元対象であるレジスタグループが過去に使用したレジスタグループである場合（Ｓ１０１：Ｙｅｓ）、復元対象であるレジスタグループが使用中か否かを判定する（Ｓ１０２）。例えば、検出部２４は、ＦＰＵ状態レジスタ等を用いて判定する。
【００６５】
そして、検出部２４が復元対象であるレジスタグループが使用中であると判定した場合（Ｓ１０２：Ｙｅｓ）、検出部２４と退避部２５は、退避処理を実行する（Ｓ１０３）。
【００６６】
一方、検出部２４が復元対象であるレジスタグループが使用中ではないと判定した場合（Ｓ１０２：Ｎｏ）、復元部２６は、復元対象の情報が別のレジスタグループへ退避済みか否かを判定する（Ｓ１０４）。例えば、復元部２６は、ＦＰＵ状態レジスタ等を用いて判定する。
【００６７】
そして、復元対象の情報が別のレジスタグループへ退避済みである場合（Ｓ１０４：Ｙｅｓ）、復元部２６は、レジスタ間で情報の復元を実行する（Ｓ１０５）。例えば、復元部２６は、復元対象の情報が記憶されるレジスタグループから、対象のレジスタグループへ当該情報を格納して情報を復元する。その後、復元部２６は、ＦＰＵ状態レジスタに対して、退避元だったレジスタグループに「未使用」をマークする（Ｓ１０６）。
【００６８】
また、Ｓ１０４において、復元対象の情報が別のレジスタグループへ退避済みではない場合（Ｓ１０４：Ｎｏ）、復元部２６は、メモリ１２から該当情報を読み出して、対象のレジスタグループへ当該情報を復元する（Ｓ１０７）。例えば、復元部２６は、該当プロセスに対応するプロセス構造体のレジスタ退避領域から該当情報を読み出して、対象のレジスタグループへ格納する。
【００６９】
また、Ｓ１０１において、復元対象であるレジスタグループが過去に使用したレジスタグループでない場合（Ｓ１０１：Ｎｏ）、検出部２４は、復元対象であるレジスタグループが使用中か否かを判定する（Ｓ１０８）。
【００７０】
そして、検出部２４が復元対象であるレジスタグループが使用中であると判定した場合（Ｓ１０８：Ｙｅｓ）、検出部２４と退避部２５は、退避処理を実行する（Ｓ１０９）。一方、検出部２４が復元対象であるレジスタグループが使用中ではないと判定した場合（Ｓ１０８：Ｎｏ）、復元部２６は、例えば０などの初期値を、該当レジスタグループに格納する（Ｓ１１０）。
【００７１】
（退避処理の流れ）
図７は、レジスタの退避処理の流れを示すフローチャートである。なお、この処理は、図６のＳ１０３やＳ１０９で実行される。
【００７２】
図７に示すように、検出部２４は、退避処理を開始すると（Ｓ２０１：Ｙｅｓ）、退避先選択処理を実行する（Ｓ２０２）。
【００７３】
その後、退避先選択処理の結果、退避先がレジスタグループと決定された場合（Ｓ２０３：Ｙｅｓ）、退避部２５は、退避先のレジスタグループに記憶される情報をメモリ１２へ書き出す（Ｓ２０４）。例えば、退避部２５は、退避先のレジスタグループに記憶される情報を、該当するプロセスのプロセス構造体へ書き出す。
【００７４】
その後、退避部２５は、退避対象のレジスタグループに記憶される情報を、退避先として特定されたレジスタグループに退避する（Ｓ２０５）。
【００７５】
一方、退避先選択処理の結果、退避先がレジスタグループではなくメモリ１２と決定された場合（Ｓ２０３：Ｎｏ）、退避部２５は、退避対象のレジスタグループに記憶される情報をメモリ１２に退避する（Ｓ２０６）。例えば、退避部２５は、退避対象のレジスタグループに記憶される情報を、該当するプロセスのプロセス構造体へ書き出す。
【００７６】
（退避先選択処理の流れ）
図８は、退避先選択処理の流れを示すフローチャートである。なお、この処理は、図７のＳ２０２で実行される。ここでは、上述した例とは別の一例を挙げて説明する。
【００７７】
図８に示すように、検出部２４は、実行対象のプロセス１がレジスタグループＡを使用すると判定した場合（Ｓ３０１：Ｙｅｓ）、ＦＰＵ状態レジスタ等を参照して、レジスタグループＡが使用中か否かを判定する（Ｓ３０２）。
【００７８】
そして、検出部２４は、レジスタグループＡが使用中ではない場合（Ｓ３０２：Ｎｏ）、レジスタグループＡをそのまま使用すると決定する（Ｓ３０３）。
【００７９】
一方、検出部２４は、レジスタグループＡが使用中である場合（Ｓ３０２：Ｙｅｓ）、ＦＰＵ  ｏｗｎｅｒ情報やＦＰＵ状態レジスタ等を参照して、レジスタグループＡを使用しているプロセスがプロセス２であると特定する（Ｓ３０４）。
【００８０】
続いて、検出部２４は、実行対象のプロセス１が使用しているレジスタグループの一覧を、該当するプロセス構造体から取得する（Ｓ３０５）。そして、検出部２４は、取得したレジスタグループの一覧を反転させて、プロセス１の未使用レジスタグループ一覧を候補レジスタとして特定する（Ｓ３０６）。
【００８１】
その後、検出部２４は、プロセス２が再度ディスパッチされるまでにスケジュールされているプロセスのリストをプロセススケジューラ等から取得する（Ｓ３０７）。続いて、検出部２４は、取得した各プロセスのレジスタ使用予定をプロセス構造体に記憶されるポインタを用いて取得する（Ｓ３０８）。
【００８２】
そして、検出部２４は、候補レジスタを１つ選択し、レジスタグループＸとする（Ｓ３０９）。さらに、検出部２４は、プロセス２がディスパッチされるまでにスケジュールされているプロセスのリストからプロセスを１つ選択し、プロセスＹとする（Ｓ３１０）。
【００８３】
その後、検出部２４は、レジスタ使用予定を参照して、プロセスＹがレジスタグループＸを使用するか否かを判定する（Ｓ３１１）。ここで、検出部２４は、プロセスＹがレジスタグループＸを使用しないと判定した場合（Ｓ３１１：Ｎｏ）、Ｓ３０７で取得されたプロセスのうち未処理のプロセスがあるか否かを判定する（Ｓ３１２）。
【００８４】
そして、検出部２４は、未処理のプロセスがある場合（Ｓ３１２：Ｙｅｓ）、Ｓ３１０以降を繰り返す。一方、検出部２４は、未処理のプロセスがない場合（Ｓ３１２：Ｎｏ）、レジスタグループＸをレジスタグループＡの退避先に決定する（Ｓ３１３）。なお、検出部２４は、レジスタグループＸが複数特定されている場合は、任意のレジスタグループＸを選択することができる。
【００８５】
その後、退避部２５は、レジスタグループＸに記憶される情報をメモリ１２に退避し、レジスタグループＡに記憶される情報をレジスタグループＸに退避する（Ｓ３１４）。
【００８６】
一方、検出部２４は、プロセスＹがレジスタグループＸを使用すると判定した場合（Ｓ３１１：Ｙｅｓ）、未処理の候補レジスタがあるか否かを判定する（Ｓ３１５）。
【００８７】
そして、検出部２４は、未処理の候補レジスタがあると判定した場合（Ｓ３１５：Ｙｅｓ）、Ｓ３０９以降を実行する。一方、検出部２４が未処理の候補レジスタがないと判定した場合（Ｓ３１５：Ｎｏ）、退避部２５は、レジスタグループＡに記憶される情報をメモリ１２に退避する（Ｓ３１６）。
【００８８】
［具体例］
次に、図９から図１２を用いて、コンテキストスイッチにおけるレジスタの退避や復元について、具体例を説明する。ここで説明する具体例は、プロセス切替後に実行されるプロセス１がレジスタグループＣを使用するタイミングでコンテキストスイッチが発生した例である。また、プロセス１の後にはプロセス２が再度ディスパッチされることとする。
【００８９】
図９は、プロセス１実行時のレジスタ配置の具体例を示す図である。図９に示すように、ＦＰＵレジスタ１３ｃにはレジスタグループＡからレジスタグループＤまでの４つのレジスタグループが存在する。プロセス１は、網掛けになっているレジスタグループＡ、レジスタグループＢ、レジスタグループＣを使用する。また、レジスタグループＣには、プロセス２の情報が記憶されており、レジスタグループＤには、情報が記憶されていない。したがって、ここでは、レジスタグループＣの退避が発生する。
【００９０】
なお、計算機１０は、切替後のプロセス１が実行中にレジスタグループＣを退避する場合、プロセス１が使用しないレジスタグループＤを退避先として、退避させることもできる（上記切替手法１）。しかし、ここでは、さらに後続のプロセスのレジスタ使用予定を考慮して、より効率的な退避手法（上記切替手法２）について説明する。
【００９１】
メモリ１２には、プロセス１がレジスタグループＣで使用する情報（１−Ｃ）と、プロセス１がレジスタグループＤで使用する情報（１−Ｄ）とが記憶されている。なお、ここでは便宜上、メモリ１２に記憶されている図を図示したが、正確には、メモリ１２上に設けられたプロセス１のプロセス構造体のレジスタ退避領域に記憶されている。
【００９２】
図１０は、プロセス１およびプロセス２のレジスタ使用予定の具体例を示す図である。図１０に示すように、各プロセスについて、関数の先頭アドレスと各レジスタグループとを対応付けて記憶する。図１０における黒丸が、そのレジスタグループを使用することを表している。例えば、プロセス１の仮想アドレス「０ｘ１０００」から「０ｘ２０００」範囲の仮想アドレスで特定される関数は、レジスタグループＡとＣを使用することを表している。
【００９３】
（具体例１：レジスタへの退避）
ここで、レジスタ間の退避例について説明する。図１１は、他のレジスタグループへの退避例を説明する図である。まず、図９に示すように、プロセス１がレジスタグループＣを使用する際に、プロセス２の情報が記憶されていることから、コンテキストスイッチが発生する。そして、検出部２４は、実行中のプロセス１が使用しないレジスタグループＤを候補レジスタに設定する。
【００９４】
そして、検出部２４は、後続のプロセス２のプロセス構造体からプロセス２のプログラムカウンタが「０ｘ３Ａ０４」であることを特定する。続いて、図１０に示すように、検出部２４は、プロセス２のレジスタ使用予定とプログラムカウンタ「０ｘ３Ａ０４」とから、プロセス２が次にディスパッチされた時の再開箇所が「Ｐ」であることを特定する。したがって、検出部２４は、プロセス２が次にディスパッチされた時に使用するレジスタグループがＡとＢであることを特定する。
【００９５】
この結果、図１１に示すように、検出部２４は、退避先の候補レジスタであるレジスタグループＤが後続のプロセス２に使用されないことから、空きのレジスタグループと判定して退避先に決定する。そして、退避部２５は、退避先のレジスタグループＤに情報が記憶されていないことから、退避対象のレジスタグループＣの情報をレジスタグループＤに退避させる。その後、復元部２６は、退避済みのレジスタグループＣに、メモリ１２に記憶される情報（１−Ｃ）を復元する。
【００９６】
（具体例２：メモリへの退避）
ここで、メモリ１２への退避例について説明する。図１２は、メモリへの退避例を説明する図である。まず、図９に示すように、プロセス１がレジスタグループＣを使用する際に、プロセス２の情報が記憶されていることから、コンテキストスイッチが発生する。そして、検出部２４は、実行中のプロセス１が使用しないレジスタグループＤを候補レジスタに設定する。
【００９７】
そして、検出部２４は、後続のプロセス２のプロセス構造体からプロセス２のプログラムカウンタが「０ｘ７２２０」であることを特定する。続いて、図１０に示すように、検出部２４は、プロセス２のレジスタ使用予定とプログラムカウンタ「０ｘ７２２０」から、プロセス２が次にディスパッチされた時の再開箇所が「Ｑ」であることを特定する。したがって、検出部２４は、プロセス２が次にディスパッチされた時に使用するレジスタグループがＡとＣとＤであることを特定する。
【００９８】
この結果、図１２に示すように、検出部２４は、候補レジスタであるレジスタグループＤが後続のプロセス２に使用されることから、空きのレジスタグループがないと判定して、退避先をメモリ１２に決定する。そして、退避部２５は、退避対象のレジスタグループＣの情報をメモリ１２に退避させる。その後、復元部２６は、退避済みのレジスタグループＣに、メモリ１２に記憶される情報（１−Ｃ）を復元する。
【００９９】
［効果］
上述したように、計算機１０は、大規模なコンテキストレジスタを有する場合であっても、レジスタ情報のメモリ１２への転送量を減らすことができる。この結果、計算機１０は、複数のプロセス間のコンテキストスイッチの時間を短縮することができる。
【０１００】
また、退避用のレジスタを予め用意しておく手法も考えられるが、ハードウェアが多くなり、コスト等の観点から好ましい手法とは言い難い。これに対して、実施例１に係る計算機１０は、退避用のレジスタを設けることなく、通常時はプロセスによって共有して使用されるレジスタグループの中から、使用頻度の少ないレジスタグループを検出して、退避用として設定することができる。つまり、計算機１０は、退避用のレジスタグループをプロセススケジュール等によって動的に変更することができる。この結果、計算機１０は、ハードウェアの数を削減し、コストの削減を実現できるとともに、レジスタグループの有効使用を実現できる。また、計算機１０は、プロセッサの処理負荷も軽減できる。
【０１０１】
また、計算機１０は、レジスタ使用予定を動的に生成して、レジスタグループの使用予定を検出することができるので、プログラムに依存することなく、退避先のレジスタグループを検出することができる。
【０１０２】
一般に、コンパイラでは翻訳時に、関数ごとにその中で使用するレジスタグループの一覧を算出する。このため、コンパイラは、翻訳中のプログラムについてレジスタと変数とのマッピングやレジスタの使用や未使用を管理しており、関数内で使用するレジスタを列挙することができる。また、計算機１０は、実行バイナリデータのヘッダに、レジスタ使用予定を保存するので、プロセス実行時に、レジスタ使用予定を容易に読み込むことができる。
【０１０３】
また、計算機１０は、プログラム構造体にレジスタ使用予定を紐付ることができるので、プロセスが終了するとレジスタ使用予定もメモリ１２上から削減することができ、メモリ使用量の削減を実現できる。
【０１０４】
また、計算機１０は、切替後のプロセスが使用しないレジスタグループに、情報を退避することができるので、退避にかかる時間を短縮できる。また、計算機１０は、切替後のプロセスが使用しないレジスタグループのうち、さらに後続のプロセスが使用しないレジスタグループに情報を退避することができるので、レジスタグループを効率的に使用することができ、メモリアクセスをさらに削減できる。
【実施例２】
【０１０５】
上記実施例では、プロセス１とプロセス２の２つのプロセスについて説明したが、これに限定されるものではなく、３つ以上のプロセスであっても同様に処理することができる。図１３は、複数プロセスの制御例を説明する図である。図１３は、プロセススケジュールと使用するレジスタグループの関係、および、各レジスタグループの保持内容を示す。
【０１０６】
図１３に示すように、計算機１０は、プロセス１に切り替える場合、レジスタグループＡに保持されるプロセス２の情報を、プロセス１が使用しないレジスタグループＤに退避させる。その後、計算機１０は、レジスタグループＣに保持される情報をレジスタグループＡに復元する。
【０１０７】
続いて、計算機１０は、プロセス１からプロセス２に切り替える場合、プロセス２が使用するレジスタグループＡおよびＢに保持されるプロセス１の情報を、プロセス２が使用しないレジスタグループＣとＤにそれぞれ退避させる。その後、計算機１０は、レジスタグループＤに記憶されるプロセス２の情報とメモリ１２に保持されるプロセス２の情報をレジスタグループＡとＢのそれぞれに復元する。
【０１０８】
続いて、計算機１０は、プロセス２からプロセス３に切り替える場合、プロセス３が使用しないレジスタグループＡとＢを退避先の候補レジスタに設定する。しかし、計算機１０は、後に実行されるプロセス２がレジスタグループＡを使用するとともに、現在のレジスタグループＡに保持される情報がプロセス２のレジスタグループＡの情報であることを特定する。この結果、計算機１０は、レジスタグループＢを退避可能なレジスタに設定する。
【０１０９】
さらに、計算機１０は、プロセス３が使用するレジスタグループＣ、Ｄを退避対象と特定するが、後続のプロセス１が現在のレジスタグループＤに記憶される情報を使用することを特定する。このため、計算機１０は、レジスタグループＤに記憶される情報をレジスタ内に留めることを優先し、レジスタグループＢおよびＣに保持される内容をメモリ１２に退避する。続いて、計算機１０は、プロセス１のレジスタグループＢの情報を保持するレジスタグループＤの情報をレジスタグループＢに退避する。その後、計算機１０は、メモリ１２に保持されるプロセス３の情報をレジスタグループＣとＤのそれぞれに復元する。
【０１１０】
続いて、計算機１０は、プロセス３からプロセス１に切り替える場合、プロセス１に使用されないレジスタグループＡとＤを退避先の候補レジスタに設定する。そして、計算機１０は、レジスタグループＡに記憶される情報が後続のプロセス１が使用予定であることから、レジスタグループＤのみを退避先に決定する。
【０１１１】
また、計算機１０は、プロセス１が使用予定であるレジスタグループＣにはプロセス３の情報が保持されていることから、レジスタグループＣを退避対象に決定する。そして、計算機１０は、候補レジスタであるレジスタグループＤに保持される情報をメモリ１２に退避させた後、レジスタグループＣに保持されるプロセス３の情報をレジスタグループＤに退避させる。その後、計算機１０は、メモリ１２に保持されるプロセス１の情報をレジスタグループＣに復元する。
【０１１２】
続いて、計算機１０は、プロセス１からプロセス２に切り替える場合、プロセス２に使用されないレジスタグループＣ、Ｄを退避先の候補レジスタに設定する。そして、計算機１０は、プロセス２が使用予定であるレジスタグループＢにはプロセス１の情報が保持されていることから、レジスタグループＢを退避対象に決定する。
【０１１３】
通常であれば、計算機１０は、候補レジスタであるレジスタグループＣまたはＤに保持される情報をメモリ１２に退避させた後、レジスタグループＢに保持されるプロセス１の情報をレジスタグループＣまたはＤに退避させる。しかし、計算機１０は、レジスタグループＣおよびＤに保持される情報が後続のプロセスで使用される情報であることを特定する。
【０１１４】
この結果、計算機１０は、候補レジスタであるレジスタグループＤに記憶される情報をレジスタ内に保持しておいた方がその後に実行されるプロセス３の切替時に、切替時間を短縮できると判定する。したがって、計算機１０は、退避対象であるレジスタグループＢの情報をメモリ１２に退避させた後、メモリ１２に保持されるプロセス２の情報をレジスタグループＢに復元する。
【０１１５】
このように、計算機１０は、３つ以上のプロセッサであっても、実施例１と同様に処理することができる。また、計算機１０は、後続のプロセスのさらに後のプロセスの使用予定まで把握して、退避先を決定することができる。この結果、計算機１０は、レジスタグループをさらに有効利用することができ、メモリアクセスの削減を実現できる。
【実施例３】
【０１１６】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
【０１１７】
［使用予定］
上記実施例では、レジスタ使用予定やプロセススケジュールを自動的に生成する例を説明したが、これに限定されるものではない。例えば、計算機１０は、プログラム開発者などが手動で生成したレジスタ使用予定やプロセススケジュールを用いることもできる。
【０１１８】
［レジスタ］
上記実施例では、レジスタグループを用いた例で説明したが、これに限定されるものではなく、レジスタごとに実行することもできる。また、上記実施例では、ＦＰ  ｏｗｎｅｒ機能を実行する例で説明したが、これに限定されるものではなく、通常のプロセス切替であっても同様に処理することができる。
【０１１９】
［退避例］
上記実施例では、プロセスが切り替わったときに未使用レジスタに情報を退避する例を説明したが、さらに次のプロセスに切り替わるときにも、レジスタ退避の判定を実行することができる。例えば、プロセスの切替に伴って情報を退避させたレジスタが、次にプロセスに使用される場合には、さらに空いているレジスタまたはメモリに退避させる。
【０１２０】
［システム］
また、図示した装置の各構成は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、任意の単位で分散または統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１２１】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、切替部２３が有する各処理部は任意に統合・分散することができ、検出部２４が、退避部２５が実行する処理をさらに実行することもできる。
【０１２２】
また、計算機１０は、プログラムを読み出して実行することでプロセス制御方法を実行する情報処理装置として動作する。つまり、計算機１０は、コンパイル部２１、実行部２２、切替部２３と同様の機能を実行するプログラムを実行する。この結果、計算機１０は、コンパイル部２１、実行部２２、切替部２３と同様の機能を実行するプロセスを実行することができる。なお、この他の実施例でいうプログラムは、計算機１０によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【０１２３】
このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することができる。
【符号の説明】
【０１２４】
１０  計算機
１１  入出力装置
１２  メモリ
１２ａ  構造体記憶領域
１３  プロセッサ
１３ａ  演算器
１３ｂ  整数レジスタ
１３ｃ  ＦＰＵレジスタ
１３ｄ  キャッシュメモリ
２１  コンパイル部
２２  実行部
２３  切替部
２４  検出部
２５  退避部
２６  復元部
【図１】
2017037370.tif 000003
【図２】
2017037370.tif 000004
【図３】
2017037370.tif 000005
【図４】
2017037370.tif 000006
【図５】
2017037370.tif 000007
【図６】
2017037370.tif 000008
【図７】
2017037370.tif 000009
【図８】
2017037370.tif 000010
【図９】
2017037370.tif 000011
【図１０】
2017037370.tif 000012
【図１１】
2017037370.tif 000013
【図１２】
2017037370.tif 000014
【図１３】
2017037370.tif 000015