(57)【要約】【課題】リアルタイムＯＳなどコンテキストの切り替えが頻繁に発生するアプリケーションにおいて、コンテキストの切り替えによるオーバーヘッドを大幅に削減する。【解決手段】ＯＳは、Ｓｗａｐ命令を発行し、コンテキストスイッチが開始する。Ｓｗａｐ命令は、入れ替えるスレッドＩＤと共にスレッド制御ユニット９に発行される。スレッドＩＤは、コンテキストキャッシュ８に格納されているスレッドを一意に識別するために用いる。スレッド制御ユニット９は、コンテキスト専用バス１２を経て、レジスタファイル１からコンテキストキャッシュ８へデータを退避すると同時に、コンテキストキャッシュ８からレジスタファイル１へ新しいスレッドのデータを送る。スレッド制御ユニット９は、送られてきたスレッドＩＤに基づいて自動的に必要な数だけレジスタファイル１内のデータとコンテキストキャッシュ８内のデータを入れ替える。【選択図】  図３
2004220070.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンテキストを切り替えるコンテキスト切り替え装置であって、
演算論理ユニット又はメモリアクセスユニットで実行すべきスレッドに関するコンテキストが記憶されたレジスタファイルと、
前記レジスタファイルに接続され、コンテキストをキャッシュするためのコンテキストキャッシュと、
前記レジスタファイルと前記コンテキストキャッシュを接続するコンテキストスイッチ専用バスと、
前記コンテキストキャッシュに記憶されているスレッドのコンテキストを識別するためのスレッド識別子（スレッドＩＤ）を記憶するスレッドＩＤテーブルを有し、演算論理ユニット及びメモリアクセスユニットと並列に接続され、前記コンテキストキャッシュと前記レジスタファイルとの間のデータ伝送を制御するスレッド制御ユニットと
を備え、
前記スレッド制御ユニットは、
コンテキストの切り替えが発生した場合、入力された切り替え命令と新たに入れ替えるスレッド識別子（スレッドＩＤ）に基づき前記スレッドＩＤテーブルを検索し、
新たに入れ替えるコンテキストが記憶されている前記コンテキストキャッシュのアドレスと、実行中のコンテキストが記憶されている前記レジスタファイルのレジスタ識別子を求め、
求めたアドレスに基付き前記コンテキストキャッシュをアクセスし、且つ、求めたレジスタ識別子に基付き前記レジスタファイルをアクセスし、前記レジスタファイル及び／又は前記コンテキストキャッシュのコンテキストを前記コンテキストスイッチ専用バスを介して入れ替え、退避又は復帰を実行する
前記コンテキスト切り替え装置。
【請求項２】
前記コンテキストスイッチ専用バスは、バス幅をレジスタ長以上とすることで、１度に複数のコンテキストのデータを同時にスワップ、バックアップ又はリストアする請求項１に記載のコンテキスト切り替え装置。
【請求項３】
前記コンテキストキャッシュは、リードポートとライトポートを備え、
前記レジスタファイルは、リードポートとライトポート、コンテキストスイッチ用リードポートとライトポートを備え、
前記コンテキストキャッシュのリードポートとライトポートは、それぞれ前記コンテキストスイッチ専用バスにより前記レジスタファイルのコンテキストスイッチ用ライトポートとリードポートと接続されることを特徴とする請求項１に記載のコンテキスト切り替え装置。
【請求項４】
前記スレッド制御ユニットは、コンテキストキャッシュにキャッシュされた所定数のコンテキストを識別する所定数のスレッドＩＤテーブルを含むことを特徴とする請求項１に記載のコンテキスト切り替え装置。
【請求項５】
前記スレッド制御ユニットは、コンテキストを入れ替えるスワップ命令を実行する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むスワップ命令が発行されると、前記レジスタファイルから前記コンテキストキャッシュへ実行中のスレッドのコンテキストを退避すると同時に、前記コンテキストキャッシュから前記レジスタファイルへ新しく入れ替えるスレッドのコンテキストを送り、自動的に必要な数だけ前記レジスタファイル内のデータと前記コンテキストキャッシュ内のデータを入れ替えることを特徴とする請求項１乃至４のいずれかに記載のコンテキスト切り替え装置。
【請求項６】
前記スレッド制御ユニットは、コンテキストを退避するバックアップ命令を実行する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むバックアップ命令が発行されると、前記レジスタファイルから前記コンテキストキャッシュへのコンテキストのデータ転送を行い、前記コンテキストキャッシュから前記レジスタファイルへのコンテキストのデータ転送は行わないことを特徴とする請求項１乃至４のいずれかに記載のコンテキスト切り替え装置。
【請求項７】
前記スレッド制御ユニットは、コンテキストを復帰するリストア命令を処理する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むリストア命令が発行されると、前記コンテキストキャッシュから前記レジスタファイルへのコンテキストのデータ転送を行い、前記レジスタファイルから前記コンテキストキャッシュへのコンテキストのデータ転送は行わないことを特徴とする請求項１乃至４のいずれかに記載のコンテキスト切り替え装置。
【請求項８】
前記請求項１乃至７のいずれかに記載のコンテキスト切り替え装置と、
命令及びデータをそれぞれキャッシュする命令キャッシュ及びデータキャッシュと、
前記命令キャッシュから命令をフェッチ及びデコードする命令フェッチユニットと、
レジスタファイルに記憶された命令に従い各種演算を行い、演算結果を前記レジスタファイルに書き戻す演算論理ユニットと、
前記レジスタファイルからオペランドと命令が送られ、前記データキャッシュをアクセスし、ロード又はストアを実行するメモリアクセスユニットと、
前記レジスタファイル、前記演算論理ユニット、前記メモリアクセスユニット及び前記スレッド制御ユニットを並列に接続する演算バスと、
を備えた中央演算装置。
【請求項９】
前記メモリアクセスユニットは、ストア命令の場合はアドレスとデータを前記データキャッシュに送り、データを前記データキャッシュに格納し、ロード命令の場合はアドレスを前記データキャッシュに送り、データを前記データキャッシュから読み出し、読み出したデータを前記レジスタファイルに書き戻す請求項８に記載の中央演算装置。
【請求項１０】
演算論理ユニット又はメモリアクセスユニットで実行すべきスレッドに関するコンテキストが記憶されたレジスタファイルと、
前記レジスタファイルに接続され、コンテキストをキャッシュするためのコンテキストキャッシュと、
前記レジスタファイルと前記コンテキストキャッシュを接続するコンテキストスイッチ専用バスと
を備えたコンテキスト切り替え装置を用い、複数のコンテキストを切り替えるコンテキスト切り替え方法であって、
コンテキストの切り替えが発生した場合、入力された切り替え命令と新たに入れ替えるスレッド識別子（スレッドＩＤ）に基付き、前記コンテキストキャッシュに記憶されているスレッドのコンテキストを識別するためのスレッド識別子（スレッドＩＤ）を記憶する前記スレッドＩＤテーブルを検索し、
新たに入れ替えるコンテキストが記憶されている前記コンテキストキャッシュのアドレスと、実行中のコンテキストが記憶されている前記レジスタファイルのレジスタ識別子を求め、
求めたアドレスに基付き前記コンテキストキャッシュをアクセスし、且つ、求めたレジスタ識別子に基付き前記レジスタファイルをアクセスし、前記レジスタファイル及び／又は前記コンテキストキャッシュのコンテキストを前記コンテキストスイッチ専用バスを介して入れ替え、退避又は復帰を実行する
前記コンテキスト切り替え方法。
【請求項１１】
コンテキストを入れ替えるスワップ命令を実行する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むスワップ命令が発行されると、前記レジスタファイルから前記コンテキストキャッシュへ実行中のスレッドのコンテキストを退避すると同時に、前記コンテキストキャッシュから前記レジスタファイルへ新しく入れ替えるスレッドのコンテキストを送り、自動的に必要な数だけ前記レジスタファイル内のデータと前記コンテキストキャッシュ内のデータを入れ替えることを特徴とする請求項１０に記載のコンテキスト切り替え方法。
【請求項１２】
コンテキストを退避するバックアップ命令を実行する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むバックアップ命令が発行されると、前記レジスタファイルから前記コンテキストキャッシュへのコンテキストのデータ転送を行い、前記コンテキストキャッシュから前記レジスタファイルへのコンテキストのデータ転送は行わないことを特徴とする請求項１０に記載のコンテキスト切り替え方法。
【請求項１３】
コンテキストを復帰するリストア命令を処理する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むリストア命令が発行されると、前記コンテキストキャッシュから前記レジスタファイルへのコンテキストのデータ転送を行い、前記レジスタファイルから前記コンテキストキャッシュへのコンテキストのデータ転送は行わないことを特徴とする請求項１０に記載のコンテキスト切り替え方法。
【請求項１４】
演算論理ユニット又はメモリアクセスユニットで実行すべきスレッドに関するコンテキストが記憶されたレジスタファイルと、
前記レジスタファイルに接続され、コンテキストをキャッシュするためのコンテキストキャッシュと、
前記レジスタファイルと前記コンテキストキャッシュを接続するコンテキスト専用バスと
を備えたコンテキスト切り替え装置を用い、コンピュータが複数のコンテキストを切り替えるコンテキスト切り替えプログラムであって、
コンテキストの切り替えが発生した場合、入力された切り替え命令と新たに入れ替えるスレッド識別子（スレッドＩＤ）に基付き、前記コンテキストキャッシュに格納されているスレッドのコンテキストを識別するためのスレッド識別子（スレッドＩＤ）を記憶する前記スレッドＩＤテーブルを検索するステップと、
新たに入れ替えるコンテキストが記憶されている前記コンテキストキャッシュのアドレスと、実行中のコンテキストが記憶されている前記レジスタファイルのレジスタ識別子を求めるステップと、
求めたアドレスに基付き前記コンテキストキャッシュをアクセスし、且つ、求めたレジスタ識別子に基付き前記レジスタファイルをアクセスし、前記レジスタファイル及び／又は前記コンテキストキャッシュのコンテキストを前記コンテキストスイッチ専用バスを介して入れ替え、退避又は復帰を実行するステップと
をコンピュータに実行させるためのコンテキスト切り替えプログラム。
【請求項１５】
演算論理ユニット又はメモリアクセスユニットで実行すべきスレッドに関するコンテキストが記憶されたレジスタファイルと、
前記レジスタファイルに接続され、コンテキストをキャッシュするためのコンテキストキャッシュと、
前記レジスタファイルと前記コンテキストキャッシュを接続するコンテキストスイッチ専用バスと
を備えたコンテキスト切り替え装置を用い、コンピュータが複数のコンテキストを切り替えるコンテキスト切り替えプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
コンテキストの切り替えが発生した場合、入力された切り替え命令と新たに入れ替えるスレッド識別子（スレッドＩＤ）に基付き、前記コンテキストキャッシュに格納されているスレッドのコンテキストを識別するためのスレッド識別子（スレッドＩＤ）を記憶する前記スレッドＩＤテーブルを検索するステップと、
新たに入れ替えるコンテキストが記憶されている前記コンテキストキャッシュのアドレスと、実行中のコンテキストが記憶されている前記レジスタファイルのレジスタ識別子を求めるステップと、
求めたアドレスに基付き前記コンテキストキャッシュをアクセスし、且つ、求めたレジスタ識別子に基付き前記レジスタファイルをアクセスし、前記レジスタファイル及び／又は前記コンテキストキャッシュのコンテキストを前記コンテキストスイッチ専用バスを介して入れ替え、退避又は復帰を実行するステップと
をコンピュータに実行させるためのコンテキスト切り替えプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体に係り、特に、リアルタイム・オペレーティングシステム（ＲＴ−ＯＳ）等のＯＳにおいてコンテキストの切り替えによるオーバーヘッドの削減を可能にするコンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体に関する。ここで、コンテキストとは、例えば、汎用レジスタ、浮動小数点レジスタ、プログラムカウンタ、ステータスレジスタ等、記憶部（例、レジスタファイル）に記憶されている各スレッドの実行のための情報又は現在実行中の状態のことをいう。
【０００２】
【従来の技術】
図８に、コンテキスト切り替え動作の説明図を示す。
この図では、複数のコンテキスト（スレッド）が１つの中央演算装置で切り替えられて実行されている例を示している。コンテキストが切り替わる場合、今まで実行していたコンテキストの状態（汎用レジスタ、浮動小数点レジスタ、プログラムカウンタ、ステータスレジスタなどであり、以下、単にコンテキストという場合がある。）を保存し、新しく実行するコンテキストの状態を読み出す必要がある。切り替え動作の際に要する時間をオーバーヘッドといい、オーバーヘッドは、コンテキストが切り替わる度に発生する。
【０００３】
従来、コンテキスト切り替え時間を短縮するための技術としては、以下の文献が挙げられる。
特許文献１には、リアルタイムオペレーティングシステムを用いたマルチタスク処理装置において、各タスクに対応して占有される複数のレジスタバンクを設け、コンテキスト等の退避／復帰がレジスタバンクを切り替えることにより行い、ディスパッチ時間を短縮する技術が記載されている。
【０００４】
また、特許文献２には、マルチタスク処理を行うマイクロプロセッサにおいて、複数のレジスタに対応してその内容の変化又は非変化を示すビットを設け、タスク切り替えが発生したときに、そのビットに従い、レジスタの内容が変化したときに退避命令を実行し、変化しないとき退避命令を実行しないようにすることで、ＯＳのオーバーヘッドを減少させるレジスタ退避及び復元システムが記載されている。
【特許文献１】
特開平０７−１４１２０８号
【特許文献２】
特開平０９−２１２３７１号
【０００５】
【発明が解決しようとする課題】
従来の方法では、コンテキストを切り替える場合、中央演算装置内に保持されているコンテキストの状態は、ＯＳ等のソフトウェアによりストア命令を用いて１つずつ中央演算装置外の記憶装置に保存される。その後、ＯＳ等のソフトウェアは、ロード命令を用いて新しいコンテキストを記憶装置から読み込む。つまり、コンテキストを切り替える度に、コンテキストの保存と読み込みのためのメモリアクセスが数百サイクルから千数百サイクルも生じることになり、大きなオーバーヘッドとなっている。また、従来の方法では、ロード命令やストア命令を用いたソフトウェアによるコンテキストの保存と読み込みを行っているため、１度に１つのデータしか扱うことができない。そのため保存すべき状態が増えるとコンテキストスイッチにかかる時間も増加する。
【０００６】
本発明は、以上の点に鑑み、特に、リアルタイムＯＳなどコンテキストの切り替えが頻繁に発生するアプリケーションにおいて、コンテキストの切り替え（コンテキストスイッチ）によるオーバーヘッドを大幅に削減することを目的とする。本発明は、例えば、コンテキストを切り替える度に、コンテキストの保存と読み込みのためのメモリアクセスが、１サイクルから数サイクルで可能とするコンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体を提供することを目的とする。
【０００７】
また、本発明は、特に実時間処理システムのようにコンテキストスイッチが頻繁に起こるシステムにおいて、コンテキストスイッチにかかる時間を一定とし、実時間性の時間粒度を非常に小さくすることを目的とする。
【０００８】
【課題を解決するための手段】
本発明は、特に、
１．  コンテキストを保持するための専用記憶装置（コンテキストキャッシュ）を持ち、
２．  レジスタよりビット幅の広い専用バスを用いて専用記憶装置（コンテキストキャッシュ）と中央演算装置（ＣＰＵ）を接続する、
ことにより、コンテキスト切り替えにかかるオーバーヘッドを削減する。
【０００９】
本発明の第１の解決手段によると、
複数のコンテキストを切り替えるコンテキスト切り替え装置であって、
演算論理ユニット又はメモリアクセスユニットで実行すべきスレッドに関するコンテキストが記憶されたレジスタファイルと、
前記レジスタファイルに接続され、コンテキストをキャッシュするためのコンテキストキャッシュと、
前記レジスタファイルと前記コンテキストキャッシュを接続するコンテキストスイッチ専用バスと、
前記コンテキストキャッシュに記憶されているスレッドのコンテキストを識別するためのスレッド識別子（スレッドＩＤ）を記憶するスレッドＩＤテーブルを有し、演算論理ユニット及びメモリアクセスユニットと並列に接続され、前記コンテキストキャッシュと前記レジスタファイルとの間のコンテキストのデータ転送を制御するスレッド制御ユニットと
を備え、
前記スレッド制御ユニットは、
コンテキストの切り替えが発生した場合、入力された切り替え命令と新たに入れ替えるスレッド識別子（スレッドＩＤ）に基付き前記スレッドＩＤテーブルを検索し、
新たに入れ替えるコンテキストが記憶されている前記コンテキストキャッシュのアドレスと、実行中のコンテキストが記憶されている前記レジスタファイルのレジスタ識別子を求め、
求めたアドレスに基付き前記コンテキストキャッシュをアクセスし、且つ、求めたレジスタ識別子に基付き前記レジスタファイルをアクセスし、前記レジスタファイル及び／又は前記コンテキストキャッシュのコンテキストを前記コンテキストスイッチ専用バスを介して入れ替え、退避又は復帰を実行する
前記コンテキスト切り替え装置
が提供される。
【００１０】
本発明の第２の解決手段によると、
上述のようなコンテキスト切り替え装置と、
命令及びデータをそれぞれキャッシュする命令キャッシュ及びデータキャッシュと、
前記命令キャッシュから命令をフェッチ及びデコードする命令フェッチユニットと、
レジスタファイルに記憶された命令に従い各種演算を行い、演算結果を前記レジスタファイルに書き戻す演算論理ユニットと、
前記レジスタファイルからオペランドと命令が送られ、前記データキャッシュをアクセスし、ロード又はストアを実行するメモリアクセスユニットと、
前記レジスタファイル、前記演算論理ユニット、前記メモリアクセスユニット及び前記スレッド制御ユニットを並列に接続する演算バスと、
を備えた中央演算装置
が提供される。
【００１１】
本発明の第３の解決手段によると、
演算論理ユニット又はメモリアクセスユニットで実行すべきスレッドに関するコンテキストが記憶されたレジスタファイルと、
前記レジスタファイルに接続され、コンテキストをキャッシュするためのコンテキストキャッシュと、
前記レジスタファイルと前記コンテキストキャッシュを接続するコンテキストスイッチ専用バスと
を備えたコンテキスト切り替え装置を用い、複数のコンテキストを切り替えるコンテキスト切り替え方法であって、
コンテキストの切り替えが発生した場合、入力された切り替え命令と新たに入れ替えるスレッド識別子（スレッドＩＤ）に基付き、前記コンテキストキャッシュに記憶されているスレッドのコンテキストを識別するためのスレッド識別子（スレッドＩＤ）を記憶する前記スレッドＩＤテーブルを検索し、
新たに入れ替えるコンテキストが記憶されている前記コンテキストキャッシュのアドレスと、実行中のコンテキストが記憶されている前記レジスタファイルのレジスタ識別子を求め、
求めたアドレスに基付き前記コンテキストキャッシュをアクセスし、且つ、求めたレジスタ識別子に基付き前記レジスタファイルをアクセスし、前記レジスタファイル及び／又は前記コンテキストキャッシュのコンテキストを前記コンテキストスイッチ専用バスを介して入れ替え、退避又は復帰を実行する
前記コンテキスト切り替え方法
が提供される。
【００１２】
さらに、本発明の第４の解決手段によると、
演算論理ユニット又はメモリアクセスユニットで実行すべきスレッドに関するコンテキストが記憶されたレジスタファイルと、
前記レジスタファイルに接続され、コンテキストをキャッシュするためのコンテキストキャッシュと、
前記レジスタファイルと前記コンテキストキャッシュを接続するコンテキストスイッチ専用バスと
を備えたコンテキスト切り替え装置を用い、コンピュータが複数のコンテキストを切り替えるコンテキスト切り替えプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
コンテキストの切り替えが発生した場合、入力された切り替え命令と新たに入れ替えるスレッド識別子（スレッドＩＤ）に基付き、前記コンテキストキャッシュに格納されているスレッドのコンテキストを識別するためのスレッド識別子（スレッドＩＤ）を記憶する前記スレッドＩＤテーブルを検索するステップと、
新たに入れ替えるコンテキストが記憶されている前記コンテキストキャッシュのアドレスと、実行中のコンテキストが記憶されている前記レジスタファイルのレジスタ識別子を求めるステップと、
求めたアドレスに基付き前記コンテキストキャッシュをアクセスし、且つ、求めたレジスタ識別子に基付き前記レジスタファイルをアクセスし、前記レジスタファイル及び／又は前記コンテキストキャッシュのコンテキストを前記コンテキストスイッチ専用バスを介して入れ替え、退避又は復帰を実行するステップと
をコンピュータに実行させるためのコンテキスト切り替えプログラム、及び、そのプログラムを記録したコンピュータ読み取り可能な記録媒体
が提供される。
【００１３】
【発明の実施の形態】
１．関連技術
なお、本実施の形態は、一例として、並列分散リアルタイム制御用Ｒｅｓｐｏｎｓｉｖｅ  Ｍｕｌｔｉ−Ｔｈｒｅａｄｅｄ  （ＲＭＴ）  Ｐｒｏｃｅｓｓｏｒの中央演算装置上でコンテキストキャッシュとして利用されている。そこで、まず、本実施の形態が関連するＣＰＵを有するコンピュータについて説明する。
【００１４】
図１に、一般的なＣＰＵを含むコンピュータの構成図を示す。
このコンピュータは、ＣＰＵ１０、メモリ２０、Ｉ／Ｏ３０、バス４０を有する。ＣＰＵ１０は、バス４０を介して、メモリ２０、Ｉ／Ｏ３０等と接続されている。ＣＰＵ１０は、レジスタファイル１、命令フェッチユニット２、命令キャッシュ３、演算論理ユニット（ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ、ＡＬＵ）４、メモリアクセスユニット５、データキャッシュ６、バスインタフェースユニット７、演算バス１１を備える。
【００１５】
レジスタファイル１は、汎用レジスタ（ＧＰＲ）、浮動小数点レジスタ（ＦＰＲ）、プログラムカウンタ（ＰＣ）、ステータスレジスタ（ＳＲ）等の各種レジスタを含む。レジスタファイル１は、現在実行中のコンテキストを記憶する。命令キャッシュ３及びデータキャッシュ６は、例えば、ＳＲＡＭ、フリップフロップ（ＦＦ）等の素子が用いられ、アクセス、読み出し、書き込み等の処理速度が速いものの記憶容量が小さい。一方、ＣＰＵ１０外部のメモリ２０は、ＳＤＲＡＭ、ＤＲＡＭ等の素子が用いられ、アクセス、読み出し、書き込み等の処理速度がキャッシュより遅いものの記憶容量が大きい。
【００１６】
ＡＬＵ４は、局所性原理に従い、命令キャッシュ３、データキャッシュ６又はメモリ２０から必要なデータ及び命令を利用する。ＡＬＵ４は、命令キャッシュ３又はデータキャッシュ６に処理に必要な命令又はデータがあればそれを利用し、なければメモリ２０にアクセスして必要な命令又はデータを得る。また、バスインターフェースユニット７は、命令キャッシュ３、メモリアクセスユニット５、データキャッシュ６とＣＰＵ外部のメモリ２０、Ｉ／Ｏ３０等をバス４０を介して接続し、ＣＰＵ内部と外部の間でデータの入出力行うユニットである。演算バス１１は、レジスタファイル１、ＡＬＵ４、メモリアクセスユニット５を並列に接続する演算パイプライン等のバスである。
【００１７】
命令フェッチユニット２は、命令キャッシュ３へアドレス（Ａｄｄｒｅｓｓ）を出力し、命令キャッシュ３から命令（ｉｎｓｔｒｕｃｔｉｏｎ）をフェッチし、デコードする。デコードされた命令に従い、ＡＬＵ４がレジスタファイル１から必要なオペランドを読み出す。ＡＬＵ４は、それに従い各種演算を行い、演算結果をレジスタファイル１に書き戻す。ロード（Ｌｏａｄ）又はストア（Ｓｔｏｒｅ）等のメモリアクセス命令の場合、デコードされた命令に従い、メモリアクセスユニット５がオペランドを読み出す。
【００１８】
メモリアクセスユニット５は、データキャッシュ６にアクセスしＬｏａｄ又はＳｔｏｒｅを行う。Ｓｔｏｒｅ命令の場合、メモリアクセスユニット５は、アドレスとデータをデータキャッシュ６に送り、データをデータキャッシュ６に格納する。Ｌｏａｄ命令の場合、メモリアクセスユニット５は、アドレスをデータキャッシュ６に送りデータキャッシュ６からデータを読み出す。読み出したデータは、レジスタファイル１に書き戻される。このとき、データキャッシュ６に求めるデータがなければ、メモリ２０からそれを読み出す。
【００１９】
このような一般的な構成の場合、レジスタファイル１に記憶されたコンテキストの退避はＳｔｏｒｅ命令を用いて行う。
【００２０】
図２に、一般的なＣＰＵでのコンテキストスイッチのフローチャートを示す。ＯＳ等のソフトウェアはＳｔｏｒｅ命令を発行し、コンテキストスイッチを開始する。Ｓｔｏｒｅ命令が発行されると、レジスタファイル１からデータが読み出され、メモリアクセスユニット５に送られる。そして、メモリアクセスユニット５は、データを格納するアドレスを計算し、データキャッシュ６にアクセスする（Ｓ１０１）。もし、データキャッシュミスが発生した場合（Ｓ１０３）、データキャッシュ６はメモリ２０からキャッシュラインを読み込む（Ｓ１０５）。一方、データキャッシュミスが発生しなかった場合（Ｓ１０３）は、ステップＳ１０７へ進む。データキャッシュ６は、メモリアクセスユニット５から送られてきたデータを適当なアドレスで自身のキャッシュ内に格納する（Ｓ１０７）。ＯＳ等のソフトウェアは、このＳｔｏｒｅ命令の処理を退避すべきレジスタの数だけ繰り返す。すなわち、全てのレジスタの内容の保存が完了していない場合は、ステップＳ１０１へ戻り処理を続け、全てのレジスタの内容の保存が完了した場合は、ステップＳ１１１へ進む（Ｓ１０９）。
【００２１】
つぎに、ＯＳ等のソフトウェアは、新しく実行されるコンテキストの復帰を、Ｌｏａｄ命令を用いて行う。実行中のコンテキストの保存が完了すると、ＯＳ等のソフトウェアは、Ｌｏａｄ命令を発行する。Ｌｏａｄ命令が発行されると、メモリアクセスユニット５は、データを読み込むためのアドレスを計算し、データキャッシュ６をアクセスする（Ｓ１１１）。もし、データキャッシュミスが発生した場合（Ｓ１１３）、データキャッシュ６はメモリ２０からキャッシュラインを読み込む（Ｓ１１５）。データキャッシュミスが発生しなかった場合（Ｓ１１３）は、ステップＳ１１７へ進む。メモリアクセスユニット５は、データキャッシュ６からデータが返ってくる（Ｓ１１７）と、それをレジスタファイル１に書き戻す。このＬｏａｄ命令を復帰すべきレジスタの数だけ繰り返す。すなわち、全てのレジスタ内容の読み込みが完了した場合は、ステップＳ１１１へ戻り処理を続け、全てのレジスタ内容の読み込みが完了した場合は、コンテキストスイッチを終了する（Ｓ１１９）。
【００２２】
２．コンテキスト切り替え装置を備えたＣＰＵ
図３に、コンテキストキャッシュを用いたＣＰＵを含むコンピュータの構成図を示す。
このＣＰＵ１００は、レジスタファイル１、命令フェッチユニット２、命令キャッシュ３、ＡＬＵ４、メモリアクセスユニット５、データキャッシュ６、バスインターフェースユニット７、コンテキストキャッシュ８、スレッド制御ユニット９、演算バス１１、コンテキスト専用バス１２を備える。演算バス１１は、レジスタファイル１、ＡＬＵ４、メモリアクセスユニット５にさらにスレッド制御ユニット９を並列に接続する演算パイプライン等のバスである。図１のＣＰＵ１０の各部に対応して、同符号で示される各部の構成及び動作は、上述した通りである。
【００２３】
コンテキストキャッシュ８は、ＳＲＡＭ、ＦＦ等の素子が用いられ、アクセス、読み出し、書き込み等の処理速度が速い。コンテキストキャッシュ８は、レジスタファイル１にコンテキストスイッチ専用バス１２により接続され、コンテキストをキャッシュするために用いられる。スレッド制御ユニット８は、コンテキストキャッシュ８を制御するためのユニットであり、ＡＬＵ４やメモリアクセスユニット５と並列に接続されている。なお、スレッドとは、一般に、ＯＳがあるプロセス又はタスクを並列処理するため、プロセス又はタスクを分割した処理単位又は最小単位のことをいう。この際、プロセス又はタスクが分割されることなく、１プロセス又は１タスクが１スレッドとなる場合もある。コンテキストスイッチが起こった場合には、現在実行されているスレッドのコンテキスト（汎用レジスタ、浮動小数点レジスタ、プログラムカウンタ、ステータスレジスタ等）を退避し、新しく実行されるスレッドのコンテキストを復帰する必要がある。本実施の形態によるコンテキストキャッシュ８を用いたコンテキストスイッチの場合、コンテキストの退避と復帰は、レジスタファイル１とコンテキストキャッシュ８のデータをコンテキストスイッチ専用バス１２を経て入れ替えるスワップ（Ｓｗａｐ）命令を用いる。
【００２４】
図４に、コンテキストキャッシュを用いたＣＰＵでのコンテキストスイッチのフローチャートを示す。
ＯＳ等のソフトウェアは、Ｓｗａｐ命令を発行し、コンテキストスイッチが開始する。Ｓｗａｐ命令は、入れ替えるスレッドＩＤと共にスレッド制御ユニット９に発行される（Ｓ２０１）。スレッドＩＤは、コンテキストキャッシュ８に格納されているスレッドを一意に識別するために用いる。スレッド制御ユニット９は、コンテキストスイッチ専用バス１２を経て、レジスタファイル１からコンテキストキャッシュ８へデータを退避すると同時並列に、コンテキストキャッシュ８からレジスタファイル１へ新しいスレッドのデータを送る。スレッド制御ユニット９は、送られてきたスレッドＩＤに基づいて自動的に必要な数だけレジスタファイル１内のデータとコンテキストキャッシュ８内のデータを入れ替える（Ｓ２０３）。このように、ＯＳ等のソフトウェアはＳｗａｐ命令を発行するだけで、専用ハードウェアがコンテキストスイッチを開始し終了する。
【００２５】
３．コンテキスト切り替え装置の詳細
図５に、コンテキスト切り替え装置の詳細構成図を示す。
レジスタファイル１は、汎用レジスタ１１１、浮動小数点レジスタ１１２、プログラムカウンタ１１３、ステータスレジスタ１１４を有する。コンテキストキャッシュ８は、コンテキストを格納するコンテキスト記憶領域８−１、８−２、・・・、８−ｎを所定のコンテキスト数有する。スレッド制御ユニット９は、オンチップのコンテキストキャッシュ８とレジスタファイル１を制御するためのコントローラである。スレッド制御ユニット９内部にはオンチップメモリに格納されているコンテキストを識別するためのスレッドＩＤを所定数保持するためのスレッドＩＤテーブル９１を設ける。また、マルチスレッドプロセッサの場合は、レジスタファイル１が並列に複数存在することになる。
【００２６】
図６に、Ｓｗａｐ命令のフローチャートを示す。
コンテキストの切り替えは、例えばコンテキストスイッチハンドラー内でコンテキストスイッチ専用命令を用いることができる。ＯＳ等のソフトウェアが、Ｓｗａｐ命令を発行すると、専用ハードウェアであるスレッド制御ユニット９が、そのＳｗａｐ命令とスレッドＩＤを受けとる（Ｓ３００）。スレッド制御ユニット９は、スレッドＩＤに基づいてスレッドＩＤテーブル９１を検索し、コンテキストキャッシュ８をアクセスするため、入れ替えるべきスレッドのデータ（コンテキスト）が格納されているアドレスを計算し、また、レジスタファイル１をアクセスするため、レジスタＩＤを計算する（Ｓ３０１）。つぎに、全てのコンテキストのデータ（汎用レジスタ、ステータスレジスタなど）に対して、ステップＳ３０２からＳ３０４により繰返しループ処理が行われる。スレッド制御ユニット９は、計算したアドレスをもとにコンテキストキャッシュ８をアクセスし、新しく入れ替えるスレッドのデータ（コンテキスト）を読み出し、レジスタファイル１にそれを書き込む（Ｓ３０３）。それと同時又は並列に、スレッド制御ユニット９は、レジスタファイル１にアクセスし、今実行されているスレッドのデータ（コンテキスト）を読み出し、コンテキストキャッシュ８にそれを書き込む（Ｓ３０３）。このようにして、レジスタファイル１とコンテキストキャッシュ８は、それぞれのデータを入れ替える。全てのデータの入れ替えが終了していない場合（Ｓ３０４）、スレッド制御ユニット９は、コンテキストキャッシュ８をアクセスするアドレスとレジスタファイル１をアクセスするレジスタＩＤを１つずつ増やし、ステップＳ３０３に戻って処理を続ける（ステップＳ３０２及びＳ３０４による繰返しループ処理）。全てのデータの入れ替えが終了した場合（Ｓ３０４）、Ｓｗａｐ命令を終了する。
【００２７】
このように、スレッド制御ユニット９は、コンテキストキャッシュ８とレジスタファイル１のそれぞれのアドレスを連続的にインクリメントすることにより、必要な数だけデータを入れ替える。この際、従来のようにＬｏａｄ及びＳｔｏｒｅ命令を用いた場合には数百〜千数百クロックサイクルかかっていたコンテキストスイッチを、本実施の形態では、レジスタファイル１とコンテキストキャッシュ８のコンテキストスイッチ専用バス１２によるデータ転送幅をレジスタのビット幅に比べて非常に広くすることによって、１クロックサイクル〜数クロックサイクル程度で実現する。具体的には、複数個のレジスタをまとめて１つの巨大なレジスタとして、その巨大なレジスタ毎に前記レジスタＩＤを割り当てるようにする。この際、全てのレジスタをまとめて１つの巨大なレジスタとした場合、１クロックサイクルでコンテキストスイッチを実現できる。
【００２８】
スレッド制御ユニット９は、コンテキストを入れ替えるＳｗａｐ命令の他に、コンテキストを退避するバックアップ（Ｂａｃｋｕｐ）命令、コンテキストを復帰するリストア（Ｒｅｓｔｏｒｅ）命令を処理する。Ｂａｃｋｕｐ命令の場合は、コンテキストキャッシュ８からレジスタファイル１へのコンテキストのデータ転送は行われず、レジスタファイル１からコンテキストキャッシュ８へのコンテキストのデータ転送のみが実行される。一方、Ｒｅｓｔｏｒｅ命令の場合は逆にレジスタファイル１からコンテキストキャッシュ８へのコンテキストのデータ転送は行われず、コンテキストキャッシュ８からレジスタファイル１へのコンテキストのデータ転送のみが実行される。
【００２９】
つぎに、図７に、コンテキスト切り替え装置の実装に関する説明図を示す。
コンテキストキャッシュ８は、コンテキストをバックアップするオンチップのメモリであり、この例では２ポートを有し、ＣＰＵにオンチップで実装されている。この例では、コンテキストキャッシュ８は、書き込みポート８２、読み出しポート８３を備える。コンテキストキャッシュ８は、所定の複数コンテキスト分（例えば、３２個等）の記憶領域を含むことができる。
【００３０】
レジスタファイル１は、通常のリードポートとライトポートの他にコンテキスト切り替え用の専用ポート、即ちコンテキストスイッチ用読み出しポート１７とコンテキストスイッチ用書き込みポート１８を付加し、これらのポートにコンテキストを保持するための記憶装置を接続する。この例では、レジスタファイル１は、レジスタ読み出しポート１５、レジスタ書き込みポート１６、コンテキストスイッチ用読み出しポート１７、コンテキストスイッチ用書き込みポート１８を備える。レジスタ読み出しポート１５は、レジスタファイル１からＣＰＵ内の装置へのレジスタの読み出しを、レジスタ書き込みポート１６は、ＣＰＵ内の装置からレジスタファイル１へのレジスタの書き込みを、コンテキストスイッチ用読み出しポート１７は、レジスタファイル１からコンテキストファイル８へのレジスタの読み出しを、コンテキストスイッチ用書き込みポート１８は、コンテキストファイル８からレジスタファイル１へのレジスタの書き込みを、それぞれ行うポートである。
【００３１】
コンテキストの切り替えが発生した場合、ＯＳ等のソフトウェアはＳｗａｐ命令を発行し、スレッド制御ユニットが、これらのポート１７、１８を通して中央演算装置のコンテキストキャッシュ８内のデータをレジスタファイル１に保持し、新しいコンテキストをこのレジスタファイル１から取り出す。また、レジスタファイル１とコンテキストキャッシュ８を接続するコンテキスト専用バス１２−１、１２−２の幅をレジスタファイル１のビット幅より広くすることにより、１度に入れ替えるデータの量を増やす。この例では、レジスタファイル１とオンチップメモリのコンテキストキャッシュ８とは、２５６ビットのコンテキストスイッチ専用バス１２−１、１２−２で繋がれる。また、コンテキストキャッシュ８として２ポートのオンチップメモリを用いることにより読み込みと書き出しを同時に行うことができる。そのため３２ビット、３２本の汎用レジスタは４クロックサイクルでコンテキストを入れ替えることができる。
なお、ビット数、記憶容量、ポート数等の各種パラメータは一例に過ぎず、適宜設定することができる。
【００３２】
４．その他
本発明のコンテキスト切り替え方法又はコンテキスト切り替え装置・システムは、その各手順をコンピュータに実行させるためのコンテキスト切り替えプログラム、コンテキスト切り替えプログラムを記録したコンピュータ読み取り可能な記録媒体、コンテキスト切り替えプログラムを含みコンピュータの内部メモリにロード可能なプログラム製品、そのプログラムを含むサーバ等のコンピュータ、等により提供されることができる。
【００３３】
【発明の効果】
本発明によると、以上のように、特に、リアルタイムＯＳなどコンテキストの切り替えが頻繁に発生するアプリケーションにおいて、コンテキストの切り替え（コンテキストスイッチ）によるオーバーヘッドを大幅に削減することができる。また、本発明によると、例えば、コンテキストを切り替える度に、コンテキストの保存と読み込みのためのメモリアクセスが、１サイクルから数サイクルで可能とするコンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラムを記録したコンピュータ読み取り可能な記録媒体を提供することができる。
【００３４】
また、本発明によると、特に、実時間処理システムのようにコンテキストスイッチが頻繁に起こるシステムにおいて、コンテキストスイッチにかかる時間を一定とし、実時間性の時間粒度を非常に小さくすることができる。
【図面の簡単な説明】
【図１】一般的なＣＰＵを含むコンピュータの構成図。
【図２】一般的なＣＰＵでのコンテキストスイッチのフローチャート。
【図３】コンテキストキャッシュを用いたＣＰＵを含むコンピュータの構成図。
【図４】コンテキストキャッシュを用いたＣＰＵでのコンテキストスイッチのフローチャート。
【図５】コンテキスト切り替え装置の詳細構成図。
【図６】Ｓｗａｐ命令のフローチャート。
【図７】コンテキスト切り替え装置の実装に関する説明図。
【図８】コンテキスト切り替え動作の説明図。
【符号の説明】
１  レジスタファイル
２  命令フェッチユニット
３  命令キャッシュ
４  ＡＬＵ
５  メモリアクセスユニット
６  データキャッシュ
７  バスインタフェースユニット
８  コンテキストキャッシュ
９  スレッド制御ユニット
１０  ＣＰＵ
１１  演算バス
１２  コンテキスト専用バス
１２−１  コンテキスト専用バス
１２−２  コンテキスト専用バス
１５  レジスタ読み出しポート
１６  レジスタ書き込みポート
１７  コンテキストスイッチ用読み出しポート
１８  コンテキストスイッチ用書き込みポート
２０  メモリ
３０  Ｉ／Ｏ
４０  バス
８−１〜ｎ  コンテキストテーブル
９１  スレッドＩＤテーブル
１００  ＣＰＵ
１１１  汎用レジスタ
１１２  浮動小数点レジスタ
１１３  プログラムカウンタ
１１４  ステータスレジスタ
【図１】
2004220070.tif 000003
【図２】
2004220070.tif 000004
【図３】
2004220070.tif 000005
【図４】
2004220070.tif 000006
【図５】
2004220070.tif 000007
【図６】
2004220070.tif 000008
【図７】
2004220070.tif 000009
【図８】
2004220070.tif 000010
【手続補正書】
【提出日】平成15年6月10日(2003.6.10)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のコンテキストを切り替えるコンテキスト切り替え装置であって、
読み出しポートと書き込みポート及びコンテキストスイッチ用読み出しポートと書き込みポートを有し、演算論理ユニット又はメモリアクセスユニットで実行すべきスレッドに関するコンテキストが記憶されたレジスタファイルと、
読み出しポートと書き込みポートを有し、前記レジスタファイルに直接接続され、中央演算装置内にオンチップで実装されて中央演算装置のクロックで動作してコンテキストをキャッシュするためのコンテキストキャッシュと、
前記コンテキストキャッシュの読み出しポート及び書き込みポートを、前記レジスタファイルのコンテキストスイッチ用書き込みポート及び読み出しポートとそれぞれ接続する復帰用バス及び退避用バスを有し、前記レジスタファイルと前記コンテキストキャッシュを接続するコンテキストスイッチ専用バスと、
前記コンテキストキャッシュに記憶されているスレッドのコンテキストを識別するためのスレッド識別子（スレッドＩＤ）を記憶するスレッドＩＤテーブルを有し、演算論理ユニット及びメモリアクセスユニットと並列に接続され、前記コンテキストキャッシュと前記レジスタファイルとの間のデータ伝送を制御するスレッド制御ユニットと
を備え、
前記スレッド制御ユニットは、コンテキストの退避と復帰の両方を並列に実行するコンテキスト切り替えが発生した場合、退避と復帰の両方を並列に実行するコンテキスト切り替え命令と新たに入れ替えるスレッドＩＤを受け、
前記スレッド制御ユニットは、スレッドＩＤに基づき前記スレッドＩＤテーブルを検索して、新たに入れ替えるコンテキストが記憶されている復帰すべき前記コンテキストキャッシュのアドレスと、実行中のコンテキストが記憶されている退避すべき前記レジスタファイルのレジスタ識別子を求め、
前記スレッド制御ユニットは、求められたアドレスを前記コンテキストキャッシュに送り、同時にレジスタ識別子を前記レジスタファイルに送り、
前記レジスタファイルは、前記スレッド制御ユニットから与えられたレジスタ識別子をもとに、退避すべきコンテキストのデータを前記コンテキストスイッチ用読み出しポートから出力すると共に、これと並列して、前記コンテキストキャッシュの読み出しポートから復帰用バスを介してコンテキストスイッチ用書き込みポートに送られてくる復帰すべきコンテキストのデータを該レジスタ識別子に対応するレジスタに書き込み、
一方、前記コンテキストキャッシュは、前記スレッド制御ユニットから与えられたアドレスをもとに、復帰すべきコンテキストのデータを読み出しポートから出力すると共に、これと並列して、前記レジスタファイルのコンテキストスイッチ用読み出しポートから退避用バスを介して書き込みポートに送られてくる退避すべきコンテキストのデータを該アドレスに書き込み、
復帰すべきコンテキストの前記コンテキストキャッシュから前記レジスタファイルへの復帰動作と、退避すべきコンテキストの前記レジスタファイルから前記コンテキストキャッシュへの退避動作を並列に実行してコンテキストを入れ換える前記コンテキスト切り替え装置。
【請求項２】
前記コンテキストスイッチ専用バスは、バス幅を前記レジスタファイルのビット幅より広くした請求項１に記載のコンテキスト切り替え装置。
【請求項３】
前記スレッド制御ユニットは、コンテキストキャッシュにキャッシュされたコンテキストを識別するために必要な数のスレッドＩＤテーブルを含むことを特徴とする請求項１に記載のコンテキスト切り替え装置。
【請求項４】
前記スレッド制御ユニットは、コンテキストを入れ替えるスワップ命令を実行する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むスワップ命令が発行されると、前記レジスタファイルから前記コンテキストキャッシュへ実行中のスレッドのコンテキストを退避すると同時に、前記コンテキストキャッシュから前記レジスタファイルへ新しく入れ替えるスレッドのコンテキストを送り、自動的に必要な数だけ前記レジスタファイル内のデータと前記コンテキストキャッシュ内のデータを入れ替えることを特徴とする請求項１乃至３のいずれかに記載のコンテキスト切り替え装置。
【請求項５】
前記スレッド制御ユニットは、コンテキストを退避するバックアップ命令を実行する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むバックアップ命令が発行されると、前記レジスタファイルから前記コンテキストキャッシュへのコンテキストのデータ転送を行い、前記コンテキストキャッシュから前記レジスタファイルへのコンテキストのデータ転送は行わないことを特徴とする請求項１乃至３のいずれかに記載のコンテキスト切り替え装置。
【請求項６】
前記スレッド制御ユニットは、コンテキストを復帰するリストア命令を処理する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むリストア命令が発行されると、前記コンテキストキャッシュから前記レジスタファイルへのコンテキストのデータ転送を行い、前記レジスタファイルから前記コンテキストキャッシュへのコンテキストのデータ転送は行わないことを特徴とする請求項１乃至３のいずれかに記載のコンテキスト切り替え装置。
【請求項７】
前記請求項１乃至６のいずれかに記載のコンテキスト切り替え装置と、
命令及びデータをそれぞれキャッシュする命令キャッシュ及びデータキャッシュと、
前記命令キャッシュから命令をフェッチ及びデコードする命令フェッチユニットと、
レジスタファイルに記憶された命令に従い各種演算を行い、演算結果を前記レジスタファイルに書き戻す演算論理ユニットと、
前記レジスタファイルからオペランドと命令が送られ、前記データキャッシュをアクセスし、ロード又はストアを実行するメモリアクセスユニットと、
前記レジスタファイル、前記演算論理ユニット、前記メモリアクセスユニット及び前記スレッド制御ユニットを並列に接続する演算バスと、
を備えた中央演算装置。
【請求項８】
前記メモリアクセスユニットは、ストア命令の場合はアドレスとデータを前記データキャッシュに送り、データを前記データキャッシュに格納し、ロード命令の場合はアドレスを前記データキャッシュに送り、データを前記データキャッシュから読み出し、読み出したデータを前記レジスタファイルに書き戻す請求項７に記載の中央演算装置。
【請求項９】
読み出しポートと書き込みポート及びコンテキストスイッチ用読み出しポートと書き込みポートを有し、演算論理ユニット又はメモリアクセスユニットで実行すべきスレッドに関するコンテキストが記憶されたレジスタファイルと、
読み出しポートと書き込みポートを有し、前記レジスタファイルに直接接続され、中央演算装置内にオンチップで実装されて中央演算装置のクロックで動作してコンテキストをキャッシュするためのコンテキストキャッシュと、
前記コンテキストキャッシュの読み出しポート及び書き込みポートを、前記レジスタファイルのコンテキストスイッチ用書き込みポート及び読み出しポートとそれぞれ接続する復帰用バス及び退避用バスを有し、前記レジスタファイルと前記コンテキストキャッシュを接続するコンテキストスイッチ専用バスと、
前記コンテキストキャッシュに記憶されているスレッドのコンテキストを識別するためのスレッド識別子（スレッドＩＤ）を記憶するスレッドＩＤテーブルを有し、演算論理ユニット及びメモリアクセスユニットと並列に接続され、前記コンテキストキャッシュと前記レジスタファイルとの間のデータ伝送を制御するスレッド制御ユニットと
を備えたコンテキスト切り替え装置を用い、複数のコンテキストを切り替えるコンテキスト切り替え方法であって、
前記スレッド制御ユニットは、コンテキストの退避と復帰の両方を並列に実行するコンテキスト切り替えが発生した場合、退避と復帰の両方を並列に実行するコンテキスト切り替え命令と新たに入れ替えるスレッドＩＤを受け、
前記スレッド制御ユニットは、スレッドＩＤに基づき前記スレッドＩＤテーブルを検索して、新たに入れ替えるコンテキストが記憶されている復帰すべき前記コンテキストキャッシュのアドレスと、実行中のコンテキストが記憶されている退避すべき前記レジスタファイルのレジスタ識別子を求め、
前記スレッド制御ユニットは、求められたアドレスを前記コンテキストキャッシュに送り、同時にレジスタ識別子を前記レジスタファイルに送り、
前記レジスタファイルは、前記スレッド制御ユニットから与えられたレジスタ識別子をもとに、退避すべきコンテキストのデータを前記コンテキストスイッチ用読み出しポートから出力すると共に、これと並列して、前記コンテキストキャッシュの読み出しポートから復帰用バスを介してコンテキストスイッチ用書き込みポートに送られてくる復帰すべきコンテキストのデータを該レジスタ識別子に対応するレジスタに書き込み、
一方、前記コンテキストキャッシュは、前記スレッド制御ユニットから与えられたアドレスをもとに、復帰すべきコンテキストのデータを読み出しポートから出力すると共に、これと並列して、前記レジスタファイルのコンテキストスイッチ用読み出しポートから退避用バスを介して書き込みポートに送られてくる退避すべきコンテキストのデータを該アドレスに書き込み、
復帰すべきコンテキストの前記コンテキストキャッシュから前記レジスタファイルへの復帰動作と、退避すべきコンテキストの前記レジスタファイルから前記コンテキストキャッシュへの退避動作を並列に実行してコンテキストを入れ換える前記コンテキスト切り替え方法。
【請求項１０】
コンテキストを入れ替えるスワップ命令を実行する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むスワップ命令が発行されると、前記レジスタファイルから前記コンテキストキャッシュへ実行中のスレッドのコンテキストを退避すると同時に、前記コンテキストキャッシュから前記レジスタファイルへ新しく入れ替えるスレッドのコンテキストを送り、自動的に必要な数だけ前記レジスタファイル内のデータと前記コンテキストキャッシュ内のデータを入れ替えることを特徴とする請求項９に記載のコンテキスト切り替え方法。
【請求項１１】
コンテキストを退避するバックアップ命令を実行する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むバックアップ命令が発行されると、前記レジスタファイルから前記コンテキストキャッシュへのコンテキストのデータ転送を行い、前記コンテキストキャッシュから前記レジスタファイルへのコンテキストのデータ転送は行わないことを特徴とする請求項９に記載のコンテキスト切り替え方法。
【請求項１２】
コンテキストを復帰するリストア命令を処理する場合、オペレーティングシステム等のソフトウェアからスレッド識別子（スレッドＩＤ）をオペランドとして含むリストア命令が発行されると、前記コンテキストキャッシュから前記レジスタファイルへのコンテキストのデータ転送を行い、前記レジスタファイルから前記コンテキストキャッシュへのコンテキストのデータ転送は行わないことを特徴とする請求項９に記載のコンテキスト切り替え方法。
【請求項１３】
読み出しポートと書き込みポート及びコンテキストスイッチ用読み出しポートと書き込みポートを有し、演算論理ユニット又はメモリアクセスユニットで実行すべきスレッドに関するコンテキストが記憶されたレジスタファイルと、
読み出しポートと書き込みポートを有し、前記レジスタファイルに直接接続され、中央演算装置内にオンチップで実装されて中央演算装置のクロックで動作してコンテキストをキャッシュするためのコンテキストキャッシュと、
前記コンテキストキャッシュの読み出しポート及び書き込みポートを、前記レジスタファイルのコンテキストスイッチ用書き込みポート及び読み出しポートとそれぞれ接続する復帰用バス及び退避用バスを有し、前記レジスタファイルと前記コンテキストキャッシュを接続するコンテキストスイッチ専用バスと、
前記コンテキストキャッシュに記憶されているスレッドのコンテキストを識別するためのスレッド識別子（スレッドＩＤ）を記憶するスレッドＩＤテーブルを有し、演算論理ユニット及びメモリアクセスユニットと並列に接続され、前記コンテキストキャッシュと前記レジスタファイルとの間のデータ伝送を制御するスレッド制御ユニットと
を備えたコンテキスト切り替え装置を用い、コンピュータが複数のコンテキストを切り替えるコンテキスト切り替えプログラムであって、
前記スレッド制御ユニットは、コンテキストの退避と復帰の両方を並列に実行するコンテキスト切り替えが発生した場合、退避と復帰の両方を並列に実行するコンテキスト切り替え命令と新たに入れ替えるスレッドＩＤを受けるステップと、
前記スレッド制御ユニットは、スレッドＩＤに基づき前記スレッドＩＤテーブルを検索して、新たに入れ替えるコンテキストが記憶されている復帰すべき前記コンテキストキャッシュのアドレスと、実行中のコンテキストが記憶されている退避すべき前記レジスタファイルのレジスタ識別子を求めるステップと、
前記スレッド制御ユニットは、求められたアドレスを前記コンテキストキャッシュに送り、同時にレジスタ識別子を前記レジスタファイルに送るステップと、前記レジスタファイルは、前記スレッド制御ユニットから与えられたレジスタ識別子をもとに、退避すべきコンテキストのデータを前記コンテキストスイッチ用読み出しポートから出力すると共に、これと並列して、前記コンテキストキャッシュの読み出しポートから復帰用バスを介してコンテキストスイッチ用書き込みポートに送られてくる復帰すべきコンテキストのデータを該レジスタ識別子に対応するレジスタに書き込むステップと、
一方、前記コンテキストキャッシュは、前記スレッド制御ユニットから与えられたアドレスをもとに、復帰すべきコンテキストのデータを読み出しポートから出力すると共に、これと並列して、前記レジスタファイルのコンテキストスイッチ用読み出しポートから退避用バスを介して書き込みポートに送られてくる退避すべきコンテキストのデータを該アドレスに書き込むステップと、
をコンピュータに実行させて、復帰すべきコンテキストの前記コンテキストキャッシュから前記レジスタファイルへの復帰動作と、退避すべきコンテキストの前記レジスタファイルから前記コンテキストキャッシュへの退避動作を並列に実行してコンテキストを入れ換えるためのコンテキスト切り替えプログラム。
【請求項１４】
読み出しポートと書き込みポート及びコンテキストスイッチ用読み出しポートと書き込みポートを有し、演算論理ユニット又はメモリアクセスユニットで実行すべきスレッドに関するコンテキストが記憶されたレジスタファイルと、
読み出しポートと書き込みポートを有し、前記レジスタファイルに直接接続され、中央演算装置内にオンチップで実装されて中央演算装置のクロックで動作してコンテキストをキャッシュするためのコンテキストキャッシュと、
前記コンテキストキャッシュの読み出しポート及び書き込みポートを、前記レジスタファイルのコンテキストスイッチ用書き込みポート及び読み出しポートとそれぞれ接続する復帰用バス及び退避用バスを有し、前記レジスタファイルと前記コンテキストキャッシュを接続するコンテキストスイッチ専用バスと、
前記コンテキストキャッシュに記憶されているスレッドのコンテキストを識別するためのスレッド識別子（スレッドＩＤ）を記憶するスレッドＩＤテーブルを有し、演算論理ユニット及びメモリアクセスユニットと並列に接続され、前記コンテキストキャッシュと前記レジスタファイルとの間のデータ伝送を制御するスレッド制御ユニットと
を備えたコンテキスト切り替え装置を用い、コンピュータが複数のコンテキストを切り替えるコンテキスト切り替えプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記スレッド制御ユニットは、コンテキストの退避と復帰の両方を並列に実行するコンテキスト切り替えが発生した場合、退避と復帰の両方を並列に実行するコンテキスト切り替え命令と新たに入れ替えるスレッドＩＤを受けるステップと、
前記スレッド制御ユニットは、スレッドＩＤに基づき前記スレッドＩＤテーブルを検索して、新たに入れ替えるコンテキストが記憶されている復帰すべき前記コンテキストキャッシュのアドレスと、実行中のコンテキストが記憶されている退避すべき前記レジスタファイルのレジスタ識別子を求めるステップと、
前記スレッド制御ユニットは、求められたアドレスを前記コンテキストキャッシュに送り、同時にレジスタ識別子を前記レジスタファイルに送るステップと、前記レジスタファイルは、前記スレッド制御ユニットから与えられたレジスタ識別子をもとに、退避すべきコンテキストのデータを前記コンテキストスイッチ用読み出しポートから出力すると共に、これと並列して、前記コンテキストキャッシュの読み出しポートから復帰用バスを介してコンテキストスイッチ用書き込みポートに送られてくる復帰すべきコンテキストのデータを該レジスタ識別子に対応するレジスタに書き込むステップと、
一方、前記コンテキストキャッシュは、前記スレッド制御ユニットから与えられたアドレスをもとに、復帰すべきコンテキストのデータを読み出しポートから出力すると共に、これと並列して、前記レジスタファイルのコンテキストスイッチ用読み出しポートから退避用バスを介して書き込みポートに送られてくる退避すべきコンテキストのデータを該アドレスに書き込むステップと、
をコンピュータに実行させて、復帰すべきコンテキストの前記コンテキストキャッシュから前記レジスタファイルへの復帰動作と、退避すべきコンテキストの前記レジスタファイルから前記コンテキストキャッシュへの退避動作を並列に実行してコンテキストを入れ換えるためのコンテキスト切り替えプログラムを記録したコンピュータ読み取り可能な記録媒体。