"情報処理装置の制御プログラムをオブジェクトプログラムとして格納する記憶装置と、該記憶装置から読み出した、情報処理装置の制御プログラムを記憶させるメインメモリと、該制御プログラムを前記メインメモリにローディングするための通信手段と、前記メインメモリ上に、オブジェクトプログラムに含まれる関数が呼び出されている回数を格納した、呼び出しカウントテーブルと、を有し、前記情報処理装置で実行されるプログラムの新しいバージョンを、前記記憶装置から読み出してバージョンアップする時に、前記呼び出しカウントテーブルの、オブジェクトプログラムに含まれる関数が呼び出されている回数が0であるときに、前記新しいバージョンのプログラムのバージョンアップ処理を開始するように制御する制御手段を備えたことを特徴とする情報処理装置。情報処理装置の制御プログラムをオブジェクトプログラムとして格納する記憶装置と、該記憶装置から読み出した、情報処理装置の制御プログラムを記憶させるメインメモリと、該制御プログラムを前記メインメモリにローディングするための通信手段と、前記メインメモリ上に、オブジェクトプログラムに含まれる関数が呼び出されている回数を格納した、呼び出しカウントテーブルと、を有し、前記情報処理装置で実行されるプログラムの新しいバージョンを、前記記憶装置から読み出してバージョンアップする時に、バージョンアップ中のオブジェクトファイルに含まれる関数が、ダウンロード済みの他のオブジェクトファイルに含まれる関数を呼び出している場合、呼び出されている関数の実体である実関数を直接呼び出すのではなく、実関数呼び出し前に、前記呼び出しカウントテーブルの呼び出し回数を加算し、実関数呼出し後に、前記呼び出し回数を減算する仮関数を呼び出すように制御することを特徴とする情報処理装置。情報処理装置の制御プログラムをオブジェクトプログラムとして格納する記憶装置と、該記憶装置から読み出した、情報処理装置の制御プログラムを記憶させるメインメモリと、該制御プログラムを前記メインメモリにローディングするための通信手段と、前記メインメモリ上に、オブジェクトプログラム内で定義されているグローバル変数の、変数名と、前記グローバル変数が割り付けられたメインメモリ上のアドレスを格納した変数アドレスと、前記グローバル変数のサイズを格納した変数サイズ、から構成される定義変数テーブルと、を有し、前記情報処理装置で実行されるプログラムの新しいバージョンを、前記記憶装置からダウンロードしてバージョンアップする時に、バージョンアップ前のオブジェクトファイルの前記定義変数テーブルを参照し、変数の値を、バージョンアップ後のオブジェクトファイルに複製することを特徴とする情報処理装置。前記特許文献1には、ダイナミックライブラリを実行時にバージョンアップする仕組みが記載されている。しかし、前記特許文献1のバージョンアップ方法では、バージョンアップ後に情報処理装置を再起動する必要がある。そのため、情報処理装置の再起動が望ましくないシステム、たとえば24時間稼動が要求されるシステムには適用することができない。また、再起動時間の長いシステムでは、ソフトウェア開発効率向上の観点から、なるべく再起動せずにプログラムをバージョンアップすることが望ましい。前記特許文献2には、複数のモジュールから構成されるソフトウェアにおいて、プロセッサのローカルメモリ内へモジュールをロードし、実行する仕組みが記載されている。しかし、前記特許文献2では、バージョンアップ前のモジュールによる処理結果が、バージョンアップ後のモジュールに引き継がれないため、処理の連続性が要求される場合には適用できない。そこで、本発明は、システムの再起動が不要で、且つバージョンアップの前後で処理の連続性を保ちながら、一般的には拡張子としてoが用いられるオブジェクトファイルを単位として、バージョンアップする方法を提供する。上記課題を解決するために、例えば特許請求の範囲に記載の構成を採用する。本発明は上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、オブジェクトファイル内で定義されている関数が呼び出されている回数を格納した、呼び出しカウントテーブルを有し、呼び出しカウントが0でない場合は、0になるまで待ってからリンク処理を開始することを特徴とする。本発明によれば、相互に依存する複数のオブジェクトファイルから構成されるアプリケーションプログラムを、再起動することなく、且つ処理の連続性を保ちながら、オブジェクトファイルを単位として、バージョンアップできる方法を提供することができる。以下、本発明の実施例を図面を用いて説明する。本実施例では、血液の生化学分析を行う自動分析装置の例を説明するが、本発明はこれ以外のアプリケーションにも適用可能であることは言うまでもない。図1は、本実施例の生化学自動分析装置の構成図の例である。生化学自動分析装置は、装置を操作するための操作端末100と、検体に試薬を注入し分析結果を得る装置本体110から構成されている。操作端末と装置本体は所定のプロトコールで規定された通信ネットワーク例えばイーサネット登録商標など120で接続されており、操作端末から装置本体への操作者の指示の伝達と、装置本体から操作端末への分析結果の報告が、イーサネットを経由して行われる。装置本体には、情報処理装置130が組み込まれている。情報処理装置は、CPU140,不揮発性メモリ150,メインメモリ160,通信I/F170,モータコントローラ180,A/D変換器190から構成されている。不揮発性メモリにはオペレーティングシステムが格納されている。オペレーティングシステムは、装置本体の電源投入によりメインメモリに転送され、メインメモリ上で実行を開始する。オペレーティングシステムは、自身の起動処理が完了すると、操作端末に格納されている制御プログラム195を通信I/Fからメインメモリ上にダウンロードし、制御プログラムを実行する。この制御プログラムによって、試薬の注入等を行うための、ノズル制御用のモータコントローラの制御や、試薬反応結果を情報処理装置に取り込むためのA/D変換器の制御を行う。オペレーティングシステムが制御プログラムをダウンロードし実行する時の動作について説明する。制御プログラムは、複数のオブジェクトプログラムの形で操作端末に格納されている。オブジェクトプログラムとは、制御プログラムのソースプログラムをコンパイルしたものである。オブジェクトプログラムは、メインメモリ上の実行アドレスに関連付けられていないため、オブジェクトプログラムをメインメモリにダウンロードしただけでは、実行することはできない。ダウンロードしたオブジェクトプログラムを実行可能な状態にするには、リンクと呼ばれる処理が必要である。リンク処理とは、制御プログラムをメインメモリ上にダウンロードした後、オブジェクトプログラムに含まれる関数の実行アドレスを決定し、決定したアドレスを使用するようにダウンロードしたオブジェクトプログラムの一部を書き換える処理である。グローバル変数についても同様な処理を行う。メインメモリにダウンロードされたオブジェクトプログラムは、オペレーティングシステムによってリンク処理を施されることで、初めて実行可能な状態となる。オブジェクトプログラムが、本発明によるバージョンアップの単位となる。オペレーティングシステムは、オブジェクトプログラムのリンク処理において、本発明によるリンク情報テーブルと、本発明による呼び出しカウントテーブルを作成する。これらのテーブルは、ダウンロードしたオブジェクトプログラム毎に作成されるものである。以下、リンク情報テーブルと、呼び出しカウントテーブルの詳細について説明する。まず、リンク情報テーブルを説明する。リンク情報テーブルは、バージョンアップされた新しいオブジェクトファイルを呼び出すように他のオブジェクトファイルを修正する目的と、バージョンアップの前後でオブジェクトファイルのグローバル変数に連続性を持たせる目的で使用する。図2にリンク情報テーブルを示す。リンク情報テーブル200は、オブジェクトファイル名称210,定義関数テーブル220,定義変数テーブル230,参照関数テーブル240から構成される。オブジェクトファイル名称は、このリンク情報テーブルに対応するオブジェクトファイル名称を表す。オブジェクトファイル名称は、オブジェクトファイルをバージョンアップするときに、旧オブジェクトファイルに対応するリンク情報テーブルを検索するために使用する。図3に定義関数テーブルを示す。定義関数テーブルは、1つのレコードが、定義関数名300と、実関数アドレスと310,仮関数アドレス320から構成される。定義関数名は、オブジェクトファイル内で定義されている関数で、なお且つ他のオブジェクトファイルから呼び出される可能性のある関数の名称を表す。実関数アドレスは、定義関数名で示される関数の、メインメモリ上での先頭アドレスを現す。仮関数アドレスは、定義関数名で示される関数に対応する、仮関数のメインメモリ上での先頭アドレスを現す。定義関数テーブルのレコードは、オブジェクトファイル内で定義されている関数で、なお且つ他のオブジェクトファイルから呼び出される可能性のあるすべての関数の数だけ存在する。なお、仮関数については後述する。図4に定義変数テーブルを示す。定義変数テーブルは、1つのレコードが、定義変数名400と、変数アドレス410と、変数サイズ420から構成される。定義変数名は、オブジェクトファイル内で定義されているグローバル変数の名称を表す。変数アドレスは、定義変数名で示される変数の、メインメモリ上での先頭アドレスを表す。変数サイズは、定義変数名で示される変数の、メインメモリ上でのサイズを表す。定義変数テーブルのレコードは、オブジェクトファイル内で定義されているすべてのグローバル変数の数だけ存在する。図5に参照関数テーブルを示す。参照関数テーブルは、1つのレコードが、参照関数名500と、オフセット510から構成される。参照関数名は、このオブジェクトファイル内で参照している関数で、他のオブジェクトファイルで定義されている関数の名称を表す。オフセットは、参照関数名で示される関数を、このオブジェクトファイル内で参照している箇所を、このオブジェクトファイルの先頭アドレスからのオフセットで現した数値である。参照関数テーブルのレコードは、オブジェクトファイル内で参照しているすべての参照箇所について存在する。次に、呼び出しカウントテーブルについて説明する。呼び出しカウントテーブルは、バージョンアップ対象のオブジェクトファイル内で定義されているいずれの関数も、他のオブジェクトファイルから呼び出されていないときにバージョンアップするタイミングを判定する目的で使用する。図6に呼び出しカウントテーブルを示す。呼び出しカウントテーブルは、オブジェクトファイル名称610と、呼び出しカウント620から構成される。オブジェクトファイル名称は、この呼び出しカウントテーブルに対応するオブジェクトファイル名称を表す。オブジェクトファイル名称は、このオブジェクトファイルをバージョンアップするときに、旧オブジェクトファイルに対応する呼び出しカウントテーブルを検索するために使用する。呼び出しカウントは、このオブジェクトファイルに含まれる関数が呼び出されている回数を表す数値である。すなわち、呼び出しカウントが0なら、このオブジェクトファイルに含まれるいずれの関数も呼び出されていないことになる。ここで、仮関数について説明する。仮関数は、呼び出しカウントの加算操作,減算操作を行う関数である。図7に仮関数のフローチャートを示す。仮関数は、まず、自身に対応する定義関数が定義されているオブジェクトファイルの、呼び出しカウントテーブルに含まれる、呼び出しカウントに1を加算するステップ720。次に、自身に対応する定義関数の実関数アドレスを呼び出すステップ730。次に、実関数呼び出しからリターンしてきたら、呼び出しカウントから1を減算するステップ740。このような仮関数を作成し、ある関数を呼び出すときに、直接その関数の実関数アドレスを呼び出すのではなく、仮関数アドレスを呼び出すことで、呼び出しカウントを実現する。図8に、以上説明した、リンク情報テーブルと、呼び出しカウントテーブルを使用して、オブジェクトファイルをダウンロードするフローチャートを示す。以下、フローチャートの各ステップを説明する。まず、オブジェクトファイルを操作端末からダウンロードしてメインメモリに転送するステップ810。次に、このオブジェクトファイルに対応する呼び出しカウントテーブルを検索するステップ820。もし呼び出しカウントテーブルが見つかれば、このダウンロードはバージョンアップであることがわかる。バージョンアップの場合は、呼び出しカウントが0になるまでウェイトし、リンク処理を行うステップ830,850,860。このステップは、実行中のオブジェクトファイルを誤ってバージョンアップしないようにするための、重要なステップである。もし呼び出しカウントテーブルが見つからなければ、このダウンロードは新規のダウンロードであることがわかるため、直ちにリンク処理を行うステップ840,860。図9に、リンク処理の詳細フローチャートを示す。以下、フローチャートの各ステップを説明する。まず、参照関数テーブルを作成するステップ910。参照関数テーブル作成処理は、オブジェクトプログラムに含まれる情報から容易に作成可能であり、本発明の本質ではないため、説明を省略する。次に、作成した参照関数テーブルに基づいて、参照関数の解決を行うステップ920。参照関数の解決処理では、リンク中のオブジェクトファイルを除く、すべてのリンク済みオブジェクトファイルのリンク情報テーブルに含まれる定義関数テーブルの中から、参照関数名と同一の定義関数名を持つレコードを検索する。そして、そのレコードに含まれる仮関数アドレスを、リンク中のオブジェクトファイルの先頭アドレスに、参照関数テーブルに含まれるオフセットを加算した値で示されるアドレスに書き込む。この処理によって、リンク中のオブジェクトファイルに含まれる関数が他のオブジェクトファイルに含まれる関数を実際に呼び出すときに、呼び出されようとしている関数に対応した仮関数を呼び出すことができるようになる。図10を用いて参照解決処理の例を説明する。図10では、オブジェクトファイルAがすでにダウンロード済みのオブジェクトファイル,オブジェクトファイルC′がリンク中のオブジェクトファイルである。簡単のため、オブジェクトファイルAの先頭アドレスと、オブジェクトファイルAで定義されている関数FUNCAの先頭アドレスが等しく、オブジェクトファイルC′の先頭アドレスと、オブジェクトファイルC′で定義されている関数FUNCCの先頭アドレスが等しいと仮定している。オブジェクトファイルCの参照関数テーブルを見ると、オフセット10において、FUNCAを参照していることがわかる。FUNCAは、オブジェクトファイルAの定義関数テーブルから、仮関数アドレスが1100であることがわかる。そこで、オブジェクトファイルC′の先頭アドレス4000に、オフセット10を加算した値、すなわち4010番地に、値1100を書き込む。このようにすることで、アドレス4010番地において、FUNCAを呼び出すときに、FUNCAの仮関数を呼び出すようにすることができる。図9に戻る。参照解決処理の次に、定義関数テーブルを作成するステップ930。定義関数テーブルに含まれる、定義関数名と実関数アドレスについては、オブジェクトプログラムに含まれる情報から容易に作成が可能であり、本発明の本質ではないため、説明を省略する。仮関数アドレスについては、図7に示したフローチャートのような処理を行う仮関数をメインメモリ上に作成し、作成した仮関数の先頭アドレスを、仮関数アドレスとして定義関数テーブルに設定する。次に、定義変数テーブルを作成するステップ940。定義変数テーブル作成処理は、オブジェクトプログラムに含まれる情報から容易に作成可能であり、本発明の本質ではないため、説明を省略する。ダウンロードモードがバージョンアップモードの場合は、次に他オブジェクトファイルからの参照更新処理を行うステップ960。このステップは、オブジェクトファイルがバージョンアップされたことを、このオブジェクトファイルを参照する他のオブジェクトファイルに通知するための、重要なステップである。参照更新処理では、すべてのリンク済みオブジェクトファイルについて、リンク中のオブジェクトファイルの定義関数テーブルに含まれる定義関数名と同一の名称を持つ、参照関数テーブルのレコードを検索する。そして、リンク済みオブジェクトファイルの先頭アドレスにオフセットを加算した値で示されるアドレスに、定義関数テーブルに含まれる仮関数アドレスを書き込む。図11を用いて参照更新処理の例を説明する。図11では、オブジェクトファイルB,オブジェクトファイルCがすでにリンク終了している。オブジェクトファイルBを見ると、オブジェクトファイルBのオフセット10において、FUNCCを参照していることがわかる。このような状態で、オブジェクトファイルCをオブジェクトファイルC′にバージョンアップする。オブジェクトファイルC′の定義関数テーブルを見ると、FUNCCが定義されており、FUNCCの仮関数アドレスが4100であることがわかる。そのため、オブジェクトファイルBの先頭アドレス2000にオフセット10を加算したアドレス、すなわち2010番地に、FUNCCの仮関数アドレス4100を書き込む。このようにすることで、2010番地においてFUNCCを呼び出すときに、バージョンアップ後の新しいFUNCCを呼び出すことができるようになる。図9に戻る。ダウンロードモードがバージョンアップモードの場合は、さらに次に定義変数値複製処理を行うステップ970。このステップは、処理の連続性を保ちながらオブジェクトファイルをバージョンアップするための、重要なステップである。定義変数値複製処理では、バージョンアップ前のオブジェクトファイルの定義変数テーブルで示される、変数アドレスから変数サイズ分のメモリデータを、バージョンアップ後のオブジェクトファイルの定義変数テーブルで示される、変数アドレスに変数サイズ分複製する。このステップにより、グローバル変数の値をバージョンアップ後のオブジェクトファイルに引き継ぐことができる。図12を用いて定義変数値複製処理の例を説明する。図12では、リンク済みのオブジェクトファイルCを、オブジェクトファイルC′にバージョンアップするときの定義変数地複製処理の様子を表している。オブジェクトファイルCの定義変数テーブルを見ると、VARCなる変数がアドレス1000からの4バイトに割り付けられており、VARCの値が、現在1234であることがわかる。オブジェクトファイルC′にバージョンアップするとき、同名の変数VARCがアドレス2000から割り付けられているため、1000番地からの4バイトを、2000番地からの4バイトにコピーする。このようにすることで、新しいバージョンのオブジェクトファイルを、VARCの値が1234の状態から開始できるようになる。"