IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特表2024-512515小メモリアドレス幅プログラムコードを大メモリアドレス幅アドレス空間内で実行すること
<>
  • 特表-小メモリアドレス幅プログラムコードを大メモリアドレス幅アドレス空間内で実行すること 図1
  • 特表-小メモリアドレス幅プログラムコードを大メモリアドレス幅アドレス空間内で実行すること 図2
  • 特表-小メモリアドレス幅プログラムコードを大メモリアドレス幅アドレス空間内で実行すること 図3
  • 特表-小メモリアドレス幅プログラムコードを大メモリアドレス幅アドレス空間内で実行すること 図4
  • 特表-小メモリアドレス幅プログラムコードを大メモリアドレス幅アドレス空間内で実行すること 図5
  • 特表-小メモリアドレス幅プログラムコードを大メモリアドレス幅アドレス空間内で実行すること 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-03-19
(54)【発明の名称】小メモリアドレス幅プログラムコードを大メモリアドレス幅アドレス空間内で実行すること
(51)【国際特許分類】
   G06F 9/44 20180101AFI20240312BHJP
【FI】
G06F9/44
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023557727
(86)(22)【出願日】2022-03-07
(85)【翻訳文提出日】2023-09-20
(86)【国際出願番号】 IB2022052001
(87)【国際公開番号】W WO2022200894
(87)【国際公開日】2022-09-29
(31)【優先権主張番号】17/212,448
(32)【優先日】2021-03-25
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(74)【復代理人】
【識別番号】110000316
【氏名又は名称】弁理士法人ピー・エス・ディ
(72)【発明者】
【氏名】ホブソン、スティーブン、ジェイムズ
(72)【発明者】
【氏名】モクシー、キャサリン、メアリー
(72)【発明者】
【氏名】ジャコビ、クリスチャン
(72)【発明者】
【氏名】ツォルザトス、エルピダ
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376EA17
5B376EA19
(57)【要約】
大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行するための方法及びシステムが提供される。本方法は、小メモリアドレス幅プログラム実行可能コードを部分のセット分割することと、小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第1の仮想ストレージ領域を予約することと、プログラム実行可能コードに対応するために、大メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第2の仮想ストレージ領域のセットを予約することとを含む。本方法は、再配置ファクタを用いて、予約された第1の仮想ストレージ領域内のアドレスから実行可能コードを収容する予約された第2の仮想ストレージ領域のうちの1つに変換することによって、プロセッサスレッドを再配置する再配置機構を提供する。
【特許請求の範囲】
【請求項1】
大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行するためのコンピュータ実装方法であって、
小メモリアドレス幅プログラム実行可能コードを部分のセットに分割することと、
小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第1の仮想ストレージ領域を予約することと、
前記プログラム実行可能コードに対応するために、大メモリアドレス幅アドレスを用いてアクセスされる前記アドレス空間の一部に第2の仮想ストレージ領域のセットを予約することと、
予約された前記第1の仮想ストレージ領域内のアドレスから前記実行可能コードを収容する予約された前記第2の仮想ストレージ領域のうちの1つに変換するために、プロセッサスレッドのための再配置ファクタを提供することと、
を含む方法。
【請求項2】
予約された前記第1の仮想ストレージ領域を前記プロセッサスレッドが識別することを可能にするために、再配置領域レジスタを提供することと、
前記プロセッサスレッドのための前記再配置ファクタを有する再配置ファクタ・レジスタを提供することと、
を含む、請求項1に記載の方法。
【請求項3】
前記第1のストレージ領域を予約することは、前記プログラム実行可能コードの前記部分のセットのうち最大のものを収容するのに十分な大きさの領域を予約することであり、異なるスレッドに対して及び異なる時間における同じスレッドに対して異なる再配置ファクタが提供され、同じ第1のストレージ領域を使用して異なる実行可能コードを取得している異なる第2のストレージ領域のセットにアクセスする、請求項1記載の方法。
【請求項4】
前記再配置ファクタは、前記第1のストレージ領域内の小メモリアドレス幅アドレスに変位を加算して、前記第2のストレージ領域のうちの1つにおける大メモリアドレス幅アドレスを計算する、請求項1に記載の方法。
【請求項5】
前記第1のストレージ領域のアドレスに基づいて、前記第2のストレージ領域のセットの各々についてプロセッサスレッドのための再配置ファクタを計算することをさらに含み、前記第1のストレージ領域内の変位にあるアドレスに前記再配置ファクタを加算することで、第2のストレージ領域内の同じ変位にあるアドレスが得られる、請求項1に記載の方法。
【請求項6】
小メモリアドレス幅プログラム実行可能コードを部分のセットに分割することは、1つの部分内に実行可能な静的にリンクされたプログラムの単一のオブジェクトを提供することを含む、請求項1に記載の方法。
【請求項7】
小メモリアドレス幅プログラム実行可能コードを部分のセットに分割することは、被呼出しプログラムと同じ部分内に呼出しプログラムを提供することを含む、請求項1に記載の方法。
【請求項8】
前記小メモリアドレス幅アドレスは、8ビットアドレス、16ビットアドレス、24ビットアドレス、31ビットアドレス、又は32ビットアドレスの群のうちの1つであり、前記大メモリアドレス幅アドレスは32ビットアドレス又は64ビットアドレスである、請求項1に記載の方法。
【請求項9】
前記小メモリアドレス幅アドレスは31ビットアドレスであり、前記大メモリアドレス幅アドレスは64ビットアドレスであり、前記第1のストレージ領域はアドレス空間の最初の2GB内にあり、前記第2のストレージ領域のセットはアドレス空間の最初の2GBを越えたところにある、請求項1に記載の方法。
【請求項10】
大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行するためのコンピュータプログラム製品であって、プログラムのランタイムにおいて、前記コンピュータプログラム製品は、
具現化されたプログラム命令を有するコンピュータ可読ストレージ媒体を含み、前記プログラム命令は処理ユニットによって実行可能であり、前記処理ユニットに、
プロセッサスレッド上のプログラムの実行可能コードに対するアクセス要求を受け取ることと、
小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部において、前記プロセッサスレッドのための予約された第1のストレージ領域をルックアップすることと、
前記プロセッサスレッドのための再配置ファクタをルックアップして、再配置ファクタを取得することと
前記再配置ファクタを使用して、予約された前記第1のストレージ領域内のアドレスから、プログラム実行可能コードに対応する、大メモリアドレス幅アドレスを使用してアクセスされるアドレス空間の一部における第2の仮想ストレージ領域のセットのうちの1つに変換することであって、予約された前記第2のストレージ領域は予約された前記第1のストレージ領域で実行されるコードを収容する、変換することと、
を含む方法を実行させる、コンピュータプログラム製品。
【請求項11】
予約された第1のストレージ領域をルックアップすることが、前記プロセッサスレッドのための再配置領域レジスタをルックアップすることであり、
再配置ファクタをルックアップすることが、前記プロセッサスレッドの再配置ファクタ・レジスタをルックアップして、前記プロセッサスレッドのための再配置ファクタを取得することである、請求項10に記載のコンピュータプログラム製品。
【請求項12】
再配置ファクタを使用して変換することが、前記第1のストレージ領域内の小メモリアドレス幅アドレスに変位を加算して、前記第2のストレージ領域のうちの1つにおける大メモリアドレス幅アドレスを計算することである、請求項10に記載のコンピュータプログラム製品。
【請求項13】
動的リンク呼出し及び戻りに対応するために、ランタイム中に再配置ファクタ・レジスタを変更することを含む、請求項10に記載のコンピュータプログラム製品。
【請求項14】
大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行するためのコンピュータ・システムであって、
プロセッサと、コンポーネントの機能を実行するために前記プロセッサにコンピュータプログラム命令を提供するように構成されたメモリと、
アドレス予約コンポーネントと
を含み、前記アドレス予約コンポーネントが、
小メモリアドレス幅プログラム実行可能コードを部分のセットに分割するための分割コンポーネントと、
小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第1の仮想ストレージ領域を予約するための第1のストレージ領域予約コンポーネントと、
プログラム実行可能コードに対応するために、大メモリアドレス幅アドレスを用いてアクセスされる前記アドレス空間の一部に第2の仮想ストレージ領域のセットを予約するための第2のストレージ領域予約コンポーネントと、
予約された第1の仮想ストレージ領域内のアドレスから前記実行可能コードを収容する予約された前記第2の仮想ストレージ領域のうちの1つに変換するために、プロセッサスレッドのための再配置ファクタを提供するための再配置ファクタ提供コンポーネントと、
を含む、コンピュータ・システム。
【請求項15】
前記アドレス予約コンポーネントが、
予約された前記第1のストレージ領域をプロセッサスレッドが識別することを可能にするために再配置領域レジスタを提供するための再配置領域提供コンポーネントを含み、
前記再配置ファクタ提供コンポーネントが、前記プロセッサスレッドのための再配置ファクタを有する再配置ファクタ・レジスタを提供する、
請求項14に記載のコンピュータ・システム。
【請求項16】
前記アドレス予約コンポーネントが、
前記第1のストレージ領域のアドレスに基づいて前記第2のストレージ領域のセットの各々についてプロセッサスレッドのための再配置ファクタを計算するための再配置ファクタ計算コンポーネンを含み、前記第1のストレージ領域内の変位にあるアドレスに前記再配置ファクタを加算することで第2のストレージ領域内の同じ変位にあるアドレスが得られる、請求項14に記載のコンピュータ・システム。
【請求項17】
前記分割コンポーネントが、1つの部分内に実行可能な静的リンクされたプログラムの単一オブジェクトを提供するための、分割時のリンク要件に対応するためのリンク・ハンドリング・コンポーネントを含む、請求項14に記載のコンピュータ・システム。
【請求項18】
ランタイム再配置コンポーネントをさらに含み、前記ランタイム再配置コンポーネントが、
プロセッサスレッド上のプログラムの実行可能コードに対するアクセス要求を受け取るためのアクセス要求受取りコンポーネントと、
前記プロセッサスレッドのための前記再配置領域レジスタをルックアップして、予約された第1のストレージ領域を識別するための第1のストレージ領域ルックアップ・コンポーネントと、
プロセッサスレッドのための再配置ファクタ・レジスタをルックアップして再配置ファクタを得るための再配置ファクタルックアップ・コンポーネントと、
前記再配置ファクタを使用して、予約された前記第1のストレージ領域内のアドレスから、予約された前記第1のストレージ領域で実行されているコードを収容する予約された前記第2のストレージ領域のうちの1つに変換するための、アドレス変換コンポーネントと、
を含む、請求項15に記載のコンピュータ・システム。
【請求項19】
前記ランタイム再配置コンポーネントが、動的リンク呼出し及び戻りに対応するためにランタイム中に再配置ファクタ・レジスタを変更するための動的リンクコンポーネントを含む、請求項18に記載のコンピュータ・システム。
【請求項20】
前記ランタイム再配置コンポーネントが、前記再配置ファクタ・レジスタを設定するためにオペレーティングシステム・サービスを呼び出す、請求項18に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータのアドレス指定モードに関し、より具体的には、小メモリアドレス幅(smaller memory-address width)プログラムを大メモリアドレス幅(larger memory-address width)アドレス空間内で実行することに関する。
【背景技術】
【0002】
アドレス指定モード(AMODE)は、プログラムがストレージアドレスのために使用するビットの数を識別するために使用される。AMODE-31プログラムは、31ビットのストレージアドレスを使用し、4バイトのフィールドと4バイトのレジスタとを使用してこれを収容する。AMODE-64プログラムは、64ビットのストレージアドレスを使用し、8バイトのフィールドと8バイトのレジスタとを使用してこれを収容する。
【0003】
レジデンス・モード(RMODE)は、プログラム自体がメモリ内のどこに常駐すべきかを記述するために使用される。RMODE-31プログラムは、31ビットアドレスを使用してアクセスできるストレージ内に、すなわち「below the bar」とも呼ばれるアドレス空間の最初の2GB内に常駐する必要がある。RMODE-64プログラムは、64ビットアドレスを使用してアクセスできるストレージ、すなわち64ビット・アーキテクチャのアドレス空間内のどこかに常駐する必要がある。RMODE-64プログラムは、「above the bar」とも呼ばれる、最初の2GBより上のストレージ内に常駐することができ、好ましくは常駐する。
【0004】
現代のコンピュータ・アーキテクチャは、典型的には64ビット仮想ストレージアドレスをサポートしているが、同じアーキテクチャの古いバージョンは、典型的には、8ビット、16ビット、24ビット、31ビット、又は32ビットなどのより小さいアドレスをサポートしていた。64ビット・アーキテクチャは、AMODE-64プログラムを実行するように設計されているが、多くの場合、より古いバージョンのアーキテクチャ由来のプログラムも実行可能である。これを可能にする技術には、エミュレーション、及び、バイモーダル又はトリモーダル・オペレーションがある。これに適用可能な他の有用な技術には、ルーチンを相互に呼び出すことができないソフトウェアモジュール間の相互運用性を提供するために使用されるサンクがあり、この場合、呼出しプロセス内に(場合によっては戻り処理内に)コードが挿入される。
【0005】
バイモーダル・オペレーションは、2つのアドレス指定モードでプログラムを実行することを可能にする。アプリケーション・サーバはこの機能を広範に使用しており、それにより、ユーザは何十年もかけて開発されたアプリケーションを最新のプロセッサ上で引き続き実行することができるようになっている。また、さまざまな理由から、ユーザは新たなAMODE-31プログラムの開発を続けている。インストレーションにおいて、RMODE-31プログラムが占有する「below the bar」ストレージの量が大きいこと、及び、増大していることがある。そのようなインストレーションのユーザは、データのためにより多くのストレージを使用可能にするため、又はより多くのプログラムをアドレス空間にロードするため、又はその両方のために、RMODE-31プログラムによるbelow the barストレージを「解放」したいと望むであろう。
【0006】
この問題は、ランタイムがサポートできるアドレス幅よりも小さいメモリアドレス幅のために構築されたアプリケーション・プログラムを実行する必要がある他のケースにも当てはまる。
【発明の概要】
【0007】
本発明の一態様によれば、大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行するためのコンピュータ実装方法であって、小メモリアドレス幅プログラム実行可能コードを部分のセットに分割することと、小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第1の仮想ストレージ領域を予約することと、プログラム実行可能コードに対応するために、大メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第2の仮想ストレージ領域のセットを予約することと、予約された第1の仮想ストレージ領域のアドレスから実行可能コードを収容する予約された第2の仮想ストレージ領域の1つに変換するために、プロセッサスレッドのための再配置ファクタを提供することと、を含む方法が提供される。
【0008】
本発明の別の態様によれば、大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行するためのコンピュータプログラム製品が提供され、プログラムのランタイムにおいて、方法は、プロセッサスレッド上のプログラムの実行可能コードに対するアクセス要求を受け取ることと、小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部において、プロセッサスレッドのための予約された第1のストレージ領域をルックアップすることと、プロセッサスレッドのための再配置ファクタをルックアップして、再配置ファクタを取得することと、再配置ファクタを使用して、予約された第1のストレージ領域のアドレスから、プログラム実行可能コードに対応する大メモリアドレス幅アドレスを使用してアクセスされるアドレス空間の一部における第2の仮想ストレージ領域のセットのうちの1つに変換することであって、予約された第2のストレージ領域は予約された第1のストレージ領域で実行されるコードを収容する、変換することと、を含む。
【0009】
本発明の別の態様によれば、大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行するためのコンピュータ・システムであって、プロセッサと、コンポーネントの機能を実行するためにプロセッサにコンピュータプログラム命令を提供するように構成されたメモリと、アドレス予約コンポーネントとを含み、アドレス予約コンポーネントは、小メモリアドレス幅プログラム実行可能コードを部分のセットに分割するための分割コンポーネントと、小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第1の仮想ストレージ領域を予約するための第1のストレージ領域予約コンポーネントと、プログラム実行可能なコードに対応するために、大メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第2の仮想ストレージ領域のセットを予約するための第2のストレージ領域予約コンポーネントと、予約された第1の仮想ストレージ領域内のアドレスから実行可能コードを収容する予約された第2の仮想ストレージ領域のうちの1つに変換するために、プロセッサスレッドのための再配置ファクタを提供するための再配置ファクタ提供コンポーネントと、を含む、コンピュータ・システムが提供される。
【0010】
システムは、ランタイム配置コンポーネントをさらに含むことができ、ランタイム配置コンポーネントは、プロセッサスレッド上のプログラム実行可能コードに対するアクセス要求を受け取るためのアクセス要求受取りコンポーネントと、プロセッサスレッドのための再配置領域レジスタをルックアップして予約された第1のストレージ領域を識別するための第1のストレージ領域ルックアップ・コンポーネントと、プロセッサスレッドのための再配置ファクタ・レジスタをルックアップして再配置ファクタを得るための再配置ファクタルックアップ・コンポーネントと、再配置ファクタを使用して、予約された第1のストレージ領域のアドレスから予約された第1のストレージ領域で実行されているコードを収容する予約された第2のストレージ領域のうちの1つに変換するためのアドレス変換コンポーネントと、を含む。
【0011】
本発明の別の態様によれば、大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行するためのコンピュータプログラム製品が提供され、このコンピュータプログラム製品は、具現化されたプログラム命令を有するコンピュータ可読ストレージ媒体を含み、プログラム命令は、プロセッサによって実行可能であり、プロセッサに、小メモリアドレス幅プログラム実行可能コードを部分のセットに分割することと、小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第1の仮想ストレージ領域を予約することと、プログラム実行可能コードに対応するために、大メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第2の仮想ストレージ領域のセットを予約することと、予約された第1の仮想ストレージ領域のアドレスから実行可能コードを収容する予約された第2の仮想ストレージ領域のうちの1つに変換するために、プロセッサスレッドのための再配置ファクタを提供することと、を実行させる。
【0012】
本発明の別の態様によれば、大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行するためのコンピュータプログラム製品が提供され、このコンピュータプログラム製品は、具現化されたプログラム命令を有するコンピュータ可読ストレージ媒体を含み、プログラム命令は、プロセッサによって実行可能であり、プロセッサに、プロセッサスレッド上のプログラムの実行可能コードに対するアクセス要求をうけとることと、小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部において、プロセッサスレッドのための予約された第1のストレージ領域をルックアップすることと、プロセッサスレッドのための再配置ファクタをルックアップして、再配置ファクタを取得することと、再配置ファクタを使用して、予約された第1のストレージ領域のアドレスから、プログラム実行可能なコードに対応する大メモリアドレス幅アドレスを使用してアクセスされるアドレス空間の一部における第2の仮想ストレージ領域のセットのうちの1つに変換することであって、予約された第2のストレージ領域は予約された第1のストレージ領域で実行されるコードを収容する、変換することと、を含む方法を実行させる。
【0013】
コンピュータ可読ストレージ媒体は、非一時的なコンピュータ可読ストレージ媒体とすることができ、コンピュータ可読プログラムコードは、処理回路によって実行可能なものとすることができる。
【図面の簡単な説明】
【0014】
本発明とみなされる主題は、本明細書の結論部分で特に指摘され、明確に主張されている。本発明は、編成及び動作方法の両方について、その目的、特徴、及び利点とともに、添付の図面とともに読む以下の詳細な説明を参照することによって最もよく理解することができる。
【0015】
次に、本発明の好ましい実施形態を、例示のためにのみ、以下の図面を参照しながら説明する。
【0016】
図1】本発明による方法の例示的な実施形態のフロー図である。
図2】本発明による方法の一態様の例示的な実施形態のフロー図である。
図3】本発明による方法の他の態様の例示的な実施形態のフロー図である。
図4】本発明による方法を説明するための模式図である。
図5】本発明によるシステムの例示的な実施形態のブロック図である。
図6】本発明を実装することができるコンピュータ・システム又はクラウドサーバの一実施形態のブロック図である。
【0017】
図解の簡略化及び明確化のために、図中に示された要素は必ずしも縮尺通りに描かれていないことが理解されるであろう。例えば、いくつかの要素の寸法は、明確にするために、他の要素に対して誇張されている場合がある。さらに、適切と考えられる場合には、対応する又は類似する特徴を示すために、参照番号が図間で繰り返されることがある。
【発明を実施するための形態】
【0018】
記載の方法及びシステムは、小メモリアドレス幅プログラムが、アドレス空間の小メモリアドレス幅アドレス指定可能な部分の外側に常駐して、小メモリアドレス幅アドレス指定モードで実行されることを可能にする。このことにより、小メモリアドレス幅プログラムを大メモリアドレス幅アーキテクチャ上で実行することが可能になる一方で、アドレス空間の小メモリアドレス幅部分の空間が解放され、アドレス空間の大メモリアドレス幅部分のより大きな利用可能な空間を使用することができるようになる。
【0019】
用語「小メモリアドレス幅(smaller memory-address width)」及び「大メモリアドレス幅(larger memory-address width)」アドレスは、小メモリアドレス幅アドレス及び大メモリアドレス幅アドレスの任意の適切な組合せペアを記述するために使用される。記載例では、小メモリアドレス幅アドレスは31ビットアドレスであり、大メモリアドレス幅アドレスは64ビットアドレスである。
【0020】
記載の方法において、任意の1つのプログラムについて、それが実行されている間、同じアドレス空間内に2つの仮想ストレージ領域が存在する。第1は、小さい幅のアドレスで十分なアドレス空間の部分内に位置し、第2は、より大きい幅のアドレスを必要とするアドレス空間のもっと大きな部分内に位置する領域のセットのうちの1つである。スレッドが第1の領域内のアドレスを使用して、第2の領域内に位置する実行可能コードにアクセスすることを可能にする、再配置(relocation)機構が提供される。
【0021】
図1を参照すると、フロー図100は、記載の方法の例示的な実施形態を示す。
【0022】
小メモリアドレス幅の実行可能コードのアプリケーション・プログラムが、部分のセットに分割される(101)。この分割は、ある部分が他の部分へのポインタを含まないことを保証するよう、間のリンクを考慮する。静的リンクされたプログラムの単一の実行可能なオブジェクトは、そのオブジェクトが含むポインタが他のそうしたオブジェクト内を指すことがないので、1つの部分として機能する。この知見は、アプリケーション・コードを分割するプロセスを簡素化する。さらに、この分割は同じ部分内に複数のオブジェクトを含んでもよく、また、一方のオブジェクトのコードが他方のオブジェクトのコードに静的リンクしないという条件で、既存のオブジェクトは2つのオブジェクトに分割可能であり得る。
【0023】
小メモリアドレス幅アドレスによってアクセスされる第1の仮想ストレージ領域が、コード部分のセットのうち最も大きいものを収容するのに少なくとも十分なサイズで予約される(102)。大メモリアドレス幅アドレスによってアクセスされなければならない第2のストレージ領域のセットが予約される(103)。第2のストレージ領域のセットの各々は、第1の領域と同じ大きさとすることができる。あるいは、第2のストレージ領域は、各々が収容するアプリケーション部分のサイズに各々が一致するように割り当てることができる。
【0024】
本方法は、予約された第1のストレージ領域を識別するために、プロセッサスレッドのための再配置領域レジスタを提供し(104)、第1のストレージ領域内のアドレスの変換に基づいて第2のストレージ領域のセットにアクセスするために、プロセッサスレッドのための再配置ファクタを有する再配置ファクタ・レジスタを提供する(105)。
【0025】
ソフトウェアは、これらの値を、自身の使用のために利用可能な状態に保持するハードウェアに提供する必要がある。用語「レジスタ」は、このように使用されるメモリ位置の一般的な総称として使用される。1つの例示的な実装では、z/Architecture(z/Architectureはインターナショナル・ビジネス・マシーンズ・コーポレーションの商標である)のディスパッチャブル・ユニット・コントロール・テーブル(DUCT)内のフィールドを使用することができ、これもまたレジスタとして説明することができる。
【0026】
ランタイムにおいて、アプリケーション・プログラムを実行する方法は、再配置機構を使用して、プロセッサスレッドに関連付けられた再配置領域レジスタをルックアップして、予約された第1のストレージ領域内のアドレスを識別する。再配置機構はまた、プロセッサスレッドのための再配置ファクタ・レジスタをルックアップして第1のストレージ領域内のアドレスの変換を提供し、第2のストレージ領域のセットのうちの1つへのアクセスを可能にする。これにより、スレッドが小メモリアドレス幅アドレスを使用して第2のストレージ領域のセットのうちの1つの中の実行可能コードにアクセスすることが可能になる。異なるスレッドに対して及び異なる時間における同じスレッドに対して異なる再配置ファクタが提供され、同じ第1のストレージ領域を使用して、異なる実行可能コードを取得している異なる第2のストレージ領域のセットにアクセスする。
【0027】
31ビットアドレス指定モード(AMODE-31)及び64ビットアドレス指定モード(64-AMODE)を例にとると、本方法は、below-the-bar仮想ストレージアドレスを使用して、above-the-bar仮想ストレージ内のAMODE-31実行可能コードにアクセスすることができる。このことにより、実行可能コードが31ビットアドレスを使用して(例えば、分岐や定数へのアクセス時などに)自分自身を参照することが可能になる。実行可能コードはそれでもなお、31ビットアドレスを使用して、below-the-barストレージ内のデータ及び他のプログラムにアクセスすることもできる。このようにして、実行可能コードがたとえabove-the-barのストレージ内に常駐していても、これをAMODE-31で実行することができる(RMODE-31)。
【0028】
31ビットアドレスを使用して、実行可能コードを収容するabove-the-bar仮想ストレージにアクセスする場合、再配置機構は、スレッドに関連付けられた64ビット変位又は再配置ファクタを31ビットアドレスに加算して、64ビットアドレスを計算する。この加算プロセスは、実行コードに対して透過的である。
【0029】
異なる再配置ファクタを使用して、異なるスレッド(又は異なる時間における同じスレッド)が、異なる実行可能コードを収容する異なるabove-the-barストレージにアクセスできるようにすることができる。このようにして、below-the-bar仮想アドレスの同じ範囲を、above-the-bar仮想アドレスの異なる範囲内に常駐する実行可能AMODE-31コードの異なる部分に対して使用することができる。
【0030】
図2を参照すると、フロー図200は、記載の方法のより詳細な例示的な実施形態を示す。この例示的な実施形態において、小メモリアドレス幅アドレスは、31ビットアドレスであり、第1の仮想ストレージ空間が「below-the-bar」であり、すなわちアドレス空間の最初の2GBにあり、大メモリアドレス幅アドレスは、64ビットアドレスであり、第2の仮想ストレージ空間が「above-the-bar」である。図2に関連して記載する方法は、他の小メモリアドレス幅アドレスと大メモリアドレス幅アドレスとのペアに対して使用することができる。
【0031】
本方法は、31ビットアドレス指定モードのアプリケーション・プログラム実行可能コードの全体をいくつかの部分に分割する(201)。プログラム間のリンクに対応するこの分割の詳細については、さらに後述する。
【0032】
本方法は、これらの部分のうちの最大のものを収容するのに少なくとも十分な大きさのbelow-the-barストレージ領域を予約する(202)。本方法は、プロセッサスレッドに関連付けられた再配置領域レジスタを使用して、below-the-barストレージ内の予約領域を識別する(203)。例えば、再配置領域レジスタは、領域のアドレス及び長さ、又は領域の開始アドレス及び終了アドレスを収容することができる。再配置領域レジスタは、命令アドレス・レジスタがプロセッサスレッドに関連付けられるのとほぼ同じ方式で提供され得る。
【0033】
本方法は、各領域がbelow-the-barストレージの予約領域と同じサイズである、above-the-barストレージの領域のセットを予約する(204)。領域のセット内の領域の数は、実行可能コードの分割によって得られた部分の数に少なくとも等しい。本方法は、予約されたabove-the-bar領域のセットの各々について再配置ファクタを計算し(205)、below-the-bar領域内のある変位におけるアドレスに再配置ファクタを加算すると、above-the-bar領域内の同じ変位におけるアドレスが得られる。
【0034】
本方法は、同様に命令アドレス・レジスタがプロセッサスレッドに関連付けられるのとほぼ同じ方式で、再配置ファクタ・レジスタを使用して、計算された再配置ファクタをプロセッサスレッドに関連付ける(206)。
【0035】
本方法は、再配置機構を使用して(207)、below-the-barストレージ内のbelow-the-barアドレスからの再配置でabove-the-barストレージにアクセスする。
【0036】
図3を参照すると、フロー図300は、記載のストレージ方法を使用して格納された命令又はデータにアクセスするための方法の例示的な実施形態を示す。再配置機構は、記載のアクセス方法を実行することができる。
【0037】
任意の1つのプログラムについて、それが実行されている間、同じアドレス空間内に2つの仮想ストレージ領域が存在する。第1のストレージ領域は、小さい幅のアドレスで十分なアドレス空間の部分内に位置し、第2のストレージ領域は、より大きい幅のアドレスを必要とするアドレス空間のもっと大きい部分内に位置する領域のセットのうちの1つである。スレッドが第1のストレージ領域内のアドレスを使用して、第2のストレージ領域内に位置する実行可能コードにアクセスすることを可能にする、再配置機構が提供される。
【0038】
プロセッサスレッドにおいて小メモリアドレス幅アドレス指定モードを使用してアクセス要求を受け取り(301)、プロセッサスレッドのための再配置領域レジスタに対してルックアップが実行され(302)、小さいアドレス幅で十分なアドレス空間の第1のストレージ領域内のストレージへのアクセスを識別する。
【0039】
本方法は、再配置ファクタ・レジスタをルックアップして(303)、プロセッサスレッドに関連付けられた再配置ファクタを取得する。取得された再配置ファクタは、小メモリアドレス幅のアドレスに適用され(304)、結果として得られたアドレスを使用して(305)、より大きい幅のアドレスを必要とする第2のストレージ領域内のストレージにアクセスする。本方法は、命令アクセス及びデータアクセスの両方に使用される。
【0040】
図4を参照すると、概略図400は、記載の方法を示している。アプリケーション・プログラム410は、n個の部分411に分割され、最大の部分412はサイズxを有する。仮想アドレス空間420には、小メモリアドレス幅アドレス空間423と残りのアドレス空間424との間に分割部(divide)425が設けられる。小メモリアドレス幅アドレスが31ビットアドレスである場合、分割部425は、2GBにおける「バー(bar)」である。
【0041】
サイズxの第1の領域A421が小メモリアドレス幅アドレス空間423内に予約され、サイズxのn個の領域(領域B、C、・・・M)のセット422が残りのアドレス空間424内に予約される。再配置領域レジスタ430を設けて、予約領域A421をプロセッサスレッドのためのものとして識別し(431)、再配置ファクタ・レジスタ440を設けて、プロセッサスレッドのための再配置ファクタ441を提供し、第1の領域アドレスを残りのアドレス空間424内の領域のセット422のうちの1つに変換する。
【0042】
記載の方法は、アプリケーション・コードの一部分をabove-the-barストレージの予約領域の1つに常駐させ、AMODE-31で実行することを可能にする。そのプロセッサスレッドで実行される任意のコードが、予約されたbelow-the-barストレージ領域内の31ビットアドレスを使用して、above-the-bar領域内のすべてのストレージにアクセスする。ランタイム又はオペレーティングシステムが提供するサービスの呼出しや、ランタイム又はオペレーティングシステムが所有するデータへの参照など、above-the-bar領域外のストレージへの参照は、再配置プロセスの影響を受けない。アプリケーションのコード、及びアプリケーションが呼び出すランタイムのコードは、アプリケーション・コードがbelow-the-bar領域内に常駐するときと同じように動作する。
【0043】
本方法は、記載した能力を使用して、AMODE-31アプリケーション・コードに必要なbelow-the-barストレージを削減する。これを達成するために、ランタイムは、アプリケーション・コードの異なる部分に対して異なるabove-the-barストレージ領域を使用するが、予約されたbelow-the-bar領域のbelow-the-barアドレスの同じ範囲をこれらの異なるabove-the-barストレージ領域に再配置する。
【0044】
ランタイムは、その部分内でアプリケーション・コードを使用しているプロセッサスレッドのための再配置ファクタ・レジスタ内に正しい再配置ファクタがあることを保証する。再配置ファクタ・レジスタはハードウェア・コンポーネントなので、ランタイムは、そのコンテンツを設定するためにオペレーティングシステム・サービスを呼び出すであろう。
【0045】
アプリケーション・コードを部分に分割する

上記の実施形態は、ある小メモリアドレス幅アプリケーション・コード部分が異なる小メモリアドレス幅アプリケーション・コード部分内のストレージにアクセスすることを許容していない。換言すれば、あるアプリケーション・プログラムが別のアプリケーション・プログラムのストレージにアクセスする場合、両方のプログラムが同じ部分内に存在しなければならない。アプリケーション・コードを部分に分割する態様についての以下の議論は、そのことに対処する。
【0046】
あるアプリケーション・プログラムが別のアプリケーション・プログラムを呼び出す場合、通常、エントリ及びリターンポイント・アドレスに対して以下のリンク機構のうちの1つを使用する。
【0047】
第1の機構では、静的リンクが提供される。呼出し側プログラムは、被呼出しプログラムのエントリポイントのストレージアドレスを「知って」いる。これは、そのアドレスに分岐し、(それ自身の中の)リターンアドレスを引数として渡す。被呼出しプログラムは、そのリターンアドレスに分岐することによって戻る。これは、リンカ又は類似の機構を用い、静的ライブラリを使用して、相互リンクされたプログラムのセットを結合して単一の実行可能オブジェクトとし、それはz/Architecture(z/Architectureはインターナショナル・ビジネス・マシーンズ・コーポレーションの商標である)においてロード・モジュールと呼ばれることがある。このことは、静的リンクの呼出し及び戻りは、必然的に同じロード・モジュール内にあるストレージにアクセスすることを意味する。
【0048】
記載の方法において、アプリケーション・コードは部分に分割され、その各々は、実行可能な静的リンクされたプログラムの単一のオブジェクトを1つの部分内に収容する。言い換えれば、ロード・モジュールは、コードが分割されたときに1つの部分内に存在する。
【0049】
第2の機構では、動的リンクを提供することができる。この場合、呼出し側プログラムは、被呼出しプログラムのストレージアドレスを知らない。場合によっては、ランタイムは、呼出しが発行されるまで被呼出しプログラムをメモリにロードしない。呼出し側プログラムは、ランタイムサービスを起動し、ターゲットプログラムのエントリポイントを識別する名前又は他のトークンを渡し、リターンアドレスを渡す。ランタイムサービスは、該当する場合、メモリにロードした後にターゲットプログラムを呼び出す。これは動的リンクであり、相互リンクされたプログラムが異なる実行可能オブジェクト内に存在することを可能にする。
【0050】
記載の方法では、動的リンクの呼出し及び戻りはランタイムによってハンドリングされ、ランタイムは、結果として、必要に応じて再配置ファクタ・レジスタを変更することができる。このことにより、異なるロード・モジュールが異なる部分内に存在することが可能になる。
【0051】
あるコード部分が別のコード部分に動的にリンクする場合、リンク元のコード部分で使用されている再配置値をそのコード部分に必要な値に置き換える必要がある。なぜなら、2つのコード部分は各々同じ「第1領域」を順次使用するが、異なる「第2領域」を使用するからである。動的リンク機構はアプリケーションの一部ではないコードを使用するので、そのコードはリンクプロセス中に再配置レジスタ内の値を変更するポジションにある。
【0052】
動的リンクのバリエーションは、アプリケーション・ロード・モジュールをロードするプログラムがエントリポイント・アドレスを収容するテーブルを構築する場合を含む。他のロード・モジュール内のアプリケーション・プログラムは、テーブルから必要なエントリポイント・アドレスをロードし、ターゲットプログラムに直接分岐することができる(静的リンク呼出しに多少似ている)。このようにテーブルを構築するプログラムを修正して、テーブルがターゲット・エントリポイント自体のアドレスではなく、「グルー(glue)」プログラムのアドレスを保存するようにすることも可能である。グルー・プログラムは、従来の動的リンクを起動することができるので、ターゲット・エントリポイントを含むロード・モジュールを別の部分に置くことが可能になる。
【0053】
呼出し側プログラムは、通常、被呼出しプログラムに引数としてデータを渡す。被呼出しプログラムは、引数をパラメータとして受け取る。典型的には、引数はデータのアドレス(参照による呼出し)又はデータの値(値による呼出し)のいずれかである。
【0054】
参照による呼出しの場合、データ自体は呼出し側プログラムの部分内にあってもよい。もしそうであれば、呼出し側プログラムは被呼出しプログラムと同じ部分にあるか、又は、再配置プロセスから完全に除外されなければならない。
【0055】
いずれの場合も、データはアドレスであってもよい。もしそれが呼出し側プログラムの部分内のストレージのアドレスであれば、呼出し側プログラムは被呼出しプログラムと同じ部分にあるか、又は、再配置プロセスから完全に除外されなければならない。
【0056】
あるいは、被参照データを動的ストレージにコピーし、代わりにその動的ストレージのアドレスを渡すように呼出しを変更することも可能である。これは、異なる呼出しロジックをコンパイラに生成させることによって、又は、「サンク」コードを静的に含めるもしくはランタイムにおいてリンケージサービスによって作り出すことによって実現できる。
【0057】
アプリケーション・プログラムがリエントラントであれば、プログラム内のデータは一定に保たれる。
【0058】
要約すると、プログラムから別のプログラムへの直接参照は、一般にリンカ(又は類似のもの)によって仲介され、ロード・モジュール内に制約されるので、ロード・モジュールは、部分のための自然な選択である。
【0059】
異なるロード・モジュール間のリンクは、ロード・モジュールが別々の部分にあることを必ずしも妨げない。これを妨げる場合、被呼出しプログラムと呼出し側プログラムを同じ部分に含めることができる。
【0060】
場合によっては、ターゲットが広く使われている場合には、ターゲットプログラムのコピーを複数の部分に含めるか、又は、ターゲットを再配置プロセスから完全に除外し、従来のRMODEの小メモリアドレス幅プログラムとして扱うことができる。
【0061】
図5を参照すると、少なくとも1つのプロセッサ上で実行されるソフトウェアユニットとすることができる記載のコンポーネントの機能を実行するためのハードウェアモジュール又は回路である少なくとも1つのプロセッサ501を含む、コンピューティング・システム500が示されている。並列のプロセッサスレッドを実行する複数のプロセッサを設けて、コンポーネントの機能の一部又は全部の並列処理を可能にすることができる。
【0062】
メモリ502は、コンポーネントの機能を実行するために、少なくとも1つのプロセッサ501にコンピュータ命令を提供するよう構成することができる。格納された実行可能コード503にアクセスするために仮想ストレージ空間520が設けられ、関連付けられた再配置領域レジスタ530及び再配置ファクタ・レジスタ540を伴う。
【0063】
コンピュータ・システム500は、本明細書に記載のコードアドレス変換を提供するためのアドレス予約コンポーネント550を含み、小メモリアドレス幅プログラムが大メモリアドレス幅アドレス空間の小メモリアドレス幅アドレス指定可能な部分の外に常駐し、小メモリアドレス幅アドレス指定モードで実行されることを可能にする、アドレス再配置を提供する。
【0064】
コンピュータ・システム500はまた、小メモリアドレス幅アドレス指定可能部分の外に常駐する一方で、小メモリアドレス幅アドレス指定モードで実行される小メモリアドレス幅プログラムに、ランタイム中にアドレス再配置を提供するためのランタイム再配置コンポーネント560を含む。
【0065】
再配置ファクタ・レジスタ540はハードウェア・コンポーネントなので、ランタイム再配置コンポーネント560は、オペレーティングシステム・サービスを呼び出してそのコンテンツを設定することができる。オペレーティングシステムは、どのプログラムが再配置ファクタ・レジスタを設定できるかを制限することでき、これを行う典型的な方法は、値を設定する命令を発行することをオペレーティングシステム・コードのみに許可することである。したがって、他のコードは、その代理で必要な値を設定するオペレーティングシステム・サービスを起動する必要があり得る。
【0066】
アドレス予約コンポーネント550は、小メモリアドレス幅アプリケーション・プログラム実行可能コードを部分のセットに分割するための分割コンポーネント551を含むことができる。分割コンポーネント551は、1つの部分内に静的リンクされたプログラムの単一の実行可能なオブジェクトを提供することを含む分割時のリンク要件に対応するための、リンク・ハンドリング・コンポーネント552を含むことができる。
【0067】
アドレス予約コンポーネント550は、小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第1の仮想ストレージ領域を予約するための第1のストレージ領域予約コンポーネント553と、プログラム実行可能コードに対応するために、大メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第2のストレージ領域のセットを予約するための第2のストレージ領域予約コンポーネント554とを含むことができる。
【0068】
アドレス予約コンポーネント550は、第1のストレージ領域のアドレスに基づいて第2のストレージ領域のセットの各々のプロセッサスレッドのための再配置ファクタを計算するための再配置ファクタ計算コンポーネント557を含むことができ、第1のストレージ領域内のある変位におけるアドレスに再配置ファクタを加算することで第2のストレージ領域内の同じ変位におけるアドレスが得られるようになっている。
【0069】
アドレス予約コンポーネント550は、再配置領域レジスタ530を提供して、プロセッサスレッドが予約された第1のストレージ領域を識別することを可能にするための再配置領域提供コンポーネント555と、プロセッサスレッドのための再配置ファクタを有する再配置ファクタ・レジスタ540を提供して、第1のストレージ領域内のアドレスの変換に基づいて第2のストレージ領域のセットにアクセスするための再配置ファクタ提供コンポーネント556とを含むことができる。
【0070】
ランタイム再配置コンポーネント560は、プロセッサスレッド上のアプリケーション・プログラムの実行可能コードに対するアクセス要求を受け取るためのアクセス要求受取りコンポーネント561を含むことができる。ランタイム再配置コンポーネント560は、プロセッサスレッドのための再配置領域レジスタ530をルックアップして、予約された第1のストレージ領域を識別するための第1のストレージ領域ルックアップ・コンポーネント563と、プロセッサスレッドのための再配置ファクタ・レジスタ540をルックアップして、再配置ファクタを得るための再配置ファクタルックアップ・コンポーネント564とを含むことができる。
【0071】
ランタイム再配置コンポーネント560は、予約された第1のストレージ領域内のアドレスから第2のストレージ領域のセットへの再配置ファクタを使用して変換して、第2のストレージ領域のセット内の実行可能コードにアクセスするためのアドレス変換コンポーネント566を有する、再配置機構565を含むことができる。
【0072】
ランタイム再配置コンポーネント560は、にランタイム中に再配置ファクタ・レジスタを変更して、動的リンク呼出し及び戻りに対応するための動的リンクコンポーネント567を含むことができる。
【0073】
図6は、本発明の実施形態によるコンピューティング・システム500のコンポーネントのブロック図を示すものである。図6は、1つの実装の例示を提供するだけであり、異なる実施形態が実装され得る環境に関していかなる制限も意味しないことを理解されたい。描かれた環境に対する多くの変更がなされ得る。
【0074】
コンピューティング・システムは、1つ又は複数のプロセッサ602、1つ又は複数のコンピュータ可読RAM604、1つ又は複数のコンピュータ可読ROM606、1つ又は複数のコンピュータ可読ストレージ媒体608、デバイスドライバ612、読出し/書込みドライブ又はインターフェース614、及びネットワークアダプタ又はインターフェース616を含むことができ、すべてが通信ファブリック618上で相互接続される。通信ファブリック618は、プロセッサ(マイクロプロセッサ、通信及びネットワークプロセッサなど)、システムメモリ、周辺デバイス、及びシステム内の他の任意のハードウェア・コンポーネント間でデータもしくは制御情報又はその両方を渡すために設計された任意のアーキテクチャで実装することができる。
【0075】
1つ又は複数のオペレーティングシステム610と、実行可能コードアドレス予約コンポーネント550及び実行可能コードランタイム再配置コンポーネント560などのアプリケーション・プログラム611とが、それぞれのRAM604(これは典型的にはキャッシュメモリを含む)の1つ又は複数を介したプロセッサ602の1つ又は複数による実行のためにコンピュータ可読ストレージ媒体608の1つ又は複数上に格納される。図示された実施形態では、コンピュータ可読ストレージ媒体608の各々は、本発明の実施形態に従って、内蔵ハードドライブの磁気ディスク・ストレージデバイス、CD-ROM、DVD、メモリスティック、磁気テープ、磁気ディスク、光ディスク、半導体ストレージデバイス、例えばRAM、ROM、EPROM、フラッシュメモリなど、又はコンピュータプログラム及びデジタル情報を格納できる他の任意のコンピュータ可読ストレージ媒体とすることができる。
【0076】
コンピューティング・システムはまた、1つ又は複数のポータブル・コンピュータ可読ストレージ媒体626の読出し及び書込みのためのR/Wドライブ又はインターフェース614を含むことができる。コンピューティング・システム上のアプリケーション・プログラム611は、1つ又は複数のポータブル・コンピュータ可読ストレージ媒体626に格納され、それぞれのR/Wドライブ又はインターフェース614を介して読み出され、それぞれのコンピュータ可読ストレージ媒体608にロードすることができる。
【0077】
コンピューティング・システムはまた、TCP/IPアダプタカード又は無線通信アダプタなどのネットワークアダプタ又はインターフェース616を含むことができる。コンピューティング・システム上のアプリケーション・プログラム611は、ネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク又は他の広域ネットワーク又は無線ネットワーク)及びネットワークアダプタ又はインターフェース616を介して、外部コンピュータ又は外部ストレージデバイスからコンピューティング・デバイスにダウンロードすることができる。ネットワークアダプタ又はインターフェース616から、プログラムは、コンピュータ可読ストレージ媒体608にロードすることができる。ネットワークは、銅線、光ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及びエッジサーバを含むことができる。
【0078】
コンピューティング・システムはまた、ディスプレイスクリーン620、キーボード又はキーパッド622、及びコンピュータマウス又はタッチパッド624を含むことができる。デバイスドライバ612は、イメージング用のディスプレイスクリーン620に、キーボード又はキーパッド622に、コンピュータマウス又はタッチパッド624に、もしくは英数字文字入力及びユーザ選択の圧力検知用のディスプレイスクリーン620に、又はそれらの組合せにインターフェースする。デバイスドライバ612、R/Wドライブ又はインターフェース614、及びネットワークアダプタ又はインターフェース616は、コンピュータ可読ストレージ媒体608もしくはROM606又はその両方に格納されたハードウェア及びソフトウェアを含むことができる。
【0079】
本発明は、任意の可能な技術的詳細レベルの統合におけるシステム、方法、もしくはコンピュータプログラム製品又はそれらの組合せとすることができる。コンピュータプログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読ストレージ媒体を含むことができる。
【0080】
コンピュータ可読ストレージ媒体は、命令実行デバイスによる使用のために命令を保持及び格納することができる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージデバイス、磁気ストレージデバイス、光ストレージデバイス、電磁気ストレージデバイス、半導体ストレージデバイス、又は上記のものの任意の適切な組合せとすることができるがこれらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラム可能読み出し専用メモリ(EPROM又はフラッシュメモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクトディスク読み出し専用メモリ(CD-ROM)、デジタル多目的ディスク(DVD)、メモリスティック、フロッピーディスク、記録された命令を有するパンチカード若しくは溝内に隆起した構造等の機械式コード化デバイス、及び上記のものの任意の適切な組合せを含む。コンピュータ可読ストレージ媒体は、本明細書で用いられる場合、無線波若しくは他の自由に伝搬する電磁波、導波路若しくは他の伝送媒体を通って伝搬する電磁波(例えば光ファイバケーブルを通る光パルス)、又は電線を通って伝送される電気信号のような一時的な信号自体と解釈すべきではない。
【0081】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスにダウンロードすることも、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワークもしくは無線ネットワーク又はそれらの組合せを経由して、外部コンピュータ若しくは外部ストレージデバイスにダウンロードすることもできる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータもしくはエッジサーバ又はそれらの組合せを含むことができる。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カード又はネットワーク・インタフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、そのコンピュータ可読プログラム命令をそれぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体にストレージのために転送する。
【0082】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用の構成データ、又は、Smalltalk、若しくはC++などのオブジェクト指向プログラミング言語及び「C」プログラミング言語若しくは類似のプログラミング言語のような従来の手続き型プログラミング言語を含む1つ若しくは複数のプログラミング言語の任意の組合せで記述されたソースコード若しくはオブジェクトコードのいずれかとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。後者のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続が行われる場合もある(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)。幾つかの実施形態において、例えばプログラム可能論理回路、フィールドプログラム可能ゲートアレイ(FPGA)、又はプログラム可能論理アレイ(PLA)を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別化することにより、コンピュータ可読プログラム命令を実行することができる。
【0083】
本発明の態様は、本明細書において、本発明の実施形態による方法、装置(システム)、及びコンピュータプログラム製品のフローチャート図もしくはブロック図またはその両方を参照して説明される。フローチャート図もしくはブロック図又はその両方の各ブロック、並びにフローチャート図もしくはブロック図又はその両方のブロックの組合せは、コンピュータ可読プログラム命令によって実装することができることが理解されるであろう。
【0084】
これらのコンピュータ可読プログラム命令を、コンピュータのプロセッサ、又は他のプログラム可能データ処理装置に与えてマシンを製造し、それにより、コンピュータのプロセッサ又は他のプログラム可能データ処理装置によって実行される命令が、フローチャートもしくはブロック図又はその両方の1つ又は複数のブロック内で指定された機能/動作を実装するための手段を作り出すようにすることができる。これらのコンピュータ可読プログラム命令を、コンピュータ、プログラム可能データ処理装置、もしくは他のデバイス又はそれらの組合せを特定の方式で機能させるように指示することができるコンピュータ可読ストレージ媒体内に格納し、それにより、その中に格納された命令を有するコンピュータ可読媒体が、フローチャートもしくはブロック図又はその両方の1つ又は複数のブロックにおいて指定された機能/動作の態様を実装する命令を含む製品を含むようにすることもできる。
【0085】
コンピュータ可読プログラム命令を、コンピュータ、他のプログラム可能データ処理装置又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置又は他のデバイス上で行わせてコンピュータ実装のプロセスを生成し、それにより、コンピュータ、他のプログラム可能装置又は他のデバイス上で実行される命令が、フローチャートもしくはブロック図又はその両方の1つ又は複数のブロックにおいて指定された機能/動作を実装するようにすることもできる。
【0086】
図面内のフローチャート及びブロック図は、本開示の種々の実施形態による、システム、方法、及びコンピュータプログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又は命令の一部を表すことができる。幾つかの代替的な実装において、ブロック内に記された機能は、図中に記された順序とは異なる順序で行われることがある。例えば、連続して示された2つのブロックは、関与する機能に応じて、実際には、部分的に又は完全に時間的に重複した方式で、ワンステップで達成されることもあり、同時に実行されることもあり、実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図もしくはフローチャート図又はその両方の各ブロック、及びブロック図もしくはフローチャート図又はその両方の中のブロックの組合せは、指定された機能又は動作を実行する専用ハードウェア・ベースのシステムによって実装することもでき、又は専用ハードウェアとコンピュータ命令との組合せを実行することもできることにも留意されたい。
【0087】
本発明のコンピュータプログラム製品は、そこに格納されたコンピュータ可読プログラムコードを有する1つ又は複数のコンピュータ可読ハードウェアストレージデバイスを含み、このプログラムコードは、本発明の方法を実施するために1つ又は複数のプロセッサによって実行可能である。
【0088】
本発明のコンピュータ・システムは、1つ又は複数のプロセッサと、1つ又は複数のメモリと、1つ又は複数のコンピュータ可読ハードウェアストレージデバイスとを含み、この1つ又は複数のハードウェアストレージデバイスは、本発明の方法を実施するために1つ又は複数のプロセッサが1つ又は複数のメモリを介して実行可能なプログラムコードを含む。
【0089】
本発明の種々の実施形態の説明は、例証の目的で提示したものであるが、網羅的であることも、又は開示された実施形態に限定することも意図しない。説明した実施形態の範囲から逸脱することなく、多くの修正及び変形が当業者には明らかであろう。本明細書で用いる用語は、実施形態の原理、実際的な用途、若しくは市場において見いだされる技術に優る技術的改善を最も良く説明するように、又は当業者が本明細書で開示される実施形態を理解することを可能にするように、選択されたものである。
【0090】
本発明の範囲から逸脱することなく、前述のことに改良及び修正を加えることができる。

図1
図2
図3
図4
図5
図6
【手続補正書】
【提出日】2023-09-26
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピュータにより、大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行する方法であって、
小メモリアドレス幅プログラム実行可能コードを部分のセットに分割することと、
小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第1の仮想ストレージ領域を予約することと、
前記プログラム実行可能コードに対応するために、大メモリアドレス幅アドレスを用いてアクセスされる前記アドレス空間の一部に第2の仮想ストレージ領域のセットを予約することと、
予約された前記第1の仮想ストレージ領域内のアドレスから前記実行可能コードを収容する予約された前記第2の仮想ストレージ領域のうちの1つにおけるアドレスに変換するために、プロセッサスレッドのための再配置ファクタを提供することと、
を含む方法。
【請求項2】
予約された前記第1の仮想ストレージ領域を前記プロセッサスレッドが識別することを可能にするために、再配置領域レジスタを提供することと、
前記プロセッサスレッドのための前記再配置ファクタを有する再配置ファクタ・レジスタを提供することと、
を含む、請求項1に記載の方法。
【請求項3】
前記第1の仮想ストレージ領域を予約することは、前記プログラム実行可能コードの前記部分のセットのうち最大のものを収容するのに十分な大きさの領域を予約することであり、異なるスレッドに対して及び異なる時間における同じスレッドに対して異なる再配置ファクタが提供され、同じ第1の仮想ストレージ領域を使用して異なる実行可能コードを取得している異なる第2の仮想ストレージ領域のセットにアクセスする、請求項1記載の方法。
【請求項4】
前記再配置ファクタは、前記第1の仮想ストレージ領域内の小メモリアドレス幅アドレスに変位を加算して、前記第2の仮想ストレージ領域のうちの1つにおける大メモリアドレス幅アドレスを計算する、請求項1に記載の方法。
【請求項5】
前記第1の仮想ストレージ領域のアドレスに基づいて、前記第2の仮想ストレージ領域のセットの各々についてプロセッサスレッドのための再配置ファクタを計算することをさらに含み、前記第1の仮想ストレージ領域内の変位にあるアドレスに前記再配置ファクタを加算することで、第2の仮想ストレージ領域内の同じ変位にあるアドレスが得られる、請求項1に記載の方法。
【請求項6】
小メモリアドレス幅プログラム実行可能コードを部分のセットに分割することは、1つの部分内に実行可能な静的にリンクされたプログラムの単一のオブジェクトを提供することを含む、請求項1に記載の方法。
【請求項7】
小メモリアドレス幅プログラム実行可能コードを部分のセットに分割することは、被呼出しプログラムと同じ部分内に呼出しプログラムを提供することを含む、請求項1に記載の方法。
【請求項8】
前記小メモリアドレス幅アドレスは、8ビットアドレス、16ビットアドレス、24ビットアドレス、31ビットアドレス、又は32ビットアドレスの群のうちの1つであり、前記大メモリアドレス幅アドレスは32ビットアドレス又は64ビットアドレスである、請求項1に記載の方法。
【請求項9】
前記小メモリアドレス幅アドレスは31ビットアドレスであり、前記大メモリアドレス幅アドレスは64ビットアドレスであり、前記第1の仮想ストレージ領域はアドレス空間の最初の2GB内にあり、前記第2の仮想ストレージ領域のセットはアドレス空間の最初の2GBを越えたところにある、請求項1に記載の方法。
【請求項10】
大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行するためのコンピュータプログラムであって、前記小メモリアドレス幅プログラムのランタイムにおいて、コンピュータの処理ユニットに、
プロセッサスレッド上の前記小メモリアドレス幅プログラムの実行可能コードに対するアクセス要求を受け取ることと、
小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部において、前記プロセッサスレッドのための予約された第1の仮想ストレージ領域をルックアップすることと、
前記プロセッサスレッドのための再配置ファクタをルックアップして、再配置ファクタを取得することと
前記再配置ファクタを使用して、予約された前記第1の仮想ストレージ領域内のアドレスから、前記実行可能コードに対応する、大メモリアドレス幅アドレスを使用してアクセスされるアドレス空間の一部における第2の仮想ストレージ領域のセットのうちの1つにおけるアドレスに変換することであって、予約された前記第2の仮想ストレージ領域は予約された前記第1の仮想ストレージ領域で実行されるコードを収容する、変換することと、
を含む方法を実行させる、コンピュータプログラム
【請求項11】
予約された第1の仮想ストレージ領域をルックアップすることが、前記プロセッサスレッドのための再配置領域レジスタをルックアップすることであり、
再配置ファクタをルックアップすることが、前記プロセッサスレッドの再配置ファクタ・レジスタをルックアップして、前記プロセッサスレッドのための再配置ファクタを取得することである、請求項10に記載のコンピュータプログラム
【請求項12】
再配置ファクタを使用して変換することが、前記第1の仮想ストレージ領域内の小メモリアドレス幅アドレスに変位を加算して、前記第2の仮想ストレージ領域のうちの1つにおける大メモリアドレス幅アドレスを計算することである、請求項10に記載のコンピュータプログラム
【請求項13】
動的リンク呼出し及び戻りに対応するために、ランタイム中に再配置ファクタ・レジスタを変更することを含む、請求項10に記載のコンピュータプログラム
【請求項14】
大メモリアドレス幅アドレス空間内で小メモリアドレス幅プログラムを実行するためのコンピュータ・システムであって、
プロセッサと、コンポーネントの機能を実行するために前記プロセッサにコンピュータプログラム命令を提供するように構成されたメモリと、
アドレス予約コンポーネントと
を含み、前記アドレス予約コンポーネントが、
小メモリアドレス幅プログラム実行可能コードを部分のセットに分割するための分割コンポーネントと、
小メモリアドレス幅アドレスを用いてアクセスされるアドレス空間の一部に第1の仮想ストレージ領域を予約するための第1のストレージ領域予約コンポーネントと、
プログラム実行可能コードに対応するために、大メモリアドレス幅アドレスを用いてアクセスされる前記アドレス空間の一部に第2の仮想ストレージ領域のセットを予約するための第2のストレージ領域予約コンポーネントと、
予約された第1の仮想ストレージ領域内のアドレスから前記実行可能コードを収容する予約された前記第2の仮想ストレージ領域のうちの1つにおけるアドレスに変換するために、プロセッサスレッドのための再配置ファクタを提供するための再配置ファクタ提供コンポーネントと、
を含む、コンピュータ・システム。
【請求項15】
前記アドレス予約コンポーネントが、
予約された前記第1の仮想ストレージ領域をプロセッサスレッドが識別することを可能にするために再配置領域レジスタを提供するための再配置領域提供コンポーネントを含み、
前記再配置ファクタ提供コンポーネントが、前記プロセッサスレッドのための再配置ファクタを有する再配置ファクタ・レジスタを提供する、
請求項14に記載のコンピュータ・システム。
【請求項16】
前記アドレス予約コンポーネントが、
前記第1の仮想ストレージ領域のアドレスに基づいて前記第2の仮想ストレージ領域のセットの各々についてプロセッサスレッドのための再配置ファクタを計算するための再配置ファクタ計算コンポーネンを含み、前記第1の仮想ストレージ領域内の変位にあるアドレスに前記再配置ファクタを加算することで第2の仮想ストレージ領域内の同じ変位にあるアドレスが得られる、請求項14に記載のコンピュータ・システム。
【請求項17】
前記分割コンポーネントが、1つの部分内に実行可能な静的リンクされたプログラムの単一オブジェクトを提供するための、分割時のリンク要件に対応するためのリンク・ハンドリング・コンポーネントを含む、請求項14に記載のコンピュータ・システム。
【請求項18】
ランタイム再配置コンポーネントをさらに含み、前記ランタイム再配置コンポーネントが、
プロセッサスレッド上のプログラムの実行可能コードに対するアクセス要求を受け取るためのアクセス要求受取りコンポーネントと、
前記プロセッサスレッドのための前記再配置領域レジスタをルックアップして、予約された第1の仮想ストレージ領域を識別するための第1のストレージ領域ルックアップ・コンポーネントと、
プロセッサスレッドのための再配置ファクタ・レジスタをルックアップして再配置ファクタを得るための再配置ファクタルックアップ・コンポーネントと、
前記再配置ファクタを使用して、予約された前記第1の仮想ストレージ領域内のアドレスから、予約された前記第1の仮想ストレージ領域で実行されているコードを収容する予約された前記第2の仮想ストレージ領域のうちの1つにおけるアドレスに変換するための、アドレス変換コンポーネントと、
を含む、請求項15に記載のコンピュータ・システム。
【請求項19】
前記ランタイム再配置コンポーネントが、動的リンク呼出し及び戻りに対応するためにランタイム中に再配置ファクタ・レジスタを変更するための動的リンクコンポーネントを含む、請求項18に記載のコンピュータ・システム。
【請求項20】
前記ランタイム再配置コンポーネントが、前記再配置ファクタ・レジスタを設定するためにオペレーティングシステム・サービスを呼び出す、請求項18に記載のコンピュータ・システム。
【請求項21】
請求項10から請求項13までのいずれかに記載のコンピュータプログラムを格納した、コンピュータ可読ストレージ媒体。
【国際調査報告】