JPH09288586A - ダイナミック・ライブラリ・タスク切替え - Google Patents

ダイナミック・ライブラリ・タスク切替え

Info

Publication number
JPH09288586A
JPH09288586A JP8293097A JP29309796A JPH09288586A JP H09288586 A JPH09288586 A JP H09288586A JP 8293097 A JP8293097 A JP 8293097A JP 29309796 A JP29309796 A JP 29309796A JP H09288586 A JPH09288586 A JP H09288586A
Authority
JP
Japan
Prior art keywords
task
tse
dll
segment
routine
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.)
Pending
Application number
JP8293097A
Other languages
English (en)
Inventor
Kenneth B Grigsby
ビー グリッグズビー ケニス
Aleksander L Smundak
エル スマンダク アレクサンダー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
INFUOAMITSUKUSU SOFTWARE Inc
Informix Software Inc
Original Assignee
INFUOAMITSUKUSU SOFTWARE Inc
Informix Software Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by INFUOAMITSUKUSU SOFTWARE Inc, Informix Software Inc filed Critical INFUOAMITSUKUSU SOFTWARE Inc
Publication of JPH09288586A publication Critical patent/JPH09288586A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44557Code layout in executable memory
    • G06F9/44563Sharing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Abstract

(57)【要約】 (修正有) 【課題】 マルチプル・タスクまたはマルチプル・イン
スタンスにリンクされたDLLにおけるパア−インスタ
ンス・データ・メモリ(PDM)の提供。 【解決手段】 ローカル・ディスクリプタ表を含むメモ
リ管理ハードウェアを有するコンピュータで、RAMア
ドレス空間に装填された特定のDLLにおけるPDMを
供給する方法は、タスク・スイッチ・エンハンスDLL
(TSE)を供給し;DLL登録ルーチンをTSEに供
給し;DLL登録ルーチンへの呼出しを特性のDLLに
供給し;タスク登録ルーチンをTSEに供給し;タスク
登録ルーチンへの呼出しを第1のタスク及び第2のタス
クに供給し;O.Sを要求しているルーチンをTSEに
供給し;メモリ・セグメント割り当てルーチンをTSE
に供給し、第1及び第2のタスクに対する特定のDLL
のPDMに対するTSEセグメント割り当てルーチンを
呼出し;基本アドレス設定ルーチンをTSEに供給す
る。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、マルチ−タスキング・
オペレーティング・システム下でプログラム及び共有ラ
イブラリの多重例を走らせる方法及びプログラムに関
し、特に、マイクロソフト・ウィンドウズ3.1のよう
なオペレーティング・システム下でそのようなプログラ
ム及びライブラリを走らせる方法及びプログラムに関す
る。
【0002】
【従来の技術】ダイナミック・リンク・ライブラリ(D
LL)は、マイクロソフト・ウィンドウズ3.1または
ウィンドウズ3.11のようなオペレーティング・シス
テムによって(アプリケーション・プログラムのよう
な)多重タスクにリンクすることができるコード及びデ
ータの共有ライブラリを供給する。このコンテキストで
は、同時に、DLLの多重例、及びアプリケーションの
多重例を走らせることができるのが望ましい。ウィンド
ウズ3.1においてアプリケーションの多重例を走らせ
ることは、アプリケーションのDLLsが、同じDLL
を用いてアプリケーションの例の間でまたはアプリケー
ションにわたり共有されることを必要とする。この特徴
は、マイクロソフト・ウィンドウズ95のような多数の
オペレーティング・システム環境において利用可能であ
るが、それは、ウィンドウズ3.1及び3.11DLL
の設計と対立する。(この地点から以後、特に示さない
限り、用語DLLは、ウィンドウズ3.1及び3.11
環境において知られているような、マイクロプロセッサ
のインテル製80x86ファミリーにコンパチブルなマ
イクロプロセッサ上で走る、DLLを参照する。)多重
データ・セグメントを有するウィンドウズ3.1 DL
Lでは、グルーバル変数は、DLLを用いて全てのアプ
リケーションによって共有される。
【0003】個別のアドレス空間においてアプリケーシ
ョンを走らせるように設計されるオペレーティング・シ
ステムでは、メモリは、各アプリケーションに割り当て
られ、かつアプリケーションのメモリは、アプリケーシ
ョンに対して適切なメモリに切り換えるべく一組のレジ
スタまたはメモリ位置を変更することにによってオペレ
ーティング・システムによりインまたアウトに切り換え
られる。インテル・マイクロプロセッサは、機能性を保
護モードと呼ばれるオペレーションのモードにおいて利
用可能にするけれども、ウィンドウズ3.1環境は、こ
のように設計されていなかった。インテル保護モード
は、リアル・モードと同じセグメント・レジスタ(C
S、DS、ES、及びSS)を有するが、しかしセグメ
ント・アドレスは、“セレクタ”として知られる16ビ
ット・アイテムである。保護モードは、“ディスクリプ
タ・テーブル”として知られる一ブロックのメモリを必
要とする。ディスクリプタ・テーブルは、8,192の
8バイト・エントリまで含むことができる。セレクタの
上位13ビットは、これらのエントリの一つを参照する
オフセットである。ディスクリプタ・テーブル・エント
リは、セレクタによってアクセスされるメモリに対する
開始点を決定する“基本アドレス”と、セレクタによっ
てアクセス可能なメモリの範囲の終りを供給する“限定
アドレス”を含む。
【0004】他のマルチタスキング・オペレーティング
・システムでは、インテル保護モードにより供給される
GDT(グローバル・ディスクリプタ・テーブル)は、
オペレーティング・システム・メモリを管理するために
用いられかつ各処理は、それ自身のメモリに対するそれ
自身のLDT(ローカル・ディスクリプタ・テーブル)
を得る。このようにして、処理は、互いに干渉すること
から保護される。しかしながら、ウィンドウズ3.1
は、オペレーティング環境及び全てのウィンドウズ・ア
プリケーションの間で共有される単一LDTを用いる。
図1を参照すると、上記したように、セグメント16、
17、及び18のグローバル変数は、各ウィンドウズ
3.1 DLL13、14、及び15を用いて全てのア
プリケーション10、11、及び12によって共有され
る。(図では、アプリケーションは、それぞれAPP
1、APP2、及びAPP2の第2の例であり、かつD
LLsは、それぞれDLL1、DLL2、及びDLL3
である。)これは、どのアプリケーションがそれをアク
セスしているかに係わりなくDLLのコードが同じであ
るという事実の副作用である。DLLは、それがローダ
によりメモリの中に最初に装填されるときに一度初期化
される。DLLが二つ以上のデータ・セグメントを有し
ているならば各データ・セグメントに対するセレクタ
は、ローダによって割り当てられかつデータ・セグメン
トをアクセスするコードのあらゆる点においてコード・
セグメントの中に挿入される。このセレクタ・アドレス
は、アプリケーション間で共有されるコード・セグメン
トの中に挿入されるので、データも、また、共有されな
ければならない。これは、アプリケーション間で共有さ
れるグローバル・データを結果として生ずる。
【0005】
【発明が解決しようとする課題】問題を処理するための
種々のアプローチがインプリメントされた。全ては、ア
プリケーションによって割り当てられた一ブロックのメ
モリの中にパア−アプリケーション・インスタンス・デ
ータを収集しかつアプリケーションが実行を入力すると
きに使用するこのメモリ・ブロックの“基本アドレス・
ポインタ”を維持するためのある方法を必要とする。第
1のアプローチでは、タスク(アプリケーション)は、
全ての呼出し上のパラメータとして基本ポインタをDL
Lにパスする。このアプローチの欠点は、それが、DL
LがC++クラス・ライブラリのインプリメンテーショ
ンでありかつクラスのあるものが変数を共有するという
情況において適用可能でないということである。
【0006】第2のアプローチでは、基本ポインタは、
タスクのよく知られた場所、例えば、スタック・セグメ
ントの開始における固定されたアドレスに保持される。
適切な基本ポインタは、各タスクが独自のスタック・ア
ドレスを有するので各タスクが入力されるときに自動的
に利用可能にされる。このアプローチの欠点は、それが
それを用いている各DLLに対して特別の構造及び固定
された位置を必要とすることである。本発明の目的は、
上記従来技術における問題点に鑑み、マルチプル・タス
クまたは一つのタスクのマルチプル・インスタンスにリ
ンクされたDLLにおけるパア−インスタンス・データ
・メモリを提供することである。
【0007】
【課題を解決するための手段】本発明の上記目的は、セ
レクタをRAM基本アドレスにマップすべくローカル・
ディスクリプタ表(LDT)を含んでいるメモリ管理ハ
ードウェアを有しているコンピュータにおいて、同時に
RAMアドレス空間に装填された第1のタスクの一部及
び第2のタスクの一部の両方としてランダム・アクセス
・メモリ(RAM)アドレス空間に装填された特定のダ
イナミック・リンク・ライブラリ(DLL)におけるパ
ア−インスタンス・データ・メモリを供給する方法であ
って、タスク・スイッチ・エンハンスDLL(TSE)
を供給し;DLLが装填されるときにTSEに該DLL
を登録するためにDLL登録ルーチンを該TSEに供給
し;DLL登録ルーチンへの呼出しを特性のDLLに供
給し;タスクが開始されるときにTSEに該タスクを登
録するためにタスク登録ルーチンをTSEに供給し;タ
スク登録ルーチンへの呼出しを第1のタスク及び第2の
タスクに供給し;あらゆるタスクの実行が開始または終
了されようとしているときにはいつでも及びあらゆるタ
スクが存在しなくなろうとしているときにはいつでもT
SEに切換え通知を供給するためにオペレーティング・
システムを要求しているルーチンをTSEに供給し;割
り当てられたデータがそのタスクに対するオリジナル・
パア−インスタンス・データ・セグメントの置換であ
る、タスクに対するDLLのパア−インスタンス・デー
タを記憶するためにメモリ・セグメントを割り当てるた
めのセグメント割り当てルーチンをTSEに供給し、オ
リジナル・セグメントは、LDTエントリを参照してい
る特定のDLLにおけるセレクタを通して参照され、セ
グメント割り当てルーチンは、LDTエントリにおける
割り当てられたセグメントに対する基本アドレスである
置換基本アドレスを維持しかつLDTエントリにおける
オリジナル・セグメントのオリジナル基本アドレスであ
るオリジナル基本アドレスを維持し;第1のタスクの初
期化の間に該第1のタスクに対する特定のDLLのパア
−インスタンス・データ・セグメントに対するTSEセ
グメント割り当てルーチンを呼出しかつ第2のタスクの
初期化の間に該第2のタスクに対する特定のDLLのパ
ア−インスタンス・データ・セグメントに対するTSE
セグメント割り当てルーチンを呼出し;そのタスクが実
行を開始する前にタスクのパア−インスタンス・セグメ
ントの置換基本アドレスをLDTエントリに記憶するた
めに基本アドレス設定ルーチンをTSEに供給し;かつ
第1のタスクが実行を開始しようとしているTSEによ
って受け取られた切換え通知に応じて第1のタスクに対
する置換基本アドレスに対して基本アドレス設定ルーチ
ンを呼出す段階を具備する方法によって達成される。
【0008】本発明の方法では、TSEによって受け取
られた切換え通知に応じて、特定のDLLにリンクされ
たノー・タスクが実行を開始しようとしているときに特
定のDLLのパア−インスタンス・セグメントに対する
LDTエントリにオリジナル基本アドレスを記憶する段
階を更に具備してもよい。本発明の方法では、TSEに
よって受け取られた切換え通知に応じて、TSEが存在
しなくなろうとしているタスクにリンクされるならばT
SEを別のTSE登録タスクにリンクする段階を更に具
備してもよい。本発明の方法では、オペレーティング・
システムは、マイクロソフト・ウィンドウズ3.1及び
マイクロソフト・ウィンドウズ3.11からなるグルー
プから選択され;かつコンピュータは、インテル803
86マイクロプロセッサとコンパチブルなマイクロプロ
セッサに基づくようにしてもよい。
【0009】また、本発明の上記目的は、ランダム・ア
クセス・メモリ(RAM)アドレス空間におけるダイナ
ミック・リンク・ライブラリ(DLLs)の装填及びR
AMアドレス空間における装填された多重タスクへのD
LLの連結を同時に供給しているマルチタスキング・オ
ペレーティング・システム、及びセレクタをRAM基本
アドレスにマップすべくローカル・ディスクリプタ表
(LDT)を含んでいるメモリ管理ハードウェアを有し
ているコンピュータのコンテキストにおいて、第1のタ
スクの一部及び第2のタスクの一部の両方として装填さ
れた特定のDLLに対するパア−インスタンス・データ
・メモリを供給するキットであって、DLLが装填され
るときに該DLLをTSEに登録するためのDLL登録
ルーチン;タスクが開始されるときにTSEに該タスク
を登録するためのタスク登録ルーチン;あらゆるタスク
の実行が開始または終了されようとしているときにはい
つでも及びあらゆるタスクが存在しなくなろうとしてい
るときにはいつでも切換え通知をTSEに供給するため
にオペレーティング・システムを要求するルーチン;割
り当てられたセグメントがそのタスクに対するオリジナ
ル・パア−インスタンス・データ・セグメントの置換で
ある、タスクに対するDLLのパア−インスタンス・デ
ータを記憶するためにメモリ・セグメントを割り当てる
ためのセグメント割り当てルーチンであり、オリジナル
・セグメントは、LDTエントリを参照している特定の
DLLにおけるセレクタを通して参照され、セグメント
割り当てルーチンは、LDTエントリにおける割り当て
られたセグメントに対する基本アドレスである置換基本
アドレスを維持しかつLDTエントリにおけるオリジナ
ル・セグメントのオリジナル基本アドレスであるオリジ
ナル基本アドレスを維持する、セグメント割り当てルー
チン;及びタスクが実行を開始する前に該タスクのパア
−インスタンス・セグメントの置換基本アドレスをLD
Tに記憶するための基本アドレス設定ルーチン;を含ん
でいるタスク・スイッチ・エンハンサDLL(TSE)
を備えているキットによって達成される。
【0010】
【作用】本発明は、マルチプル・タスクまたは一つのタ
スクのマルチプル・インスタンスにリンクされたDLL
におけるパア−インスタンス・データ・メモリを供給す
る。各DLLインスタンスに対するベース・アドレス
は、個々のDLLsに対して保持されかつ基本アドレス
は、タスクが切換えられたときに切換えられる。オペレ
ーティング・システムは、基本アドレスを切り換えるこ
とができかつ他のハウスキーピングを行うことができる
ようにタスクが切換えられたときに、呼出されたTSE
(タスク・スイッチ・エンハンサ)を外部サービスまた
は“スイッチャ”DLLに報告するために要求される。
各アプリケーションに対するメモリ・ブロックの中への
パア−インスタンス・データの収集は、コンパイラ及び
リンカの両方を含んでいる機構によって行われる。Cコ
ンパイラによる更なるコンパイレーションに対するCコ
ードを生成する具体的第4世代言語(“FGL”と呼
ぶ)のコンテキストにおいて、説明されるC言語符号化
は、FGLコンパイラによって行われる;さもなけれ
ば、それは、Cコードを書いているプログラマによって
行われ、発明は、いずれかの方法で実行されうる。(用
語Cは、例えば、マイクロソフトのビジュアルC++・
コンパイラ、1.5版においてインプリメントされるよ
うに、C++も包含すべく一般的に用いられる。)変数
が属するセグメントを表わすべくCプログラムのリンカ
に命令を挿入することによって、リンカは、セグメント
に属している全ての変数を一つのブロックの中に割り当
てる。強制的アセンブラ・オブジェクトに供給されたリ
ンケージ・コードにおけるリンカへの更なる命令を含む
ことは、そのようなセグメントを他のものと混合するこ
とからリンカを防ぐために独自のセグメント・グループ
を生成する。従って、DLLが装填されるときに、この
セグメントは、インスタンス−指定物理アドレスに走行
時間においてマップされる、それ自身のディスクリプタ
を有する。
【0011】本発明は、多くの利点を有する。例えば、
本発明を用いることにより、パア−インスタンス・オペ
レーションを達成するために可変宣言だけが変更される
ことが必要であり、かつ有効コードが結果として得られ
る。他の利点及び特徴は、以下の説明及び特許請求の範
囲から明らかになるであろう。明細書に組み込まれ、か
つその一部を構成する添付した図面は、本発明の特定の
実施例を図式的に説明し、かつ、上記した一般的な説明
及び以下の実施例の詳細な説明と共に、本発明の原理を
説明するための役割を果たす。
【0012】
【実施例】図2を参照すると、アプリケーション10
0、110、及び120は、図示するように、3つのD
LLs130、140、及び150にリンクされてい
る。アプリケーション110及び120は、同じプログ
ラムの二つのインスタンスである。これは、以下に説明
する、TSEに対するアプリケーション及びDLLsに
ついてなされたエンハンスメントを除いき、図1に対応
する。エンハンスメントにより、しかしながら、DLL
2 140のような、DLLは、具体的に、この説明で
は、アプリケーション100、110、及び120であ
る、DLLを用いている各タクス・インスタンスに対す
る個別のデータ・セグメント170、171、及び17
2を有する。
【0013】図3を参照すると、TSEは、(DLL2
140の)セレクタ142がポイントする(LDT2
00の)ディスクリプタ210の基本アドレス部分22
0の内容を切り換えることにより、データ・セグメント
間、具体的にはセグメント171と172、のスイッチ
ング(切換え)に影響を及ぼす。基本アドレス220
は、アプリケーションがDLL2 140を用いていな
いときにDLL2 140で装填されたオリジナル・デ
ータ・セグメント175をポイントし、かつアプリケー
ション120がDLL2 140を用いているときにデ
ータ・セグメント172をポイントする。それゆえに、
図2に戻ると、TSEは、図2に示すように基本アドレ
ス内容にデータ・セグメントをポイントさせる:DLL
1 130は、APP1 100がDLL1にリンクさ
れるときにデータ・セグメント160をポイントする;
DLL2 140は、APP1 100がDLL2にリ
ンクされるときにデータ・セグメント170をポイント
する;DLL2 140は、APP2(第1のインスタ
ンス) 110がDLL2にリンクされるときにデータ
・セグメント171をポイントする;DLL2 140
は、APP2(第2のインスタンス) 120がDLL
2にリンクされるときにデータ・セグメント172をポ
イントする;DLL3 150は、APP2(第1のイ
ンスタンス) 110がDLL3にリンクされるときに
データ・セグメント180をポイントする;そして、D
LL3150は、APP2(第2のインスタンス)12
0がDLL3にリンクされるときにデータ・セグメント
181をポイントする。
【0014】登録(Registration) 図4を参照すると、DLLがメモリに持ち込まれたとき
に、それは、それ自身をTSEで登録し(ステップ34
0)、通知コールバック機能(関数)を供給する。DL
LがTSEルーチンを呼出すように装填されているとき
に、それが既に装填されていなければ、TSEも、ま
た、装填される(ステップ310)。全ての要求された
モジュールが装填された後(ステップ320)、ウィン
ドウズは、DLLに対するLibMain()を呼出し
(ステップ330)、タスクにリンクされたDLLsの
全てを登録すべくTSEを呼出す(ステップ340及び
350)。図5を参照すると、タスクが実行を開始する
とき、それは、TSEでタスクを登録すべくTSEを呼
出すWinMain()を呼出す(ステップ410及び
420)。WinMain()は、また、タスクのDL
Lリストを通して見るべくかつそれで登録されたDLL
の通知コールバックを呼出すべくTSEを呼出す(ステ
ップ430、440、及び445)。コールバック機能
は、TSEにあるセグメントをインスタンス生成するこ
とを一般的に要求し(ステップ450、452、及び4
54)、そしてグローバル及びクラス・メンバー変数を
初期化すべくモジュール初期化機能を呼出す(ステップ
460)。インスタンス生成(以下に説明する)は、オ
リジナル・セグメントをコピーするので、グローバル変
数に対して生成された全ての静的初期化は、保存され
る。
【0015】セグメント・インスタンス生成 (アプリケーションまたはDLLのいずれかに属するこ
とができる)セグメントをインスタンス生成するため
に、TSEは、セグメント・メモリのコピーを作成しか
つそのフラット・アドレスを記憶にとどめる。その後、
タスクが起動される度に、TSEは、記憶にとどめたア
ドレスをポイントすべくローカル・ディスクリプタ・テ
ーブル(LDT)の対応しているエントリにアドレスを
設定する。それゆえに、タスクの各インスタンスは、イ
ンスタンス・データを用いる。
【0016】初期化 DLLを共有している多重タスクにパア−インスタンス
・データを供給するために、DLLを含んでいる個別の
モジュールからのデータは、DLLを用いてアプリケー
ションの各インスタンスに対する容易な複製を許容すべ
く整理統合される。これは、セグメント及びセグメント
・グループを指名すべく(名付けるべく)ソース・コー
ドにCコンパイラ・プラグマ(pragmas) を含むことによ
って行われる。また、アセンブラ言語オブジェクトは、
セグメント・グループを整理統合すべくDLLにリンク
されるように生成されて、リンカは、コンパイラ・プラ
グマに供給された名前によりデータ・セグメントを一緒
にグループ分けする。アセンブラ・オブジェクトは、ま
た、このデータ・セグメントの基本アドレスをリターン
する機能を供給する。
【0017】一組の初期化機能は、LibMain()
を含んで設けられる。(LibMain()は、全ての
ウィンドウズDLLsを初期化すべく供給されなければ
ならない)。このTSE LibMain()は、DL
LをTSEで登録すべくTseDllRegister
()を呼出す(ステップ340)。そのアーギュメント
は、(1)ウィンドウズがDLLを識別するために“イ
ンスタンス・ハンドル”し、かつ (2)DLLが新し
いインスタンス生成のための初期化を必要とする度にコ
ールバック機能のアドレスがTSEによって呼出される
ことである。TseDllRegister()に対す
る呼出しは、TSEにDLLを登録されたDLLsのリ
ストの中に挿入させる。一組の初期化機能は、TSEで
登録するためにアプリケーションの起動(立ち上り)モ
ジュール、例えば、WinMain()機能から呼出さ
れるべく供給される。これらは、TSEにウィンドウズ
・タスク・ハンドルをTSEで登録されたタスクのリス
トに配置させる(ステップ420)、TseTaskR
egister()、及びTSEに呼出しタスクのため
のモジュール・テーブルを探索させかつタスクによって
用いられたDLLsのリストを登録されたDLLsのリ
ストと比較させる、TseDLLInstantiat
eALL()を含む。TSEがマッチ(整合・一致)を
見つけたとき、それは、TseDllRegister
()が呼出されたときにDLLに対して先に記録された
コールバック機能を呼出す(ステップ445)。応答と
して、TSEが呼び出しているDLLは、DLLのパア
−インスタンス・データ・セグメントを参照するセレク
タをパス・バックする。TSEは、セレクタによって参
照されたオリジナル・データ・セグメントと同じ大きさ
の(TSE DLLではなくメモリを用いるタスクに属
する)一ブロックのメモリを割り当てかつオリジナル・
データ・セグメントの内容を新しく割り当てられたメモ
リのブロックの中にコピーする(ステップ452)。T
SEは、オリジナル・セレクタ及び新しく割り当てられ
たブロックのセレクタをタスクによって用いられる各D
LLに対するセレクタ・ペアのリストに維持する(ステ
ップ454)。(TseDLLInstantiate
ALL()の代わりに、TseDLLInstanti
ate()は、特定のDLLsをインスタンス生成する
ために必要なだけしばしば呼出されることができる。) 更に、TSEは、また、コールバック機能を呼出しかつ
モジュール初期化機能を呼出すためにそれを指図する
(ステップ460)。モジュール初期化機能は、クラス
を登録しかつグローバル変数を初期化するような機能を
実行すべくコンパイラによって一般に生成される。
【0018】タスク切換え事象が変更されるために、T
SEは、ウィンドウズToolhelp API No
tifyRegister()機能を呼出し、タスクが
入力されるかまたは出力されるときにはいつでもウィン
ドウズによって呼出されるTSEタスクのタスク・ハン
ドル及びTSE機能のアドレス(“通知コールバック”
(notify call back))をそれにパスする(ステップ47
2及び474)。TSEは、パラメータとしてNoti
fyRegister()タスク・ハンドルをパスしな
ければならず、かつそれは、TSEを呼出した第1のタ
スクのタスク・ハンドルを用いる。NotifyReg
ister()は、通知コールバックをこのタスク・ハ
ンドルに関連付ける。このタスクが終了するときに、T
SEは、条件(状態)を認識し、かつ後述するように、
それ自身を別のTSE−登録されたタスクに関連付け
る。この特定のタスクは、TSEタスクと呼ばれる。
【0019】オペレーション 図6を参照すると、タスクが入力されたときに、TSE
の通知コールバックは、入力されるタスクが登録される
かどうかを調べるためにTSEで登録されたタスクのリ
ストをチェックする(ステップ510及び530)。そ
うでありかつ出力するならば(ステップ540)、TS
Eは、オリジナル・セレクタがTSEによりタスクのた
めに割り当てられたメモリ・ブロックを参照するように
セレクタ・ペアのディスクリプタを切り換え(ステップ
532)、かつ割り当てられたセレクタは、オリジナル
・メモリ・セグメントを参照する。タスクが終了するか
または出力するときに、TSEのコールバックは、タス
クが登録されるかどうかを調べるためにTSEで登録さ
れたタスクのリストをチェックする(ステップ51
0)。そうであれば、TSEは、オリジナル・セレクタ
がオリジナル・データ・セグメントを参照しかつTSE
によって割り当てられたセレクタが割り当てられたメモ
リ・ブロックを参照するようにセレクタ・ペアのディス
クリプタを切り換える(ステップ542)。このように
して、TSEは、ウィンドウズがそうであると考えるも
のに対してマッピングを復元する。それが登録されかつ
終了するならば(ステップ520)、TSEは、関連割
り当てパア−インスタンス・メモリの割り当て解除し
(ステップ522)、タスクの登録を解除し(ステップ
524)、かつタスクが受信TSEタスク・スイッチ通
知に関連付けられたものであるならば、TSEは、アソ
シエーションを別のTSE−登録されたタスクに転送す
る(スイッチ526)。
【0020】TSEは、DOS保護モード・インターフ
ェイス(DOS ProtectMode Inter
face(DPMI))機能性を用いることによって基
本アドレスを切り換える。TSEは、一つは、アプリケ
ーションによって供給されるセレクタによりアドレス指
定されるディスクリプタの基本アドレスを要求すること
に、かつ他のものは、アプリケーションによって供給さ
れるセレクタによりアドレス指定されるディスクリプタ
の基本アドレスを変更することに、DPMIによって供
給される二つの機能を用いる。NotifyRegis
ter()を呼出すときにTSEが用いたオリジナル・
タスク・ハンドルを所有する、TSEタスクは、終了さ
れうる。その場合には、TSEは、そのタスク・ハンド
ルに対するNotifyRegister()を呼出し
そしてNotifyRegister()を再び呼出
し、TSEで登録されたタスクのリストにおける第1の
タスクのタスク・ハンドルをパスし、次いでその第1の
タスクがTSEタスクになる。これは、それが終了され
たタスクに関連付けられるならばウィンドウズがコール
バックを呼び出さないので、行われる。
【0021】ウィンドウズでは、メモリ・ブロックは、
アプリケーションまたはDLLのいずれかによって所有
されることができるということに注目する。DLLを装
填する一部としてローダによって割り当てられたデータ
・セグメントは、DLLによって所有される。TSEが
パア−インスタンス・データに対して割り当てるセグメ
ントは、TSEが割り当てを行うときにTSEがリンク
されるタスクによって所有される。TSEで登録された
全てのタスクが終了されたならば、TSEは、割り当て
られたメモリ及びセレクタを解放しそして終了する。
【0022】登録解除(Unregistering) タスク登録解除は、必ずしも要求されないけれども、T
SEがタスク終了を監視しかつ自動的にそうすることが
できるので、それは、安全予防措置としてTseTas
kUnregister()により供給される。TSE
で用いられるべきDLLは、例えば、そのWEP()
(ウィンドウズ・エキジット・プロシーデュア(Windows
Exit Procedure))手順に、それ自身を登録解除するた
めに符号化されるべきである。
【0023】TSP API詳細(TSP API Details) 以下の5つのルーチンは,ライブラリ・インスタンス生
成サービスを供給する。 1. BOOL TseDllRegister(hL
ibInst,initCallback)は、TSE
を有するhLibInstによって識別されたDLLを
登録する。第2のアーギュメントは、DLLがインスタ
ンス生成/終了されたときにTSEによって呼出される
コールバック機能のアドレスである。TseDllRe
gister()は、インスタンス・ハンドルが容易に
利用可能であるLibMain()から通常呼出され
る。それゆえに、インスタンス・ハンドルは、後のモジ
ュール・テーブル・ルックアップを簡略化するためにモ
ジュール・ハンドルに変換される。 2. initCallback(wReason)
は、TSEによって呼出されるユーザ機能に対するプレ
ースホルールダー(placeholder) である。パラメータw
Reasonは、呼出しをトリガした事象を指定する。
呼出されたときDLLがインスタンス生成されるので、
コールバックは、パア−インスタンス・データを含んで
いる全てのセグメントをインスタンス生成しそしてそれ
らを初期化すべきである。 3. TseDllUnregister(hLibI
nst)は、登録されたDLLsリストからhLibI
nstによって識別されたDLLを除去する。 4. TseDllInstantiate(hLib
Inst)は、現行タスクに対するhLibInstに
よって指定されたDLLをインスタンス生成する。この
ルーチンは、hLibInstによって識別されたDL
Lが登録されかつ未登録のものを無視することをチェッ
クする。それは、現行タスクがTSEで登録されること
をチェックする。DLLが既にタスクに対してインスタ
ンス生成されているならば、このルーチンは、リターン
する。さもなければ、それは、DLLの通知コールバッ
クを呼出しかつこのタスクに対するタスク・リストにパ
ア−インスタンス・データ情報を記憶する。 5. TseDllInstantiateAll()
は、現行タスクによって用いられる各DLLに対するT
seDllInstantiate()を呼出す。
【0024】以下の3つのルーチンは、セグメント・イ
ンスタンス生成サービスを供給する。 1. TseTaskRegister()は、TSE
タスク・リストに現行タスクを追加する。最初の呼出し
で、それは、現行タスクをTSE(DLLである)にリ
ンクする。このタスクは、TSEタスクと呼ばれうる。
このルーチンは、TseDllInstntiat
e()またはTseDllInstantiateAl
l()のいずれかの前に呼出されるべきである。 2. TseTaskUnregister()は、T
SEリストから現行タスクを除去する。タスクの全ての
インスタンス生成されたセグメントは、それらのオリジ
ナル状態に復元される。 3. TseSegmentInstantiate
(hInstance,hSegment)は、現行タ
スクが登録されたことをチェックする。それは、新しい
セグメントを割り当て、その中へhSegmentのコ
ピーを作り、かつそれら二つのセグメントのアドレスを
交換する。アーギュメントhInstanceは、セグ
メントの所有者を識別する:それは、DLLハンドルで
ある。
【0025】データ構造(Data Structures) TSEの基本データ構造は、TSE登録ライブラリ・リ
スト(LIBENTRY構造のリンク・リスト)及びT
SE登録タスク・リスト(TSENTRY 構造のリン
ク・リスト)である。モジュール名も、また、エラー監
視目的で維持されるけれども、登録ライブラリ・リスト
は、主要探索キーとしてLIBENTRY構造にDLL
のモジュール・ハンドルを保持する。TSE_NOTI
FYCBインスタンス生成機能ポインタは、ここに維持
される;それは、DLL指定でありかつアプリケーショ
ンの関数として変化しない。オリジナルDLL FGL
_INSTDATAセレクタ(DLLのオリジナル・デ
ータ・セグメントに対するセレクタ)も、また、エラー
検知及び監視目的に対して保持される。登録ライブラリ
・リストの構造は、以下の表に示される。
【0026】
【表1】
【0027】TSE登録タスク・リストは、主要探索キ
ーとしてHTASK(タスク・ハンドル)を含んでいる
TSENTRY構造のリンク・リストである。それは、
タスクによって用いられるDLLsを識別するTLIB
ENTRY構造のリンク・リストへのポインタを含む。
このリストは、エラー検知及び回復のために維持され
る。それは、また、オリジナル及び割り当てられたパア
−インスタンス・セレクタがタスク入力及び出力の切換
えに対して維持されるTLIBSEL構造のリンク・リ
ストを含む。TLIBSEL構造のフラグ“selSw
itchMode”は、現在用いられているセレクタが
オリジナル・セレクタであるかまたはこのインスタンス
に対して割り当てられたセレクタであるかを決定する。
これは、エラー検知に対してかつタスク終了の間にそれ
らのオリジナル状態に戻るようにセレクタを切り換える
ために用いられる。モジュール名及びモジュール・ハン
ドルは、監視及びエラー検知のためにTLIBENTR
Y及びTLIBSELに冗長的に維持される。これらの
データ構造は、次の表に示される。
【0028】
【表2】
【0029】例示アプリケーション初期化シーケンス(E
xample Application InitializationSequence) 以下の説明は、(この説明に対してCライブラリである
と想定する)MYLIB.DLLを用いるMYAPPア
プリケーションに対する初期化シーケンスを示す。 [MYAPP]ユーザは、MYAPP.EXEを始め
る。カーネルは、DLLsを装填するためのカーネルに
対する呼出しである、InitTask()を呼出す、
astart()への制御をパスする。 [KERNEL]まだメモリにないアプリケーションに
よって必要な各DLLに対して、カーネルは、それを装
填しかつそのエントリ・ポイント・ライブラリ()を呼
出す。 [MYLIB]ルーチン・ライブラリ()は、LibM
ain()を次いで呼出す、C走行時間初期化に対する
_cinit()を呼出す。LibMain()は、T
seDllRegister(hLib,InitIn
stance)を呼出すことによってTSEにDLLを
登録する。 [TSE]TSEは、その登録ライブラリ・リストに
(hLib,InitInstance)を追加しかつ
MYLIBにリターンする。 [MYLIB]LibMain()がTRUEをリター
ンする。 [KERNEL]カーネルは、他のDLLsと共に上記
のように進行する。全てのDLLsが装填された後、カ
ーネルは、アプリケーションにリターンする。 [MYAPP]アプリケーションは、ユーザ・コードが
始まる、WinMain()を次いで呼出す、C走行時
間初期化に対する_cinit()を呼出す。WinM
ain()は、TseTaskRegister()を
呼出す。 [TSE]TseTaskRegister()は、登
録タスク・リストに現行タスクを追加する。(インスタ
ンス生成されたセグメントがまだ生成されていない。) [MYAPP]WinMain()は、TseDllI
nstantiateAll()を呼出す。 [TSE]TseDllInstantiateAll
()は、MYAPPによって必要なDLLsのリストを
走査する。各登録DLLに対して、それは、セグメント
がインスタンス生成されるべきであることを示している
原因コードを有するDLLのコールバックを呼出す。 [MYLIB]コールバック・ルーチンは、TseSe
gmentInstantiateを呼出す。 [TSE]TseSegmentInstantiat
e()は、セグメントのコピーを作り、かつ現行タスク
の起動により交換されるべくセグメントのリストにオリ
ジナル及びコピーされたセレクタを追加する。 [MYLIB]TseSegmentInstanti
ate()がリターンした後、コールバック・ルーチン
は、TSEにリターンする。 [TSE]他のDLLsに対して続ける。 [MYAPP]クラスを登録しかつ変数を初期化するた
めにアプリケーション・システム初期化コードを実行す
る。そして、それは、主アプリケーション・モジュール
を呼出す。
【0030】データ及び初期化を整理統合する(Consoli
dating Data and Initialization) 上記したように、パア−インスタンス・データは、TS
Eにより処理するために連続したセグメントの中にリン
クされる。データ整理統合機構は、また、オブジェクト
または4GLのような、クラス指向型デザインで言語ま
たは環境をプログラムする場合においても必要でありう
る。これは、二つの場合に発生しうる。第1に、初期化
に対して、各コンパイルされたモジュールは、主プログ
ラムが制御をえる前に実行されなければならないコード
を含みうる。アプリケーションが用いるクラスは、メン
バ変数オフセット及びオブジェクト・サイズを計算する
ために登録されなければならないであろう。また、グロ
ーバル及び/又は共有メンバ変数がモジュールにおいて
画定されかつ明示的に初期化されるならば、初期化コー
ドは、実行されなければならない。4GLコンパイラ
は、モジュール毎に一つの初期化機能及びそのアドレス
を含んでいる変数を一般に生成する。それらのアドレス
のアレーをリンカに構築させることにより、起動コード
は、容易にそれらを呼出すことができる。
【0031】DLLが機能名及びそれらのアドレスを供
給しなければならない、擬似コード変換器によってDL
Lが用いられるならば、モジュールにわたる整理統合
は、また、有用である。FGLコンパイラは、各モジュ
ールに対してこれらのアレーを発生することができ、か
つリンカは、DLLが含む全てのモジュールからこれら
のアレーを整理統合するようにされることができる。マ
イクロソフト・リンカは、(セグメント・グループと命
名される、80×86メモリ・セグメントと混同すべき
でない)論理セグメントの形の整理統合機構を供給す
る。論理セグメントは、それが個別のモジュールから実
行可能のものを構築するときにリンカがコードとデータ
を組み合わせる方法を制御する。各オブジェクト・コー
ド・エンティティ(機能コード及びグローバル変数)
は、ある特定の論理セグメントに属する。論理セグメン
トは、セグメント・グループ及びセグメント・クラスを
含んでいる、実行可能なものにおいてそれが配置される
場所を制御するそれに関連付けられた多くの属性を有す
る。
【0032】セグメント・グループは、論理セグメント
を物理セグメントの中に組み入れるべくリンカによって
用いられる:同じグループに属している全ての論理セグ
メントは、一つの物理セグメントの中に入れられる。論
理セグメントのグループを指定するために、アセンブラ
・モジュールのGROUP指示文が用いられる。セグメ
ント名と共にセグメント・クラスは、異なるオブジェク
ト・モジュールからの論理セグメントが組み合わされる
方法を制御する。リンカは、同じ名前及びクラスを有す
る全てのセグメントからのデータを一つのメモリの連続
ブロックの中に組み入れる。クラス内では、同じセグメ
ントに属しているデータは、一つの連続ブロックの中に
入れられる。クラス内のセグメントの相対的順序は、リ
ンカがそれらを見る順序によって決定される。
【0033】マイクロソフトCコンパイラでは、変数
は、プログラム指示文を有する特定のセグメントに割り
当てられうる。 指示文
【0034】
【表3】 は、クラスMYCLASSに属する、セグメントMYS
EGの中に指示文に従う全ての変数を入れるようにコン
パイラに命令する。多重#pragma data_s
eg指示文に対して、コンパイラは、ソース・コードに
おけるそれらの宣言の逆順序で論理セグメントを生成す
る。それゆえに、個別モジュールからのデータは、連続
アレーの中に整理統合することができかつその開始及び
終了アドレスは、次のように取得することができる。ま
ず、各モジュールは、例えば、次に示すような、同じ論
理セグメント・シーケンスを画定しなければならない:
【0035】
【表4】 各オブジェクト・モジュールは、その順序で、セグメン
トFGL_FOO_GEGIN、FGL_FOO_US
ER、及びFGL_FOO_ENDを次いで含む。整理
統合されるべきデータは、次いで3つのセットの中間セ
グメントである、FGL_FOO_USERセグメント
の中に入れられる。走行時間起動モジュールは、上記の
ようなセグメント・シーケンスを宣言しかつ開始でダミ
ー構成要素:
【0036】
【表5】 終了でラベル:
【0037】
【表6】 を供給する。結果として、実行可能なものは、foo_
beginとfoo_endの間に挟まれた、あらゆる
種類の、データのアレーを含む。それゆえに、データが
初期化機能のアレーであるならば、初期化は、一つのル
ーチンだけを呼出しかつそれを初期化機能ベクトルのア
ドレス及びその終りの後の最初の語のアドレスにパスす
ることによって達成されうる。データ及び機能整理統合
は、擬似コード(p−コード)変換器によって変換され
た4GLプログラムのコンテキストにおいて、上記した
ように、有用である。TSEパア−インスタンス・デー
タを支持しているDLLsは、p−コード変換アプリケ
ーションに対してアクセス可能にすることができる。上
記したように、各DLLは、DLL機能への参照を分解
するための変換器による使用、並びにデバッガによる使
用に対して、“userfunc”アレー、即ち、機能
名及びそれらのエントリ・ポイントのアレーをエクスポ
ートすべく構築される。
【0038】機能名に加えて、userfuncアレー
は、また、p−コード変換器からまたはデバッガからア
クセスされることが必要である、DLLで画定されたグ
ローバル及び供給メンバ変数の名前/アドレス対を含み
うる。
【0039】userfuncを生成すること(Generat
ing userfunc) 4GLコンパイラは、各FGLモジュールに対してus
erfuncアレーを生成することができる。それは、
次のようにモジュールにおいて画定された全ての機能及
び方法に対するエントリを含む:
【0040】
【表7】 走行時間起動は、次のように整理統合されたuserf
uncアレーに対するエントリ・ポイントを次いで供給
することができる:
【0041】
【表8】
【0042】モジュール初期化コードを生成すること
(Generating Module Initialization Code) 4FGLコンパイラは、次のようにFGL_INITセ
グメントにおいてモジュール初期化機能を生成すること
ができる:
【0043】
【表9】 走行時間起動は、次のように整理統合されたモジュール
初期化機能アレーに対するエントリ・ポイントを次いで
供給することができる:
【0044】
【表10】 その結果、&_FGLintfunc0及び&_FGL
intfuncNは、開始及び終了アドレスであり、か
つセグメントFGL_INIT_USERが初期化ルー
チン・アドレスに装填されたならば、初期化は、一つの
ルーチン、例えば、そのアドレスがセグメントに装填さ
れる各機能を連続的に呼出す
【0045】
【表11】 を呼出すことによって実行することができる。
【0046】論理セグメント及びグループ(Logical Seg
ments and Groups) 実行可能なもののデフォルト・データ・セグメントにお
ける及びDLLのインスタンス生成されたデータ・セグ
メントにおける空間をセーブするために、全ての静的デ
ータは、例えば、FGL_RODATAと名前が付けら
れた、個別の、読取り専用セグメント・グループに入れ
ることができる。このグループは、この説明において後
で示されるアセンブリ言語ソース・コード・モジュール
にリストされた例示的セグメントを含みうる。アプリケ
ーションに対して、FGL_RODATAのセグメント
及びグループそれ自身は、アセンブラ・オブジェクト・
コード・モジュールで画定される。セグメント及びグル
ープ画定に加えて、モジュールは、リンカにおけるセグ
メント及びグループ画定に影響を与えるべくこのアセン
ブラ・オブジェクト・モジュールがアプリケーションに
装填されることを確実にすべくアプリケーション初期化
モジュールにおいて参照されるダミー変数を含む。DL
Lに対して説明したFGL_RODATA及びFGL_
INSTDATAの2つの4GL−指定グループが存在
しうる。FGL_INSTDATAは、パア−インスタ
ンス変数情報及びデータに対する論理セグメントを含み
うる。DLLに対するセグメント及びグループの画定
は、FGL_INSTDATAグループに割り当てられ
たセレクタをリターンする、関数FGLInstanc
eSeg()をも含むアセンブリ言語モジュールに存在
する。そのようなアセンブリ・モジュールに対するソー
ス・コードは、以下の表に示される。
【0047】
【表12】
【0048】
【表13】
【0049】.EXEプログラムの多重インスタンス(M
ultiple Instances of .EXE Programs) 同時に一つのDLLの多重インスタンス生成を走らせる
能力に対する当然の帰結として、同時に一つのプログラ
ムの多重インスタンス生成、より特定的には、一つの.
EXEプログラムの多重インスタンス生成を走らせるこ
とができることが望ましい。ウィンドウズは、64キロ
バイト(16−ビット・アドレス指定空間)への多重イ
ンスタンス生成に対して意図される.EXEプログラム
の書込み可能データを制限する、多重書込み可能セグメ
ントを有する.EXEプログラムの多重インスタンス生
成を走行させることへの要求を拒絶することによって、
一つの.EXEプログラムの多重インスタンス生成を走
行させる一つの能力を制限する。.EXEプログラムの
多重インスタンスが走行されるとき、コードは、全ての
インスタンスによって共有されることでき、かつ各イン
スタンスに対して、64キロバイトに制限されている、
パア−インスタンス書込み可能データは、ウィンドウズ
によるそれ自身の、タスク−指定DSレジスタ値を有す
る。
【0050】ウィンドウズ制限を克服するために、.E
XEプログラムの書込み可能セグメントは、隠蔽されう
るし、そこでウィンドウズは、多重インスタンスを装填
しかつコードの一つのコピーを共有する;そして、LD
Tにおいてパア−インスタンス書込み可能セグメントを
動的に生成しかつ基本アドレスを交換する、上述した技
術は、.EXEプログラムにおいてより大量の書込み可
能データを達成するために適用されうる。しかしなが
ら、より簡単な解決方法が利用可能である。TSEは、
ウィンドウズ・モジュール表における(おそらくそれが
多重インスタンスにおいて走行されることを意図してい
るので)TSEを呼出した.EXEプログラムの名前を
変形することによって所望の結果を達成する。それによ
りウィンドウズがプログラムの第2のインスタンスが走
行されていることを認識するテストは、ケース・センシ
ティブであるようになり、記憶された名前は、常にアッ
パー・ケース(大文字)である。例えば、モジュール表
における.EXEプログラムの名前の最初の文字のケー
スを変えることによって、多重インスタンスは、走行さ
れうる。しかしながら、各インスタンスは、書込み可能
データのそれ自身のコピーだけでなく、望ましいよう
に、プログラムのコードのそれ自身のコピーも有するの
で、これは、コンピュータ・メモリの費用で行われる。
【0051】本発明は、特定の実施例により説明され
た。しかしながら、本発明は、これらの特定の実施例に
限定されるものではない。それどころか、本発明の範疇
は、特許請求の範囲によって画定され、かつ他の実施例
は、特許請求の範囲の範疇内にある。例えば、本発明
は、マルチ−インスタンス・データを支持するためにP
ASCAL(パスカル)のような他の言語によって用い
ることができる。また、本発明は、さもなければそれを
供給しないオペレーティング・システムのトップのスレ
ッド支持をインプリメントするために用いることもでき
る。更に、説明されたことは、パア−インスタンス・デ
ータが一つ異常のパア−インスタンス・セグメントの中
に装填されかつ共有データが(特定のDGROUPの)
他のセグメントの中に装填されるような実施例である。
小さいメモリ・モデル実施例において、またはパア−イ
ンスタンスDGROUPを有するために、DGROUP
によるディスクリプタ基本アドレスは、また、TSEに
よって切り換えられる。
【0052】
【発明の効果】本発明の方法は、セレクタをRAM基本
アドレスにマップすべくローカル・ディスクリプタ表
(LDT)を含んでいるメモリ管理ハードウェアを有し
ているコンピュータにおいて、同時にRAMアドレス空
間に装填された第1のタスクの一部及び第2のタスクの
一部の両方としてランダム・アクセス・メモリ(RA
M)アドレス空間に装填された特定のダイナミック・リ
ンク・ライブラリ(DLL)におけるパア−インスタン
ス・データ・メモリを供給する方法であって、タスク・
スイッチ・エンハンスDLL(TSE)を供給し;DL
Lが装填されるときにTSEに該DLLを登録するため
にDLL登録ルーチンを該TSEに供給し;DLL登録
ルーチンへの呼出しを特性のDLLに供給し;タスクが
開始されるときにTSEに該タスクを登録するためにタ
スク登録ルーチンをTSEに供給し;タスク登録ルーチ
ンへの呼出しを第1のタスク及び第2のタスクに供給
し;あらゆるタスクの実行が開始または終了されようと
しているときにはいつでも及びあらゆるタスクが存在し
なくなろうとしているときにはいつでもTSEに切換え
通知を供給するためにオペレーティング・システムを要
求しているルーチンをTSEに供給し;割り当てられた
データがそのタスクに対するオリジナル・パア−インス
タンス・データ・セグメントの置換である、タスクに対
するDLLのパア−インスタンス・データを記憶するた
めにメモリ・セグメントを割り当てるためのセグメント
割り当てルーチンをTSEに供給し、オリジナル・セグ
メントは、LDTエントリを参照している特定のDLL
におけるセレクタを通して参照され、セグメント割り当
てルーチンは、LDTエントリにおける割り当てられた
セグメントに対する基本アドレスである置換基本アドレ
スを維持しかつLDTエントリにおけるオリジナル・セ
グメントのオリジナル基本アドレスであるオリジナル基
本アドレスを維持し;第1のタスクの初期化の間に該第
1のタスクに対する特定のDLLのパア−インスタンス
・データ・セグメントに対するTSEセグメント割り当
てルーチンを呼出しかつ第2のタスクの初期化の間に該
第2のタスクに対する特定のDLLのパア−インスタン
ス・データ・セグメントに対するTSEセグメント割り
当てルーチンを呼出し;そのタスクが実行を開始する前
にタスクのパア−インスタンス・セグメントの置換基本
アドレスをLDTエントリに記憶するために基本アドレ
ス設定ルーチンをTSEに供給し;かつ第1のタスクが
実行を開始しようとしているTSEによって受け取られ
た切換え通知に応じて第1のタスクに対する置換基本ア
ドレスに対して基本アドレス設定ルーチンを呼出す段階
を具備するので、マルチプル・タスクまたは一つのタス
クのマルチプル・インスタンスにリンクされたDLLに
おけるパア−インスタンス・データ・メモリを提供する
ことができ、それによりパア−インスタンス・オペレー
ションを達成するために可変宣言だけが変更されて有効
コードを容易に得ることがきる。
【0053】本発明のキットは、ランダム・アクセス・
メモリ(RAM)アドレス空間におけるダイナミック・
リンク・ライブラリ(DLLs)の装填及びRAMアド
レス空間における装填された多重タスクへのDLLの連
結を同時に供給しているマルチタスキング・オペレーテ
ィング・システム、及びセレクタをRAM基本アドレス
にマップすべくローカル・ディスクリプタ表(LDT)
を含んでいるメモリ管理ハードウェアを有しているコン
ピュータのコンテキストにおいて、第1のタスクの一部
及び第2のタスクの一部の両方として装填された特定の
DLLに対するパア−インスタンス・データ・メモリを
供給するキットであって、DLLが装填されるときに該
DLLをTSEに登録するためのDLL登録ルーチン;
タスクが開始されるときにTSEに該タスクを登録する
ためのタスク登録ルーチン;あらゆるタスクの実行が開
始または終了されようとしているときにはいつでも及び
あらゆるタスクが存在しなくなろうとしているときには
いつでも切換え通知をTSEに供給するためにオペレー
ティング・システムを要求するルーチン;割り当てられ
たセグメントがそのタスクに対するオリジナル・パア−
インスタンス・データ・セグメントの置換である、タス
クに対するDLLのパア−インスタンス・データを記憶
するためにメモリ・セグメントを割り当てるためのセグ
メント割り当てルーチンであり、オリジナル・セグメン
トは、LDTエントリを参照している特定のDLLにお
けるセレクタを通して参照され、セグメント割り当てル
ーチンは、LDTエントリにおける割り当てられたセグ
メントに対する基本アドレスである置換基本アドレスを
維持しかつLDTエントリにおけるオリジナル・セグメ
ントのオリジナル基本アドレスであるオリジナル基本ア
ドレスを維持する、セグメント割り当てルーチン;及び
タスクが実行を開始する前に該タスクのパア−インスタ
ンス・セグメントの置換基本アドレスをLDTに記憶す
るための基本アドレス設定ルーチン;を含んでいるタス
ク・スイッチ・エンハンサDLL(TSE)を備えてい
るので、マルチプル・タスクまたは一つのタスクのマル
チプル・インスタンスにリンクされたDLLにおけるパ
ア−インスタンス・データ・メモリを提供することがで
き、それによりパア−インスタンス・オペレーションを
達成するために可変宣言だけが変更されて有効コードを
容易に得ることがきる。
【図面の簡単な説明】
【図1】従来技術の関係におけるタスク(アプリケーシ
ョン)、DLLs、及びDLLデータ・セグメントを示
しているブロック図である。
【図2】タスク・スイッチ・エンハンサ(TSE)によ
って生成される関係を示しているブロック図である。
【図3】TSEによって生成されるデータ・セグメント
に対する、ローカル・ディスクリプタ・テーブル(LD
T)ディスクリプタ基本アドレスへのDLLセレクタの
関係を示している概略ブロック図である。
【図4】メモリの中にDLLを持ち込むことに関連付け
られた処理を示しているフローチャートである。
【図5】タスクを最初に始めることに関連付けられた処
理を示しているフローチャートである。
【図6】タスクを切り換えることに関連付けられた処理
を示しているフローチャートである。
【符号の説明】
140 DLL2 142 セレクタ 171,172 セグメント 175 オリジナル・データ・セグメント175 210 ディスクリプタ 220 基本アドレス部分
フロントページの続き (72)発明者 アレクサンダー エル スマンダク アメリカ合衆国 カリフォルニア州 95014 クーパーティノ 1 ウェストリ ン ウェイ 978

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 セレクタをRAM基本アドレスにマップ
    すべくローカル・ディスクリプタ表(LDT)を含んで
    いるメモリ管理ハードウェアを有しているコンピュータ
    において、同時にRAMアドレス空間に装填された第1
    のタスクの一部及び第2のタスクの一部の両方としてラ
    ンダム・アクセス・メモリ(RAM)アドレス空間に装
    填された特定のダイナミック・リンク・ライブラリ(D
    LL)におけるパア−インスタンス・データ・メモリを
    供給する方法であって、 タスク・スイッチ・エンハンスDLL(TSE)を供給
    し;DLLが装填されるときに前記TSEに該DLLを
    登録するためにDLL登録ルーチンを該TSEに供給
    し;前記DLL登録ルーチンへの呼出しを前記特性のD
    LLに供給し;タスクが開始されるときに前記TSEに
    該タスクを登録するためにタスク登録ルーチンを前記T
    SEに供給し;前記タスク登録ルーチンへの呼出しを前
    記第1のタスク及び前記第2のタスクに供給し;あらゆ
    るタスクの実行が開始または終了されようとしていると
    きにはいつでも及びあらゆるタスクが存在しなくなろう
    としているときにはいつでも前記TSEに切換え通知を
    供給するために前記オペレーティング・システムを要求
    しているルーチンを前記TSEに供給し;割り当てられ
    たデータがそのタスクに対するオリジナル・パア−イン
    スタンス・データ・セグメントの置換である、タスクに
    対するDLLのパア−インスタンス・データを記憶する
    ためにメモリ・セグメントを割り当てるためのセグメン
    ト割り当てルーチンを前記TSEに供給し、前記オリジ
    ナル・セグメントは、LDTエントリを参照している前
    記特定のDLLにおけるセレクタを通して参照され、前
    記セグメント割り当てルーチンは、前記LDTエントリ
    における前記割り当てられたセグメントに対する基本ア
    ドレスである置換基本アドレスを維持しかつ前記LDT
    エントリにおける前記オリジナル・セグメントの前記オ
    リジナル基本アドレスであるオリジナル基本アドレスを
    維持し;前記第1のタスクの初期化の間に該第1のタス
    クに対する前記特定のDLLのパア−インスタンス・デ
    ータ・セグメントに対する前記TSEセグメント割り当
    てルーチンを呼出しかつ前記第2のタスクの初期化の間
    に該第2のタスクに対する前記特定のDLLのパア−イ
    ンスタンス・データ・セグメントに対する前記TSEセ
    グメント割り当てルーチンを呼出し;そのタスクが実行
    を開始する前にタスクのパア−インスタンス・セグメン
    トの前記置換基本アドレスを前記LDTエントリに記憶
    するために基本アドレス設定ルーチンを前記TSEに供
    給し;かつ前記第1のタスクが実行を開始しようとして
    いる前記TSEによって受け取られた切換え通知に応じ
    て前記第1のタスクに対する前記置換基本アドレスに対
    して前記基本アドレス設定ルーチンを呼出す段階を具備
    することを特徴とする方法。
  2. 【請求項2】 前記TSEによって受け取られた切換え
    通知に応じて、前記特定のDLLにリンクされたノー・
    タスクが実行を開始しようとしているときに前記特定の
    DLLの前記パア−インスタンス・セグメントに対する
    前記LDTエントリに前記オリジナル基本アドレスを記
    憶する段階を更に具備することを特徴とする請求項1に
    記載の方法。
  3. 【請求項3】 前記TSEによって受け取られた切換え
    通知に応じて、前記TSEが存在しなくなろうとしてい
    るタスクにリンクされるならば前記TSEを別のTSE
    登録タスクにリンクする段階を更に具備することを特徴
    とする請求項1に記載の方法。
  4. 【請求項4】 前記オペレーティング・システムは、マ
    イクロソフト・ウィンドウズ3.1及びマイクロソフト
    ・ウィンドウズ3.11からなるグループから選択さ
    れ;かつ前記コンピュータは、インテル80386マイ
    クロプロセッサとコンパチブルなマイクロプロセッサに
    基づくことを特徴とする請求項1に記載の方法。
  5. 【請求項5】 ランダム・アクセス・メモリ(RAM)
    アドレス空間におけるダイナミック・リンク・ライブラ
    リ(DLLs)の装填及びRAMアドレス空間における
    装填された多重タスクへのDLLの連結を同時に供給し
    ているマルチタスキング・オペレーティング・システ
    ム、及びセレクタをRAM基本アドレスにマップすべく
    ローカル・ディスクリプタ表(LDT)を含んでいるメ
    モリ管理ハードウェアを有しているコンピュータのコン
    テキストにおいて、第1のタスクの一部及び第2のタス
    クの一部の両方として装填された特定のDLLに対する
    パア−インスタンス・データ・メモリを供給するキット
    であって、 DLLが装填されるときに該DLLを前記TSEに登録
    するためのDLL登録ルーチン;タスクが開始されると
    きに前記TSEに該タスクを登録するためのタスク登録
    ルーチン;あらゆるタスクの実行が開始または終了され
    ようとしているときにはいつでも及びあらゆるタスクが
    存在しなくなろうとしているときにはいつでも切換え通
    知を前記TSEに供給するために前記オペレーティング
    ・システムを要求するルーチン;割り当てられたセグメ
    ントがそのタスクに対するオリジナル・パア−インスタ
    ンス・データ・セグメントの置換である、タスクに対す
    るDLLのパア−インスタンス・データを記憶するため
    にメモリ・セグメントを割り当てるためのセグメント割
    り当てルーチンであり、前記オリジナル・セグメント
    は、LDTエントリを参照している特定のDLLにおけ
    るセレクタを通して参照され、前記セグメント割り当て
    ルーチンは、前記LDTエントリにおける前記割り当て
    られたセグメントに対する基本アドレスである置換基本
    アドレスを維持しかつ前記LDTエントリにおける前記
    オリジナル・セグメントのオリジナル基本アドレスであ
    るオリジナル基本アドレスを維持する、セグメント割り
    当てルーチン;及びタスクが実行を開始する前に該タス
    クのパア−インスタンス・セグメントの前記置換基本ア
    ドレスを前記LDTに記憶するための基本アドレス設定
    ルーチン;を含んでいるタスク・スイッチ・エンハンサ
    DLL(TSE)を備えていることを特徴とするキッ
    ト。
JP8293097A 1995-09-29 1996-09-30 ダイナミック・ライブラリ・タスク切替え Pending JPH09288586A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/537235 1995-09-29
US08/537,235 US5802368A (en) 1995-09-29 1995-09-29 Dynamic Library Task Switching

Publications (1)

Publication Number Publication Date
JPH09288586A true JPH09288586A (ja) 1997-11-04

Family

ID=24141798

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8293097A Pending JPH09288586A (ja) 1995-09-29 1996-09-30 ダイナミック・ライブラリ・タスク切替え

Country Status (6)

Country Link
US (1) US5802368A (ja)
EP (1) EP0766170A1 (ja)
JP (1) JPH09288586A (ja)
AU (1) AU706491B2 (ja)
BR (1) BR9603951A (ja)
CA (1) CA2186684C (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011516972A (ja) * 2008-04-02 2011-05-26 クゥアルコム・インコーポレイテッド 複数のタスクにわたる複数のオペレーティングシステム・サブプロセスの共有
CN106681782A (zh) * 2016-12-09 2017-05-17 北京奇虎科技有限公司 一种编译安卓安装包的动态链接库so文件的方法和装置

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6115799A (en) * 1996-07-19 2000-09-05 Canon Kabushiki Kaisha Information processing apparatus and associated method for managing a memory using a next fit and for reducing a memory fragmentation problem
US5881292A (en) * 1996-09-26 1999-03-09 Microsoft Corporation Dynamic versioning system for multiple users of multi-module software system
US6363436B1 (en) * 1997-01-27 2002-03-26 International Business Machines Corporation Method and system for loading libraries into embedded systems
US6110227A (en) * 1998-06-24 2000-08-29 Microsoft Corporation Systems and methods for pre-processing variable initializers
GB2340265B (en) 1998-07-31 2003-04-23 Sony Uk Ltd Data processing
US6543047B1 (en) 1999-06-15 2003-04-01 Dell Usa, L.P. Method and apparatus for testing custom-configured software/hardware integration in a computer build-to-order manufacturing process
US7249155B1 (en) * 2000-02-09 2007-07-24 International Business Machines Corporation Method for processing a request to multiple instances of a server program
US7124408B1 (en) * 2000-06-28 2006-10-17 Microsoft Corporation Binding by hash
US7117371B1 (en) 2000-06-28 2006-10-03 Microsoft Corporation Shared names
US20050132084A1 (en) * 2003-12-10 2005-06-16 Heung-For Cheng Method and apparatus for providing server local SMBIOS table through out-of-band communication
DE102004017050A1 (de) * 2004-04-07 2005-10-27 Robert Bosch Gmbh Datenkonsistenz in Datenverarbeitungsanlagen
US7631360B2 (en) * 2004-06-12 2009-12-08 Microsoft Corporation Hardware protection
US7721340B2 (en) * 2004-06-12 2010-05-18 Microsoft Corporation Registry protection
US9223598B1 (en) * 2012-11-26 2015-12-29 Parallels IP Holdings GmbH Displaying guest operating system statistics in host task manager
CN103995705B (zh) * 2014-06-04 2017-04-19 中国科学院信息工程研究所 一种操作系统地址空间随机化分配系统及方法
US10831670B2 (en) 2017-11-22 2020-11-10 Blackberry Limited Method and system for low latency data management
US11209997B2 (en) 2017-11-22 2021-12-28 Blackberry Limited Method and system for low latency data management
CN112799816B (zh) * 2021-02-01 2023-03-31 安徽芯纪元科技有限公司 一种嵌入式操作系统的多任务程序指定任务调试方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1312959C (en) * 1987-11-06 1993-01-19 Kiritkumar Talati Virtual interface system and method for enabling software applications to be environment-independent
CA2054026A1 (en) * 1990-10-31 1992-05-01 William Monroe Turpin Goal oriented electronic form system
US5247681A (en) * 1990-12-18 1993-09-21 International Business Machines Corporation Dynamic link libraries system and method
US5255379A (en) * 1990-12-28 1993-10-19 Sun Microsystems, Inc. Method for automatically transitioning from V86 mode to protected mode in a computer system using an Intel 80386 or 80486 processor
US5365606A (en) * 1991-11-27 1994-11-15 Visystems, Inc. Virtual software machine running multiple program modules in a single address space of a target computer
US5596755A (en) * 1992-11-03 1997-01-21 Microsoft Corporation Mechanism for using common code to handle hardware interrupts in multiple processor modes
US5530858A (en) * 1993-04-01 1996-06-25 Intel Corporation Method and apparatus for background processing for PCMCIA card services
GB9311935D0 (en) * 1993-06-09 1993-07-28 Madge Networks Ltd Processor
US5410698A (en) * 1993-10-12 1995-04-25 Intel Corporation Method and system for dynamic loading of software libraries
US5517651A (en) * 1993-12-29 1996-05-14 Intel Corporation Method and apparatus for loading a segment register in a microprocessor capable of operating in multiple modes
US5581768A (en) * 1995-02-27 1996-12-03 Intel Corporation Method and apparatus for executing applications in place from write once/seldom memories

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011516972A (ja) * 2008-04-02 2011-05-26 クゥアルコム・インコーポレイテッド 複数のタスクにわたる複数のオペレーティングシステム・サブプロセスの共有
KR101284099B1 (ko) * 2008-04-02 2013-07-10 퀄컴 인코포레이티드 태스크들에 걸쳐 오퍼레이팅 시스템 서브-프로세스들 공유
JP2013232215A (ja) * 2008-04-02 2013-11-14 Qualcomm Inc 複数のタスクにわたる複数のオペレーティングシステム・サブプロセスの共有
US9015727B2 (en) 2008-04-02 2015-04-21 Qualcomm Incorporated Sharing operating system sub-processes across tasks
CN106681782A (zh) * 2016-12-09 2017-05-17 北京奇虎科技有限公司 一种编译安卓安装包的动态链接库so文件的方法和装置
CN106681782B (zh) * 2016-12-09 2019-12-24 北京奇虎科技有限公司 一种编译安卓安装包的动态链接库so文件的方法和装置

Also Published As

Publication number Publication date
CA2186684A1 (en) 1997-03-30
CA2186684C (en) 2002-11-26
EP0766170A1 (en) 1997-04-02
AU6790896A (en) 1997-04-10
MX9604437A (es) 1997-09-30
AU706491B2 (en) 1999-06-17
US5802368A (en) 1998-09-01
BR9603951A (pt) 1998-06-09

Similar Documents

Publication Publication Date Title
JPH09288586A (ja) ダイナミック・ライブラリ・タスク切替え
EP1763774B1 (en) Multiple computer architecture with replicated memory fields
EP0664903B1 (en) Loader system
US5375241A (en) Method and system for dynamic-link library
US6799173B2 (en) Method and apparatus for sharing code containing references to non-shared objects
US5345588A (en) Thread private memory storage of multi-thread digital data processors using access descriptors for uniquely identifying copies of data created on an as-needed basis
US5247678A (en) Load time linker for software used with a multiprocessor system
US5504901A (en) Position independent code location system
KR970008530B1 (ko) 언어 특정의 인터페이스 정의 발생 시스템 및 언어 중립 객체 정의에 기초한 실행가능한 코드 발생 방법
CA2143488C (en) Dynamic link libraries without linker or loader support
US6760905B1 (en) Lazy compilation of template-generated classes in dynamic compilation execution environments
US6085035A (en) Method and apparatus for efficient operations on primary type values without static overloading
US5632034A (en) Controlling method invocation sequence through virtual functions in an object-oriented class library
US7219329B2 (en) Systems and methods providing lightweight runtime code generation
US5802367A (en) Method and system for transparently executing code using a surrogate process
US5708811A (en) System and method for lazy loading of shared libraries
US5590327A (en) Method for making data objects having hidden pointers persistent
US5983021A (en) Dynamically switching statically bound function calls to dynamically bound function calls without recompilation
US6260075B1 (en) System and method for providing shared global offset table for common shared library in a computer system
US20050262513A1 (en) Modified computer architecture with initialization of objects
US5794041A (en) C++ ojbect model alternatives
US5603030A (en) Method and system for destruction of objects using multiple destructor functions in an object-oriented computer system
CA2236064A1 (en) Method and system for constructing hybrid virtual function tables
IE72197B1 (en) Linking of program units at program activation
US7246135B2 (en) Sharing classes between programs