(57)【特許請求の範囲】
【請求項１】
異なった複数のオペレーティングシステムと、上記それぞれのオペレーティングシステム上で動作する複数のタスクと、上記タスクの実行順序を管理するスケジューリングプログラムとを記憶する記憶装置と、
演算を実行するプロセッサとを有する計算機システムであって、
上記プロセッサは、上記スケジューリングプログラムによって決定されたオペレーティングシステムを実行するために、入力または出力する情報の配列を切り替える切替え部を有し、
上記記憶装置は、割り込みの種類と上記割り込みの処理を実行するオペレーティングシステムとを対応付けしたテーブルを記憶し、
上記切替え部は、割り込みを検出する割り込み検出部と、上記割り込み検出部によって検出された結果と上記記憶装置に記憶されたテーブルに基づいて、入力または出力する情報の配列を切り替える計算機システム。
【請求項２】
異なったエンディアンで実行される複数のオペレーティングシステムと、異なったエンディアンで実行可能な命令とを格納した記憶装置と、
異なったエンディアンで上記記憶装置にアクセスし、上記記憶装置から読み出した命令を実行する複数のプロセッサと、
上記複数のプロセッサが共通にアクセスするレジスタとを有し、
それぞれの上記プロセッサは、上記レジスタに格納された値を読み出して実行すべきオペレーティングシステムを決定する計算機システム。
【請求項３】
第１のオペレーティングシステムでタスクを実行している時に割り込みを検出し、上記割り込みの処理すべきオペレーティングシステムを決定し、上記決定されたオペレーティングシステムのエンディアンと、現在実行しているオペレーティングシステムのエンディアンが相違する場合、上記オペレーティングシステムでタスクを実行しているプロセッサのエンディアンを切り替え、上記プロセッサのエンディアンの切り替えを行った後に、上記決定されたオペレーティングシステムを実行する計算機システムのエンディアン切替え方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
エンディアンの異なるオペレーティングシステムを同一の計算機上で同時に実行する。
【０００２】
【従来の技術】
計算機によってメモリ内にある情報の配列方法が異なっていることがある。この配列方法をエンディアンと呼ぶ。現在、エンディアンの種類には２つある。１つはビッグエンディアンであり、このエンディアンでは、１６進数で01234567の３２ビットデータがあるとき、メモリには上位のバイトから順に小さいアドレスに記憶される。すなわち、０１が４ｎ番地、２３が４ｎ＋１番地、４５が４ｎ＋２番地、６７が４ｎ＋３番地のようにである。一方、リトルエンディアンでは、これとは逆に、下位のバイトから小さいアドレスに記憶される。前の例では、
６７が４ｎ番地、４５が４ｎ＋１番地、２３が４ｎ＋２番地、０１が４ｎ＋３番地のようにである。
【０００３】
特開平8−278918 号公報，特開平8−314733 号公報，特開平8−234781 号公報に、エンディアンに関する技術が開示されている。
【０００４】
特開平8−278918 号公報，特開平8−314733 号公報では、タスク毎にビッグエンディアンで実行されるものとリトルエンディアンで実行するものに分けており、タスクを切り替える時にエンディアンを切り替える技術が開示されている。
【０００５】
特開平8−234781 号公報には、単一の計算機上でビッグエンディアンのオペレーティングシステム（以下ＯＳ）とリトルエンディアンのＯＳの両方のＯＳを実行する技術について開示されている。
【０００６】
【発明が解決しようとする課題】
事務処理用ＯＳは、人間とのインタフェースが非常に優れている。そのため、工場の機械を制御するコンピュータにも使用したい、という要求が高くなっている。
【０００７】
しかし、事務処理用ＯＳは、人間を主な相手としているので、高速な応答性の必要がない。リアルタイム用のＯＳのように割り込み抑止区間を細かく区切る方式は、ＯＳの設計が難しいだけでなく、処理のスループットが低下する。そこで、事務処理用ＯＳには、長い時間、割り込み抑止のまま処理を実行する部分が存在することが多い。このままでは、リアルタイム制御には使用できない。
【０００８】
そこで、事務処理用ＯＳとリアルタイム用ＯＳを同一の計算機上で動作させ、優れたインタフェースとリアルタイム応答性を両立させる技術が開発されている。
【０００９】
しかし、現在、主流となっているパーソナルコンピュータ用事務処理ＯＳはリトルエンディアンで動作し、一方、リアルタイム処理用のオペレーティングシステムはビッグエンディアンで記述されているものが多い。現在、上記の２つの
ＯＳを同一の計算機上で動作させる技術では、エンディアンの異なるＯＳを同一計算機上で動作させることはできていない。
【００１０】
特開平8−234781 号公報には、単一の計算機上でビッグエンディアンＯＳとリトルエンディアンＯＳの両方のＯＳを実行する技術について開示されているが、同時に実行するものではなく、立ち上げ時にどちらかのエンディアンが選択されるものである。
【００１１】
特開平8−278918 号公報は、両エンディアンのタスクを実行できるが、オペレーティングシステムは実行できない。ここで、タスクとオペレーティングシステムでは、プログラムとして大きく異なることに注意しなければならない。大きな違いの１つは、タスクのプログラムには外部機器からの割り込み処理が含まれていないことである。ＯＳの重要な仕事の１つが割り込み処理である。特開平8− 278918号に記載の技術では、オペレーティングシステムが１つであることから、割り込み処理プログラムは、このオペレーティングシステムのエンディアンで実行されることとなる。
【００１２】
もう１つの違いは、タスクにはスケジューラが含まれていないことである。スケジューラとはタスクの実行順序を決定する手段であり、タスク自体には含まれていない。２つのＯＳを同一計算機上で実行するには、この２つのスケジューラを協調させることが必要となるが、特開平8−278918 号公報の技術ではこのことが考慮されていない。
【００１３】
【課題を解決するための手段】
本発明では異なったエンディアンで実行する複数のオペレーティングシステムと、それぞれのオペレーティングシステム上で動作する複数のタスクと、上記タスクの実行順序を管理するスケジューリングプログラムとを記憶する記憶装置と、演算を実行するプロセッサとを有する計算機システムであって、プロセッサは、スケジューリングプログラムによって決定されたオペレーティングシステムを実行するために、エンディアンを切り替える切替え部を有するよう構成して上記目的を達成できるようにしている。
【００１４】
つまり、メモリに上位バイトから順に小さいアドレスに記憶するビッグエンディアンで実行されるオペレーティングシステムとメモリに下位バイトから順に小さいアドレスに記憶するリトルエンディアンで実行されるオペレーティングシステムとを同一のプロセッサで実行できるようにするために、スケジューリングプログラムで決定されたオペレーティングシステムがビックエンディアンの時は、メモリに上位バイトから順に小さいアドレスで書き込みまたは読み出しができるようにし、決定されたオペレーティングシステムがリトルエンディアンの時は、下位バイトから順に小さいアドレスで書き込みまたは読み出しができるようにプロセッサにバイト単位で入換えを行う変換回路を備えるようにしている。
【００１５】
また本発明では、異なったエンディアンで実行可能な命令を格納した記憶装置と、異なったエンディアンで記憶装置にアクセスし、記憶装置から読み出した命令を実行する複数のプロセッサとを有する計算機システムであって、記憶装置は、複数のプロセッサが共通にアクセスすると共にエンディアンによって次に実行すべき命令が異なるようにした命令を有するよう構成している。
【００１６】
つまり、ビッグエンディアンで実行するプロセッサとリトルエンディアンで実行するプロセッサとがあり、これらのプロセッサが実行するプログラムが共有メモリに格納されている場合には、それぞれのプログラムが異なる。
【００１７】
つまり共有メモリにはビッグエンディアンで実行されるプログラムとリトルエンディアンで実行されるプログラムとが格納される。この場合、ビッグエンディアンを実行するプロセッサはビッグエンディアンで実行されるプログラムを、リトルエンディアンを実行するプロセッサはリトルエンディアンで実行されるプログラムをアクセスしなければならない。そこで、このメモリにはビッグエンディアンを実行するプロセッサとリトルエンディアンを実行するプロセッサとが共通にアクセスできる命令を格納する。そしてこの命令は、ビッグエンディアンのプロセッサに対してビッグエンディアンのプログラムへジャンプさせ、リトルエンディアンのプロセッサに対してはリトルエンディアンのプログラムへジャンプさせるようにする。これにより、共有メモリを使っても異なるエンディアンのプロセッサを実行することができる。
【００１８】
また、上記のように共有メモリを使う場合、プロセッサからアクセスされるアドレスを変換するようにしてもよい。つまり、リトルエンディアンのプロセッサからはリトルエンディアンで実行されるプログラムに、ビッグエンディアンのプロセッサからはビッグエンディアンで実行されるプログラムにアクセスできるようにアドレス変換するようにする。
【００１９】
更に、別にレジスタを設けておき、このレジスタに格納された値にしたがって、共有メモリへのアクセスを決定するようにしてもよい。
【００２０】
【発明の実施の形態】
以下、本発明の説明を図１〜図４１を用いて説明する。
【００２１】
図１は本発明の一実施例を示す。ＣＰＵ２１はエンディアンを動的に切り替え可能となっている。この詳細については、図３で説明する。ＣＰＵ２１より上に記述されているものは、このＣＰＵ２１上で動作するソフトウェアである。３１がリトルエンディアンで記述されている事務処理用ＯＳ(ＴＳ−ＯＳ)のプログラムである。３２はビッグエンディアンで記述されているリアルタイムＯＳ（ＲＴ−ＯＳ）のプログラムである。それぞれのＯＳ上で５３１〜５３２と５３３〜
５３４のタスクが実行される。それぞれのタスクはそれぞれ実行されるＯＳと同じエンディアンで記述されている。３１や３２のＯＳはハードウェアの構造に依存しないプログラムとなっており、ハードウェアに依存した部分は、３３のハードウェア依存部に入っている。このハードウェア依存部は、ＴＳ−ＯＳ３１と
ＲＴ−ＯＳ３２を切り替えるＯＳ切替プログラム５２１を持っている。ＯＳ切替えプログラム５２１は、ＴＳ−ＯＳのスケジューラ６２とＲＴ−ＯＳのスケジューラ１７からの情報を元にＯＳを切り替える。また、２３３の割り込みラインから割り込みが入ると、ＯＳ切替えプログラム５２１内にある割り込みハンドラが全ての割り込みを最初に処理する。この割り込みハンドラで、割り込みがどちらのＯＳで処理すべき割り込みか判別し、ＯＳを切り替える。ＯＳ切替え時に、
５２１１のエンディアン切替えプログラムがＣＰＵ２１のエンディアンを切り替える。
【００２２】
図４５は、図１の計算機の状態遷移の概要を表している。５６１がＴＳ−ＯＳタスク実行中状態、５６２がＴＳ−ＯＳ割り込みハンドラ実行中状態である。これら２つの状態にあるとき、ＴＳ−ＯＳ実行中であるという。一方、５６３は
ＲＴ−ＯＳタスク実行中状態であり、５６４がＲＴ−ＯＳ割り込みハンドラ実行中状態である。これら２つの状態にあるとき、ＲＴ−ＯＳ実行中であるという。ＴＳ−ＯＳタスク実行中状態５６１のとき、ＴＳ−ＯＳで処理すべき割り込みが受け付けられると（５７１）、ＴＳ−ＯＳ割り込みハンドラ実行中状態５６２に遷移する。ハンドラの実行が終了すると（５７２）、ＴＳ−ＯＳタスク実行中状態５６１に戻る。ＴＳ−ＯＳタスク実行中にＲＴ−ＯＳのタスクが実行可能となると（５７３）、ＲＴ−ＯＳタスク実行中状態５６３に遷移する。ＲＴ−ＯＳのタスクで実行可能なものがある限り、ＲＴ−ＯＳのタスクが実行される。実行可能なＲＴ−ＯＳのタスクがなくなってはじめて（５７４）、ＴＳ−ＯＳタスク実行中状態(５６１)に遷移する。ＴＳ−ＯＳタスク実行中状態５６１，ＴＳ−ＯＳ割り込みハンドラ実行中状態５６２，ＲＴ−ＯＳタスク実行中状態５６３のときに、ＲＴ−ＯＳで処理すべき割り込みが受け付けられると（５７５，５７９，
５７８）、ＲＴ−ＯＳ割り込みハンドラ実行中状態５６４に遷移する。ハンドラの実行が終了し、実行可能なＲＴ−ＯＳのタスクがなければ、割り込みが受け付けられたときの状態に戻る（５７６，５８０）。実行可能なＲＴ−ＯＳタスクがあれば（５７７）、ＲＴ−ＯＳタスク実行中状態５６３に遷移するＲＴ−ＯＳのリアルタイム応答性を保証するため、ＲＴ−ＯＳ実行中には、ＴＳ−ＯＳの割り込みはマスクされている。このため、ＲＴ−ＯＳタスク実行中状態５６３やＲＴ−ＯＳ割り込みハンドラ実行中状態５６４からＴＳ−ＯＳの割り込みにより、
ＴＳ−ＯＳ割り込みハンドラ実行中の状態に遷移することはない。
【００２３】
図２は計算機の構成を示したものである。ＣＰＵ２１はメモリ２２に格納されているプログラムを実行する。メモリ２２には、プログラムが使用するデータも格納されている。ＣＰＵ２１のメモリ２２へのアクセスは、バス２３を通して行われる。ＣＰＵ２１は、バス２３を通して、ディスクコントローラ２４にアクセスして、ディスク２５のデータの読み書きを行うことができる。ディスクコントローラ２４は、ディスクの読み書きが終了したことを知らせるため、バス２３を通して、ＣＰＵ２１に割り込みを入れることができる。入出力部２６は、リアルタイム制御が必要な外部機器へ制御信号を出力したり、外部機器からの信号を入力するために使用される。２６１が入力線であり、２６２が出力線でる。入力線２６１がオンになったときに、入出力部２６はバス２３を通して、ＣＰＵ２１に割り込みを入れる。
【００２４】
図３は図２のＣＰＵ２１の構成を示したものである。アドレスバス２３１，データバス２３２，割り込みライン２３３は、図２のバス２３の一部である。このＣＰＵ２１は、３つのレベルの割り込みを持っている。割り込みライン２３３も、レベル毎に３本の線より構成されている。プログラムカウンタ２１７は、次に実行する命令が図２のメモリ２２中に格納されているアドレスを覚えている。このアドレスをアドレスバス２３１に出力することにより、データバス２３２を通してメモリから命令を受け取る。４１１はバイトスワップ回路である。バイトスワップ回路４１１に関しては、図４６で詳細に説明する。バイトスワップレジスタ４１２をセットすると、バイトスワップ回路４１１が反転状態となる。これにより、ＣＰＵ２１からのデータがデータバス２３２に反転して出力されるリトルエンディアンモードとなる。バイトスワップレジスタ４１２がリセットされると、バイトスワップ回路４１１が直結状態となり、ＣＰＵ２１がビッグエンディアンモードとなる。命令は、演算器２１１により実行される。２１２は汎用レジスタであり、命令実行の際にオペランドとして使用されることがある。割り込みコントローラ２１６が割り込みライン２３３から来る割り込み要求の制御を行う。ステータスレジスタ２１３は、ＣＰＵ２１の状態を表すレジスタであり、演算器２１１により読み書き可能である。ステータスレジスタ２１３の中には、割り込み要求を抑止する働きをするビットがある。割り込みが抑止されているときには、割込み要求が来ても、その割り込みに対応する処理が行われない。割り込みの抑止が解除された時点で割り込み処理が行われる。割り込み要求レジスタ２１５は、割り込みが入ったときに、その割り込みの種類が割り込みコントローラ216によって書き込まれるレジスタである。ベクタレジスタ２１４は、メモリ内の割り込みベクタテーブルのアドレスが入るレジスタである。割り込みが入ったときに、割り込みコントローラ２１６が、ベクタレジスタ２１４のアドレスの割り込みベクトルテーブルを検索し、そこに書かれた割り込み処理プログラムのアドレスをプログラムカウンタ２１７にセットする。タイマ２１８は、設定した時間毎に、割り込みコントローラ２１６宛に割り込みを要求する。
【００２５】
図４６は、図３のバイトスワップ回路４１１の構成を示したものである。232が図３のデータバスに相当する。データバス２３２は、バッファ５９１と５９２によって入力データバス２３２１と出力データバス２３２４に分けられる。データバスの入力と出力は、５９３の書き込み制御線により切り替えられる。データバスのライン数は３２本である。２３２１（３１−２４）は２３２１の３１ビット目から２４ビット目までのラインを示している。他も同様である。６０１〜
６０４と６１１〜６１４はセレクタである。図３のバイトスワップレジスタ412から来ているバイトスワップライン４１２１がオンになると、右側の入力ラインの値が出力ラインに出力され、オフのときには左側の入力線が出力される。これにより、バイトスワップレジスタ４１２がセットされているときには、入力データバス２３２１のバイト順が反転して、２３２２の演算機入力ラインに出力され、２３２３の演算機出力線も反転して、出力データバス２３２４に出力される。バイトスワップレジスタ４１２がセットされていないときには、そのままのバイト順でデータが受け渡される。
【００２６】
図４は、図３の割り込み要求レジスタ２１５の詳細である。２１５１〜2153は、それぞれレベル１〜レベル３の割り込みが入ったときにオンになるビットである。
【００２７】
本実施例においては、ディスクコントローラからの割り込みレベルを１、入出力部からの割り込みレベルを２、タイマからの割り込みレベルを３としている。図５は、図３のステータスレジスタ２１３の詳細である。割り込み要求を抑止する働きをする割り込み抑止ビット２１３１〜２１３２がある。割り込み抑止ビットは、二進数で４つの割り込み要求レベルを表している。割り込み抑止ビットが表すレベル以下の割り込み要求は抑止される。また、割り込みが入ったときには、その割り込みのレベルに割り込み抑止ビットが設定され、後から入ってくる割り込みが設定されたレベル以下の場合には、その割り込みが抑止される。
【００２８】
図６は図２の入出力部２６の詳細構成である。この部分は、リアルタイム制御が必要な外部機器を制御するために使用される。２６１が入力線であり、外部機器の状態を取り込む。２６２が出力線でり、外部機器に制御信号を出力する。入力線２６１は、オア回路２６４に接続されている。ここでは、オア回路２６４の出力は、バスの割り込みライン２３３のレベル２の割り込みラインに接続されている。入力線２６１のいずれかがオンになると、ＣＰＵに割り込みが要求される。入力線２６１は、ラッチ２６３にも入力されており、入力線２６１の状態が保存される。このラッチの内容は、アドレスバス２３１でアドレスを指定することにより、データバスより読み出し可能である。デコーダ２６５は、アドレスバス２３１のアドレスをデコードして、読み書きするラッチを選択する。ラッチ266は出力線２６２の出力を保持する。アドレスバス２３１にアドレスを設定することにより、データバスの内容をラッチする。
【００２９】
図７は図２のディスクコントローラ２４の詳細構成を示したものである。セクタレジスタ２４２は、読み書きするディスク上のセクタを指定するレジスタである。データバッファ２４３には、ディスクに書き込んだり、ディスクから読み出したデータが入る。セクタレジスタ２４２，データバッファ２４３は、アドレスをアドレスバス２３１に与えることにより、データバス２３２からアクセス可能である。アドレスはデコーダ２４１により、デコードされる。アクセス終了通知線２４４，セクタ指定線２４５，データ線２４６は、図２のディスク２５につながっている。アクセス終了通知線２４４は、ディスクのアクセスが終了した時点でオンとなる。この線はバス２３の割り込みライン２３３に接続されており、オンになったときに割り込み要求がＣＰＵ２１に送られる。この割り込みのレベルは１である。セクタ指定線２４５は、アクセスするセクタをディスクに知らせる線であり、データ線は、ディスクに対して読み書きするデータを流す線である。図８は図２のメモリ２２の内容の詳細である。メモリ２２は、３つの部分よりなる。ＴＳ−ＯＳ３１は、リアルタイム性が考慮されていない事務処理用のＯＳのプログラム及びデータである。ＲＴ−ＯＳ３２は、リアルタイム処理を行う
ＯＳのプログラム及びデータである。ハードウェア依存部３３は、ＯＳからハードウェアに依存したプログラム及びデータを抽出したものである。近年のＯＳの多くは、ハードウェア間の移植性を向上させるため、このようにハードウェア依存部を独立させた構成になっている。本実施例では、この部分を改造することにより、２つのＯＳを切り替えつつ並行に実行可能にしている。ＴＳ−ＯＳ３１のうち、３１１はＴＳ−ＯＳのプログラムである。３１２は、ディスク２５から読み込んだデータが入るバッファ３１３１〜３１３２が接続されるバッファキューである。ＲＴ−ＯＳ３２のうちのランキュー３２１は、実行可能状態にあるタスクのタスクテーブル３２６１〜３２６２がつながるキューである。タスクテーブルは、図１０でその詳細を説明する。スリープキュー３２２は、イベント待ちでブロックしているタスクのタスクテーブル３２６３〜３２６４がつながるキューである。リスケジューリングフラグ３２３は、ＲＴ−ＯＳのリスケジューリングが必要であることを表すフラグである。ＲＴ−ＯＳプログラム３２５は、ＲＴ−ＯＳのプログラムである。このプログラムの詳細は後述するが、このプログラムの中には、ＲＴ−ＯＳのタスクの実行順序を決定するスケジューラ６２が含まれる。カーネルスタック３２７１〜３２７４はタスクテーブル３２６１〜３２６４のタスクが使用するスタック領域である。ハードウェア依存部３３のうち、ＯＳ状態３３１は、ＴＳ−ＯＳ３１とＲＴ−ＯＳ３２のどちらのＯＳを実行していたかを記憶する領域である。割り込みテーブル３３２は、割り込みが入った時に
ＴＳ−ＯＳ３１とＲＴ−ＯＳ３２、それぞれ、どのような処理を行うかを記したテーブルである。割り込みテーブル３３２に関しては、図９で詳しく説明する。SIRQL335は、ＴＳ−ＯＳ３１への割り込み抑止をソフトウェア的に行うための変数である。ＴＳ−ＯＳ３１は、リアルタイム処理を考慮していないため、割り込みを長時間禁止したまま処理を行うことがありえる。このような状況でも、ＲＴ−ＯＳ３２が割り込みに応答できるようにしなければならない。このことは、
ＴＳ−ＯＳ３１の割り込み禁止をハードウェア的にではなく、ソフトウェア的に行うことにより実現する。SIRQL335の値以下のレベルの割り込みは、ハードウェアからは入るが、ソフトウェア的に保留される。保留された割り込みの情報は、保留キュー３３４に保存される。保留キューには、保留割り込みテーブル3411〜３４１２がつながる。３３６から３３９は、タイマ割り込みを２つのＯＳに割り振るために使用する変数である。ＴＳ周期３３６はＴＳ−ＯＳ３１が必要とするタイマ割り込みの周期である。ＲＴ周期は、ＲＴ−ＯＳが要求するタイマ割り込み周期である。図３の２１８のようにハードウェアのタイマは１つであるが、これをソフトウェアにより、両ＯＳにそれぞれ自分の固有のタイマがあるように見せる。ＴＳ−ＯＳ退避領域３４４とＲＴ−ＯＳ退避領域３４２は、ＯＳを切り替えたときに今まで実行していたＯＳのレジスタの状態を退避するための領域である。ＴＳ−ＯＳ退避領域３４４にはＴＳ−ＯＳのレジスタが退避され、ＲＴ−
ＯＳ退避領域３４２にはＲＴ−ＯＳのレジスタが退避される。Ｌベクタテーブル３４３１とＢベクタテーブル３４３２は、割り込みが入った時にジャンプする先を設定したテーブルである。プロセッサがリトルエンディアンで実行されているときと、ビッグエンディアンで実行されているときでは、割り込みハンドラのアドレスが異なることと、ベクタテーブル自身を記述するエンディアンも異なることから、それぞれのエンディアンで別々のベクタテーブルを使用する。リトルエンディアンのときにはＬベクタテーブル３４３１を使用し、ビッグエンディアンのときにはＢベクタテーブル３４３２を使用する。これらのベクタテーブルの内容に関しては図５２と図５３で説明する。図３のベクタレジスタ２１４は、このテーブルのアドレスが入るように設定する。共有データ３４５は、ＴＳ−ＯＳ31とＲＴ−ＯＳ３２の両方からアクセスされるデータである。ハードウェア依存部プログラム３４０の詳細は後で述べる。
【００３０】
図５２は、図８のＬベクタテーブル３４３１の内容の一例を示したものである。このベクタテーブルは、ＣＰＵ２１がリトルエンディアンで動作しているときに使用されることになるテーブルである。３４３１１の列は割り込みレベル、
３４３１２の列は各割り込みレベルに対応する割り込みハンドラのアドレスが記述されている。割り込みハンドラのアドレスは、３４３１３〜３４３１４のように通常、Ｌハンドラ関数のアドレスを設定する。ただし、３４３１５のタイマ割り込みのレベルに関しては、両ＯＳ間でタイマを共有する必要上、Ｌタイマハンドラという特別なハンドラを使用する。Ｌハンドラのアルゴリズムは図４０、Ｌタイマハンドラのアルゴリズムは図４９で説明する。
【００３１】
図９は図８の割り込みテーブル３３２の詳細である。３３２１の列は割込みレベル、３３２２の列はＲＴ−ＯＳ３３の割り込みに対するハンドラプログラムのアドレス、３３２３の列はＴＳ−ＯＳ３２のハンドラプログラムのアドレスである。３３２４の行は割り込みレベル１の割り込みが入った時、ＲＴ−ＯＳには知らせる必要がないが、ＴＳ−ＯＳではDISK_END関数を実行することを示している。このように割り込みを片方のＯＳに通知することも可能であるし、３３２６行のように両方のＯＳのハンドラを実行することも可能である。
【００３２】
図１０は図８のタスクテーブル３２６１の詳細である。Nextポインタ32611 は、タスクテーブルを図８のランキュー３２１やスリープキュー３２２に接続するためのリンク用ポインタである。優先度領域３２６１２はタスクを実行する優先度が入る領域である。ＲＴ−ＯＳが実行するタスクを選択するとき、優先度の最も高いタスクを選ぶ。ブロックチャネル領域３２６１３は、タスクがあるイベントの発生を待ってブロックするとき、そのイベントの種類が入る領域である。スタック３２６１４はタスクが使用するスタックのアドレスを記憶する。
【００３３】
図１１は図８の保留割り込みテーブル３４１１の詳細である。Nextポインタ
３４１１１は保留割り込みテーブルを保留キュー３３４に接続するためのリンクポインタである。IRQL34112は、保留されている割り込みのレベルを記憶する。
図１２はハードウェア依存部プログラム３４０の１つであるRaiseIRQL 関数
１２である。この関数は、ＴＳ−ＯＳ３１が割り込みを抑止するために呼ぶ関数である。この関数は、図２１のバッファリードのアルゴリズムの中などでバッファキューの排他制御などに使用される。この関数は、ＲＴ−ＯＳの割り込みまで禁止してしまわないよう、実際にはハードウェアのステータスレジスタ２１３の割り込み抑止ビットを書き換えず、メモリ２２中のSIRQL335を書き変えるのみである（１２１）。
【００３４】
図１３はハードウェア依存部プログラム３４０のプログラムの１つである    LowerIRQL 関数１３である。この関数は、ＴＳ−ＯＳ３１が割り込みを抑止を解除するために呼ぶ関数である。この関数は、図２１のバッファリードのアルゴリズムにあるように図１２のRaiseIRQL 関数１２と対で使用されることが多い。引数として割り込みレベルを指定し、このレベルより大きい割り込みが許可される。この関数も、ハードウェアのステータスレジスタ２１３の割り込み抑止ビットを書き換えず、メモリ２２中のSIRQL335を書き変える（１３１）。保留ＩＮＴ処理１４で保留されている割り込みをＴＳ−ＯＳに通知する。
【００３５】
図１４は図１３の保留ＩＮＴ処理１４のフローチャートである。この関数は、ハードウェア依存部プログラム３４０の一部である。１４１で保留キューに    SIRQL335より割り込みレベルＩＲＱＬが高い割り込み保留テーブルがあるか判定する。テーブルがない場合には終了する（１４４）。ある場合には、その中で
ＩＲＱＬが最大のテーブルを選択する（１４２）。その割り込みレベルについて、割り込みテーブル３３２で指定されているＴＳ−ＯＳ用のハンドラ関数を実行する（１４３）。以上を繰り返す。
【００３６】
図４０はＴＳ−ＯＳ実行中、すなわち、プロセッサがリトルエンディアンになっているときに、タイマ割り込み以外の割り込みが入ったときに最初に実行されるＬハンドラである。この関数のアドレスは、図５２のＬベクタテーブル3431に登録されている。この関数もハードウェア依存部プログラム３４０のプログラムの１つである。１０２でＣＰＵ２１にある汎用レジスタ２１２などの内容をメモリ内のスタックに退避する。これは、割り込み前のプログラムが使用していたレジスタの内容を割り込みハンドラが破壊するのを防ぐためである。１０３で割り込みテーブル３３２を調べて、入った割り込みのレベルのハンドラがＲＴ−ＯＳについて登録されているか調べる。登録されている場合には、ＲＴハンドラ１５を呼ぶことになるが、ＲＴハンドラはＲＴ−ＯＳのプログラムなので、呼ぶ前に、５１によってＯＳをＲＴ−ＯＳに切り替える。ＲＴ−ＯＳ切り替えのアルゴリズムは、図５０で説明する。そして、ＲＴハンドラからリターンした後には、
５２でＯＳをＴＳ−ＯＳに戻す。ＴＳ−ＯＳ切り替え５１のアルゴリズムは、図５１で説明する。１０５でＴＳ−ＯＳ用にハンドラが登録されているか調べる。登録されており、割り込みレベルがSIRQL335以下（１０７）の場合は割り込みが保留される（１９）。割り込みレベルがＳＩＲＱＬより大きかった場合には、
１１３でSIRQL335を割り込みのレベルに設定してソフトウェア的な割り込み抑止をした後、１１４でステータスレジスタ２１３を割り込み前の値に戻して、ハードウェアの割り込み抑止を解除する。１４では、保留ＩＮＴ関数１４を呼び出して保留中の割り込みの処理をする。これは、ここまでの処理の間により高いレベルの割り込みが入り、しかも、その割り込みがＴＳ−ＯＳ宛だったときに、その処理が保留されている可能性があるためである。次に１１０で、割り込みテーブル３３２に登録されているＴＳ−ＯＳ用ハンドラの関数を呼び出す。最後に102で退避したレジスタを回復する（１１１）。
【００３７】
図４７はＲＴ−ＯＳ実行中、すなわち、プロセッサがビッグエンディアンになっているときに、タイマ割り込み以外の割り込みが入ったときに最初に実行されるＢハンドラである。この関数のアドレスは、図５３のＢベクタテーブル3432に登録されている。この関数もハードウェア依存部プログラム３４０のプログラムの１つである。７３１でＣＰＵ２１にある汎用レジスタ２１２などの内容をメモリ内のスタックに退避する。これは、割り込み前のプログラムが使用していたレジスタの内容を割り込みハンドラが破壊するのを防ぐためである。７３２で割り込みテーブル３３２を調べて、入った割り込みのレベルのハンドラがＲＴ−ＯＳについて登録されているか調べる。登録されている場合には、ＲＴハンドラ１５を呼ぶことになる。１０５でＴＳ−ＯＳ用にハンドラが登録されているか調べる。登録されている場合は割り込みが保留される（１９）。これは、ＲＴ−ＯＳの実行をＴＳ−ＯＳの実行によって阻害しないためである。最後に７３１で退避したレジスタを回復する（７３６）。
【００３８】
図５０は、ＯＳをＲＴ−ＯＳに切り替えるＲＴ−ＯＳ切替え７０のアルゴリズムである。このプログラムは、図１や図８のＯＳ切替え５２１の中にある。701で今まで実行していたＴＳ−ＯＳのレジスタの内容を図８のＴＳ−ＯＳ退避領域３４４に退避する。これは、後でＴＳ−ＯＳに戻ったときに処理を続行できるようにするためである。７０２で図３のベクタレジスタ２１４をビッグエンディアン用のベクタテーブルであるＢベクタテーブル３４３２のアドレスに設定する。７０３で実行中のＯＳの種類を記憶する図８のＯＳ状態３３１にＲＴ−ＯＳであることを設定する。５１で図４１のプロセッサをビッグエンディアンに設定する関数を実行する。７０５で図８のＲＴ−ＯＳ退避領域３４２からレジスタを回復する。
【００３９】
図５１は、ＯＳをＴＳ−ＯＳに切り替えるＴＳ−ＯＳ切替え７１のアルゴリズムである。このプログラムも、図１や図８のＯＳ切替え５２１の中にある。この関数は、図５０のＲＴ−ＯＳ切替えと対称的な動作をする。７１１でレジスタの内容をＲＴ−ＯＳ退避領域３４２に退避する。７１２でベクタレジスタ２１４をＬベクタテーブル３４３１のアドレスに設定する。７１３でＯＳ状態３３１に
ＴＳ−ＯＳを設定する。５２で図４２のプロセッサをリトルエンディアンに設定する関数を実行する。７１５で図８のＲＴ−ＯＳ退避領域３４４からレジスタを回復する。
【００４０】
図４１は、図５０の５１のＣＰＵをビッグエンディアンに設定するルーチンのアルゴリズムである。この関数は、図１のエンディアン切替え５２１１の中にある。５１１で図３のバイトスワップレジスタ４１２をリセットしている。これにより、図３のバイトスワップ回路が直結の状態になりＣＰＵ２１とデータバス
２３２の間でデータの反転は行われなくなる。
【００４１】
図４２は、図５１の５２のＣＰＵ２１をリトルエンディアンに設定するルーチンである。この関数は、図１のエンディアン切替え５２１１の中にある。図４１のルーチンでリセットしたバイトスワップレジスタをセットしている。
【００４２】
図１５は図４０と図４７の中のＲＴハンドラ１５のフローチャートである。このプログラムはＲＴ−ＯＳプログラム３２５の１つであり、ＲＴ−ＯＳ宛の割り込みの処理を行う。１５１でレジスタの内容をメモリ内のスタックに退避する。１５２で、割り込みテーブル３３２に登録されているＲＴ−ＯＳ用ハンドラの関数を呼び出す。１５３でステータスレジスタ２１３の割り込み抑止ビットを０にして、すべての割り込みを許可する。割り込み抑止ビットは、割り込みが入った時点で、その割り込みのレベルに設定されている。１５４でリスケジューリングフラグ３２３を調べてリスケジューリングが必要か調べる。これは、１５２で実行した関数内などで、新たにタスクが実行可能になっている可能性があるからである。リスケジューリングの必要がある場合には、図１６のスケジューラ１７を実行する。最後に、退避したレジスタを回復する。
【００４３】
図１６は、図１５のスケジューラ関数１７のフローチャートである。このプログラムは、図１のスケジューラ１７に相当する。１７１で図８のランキュー321にタスクテーブルが接続されているか調べている。これは、実行可能なＲＴ−
ＯＳタスクが存在するか調べている。ない場合には、処理をＴＳ−ＯＳに戻すためにＴＳ−ＯＳ切替えを実行する（１７２）。これは、図４５の５７４の遷移に相当し、図１のスケジューラ１７からＯＳ切替え４２１への通知に相当する。ランキューにタスクテーブルがある場合には、タスクテーブル中の優先度（図１０の優先度３２６１１）が最も高いタスクテーブルを選択する。１７４で現在実行中のタスクのレジスタを実行中のタスクのスタックに退避し、１７５で選択したタスクのスタックからレジスタを回復する。これにより、新たに選択されたタスクの処理が開始される。
【００４４】
図１７は、図９で割り込みレベルの２が入ったときにＲＴ−ＯＳで呼ばれるよう設定されている関数の一例である。この関数は、図１５の１５２で呼ばれることになる。レベル２の割り込みは、図２の入出力部２６からの割り込みになっている。そこで、この割り込みの処理は、制御機器から入力を待っているタスクを実行可能にすることになる。１８１で、ブロックチャネル３２６１３が‘123’であるタスクテーブル３２６３〜３２６４をスリープキュー３２２から探す。
【００４５】
１８２で、そのタスクテーブルをランキュー３２１に入れる。新しいタスクが実行可能となったのでリスケジューリングが必要となる。よって、１８３でリスケジューリングフラグ３２３をオンにする。
【００４６】
図１８は、図４０の保留関数１９のフローチャートである。この関数は、ＲＴ−ＯＳ実行中か、ＴＳ−ＯＳが割り込み抑止をしている間に入ったＴＳ−ＯＳ宛の割り込みを保留する。この関数は、ハードウェア依存部プログラム３４０の１つである。１９１で新規に保留割り込みテーブル３４１１〜３４１２のエントリを割り当てる。１９２で保留割り込みテーブルのIRQL34112 に割り込みのレベルを入れる。１９３で保留割り込みテーブルを保留キュー３３４に入れる。
【００４７】
図１９は、ＲＴ−ＯＳのタスクが、イベントの発生を待つときや、終了するときに呼ぶブロック関数４０である。この関数は、ＲＴ−ＯＳプログラム３２５の１つである。４０１で、現在実行中のタスクのタスクテーブルを図８のスリープキュー３２２に入れる。１７で、図１６のスケジューラを実行し、次に実行するタスクを選択する。実行するタスクがないときには、ＴＳ−ＯＳに処理を戻す。図２０は、図９で割り込みレベルの１が入ったときにＴＳ−ＯＳで呼ばれるよう設定されている関数の一例である。この関数は、図４０の１１０または図１４の１４３で呼ばれることになり、ＴＳ−ＯＳプログラム３１１の１つである。この割り込みは、ディスク２５の読み出しが終了したことをＣＰＵ２１に知らせる割り込みである。４１１で新規にバッファ３１３１を獲得し、４１２でディスクコントローラ２４のデータバッファ２４３からデータをコピーする。そして、バッファ３１３１をバッファキュー３１２に接続する。
【００４８】
図２１はＴＳ−ＯＳプログラム３１１の内、割り込みを抑止しなければならないプログラムの例である。バッファ３１３１からデータの読み出しを行う。バッファ３１３１は、割り込みハンドラである図２０のプログラム４１からもアクセスされるので、割り込みを抑止してアクセスする必要がある。そこで、        RaiseIRQL 関数１２で割り込みを抑止した後、４２１でバッファ３１３１をバッファキュー３１２から外す。LowerIRQL 関数１３で割り込みを許可して、４２２でバッファのデータをリードする。ただし、図１２にある通り、RaiseIRQL 関数１２は、ソフトウェア的にＴＳ−ＯＳ宛の割り込みを抑止しているだけなので、ＲＴ−ＯＳ宛の割り込みは受け付けられる。
【００４９】
図２２は、ＲＴ−ＯＳがタイマ割り込みの周期を設定するときに呼ぶ関数のアルゴリズムである。この関数は、ハードウェア依存部プログラム３４０の１つである。ハードウェアのタイマ２１８が１つしかない計算機においても、２つの
ＯＳに独立に周期タイマを提供できるようになっている。４３１でリアルタイム周期３３７に新しい周期を設定する。４３２でＴＳ周期３３６とリアルタイム周期３３７を比較し、リアルタイム周期が長い場合には、残時間３３８にリアルタイム周期３３７を設定し、４３４でＴＳ周期３３６をハードウェアのタイマ218に設定する。リアルタイム周期３３７がＴＳ周期３３６以下だった場合は、逆に、４３５でＴＳ周期３３６を残時間３３８に設定し、４３６でリアルタイム周期３３７をタイマ２１８に設定する。最後に４３７で半端時間４３７をクリアする。
【００５０】
図２３は、ＴＳ−ＯＳがタイマ割り込み周期を設定するときに呼ぶ関数である。４４１でＴＳ周期に新しい周期を設定している以外は、図２２と同じである。図４８は、ＴＳ−ＯＳ実行中、すなわち、プロセッサがリトルエンディアンになっているときに、タイマ割り込みが入ったときに実行されるＬタイマハンドラ関数である。この関数のアドレスは、図５２のＬベクタテーブルの中の34315 に入っている。６３１でスタックへのレジスタの退避を行う、図２４のタイマハンドラ４５を呼び出す必要があるが、タイマハンドラ４５は、ＲＴ−ＯＳとＴＳ−ＯＳで共通に使用される関数であるが、ここではビッグエンディアンで記述されていると仮定する。そこで５１でプロセッサをビッグエンディアンに設定した後に実行する。実行終了後は、エンディアンを５２でリトルエンディアンに戻す。最後に退避したレジスタを回復する。
【００５１】
図４９は、図４８と同様なハンドラであるがＲＴ−ＯＳ実行中にタイマ割り込みが発生したときに実行される関数である。ＲＴ−ＯＳはビッグエンディアンで実行されるので図４８のように途中でエンディアンを切り替える必要がない。
【００５２】
図２４は、タイマ割り込みが入った時の割り込みハンドラである。この関数は、ハードウェア依存部プログラム３４０の１つである。４５１でＴＳ周期３３６とリアルタイム周期３３７を比較し、リアルタイム周期３３７の方が長い場合には、ＴＳ周期小関数４６を実行し、そうでない場合には、ＲＴ周期小関数４８を実行する。
【００５３】
図２５は、図２４のＴＳ周期小関数のアルゴリズムである。４６１で半端時間３３９が０か調べる。半端時間３３９はリアルタイム周期が終了した時点でＴＳ周期終了までの時間である。半端時間３３９が０以外のときは、４６２で半端時間３３９をタイマ２１８に設定する。リアルタイム周期は終了しているので、
４６３でリアルタイムタイマハンドラ関数を呼ぶ。４６４で残時間３３８に（リアルタイム周期３３７−ＴＳ周期３３６）を設定する。残時間３３８は、次にタイマ割り込みが発生したときにリアルタイム周期終了までの時間である。４６５で半端時間３３９を０とする。４６１で半端時間が０の場合は、４６６で残時間３３８を調べる。残時間３３８が０の場合は、リアルタイム周期が終了しているので４６７でリアルタイムタイマハンドラ関数を実行し、４６８で残時間をリアルタイム周期とする。このとき、ＴＳ周期も終了している４７３でＴＳタイマハンドラ関数を呼ぶ。４６６で残時間３３８があるときには、４６９で残時間338からＴＳ周期を減じる。４７０で、減じた結果をＴＳ周期と比較し、短い場合には、４７１で半端時間３３９に（ＴＳ周期３３６−残時間３３８）を設定し、残時間３３８をハードウェアのタイマ２１８に設定する。この場合もＴＳ周期は終了しているので、４７３でＴＳタイマハンドラ関数を呼ぶ。ただし、ＴＳタイマハンドラはＴＳ−ＯＳの一部なので７１でＴＳ−ＯＳにＯＳを切り替えた後に呼び、呼んだ後に７０でＯＳを元のＲＴ−ＯＳに戻す。
【００５４】
図２６は、図２４のＲＴ周期小関数のアルゴリズムである。アルゴリズムは、ＲＴ−ＯＳとＴＳ−ＯＳの関係が逆転しているだけで、図２５と同様である。
【００５５】
図２７は、本発明の別の実施例を示したものである。図１の構成では、１つのＣＰＵ上でリトルエンディアンＯＳとビッグエンディアンＯＳを切り替えつつ実行していた。一方、図２７では、ＣＰＵを２つ用いている。２１−２のＣＰＵはリトルエンディアンの事務処理用ＯＳ（ＴＳ−ＯＳ）３１を実行するためのものである。このＣＰＵのエンディアンはリトルエンディアンに固定されている。
【００５６】
２１−１のＣＰＵは、ビッグエンディアンのＲＴ−ＯＳ３２を実行する。この
ＣＰＵのエンディアンはビッグエンディアンに固定されている。５３１〜５３２のタスクは、ＴＳ−ＯＳ３１のタスクであり、５３３〜５３４はＲＴ−ＯＳ３２のタスクである。ＣＰＵ２１−１と２１−２は共有メモリ８０を共有している。図では、ＯＳ３１〜３２やタスク５３１〜５３４が共有メモリ８０の外に記述されているが、これらのプログラムやデータが共有メモリの中に存在しても差し支えない。
【００５７】
図２８は、マルチプロセッサ計算機の構成の例である。２１−１と２１−２の２つのＣＰＵがバス２３に接続されている点が異なっている。２１−１のＣＰＵがＲＴ−ＯＳを専用に実行し、２１−２のＣＰＵがＴＳ−ＯＳを専用に実行する。メモリは８０−１のＲＯＭと８０−２のＲＡＭに分かれている。両メモリとも両ＣＰＵと共有されている。ＣＰＵ２１−１はビッグエンディアンモードで実行され、ＣＰＵ２１−２はリトルエンディアンモードで実行される。レジスタ５５は両ＣＰＵからアクセス可能である。このレジスタは、３２ビットであり、ビッグエンディアンのＣＰＵから見て0x00000001の値を持っている。リトルエンディアンのＣＰＵは、レジスタの内容を反転して読むので0x01000000の値を読み込む。両ＣＰＵは、リセット後、ＲＯＭ８０−１内のプログラムを実行する。
【００５８】
図２９は、図２８のＲＯＭ８０−１の内容である。図２８のＣＰＵ２１−１とＣＰＵ２１−２は、リセット後にこのＲＯＭ８０−１のアドレス０から実行を開始する。図ではＲＯＭの内容はビッグエンディアンのＣＰＵが呼んだ場合の値となっている。０番地の0400000Cは命令としては、現在実行中の命令のアドレス＋０ｘ０Ｃの番地にジャンプしなさいという命令である。したがって、ビッグエンディアンのＣＰＵ２１−１は、０番地の命令を実行した次は、１０番地の命令を実行する。一方、リトルエンディアンのＣＰＵ２１−２は、同じ０番地の命令を読み込んでも0c000004という命令を読み込む。この命令はレジスタ０の内容をレジスタ１２にロードする命令である。したがって、このＣＰＵは、次に４番地の命令を実行する。このようにすることにより、ビッグエンディアンのＣＰＵとリトルエンディアンのＣＰＵで実行の経路を分けることが可能となる。４〜Ｃ番地にはリトルエンディアンで意味を持つ命令が入っており、この部分で分岐命令を実行してリトルエンディアンのＯＳへ分岐する。１０番地以降には、ビッグエンディアンのＯＳのプログラムが入っている。
【００５９】
図３０は、図２８のＲＯＭ２２−１別の実施例である。図２８ではＣＰＵ２１−２とＣＰＵ２１−２で同じＲＯＭの部分がアクセスされるようになっていたが、図３０では別々の部分がアクセスされる。２３はバスである。２３２はデータバスである。２３１はアドレスバスである。アドレスバス２３１は最上位のアドレスライン以外、ＲＯＭのアドレスラインに直結されている。２３４のラインは、ＲＯＭへの読み出しのリクエストがＣＰＵ２１−２から来ているのかCPU21−1から来ているのかを示すＣＰＵ判別ラインである。ＣＰＵ２１−２から来ているとき１となる。アドレスバスの最上位のライン２３１−１は、ＣＰＵ判別ライン２３４と排他論理輪回路２３５を通ってＲＯＭ８０−１のアドレスラインに接続されている。
【００６０】
図３１は、図３０のＲＯＭを用いたときの２つのＣＰＵから見たメモリマップを示している。５４１がＣＰＵ２１−１のメモリマップである。ＣＰＵ２１−１からＲＯＭを見るとＲＯＭ−０の領域５４１１がマップの先頭に来ている。一方、ＣＰＵ２１−２から見るとＲＯＭ−１の領域５４２１が先頭に来る。ＲＯＭ−０の領域とＲＯＭ−１の領域には、同じプログラムがＲＯＭ−０にはビッグエンディアンのフォーマットで、ＲＯＭ−１の領域にはリトルエンディアンのフォーマットで入っている。
【００６１】
図４３は、図３１のＲＯＭ−０およびＲＯＭ−１領域に入っているＣＰＵ２１−１およびＣＰＵ２１−２のリセット後実行されるプログラムである。５６１で図２８のレジスタ５５を読んで、その値が１であるか判断している。ビッグエンディアンのＣＰＵ２１−１は、このレジスタ５５を読むと１を読み取るので563でＲＴ−ＯＳにジャンプする。一方、リトルエンディアンのＣＰＵ２１−２は、レジスタ５５の値が0x01000000に読めるので、５６２でＴＳ−ＯＳにジャンプする。
【００６２】
図４４は、図４３でレジスタ５５を使用した代わりにＲＯＭ８０−１上に記憶されたフラグを用いた例である。図４３とまったく同様の方法でビッグエンディアンとリトルエンディアンのＣＰＵで動作を分離することが可能である。
【００６３】
図３２は、ステータスレジスタの構成例である。図３２のマルチプロセッサ計算機の２つのＣＰＵ（２１−１と２１−２）は、図３のＣＰＵと同様の構成であるが、２１３のステータスレジスタの構成が、図５の構成と異なっている。図５のステータスレジスタでは、割り込み抑止ビット（２１３１〜２１３２）が２進数の値を表しており、この値以下のレベルの割り込みが抑止されていたが、図
３２のステータスレジスタは、割り込みレベルそれぞれに対応した割り込み抑止ビット（２１３４〜２１３６）が存在する。各ビットがセットされているときに、それに対応したレベルの割り込みが抑止される。
【００６４】
図３３は、ＲＴ−ＯＳを実行する図３１のＣＰＵ２１−１のステータスレジスタ２１３−１の状態である。このＣＰＵは、２１３４−１のビットのみがセットされており、レベル１の割り込みのみがマスクされている。
【００６５】
図３４は、ＴＳ−ＯＳを実行する図３１のＣＰＵ２１−２のステータスレジスタ２１３−２の状態である。このＣＰＵは、２１３５−２のビットのみがセットされており、レベル２の割り込みのみがマスクされている。
【００６６】
図３５は、図３１のメモリ２２の内容である。ベクタテーブルがＣＰＵ毎に２つ(３４３−１と３４３−２)設けられている。ベクタテーブルは、割り込みが入ったときに実行するプログラムのアドレスが入っているテーブルである。ＲＴ−ＯＳを実行する図３１のＣＰＵ２１−１が、ベクタテーブル３４３−１を使用し、ＴＳ−ＯＳを実行する図３１のＣＰＵ２１−２がベクタテーブル３４３−２を使用する。それぞれのＣＰＵの図３のベクタレジスタ２１４が、それぞれのベクタテーブルのアドレスを指すことになる。ベクタテーブルには割り込みレベル毎に飛び先のアドレスが入っている。３４３−１のベクタテーブルはレベル１の割り込みの飛び先が０になっており、この割り込みは無効であることを示している。レベル２とレベル３の飛び先は、いずれもＲＴ−ＯＳ３２のプログラム３２５の中の関数になっている。３４３−２のベクタテーブルはレベル２の割り込みの飛び先が０になっており、この割り込みは無効であることを示している。レベル１とレベル３の飛び先は、いずれもＴＳ−ＯＳ３１のプログラム３１１の中の関数になっている。図８にあったＯＳ状態３３１，割込みテーブル３３２，      SIRQL335，保留キュー３３４，ＴＳ−ＯＳ退避領域３４４，ＲＴ−ＯＳ退避領域３４２，タイマ関係の領域３３６〜３３９などは、単一のプロセッサで２つの
ＯＳを実行するために必要な機構のため、図３５では必要なくなっている。また、マルチプロセッサ構成では、割込みを禁止したのみでは、共有データ３４７の排他制御ができないので、排他制御用のロック３４７が図３５に加わっている。
図３６は、図３１のマルチプロセッサ構成のときの図１２のRaiseIRQL 関数
１２である。本構成では、SIRQL335を書き換える代わりに、自分のＣＰＵのステータスレジスタ（２１３−１または２１３−２）をセットしている。
【００６７】
図３７は、図３１のマルチプロセッサ構成のときの図１３のLowerIRQL 関数
１３である。本構成では、自分のＣＰＵのステータスレジスタ（２１３−１または２１３−２）をクリアするのみである。
【００６８】
図３８は、図３１のマルチプロセッサ構成のときの図１５のPIO_ON関数１５である。図２の構成では、入ってきた割り込みを２つのＯＳに割り振る必要があったが、マルチプロセッサ構成では、各ＣＰＵが別々のＯＳを実行しており、ステータスレジスタの設定に従って、必要な割り込みの処理を行う。このため、割り込みの処理は、通常のＯＳの割り込み処理と同じである。１０２でレジスタの内容を退避した後、割り込み本体の処理を行う。ここでは、図１７で行っていた処理内容１８１〜１８３の処理を行っている。１１１で退避しておいたレジスタの内容を回復し、１６２でリターンする。
【００６９】
図３１のマルチプロセッサ構成のときのブロック関数４０は図１９と同じである。ただし、スケジューラ１７は、図３９のようになる。図１６と比較すると、図１６ではランキューが空のときには、１７２でＴＳ−ＯＳに処理を戻していたが、図３９では、ループして待つ。
【００７０】
【発明の効果】
本発明によれば、エンディアンの異なるオペレーティングシステムを切り替えつつ同一プロセッサ上で並行して実行可能である。
【図面の簡単な説明】
【図１】ソフトウェア構成を示した図である。
【図２】計算機の構成を示した図である。
【図３】ＣＰＵの構成を示した図である。
【図４】割込み要求レジスタの構成を示した図である。
【図５】ステータスレジスタの構成を示した図である。
【図６】入出力部の構成を示した図である。
【図７】ディスクコントローラの構成を示した図である。
【図８】メモリの内容を説明するための図である。
【図９】割り込みテーブルの構成を示した図である。
【図１０】タスクテーブルの構成を示した図である。
【図１１】保留割り込みテーブルの構成を示した図である。
【図１２】割り込み抑止関数のアルゴリズムを示した図である。
【図１３】割り込み許可関数のアルゴリズムを示した図である。
【図１４】保留割り込みの許可関数のアルゴリズムを示した図である。
【図１５】ＲＴ−ＯＳの割り込みハンドラを示した図である。
【図１６】スケジューラのアルゴリズムを示した図である。
【図１７】入出力機器からの割り込みハンドラを示した図である。
【図１８】割り込みを保留する関数を示した図である。
【図１９】ブロック関数を示した図である。
【図２０】ディスクアクセス終了割り込みハンドラを示した図である。
【図２１】ＴＳ−ＯＳの割り込みを抑止するプログラムを示した図である。
【図２２】ＲＴ−ＯＳのタイマ周期設定関数を示した図である。
【図２３】ＴＳ−ＯＳのタイマ周期設定関数を示した図である。
【図２４】タイマ割り込みハンドラを示した図である。
【図２５】タイマ割り込みでＴＳ周期がリアルタイム周期より短い場合の処理を示した図である。
【図２６】タイマ割り込みでリアルタイム周期がＴＳ周期より短い場合の処理を示した図である。
【図２７】ソフトウェア構成を示した図である。
【図２８】マルチプロセッサ計算機の構成を示した図である。
【図２９】ＲＯＭの内容を説明するための図である。
【図３０】ＲＯＭの構成を示した図である。
【図３１】ＲＯＭのメモリマップを示した図である。
【図３２】ステータスレジスタの構成を示した図である。
【図３３】ＴＳ−ＯＳ用ＣＰＵのステータスレジスタの状態を示した図である。
【図３４】ＲＴ−ＯＳ用ＣＰＵのステータスレジスタの状態を示した図である。
【図３５】メモリの内容を示した図である。
【図３６】割り込み抑止関数のアルゴリズムを示した図である。
【図３７】割り込み許可関数のアルゴリズムを示した図である。
【図３８】ＲＴ−ＯＳの割り込みハンドラを示した図である。
【図３９】ブロック関数を示した図である。
【図４０】Ｌハンドラのフローチャートを示した図である。
【図４１】ビッグエンディアンモード設定のアルゴリズムを示した図である。
【図４２】リトルエンディアンモード設定のアルゴリズムを示した図である。
【図４３】リセット処理のアルゴリズムを示した図である。
【図４４】リセット処理の別のアルゴリズムを示した図である。
【図４５】計算機の状態遷移を示した図である。
【図４６】バイトスワップ回路の構成を示した図である。
【図４７】Ｂハンドラのアルゴリズムを示した図である。
【図４８】Ｌタイマハンドラのアルゴリズムを示した図である。
【図４９】Ｂタイマハンドラのアルゴリズムを示した図である。
【図５０】ＲＴ−ＯＳ切替えのアルゴリズムを示した図である。
【図５１】ＴＳ−ＯＳ切替えのアルゴリズムを示した図である。
【図５２】Ｌベクタテーブルの内容を示した図である。
【図５３】Ｂベクタテーブルの内容を示した図である。
【符号の説明】
１７，６２…スケジューラ、２１…ＣＰＵ、２２…メモリ、２３…バス、２４…ディスクコントローラ、２５…ディスク、２６…入出力部、３１…ＴＳ−ＯＳ、３２…ＲＴ−ＯＳ、３３…ハードウェア依存部、５５…ＣＰＵ判別レジスタ、６３…Ｌタイマハンドラ、６４…Ｂタイマハンドラ、７０…ＲＴ−ＯＳ切替え、７１…ＴＳ−ＯＳ切替え、７３…Ｂハンドラ、８０…共有メモリ、２１１…演算器、２１２…汎用レジスタ、２１３…ステータスレジスタ、２１４…ベクタレジスタ、２１５…割り込み要求レジスタ、２１６…割り込みコントローラ、２１７…プログラムカウンタ、２１８…タイマ、２３１…アドレスバス、２３２…データバス、２３３…割り込みライン、２４１…デコーダ、２４２…セクタレジスタ、２４３…データバッファ、２４４…アクセス終了通知線、２４５…セクタ指定線、２４６…データ線、２６１…入力線、２６２…出力線、２６３…ラッチ、
２６４…オア回路、２６５…デコーダ、２６６…ラッチ、３１１…ＴＳ−ＯＳプログラム、３１２…バッファキュー、３２１…ランキュー、３２２…スリープキュー、３２３…リスケジューリングフラグ、３２４…第２ハンドラアドレス、
３２５…ＲＴ−ＯＳプログラム、３３１…ＯＳ状態、３３２…割り込みテーブル、３３４…保留キュー、３３５…ＳＩＲＱＬ（ソフトウェアＩＲＱＬ）、３３６…ＴＳ周期、３３７…リアルタイム周期、３３８…残時間、３３９…半端時間、３４０…ハードウェア依存部プログラム、３４２…ＲＴ−ＯＳ退避領域、３４４…ＴＳ−ＯＳ退避領域、３４５…共有データ、３４６…ＯＳ状態カウンタ、347…ロック、４１１…バイトスワップ回路、４１２…バイトスワップレジスタ、
５２１…ＯＳ切替えプログラム、５３１〜５３４…タスク、５６１…ＴＳ−ＯＳタスク実行中状態、５６２…ＴＳ−ＯＳ割り込みハンドラ実行中状態、５６３…ＲＴ−ＯＳタスク実行中状態、５６４…ＲＴ−ＯＳ割り込みハンドラ実行中状態、５９１〜５９２…バッファ、２１３１〜２１３６…割り込み抑止ビット、3121〜３１２２…バッファ、３２６１〜３２６４…タスクテーブル、３２７１〜3274…カーネルスタック、３４１１〜３４１２…保留割り込みテーブル、３４３１…Ｌベクタテーブル、３４３２…Ｂベクタテーブル、４１２１…バイトスワップライン、５２１１…エンディアン切り替えプログラム。
【図１】
0003659048.tif 000002
【図２】
0003659048.tif 000003
【図３】
0003659048.tif 000004
【図４】
0003659048.tif 000005
【図５】
0003659048.tif 000006
【図６】
0003659048.tif 000007
【図７】
0003659048.tif 000008
【図８】
0003659048.tif 000009
【図９】
0003659048.tif 000010
【図１０】
0003659048.tif 000011
【図１１】
0003659048.tif 000012
【図１２】
0003659048.tif 000013
【図１３】
0003659048.tif 000014
【図１４】
0003659048.tif 000015
【図１５】
0003659048.tif 000016
【図１６】
0003659048.tif 000017
【図１７】
0003659048.tif 000018
【図１８】
0003659048.tif 000019
【図１９】
0003659048.tif 000020
【図２０】
0003659048.tif 000021
【図２１】
0003659048.tif 000022
【図２２】
0003659048.tif 000023
【図２３】
0003659048.tif 000024
【図２４】
0003659048.tif 000025
【図２５】
0003659048.tif 000026
【図２６】
0003659048.tif 000027
【図２７】
0003659048.tif 000028
【図２８】
0003659048.tif 000029
【図２９】
0003659048.tif 000030
【図３０】
0003659048.tif 000031
【図３１】
0003659048.tif 000032
【図３２】
0003659048.tif 000033
【図３３】
0003659048.tif 000034
【図３４】
0003659048.tif 000035
【図３５】
0003659048.tif 000036
【図３６】
0003659048.tif 000037
【図３７】
0003659048.tif 000038
【図３８】
0003659048.tif 000039
【図３９】
0003659048.tif 000040
【図４０】
0003659048.tif 000041
【図４１】
0003659048.tif 000042
【図４２】
0003659048.tif 000043
【図４３】
0003659048.tif 000044
【図４４】
0003659048.tif 000045
【図４５】
0003659048.tif 000046
【図４６】
0003659048.tif 000047
【図４７】
0003659048.tif 000048
【図４８】
0003659048.tif 000049
【図４９】
0003659048.tif 000050
【図５０】
0003659048.tif 000051
【図５１】
0003659048.tif 000052
【図５２】
0003659048.tif 000053
【図５３】
0003659048.tif 000054