JP3659048B2 - オペレーティングシステム及び計算機 - Google Patents
オペレーティングシステム及び計算機 Download PDFInfo
- Publication number
- JP3659048B2 JP3659048B2 JP03681499A JP3681499A JP3659048B2 JP 3659048 B2 JP3659048 B2 JP 3659048B2 JP 03681499 A JP03681499 A JP 03681499A JP 3681499 A JP3681499 A JP 3681499A JP 3659048 B2 JP3659048 B2 JP 3659048B2
- Authority
- JP
- Japan
- Prior art keywords
- interrupt
- endian
- executed
- register
- cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Description
【発明の属する技術分野】
エンディアンの異なるオペレーティングシステムを同一の計算機上で同時に実行する。
【0002】
【従来の技術】
計算機によってメモリ内にある情報の配列方法が異なっていることがある。この配列方法をエンディアンと呼ぶ。現在、エンディアンの種類には2つある。1つはビッグエンディアンであり、このエンディアンでは、16進数で01234567の32ビットデータがあるとき、メモリには上位のバイトから順に小さいアドレスに記憶される。すなわち、01が4n番地、23が4n+1番地、45が4n+2番地、67が4n+3番地のようにである。一方、リトルエンディアンでは、これとは逆に、下位のバイトから小さいアドレスに記憶される。前の例では、
67が4n番地、45が4n+1番地、23が4n+2番地、01が4n+3番地のようにである。
【0003】
特開平8−278918 号公報,特開平8−314733 号公報,特開平8−234781 号公報に、エンディアンに関する技術が開示されている。
【0004】
特開平8−278918 号公報,特開平8−314733 号公報では、タスク毎にビッグエンディアンで実行されるものとリトルエンディアンで実行するものに分けており、タスクを切り替える時にエンディアンを切り替える技術が開示されている。
【0005】
特開平8−234781 号公報には、単一の計算機上でビッグエンディアンのオペレーティングシステム(以下OS)とリトルエンディアンのOSの両方のOSを実行する技術について開示されている。
【0006】
【発明が解決しようとする課題】
事務処理用OSは、人間とのインタフェースが非常に優れている。そのため、工場の機械を制御するコンピュータにも使用したい、という要求が高くなっている。
【0007】
しかし、事務処理用OSは、人間を主な相手としているので、高速な応答性の必要がない。リアルタイム用のOSのように割り込み抑止区間を細かく区切る方式は、OSの設計が難しいだけでなく、処理のスループットが低下する。そこで、事務処理用OSには、長い時間、割り込み抑止のまま処理を実行する部分が存在することが多い。このままでは、リアルタイム制御には使用できない。
【0008】
そこで、事務処理用OSとリアルタイム用OSを同一の計算機上で動作させ、優れたインタフェースとリアルタイム応答性を両立させる技術が開発されている。
【0009】
しかし、現在、主流となっているパーソナルコンピュータ用事務処理OSはリトルエンディアンで動作し、一方、リアルタイム処理用のオペレーティングシステムはビッグエンディアンで記述されているものが多い。現在、上記の2つの
OSを同一の計算機上で動作させる技術では、エンディアンの異なるOSを同一計算機上で動作させることはできていない。
【0010】
特開平8−234781 号公報には、単一の計算機上でビッグエンディアンOSとリトルエンディアンOSの両方のOSを実行する技術について開示されているが、同時に実行するものではなく、立ち上げ時にどちらかのエンディアンが選択されるものである。
【0011】
特開平8−278918 号公報は、両エンディアンのタスクを実行できるが、オペレーティングシステムは実行できない。ここで、タスクとオペレーティングシステムでは、プログラムとして大きく異なることに注意しなければならない。大きな違いの1つは、タスクのプログラムには外部機器からの割り込み処理が含まれていないことである。OSの重要な仕事の1つが割り込み処理である。特開平8− 278918号に記載の技術では、オペレーティングシステムが1つであることから、割り込み処理プログラムは、このオペレーティングシステムのエンディアンで実行されることとなる。
【0012】
もう1つの違いは、タスクにはスケジューラが含まれていないことである。スケジューラとはタスクの実行順序を決定する手段であり、タスク自体には含まれていない。2つのOSを同一計算機上で実行するには、この2つのスケジューラを協調させることが必要となるが、特開平8−278918 号公報の技術ではこのことが考慮されていない。
【0013】
【課題を解決するための手段】
本発明では異なったエンディアンで実行する複数のオペレーティングシステムと、それぞれのオペレーティングシステム上で動作する複数のタスクと、上記タスクの実行順序を管理するスケジューリングプログラムとを記憶する記憶装置と、演算を実行するプロセッサとを有する計算機システムであって、プロセッサは、スケジューリングプログラムによって決定されたオペレーティングシステムを実行するために、エンディアンを切り替える切替え部を有するよう構成して上記目的を達成できるようにしている。
【0014】
つまり、メモリに上位バイトから順に小さいアドレスに記憶するビッグエンディアンで実行されるオペレーティングシステムとメモリに下位バイトから順に小さいアドレスに記憶するリトルエンディアンで実行されるオペレーティングシステムとを同一のプロセッサで実行できるようにするために、スケジューリングプログラムで決定されたオペレーティングシステムがビックエンディアンの時は、メモリに上位バイトから順に小さいアドレスで書き込みまたは読み出しができるようにし、決定されたオペレーティングシステムがリトルエンディアンの時は、下位バイトから順に小さいアドレスで書き込みまたは読み出しができるようにプロセッサにバイト単位で入換えを行う変換回路を備えるようにしている。
【0015】
また本発明では、異なったエンディアンで実行可能な命令を格納した記憶装置と、異なったエンディアンで記憶装置にアクセスし、記憶装置から読み出した命令を実行する複数のプロセッサとを有する計算機システムであって、記憶装置は、複数のプロセッサが共通にアクセスすると共にエンディアンによって次に実行すべき命令が異なるようにした命令を有するよう構成している。
【0016】
つまり、ビッグエンディアンで実行するプロセッサとリトルエンディアンで実行するプロセッサとがあり、これらのプロセッサが実行するプログラムが共有メモリに格納されている場合には、それぞれのプログラムが異なる。
【0017】
つまり共有メモリにはビッグエンディアンで実行されるプログラムとリトルエンディアンで実行されるプログラムとが格納される。この場合、ビッグエンディアンを実行するプロセッサはビッグエンディアンで実行されるプログラムを、リトルエンディアンを実行するプロセッサはリトルエンディアンで実行されるプログラムをアクセスしなければならない。そこで、このメモリにはビッグエンディアンを実行するプロセッサとリトルエンディアンを実行するプロセッサとが共通にアクセスできる命令を格納する。そしてこの命令は、ビッグエンディアンのプロセッサに対してビッグエンディアンのプログラムへジャンプさせ、リトルエンディアンのプロセッサに対してはリトルエンディアンのプログラムへジャンプさせるようにする。これにより、共有メモリを使っても異なるエンディアンのプロセッサを実行することができる。
【0018】
また、上記のように共有メモリを使う場合、プロセッサからアクセスされるアドレスを変換するようにしてもよい。つまり、リトルエンディアンのプロセッサからはリトルエンディアンで実行されるプログラムに、ビッグエンディアンのプロセッサからはビッグエンディアンで実行されるプログラムにアクセスできるようにアドレス変換するようにする。
【0019】
更に、別にレジスタを設けておき、このレジスタに格納された値にしたがって、共有メモリへのアクセスを決定するようにしてもよい。
【0020】
【発明の実施の形態】
以下、本発明の説明を図1〜図41を用いて説明する。
【0021】
図1は本発明の一実施例を示す。CPU21はエンディアンを動的に切り替え可能となっている。この詳細については、図3で説明する。CPU21より上に記述されているものは、このCPU21上で動作するソフトウェアである。31がリトルエンディアンで記述されている事務処理用OS(TS−OS)のプログラムである。32はビッグエンディアンで記述されているリアルタイムOS(RT−OS)のプログラムである。それぞれのOS上で531〜532と533〜
534のタスクが実行される。それぞれのタスクはそれぞれ実行されるOSと同じエンディアンで記述されている。31や32のOSはハードウェアの構造に依存しないプログラムとなっており、ハードウェアに依存した部分は、33のハードウェア依存部に入っている。このハードウェア依存部は、TS−OS31と
RT−OS32を切り替えるOS切替プログラム521を持っている。OS切替えプログラム521は、TS−OSのスケジューラ62とRT−OSのスケジューラ17からの情報を元にOSを切り替える。また、233の割り込みラインから割り込みが入ると、OS切替えプログラム521内にある割り込みハンドラが全ての割り込みを最初に処理する。この割り込みハンドラで、割り込みがどちらのOSで処理すべき割り込みか判別し、OSを切り替える。OS切替え時に、
5211のエンディアン切替えプログラムがCPU21のエンディアンを切り替える。
【0022】
図45は、図1の計算機の状態遷移の概要を表している。561がTS−OSタスク実行中状態、562がTS−OS割り込みハンドラ実行中状態である。これら2つの状態にあるとき、TS−OS実行中であるという。一方、563は
RT−OSタスク実行中状態であり、564がRT−OS割り込みハンドラ実行中状態である。これら2つの状態にあるとき、RT−OS実行中であるという。TS−OSタスク実行中状態561のとき、TS−OSで処理すべき割り込みが受け付けられると(571)、TS−OS割り込みハンドラ実行中状態562に遷移する。ハンドラの実行が終了すると(572)、TS−OSタスク実行中状態561に戻る。TS−OSタスク実行中にRT−OSのタスクが実行可能となると(573)、RT−OSタスク実行中状態563に遷移する。RT−OSのタスクで実行可能なものがある限り、RT−OSのタスクが実行される。実行可能なRT−OSのタスクがなくなってはじめて(574)、TS−OSタスク実行中状態(561)に遷移する。TS−OSタスク実行中状態561,TS−OS割り込みハンドラ実行中状態562,RT−OSタスク実行中状態563のときに、RT−OSで処理すべき割り込みが受け付けられると(575,579,
578)、RT−OS割り込みハンドラ実行中状態564に遷移する。ハンドラの実行が終了し、実行可能なRT−OSのタスクがなければ、割り込みが受け付けられたときの状態に戻る(576,580)。実行可能なRT−OSタスクがあれば(577)、RT−OSタスク実行中状態563に遷移するRT−OSのリアルタイム応答性を保証するため、RT−OS実行中には、TS−OSの割り込みはマスクされている。このため、RT−OSタスク実行中状態563やRT−OS割り込みハンドラ実行中状態564からTS−OSの割り込みにより、
TS−OS割り込みハンドラ実行中の状態に遷移することはない。
【0023】
図2は計算機の構成を示したものである。CPU21はメモリ22に格納されているプログラムを実行する。メモリ22には、プログラムが使用するデータも格納されている。CPU21のメモリ22へのアクセスは、バス23を通して行われる。CPU21は、バス23を通して、ディスクコントローラ24にアクセスして、ディスク25のデータの読み書きを行うことができる。ディスクコントローラ24は、ディスクの読み書きが終了したことを知らせるため、バス23を通して、CPU21に割り込みを入れることができる。入出力部26は、リアルタイム制御が必要な外部機器へ制御信号を出力したり、外部機器からの信号を入力するために使用される。261が入力線であり、262が出力線でる。入力線261がオンになったときに、入出力部26はバス23を通して、CPU21に割り込みを入れる。
【0024】
図3は図2のCPU21の構成を示したものである。アドレスバス231,データバス232,割り込みライン233は、図2のバス23の一部である。このCPU21は、3つのレベルの割り込みを持っている。割り込みライン233も、レベル毎に3本の線より構成されている。プログラムカウンタ217は、次に実行する命令が図2のメモリ22中に格納されているアドレスを覚えている。このアドレスをアドレスバス231に出力することにより、データバス232を通してメモリから命令を受け取る。411はバイトスワップ回路である。バイトスワップ回路411に関しては、図46で詳細に説明する。バイトスワップレジスタ412をセットすると、バイトスワップ回路411が反転状態となる。これにより、CPU21からのデータがデータバス232に反転して出力されるリトルエンディアンモードとなる。バイトスワップレジスタ412がリセットされると、バイトスワップ回路411が直結状態となり、CPU21がビッグエンディアンモードとなる。命令は、演算器211により実行される。212は汎用レジスタであり、命令実行の際にオペランドとして使用されることがある。割り込みコントローラ216が割り込みライン233から来る割り込み要求の制御を行う。ステータスレジスタ213は、CPU21の状態を表すレジスタであり、演算器211により読み書き可能である。ステータスレジスタ213の中には、割り込み要求を抑止する働きをするビットがある。割り込みが抑止されているときには、割込み要求が来ても、その割り込みに対応する処理が行われない。割り込みの抑止が解除された時点で割り込み処理が行われる。割り込み要求レジスタ215は、割り込みが入ったときに、その割り込みの種類が割り込みコントローラ216によって書き込まれるレジスタである。ベクタレジスタ214は、メモリ内の割り込みベクタテーブルのアドレスが入るレジスタである。割り込みが入ったときに、割り込みコントローラ216が、ベクタレジスタ214のアドレスの割り込みベクトルテーブルを検索し、そこに書かれた割り込み処理プログラムのアドレスをプログラムカウンタ217にセットする。タイマ218は、設定した時間毎に、割り込みコントローラ216宛に割り込みを要求する。
【0025】
図46は、図3のバイトスワップ回路411の構成を示したものである。232が図3のデータバスに相当する。データバス232は、バッファ591と592によって入力データバス2321と出力データバス2324に分けられる。データバスの入力と出力は、593の書き込み制御線により切り替えられる。データバスのライン数は32本である。2321(31−24)は2321の31ビット目から24ビット目までのラインを示している。他も同様である。601〜
604と611〜614はセレクタである。図3のバイトスワップレジスタ412から来ているバイトスワップライン4121がオンになると、右側の入力ラインの値が出力ラインに出力され、オフのときには左側の入力線が出力される。これにより、バイトスワップレジスタ412がセットされているときには、入力データバス2321のバイト順が反転して、2322の演算機入力ラインに出力され、2323の演算機出力線も反転して、出力データバス2324に出力される。バイトスワップレジスタ412がセットされていないときには、そのままのバイト順でデータが受け渡される。
【0026】
図4は、図3の割り込み要求レジスタ215の詳細である。2151〜2153は、それぞれレベル1〜レベル3の割り込みが入ったときにオンになるビットである。
【0027】
本実施例においては、ディスクコントローラからの割り込みレベルを1、入出力部からの割り込みレベルを2、タイマからの割り込みレベルを3としている。図5は、図3のステータスレジスタ213の詳細である。割り込み要求を抑止する働きをする割り込み抑止ビット2131〜2132がある。割り込み抑止ビットは、二進数で4つの割り込み要求レベルを表している。割り込み抑止ビットが表すレベル以下の割り込み要求は抑止される。また、割り込みが入ったときには、その割り込みのレベルに割り込み抑止ビットが設定され、後から入ってくる割り込みが設定されたレベル以下の場合には、その割り込みが抑止される。
【0028】
図6は図2の入出力部26の詳細構成である。この部分は、リアルタイム制御が必要な外部機器を制御するために使用される。261が入力線であり、外部機器の状態を取り込む。262が出力線でり、外部機器に制御信号を出力する。入力線261は、オア回路264に接続されている。ここでは、オア回路264の出力は、バスの割り込みライン233のレベル2の割り込みラインに接続されている。入力線261のいずれかがオンになると、CPUに割り込みが要求される。入力線261は、ラッチ263にも入力されており、入力線261の状態が保存される。このラッチの内容は、アドレスバス231でアドレスを指定することにより、データバスより読み出し可能である。デコーダ265は、アドレスバス231のアドレスをデコードして、読み書きするラッチを選択する。ラッチ266は出力線262の出力を保持する。アドレスバス231にアドレスを設定することにより、データバスの内容をラッチする。
【0029】
図7は図2のディスクコントローラ24の詳細構成を示したものである。セクタレジスタ242は、読み書きするディスク上のセクタを指定するレジスタである。データバッファ243には、ディスクに書き込んだり、ディスクから読み出したデータが入る。セクタレジスタ242,データバッファ243は、アドレスをアドレスバス231に与えることにより、データバス232からアクセス可能である。アドレスはデコーダ241により、デコードされる。アクセス終了通知線244,セクタ指定線245,データ線246は、図2のディスク25につながっている。アクセス終了通知線244は、ディスクのアクセスが終了した時点でオンとなる。この線はバス23の割り込みライン233に接続されており、オンになったときに割り込み要求がCPU21に送られる。この割り込みのレベルは1である。セクタ指定線245は、アクセスするセクタをディスクに知らせる線であり、データ線は、ディスクに対して読み書きするデータを流す線である。図8は図2のメモリ22の内容の詳細である。メモリ22は、3つの部分よりなる。TS−OS31は、リアルタイム性が考慮されていない事務処理用のOSのプログラム及びデータである。RT−OS32は、リアルタイム処理を行う
OSのプログラム及びデータである。ハードウェア依存部33は、OSからハードウェアに依存したプログラム及びデータを抽出したものである。近年のOSの多くは、ハードウェア間の移植性を向上させるため、このようにハードウェア依存部を独立させた構成になっている。本実施例では、この部分を改造することにより、2つのOSを切り替えつつ並行に実行可能にしている。TS−OS31のうち、311はTS−OSのプログラムである。312は、ディスク25から読み込んだデータが入るバッファ3131〜3132が接続されるバッファキューである。RT−OS32のうちのランキュー321は、実行可能状態にあるタスクのタスクテーブル3261〜3262がつながるキューである。タスクテーブルは、図10でその詳細を説明する。スリープキュー322は、イベント待ちでブロックしているタスクのタスクテーブル3263〜3264がつながるキューである。リスケジューリングフラグ323は、RT−OSのリスケジューリングが必要であることを表すフラグである。RT−OSプログラム325は、RT−OSのプログラムである。このプログラムの詳細は後述するが、このプログラムの中には、RT−OSのタスクの実行順序を決定するスケジューラ62が含まれる。カーネルスタック3271〜3274はタスクテーブル3261〜3264のタスクが使用するスタック領域である。ハードウェア依存部33のうち、OS状態331は、TS−OS31とRT−OS32のどちらのOSを実行していたかを記憶する領域である。割り込みテーブル332は、割り込みが入った時に
TS−OS31とRT−OS32、それぞれ、どのような処理を行うかを記したテーブルである。割り込みテーブル332に関しては、図9で詳しく説明する。SIRQL335は、TS−OS31への割り込み抑止をソフトウェア的に行うための変数である。TS−OS31は、リアルタイム処理を考慮していないため、割り込みを長時間禁止したまま処理を行うことがありえる。このような状況でも、RT−OS32が割り込みに応答できるようにしなければならない。このことは、
TS−OS31の割り込み禁止をハードウェア的にではなく、ソフトウェア的に行うことにより実現する。SIRQL335の値以下のレベルの割り込みは、ハードウェアからは入るが、ソフトウェア的に保留される。保留された割り込みの情報は、保留キュー334に保存される。保留キューには、保留割り込みテーブル3411〜3412がつながる。336から339は、タイマ割り込みを2つのOSに割り振るために使用する変数である。TS周期336はTS−OS31が必要とするタイマ割り込みの周期である。RT周期は、RT−OSが要求するタイマ割り込み周期である。図3の218のようにハードウェアのタイマは1つであるが、これをソフトウェアにより、両OSにそれぞれ自分の固有のタイマがあるように見せる。TS−OS退避領域344とRT−OS退避領域342は、OSを切り替えたときに今まで実行していたOSのレジスタの状態を退避するための領域である。TS−OS退避領域344にはTS−OSのレジスタが退避され、RT−
OS退避領域342にはRT−OSのレジスタが退避される。Lベクタテーブル3431とBベクタテーブル3432は、割り込みが入った時にジャンプする先を設定したテーブルである。プロセッサがリトルエンディアンで実行されているときと、ビッグエンディアンで実行されているときでは、割り込みハンドラのアドレスが異なることと、ベクタテーブル自身を記述するエンディアンも異なることから、それぞれのエンディアンで別々のベクタテーブルを使用する。リトルエンディアンのときにはLベクタテーブル3431を使用し、ビッグエンディアンのときにはBベクタテーブル3432を使用する。これらのベクタテーブルの内容に関しては図52と図53で説明する。図3のベクタレジスタ214は、このテーブルのアドレスが入るように設定する。共有データ345は、TS−OS31とRT−OS32の両方からアクセスされるデータである。ハードウェア依存部プログラム340の詳細は後で述べる。
【0030】
図52は、図8のLベクタテーブル3431の内容の一例を示したものである。このベクタテーブルは、CPU21がリトルエンディアンで動作しているときに使用されることになるテーブルである。34311の列は割り込みレベル、
34312の列は各割り込みレベルに対応する割り込みハンドラのアドレスが記述されている。割り込みハンドラのアドレスは、34313〜34314のように通常、Lハンドラ関数のアドレスを設定する。ただし、34315のタイマ割り込みのレベルに関しては、両OS間でタイマを共有する必要上、Lタイマハンドラという特別なハンドラを使用する。Lハンドラのアルゴリズムは図40、Lタイマハンドラのアルゴリズムは図49で説明する。
【0031】
図9は図8の割り込みテーブル332の詳細である。3321の列は割込みレベル、3322の列はRT−OS33の割り込みに対するハンドラプログラムのアドレス、3323の列はTS−OS32のハンドラプログラムのアドレスである。3324の行は割り込みレベル1の割り込みが入った時、RT−OSには知らせる必要がないが、TS−OSではDISK_END関数を実行することを示している。このように割り込みを片方のOSに通知することも可能であるし、3326行のように両方のOSのハンドラを実行することも可能である。
【0032】
図10は図8のタスクテーブル3261の詳細である。Nextポインタ32611 は、タスクテーブルを図8のランキュー321やスリープキュー322に接続するためのリンク用ポインタである。優先度領域32612はタスクを実行する優先度が入る領域である。RT−OSが実行するタスクを選択するとき、優先度の最も高いタスクを選ぶ。ブロックチャネル領域32613は、タスクがあるイベントの発生を待ってブロックするとき、そのイベントの種類が入る領域である。スタック32614はタスクが使用するスタックのアドレスを記憶する。
【0033】
図11は図8の保留割り込みテーブル3411の詳細である。Nextポインタ
34111は保留割り込みテーブルを保留キュー334に接続するためのリンクポインタである。IRQL34112は、保留されている割り込みのレベルを記憶する。
図12はハードウェア依存部プログラム340の1つであるRaiseIRQL 関数
12である。この関数は、TS−OS31が割り込みを抑止するために呼ぶ関数である。この関数は、図21のバッファリードのアルゴリズムの中などでバッファキューの排他制御などに使用される。この関数は、RT−OSの割り込みまで禁止してしまわないよう、実際にはハードウェアのステータスレジスタ213の割り込み抑止ビットを書き換えず、メモリ22中のSIRQL335を書き変えるのみである(121)。
【0034】
図13はハードウェア依存部プログラム340のプログラムの1つである LowerIRQL 関数13である。この関数は、TS−OS31が割り込みを抑止を解除するために呼ぶ関数である。この関数は、図21のバッファリードのアルゴリズムにあるように図12のRaiseIRQL 関数12と対で使用されることが多い。引数として割り込みレベルを指定し、このレベルより大きい割り込みが許可される。この関数も、ハードウェアのステータスレジスタ213の割り込み抑止ビットを書き換えず、メモリ22中のSIRQL335を書き変える(131)。保留INT処理14で保留されている割り込みをTS−OSに通知する。
【0035】
図14は図13の保留INT処理14のフローチャートである。この関数は、ハードウェア依存部プログラム340の一部である。141で保留キューに SIRQL335より割り込みレベルIRQLが高い割り込み保留テーブルがあるか判定する。テーブルがない場合には終了する(144)。ある場合には、その中で
IRQLが最大のテーブルを選択する(142)。その割り込みレベルについて、割り込みテーブル332で指定されているTS−OS用のハンドラ関数を実行する(143)。以上を繰り返す。
【0036】
図40はTS−OS実行中、すなわち、プロセッサがリトルエンディアンになっているときに、タイマ割り込み以外の割り込みが入ったときに最初に実行されるLハンドラである。この関数のアドレスは、図52のLベクタテーブル3431に登録されている。この関数もハードウェア依存部プログラム340のプログラムの1つである。102でCPU21にある汎用レジスタ212などの内容をメモリ内のスタックに退避する。これは、割り込み前のプログラムが使用していたレジスタの内容を割り込みハンドラが破壊するのを防ぐためである。103で割り込みテーブル332を調べて、入った割り込みのレベルのハンドラがRT−OSについて登録されているか調べる。登録されている場合には、RTハンドラ15を呼ぶことになるが、RTハンドラはRT−OSのプログラムなので、呼ぶ前に、51によってOSをRT−OSに切り替える。RT−OS切り替えのアルゴリズムは、図50で説明する。そして、RTハンドラからリターンした後には、
52でOSをTS−OSに戻す。TS−OS切り替え51のアルゴリズムは、図51で説明する。105でTS−OS用にハンドラが登録されているか調べる。登録されており、割り込みレベルがSIRQL335以下(107)の場合は割り込みが保留される(19)。割り込みレベルがSIRQLより大きかった場合には、
113でSIRQL335を割り込みのレベルに設定してソフトウェア的な割り込み抑止をした後、114でステータスレジスタ213を割り込み前の値に戻して、ハードウェアの割り込み抑止を解除する。14では、保留INT関数14を呼び出して保留中の割り込みの処理をする。これは、ここまでの処理の間により高いレベルの割り込みが入り、しかも、その割り込みがTS−OS宛だったときに、その処理が保留されている可能性があるためである。次に110で、割り込みテーブル332に登録されているTS−OS用ハンドラの関数を呼び出す。最後に102で退避したレジスタを回復する(111)。
【0037】
図47はRT−OS実行中、すなわち、プロセッサがビッグエンディアンになっているときに、タイマ割り込み以外の割り込みが入ったときに最初に実行されるBハンドラである。この関数のアドレスは、図53のBベクタテーブル3432に登録されている。この関数もハードウェア依存部プログラム340のプログラムの1つである。731でCPU21にある汎用レジスタ212などの内容をメモリ内のスタックに退避する。これは、割り込み前のプログラムが使用していたレジスタの内容を割り込みハンドラが破壊するのを防ぐためである。732で割り込みテーブル332を調べて、入った割り込みのレベルのハンドラがRT−OSについて登録されているか調べる。登録されている場合には、RTハンドラ15を呼ぶことになる。105でTS−OS用にハンドラが登録されているか調べる。登録されている場合は割り込みが保留される(19)。これは、RT−OSの実行をTS−OSの実行によって阻害しないためである。最後に731で退避したレジスタを回復する(736)。
【0038】
図50は、OSをRT−OSに切り替えるRT−OS切替え70のアルゴリズムである。このプログラムは、図1や図8のOS切替え521の中にある。701で今まで実行していたTS−OSのレジスタの内容を図8のTS−OS退避領域344に退避する。これは、後でTS−OSに戻ったときに処理を続行できるようにするためである。702で図3のベクタレジスタ214をビッグエンディアン用のベクタテーブルであるBベクタテーブル3432のアドレスに設定する。703で実行中のOSの種類を記憶する図8のOS状態331にRT−OSであることを設定する。51で図41のプロセッサをビッグエンディアンに設定する関数を実行する。705で図8のRT−OS退避領域342からレジスタを回復する。
【0039】
図51は、OSをTS−OSに切り替えるTS−OS切替え71のアルゴリズムである。このプログラムも、図1や図8のOS切替え521の中にある。この関数は、図50のRT−OS切替えと対称的な動作をする。711でレジスタの内容をRT−OS退避領域342に退避する。712でベクタレジスタ214をLベクタテーブル3431のアドレスに設定する。713でOS状態331に
TS−OSを設定する。52で図42のプロセッサをリトルエンディアンに設定する関数を実行する。715で図8のRT−OS退避領域344からレジスタを回復する。
【0040】
図41は、図50の51のCPUをビッグエンディアンに設定するルーチンのアルゴリズムである。この関数は、図1のエンディアン切替え5211の中にある。511で図3のバイトスワップレジスタ412をリセットしている。これにより、図3のバイトスワップ回路が直結の状態になりCPU21とデータバス
232の間でデータの反転は行われなくなる。
【0041】
図42は、図51の52のCPU21をリトルエンディアンに設定するルーチンである。この関数は、図1のエンディアン切替え5211の中にある。図41のルーチンでリセットしたバイトスワップレジスタをセットしている。
【0042】
図15は図40と図47の中のRTハンドラ15のフローチャートである。このプログラムはRT−OSプログラム325の1つであり、RT−OS宛の割り込みの処理を行う。151でレジスタの内容をメモリ内のスタックに退避する。152で、割り込みテーブル332に登録されているRT−OS用ハンドラの関数を呼び出す。153でステータスレジスタ213の割り込み抑止ビットを0にして、すべての割り込みを許可する。割り込み抑止ビットは、割り込みが入った時点で、その割り込みのレベルに設定されている。154でリスケジューリングフラグ323を調べてリスケジューリングが必要か調べる。これは、152で実行した関数内などで、新たにタスクが実行可能になっている可能性があるからである。リスケジューリングの必要がある場合には、図16のスケジューラ17を実行する。最後に、退避したレジスタを回復する。
【0043】
図16は、図15のスケジューラ関数17のフローチャートである。このプログラムは、図1のスケジューラ17に相当する。171で図8のランキュー321にタスクテーブルが接続されているか調べている。これは、実行可能なRT−
OSタスクが存在するか調べている。ない場合には、処理をTS−OSに戻すためにTS−OS切替えを実行する(172)。これは、図45の574の遷移に相当し、図1のスケジューラ17からOS切替え421への通知に相当する。ランキューにタスクテーブルがある場合には、タスクテーブル中の優先度(図10の優先度32611)が最も高いタスクテーブルを選択する。174で現在実行中のタスクのレジスタを実行中のタスクのスタックに退避し、175で選択したタスクのスタックからレジスタを回復する。これにより、新たに選択されたタスクの処理が開始される。
【0044】
図17は、図9で割り込みレベルの2が入ったときにRT−OSで呼ばれるよう設定されている関数の一例である。この関数は、図15の152で呼ばれることになる。レベル2の割り込みは、図2の入出力部26からの割り込みになっている。そこで、この割り込みの処理は、制御機器から入力を待っているタスクを実行可能にすることになる。181で、ブロックチャネル32613が‘123’であるタスクテーブル3263〜3264をスリープキュー322から探す。
【0045】
182で、そのタスクテーブルをランキュー321に入れる。新しいタスクが実行可能となったのでリスケジューリングが必要となる。よって、183でリスケジューリングフラグ323をオンにする。
【0046】
図18は、図40の保留関数19のフローチャートである。この関数は、RT−OS実行中か、TS−OSが割り込み抑止をしている間に入ったTS−OS宛の割り込みを保留する。この関数は、ハードウェア依存部プログラム340の1つである。191で新規に保留割り込みテーブル3411〜3412のエントリを割り当てる。192で保留割り込みテーブルのIRQL34112 に割り込みのレベルを入れる。193で保留割り込みテーブルを保留キュー334に入れる。
【0047】
図19は、RT−OSのタスクが、イベントの発生を待つときや、終了するときに呼ぶブロック関数40である。この関数は、RT−OSプログラム325の1つである。401で、現在実行中のタスクのタスクテーブルを図8のスリープキュー322に入れる。17で、図16のスケジューラを実行し、次に実行するタスクを選択する。実行するタスクがないときには、TS−OSに処理を戻す。図20は、図9で割り込みレベルの1が入ったときにTS−OSで呼ばれるよう設定されている関数の一例である。この関数は、図40の110または図14の143で呼ばれることになり、TS−OSプログラム311の1つである。この割り込みは、ディスク25の読み出しが終了したことをCPU21に知らせる割り込みである。411で新規にバッファ3131を獲得し、412でディスクコントローラ24のデータバッファ243からデータをコピーする。そして、バッファ3131をバッファキュー312に接続する。
【0048】
図21はTS−OSプログラム311の内、割り込みを抑止しなければならないプログラムの例である。バッファ3131からデータの読み出しを行う。バッファ3131は、割り込みハンドラである図20のプログラム41からもアクセスされるので、割り込みを抑止してアクセスする必要がある。そこで、 RaiseIRQL 関数12で割り込みを抑止した後、421でバッファ3131をバッファキュー312から外す。LowerIRQL 関数13で割り込みを許可して、422でバッファのデータをリードする。ただし、図12にある通り、RaiseIRQL 関数12は、ソフトウェア的にTS−OS宛の割り込みを抑止しているだけなので、RT−OS宛の割り込みは受け付けられる。
【0049】
図22は、RT−OSがタイマ割り込みの周期を設定するときに呼ぶ関数のアルゴリズムである。この関数は、ハードウェア依存部プログラム340の1つである。ハードウェアのタイマ218が1つしかない計算機においても、2つの
OSに独立に周期タイマを提供できるようになっている。431でリアルタイム周期337に新しい周期を設定する。432でTS周期336とリアルタイム周期337を比較し、リアルタイム周期が長い場合には、残時間338にリアルタイム周期337を設定し、434でTS周期336をハードウェアのタイマ218に設定する。リアルタイム周期337がTS周期336以下だった場合は、逆に、435でTS周期336を残時間338に設定し、436でリアルタイム周期337をタイマ218に設定する。最後に437で半端時間437をクリアする。
【0050】
図23は、TS−OSがタイマ割り込み周期を設定するときに呼ぶ関数である。441でTS周期に新しい周期を設定している以外は、図22と同じである。図48は、TS−OS実行中、すなわち、プロセッサがリトルエンディアンになっているときに、タイマ割り込みが入ったときに実行されるLタイマハンドラ関数である。この関数のアドレスは、図52のLベクタテーブルの中の34315 に入っている。631でスタックへのレジスタの退避を行う、図24のタイマハンドラ45を呼び出す必要があるが、タイマハンドラ45は、RT−OSとTS−OSで共通に使用される関数であるが、ここではビッグエンディアンで記述されていると仮定する。そこで51でプロセッサをビッグエンディアンに設定した後に実行する。実行終了後は、エンディアンを52でリトルエンディアンに戻す。最後に退避したレジスタを回復する。
【0051】
図49は、図48と同様なハンドラであるがRT−OS実行中にタイマ割り込みが発生したときに実行される関数である。RT−OSはビッグエンディアンで実行されるので図48のように途中でエンディアンを切り替える必要がない。
【0052】
図24は、タイマ割り込みが入った時の割り込みハンドラである。この関数は、ハードウェア依存部プログラム340の1つである。451でTS周期336とリアルタイム周期337を比較し、リアルタイム周期337の方が長い場合には、TS周期小関数46を実行し、そうでない場合には、RT周期小関数48を実行する。
【0053】
図25は、図24のTS周期小関数のアルゴリズムである。461で半端時間339が0か調べる。半端時間339はリアルタイム周期が終了した時点でTS周期終了までの時間である。半端時間339が0以外のときは、462で半端時間339をタイマ218に設定する。リアルタイム周期は終了しているので、
463でリアルタイムタイマハンドラ関数を呼ぶ。464で残時間338に(リアルタイム周期337−TS周期336)を設定する。残時間338は、次にタイマ割り込みが発生したときにリアルタイム周期終了までの時間である。465で半端時間339を0とする。461で半端時間が0の場合は、466で残時間338を調べる。残時間338が0の場合は、リアルタイム周期が終了しているので467でリアルタイムタイマハンドラ関数を実行し、468で残時間をリアルタイム周期とする。このとき、TS周期も終了している473でTSタイマハンドラ関数を呼ぶ。466で残時間338があるときには、469で残時間338からTS周期を減じる。470で、減じた結果をTS周期と比較し、短い場合には、471で半端時間339に(TS周期336−残時間338)を設定し、残時間338をハードウェアのタイマ218に設定する。この場合もTS周期は終了しているので、473でTSタイマハンドラ関数を呼ぶ。ただし、TSタイマハンドラはTS−OSの一部なので71でTS−OSにOSを切り替えた後に呼び、呼んだ後に70でOSを元のRT−OSに戻す。
【0054】
図26は、図24のRT周期小関数のアルゴリズムである。アルゴリズムは、RT−OSとTS−OSの関係が逆転しているだけで、図25と同様である。
【0055】
図27は、本発明の別の実施例を示したものである。図1の構成では、1つのCPU上でリトルエンディアンOSとビッグエンディアンOSを切り替えつつ実行していた。一方、図27では、CPUを2つ用いている。21−2のCPUはリトルエンディアンの事務処理用OS(TS−OS)31を実行するためのものである。このCPUのエンディアンはリトルエンディアンに固定されている。
【0056】
21−1のCPUは、ビッグエンディアンのRT−OS32を実行する。この
CPUのエンディアンはビッグエンディアンに固定されている。531〜532のタスクは、TS−OS31のタスクであり、533〜534はRT−OS32のタスクである。CPU21−1と21−2は共有メモリ80を共有している。図では、OS31〜32やタスク531〜534が共有メモリ80の外に記述されているが、これらのプログラムやデータが共有メモリの中に存在しても差し支えない。
【0057】
図28は、マルチプロセッサ計算機の構成の例である。21−1と21−2の2つのCPUがバス23に接続されている点が異なっている。21−1のCPUがRT−OSを専用に実行し、21−2のCPUがTS−OSを専用に実行する。メモリは80−1のROMと80−2のRAMに分かれている。両メモリとも両CPUと共有されている。CPU21−1はビッグエンディアンモードで実行され、CPU21−2はリトルエンディアンモードで実行される。レジスタ55は両CPUからアクセス可能である。このレジスタは、32ビットであり、ビッグエンディアンのCPUから見て0x00000001の値を持っている。リトルエンディアンのCPUは、レジスタの内容を反転して読むので0x01000000の値を読み込む。両CPUは、リセット後、ROM80−1内のプログラムを実行する。
【0058】
図29は、図28のROM80−1の内容である。図28のCPU21−1とCPU21−2は、リセット後にこのROM80−1のアドレス0から実行を開始する。図ではROMの内容はビッグエンディアンのCPUが呼んだ場合の値となっている。0番地の0400000Cは命令としては、現在実行中の命令のアドレス+0x0Cの番地にジャンプしなさいという命令である。したがって、ビッグエンディアンのCPU21−1は、0番地の命令を実行した次は、10番地の命令を実行する。一方、リトルエンディアンのCPU21−2は、同じ0番地の命令を読み込んでも0c000004という命令を読み込む。この命令はレジスタ0の内容をレジスタ12にロードする命令である。したがって、このCPUは、次に4番地の命令を実行する。このようにすることにより、ビッグエンディアンのCPUとリトルエンディアンのCPUで実行の経路を分けることが可能となる。4〜C番地にはリトルエンディアンで意味を持つ命令が入っており、この部分で分岐命令を実行してリトルエンディアンのOSへ分岐する。10番地以降には、ビッグエンディアンのOSのプログラムが入っている。
【0059】
図30は、図28のROM22−1別の実施例である。図28ではCPU21−2とCPU21−2で同じROMの部分がアクセスされるようになっていたが、図30では別々の部分がアクセスされる。23はバスである。232はデータバスである。231はアドレスバスである。アドレスバス231は最上位のアドレスライン以外、ROMのアドレスラインに直結されている。234のラインは、ROMへの読み出しのリクエストがCPU21−2から来ているのかCPU21−1から来ているのかを示すCPU判別ラインである。CPU21−2から来ているとき1となる。アドレスバスの最上位のライン231−1は、CPU判別ライン234と排他論理輪回路235を通ってROM80−1のアドレスラインに接続されている。
【0060】
図31は、図30のROMを用いたときの2つのCPUから見たメモリマップを示している。541がCPU21−1のメモリマップである。CPU21−1からROMを見るとROM−0の領域5411がマップの先頭に来ている。一方、CPU21−2から見るとROM−1の領域5421が先頭に来る。ROM−0の領域とROM−1の領域には、同じプログラムがROM−0にはビッグエンディアンのフォーマットで、ROM−1の領域にはリトルエンディアンのフォーマットで入っている。
【0061】
図43は、図31のROM−0およびROM−1領域に入っているCPU21−1およびCPU21−2のリセット後実行されるプログラムである。561で図28のレジスタ55を読んで、その値が1であるか判断している。ビッグエンディアンのCPU21−1は、このレジスタ55を読むと1を読み取るので563でRT−OSにジャンプする。一方、リトルエンディアンのCPU21−2は、レジスタ55の値が0x01000000に読めるので、562でTS−OSにジャンプする。
【0062】
図44は、図43でレジスタ55を使用した代わりにROM80−1上に記憶されたフラグを用いた例である。図43とまったく同様の方法でビッグエンディアンとリトルエンディアンのCPUで動作を分離することが可能である。
【0063】
図32は、ステータスレジスタの構成例である。図32のマルチプロセッサ計算機の2つのCPU(21−1と21−2)は、図3のCPUと同様の構成であるが、213のステータスレジスタの構成が、図5の構成と異なっている。図5のステータスレジスタでは、割り込み抑止ビット(2131〜2132)が2進数の値を表しており、この値以下のレベルの割り込みが抑止されていたが、図
32のステータスレジスタは、割り込みレベルそれぞれに対応した割り込み抑止ビット(2134〜2136)が存在する。各ビットがセットされているときに、それに対応したレベルの割り込みが抑止される。
【0064】
図33は、RT−OSを実行する図31のCPU21−1のステータスレジスタ213−1の状態である。このCPUは、2134−1のビットのみがセットされており、レベル1の割り込みのみがマスクされている。
【0065】
図34は、TS−OSを実行する図31のCPU21−2のステータスレジスタ213−2の状態である。このCPUは、2135−2のビットのみがセットされており、レベル2の割り込みのみがマスクされている。
【0066】
図35は、図31のメモリ22の内容である。ベクタテーブルがCPU毎に2つ(343−1と343−2)設けられている。ベクタテーブルは、割り込みが入ったときに実行するプログラムのアドレスが入っているテーブルである。RT−OSを実行する図31のCPU21−1が、ベクタテーブル343−1を使用し、TS−OSを実行する図31のCPU21−2がベクタテーブル343−2を使用する。それぞれのCPUの図3のベクタレジスタ214が、それぞれのベクタテーブルのアドレスを指すことになる。ベクタテーブルには割り込みレベル毎に飛び先のアドレスが入っている。343−1のベクタテーブルはレベル1の割り込みの飛び先が0になっており、この割り込みは無効であることを示している。レベル2とレベル3の飛び先は、いずれもRT−OS32のプログラム325の中の関数になっている。343−2のベクタテーブルはレベル2の割り込みの飛び先が0になっており、この割り込みは無効であることを示している。レベル1とレベル3の飛び先は、いずれもTS−OS31のプログラム311の中の関数になっている。図8にあったOS状態331,割込みテーブル332, SIRQL335,保留キュー334,TS−OS退避領域344,RT−OS退避領域342,タイマ関係の領域336〜339などは、単一のプロセッサで2つの
OSを実行するために必要な機構のため、図35では必要なくなっている。また、マルチプロセッサ構成では、割込みを禁止したのみでは、共有データ347の排他制御ができないので、排他制御用のロック347が図35に加わっている。
図36は、図31のマルチプロセッサ構成のときの図12のRaiseIRQL 関数
12である。本構成では、SIRQL335を書き換える代わりに、自分のCPUのステータスレジスタ(213−1または213−2)をセットしている。
【0067】
図37は、図31のマルチプロセッサ構成のときの図13のLowerIRQL 関数
13である。本構成では、自分のCPUのステータスレジスタ(213−1または213−2)をクリアするのみである。
【0068】
図38は、図31のマルチプロセッサ構成のときの図15のPIO_ON関数15である。図2の構成では、入ってきた割り込みを2つのOSに割り振る必要があったが、マルチプロセッサ構成では、各CPUが別々のOSを実行しており、ステータスレジスタの設定に従って、必要な割り込みの処理を行う。このため、割り込みの処理は、通常のOSの割り込み処理と同じである。102でレジスタの内容を退避した後、割り込み本体の処理を行う。ここでは、図17で行っていた処理内容181〜183の処理を行っている。111で退避しておいたレジスタの内容を回復し、162でリターンする。
【0069】
図31のマルチプロセッサ構成のときのブロック関数40は図19と同じである。ただし、スケジューラ17は、図39のようになる。図16と比較すると、図16ではランキューが空のときには、172でTS−OSに処理を戻していたが、図39では、ループして待つ。
【0070】
【発明の効果】
本発明によれば、エンディアンの異なるオペレーティングシステムを切り替えつつ同一プロセッサ上で並行して実行可能である。
【図面の簡単な説明】
【図1】ソフトウェア構成を示した図である。
【図2】計算機の構成を示した図である。
【図3】CPUの構成を示した図である。
【図4】割込み要求レジスタの構成を示した図である。
【図5】ステータスレジスタの構成を示した図である。
【図6】入出力部の構成を示した図である。
【図7】ディスクコントローラの構成を示した図である。
【図8】メモリの内容を説明するための図である。
【図9】割り込みテーブルの構成を示した図である。
【図10】タスクテーブルの構成を示した図である。
【図11】保留割り込みテーブルの構成を示した図である。
【図12】割り込み抑止関数のアルゴリズムを示した図である。
【図13】割り込み許可関数のアルゴリズムを示した図である。
【図14】保留割り込みの許可関数のアルゴリズムを示した図である。
【図15】RT−OSの割り込みハンドラを示した図である。
【図16】スケジューラのアルゴリズムを示した図である。
【図17】入出力機器からの割り込みハンドラを示した図である。
【図18】割り込みを保留する関数を示した図である。
【図19】ブロック関数を示した図である。
【図20】ディスクアクセス終了割り込みハンドラを示した図である。
【図21】TS−OSの割り込みを抑止するプログラムを示した図である。
【図22】RT−OSのタイマ周期設定関数を示した図である。
【図23】TS−OSのタイマ周期設定関数を示した図である。
【図24】タイマ割り込みハンドラを示した図である。
【図25】タイマ割り込みでTS周期がリアルタイム周期より短い場合の処理を示した図である。
【図26】タイマ割り込みでリアルタイム周期がTS周期より短い場合の処理を示した図である。
【図27】ソフトウェア構成を示した図である。
【図28】マルチプロセッサ計算機の構成を示した図である。
【図29】ROMの内容を説明するための図である。
【図30】ROMの構成を示した図である。
【図31】ROMのメモリマップを示した図である。
【図32】ステータスレジスタの構成を示した図である。
【図33】TS−OS用CPUのステータスレジスタの状態を示した図である。
【図34】RT−OS用CPUのステータスレジスタの状態を示した図である。
【図35】メモリの内容を示した図である。
【図36】割り込み抑止関数のアルゴリズムを示した図である。
【図37】割り込み許可関数のアルゴリズムを示した図である。
【図38】RT−OSの割り込みハンドラを示した図である。
【図39】ブロック関数を示した図である。
【図40】Lハンドラのフローチャートを示した図である。
【図41】ビッグエンディアンモード設定のアルゴリズムを示した図である。
【図42】リトルエンディアンモード設定のアルゴリズムを示した図である。
【図43】リセット処理のアルゴリズムを示した図である。
【図44】リセット処理の別のアルゴリズムを示した図である。
【図45】計算機の状態遷移を示した図である。
【図46】バイトスワップ回路の構成を示した図である。
【図47】Bハンドラのアルゴリズムを示した図である。
【図48】Lタイマハンドラのアルゴリズムを示した図である。
【図49】Bタイマハンドラのアルゴリズムを示した図である。
【図50】RT−OS切替えのアルゴリズムを示した図である。
【図51】TS−OS切替えのアルゴリズムを示した図である。
【図52】Lベクタテーブルの内容を示した図である。
【図53】Bベクタテーブルの内容を示した図である。
【符号の説明】
17,62…スケジューラ、21…CPU、22…メモリ、23…バス、24…ディスクコントローラ、25…ディスク、26…入出力部、31…TS−OS、32…RT−OS、33…ハードウェア依存部、55…CPU判別レジスタ、63…Lタイマハンドラ、64…Bタイマハンドラ、70…RT−OS切替え、71…TS−OS切替え、73…Bハンドラ、80…共有メモリ、211…演算器、212…汎用レジスタ、213…ステータスレジスタ、214…ベクタレジスタ、215…割り込み要求レジスタ、216…割り込みコントローラ、217…プログラムカウンタ、218…タイマ、231…アドレスバス、232…データバス、233…割り込みライン、241…デコーダ、242…セクタレジスタ、243…データバッファ、244…アクセス終了通知線、245…セクタ指定線、246…データ線、261…入力線、262…出力線、263…ラッチ、
264…オア回路、265…デコーダ、266…ラッチ、311…TS−OSプログラム、312…バッファキュー、321…ランキュー、322…スリープキュー、323…リスケジューリングフラグ、324…第2ハンドラアドレス、
325…RT−OSプログラム、331…OS状態、332…割り込みテーブル、334…保留キュー、335…SIRQL(ソフトウェアIRQL)、336…TS周期、337…リアルタイム周期、338…残時間、339…半端時間、340…ハードウェア依存部プログラム、342…RT−OS退避領域、344…TS−OS退避領域、345…共有データ、346…OS状態カウンタ、347…ロック、411…バイトスワップ回路、412…バイトスワップレジスタ、
521…OS切替えプログラム、531〜534…タスク、561…TS−OSタスク実行中状態、562…TS−OS割り込みハンドラ実行中状態、563…RT−OSタスク実行中状態、564…RT−OS割り込みハンドラ実行中状態、591〜592…バッファ、2131〜2136…割り込み抑止ビット、3121〜3122…バッファ、3261〜3264…タスクテーブル、3271〜3274…カーネルスタック、3411〜3412…保留割り込みテーブル、3431…Lベクタテーブル、3432…Bベクタテーブル、4121…バイトスワップライン、5211…エンディアン切り替えプログラム。
Claims (3)
- 異なった複数のオペレーティングシステムと、上記それぞれのオペレーティングシステム上で動作する複数のタスクと、上記タスクの実行順序を管理するスケジューリングプログラムとを記憶する記憶装置と、
演算を実行するプロセッサとを有する計算機システムであって、
上記プロセッサは、上記スケジューリングプログラムによって決定されたオペレーティングシステムを実行するために、入力または出力する情報の配列を切り替える切替え部を有し、
上記記憶装置は、割り込みの種類と上記割り込みの処理を実行するオペレーティングシステムとを対応付けしたテーブルを記憶し、
上記切替え部は、割り込みを検出する割り込み検出部と、上記割り込み検出部によって検出された結果と上記記憶装置に記憶されたテーブルに基づいて、入力または出力する情報の配列を切り替える計算機システム。 - 異なったエンディアンで実行される複数のオペレーティングシステムと、異なったエンディアンで実行可能な命令とを格納した記憶装置と、
異なったエンディアンで上記記憶装置にアクセスし、上記記憶装置から読み出した命令を実行する複数のプロセッサと、
上記複数のプロセッサが共通にアクセスするレジスタとを有し、
それぞれの上記プロセッサは、上記レジスタに格納された値を読み出して実行すべきオペレーティングシステムを決定する計算機システム。 - 第1のオペレーティングシステムでタスクを実行している時に割り込みを検出し、上記割り込みの処理すべきオペレーティングシステムを決定し、上記決定されたオペレーティングシステムのエンディアンと、現在実行しているオペレーティングシステムのエンディアンが相違する場合、上記オペレーティングシステムでタスクを実行しているプロセッサのエンディアンを切り替え、上記プロセッサのエンディアンの切り替えを行った後に、上記決定されたオペレーティングシステムを実行する計算機システムのエンディアン切替え方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP03681499A JP3659048B2 (ja) | 1999-02-16 | 1999-02-16 | オペレーティングシステム及び計算機 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP03681499A JP3659048B2 (ja) | 1999-02-16 | 1999-02-16 | オペレーティングシステム及び計算機 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000235503A JP2000235503A (ja) | 2000-08-29 |
JP3659048B2 true JP3659048B2 (ja) | 2005-06-15 |
Family
ID=12480246
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP03681499A Expired - Fee Related JP3659048B2 (ja) | 1999-02-16 | 1999-02-16 | オペレーティングシステム及び計算機 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3659048B2 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006260407A (ja) | 2005-03-18 | 2006-09-28 | Fujitsu Ltd | 情報処理装置 |
JP5292406B2 (ja) * | 2008-09-12 | 2013-09-18 | ルネサスエレクトロニクス株式会社 | 半導体集積回路装置 |
JP5622429B2 (ja) | 2010-04-20 | 2014-11-12 | ルネサスエレクトロニクス株式会社 | マイクロコンピュータ |
JP5869228B2 (ja) * | 2011-03-31 | 2016-02-24 | キヤノン電子株式会社 | 周辺装置、画像読取装置および情報処理システム |
EP2503466B1 (en) | 2011-03-23 | 2017-08-23 | Canon Denshi Kabushiki Kaisha | Peripheral device used while being connected to information processing apparatus |
-
1999
- 1999-02-16 JP JP03681499A patent/JP3659048B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2000235503A (ja) | 2000-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6314471B1 (en) | Techniques for an interrupt free operating system | |
US6671827B2 (en) | Journaling for parallel hardware threads in multithreaded processor | |
KR100911796B1 (ko) | 하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전메시지 큐 | |
US7350006B2 (en) | System and method of interrupt handling | |
US20040205747A1 (en) | Breakpoint for parallel hardware threads in multithreaded processor | |
US6944850B2 (en) | Hop method for stepping parallel hardware threads | |
US20090271790A1 (en) | Computer architecture | |
JPH0430053B2 (ja) | ||
US7797515B2 (en) | System and method for limiting the number of unit processors for which suspension of processing is prohibited | |
JP2004157636A (ja) | データ処理装置 | |
JP3659048B2 (ja) | オペレーティングシステム及び計算機 | |
JP5289688B2 (ja) | プロセッサシステム及びプロセッサシステムを動作させるオペレーティングシステムプログラムの処理方法 | |
JP5131269B2 (ja) | マルチプロセッシングシステム | |
US7516311B2 (en) | Deterministic microcontroller context arrangement | |
US9946665B2 (en) | Fetch less instruction processing (FLIP) computer architecture for central processing units (CPU) | |
JPH0916409A (ja) | マイクロコンピュータ | |
US20060168427A1 (en) | Deterministic microcontroller with context manager | |
US6708259B1 (en) | Programmable wake up of memory transfer controllers in a memory transfer engine | |
JP4631442B2 (ja) | プロセッサ | |
JP2007317232A (ja) | データ処理装置 | |
WO2006081094A2 (en) | Deterministic microcontroller | |
JPH04241032A (ja) | システムコール実行装置 | |
KR100506254B1 (ko) | 임베디드 시스템의 비특권 모드에서 인터럽트 처리를 위한장치 및 방법 | |
US6658514B1 (en) | Interrupt and control packets for a microcomputer | |
JPH044630B2 (ja) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040427 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040624 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050222 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050307 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090325 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090325 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100325 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110325 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110325 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |