(57)【要約】【課題】ＲＴＯＳ機能およびリアルタイムアプリケーションを実装する共有ライブラリをカーネル空間にロードし起動するデバイスドライバを提供することを課題とする。【解決手段】ＲＴＯＳ機能およびリアルタイムアプリケーションを共有ライブラリとして構成し、カーネル空間に共有ライブラリ、およびその共有ライブラリが参照する他の共有ライブラリをロードし、リロケーション情報に基づいてアドレス情報を調整し、外部参照を解決すること、および起動関数を示すシンボル情報を取り出し起動関数を起動する。【選択図】図１
2005196286.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムとカーネルのメモリ空間がそれぞれ異なるメモリ空間として設定され、入出力装置を制御するデバイスドライバが前記カーネルメモリ空間に実装されるオペレーティングシステムにおいて、
リアルタイム制御基本ソフトウェアおよびリアルタイムアプリケーションが共有ライブラリとして構成され、
デバイスドライバが、リアルタイム制御基本ソフトウェアおよびリアルタイムアプリケーションをカーネル空間に読み込み、再配置し、外部参照を解決し、および起動することを特徴とするリアルタイムアプリケーションプログラムを動作可能なオペレーティングシステム。
【請求項２】
アプリケーションプログラムとカーネルのメモリ空間がそれぞれ異なるメモリ空間として設定され、入出力装置を制御するデバイスドライバが前記カーネルメモリ空間に実装されるオペレーティングシステムの制御方法において、
リアルタイム制御基本ソフトウェアおよびリアルタイムアプリケーションを共有ライブラリとして構成し、
デバイスドライバは、リアルタイム制御基本ソフトウェアおよびリアルタイムアプリケーションをカーネル空間に読み込み、再配置し、外部参照を解決し、および起動して、リアルタイムアプリケーションプログラムを動作させることを特徴とするオペレーティングシステムの制御方法。
【請求項３】
請求項２記載の制御方法において、デバイスドライバは、リアルタイム制御基本ソフトウェアをカーネル空間に読み込み、再配置し、外部参照を解決し、起動した後に、リアルタイムアプリケーションをカーネル空間に読み込み、再配置し、外部参照を解決し、および起動することを特徴とする共有ライブラリのロード方法。
【請求項４】
請求項１記載のオペレーティングシステムにおいて、リアルタイム制御基本ソフトウェアまたはリアルタイムアプリケーションの外部参照を解決するにあたって、ロードされていない共有ライブラリのシンボルを含む場合、ロードされていない共有ライブラリについてカーネル空間に読み込み、再配置し、外部参照を解決し、および起動することを特徴とする共有ライブラリをロードするデバイスドライバ。
【請求項５】
請求項２記載の制御方法において、デバイスドライバは、リアルタイム制御基本ソフトウェアおよびリアルタイムアプリケーションのリストに従って、カーネル空間に読み込み、再配置し、外部参照を解決した後に、リアルタイム制御基本ソフトウェアおよびリアルタイムアプリケーションのリストの順に従って起動することを特徴とする共有ライブラリのロード方法。
【請求項６】
請求項２記載の制御方法において、デバイスドライバは、外部参照を解決するにあたって、リアルタイム制御基本ソフトウェアおよび特定のリアルタイムアプリケーションに対してのみオペレーティングシステムのカーネルが持つシンボル参照を可能とし、それ以外のリアルタイムアプリケーションには参照不可能とすることを特徴とする共有ライブラリのロード方法。
【請求項７】
請求項２記載の制御方法において、デバイスドライバは、リアルタイム制御基本ソフトウェアおよびリアルタイムアプリケーションをカーネル空間に読み込んだ後に、少なくとも命令コードセクションおよび読み出し専用初期化済データセクションのロードされたカーネルメモリ空間の領域を読み出し専用とすることを特徴とする共有ライブラリのロード方法。
【請求項８】
請求項２，３，５，６，７のいずれか１に記載のデバイスドライバを記録した媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リアルタイムアプリケーションプログラムを動作可能なオペレーティングシステム及びその制御方法、共有ライブラリをロードする方法であり、特にアプリケーションプログラムとカーネルのメモリ空間がそれぞれ異なるメモリ空間として設定され、入出力装置を制御するデバイスドライバが前記カーネルメモリ空間に実装されるオペレーティングシステムにおけるリアルタイムアプリケーションプログラムの制御に関するものである。
【背景技術】
【０００２】
従来、アプリケーションプログラムとカーネルのメモリ空間がそれぞれ異なるメモリ空間として設定され、入出力装置を制御するデバイスドライバが前記カーネルメモリ空間に取りこまれて実装されるオペレーティングシステムは、リアルタイム制御基本ソフトウェア機能（以下、ＲＴＯＳ機能と記す）を有していない場合が多い。従って、このようなオペレーティングシステム上においてのみ動作する有用なアプリケーションプログラムが多数存在していても、ＲＴＯＳ機能がなければＲＴＯＳ機能を必要とするアプリケーション、すなわちリアルタイムアプリケーションをこのようなオペレーティングシステム上で動作させることができず、他の有用なアプリケーションと共にＲＴＯＳ機能を必要とするアプリケーションを利用することができなかった。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
このようなオペレーティングシステムにＲＴＯＳ機能を施す場合、ＲＴＯＳ機能をデバイスドライバとして実装することがある。この場合、デバイスドライバの交換はオペレーティングシステムにより管理されているために、オペレーティングシステムの課す制約条件を満たさなければデバイスドライバを交換できず、すなわちＲＴＯＳ機能を容易に交換できないという問題があった。
【０００４】
また、カーネル空間にアプリケーションソフトウェアをロードして実行することは、このようなオペレーティングシステムでは考慮されていない。このためＲＴＯＳ機能を利用するリアルタイムアプリケーションをカーネル空間へロードし、起動するための手段が必要となる。このような機能は、本来ＲＴＯＳ機能ではなく、ＲＴＯＳ機能とは分けて実現されることが望ましい。
【課題を解決するための手段】
【０００５】
本発明は上述のような問題に鑑みてなされたもので、アプリケーションプログラムとカーネルのメモリ空間が異なるメモリ空間とされ、入出力装置を制御するデバイスドライバが前記カーネルメモリ空間に取りこまれて実装されるオペレーティングシステムにおいて、リアルタイム制御基本ソフトウェアおよびリアルタイムアプリケーションを共有ライブラリとして構成し、リアルタイム制御基本ソフトウェアおよびリアルタイムアプリケーションをカーネル空間に読み込み、再配置し、外部参照を解決し、および起動する共有ライブラリをロードするデバイスドライバを提供し、ＲＴＯＳ機能を有しないオペレーティングシステムにおいて、ＲＴＯＳ機能を利用可能とするとともに、ＲＴＯＳ機能およびリアルタイムアプリケーションを共有ライブラリとして構成することで複数の共有ライブラリに分けて実装可能とするオペレーティングシステム及びその制御方法を提供する。
【０００６】
また、共有ライブラリが外部参照するシンボルを含むライブラリがロードされていない場合、その共有ライブラリを読み込み、再配置し、外部参照を解決し、および起動することで、自動的に必要な共有ライブラリをロードする方法を提供する。
【０００７】
更に、本発明は、上記とは別に、ロードする共有ライブラリの一覧をリストとして指定し、指定された共有ライブラリを読み込み、再配置し、外部参照を解決し、およびリストで指定された順番で起動することで、必要な共有ライブラリのロードおよび起動順序を明示的に指定可能なロード機能を実現することを特徴とする。なお、ここでのリストは、データ構造としてのリストとは限らず、配列であってもよい。
【０００８】
更に、また外部参照を解決するにあたって、リアルタイム制御基本ソフトウェアおよび特定のリアルタイムアプリケーションに対してのみオペレーティングシステムのカーネルが持つシンボルを参照可能とし、リアルタイムアプリケーションが本来呼び出してはならないオペレーティングシステムのカーネル機能を呼び出してしまうことを防止することを特徴とする。
【０００９】
更に、リアルタイム制御基本ソフトウェアおよびリアルタイムアプリケーションをカーネル空間に読み込んだ後に、命令コードおよび読み出し専用初期化済データセクションのロードされたカーネルメモリ空間の領域を読み出し専用として、誤った書き込みから保護することを特徴とする。
【００１０】
本発明におけるデバイスドライバは、カーネル空間に共有ライブラリ、およびその共有ライブラリが参照する他の共有ライブラリを読み込み、リロケーション（再配置）情報に基づいてアドレス情報を調整し、外部参照を解決すること、および起動関数を示すシンボル情報を取り出し起動関数を起動することを特徴とする。
【００１１】
更に、本発明のデバイスドライバは、リアルタイム制御基本ソフトウェアおよび特定のリアルタイムアプリケーションであるかどうかを判定し、それに該当するものであれば、オペレーティングシステムのカーネルのシンボルを参照可能とする、すなわちカーネル機能を呼び出し可能とすることを特徴とする。
【００１２】
更に、本発明のデバイスドライバは、リアルタイム制御基本ソフトウェアおよびリアルタイムアプリケーションをカーネル空間にロードした後に、命令コードおよび読み出し専用初期化済データセクションのロードされたカーネルメモリ空間の領域をメモリ管理テーブルを操作して読み出し専用領域に設定することを特徴とする。
【００１３】
更に、本発明のデバイスドライバは、媒体に記録される。
【発明の効果】
【００１４】
本発明の共有ライブラリをロードするデバイスドライバでは、ＲＴＯＳ機能およびリアルタイムアプリケーションを共有ライブラリとして構成し、カーネル空間に共有ライブラリ、およびその共有ライブラリが参照する他の共有ライブラリを読み込み、リロケーション（再配置）情報に基づいてアドレス情報を調整し、外部参照を解決し、起動関数を示すシンボル情報を取り出し起動関数を起動するので、ＲＴＯＳ機能およびリアルタイムアプリケーションを共有ライブラリとして構築すればよく、それらの構築が容易になる。
【００１５】
また、参照する共有ライブラリを選択し再帰的にロードするので、もっとも上位のリアルタイムアプリケーションの共有ライブラリを指定してロードするだけで、その参照する共有ライブラリが自動的にロードされ、個々の共有ライブラリを指定する手順を省略でき、かつ適当な順序での起動が行われる利点がある。
【００１６】
一方、ロードする共有ライブラリを厳密に管理したい場合には、予めロードすべきすべての共有ライブラリを指定してロードでき、かつその起動順序を指定できるので、想定外の順序で起動されてしまったために生じる不具合を未然に防止することができる。
【発明を実施するための最良の形態】
【００１７】
図１は本発明によるアプリケーションメモリ空間１、カーネルメモリ空間８、およびそこに配置されるソフトウェアを示す図である。これらのメモリ空間は図２にブロック図で示すコンピューターシステムのＲＡＭ１０３上に設けられるものである。なお、図２には図示していないが、アプリケーションプログラムとカーネルのメモリ空間を異なるメモリ空間とするために、ＣＰＵ１０１はメモリ管理ユニット（ＭＭＵ）を備えている必要がある。図１は、本発明に関係する要素のみを記してあるが、実際にはカーネル機能を実現する本体、各種のデバイスドライバ機能などが配される。
【００１８】
図１において、カーネルメモリ空間８内には、本発明による共有ライブラリロードデバイスドライバ３が配置され、また、共有ライブラリロードデバイスドライバ３により確保された共有ライブラリ記憶領域７が設けられている。共有ライブラリ記憶領域７に共有ライブラリロードデバイスドライバ３により指定されてロードされた共有ライブラリ４、指定されてロードされた共有ライブラリ４から参照される２次の共有ライブラリ５、２次の共有ライブラリ５から参照される３次の共有ライブラリ６が設けられている。
【００１９】
図２には、例えば工作機械の主軸あるいは送り軸機構などをＮＣ制御するためのコンピューターシステムを示し、サーボモータ１１２はサーボ制御部１１１によって制御され、主軸その他の送り軸の位置は位置検出器１１３によって検出され、サーボ制御部１１１が高精度に位置制御を行っている。サーボ制御部１１１はシステムバス１０６を介してＣＰＵ１０１と接続され、このシステムバス１０６には操作パネルＩ／Ｆ部１０９及び表示制御部１０７が繋がっている。操作パネルＩ／Ｆ部１０９は工作機械のオペレータが操作する操作器１１０と接続され、ＣＰＵ１０１に所望の加工指令を送る。工作機械による加工状況は表示制御部１０７から表示装置１０８に送られ、現在のＮＣ制御の状況をオペレータが常時監視することができる。
【００２０】
前述したシステムバス１０６には、更に、ＲＯＭ１０２、ＲＡＭ１０３、ハードディスクＩ／Ｆ１０４が接続されており、このハードディスクＩ／Ｆ１０４はハードディスク１０５を読み書きし、ＣＰＵ１０１の命令に応じて各メモリ装置から所望の制御データが読み出され、あるいは必要な過去データが書き込まれている。前述した様に、本発明は、図２におけるＣＰＵ１０１とＲＡＭ１０３とによって制御されるオペレーティングシステムに関するものである。
【００２１】
図３は、マイクロソフト社の共有ライブラリ（DLL: Dynamic Link Library）の構造を示す図であり、”Microsoft Portable Executable and Common Object File Format Specification”（マイクロソフト社）から抜粋、要約したものである。以下この共有ライブラリ構造に基づいて説明を行う。
【００２２】
共有ライブラリは始めハードディスク（ＨＤ）１０５にファイルとして記憶される。通常共有ライブラリはアプリケーションプログラムから参照され、アプリケーションメモリ空間にロードされるもので、通常このロードの作業はオペレーティングシステム、あるいはオペレーティングシステムに備えつけのライブラリによって行われるが、本発明の共有ライブラリロードデバイスドライバ３は、これらをカーネルメモリ空間８に取り込み、起動関数の起動を行う。
【００２３】
図４は、共有ライブラリロードデバイスドライバ３が共有ライブラリをロードする手続きを示すフローチャートである。以下、このフローチャートに従って、共有ライブラリロードデバイスドライバ３の動作を説明する。
【００２４】
共有ライブラリロードデバイスドライバ３は、共有ライブラリロードデバイスドライバ制御ソフトウェア２からの指示を受けて動作を開始する（Ｓ１）。
【００２５】
始めに指定された共有ライブラリのＰＥヘッダ２０２（図３）を共有ライブラリ記憶領域７に読み込む（Ｓ２）。ＰＥヘッダにはセクションの数、オプションヘッダのサイズなどが記憶されている。オプションヘッダはＰＥヘッダの一部であり、共有ライブラリを適切にロードするために必要な情報として、バージョン情報、スタックメモリのサイズ、エクスポートテーブルのファイル内の位置、インポートテーブルのファイル内の位置などの情報が収められている。
【００２６】
次にセクションヘッダ部２０３を読み込む（Ｓ３）。セクションヘッダとはイメージ部２０４に記憶されるインポート情報、エクスポート情報、リロケーション情報など各セクションのセクション名、サイズなどを記憶している。次にイメージ部２０４を読み込む（Ｓ４）。イメージ部はセクションに分かれており、各セクションごとにメモリ１０３上の適切な空き領域に読み込む。以上によりＰＥヘッダ２０２，セクションヘッダ２０３，イメージ２０４が読み込まれて、共有ライブラリ記憶領域７に、指定されてロードされた共有ライブラリ４のロードがなされる。なお、イメージ部のうち．ｔｅｘｔセクション（命令コード。“．ｔｅｘｔ”はセクション名、以下同様））、．ｒｄａｔａセクション（読出し専用初期化済データ）については、前述のＭＭＵの管理するメモリ管理テーブルを操作して、読み出し専用とする。こうすることで、これらの領域に対する誤った書き込みが行われるのを検出し適切な処置を可能とする。
【００２７】
次に、．ｒｅｌｏｃセクションに記憶されるリロケーション情報をもとに  ．ｔｅｘｔ  セクションに記憶される命令コード、．ｄａｔａセクションに記憶される初期化済データ、．ｒｄａｔａセクションに記憶される読出し専用初期化済データに含まれるアドレス情報をリロケートする（Ｓ５）。リロケートとは共有ライブラリが作成されたときに仮定されたアドレスと実際にメモリ１０３上にロードされたアドレスの差違を調整するもので、アドレスの差をアドレス情報が含まれるメモリの内容に加算または減算する。図５リロケーション情報の構造を示す。リロケーション情報としては、リロケーションテーブルが存在するのみである。リロケーションテーブルの構造は、第１列がリロケーション方法を示すタイプ、第２列がリロケーションを行うメモリアドレスを示すオフセット値で、リロケーションが必要な箇所の個数と同じ行数がある。
【００２８】
次に、．ｅｄａｔａセクションに記憶されるエクスポート情報を登録し、他の共有ライブラリからのシンボル参照を可能にする（Ｓ６）。図６はエクスポート情報の構造を示す図である。エクスポートテーブルアドレス、アドレステーブル、名前ポインタテーブル、序数テーブル、名前テーブルからなる。エクスポートテーブルアドレスは、後続のテーブル群がどこに配置されているかを示す情報である。アドレステーブルはエクスポートするアドレスを序数の順序に従って記憶するテーブルである。名前ポインタテーブルと序数テーブルは対になっており、外部に公開するシンボル（名前）を記憶する名前ポインタテーブルから、名前を検索し、見つかった名前の配列添数を序数テーブルの添数として序数を読出し、この序数をもとにアドレステーブルを読み出すことで、シンボルに対応するアドレスを読み出すことができる。なお、アドレステーブルに記憶するアドレス情報は、リンク時に仮定されたアドレスであり、．ｒｅｌｏｃセクション（リロケーション情報）で説明したように、実際にメモリ１０３上に読み込まれたアドレスに差違を調整する必要がある。
【００２９】
次に、．ｉｄａｔａセクションに記憶されるインポート情報をもとにインポート処理を行う（Ｓ７）。図７はインポート情報の構造を示す図である。インポート処理は共有ライブラリが、他の共有ライブラリのエクスポートするシンボルを参照している場合、参照テーブルのアドレス情報をエクスポートされているシンボルに対応付いたアドレスに修正するものである。この時、他の共有ライブラリがまだロードされていない場合、その共有ライブラリのエクスポート情報が未登録であり、シンボルを参照することができない。従って、その共有ライブラリをロードしなければならない。この処理は、他の共有ライブラリに対しステップＳ１から実行する、すなわち再帰呼び出し処理により実現される。この場合、他の共有ライブラリは補助記憶装置であるハードディスク１０５上の所定の場所を検索して、共有ライブラリを探し出しロードを行う。従って、参照される（依存する）共有ライブラリは、ロードすることを指定しなくても自動的にロードされる。
【００３０】
なお、再帰呼び出し処理が行われた結果、指定されてロードされた共有ライブラリ４から直接参照される共有ライブラリは２次の共有ライブラリ５として、２次の共有ライブラリから参照される共有ライブラリは３次の共有ライブラリ６として、ｎ次の共有ライブラリから参照されるｎ＋１次の共有ライブラリとして、共有ライブラリ記憶領域７にロードがなされる。なお、図１において指定されてロードされた共有ライブラリ４、２次の共有ライブラリ５、３次の共有ライブラリ６は、並べて図示しているが、実際には離れたアドレス領域にロードされることもありうる。
【００３１】
共有ライブラリロードデバイスドライバ制御ソフトウェア２から指定された共有ライブラリがリアルタイムアプリケーションである場合、参照する共有ライブラリの１つとしてＲＴＯＳ機能を有する共有ライブラリが含まれる。このため、リアルタイムアプリケーションとともにＲＴＯＳ機能を有する共有ライブラリがロードされる。
【００３２】
これとは別に、共有ライブラリロードデバイスドライバ制御ソフトウェア２は、リアルタイムアプリケーションをロードする前にＲＴＯＳ機能を有する共有ライブラリを指定して共有ライブラリロードデバイスドライバ３を駆動させ、リアルタイムアプリケーションよりも前にＲＴＯＳ機能を有する共有ライブラリをロードおよび起動させてもよい。このようにするとＲＴＯＳ機能が先に動作を開始してシステムを安定させてから、リアルタイムアプリケーションのロード及び起動が可能になる。
【００３３】
なおロードしようとする共有ライブラリがリアルタイム制御基本ソフトウェアあるいは特定のリアルタイムアプリケーションである場合、オペレーティングシステムのカーネル機能のシンボルテーブル９を参照可能とする。こうすることで、通常は呼び出すことの許されないオペレーティングシステムのカーネル機能を、リアルタイム制御基本ソフトウェアおよび限られたリアルタイムアプリケーションに対してのみ許可し、それ以外のリアルタイムアプリケーションについては誤った機能呼び出しが行われることを防ぐことができる。
【００３４】
最後にロードし終わった共有ライブラリの開始アドレスを登録する（Ｓ８）。共有ライブラリのエクスポート情報から外部に公開するｍａｉｎというシンボルを探し出して、そのシンボルに対応するアドレスを開始アドレスとする。なおシンボル名は必ずしもｍａｉｎでなくてもよく、他のシンボル名であってもよい。また、このシンボルが見つからなかった場合には、起動する必要がないため、開始アドレスの登録を行わなくてもよい。これで共有ライブラリのロードが終了する（Ｓ９）。
【００３５】
以上のステップＳ１からＳ９により、指定された共有ライブラリおよびその共有ライブラリが参照する２次の共有ライブラリ、ｎ次（ｎ＝２，３，４…）の共有ライブラリから参照されるｎ＋１次の共有ライブラリがロードされることを説明した。なお、指定された共有ライブラリ、またはｎ次のライブラリが参照するライブラリが複数ある場合には、ｎ＋１次の共有ライブラリは複数存在することになる。
【００３６】
次に起動関数を示すシンボル情報を取り出し、共有ライブラリをロードした順序とは逆順に起動関数を起動する手順について、図８のフローチャートを用いて説明する。すべての共有ライブラリがロードされた後で、共有ライブラリの起動が開始される（Ｓ１１）。初めにロードの際のステップＳ８で最初に登録された開始アドレスを取り出す（Ｓ１２）。次にＳ１２で読み出した開始アドレスから実行を開始させる（Ｓ１３）。これは関数呼び出しで、起動関数は直ちに終了する。ステップＳ８で登録されたすべての開始アドレスについて完了しているかどうかを判定し、完了していたら終了する（Ｓ１４）。完了していなければ、ステップＳ８で次に登録された開始アドレスを取り出し（Ｓ１５）、再びステップＳ１３へ戻って繰返す。ここでステップＳ８に登録された順序は、共有ライブラリのロードされた逆順になっていて、この順に起動すると、ロードした逆順で起動することになる。これは、依存されるものほど早く起動され、準備が整えられることになる。以上により、共有ライブラリをロードする第１のデバイスドライバの動作を説明した。なお、すべての共有ライブラリがロードされた後に起動するのは、共有ライブラリが相互に依存している可能性があるためで、すべての共有ライブラリのロードが完了する前に起動すると、ロードの完了していないライブラリの機能を呼び出してしまう可能性がある。
【００３７】
次に、以上とは異なる手続きで、共有ライブラリをロードする第２のデバイスドライバの動作を図９のフローチャートを使って説明する。
【００３８】
共有ライブラリロードデバイスドライバ３は、共有ライブラリロードデバイスドライバ制御ソフトウェア２からの指示を受けて動作を開始すると（Ｓ２１）、共有ライブラリロードデバイスドライバ制御ソフトウェア２から共有ライブラリのリストとして引き渡された、指定された共有ライブラリの最初のものの名前を変数ｄｌｌに格納する（Ｓ２２）。この共有ライブラリのリストに、リアルタイムアプリケーションおよびＲＴＯＳ機能を指定することで、リアルタイム制御機能を実現される。
【００３９】
次に変数ｄｌｌで指定された共有ライブラリのＰＥヘッダを読み込み（Ｓ２３）、セクションヘッダを読み込み（Ｓ２４）、イメージを読み込み（Ｓ２５）、リロケーションを行い（Ｓ２６）、エクスポート情報の登録を行う（Ｓ２７）。以上のステップＳ２３〜Ｓ２７はステップＳ２〜Ｓ６に対応しており、動作はそれらと同じであるので、ここでの説明は省略する。
【００４０】
指定された共有ライブラリをロードし終わっていれば、ステップＳ３０へ移る。さもなければ、変数ｄｌｌに指定の共有ライブラリの次のものの名前を設定し（Ｓ２９）、再びステップＳ２３へ戻って共有ライブラリのロードを行う。
【００４１】
次のステップＳ３０〜Ｓ３３にて、すべての共有ライブラリのインポート処理を行う。ステップＳ３１のインポート処理はステップＳ７のインポート処理と同様であるが、他の共有ライブラリがエクスポートするシンボルを参照している場合、他の共有ライブラリはリストに従ってロード済みであるので、他の共有ライブラリを再帰的にロードすることはない。ステップＳ３０，Ｓ３２，Ｓ３３はすべての共有ライブラリに対しインポート処理を行うためのループ制御の処理である。
【００４２】
次にステップＳ３４〜Ｓ３７にて、すべての共有ライブラリの起動関数の開始アドレスから実行開始する。ステップＳ３５は、共有ライブラリｄｌｌのエクスポート情報から外部に公開するｍａｉｎというシンボルを探し出して、そのシンボルに対応するアドレスを開始アドレスとして、実行を開始させる。ステップＳ３６，Ｓ３７はすべての共有ライブラリに対し起動関数の開始アドレスから実行開始するためのループ制御の処理である。以上により、第２のデバイスドライバの動作を説明した。なお、第１のデバイスドライバの場合と同様に、命令コードや読み出し専用初期化済データセクションのメモリを読み出し専用としてもよい。
【図面の簡単な説明】
【００４３】
【図１】本発明によるアプリケーションメモリ空間１、カーネルメモリ空間２、およびそこに配置されるソフトウェアを示す図である。
【図２】コンピューターシステムのブロック図である。
【図３】共有ライブラリの構造を示す図である。
【図４】共有ライブラリロードデバイスドライバが共有ライブラリをロードする手続きを示すフローチャートである。
【図５】リロケーション情報の構造を示す図である。
【図６】エクスポート情報の構造を示す図である。
【図７】インポート情報の構造を示す図である。
【図８】共有ライブラリの起動関数を起動する手順を示すフローチャートである。
【図９】共有ライブラリをロードする第２のデバイスドライバの動作を示すフローチャートである。
【符号の説明】
【００４４】
１  アプリケーションメモリ空間、２  共有ライブラリロードデバイスドライバ制御ソフトウェア、３  共有ライブラリロードデバイスドライバ、４  指定されてロードされた共有ライブラリ、５  ２次の共有ライブラリ、６  ３次の共有ライブラリ、７  共有ライブラリ記憶領域、８  カーネルメモリ空間、９  オペレーティングシステムカーネル機能のシンボルテーブル、１０１  ＣＰＵ、１０２  ＲＯＭ、１０３  ＲＡＭ、１０４  ハードディスクインターフェース、１０５  ハードディスク（補助記憶装置）、１０６  システムバス、１０７  表示制御部、１０８  表示装置、２０１  ＭＳ−ＤＯＳスタブ部、２０２  ＰＥヘッダー部、２０３  セクションヘッダー部、２０４  イメージ部。
【図１】
2005196286.tif 000003
【図２】
2005196286.tif 000004
【図３】
2005196286.tif 000005
【図４】
2005196286.tif 000006
【図５】
2005196286.tif 000007
【図６】
2005196286.tif 000008
【図７】
2005196286.tif 000009
【図８】
2005196286.tif 000010
【図９】
2005196286.tif 000011