JPH05189212A - リンキング方法 - Google Patents

リンキング方法

Info

Publication number
JPH05189212A
JPH05189212A JP257392A JP257392A JPH05189212A JP H05189212 A JPH05189212 A JP H05189212A JP 257392 A JP257392 A JP 257392A JP 257392 A JP257392 A JP 257392A JP H05189212 A JPH05189212 A JP H05189212A
Authority
JP
Japan
Prior art keywords
module
bar
linking
linkage
foo
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
JP257392A
Other languages
English (en)
Inventor
Kenichi Maeda
賢一 前田
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP257392A priority Critical patent/JPH05189212A/ja
Publication of JPH05189212A publication Critical patent/JPH05189212A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

(57)【要約】 【構成】 モジュール"foo" の実行以前に、コマンドで
リンケージ・モジュール5に参照されるモジュール"ba
r" のモジュールディスクリプタテーブル2における番
号("bar#")をセットすることによってリンキングを行
なう。 【効果】 実行以前にアドレス参照の解決ができている
ため高速な実行が可能になるとともに、サブルーチンの
管理、実行モジュールのコンパクト性はダイナミック・
リンキング時と同様の特性を確保できる。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、電子計算機のプログラ
ムのリンキング方法に関する。
【0002】
【従来の技術】電子計算機のプログラムは実行前に必要
なサブルーチンやライブラリをリンクする必要がある。
通常のリンキング方式はスタティック・リンキングと呼
ばれ、ロード・モジュールを作成する際に必要なものを
すべてリンクする方式である。この方式はプログラムの
実行前に全てのリンキングが完了しており、従って、実
行が高速に行なえるという特徴がある反面、複数のプロ
グラムで用いられるサブルーチンを全てのロード・モジ
ュール中に持っている必要があるため、ロード・モジュ
ールが大きくなってしまったり、サブルーチンを変更し
た際、全てのロード・モジュールをリンクし直す必要が
あるなどの問題点があった。
【0003】一方、リンキングを当該サブルーチンなど
が実行される直前まで遅らせる方法もある。これをダイ
ナミック・リンキングと呼ぶ。この実例は、例えば文献
E.Organick著“The Multics System”に紹介されてい
る。この方式はスタティック・リンキングの欠点が無い
かわりに、サブルーチンが最初に呼ばれた際にリンクさ
れるため、実行が遅くなるという問題点があった。従っ
て、ダイナミック・リンキングが可能なシステムにおい
ては、スタティック・リンキングもサポートし実行時間
が問題となるアプリケーションはスタティック・リンキ
ングを用いるというようにする場合が多かった。しか
し、スタティック・リンキングを使用した場合にはダイ
ナミック・リンキングの特徴が生かされず、スタティッ
ク・リンキングの欠点をそのまま持ってしまうという問
題があった。
【0004】
【発明が解決しようとする課題】以上述べたように、従
来のリンキング方法にはいずれも欠点があった。
【0005】本発明は、このような事情を考慮してなさ
れたものであり、その目的とするところは、実行速度が
速いとともに、大きなロード・モジュールやサブルーチ
ンの再リンクを防ぐことのできるリンキング方法を提供
することにある。
【0006】
【課題を解決するための手段】本発明に係るリンキング
方法は、モジュールと、このモジュールが参照するモジ
ュールとの関係を記憶するためのリンケージモジュール
を作成し、作成した前記モジュールを実行する前に、前
記モジュールが参照するモジュールの主記憶上の位置を
表す情報を前記リンケージモジュールに登録することを
特徴とするものである。このリンケージモジュールへの
登録はコマンドの入力により行う。言い換えると、本発
明は、モジュールを作成し、このモジュールが参照する
モジュールのアドレスに関する情報を前記モジュールに
関連づけて記憶するための領域を設け、作成した前記モ
ジュールを実行する前に、前記モジュールが参照するモ
ジュールのアドレスに関する情報を前記領域に登録する
ことを特徴とするものである。
【0007】
【作用】本発明によれば、モジュールを実行する際に参
照するモジュールのアドレスが簡単に見られるよう、実
行以前に、このアドレスに関する情報を予め設けられた
領域あるいはリンケージモジュールに登録しておくた
め、高速な実行が可能となるとともに、スタティック・
リンキングのようなモジュールの結合を行わないから、
実行モジュールがコンパクトにでき、サブルーチンの管
理も容易になる。
【0008】
【実施例】以下、図面に基づいて本発明の一実施例につ
いて説明する。
【0009】図1は本発明の一実施例に係るリンキング
方法が適用される計算機の構造を示す図、図2は本発明
の一実施例に係るリンキング方法の動作の流れ(図5制
御部24により制御される)を示すフロー図である。図1
中の4は"foo" という名前のモジュールであり、コンパ
イルされた(図2中S1)プログラムであるとする。こ
のプログラムが6の"bar" という名前のモジュールを参
照しているとする。このモジュールはサブルーチンのよ
うなプログラムであっても良いし、データであっても良
い。5の“foo.link”は"foo" をコンパイルした(S
1)ときに作成されるリンケージモジュールである。こ
こには、参照されるモジュールの名前(本実施例では"b
ar" と、モジュールの主記憶3上の絶対アドレスを格納
しているモジュールディスクリプタテーブル2中での前
記モジュールの番号(本実施例では"bar#"で示す)との
ペアを記憶する。以下に説明するリンキングの動作が完
了するまでは、モジュールの番号("bar#")はわからない
ので、モジュールの番号の代わりに、リンキングが未了
であるビットパターン(本実施例では"nolink"で示す)
を入れておくものとする(この様子を図3(a)に示
す)。モジュールの名前は必ずしも文字列自体である必
要はなく(文字列である場合を図4(a)に示す)、文
字列へのポインタであっても良い(この場合を図4
(b)に示す)。
【0010】ここで、リンキングの主要な作業は、リン
ケージモジュール5にモジュールの番号をセットするこ
とであると解釈される(このセットが完了した状態を図
3(b)に示す)。この番号のセットは、アドレス参照
の解決という意味を持つ。従来のダイナミック・リンキ
ングの動作は以下のようになる。コンパイルされたまま
の状態では、モジュールの番号は未知であるから、リン
ケージモジュール5にはリンキングの未了を示すビット
パターン"nolink"が入っている。そして、モジュール
4"foo" には"bar" を参照している部分に[bar] という
数値が入っており、リンケージモジュール5中のオフセ
ットを示している。その後"foo" が実行されると、“ba
r ”を参照している部分に行き着いたときに[bar] によ
ってリンケージモジュールの該当するアドレスを見るこ
とになるが、ここには"nolink"が見つかるから、このと
きはじめてリンカーを起動し、"nolink"の代わりに"bar
#"をセットすることになる。よって、"foo" の実行が開
始されてから終了するまでに途中でリンカーを動かすた
め時間がかかり、例えばリアルタイム処理を行うプログ
ラムを実行する場合等には支障が起きる。
【0011】以下に説明する本実施例のリンキング方法
は、このような欠点を解消するものである。まず、モジ
ュール"foo" 4とそのリンケージモジュール"foo.link"
5は、主記憶3上にあるものとする(図2S2)。そし
て、これらの主記憶3上の絶対アドレスを格納している
モジュールディスクリプタテーブル2中での位置を示す
番号"foo#","foo.link#" は、既知モジュールテーブル
8を見ればわかるようになっている(S3)。つまり、
既知モジュールテーブル8は、リンカーが注目するモジ
ュールが主記憶上に存在するか否かを検出するためのも
のであり、存在するならばそのモジュールの名前に対応
するモジュールの番号を記憶している。尚、モジュール
ディスクリプタテーブル2は、base, limit, attrib.と
いった項目を持ち、これらはそれぞれ各モジュールのア
ドレス、長さ、属性を表している。 "foo#"等は「モジ
ュールの番号」と読んでいるが、実際には、モジュー
ル"foo" に対応するモジュールディスクリプタのオフセ
ットを表している。
【0012】そして、モジュール"foo" を実行する前
に、コマンドによってリンケージモジュール5に参照さ
れるモジュール"bar" の番号をセットする(S4〜S
8)。詳しく説明すると、上記のコマンドは、例えば
“link foo(参照するモジュール)bar (参照されるモ
ジュール)…(以下複数の参照されるモジュールの名前
があっても良い)”というようなものである。これを入
力する(S4)と、リンカーは、まず既知モジュールテ
ーブル8に"bar" が存在するかどうかを見い行く(S
5)。存在しない場合には、補助記憶7中のファイルか
らモジュール"bar" を探し主記憶3に読み込み(図1中
--->(1) )(S6)、 "bar"の主記憶上のアドレスその
他をモジュールディスクリプタテーブル2中の"bar#"に
格納し(図1中--->(2) )、この"bar#"を名前"bar" と
対応づけて既知モジュールテーブル8に登録する(図1
中--->(2'))(以下S7)。このように既知モジュール
テーブルにいったん"bar" が登録されてしまえば、例え
ば"foo" 以外のモジュール"etc" が"bar" を参照すると
きには、S6、S7の動作をすることなく次に進むこと
ができる。次には、既知モジュールテーブルに登録され
たモジュールの番号"bar#"をリンケージモジュール"fo
o.link"中のオフセット[bar] の所に"nolink"の代わり
にセットする(図1中--->(3) )(S8)。以上でリン
キングの主要な作業であるアドレス参照の解決が完了す
る。
【0013】このようにリンキングされたモジュールを
実行する際には、まずモジュール"foo" の実行を指示す
る(S9)と、"foo#"で示される主記憶上のアドレスか
ら順次実行を行い、"bar" を呼び出す命令までくる
と、"foo.link#" で示される主記憶上のアドレスから存
在する"foo.link"の[bar] の所を参照して、"bar" が"b
ar#"で示される主記憶上のアドレスに存在することを知
り、"bar#"から順次実行する(S10)。よって、リンカ
ーを起動することなく実行にかかる時間を短くできるの
である。もちろん、スタティックリンキングのように大
きなモジュールを予め作ってしまうということもない。
以上説明した本実施例の機能ブロック図を図5に示して
おく。
【0014】さて、上記のように、コマンドによってリ
ンキングを行うためには、上のモジュールから参照され
る下のモジュールの名前を知っている必要かがある。そ
のためには、上のモジュールをコンパイルしたときに作
成されるリンケージモジュールの内容から、参照される
下のモジュールの名前を読み出せばよく、これは単純な
読み出しプログラムで実現できる。下のモジュールがわ
かれば、さらに下のモジュールを同じ手続きで知ること
ができる。
【0015】一度確立されたリンキングを解消したいこ
とがある。そのためには、リンキングの逆を行えばよ
く、“unlink foo(参照するモジュール) bar(参照さ
れるモジュール)…(以下複数の参照されるモジュール
の名前があっても良い)”というようなコマンドによっ
て、リンケージモジュールのbar 等に対応する部分を未
定義状態に戻せば良い。
【0016】さらに、同じ名前の別のモジュールを再リ
ンキングしたいときには次のようにすれば良い。以前
に、"link foo (参照するモジュール) dir-a/bar
(dir-aの下にある参照されるモジュール)…(以下複
数の参照されるモジュールの名前があっても良い)”と
して、"dir-a" の下の"bar" をリンキングしていたの
を、今"dir-b" の下の"bar" にリンキングし直したいと
する。このときには、単に、“link foo(参照するモジ
ュール) bar(dir-b の下にある参照されるモジュー
ル)…(以下複数の参照されるモジュールの名前があっ
ても良い)”とコマンドを出し直せば、"foo" と"dir-
b" の下の"bar" とのリンキングが行える。以前の"foo"
と"dir-a" の下の"dar" とのリンキングはもう不要で
あれば、上述したリンキングの逆を行って解消すれば良
い。また、以前にリンキングした"bar" なるモジュール
の内容を変更する(ソースプログラムを書き換えコンパ
イルし直す等)場合、リンケージモジュールには"nolin
k"と書かれ、既知モジュールテーブルには"bar" が存在
しない状態になっているから、やはりlinkコマンドを出
し直す必要がある。
【0017】尚、上述した実施例で用いた既知モジュー
ルテーブルは必ずしも必要ではない。即ち、図2中でS
5Noのルートをとり、"bar#"を既知モジュールテーブル
を通さず直接リンケージモジュールにセットするように
しても良い。
【0018】本実施例て述べたモジュールはハード的に
サポートされたセグメントであるのが最も好ましい。モ
ジュールディスクリプタテーブルはこれを意識したもの
である。しかし、例えば、セグメンテーションを用いず
に大きなアドレス空間が提供されているアーキテクチャ
にも、本発明は適用できる。この場合には、全てのモジ
ュールを絶対アドレスで管理することができる。具体的
には、図6に示すように、モジュールディスクリプタテ
ーブルを持たず、上記したモジュールの番号の代わりに
その絶対アドレスを、リンケージモジュールにセットす
ることになる。また、説明の簡単化のために、1つのモ
ジュール"foo" に対して"foo.link"は1つであるように
説明してきたが、プロセス毎に1つずつ用意する、ある
いは補助記憶からコピーしてくるのが一般的である。
【0019】また、図2S4でコマンドが入力されたと
き、このコマンドが既にリンキングしたいものがリンキ
ングされていることをオペレータが忘れていたことによ
るものであった場合等に対応するために、S5の前にリ
ンケージモジュールにコマンド中の2番目以降のモジュ
ールの番号が書かれているか否かを検出するステップを
設け、書かれている場合には「既に同じ名前のモジュー
ルがリンキングされています」「リンクを実行しますか
?」等のメッセージを出すようにしてもよい。
【0020】
【発明の効果】かくして本発明によれば、実行速度が速
く、ロード・モジュールの総量が大きくならず、サブル
ーチンなどのバージョン管理も容易になるがリンキング
が可能になる。
【図面の簡単な説明】
【図1】 本発明の一実施例に係るリンキング方法が適
用される計算機の構造を示す図。
【図2】 本発明の一実施例に係るリンキング方法の動
作を示すフローチャート。
【図3】 (a)は本実施例に係るリンケージ・モジュ
ールのリンキング前を示す図、(b)はリンキング後を
示す図。
【図4】 (a)は本実施例に係るリンケージ・モジュ
ールが、モジュールの名前を文字列として持つ場合を示
す図、(b)は文字列へのポインタとして持つ場合を示
す図。
【図5】 本発明の一実施例を機能ブロック図で表した
図。
【図6】 本発明の別の実施例に係る構造を示す図。
【符号の説明】
1…CPU 2,18…モジュール・ディスクリプタ・テーブル記憶
部 3,22…主記憶 4…メインモジュール 5…リンケージ・モジュール 6…サブルーチンモジュール 7,23…補助記憶 8,19…既知モジュール・テーブル記憶部 11…コマンド入力部 12…リンカー 13…ソースプログラム入力部 14…コンパイラ 15…実行指示部 16…実行部 17…モジュール読込部 20…モジュール記憶部 21…リンケージ・モジュール記憶部 24…制御部

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】 命令列を格納する第1のモジュールとこ
    の第1のモジュールが参照する第2のモジュールとを作
    成すると共に、前記第1のモジュールと前記第2のモジ
    ュールとの関係を記憶するためのリンケージモジュール
    を作成し、 作成した前記第1のモジュールと前記第2のモジュール
    と前記リンケージモジュールとを主記憶に読み込み、 前記第1のモジュールに格納された命令列を実行する前
    に、前記第2のモジュールの主記憶上の位置を表す情報
    を前記リンケージモジュールに登録することを特徴とす
    るリンキング方法。
  2. 【請求項2】 請求項1記載のリンキング方法におい
    て、 前記リンケージモジュールへの登録はコマンドの入力に
    より行うことを特徴とするリンキング方法。
  3. 【請求項3】 命令列を格納する第1のモジュールとこ
    の第1のモジュールが参照する第2のモジュールとを作
    成し、 この第2のモジュールのアドレスに関する情報を前記第
    1のモジュールに関連づけて記憶するための領域を主記
    憶上に設け、 作成した前記第1のモジュールに格納された命令列を実
    行する前に、前記第2のモジュールのアドレスに関する
    情報を検出して前記領域に登録することを特徴とするリ
    ンキング方法。
JP257392A 1992-01-10 1992-01-10 リンキング方法 Pending JPH05189212A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP257392A JPH05189212A (ja) 1992-01-10 1992-01-10 リンキング方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP257392A JPH05189212A (ja) 1992-01-10 1992-01-10 リンキング方法

Publications (1)

Publication Number Publication Date
JPH05189212A true JPH05189212A (ja) 1993-07-30

Family

ID=11533119

Family Applications (1)

Application Number Title Priority Date Filing Date
JP257392A Pending JPH05189212A (ja) 1992-01-10 1992-01-10 リンキング方法

Country Status (1)

Country Link
JP (1) JPH05189212A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010225099A (ja) * 2009-03-25 2010-10-07 Canon Inc 情報処理装置及びその制御方法、並びにプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010225099A (ja) * 2009-03-25 2010-10-07 Canon Inc 情報処理装置及びその制御方法、並びにプログラム

Similar Documents

Publication Publication Date Title
US20050144608A1 (en) Operating system allowing running of real-time application programs, control method therefor, and method of loading dynamic link libraries
JPH05189212A (ja) リンキング方法
JP3461185B2 (ja) ロードモジュールへのソースコード行番号登録方法および装置
KR900005306A (ko) 회복시간을 설정하기 위한 방법 및 컴퓨터 시스템
JP3130798B2 (ja) バス転送装置
JPH05297911A (ja) シーケンスコントローラ用シーケンス制御回路
JP2841363B2 (ja) 外部モジュール獲得方式
JP3428253B2 (ja) シーケンサ
JPH117399A (ja) オブジェクト指向プログラムにおけるデータ表示方式
JPH07141189A (ja) オーバレイリンク方式
JPH07129408A (ja) 言語処理プログラムの実行方式
JPS61148536A (ja) 情報処理システム
JPH05158701A (ja) ロードモジュールの高速ロード方式
JPH01211131A (ja) 共用データ領域参照方式
JPH0844570A (ja) プログラム実行システム及び方法
JPH01205331A (ja) 大規模プログラムリンク方式
JPH0553827A (ja) ダイナミツクリンク最適化方式
JPH05233305A (ja) プログラムロ−ドシステム
JPH06250881A (ja) シンボリックデバッグ方式
JPH0460721A (ja) オブジェクト指向言語処理方式
JPS62216037A (ja) ソ−スライブラリによるメツセ−ジ管理方式
JPS6144339B2 (ja)
JPH1165875A (ja) インサーキットエミュレータ
JPH04117523A (ja) プログラム編集装置
JPH03282625A (ja) データ処理装置