(57)【特許請求の範囲】
【請求項１】
複数の異なるタイプのプロセッサと前記複数のプロセッサからアクセス可能な主記憶装置とから構成されたコンピュータ・システムにおける前記主記憶装置にロードされたファイルの実行方法であって、
前記ファイルは、プロセッサのタイプを決定するための命令からなるプロセッサ・テスト・コード・セクションと、プロセッサのタイプの識別子を格納する領域であるプロセッサ・タイプ・フラグ・セクションと、前記複数のプロセッサの全てが実行できる第１の命令群からなる共通コード・セクションと、第１のプロセッサ・タイプのために最適化された第２の命令群からなるプロセッサ特定コード・セクションと、前記第２の命令群と機能が同じであり、前記複数のプロセッサの全てが実行できる第３の命令群からなる汎用コード・セクションとから構成されており、
前記複数のプロセッサのいずれか１つが、前記ファイルを実行する際に、
前記プロセッサ・テスト・コード・セクションの命令を実行し、前記プロセッサのタイプを決定し、その識別子をプロセッサ・タイプ・フラグ・セクションに記憶するステップと、
前記第１の命令群を、前記第２の命令群又は前記第３の命令群のいずれかの実行を指示する命令に到るまで順次実行するステップと、
前記識別子が、第１のプロセッサ・タイプであることを表している場合には、前記第２の命令群を実行するステップと、
前記識別子が前記第１のプロセッサ・タイプと異なることを表している場合には、前記第３の命令群を実行するステップと、
の各ステップを実行することを特徴とするコンピュータ・システムにおけるファイルの実行方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、概して、コンピュータ・システム用のファイルを生成し、コンピュータ・システムでファイルを実行する分野に関し、特にファミリー汎用プロセッサ特定ファイルを実行する方法および装置に関する。
【０００２】
【従来の技術、及び、発明が解決しようとする課題】
多くのプロセッサ・メーカーは各プロセッサが共通サブセットの２進命令をサポートするプロセッサ・ファミリー（例えば、インテル社のｘ８６ファミリーとモトローラ社の６８ｋファミリー）を製造する。しかし、プロセッサ・ファミリーの後世代プロセッサには通常、プロセッサ・ファミリーの全プロセッサによってはサポートされないスーパーセットの２進命令が含まれる。このスーパーセットの２進命令は、２進命令が実行可能なファイルで用いられたならば、コンピュータ・システムの性能を向上させるよう後世代プロセッサの機能性を増す。
【０００３】
さらに、これら後世代プロセッサはプロセッサ・ファミリーの初期プロセッサと構造的に異なることもある。これらの構造上の相違により、二進命令または一連の二進命令が同一のファミリー・プロセッサで、プロセッサー同士に対し異なったパフォーマンス・ペナルティをもたらす場合がある。これらの異なるパフォーマンス・ペナルティの結果、いずれも最適化したシ−ケンスは共通サブセットの命令だけが含まれるが、あるプロセッサはタスクに対し一つの最適化したシーケンスの２進命令を持ち、ファミリーの内の他のプロセッサは同一タスクに対し別の最適化したシーケンスの２進命令を持つことがある。
【０００４】
後世代プロセッサの強化された機能性を利用する一つの周知のアプローチはファミリーの内のそれぞれ異なるプロセッサに対し個別の実行可能ファイルを生成するものであった。このアプローチは単一プロセッサ・システムとマルチプロセッサ・システムが同一プロセッサを有する非常に効率の良い実行可能なファイルとなる。しかし、このアプローチはプロセッサ・ファミリーの各プロセッサが別々の実行可能ファイルを維持することも必要となる。
【０００５】
さらに、このアプローチではまたハイブリッド・マルチプロセッサ・コンピュータ・システム（即ち、プロセッサ・ファミリーの内の各種プロセッサを有するコンピュータ・システム）がコンピュータ・システムにおけるそれぞれ異なるプロセッサに対し個別の実行可能ファイルを維持することを必要とする。従って、ハイブリッド・マルチプロセッサ・コンピュータ・システムにあっては、コンピュータ・システムの大容量記憶装置と主記憶装置に多数の実行可能なファイルを記憶しなければならないため、このアプローチは大容量記憶装置の記憶スペースと主記憶装置の記憶スペースを無駄にする結果になる。
【０００６】
このアプローチの他の欠点はネットワーク・サーバからプロセッサ・ファミリーの各種プロセッサを備えたネットワークのコンピュータ・システムに実行可能なファイルが分配されるときに生じる。例えば、ネットワークに２８６、３８６、４８６プロセッサまたはペンティアム・プロセッサを有するコンピュータ・システムが含まれている場合、これらシステムの各々から最適性能を得るために多数バージョンの実行可能なフィイルが必要とされることがある。さらに、各コンピュータ・システムはネットワーク・サーバから適正バージョンの実行可能なファイルを選択する構成にしなければならない。
【０００７】
本発明の目的は、特定プロセッサに対し最適化されてはいるが、ファミリーのプロセッサによって実行可能なファイルを提供することである。
【０００８】
【課題を解決するための手段】
本発明によれば、複数の異なるタイプのプロセッサと前記複数のプロセッサからアクセス可能な主記憶装置とから構成されたコンピュータ・システムにおける前記主記憶装置にロードされたファイルの実行方法であって、前記ファイルは、プロセッサのタイプを決定するための命令からなるプロセッサ・テスト・コード・セクションと、プロセッサのタイプの識別子を格納する領域であるプロセッサ・タイプ・フラグ・セクションと、前記複数のプロセッサの全てが実行できる第１の命令群からなる共通コード・セクションと、第１のプロセッサ・タイプのために最適化された第２の命令群からなるプロセッサ特定コード・セクションと、前記第２の命令群と機能が同じであり、前記複数のプロセッサの全てが実行できる第３の命令群からなる汎用コード・セクションとから構成されており、前記複数のプロセッサのいずれか１つが、前記ファイルを実行する際に、前記プロセッサ・テスト・コード・セクションの命令を実行し、前記プロセッサのタイプを決定し、その識別子をプロセッサ・タイプ・フラグ・セクションに記憶するステップと、前記第１の命令群を、前記第２の命令群又は前記第３の命令群のいずれかの実行を指示する命令に到るまで順次実行するステップと、前記識別子が、第１のプロセッサ・タイプであることを表している場合には、前記第２の命令群を実行するステップと、前記識別子が前記第１のプロセッサ・タイプと異なることを表している場合には、前記第３の命令群を実行するステップと、の各ステップを実行することを特徴とするコンピュータ・システムにおけるファイルの実行方法を提供するものである。
【０００９】
本発明の実施形態を、添付の図面を参照しながら以下に記述するが、これは例示としてのものにすぎない。
【００１０】
【発明の実施の形態】
図１を参照すると、本発明を実施するためのハイブリッド・マルチプロセッサ・システム１００が示されている。「ハイブリッド」マルチプロセッサ・コンピュータ・システムの意味するものはコンピュータ・システムの内の一つのタイプのプロセッサとは異なるタイプのプロセッサを含むコンピュータ・システムである。ハイブリッド・マルチプロセッサ・システム１００にはシステム・バス１１０によってそれぞれ動作自在に接続した第一のプロセッサ１０２と、第二のプロセッサ１０４と、主記憶装置１０６と、大容量記憶装置１０８とが含まれる。
【００１１】
第一のプロセッサ１０２と第二のプロセッサ１０４は周知のどのプロセッサにすることもできる。しかし、ハイブリッド・コンピュータ・システムであるには、第一のプロセッサ１０２は第二のプロセッサ１０４とは異なるプロセッサ・タイプでなければならず、本発明の特徴を利用するには、第一のプロセッサ１０２と第二のプロセッサ１０４の命令のセットは共通サブセットの命令を共有しなければならない。例えば、第一のプロセッサ１０２はインテル４８６プロセッサにすることができ、第二のプロセッサ１０４はインテル・ペンティアム・プロセッサであってよい。
【００１２】
主記憶装置１０６はダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）を備え、この実施形態では６４メガバイトの記憶装置を備える。大容量記憶装置１０８は磁気的、光学的または磁気／光学的記憶システムのような固定式と取り外し式の両媒体、あるいは他のいかなる利用可能な大容量記憶技術を用いることができる。さらに、システム・バス１１０はＩＳＡ、ＥＩＳＡ、ＰＣＩ等のような何らかの周知のバス構造で実装ができる。
【００１３】
前記解説したコンピュータ・システムは単に例示としてだけの目的である。本発明はどのタイプのコンピュータ・システムまたは処理環境でも実施でき、上述したコンピュータ・システムに限定されない。例えば、本発明は単一プロセッサ・コンピュータ・システムまたは非ハイブリッド・マルチプロセッサ・コンピュータ・システムに実施することができる。
【００１４】
図２を参照すると、ファミリー汎用／プロセッサ特定（ＦＧＰＳ）アプリケーション２００の一実施形態のブロック図が記載されている。ＦＧＰＳファイル２００にはＣＰＵテスト・セクション２１０と、プロセッサ・タイプ・フラグ２１２と、共通コード・セクション２１４と、プロセッサ特定セクション２１６と、ファミリー汎用セクション２１８とが含まれる。
【００１５】
ＣＰＵテスト・セクション２１０にはプロセッサ・ファミリーの内の何れのタイプのプロセッサがＦＧＰＳファイル２００を実行するかを決定するルーチンが含まれる。プロセッサ・タイプを決めるルーチンは当該技術分野では広く周知である。ｉ８６ファミリーのプロセッサに対しプロセッサ・タイプを決定するルーチンの例は、引用によって本明細書の記載に援用するペンティアム・プロセッサ・ユーザ・マニュアル第三巻：アーキテクチャ／プログラミング・マニュアル、インテル・コーポレーション１９９３に見出すことができる。さらに、ＦＧＰＳファイル２００はＣＰＵテスト・セクション２１０のルーチンの実行に先立ちプロセッサのタイプに付いては未知であるため、ＣＰＵテスト・セクション２１０はプロセッサ・ファミリーに共通する命令と共に完全に実装されなければならない。
【００１６】
プロセッサ・タイプ・フラグ２１２はＦＧＰＳファイル２００を実行しているプロセッサのタイプを表すプロセッサ・タイプ識別子を記憶する。プロセッサ・タイプ・フラグはアプリケーションの局部記憶スペースの一部である記憶位置である。さらに、プロセッサ・タイプ・フラグ２１２は、プロセッサ・ファミリーの内のどのプロセッサによっても実行することができる共通コード・セクション２１４でプロセッサ・タイプ・フラグはテストされるため、プロセッサ・ファミリーの全プロセッサがプロセッサ・タイプ・フラグをテストできるよう実装されなければならない。
【００１７】
プロセッサ特定セクション２１６にはプロセッサ・ファミリーの内の特定プロセッサに対し最適化されたコードが含まれる。プロセッサ特定セクション２１６のコードには特定プロセッサの特別な特徴を利用すべく最適化ができるＦＧＰＳファイル２００のブロックと、機能と、ルーチンとまたは何らかの他のシーケンスの命令とが含まれる。プロセッサ特定セクション２１６には特定プロセッサに対し最適化されたコードが含まれるため、プロセッサ特定セクション２１６にはプロセッサ・ファミリーの内のプロセッサではサポートされない命令を含めることができ、あるいはプロセッサ・ファミリーの内のプロセッサによっては無効な結果が得られるような一連の命令を含めることができる。従って、ＦＧＰＳファイル２００には、プロセッサ特定セクション２１６と同一の機能を果たすコードを供与するが、プロセッサ・ファミリーのプロセッサ間に共通する命令だけを用いるだけのファミリー汎用セクション２１８も含まれる。即ち、プロセッサ特定セクション２１６とファミリー汎用セクション２１８とにおいてＦＧＰＳファイル２００にはタスクに対する少なくとも二つのバージョンのコードが含まれる。
【００１８】
大方の場合における共通コード・セクション２１４はＦＧＰＳファイル２００の最大部分であり、従って、ＦＧＰＳファイル２００の機能の大部分を実施する。例えば、ＦＧＰＳファイル２００がスプレッドシート・アプリケーション（表計算ソフト）であれば、スプレッドシート・アプリケーションの機能の大部分はこのセクションにおける命令によって実施される。共通コード・セクション２１４はプロセッサ・ファミリーの全メンバーに共通な命令だけを用いてこの機能性を実施する。この共通セットの命令だけを使用した結果、共通コ−ド・セクション２１４はプロセッサ・ファミリーのどのメンバーによっても実行することができる。
【００１９】
共通コード・セクション２１４には条件付き構造を実施するコードも含まれる。これらの条件付き構造はプロセッサ・タイプ・フラグ２１２の値に従ってＦＧＰＳファイル２００の実行を条件付で実行するのに用いられる。例えば、ＦＧＰＳファイル２００がプロセッサ・ファミリーの内のある特定のプロセッサを動作させていれば、これら条件付き構造はプロセッサ特定セクション２１６を実行させることができ、そうでなければ、ファミリー汎用セクション２１６を実行させることができる。
【００２０】
図３は図１のコンピュータ・システム１００でＦＧＰＳファイル２００を実行するための手順フローチャート３００を示す。手順フローチャート３００はＣＰＵテスト・セクション２１０と、共通コード・セクション２１４と、ファミリー汎用セクション２１８とにはｉ８６プロセッサ・ファミリーに共通した命令だけが用いられ、さらに、プロセッサ特定セクション２１６がペンティアム・プロセッサに対し最適化されている二例を介して説明することにする。さらにこれら二つの例では、コンピュータ・システム１００はその内部で実行されているオペレーティング・システム・プログラムによって制御され、コンピュータ・システム１００の第一のプロセッサ１０２はインテル４８６プロセッサであり、第二のプロセッサ１０４はインテル・ペンティアム・プロセッサである。
【００２１】
第一の例では、オペレーティング・システム・プログラムはＦＧＰＳファイル２００を実行する要求を受けた結果、ＦＧＰＳファイル２００を大容量記憶装置１０８から主記憶装置１０６に転送し、第一のプロセッサ１０２に対してＦＧＰＳファイル２００を実行するプロセスのスケジュールを第一のプロセッサ１０２に合わせて作成する（ステップ３１０）。次いでステップ３１２において第一プロッセサ１０２は第一のプロセッサ１０２のプロセッサ・タイプを表す識別子を返すプロセッサ・テスト・セクション２１０を実行する。ステップ３１４で第一のプロセッサ１０２は第一のプロセッサ１０２のプロセッサ・タイプを表す識別子をプロセッサ・タイプ・フラグ２１２に記憶する。この例で第一のプロセッサ１０２はインテル４８６プロセッサであるため、プロセッサ・テスト・セクション２１０はインテル４８６プロセッサを表す識別子を返し、この識別子をプロセッサ・タイプ・フラグ２１２に記憶させる。
【００２２】
ステップ３１６で第一のプロセッサ１０２は共通コード・セクション２１４からのコードを実行する。第一のプロセッサ１０２は条件付き構造がプロセッサ・タイプ・フラグ２１２に従ってファミリー汎用セクション２１８からのコード、あるいはプロセッサ特定セクション２１６のいずれかの実行を第一のプロセッサ１０２に指示するＦＧＰＳファイル２００内の点に第一のプロセッサ１０２が到るまで、第一のプロセッサ１０２はこの共通コード・セクション２１４からのコードを実行する。この第一例にあって、プロセッサ・タイプ・フラグには４８６プロセッサに対応する識別子が含まれ、プロセッサ特定セクション２１６はペンティアム・プロセッサに対し最適化されているため、第一のプロセッサ１０２はステップ３１８でファミリー汎用セクション２１８の実行を決定する。第一のプロセッサ１０２は次いでファミリー汎用セクション２１８におけるコードを実行する（ステップ３２０）。ファミリー汎用セクション２１８における適正コードの実行後、第一のプロセッサ１０２は共通コード・セクション３１６に復帰する。第一のプロセッサ１０２はＦＧＰＳファイル２００が終了するまで共通コード・セクション２１４からのコードとファミリー汎用セクション２１８の実行を継続する。
【００２３】
第二例では、オペレーティング・システム・プログラムはＦＧＰＳファイル２００を実行する要求を受けた結果、ＦＧＰＳファイル２００を大容量記憶装置１０８から主記憶装置１０６に転送し、第二のプロセッサ１０４に合わせＦＧＰＳファイル２００を実行するプロセスのスケジュールを作成する（ステップ３１０）。次いでステップ３１２において第二プロッセサ１０４は第二のプロセッサ１０４のプロセッサ・タイプを表す識別子を返すプロセッサ・テスト・セクション２１０を実行する。ステップ３１４で第二のプロセッサ１０４は第二のプロセッサ１０４のプロセッサ・タイプを表す識別子をプロセッサ・タイプ・フラグ２１２に記憶する。この第二例では、第二のプロセッサ１０４はインテル・ペンティアム・プロセッサであるため、プロセッサ・テスト・セクション２１０はインテル・ペンティアム・プロセッサを表す識別子を返し、この識別子をプロセッサ・タイプ・フラグ２１２に記憶させる。
【００２４】
ステップ３１６で第二のプロセッサ１０４は共通コード・セクション２１４からのコードを実行する。第二のプロセッサ１０４は条件付き構造がプロセッサ・タイプ・フラグ２１２に従ってファミリー汎用セクション２１８からのコード、あるいはプロセッサ特定セクション２１６のいずれかの実行を第二のプロセッサ１０４に指示するＦＧＰＳファイル２００内の点に第二のプロセッサ１０４が到るまで、第二のプロセッサ１０４はこの共通コード・セクション２１４からのコードを実行する。この例にあって、プロセッサ・タイプ・フラグにはペンティアム・プロセッサに対応する識別子が含まれ、プロセッサ特定セクション２１６はペンティアム・プロセッサに対し最適化されているため、第二のプロセッサ１０４はステップ３１８でプロセッサ特定セクション２１６の実行を決定する。第二のプロセッサ１０４は次いでプロセッサ特定セクション２１６におけるコードを実行する（ステップ３３０）。プロセッサ特定セクション２１６における適正コードの実行後、第二のプロセッサ１０４は共通コード・セクション２１４に復帰する。第二のプロセッサ１０４はＦＧＰＳファイル２００が終了するまで共通コード・セクション２１４からのコードとプロセッサ特定セクション２１６との実行を継続する。
【００２５】
上述の実施形態における実行プロセッサのプロセッサ・タイプはＦＧＰＳファイル２００のセットアップ時にテストされるだけであるため、オペレーティングシステムが多重タスキングをサポートするのであればオペレーティング・システムは一つのタイプのプロセッサでＦＧＰＳファイル２００をスタートさせず、後にＦＧＰＳファイル２００の実行を他のタイプのプロセッサ切り替えることができる。
【００２６】
図４乃至６は一つのタイプのプロセッサから別タイプのプロセッサにタスク切り替えができるＦＧＰＳファイルを実行する方法を示す。この方法に適したＦＧＰＳファイル４００を図４に記載する。ＦＧＰＳファイル４００にはファイル・ヘッダ（図示せず）と、共通コード・セクション４１０と、プロセッサ・特定セクション４１２と、ファミリー汎用セクション４１４と、セクション・ヘッダ表４１６とが含まれる。共通コード・セクション４１０とプロセッサ特定セクション４１２、及びファミリー汎用セクション４１４は、夫々が主記憶装置１０６におけるその独自の排他的セットのページに合わせてマップされるようにＦＧＰＳファイル４００内で位置合わせされる。
【００２７】
好適な本発明の実施形態におけるファイル・ヘッダは、ＦＧＰＳファイル４００内の固定位置にある。ファイル・ヘッダにはＦＧＰＳファイル４００を実行するプロセスをセットアップするためにオペレーティング・システムが必要とする総ての情報が含まれる。例えば、ファイル・ヘッダにはファイル・タイプ識別子（例えばＦＧＰＳファイル・タイプを表す識別子）と、セクション・ヘッダ表４１６に対するポインタと、実行をスタートさせるＦＧＰＳファイル４００のアドレス等のような情報を含めることができる。全ＦＧＰＳファイルのファイル・ヘッダをＦＧＰＳファイル４００内の既知の位置に固定することによってオペレーティング・システムはＦＧＰＳファイル４００全体を走査せずにＦＧＰＳファイル４００からファイル・ヘッダ情報を容易に得ることができる。
【００２８】
大方の場合の共通コード・セクション４１０はＦＧＰＳファイル４００の最大部分であり、従って、ＦＧＰＳファイル４００の機能性の大部分を実施する。例えば、ＦＧＰＳファイル４００がスプレッドシート・アプリケーションであれば、スプレッドシート・アプリケーションの機能性の大部分はこのセクションにおける命令によって実施される。さらに、共通コード・セクション４１０にはプロセッサ・ファミリーの総てのメンバーに共通する命令だけが用いられる。この共通セットの命令だけを使用した結果、共通コード・セクション４１０はプロセッサ・ファミリーの何れかのプロセッサによって実行することができる。
【００２９】
プロセッサ特定セクション４１２には特定プロセッサに対し最適化されたた少なくとも一つのルーチン（例えば、図４のルーチン４２２と４２４）が含まれる。従って、プロセッサ特定セクション４１２にはプロセッサ・ファミリーの内のプロセッサによってサポートされない命令を含めることができ、あるいはプロセッサ・ファミリーの内のプロセッサに無効な結果を得させるように一連の命令を含めることができる。
【００３０】
プロセッサ特定セクション４１２にはプロセッサ・ファミリーの内のプロセッサによって実行することができないルーチンを含めることができるため、ＦＧＰＳファイル４００にはプロセッサ特定セクション４１２のルーチンに対応するルーチンを含むファミリー汎用セクション４１４も含まれる。しかし、ファミリー汎用セクション４１４のルーチンにはプロセッサ・ファミリーのプロセッサ間に共通であって、プロセッサ・ファミリーの全プロセッサに無効な結果を得させるように一連の命令だけが用いられる。
【００３１】
さらに、プロセッサ特定セクション４１２とファミリー汎用セクション４１４のルーチンはプロセッサ特定セクション４１２とファミリー汎用セクション４１４の対応するルーチンに同一のオフセットが与えられるように位置合わせされる。例えば図４の例にあって、プロセッサ特定セクション４１２にはオフセット１００でのルーチン４２２とオフセット２５０でのルーチン４２４とが含まれるが、しかるにファミリー汎用セクション４１４にはオフセット１００での対応ルーチンとオフセット２５０での対応ルーチン４５４とが含まれる。ルーチン４２２とルーチン４５２はコンピュータ・システムに同一機能を行わせるべく実装される。同様に、ルーチン４２４とルーチン４５４は同一機能を実行させる。
【００３２】
対応するルーチンは異なる長さにすることができるため、プロセッサ特定セクション４１２とファミリー汎用セクション４１４との間にはホールが存在する結果になることがある。例えば、ルーチン４２２はオフセット１００からオフセット２００に亘り、対応するルーチン４５２はオフセット１００からオフセット２５０にまでおよぶ。従って、ルーチン４２４と４５４を同一のオフセット（例えば２５０）に維持するため、プロセッサ特定セクションにはオフセット２００〜オフセット２５０間にホール４２６が含まれる。
【００３３】
コンパイラはルーチンを逐次実行するコストでこれらのホールの内の幾つかを部分的に埋める得ることができることを理解されたい。さらに、図６の解説後に一層良く理解されるように、プロセッサ特定セクション４１２とファミリー汎用セクション４１４の対応するルーチンはこれらルーチンの照会に従ってプロセッサが適正なルーチンを実行するよう同じオフセットが割り当てられる。
【００３４】
最後に、セクション・ヘッダ表４１６にはＦＧＰＳファイル４００の各セクションンに付いての情報が含まれる。例えば、セクション・ヘッダ表４１６にはセクション・タイプと、プロセス内部セクションの仮想アドレスと、ファイル内部セクションのオフセットと、セクション・サイズ等のような情報を含めることができる。
【００３５】
図５には図１のハイブリッド・マルチプロセッサ・コンピュータ・システムに対する適切なメモリ割り当て方式のブロック図が記載されている。このメモリ割り当て方式５００では、コンピュータ・システム１００を動的に制御するオペレーティング・システムはコンピュータ・システム１００の各プロセッサに主記憶装置１０６の少なくとも一ページを動的に割り当てる。例えば、オペレーティングシステムは第一のプロセッサ・メモリ・エリア５０２を第一のプロセッサ１０２に、第二のプロセッサメモリ・エリア５０４を第二のプロセッサ１０４に、共有メモリ・エリア５０６を第一、第二の両プロセッサ１０２と１０４に割り当てることができる。好適な実施形態では、記憶装置のこれらエリアの内の各々に割り当てられる主記憶装置１０６のページ数をオペレーティング・システムは動的に変更することができる。
【００３６】
第一のプロセッサ・メモリ・エリア５０２はオペレーティング・システムと第一のプロセッサ１０２で実行されるプロセスによってのみアクセスができる。同様に、第二のプロセッサ・メモリ・エリア５０４はオペレーティング・システムと第二のプロセッサ１０４で実行されるプロセスとを介することによってのみアクセスができる。しかし、共有メモリ・エリア５０６はオペレーティング・システムと第一のプロセッサ１０２または第二のプロセッサ１０４のいずれかで実行されるプロセスに対してアクセスができる。
【００３７】
さらに、好適な実施形態ではオペレーティング・システムにデマンドによるページングが活用される。即ち、オペレーティング・システムはデマンドのみに応じ大容量記憶装置１０８から主記憶装置１０６にデータを転送する。例えば、ファイルが最初に実行されると、オペレーティング・システムはファイルの第一ページを転送する。次いで、コンピュータ・システム１００のプロセッサの内の一つがファイルの第二ページの記憶位置を照会すると、ページ障害が発生する。このページ障害に応答し、オペレーティング・システムは次いで大容量記憶装置１０８からのファイルの第二ページを主記憶装置１０６に転送する。
【００３８】
好適な実施形態では、オペレーティング・システムは仮想メモリのアドレス指定も利用している。即ち、コンピュータ・システム１００のプロセッサで実行されるプロセスでは仮想アドレスを介し主記憶装置１０６に照会が行われる。オペレーティング・システムはこれらの仮想アドレスを取り出し、それを主記憶装置１０６の物理的なアドレスに変換する。その結果、オペレーティング・システムはプロセッサで実行されるプロセスの操作に影響を与えることなくページを主記憶装置１０６内部で移動させることができる。
【００３９】
さて図６を参照すると、コンピュータ・システム１００で行われるＦＧＰＳファイル４００の実行を解説する例示としての手順フローチャートが記載されている。この例でコンピュータ・システム１００は上述した特徴を有するオペレーティング・システムによって制御され、第一のプロセッサ１０２はインテル４８６プロセッサであり、第二のプロセッサ１０４はインテル・ペンティアム・プロセッサであり、プロセッサ特定コード・セクション４１２はペンティアム・プロセッサに対し最適化されており、共通コード・セクション４１０とファミリー汎用コード・セクション４１４はインテルｉ８６ファミリーの何れかのプロセッサによって実行できる。さらに、解説を簡略化するため、この例では全仮想メモリの照会が有効である仮定される。即ち、ＦＧＰＳファイル４００に従って第一のプロセッサ１０２と第二のプロセッサ１０４はプロセスのデータと命令のアドレス指定だけをする。
【００４０】
オペレーティング・システムは好ましくはコンピュータ・システム１００のブートアップ時に第一のプロセッサ１０２のタイプを決めるためプロセッサ・テスト・ルーチンを実行させる（ステップ６１０）。次いで、オペレーティング・システムはステップ６１２で第一のプロセッサ・メモリ・エリア５０２のプロセッサ・タイプ・フラグに第一のプロセッサ１０２に対応するプロセッサ・タイプ識別子を記憶させる。第一のプロセッサ１０２はインテル４８６プロセッサであるため、オペレーティング・システムはステップ６１２で第一のプロセッサ・メモリ・エリア５０２のプロセッサ・タイプ・フラグに４８６プロセッサ識別子を記憶させる。オペレーティング・システムは次いで第二のプロセッサ１０４に対しステップ６１０と６１２を繰り返す。その結果、第二のプロセッサ１０４はペンティアム・プロセッサであるため、ペンティアム・プロセッサ識別子は第二のプロセッサ・メモリ・エリア５０４のプロセッサ・タイプ・フラグに記憶される。
【００４１】
次いでオペレーティング・システムはステップ６１３でコンピュータ・システムに構成される各プロセッサ・タイプに記憶装置管理ユニット（ＭＭＵ）表を割り当てる。割り当てられたＭＭＵ表はプロセッサから受信した仮想アドレスを物理的アドレスに変換すべくオペレーティング・システムによって使用される。例えばコンピュータ・システム１００では、オペレーティング・システムは４８６プロセッサ・タイプにＭＭＵ表を、ペンティアム・プロセッサ・タイプに別個のＭＭＵ表を割り当てると考えられ、第一のプロセッサ１０２の仮想記憶装置の照会を物理的アドレスに変換するとき、４８６プロセッサ・タイプのＭＭＵ表を用いることになろう。異なるプロセッサ・タイプのＭＭＵ表は共通コード・セクション４１０に対応する仮想アドレスの変換されたものを含むＭＭＵサブテーブルを共有することができることを理解する。
【００４２】
ＦＧＰＳファイル４００を実行する要求を受けて、オペレーティング・システムはステップ６１４においてファイル・ヘッダ４０８とセクション・ヘッダ・テーブル４１６に記憶した情報を読み取り、共有メモリ・エリア５０６にＦＧＰＳファイル４００に対応するセクション・テーブルを生成する。ページ障害に応答しオペレーティング・システムがＦＧＰＳファイル４００の何れのセクションを主記憶装置にロードするかを決定するようセクション・テーブルにはＦＧＰＳファイル４００の各種セクションに付いての情報が含まれる。
【００４３】
次いでオペレーティング・システムは共通コード・セクション４１０の第一ページを大容量記憶装置１０８から共有メモリ・エリア５０６に転送させ、ＦＧＰＳファイル４００を実行する第一のプロセッサ１０２のスケジュールを作成し、４８６プロセッサ・タイプに対応するＭＭＵテーブルを更新する（ステップ６１５）。
【００４４】
ステップ６１６では、第一のプロセッサ１０２が共通コード・セクション４１０のこの第一ページ内に存在しない仮想アドレスを照会し、それによりページ障害が生じるまで第一のプロセッサ１０２は共通コード・セクション４１０の第一ページを実行する。このページ障害に応答し、オペレーティング・システムはこの仮想記憶装置の照会を満たすため、ＦＧＰＳファイル４００の何れのページを大容量記憶装置１０８から主記憶装置１０６に転送すべきかを決めなければならない。オペレーティング・システムはステップ６１８で共有メモリ・エリア５０６におけるセクション・テーブルを調べることによって照会した仮想アドレスが共通コードセクション４１０の内部に存在するか、どうかを第一に決める。この例でオペレーティング・システムはセクション・テーブルからこのページ障害が共通コード・セクション４１０の第二ページ内で仮想アドレスの照会が行われた結果であることを決定する。
【００４５】
この決定の結果、オペレーティング・システムはステップ６２０で共通コード・セクション４１０の第二ページを大容量記憶装置１０８から共有メモリ・エリア５０６に転送させ、４８６プロセッサ・タイプに対応するＭＭＵテーブルを更新する。ステップ６１６で第一のプロセッサ１０２はＦＧＰＳファイル４００の実行を再開する。第一のプロセッサ１０２が共通コード・セクション４１０の第一ページまたは第二ページのいずれかに存在しない仮想アドレスを照会し、それによってページ障害を発生させるまで第一のプロセッサ１０２はステップ６１６でＦＧＰＳファイル４００の実行を継続する。例えば、ルーチン４２２または対応するルーチン４５２のいずれかに関係する仮想アドレスを第一のプロセッサ１０２が照会したと仮定する。
【００４６】
このページ障害に応答し、オペレーティング・システムはステップ６１８で共有メモリ・エリア５０６内のセクション・テーブルを調べることによって照会された仮想アドレスが共通コード・セクション４１０に存在するか、どうかを決定する。オペレーティング・システムはセクション・テーブルからこのペ−ジ障害が共通コード・セクション４１０のページ内で仮想アドレスの照会が行われた結果ではなく、ルーチン４２２または対応するルーチン４５２の何れかを照会した結果であることを決定する。
【００４７】
オペレーティング・システムはステップ６２２で第一のプロセッサ・メモリ・エリア５０２のプロセッサ・タイプ・フラグと共有メモリ・エリア５０６のセクション・テーブルとを調べることによって第一のプロセッサ１０２がプロセッサ特定ルーチン４２２を実行できるか、どうかを決めなければならない。プロセッサ特定コード・セクション４１２はペンティアム・プロセッサに対し最適化されていることをセクション識別子４３２が表し、しかも第一のプロセッサ１０２は４８６プロセッサであることを第一のプロセッサ・メモリ・エリア５０２のプロセッサ・タイプ・フラグが表しているため、オペレーティング・システムはステップ６２２で第一のプロセッサ１０２の適正なルーチンはルーチン４５２であることを決定する。
【００４８】
この決定が行われた結果、オペレーティング・システムはルーチン４５２の第一ページを大容量記憶装置１０８から第一のプロセッサ・メモリ・エリア５０２に転送させ（ステップ６２６）、４８６プロセッサ・タイプに対応するＭＭＵテーブルを更新する。ステップ６１６で第一のプロセッサ１０２はＦＧＰＳファイル４００の実行を再開する。第一のプロセッサ・メモリ・エリア５０２または共有メモリ・エリア５０６のいずれかに存在しないページの仮想アドレスを第一のプロセッサ１０２が照会するまで、第一のプロセッサ１０２はステップ６１６でＦＧＰＳファイル４００のローディングされたページの実行を継続する。
【００４９】
ＦＧＰＳファイル４００の実行が完了するまで、あるいはオペレーティングシステムがＦＧＰＳファイル４００の実行を第二のプロセッサ１０４に切り替えるまで共通コード・セクション４１０またはファミリー汎用コード・セクション４１４何れかからのページにおける障害に付いてのこのプロセスのは継続する。
【００５０】
ＦＧＰＳファイル４００を実行するこの方法がいかにプロセッサ・タイプ相互を切り替えるタスクをサポートするかを解説するため、共通コード・セクション４１０からの上記二ページは共有メモリ・エリア５０６に記憶され、ルーチン４５２からの第一ページは第一のプロセッサ・メモリ・エリア５０２に記憶され、オペレーティング・システムは共通コード・セクション４１０でＦＧＰＳファイル４００の実行を停止させており、オペレーティング・システムは第二のプロセッサ１０４がＦＧＰＳファイル４００の実行を再開するスケジュールを作成完了していると仮定する。
【００５１】
異なるプロセッサ・タイプ相互を切り替えるタスクを実行可能にするため、ＦＧＰＳファイル４００の有効な実行が異なるタイプのプロセッサで再開されるとき、そのファイルの有効な実行を確実にするためオペレーティング・システムはある箇所での実行の停止だけができることを理解されたい。例えば、異なるプロセッサ・タイプ相互を切り替えるタスクを実行可能にする最も簡単な方法はプロセッサが共通コード・セクション４１０における命令を実行しているときに限り、オペレーティング・システムにＦＧＰＳファイル４００の実行を停止させることである。
【００５２】
オペレーティング・システムが第二のプロセッサ１０４に対応するＦＧＰＳファイル４００を実行するスケジュールを作成完了した後、第二のプロセッサ１０４はＦＧＰＳファイル４００の実行を再開し、共通コード・セクション４１０の第一ページまたは第二ページの何れかに存在しない仮想アドレスを第二のプロセッサ１０４が照会し、それによってページ障害が発生するまで、ステップ６１６でＦＧＰＳファイル４００の実行を継続する。解説のため、第二のプロセッサ１０４はルーチン４２２または対応するルーチン４５２の何れかに関係する仮想アドレスの照会を済ませていると仮定する。ルーチン４２２と４５２に関係する仮想アドレスに対し第二のプロセッサ１０４が照会すると、ルーチン４５２の第一ページが第一のプロセッサ・メモリ・エリア５０２に記憶されていれもページ障害が発生することになる。これはペンティアム・プロセッサ・タイプに対応するＭＭＵテーブルにはまだルーチン４２２と４５２とに関係する仮想アドレスの項目が含まれないためであり、その結果、第二のプロセッサ１０４の観点から主記憶装置１０６にはルーチン４２２またはルーチン４５２の何れかに対する第一ページが含まれない。
【００５３】
このページ障害に応答し、共有メモリ・エリア５０６に記憶したヘッダ情報を調べることによって、照会が行われた仮想アドレスが共通コード・セクション４１０に存在するか、どうかをオペレーティング・システムはステップ６１８で決定する。オペレーティング・システムはこの記憶したヘッダ情報から、このペ−ジ障害が共通コード・セクション４１０のページ内で仮想アドレスの照会が行われた結果ではなく、ルーチン４２２または対応するルーチン４５２の何れかを照会した結果であることを決定する。
【００５４】
オペレーティング・システムはステップ６２２で第二のプロセッサ・メモリ・エリア５０４のプロセッサ・タイプ・フラグと共有メモリ・エリア５０６に記憶したヘッダ情報とを調べることによって第二のプロセッサ１０４がプロセッサ特定ルーチン４２２を実行できるか、どうかを決めなければならない。プロセッサ特定コード・セクション４１２はペンティアム・プロセッサに対し最適化されていることをセクション識別子４３２が表し、第二のプロセッサ１０４はペンティアム・プロセッサであることを第二のプロセッサ・メモリ・エリア５０４のプロセッサ・フラグが表しているため、オペレーティング・システムはステップ６２２で第二のプロセッサ１０４の適正なルーチンはルーチン４２２であることを決定する。
【００５５】
この決定が行われた結果、オペレーティング・システムはルーチン４２２の第一ページを大容量記憶装置１０８から第二のプロセッサ・メモリ・エリア５０４に転送させ（ステップ６２６）、ペンティアム・プロセッサ・タイプに対応するＭＭＵテーブルを更新する。ステップ６１６で第二のプロセッサ１０４はＦＧＰＳファイル４００の実行を再開する。第二のプロセッサ・メモリ・エリア５０４または共有メモリ・エリア５０６のいずれかに存在しないページの仮想アドレスを第二のプロセッサ１０４が照会するまで、第二のプロセッサ１０４はステップ６１６でＦＧＰＳファイル４００のローディングしたページの実行を継続する。ＦＧＰＳファイル４００の実行が完了するまで、あるいはオペレーティングシステムがＦＧＰＳファイル４００の実行を第一のプロセッサ１０２に切り替えて戻すまで共通コード・セクション４１０またはプロセッサ特定コード・セクション４１２の何れかからのページにおける障害に付いてのこのプロセスは継続する。
【００５６】
前記二つの実施形態ではプロセッサ・ファミリー全体ではなく、より小さなサブセットのプロセッサでの実行に備え共通コード・セクションとファミリー汎用コード・セクションは実装できることを理解されたい。例えば、共通コード・セクションは３８６プロセッサよりも後に総てのｉ８６プロセッサをサポートすべく実装することができる。
【００５７】
さらに、ＦＧＰＳファイルには一プロセッサ特定コード・セクション以上を含めることができることを理解されたい。例えば、ペンティアムに対し最適化したプロセッサ特定コード・セクションと、ペンティアム・プロに対し最適化した他のプロセッサ特定コード・セクションとをＦＧＰＳファイルに含めることができる。
【００５８】
さらに、ＦＧＰＳファイルのプロセッサ特定コード・セクションは一プロセッサ・タイプ以上に対し最適化ができることを理解されたい。例えば、プロセッサ特定コード・セクションはペンティアムとペンティアム・プロに対し最適化ができ、共通コード・セクションとファミリー汎用コード・セクションはi８６ファミリーの内の残るプロセッサをサポートする。
【００５９】
本発明は単一のプログラムが異なる命令セットを有する複数の異なるプロセッサで最適な状態で実行できるので有利である。複数のプロセッサは対話的に動作し、その独自バージョンのコンパイラ変換命令をそれぞれ実行する。
【図面の簡単な説明】
【図１】例示としてのハイブリッド・マルチプロセッサ・システムのブロック図である。
【図２】ファミリー汎用プロセッサ特定（ＦＧＰＳ）ファイルの第一の実施形態のブロック図である。
【図３】ＦＧＰＳファイルの第一の実施形態の実行を解説するフロ−チャートである。
【図４】ＦＧＰＳファイルの第二の実施形態のブロック図である。
【図５】ＦＧＰＳファイルの第二の実施形態に適した主記憶装置の組織を解説するブロック図である。
【図６】ＦＧＰＳファイルの第二の実施形態の実行を解説するフローチャートである。
【図１】
0004021534.tif 000002
【図２】
0004021534.tif 000003
【図３】
0004021534.tif 000004
【図４】
0004021534.tif 000005
【図５】
0004021534.tif 000006
【図６】
0004021534.tif 000007