JP5845788B2 - 実行制御プログラム、実行制御装置および実行制御方法 - Google Patents

実行制御プログラム、実行制御装置および実行制御方法 Download PDF

Info

Publication number
JP5845788B2
JP5845788B2 JP2011218560A JP2011218560A JP5845788B2 JP 5845788 B2 JP5845788 B2 JP 5845788B2 JP 2011218560 A JP2011218560 A JP 2011218560A JP 2011218560 A JP2011218560 A JP 2011218560A JP 5845788 B2 JP5845788 B2 JP 5845788B2
Authority
JP
Japan
Prior art keywords
program
instruction
return
unit
execution
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.)
Active
Application number
JP2011218560A
Other languages
English (en)
Other versions
JP2013080281A (ja
Inventor
謙二 大田
謙二 大田
勉 榎田
勉 榎田
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2011218560A priority Critical patent/JP5845788B2/ja
Priority to US13/590,232 priority patent/US8839191B2/en
Publication of JP2013080281A publication Critical patent/JP2013080281A/ja
Application granted granted Critical
Publication of JP5845788B2 publication Critical patent/JP5845788B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、実行制御プログラム、コンパイラ、実行制御装置および実行制御方法に関する。
近年、システム規模の大規模化や顧客ニーズの複雑化などのシステム要求に対応するために、プログラム内で他のプログラムを呼び出して実行し、複数のプログラムを連携して実行させる大規模プログラムが利用されている。例えば、プログラムを連携させる例を挙げると、プログラムAが実行されると、プログラムA内でプログラムBが呼び出されて実行され、プログラムBが実行されると、プログラムB内でプログラムCが呼び出されて実行される大規模プログラムなどがある。
このような大規模プログラムでエラーが発生した場合に、呼び出された側の下位プログラム内に、呼び出し元の上位プログラムへの分岐を記述しておくことで、下位プログラムから上位プログラムへ復帰させる方法が知られている。例えば、COBOLであれば、GOTO文を用いてプログラム内へ復帰させ、C言語であれば、setjmp関数やlongjmp関数などで上位プログラムへ復帰させる方法が用いられる。
この方法の場合、復帰して再実行させる前に、実行済みプログラムで使用されたデータやファイルなどのリソースを初期化することが、管理者やオペレータ等によって行われる。これは、メモリリークやファイルの2重オープンエラーなどを防止するためである。
また、複数の下位プログラムを呼び出すプログラムを多く含む大規模プログラムでは、エラーが発生したプログラムの上位プログラムだけを再実行しても、処理が正常に終了しない場合もある。このような場合には、大規模プログラム全体を終了させて、大規模プログラムを最初から再実行することも行われている。
特開平02−079125号公報 特開昭59−135551号公報 特開平06−168124号公報
しかしながら、従来技術では、エラーが発生したプログラムを再実行させるまでに時間がかかるという問題がある。
例えば、上位プログラムへ復帰させる方法では、エラーが発生したプログラムを再実行する前に、リソースを初期化する別プログラムを管理者等が作成して実行することになる。プログラムが連携して実行される場合には、データの更新履歴を特定するとともに、ファイルがどのタイミングでオープンされたかを特定した上で、リソース初期化用のプログラムを生成して実行することになる。したがって、エラーが発生したプログラムを再実行する前準備に時間がかかる。
また、最初から再実行する方法では、近年の複雑な大規模プログラム全体を正常に終了させるのに時間がかかるので、再実行までに多くの時間がかかる。また、大規模プログラム全体が正常に終了しなかった場合には、当該大規模プログラム自体を再実行できなくなる危険性もある。
1つの側面として、エラーが発生したプログラムを再実行させるまでにかかる時間を抑制することを目的とする。
第1の案では、コンピュータに、第1のプログラムから呼び出される関係にある第2のプログラムを受付ける処理を実行させる。コンピュータに、受付けた前記第2のプログラムを、前記第2のプログラムの実行に伴って使用されるリソースを初期化する初期化命令含むプログラムに変換する処理を実行させる。コンピュータに、前記第1のプログラムに戻る復帰命令とをエラーが発生した場合に実行する命令とを含むプログラムに変換する処理を実行させる。
エラーが発生したプログラムを再実行させるまでにかかる時間を抑制することができる。
図1は、実施例1にかかるコンパイラと実行制御装置とを示す図である。 図2は、実施例2に係る情報処理装置の構成を示す機能ブロック図である。 図3は、リソーステーブルが記憶する情報の例を示す図である。 図4は、分岐箇所登録部が登録するスタック環境値の例を示す図である。 図5は、実行対象のプログラム例を示す図である。 図6は、コンパイル後のオブジェクトコード例を示す図である。 図7は、プログラムの実行例を示す図である。 図8は、コンパイル実行時の処理の流れを示すフローチャートである。 図9は、プログラム実行時の処理の流れを示すフローチャートである。 図10は、エラー処理の流れを示すフローチャートである。 図11は、実施例3に係る実行対象のプログラム例を示す図である。 図12は、実施例3に係るコンパイル後のオブジェクトコード例を示す図である。 図13は、実行制御プログラムを実行するコンピュータのハードウェア構成例を示す図である。
以下に、本願の開示する実行制御プログラム、コンパイラ、実行制御装置および実行制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
図1は、実施例1に係るコンパイラと実行制御装置とを示す図である。ここでは、コンパイラと実行制御装置とを別々の装置である場合を図示したが、これに限定されるものではなく、1つの筐体で実現することもできる。
図1に示すように、コンパイラ1は、受付部1aと変換部1bとを有し、入力されたプログラムをコンパイルする装置である。受付部1aは、第1のプログラムから呼び出される関係にある第2のプログラムを受付け処理部である。変換部1bは、受付けた第2のプログラムを、第2のプログラムの実行に伴って使用されるリソースを初期化する初期化命令と、第1のプログラムに戻る復帰命令とをエラーが発生した場合に実行する命令とを含むプログラムに変換する処理部である。ここで初期化命令とは、当該プログラムの実行に伴って使用されたリソースを初期化する命令である。復帰命令とは、当該プログラムを呼び出した呼出元のプログラムに戻る命令である。
実行制御装置2は、実行制御部2aとエラー処理部2bとを有し、コンパイルされたプログラムを実行する装置である。実行制御部2aは、コンパイラ1によって上記命令が追記されたプログラムと所定の関数群とを連携させた実行ファイルを実行する処理部である。エラー処理部2bは、エラーが発生した場合に、エラーを発生させた実行ファイル内のプログラムに記述される初期化命令に基づいてリソースを初期化し、該プログラムに記述される復帰命令に基づいて呼出元のプログラムに戻る処理部である。
このように、実施例1に係るコンパイラ1は、コンパイル時に、リソースの初期化命令と復帰命令とをプログラム内に追記する。実行制御装置2は、エラーが発生したプログラムから、リソースを初期化しつつ呼出元のプログラムに戻ることができる。したがって、エラーが発生したプログラムを再実行する前準備を短縮できる。また、プログラム全体を停止させなくても、プログラムを再実行することができる。この結果、エラーが発生したプログラムを再実行させるまでにかかる時間を短縮することができる。
次に、実施例2では、コンパイラと実行制御装置とを1つの筐体で実現する例を説明する。ここでは、コンパイラの処理部と実行制御装置の処理部とを有する情報処理装置の機能ブロック図、処理の具体例、処理の流れ等を説明する。
(情報処理装置の構成)
図2は、実施例2に係る情報処理装置の構成を示す機能ブロック図である。図2に示すように、実施例2に係る情報処理装置10は、入出力インタフェース部11とHDD(ハードディスクドライブ)12とメモリ13とプロセッサ14とを有するコンピュータである。なお、情報処理装置10は、図2に示した処理部以外の処理部を有してもよい。例えば、情報処理装置10は、マウスなどの入力部、ディスプレイなどの表示部、ハードディスクなどの記憶装置等を有していてもよい。
入出力インタフェース部11は、COBOLプログラムの入力を受け付ける処理部である。例えば、入出力インタフェース部11は、ネットワークカードなどを有し、ネットワークを介してCOBOLプログラムを受け付ける。また、入出力インタフェース部11は、記憶媒体読取装置を有し、入力された記憶媒体からCOBOLプログラムを読み取る。
HDD12は、ソースコード12aとオブジェクトコード12bとを記憶する記憶装置である。オブジェクトコード12bは、情報処理装置10が実行するオブジェクトコードであり、コンパイル部15によって格納される。
メモリ13は、プロセッサが実行するプログラムを記憶するとともに、実行ファイル13aとスタック環境値13bとを記憶する記憶装置である。また、メモリ13は、リソーステーブル13cと作業領域13dとを有する。なお、作業領域13dは、プロセッサ14、コンパイル部15、生成部16、実行制御部17等が処理を実行する際に使用する一時領域である。
実行ファイル13aは、オブジェクトコード12bとランタイムシステム18に記憶される該当ランタイム等とを連携させた実行可能な形式のロードモジュール、すなわちCOBOLアプリケーションであり、生成部16によって格納される。スタック環境値13bは、ランタイムシステム18がオブジェクトコード内に登録したレジスタの値などであり、分岐箇所登録部18aによって格納される。
リソーステーブル13cは、COBOLプログラムの各オブジェクトコード、すなわち各ロードモジュールが使用したリソースを記憶するテーブルである。図3は、リソーステーブルが記憶する情報の例を示す図である。図3に示すように、リソーステーブル13cは、ランタイム管理域にファイル管理情報とデータ域管理情報とを対応付けて記憶する。ランタイム管理域は、ランタイムシステム18が管理する領域を示し、当該領域内でファイル管理情報とデータ域情報を管理する。
ファイル管理情報は、「ファイル名、プログラム名」を対応付けて記憶する。ここで記憶される「ファイル名」は、プログラムが使用したファイルの名称であり、「プログラム名」は、ファイルを使用したプログラム名である。図3の場合、プログラム「PGMA」がファイル「A.TXT」を使用したことを示す。データ域管理情報は、「データ域アドレス、プログラム名」を対応付けて記憶する。ここで記憶される「データ域アドレス」は、プログラムが使用したデータのアドレスであり、「プログラム名」は、データを使用したプログラムの名称である。図3の場合、プログラム「PGMA」が、アドレス「0xaaaaaaa」に記憶されるデータを使用したことを示す。
図2に戻り、プロセッサ14は、OS(Operating System)などを実行し、情報処理装置10全体の処理を司る処理部であり、コンパイル部15と生成部16と実行制御部17とを有する。
コンパイル部15は、入力部15aと変換部15bとを有し、COBOLプログラムのコンパイルを実行する処理部である。入力部15aは、入出力インタフェース部11によって受け付けられたCOBOLプログラムを変換部15bに渡す。
変換部15bは、入力したプログラムを、エラーが発生した場合に実行する命令として初期化命令と復帰命令とを追加したオブジェクトコードに変換する処理部である。例えば、変換部15bは、入力部15aから渡されたソースコード12aを読み込む。そして、変換部15bは、プログラムをオブジェクトコードに変換する際に、エラー時にランタイムシステム18に実行させる命令として、リソースの初期化命令と復帰命令とを追記して、HDD12に格納する。
生成部16は、オブジェクトコードを連結させて、情報処理装置10が実行可能な形式である実行ファイルを生成する処理部である。例えば、生成部16は、HDD12に記憶されるオブジェクトコード12bを読み出して連結させて実行可能な形式に変換する。また、生成部16は、連結させた各オブジェクトコードに対して、オブジェクトコードの実行に使用する関数をランタイムシステム18が管理する関数群から特定する。そして、生成部16は、各オブジェクトコードについて、オブジェクトコードと関数とを連携させたロードモジュールを生成する。その後、生成部16は、各オブジェクトコードから生成された各ロードモジュールを実行ファイル13aとしてHDD等12に格納する。
生成部16は、コンパイル部15からコンパイルが終了したことを通知された場合に、実行ファイルを生成してもよく、オペレータ等から指示された任意のタイミングで生成してもよい。
実行制御部17は、実行部17aとランタイムシステム18とを有し、これらによって生成部16が生成した実行ファイルを実行する制御部である。実行部17aは、HDD12に格納される実行ファイルを読み出してメモリ13に展開する。すなわち、実行部17aは、COBOLプログラムを実行する。なお、実行部17aがCOBOLプログラムを実行するタイミングと、コンパイル部15がコンパイルを実行するタイミングとは、連続していなくてもよい。
ランタイムシステム18は、COBOLプログラムを実行する際に使用されるソフトウェアモジュールなどの関数群を有する。このランタイムシステム18は、分岐箇所登録部18aとリソース管理部18bと分岐処理部18cとリソース初期化部18dと復帰判定部18eとを有する。なお、この各処理部は、ランタイムシステム18が有する関数として実現することもできる。
分岐箇所登録部18aは、最終的な復帰先となるCOBOLプログラム内の、スタック環境値を登録する処理部である。例えば、分岐箇所登録部18aは、実行部17aによって実行された実行ファイルのうち、SET PROCが記述されているロードモジュールから呼び出される。すると、分岐箇所登録部18aは、呼び出したロードモジュールが実行されるときのレジスタ値や戻りアドレス等を抽出して、スタック環境値13bに格納する。スタック環境値の格納が終了すると、分岐箇所登録部18aを読み出したロードモジュールに制御を戻す。
図4は、分岐箇所登録部18aが登録するスタック環境値の例を示す図である。図4に示すように、分岐箇所登録部は、「レジスタの値(ebp、esp、esi、ebx)、戻りアドレス」を対応付けて登録する。ここで登録される「レジスタの値」は、ロードモジュール内の「SET PROC」が呼び出されたときのレジスタの値である。「戻りアドレス」は、「SET PROC」を呼び出した次の命令に復帰するためのアドレスである。
リソース管理部18bは、COBOLプログラムの実行に伴って使用されたリソースを管理する処理部である。例えば、リソース管理部18bは、実行ファイルが実行された場合に、当該実行ファイルが有する各ロードモジュールが使用したリソースを監視する。そして、リソース管理部18bは、リソースが使用されると、使用されたリソースの情報をリソーステーブル13cに格納する。
一例を挙げると、リソース管理部18bは、実行ファイル内のロードモジュールであるPGMAAがファイル「AAA.TXT」を使用した場合には、「AAA.TXT、PGMAA」をリソーステーブル13cのファイル管理情報に格納する。また、リソース管理部18bは、実行ファイル内のロードモジュールであるPGMBAがアドレス「BB」のデータを更新した場合には、「BB、PGMBA」をリソーステーブル13cのデータ域管理情報に格納する。
分岐処理部18cは、実行ファイルの実行中にエラーを検出した場合に、リソースの初期化や呼出元への復帰を開始する処理部である。例えば、分岐処理部18cは、エラーが発生したロードモジュールのスタック環境値を作業領域13dに退避させる。そして、分岐処理部18cは、リソース初期化部18dに制御を依頼する。
リソース初期化部18dは、プログラム内に記述されたリソース初期化命令に基づいてリソースの初期化を実行する処理部である。例えば、リソース初期化部18dは、リソーステーブル13cを参照し、ロードモジュールによってオープンされたファイルを特定し、特定したファイルをクローズする。また、リソース初期化部18dは、リソーステーブル13cを参照し、ロードモジュールによって更新されたデータを特定し、作業領域13d等を参照して当該データを更新前のデータに戻す。
復帰判定部18eは、プログラム内に記述された復帰命令に基づいて呼出元のプログラムに復帰する処理部である。例えば、復帰判定部18eは、ロードモジュール内に復帰命令が記述されている場合には、実行ファイル13a等に基づいて、復帰先のロードモジュールを特定する。そして、復帰判定部18eは、特定した復帰先のロードモジュールに対する制御に移行し、分岐処理部18cやリソース初期化部18dに制御を依頼する。
[具体例]
次に、図5から図7を用いて具体例を説明する。図5は、実行対象のプログラム例を示す図であり、図6は、コンパイル後のオブジェクトコード例を示す図であり、図7は、プログラムの実行例を示す図である。ここでは、最上位プログラムAがサブプログラムBを呼び出し、サブプログラムBがさらにサブプログラムCを呼び出すCOBOLアプリケーションを例にして説明する。
図5に示すように、情報処理装置10の入力部15aは、プログラムAとプログラムBとプログラムCとを有するCOBOLアプリケーションを受け付けて、変換部15bに渡す。図5に示すように、プログラムAには、「CALL “SET_PROC”」と「CALL “B”」とが記述される。「CALL “SET_PROC”」は、分岐箇所登録部18aを呼び出す命令であり、最終的な戻り先を示す情報である。「CALL “B”」は、プログラムBを呼び出す命令である。
また、プログラムBには、「CALL “C”」が記述される。「CALL “C”」は、プログラムCを呼び出す命令である。プログラムCには、「CALL “JUMP_PROC”」が記述される。「CALL “JUMP_PROC”」は、分岐処理部18cを呼び出す命令であり、最終的な戻り先への復帰を開始することを示す情報である。
続いて、情報処理装置10の変換部15bは、入力部15aから渡されたソースコード12aをオブジェクトコード12bに変換して、HDD12に格納する。例えば、変換部15bは、図5に示したプログラムA、プログラムB、プログラムC各々を、図6に示したオブジェクトA、オブジェクトB、オブジェクトC各々に変換する。
具体的に説明すると、変換部15bは、プログラムAの「CALL “SET_PROC”」を「“SET_PROC”を呼び出す命令」に変換し、「CALL “B”」を「プログラム“B”を呼び出す命令」に変換する。また、変換部15bは、プログラムAを変換したオブジェクトAに、「リソースの初期化命令」と「復帰命令」とを追記する。
同様に、変換部15bは、プログラムBの「CALL “C”」を「プログラム“C”を呼び出す命令」に変換する。また、変換部15bは、プログラムBを変換したオブジェクトBに、「リソースの初期化命令」と「復帰命令」とを追記する。同様に、変換部15bは、プログラムCの「CALL “JUMP_PROC”」を「“JUMP_PROC”を呼び出す命令」に変換する。また、変換部15bは、プログラムCを変換したオブジェクトCに、「リソースの初期化命令」と「復帰命令」とを追記する。
その後、生成部16は、変換部15bによって生成されたオブジェクトコードを連結させ、各オブジェクトコードとランタイムの関数とを連携させたロードモジュールを生成して、実行ファイル13aとしてHDD12に格納する。そして、実行部17aは、HDD12から実行ファイルを読み出してメモリ13に展開する。
すると、図7に示すように、ロードモジュールAは、分岐する箇所を登録するために、分岐箇所登録部18aを呼び出す。分岐箇所登録部18aは、現在のスタック環境をスタック環境値13bに保存する。その後、ロードモジュールAは、プログラムBを呼び出す。なお、リソース管理部18bは、ロードモジュールAが使用したリソース情報を管理する。
続いて、ロードモジュールAによって呼び出されたロードモジュールBは、プログラムCを呼び出し、ロードモジュールCが実行される。なお、リソース管理部18bは、ロードモジュールBが使用したリソース情報を管理する。
このロードモジュールCが実行されているタイミングでエラーが発生したとする。すると、ロードモジュールCは、ロードモジュールAに登録した箇所に分岐するために、スタック環境保存域を引数として、分岐処理部18cを呼び出す。
続いて、分岐処理部18cは、引数として渡されたロードモジュールCのスタック環境値を作業領域13dに退避させる。そして、リソース初期化部18dは、ロードモジュールC内の「リソースの初期化命令」を実行し、リソーステーブル13cを参照してロードモジュールC言い換えるとプログラムCが使用したリソースを初期化する。続いて、復帰判定部18eは、分岐処理部18cによって退避されたスタック環境値と、分岐箇所登録部18aによって登録されたスタック環境値とを比較し、一致しないので、「復帰命令」にしたがって呼出元のロードモジュールBに復帰する。
続いて、ロードモジュールBは、ロードモジュールAに登録した箇所に分岐するために、スタック環境保存域を引数として、分岐処理部18cを呼び出す。分岐処理部18cは、引数として渡されたロードモジュールBのスタック環境値を作業領域13dに退避させる。そして、リソース初期化部18dは、ロードモジュールB内の「リソースの初期化命令」を実行し、リソーステーブル13cを参照してロードモジュールB言い換えるとプログラムBが使用したリソースを初期化する。続いて、復帰判定部18eは、分岐処理部18cによって退避されたスタック環境値と、分岐箇所登録部18aによって登録されたスタック環境値とを比較し、一致しないので、「復帰命令」にしたがって呼出元のロードモジュールAに復帰する。
続いて、ロードモジュールAは、スタック環境保存域を引数として、分岐処理部18cを呼び出す。分岐処理部18cは、引数として渡されたロードモジュールAのスタック環境値を作業領域13dに退避させる。そして、リソース初期化部18dは、ロードモジュールA内の「リソースの初期化命令」を実行し、リソーステーブル13cを参照してロードモジュールA言い換えるとプログラムAが使用したリソースを初期化する。続いて、復帰判定部18eは、分岐処理部18cによって退避されたスタック環境値と、分岐箇所登録部18aによって登録されたスタック環境値とを比較し、一致すると判定する。このため、復帰判定部18eは、スタック環境値に登録される戻りアドレスに制御を移す。こうすることで、情報処理装置10は、エラーが発生した場合でも、リソースを初期化した状態で、アプリケーションを実行前の状態に戻すことができる。
[処理の流れ]
次に、図8から図10を用いて情報処理装置が実行する処理の流れを説明する。ここでは、図8を用いて、コンパイル実行時の処理の流れを説明し、図9を用いて、プログラム実行時の処理の流れを説明し、図10を用いて、エラー処理の流れを説明する。
(コンパイル実行時の処理の流れ)
図8は、コンパイル実行時の処理の流れを示すフローチャートである。図8に示すように、情報処理装置10のコンパイル部15の変換部15bは、入力部15aから渡されたソースコードを読み込む(S101)。
続いて、変換部15bは、読み込んだソースコードをオブジェクトコードに変換する(S102)。そして、変換部15bは、変換したオブジェクトコード内に「リソースの初期化命令」を記述し(S103)、呼び出し元への「復帰命令」を記述して(S104)、HDD12に格納する(S105)。
その後、変換部15bは、HDD12内に他のソースコードが存在する場合には(S106肯定)、S101に戻って以降の処理を繰り返す。一方、変換部15bは、HDD12内に他のソースコードが存在しない場合には(S106否定)、コンパイル処理を終了する。
(プログラム実行時の処理の流れ)
図9は、プログラム実行時の処理の流れを示すフローチャートである。図9に示すように、情報処理装置10の実行部17aは、生成部16が生成した実行ファイルをメモリ13上に展開して実行する(S201)。
続いて、分岐箇所登録部18aは、プログラムが実行された時点のレジスタ値を抽出する(S202)。また、分岐箇所登録部18aは、戻りアドレス値をレジスタ等から抽出する(S203)。
その後、分岐箇所登録部18aは、抽出したレジスタ値と戻りアドレス値とを、スタック環境値13bに登録する(S204)。そして、分岐箇所登録部18aは、当該分岐箇所登録部18aを呼び出したプログラムに制御を復帰させる(S205)。
そして、リソース管理部18bは、プログラムによってリソースが使用された場合に(S206肯定)、使用されたリソースとリソースを使用したプログラム名とを対応付けて、リソーステーブル13cに格納してリソースを管理する(S207)。
また、実行制御部17は、リソースを使用していない(S206否定)またはS207が実行された後、リソース管理が実行されたプログラム内に、サブプログラムの呼出し命令が記述されているか否かを判定する(S208)。そして、実行制御部17は、サブプログラムの呼出し命令が記述されている場合には(S208肯定)、サブプログラムを呼び出す(S209)。
そして、リソース管理部18bは、呼び出されたサブプログラムによってリソースが使用された場合に(S210肯定)、使用されたリソースとサブプログラム名とを対応付けて、リソーステーブル13cに格納してリソースを管理する(S211)。
その後、実行制御部17は、リソースを使用していない(S210否定)またはS211が実行された後、リソース管理が実行されたサブプログラム内に、さらにサブプログラムの呼出し命令が記述されているか否かを判定する(S212)。そして、実行制御部17は、さらにサブプログラムの呼出し命令が記述されている場合には(S212肯定)、S209以降の処理を繰り返す。
一方、実行制御部17は、プログラム内にサブプログラムの呼出し命令が記述されていない場合(S208否定)、または、サブプログラム内にさらにサブプログラムの呼出し命令が記述されていない場合には(S212否定)、プログラムを終了する。
(エラー処理の流れ)
図10は、エラー処理の流れを示すフローチャートである。実行制御部17がエラーを検出すると(S301肯定)、分岐処理部18cは、エラーが検出されたプログラムのスタック環境値を退避させる(S302)。なお、エラーの検出方法は、プログラムのエラー検出として一般的に利用されている様々な手法を用いることができる。
続いて、リソース初期化部18dは、スタック環境値が退避させられたプログラム内の「リソースの初期化命令」を実行する(S303)。すなわち、リソース初期化部18dは、リソーステーブル13cを参照してリソースを初期化する。
復帰判定部18eは、退避されたスタック環境値と、分岐箇所登録部18aによってスタック環境値13bに登録されたスタック環境値とが一致しない場合(S304否定)、プログラム内の「復帰命令」にしたがって呼出元のプログラムに復帰する(S305)。その後、実行制御部17は、S302以降の処理を繰り返す。
一方、復帰判定部18eは、退避されたスタック環境値と、分岐箇所登録部18aによってスタック環境値13bに登録されたスタック環境値とが一致した場合(S304肯定)、S306以降を実行する。すなわち、復帰判定部18eは、スタック環境値13bに登録されたスタック環境値のレジスタ値を現在の情報処理装置10のスタック環境値のレジスタ値として、該当するレジスタに登録する(S306)。この結果、プログラム内の「SET PROC」が実行されたときのレジスタ値に戻すことができる。
そして、復帰判定部18eは、戻りアドレスに制御を移す(S307)。その後、実行制御部17は、当該プログラム全体すなわちアプリケーションを再実行する(S308)。
上述したように、情報処理装置10は、COBOLプログラムをコンパイルする際に、最終的な復帰先と、各プログラムにリソース初期化命令と復帰命令とを記述したオブジェクトコードを生成することができる。したがって、情報処理装置10は、エラーが発生した場合には、エラーが発生したプログラムから最終的な戻り先のプログラムまで、リソースを初期化しながら復帰することができる。
つまり、情報処理装置10は、プログラムを再実行する前段階の処理を実行しながら、先頭のプログラムまで復帰させることができる。この結果、情報処理装置10は、COBOLプログラム全体を終了させることもないので、再実行できない危険性を低下させることができる。また、情報処理装置10は、前処理を実行することもなく、COBOLプログラムを再実行することができる。
実施例2では、アプリケーションの先頭であるプログラムAに復帰させる例を説明したが、これに限定されるものではない。例えば、複数のプログラムを有するアプリケーションのうち、任意のプログラムに復帰させることもできる。その場合、復帰先としたいプログラムに「CALL “SET PROC”」を記述すればよい。また、先頭のプログラムまで戻らずに、1つ前のプログラムにだけ戻るようにしてもよい。その場合も同様に、「呼出元のプログラムに戻る命令」を追記するようにすればよい。
ここで、エラーが発生したプログラムの1つ前のプログラムに戻る例を説明する。図11は、実施例3に係る実行対象のプログラム例を示す図であり、図12は、実施例3に係るコンパイル後のオブジェクトコード例を示す図である。
図11に示すように、情報処理装置10の入力部15aは、プログラムAとプログラムBとプログラムCとを有するCOBOLアプリケーションを入力部15bに渡す。図11に示すように、プログラムAには、「CALL “SET_PROC”」と「CALL “B”」とが記述される。
また、プログラムBには、「CALL “SET_PROC”」と、「CALL “JUMP_PROC”」と、「CALL “C”」とが記述される。同様に、プログラムCには、「CALL “SET_PROC”」と、「CALL “JUMP_PROC”」とが記述される。
続いて、変換部15bは、入力部15aから渡されたソースコード12aをオブジェクトコード12bに変換して、HDD12に格納する。例えば、変換部15bは、図11に示したプログラムA、プログラムB、プログラムC各々を、図12に示したオブジェクトA、オブジェクトB、オブジェクトC各々に変換する。
具体的に説明すると、変換部15bは、プログラムAの「CALL “SET_PROC”」を「“SET_PROC”を呼び出す命令」に変換し、「CALL “B”」を「プログラム“B”を呼び出す命令」に変換する。また、変換部15bは、プログラムAを変換したオブジェクトAに、「リソースの初期化命令」と「復帰命令」とを追記する。
同様に、変換部15bは、プログラムBの「CALL “SET_PROC”」を「“SET_PROC”を呼び出す命令」に変換し、「CALL “JUMP_PROC”」を「“JUMP_PROC”を呼び出す命令」に変換し、「CALL “C”」を「プログラム“C”を呼び出す命令」に変換する。また、変換部15bは、プログラムBを変換したオブジェクトBに、「リソースの初期化命令」と「復帰命令」とを追記する。
同様に、変換部15bは、プログラムCの「CALL “SET_PROC”」を「“SET_PROC”を呼び出す命令」に変換し、「CALL “JUMP_PROC”」を「“JUMP_PROC”を呼び出す命令」に変換する。また、変換部15bは、プログラムCを変換したオブジェクトCに、「リソースの初期化命令」と「復帰命令」とを追記する。
このようにすることで、情報処理装置10は、COBOLプログラムでエラーが発生した場合に、1つ前のプログラムすなわち呼び出し元へ戻る命令を追加することができる。その後は、実施例2と同様の手法でプログラムの実行およびエラー処理が実行される。
簡単に説明すると、生成部16は、図12に示したオブジェクトコードを連結して実行ファイルを生成し、実行部17aは、実行ファイルをメモリ13上に展開して実行する。そして、分岐箇所登録部18aは、実行部17aによって各オブジェクトコードに該当するロードモジュールが実行されるたびに、レジスタ値と戻りアドレスとを当該ロードモジュールのスタック環境保存域に格納する。
例えば、分岐箇所登録部18aは、オブジェクトAに該当するロードモジュールAが実行されると、ロードモジュールA内のスタック環境保存域に、「SET PROC」の次に命令である「プログラムBを呼び出す命令のアドレス」を登録する。このとき、分岐箇所登録部18aは、実施例2と同様、各レジスタ値も登録する。
同様に、分岐箇所登録部18aは、オブジェクトBに該当するロードモジュールBが実行されると、ロードモジュールB内のスタック環境保存域に、「SET PROC」の次に命令である「JUMP_PROCを呼び出す命令のアドレス」を登録する。このとき、実施例2と同様、分岐箇所登録部18aは、各レジスタ値も登録する。
また、分岐箇所登録部18aは、オブジェクトCに該当するロードモジュールCが実行されると、ロードモジュールC内のスタック環境保存域に、「SET PROC」の次に命令である「JUMP_PROCを呼び出す命令のアドレス」を登録する。このとき、実施例2と同様、分岐箇所登録部18aは、各レジスタ値も登録する。
このようにすることで、各ロードモジュールでエラーが発生した際の戻り先を呼び出し元のプログラムに指定することができる。この結果、ロードモジュールCでエラーが発生した場合には、ロードモジュールBの「JUMP_PROCを呼び出す命令」に復帰することができる。同様に、ロードモジュールBでエラーが発生した場合には、ロードモジュールAの「プログラムBを呼び出す命令」に復帰することができる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
(対象プログラム)
上記実施例では、COBOLプログラムを例にして説明したがこれに限定されるものではなく、C言語などコンパイルを実行する言語であればよい。
(システム)
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
(ハードウェア構成)
ところで、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。
図13は、実行制御プログラムを実行するコンピュータのハードウェア構成例を示す図である。図13に示すように、コンピュータ100は、CPU102、入力装置103、出力装置104、通信インタフェース105、媒体読取装置106、HDD(Hard Disk Drive)107、RAM(Random Access Memory)108を有する。また、図13に示した各部は、バス101で相互に接続される。
入力装置103は、マウスやキーボードであり、出力装置104は、ディスプレイなどであり、通信インタフェース105は、NIC(Network Interface Card)などのインタフェースである。HDD107は、実行制御プログラム107aととともに、図2に示した各情報等を記憶する。記録媒体の例としてHDD107を例に挙げたが、ROM(Read Only Memory)、RAM、CD−ROM等の他のコンピュータ読み取り可能な記録媒体に各種プログラムを格納しておき、コンピュータに読み取らせることとしてもよい。なお、記録媒体を遠隔地に配置し、コンピュータが、その記憶媒体にアクセスすることでプログラムを取得して利用してもよい。また、その際、取得したプログラムをそのコンピュータ自身の記録媒体に格納して用いてもよい。
CPU102は、実行制御プログラム107aを読み出してRAM108に展開することで、図2等で説明した各機能を実行する実行制御プロセス108aを動作させる。すなわち、実行制御プロセス108aは、図2に記載したコンパイル部15、実行制御部17と同様の機能を実行する。このようにコンピュータ100は、プログラムを読み出して実行することで実行制御方法を実行する情報処理装置として動作する。
例えば、コンピュータ100は、媒体読取装置106によって記録媒体から実行制御プログラムを読み出し、読み出された実行制御プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、コンピュータ100によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
1 コンパイラ
1a 受付部
1b 変換部
2 実行制御装置
2a 実行制御部
2b エラー処理部
10 情報処理装置
11 入出力インタフェース部
12 HDD
12a ソースコード
12b オブジェクトコード
13 メモリ
13a 実行ファイル
13b スタック環境値
13c リソーステーブル
13d 作業領域
14 プロセッサ
15 コンパイル部
15a 入力部
15b 変換部
16 生成部
17 実行制御部
17a 実行部
18 ランタイムシステム
18a 分岐箇所登録部
18b リソース管理部
18c 分岐処理部
18d リソース初期化部
18e 復帰判定部

Claims (4)

  1. 第1のプログラムから呼び出される関係にある第2のプログラムを受付け、
    受付けた前記第2のプログラムを、前記第2のプログラムの実行に伴って使用されるリソースを初期化する初期化命令と前記第1のプログラムに戻る復帰命令とをエラーが発生した場合に実行する命令と、最終的な戻り先への復帰を開始する命令とを含むプログラムに変換するとともに、前記第1のプログラムを、前記最終的な戻り先を登録する命令を含むプログラムに変換し、
    変換された各プログラムと所定の関数群とを連携させた実行ファイルを実行し、
    エラーが発生した場合に、エラーを発生させた実行ファイル内のプログラムに記述される前記初期化命令に基づいてリソースを初期化する場合に、該プログラムのスタック環境値を退避させ、退避させたスタック環境値と前記最終的な戻り先として登録されたスタック環境値とを比較し、一致しない場合は前記復帰命令に基づいて呼出元のプログラムに戻り、一致する場合は前記スタック環境値によって特定される戻りアドレスに制御を移す
    各処理をさらにコンピュータに実行させることを特徴とする実行制御プログラム。
  2. 第1のプログラムから呼び出される関係にある第2のプログラムを受付け、
    受付けた前記第2のプログラムを、前記第2のプログラムの実行に伴って使用されるリソースを初期化する初期化命令と、前記第1のプログラムに戻る復帰命令とをエラーが発生した場合に実行する命令とを含むプログラムに変換し、
    変換されたプログラムと所定の関数群とを連携させた実行ファイルを実行し、
    実行した実行ファイル内で最終的な戻り先として指定されたプログラム内に、該プログラムが実行されたときのスタック環境の値を登録し、
    エラーが発生した場合に、エラーを発生させた実行ファイル内のプログラムに記述される初期化命令に基づいてリソースを初期化し、該プログラム内に前記スタック環境の値が登録されていない場合には、該プログラムに記述される復帰命令に基づいて呼出元のプログラムに戻り、
    呼出元のプログラム内に前記スタック環境の値が登録されていない場合には、前記初期化命令と前記復帰命令を実行し、
    呼出元のプログラム内に前記スタック環境の値が登録されている場合には、前記初期化命令を実行するとともに、前記スタック環境の値によって特定される戻りアドレスに制御を移す、
    各処理をさらにコンピュータに実行させることを特徴とする実行制御プログラム。
  3. 第1のプログラムから呼び出される関係にある第2のプログラムを受付ける受付部と、
    前記受付部によって受け付けられた前記第2のプログラムを、前記第2のプログラムの実行に伴って使用されるリソースを初期化する初期化命令と前記第1のプログラムに戻る復帰命令とをエラーが発生した場合に実行する命令と、最終的な戻り先への復帰を開始する命令とを含むプログラムに変換するとともに、前記第1のプログラムを、前記最終的な戻り先を登録する命令を含むプログラムに変換する変換部と、
    前記変換部が変換したプログラムと所定の関数群とを連携させた実行ファイルを実行する実行制御部と、
    エラーが発生した場合に、エラーを発生させた実行ファイル内のプログラムに記述される前記初期化命令に基づいてリソースを初期化する場合に、該プログラムのスタック環境値を退避させ、退避させたスタック環境値と前記最終的な戻り先として登録されたスタック環境値とを比較し、一致しない場合は前記復帰命令に基づいて呼出元のプログラムに戻り、一致する場合は前記スタック環境値によって特定される戻りアドレスに制御を移すエラー処理部と
    有することを特徴とする実行制御装置。
  4. コンピュータが、
    第1のプログラムから呼び出される関係にある第2のプログラムを受付け、
    受け付けた前記第2のプログラムを、前記第2のプログラムの実行に伴って使用されるリソースを初期化する初期化命令と前記第1のプログラムに戻る復帰命令とをエラーが発生した場合に実行する命令と、最終的な戻り先への復帰を開始する命令とを含むプログラムに変換るとともに、前記第1のプログラムを、前記最終的な戻り先を登録する命令を含むプログラムに変換し、
    変換したプログラムと所定の関数群とを連携させた実行ファイルを実行し、
    エラーが発生した場合に、エラーを発生させた実行ファイル内のプログラムに記述される前記初期化命令に基づいてリソースを初期化する場合に、該プログラムのスタック環境値を退避させ、退避させたスタック環境値と前記最終的な戻り先として登録されたスタック環境値とを比較し、一致しない場合は前記復帰命令に基づいて呼出元のプログラムに戻り、一致する場合は前記スタック環境値によって特定される戻りアドレスに制御を移す
    処理を含んだことを特徴とする実行制御方法。
JP2011218560A 2011-09-30 2011-09-30 実行制御プログラム、実行制御装置および実行制御方法 Active JP5845788B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2011218560A JP5845788B2 (ja) 2011-09-30 2011-09-30 実行制御プログラム、実行制御装置および実行制御方法
US13/590,232 US8839191B2 (en) 2011-09-30 2012-08-21 Computer-readable recording medium, compiler, execution control apparatus, and execution control method for converting a program to be called

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011218560A JP5845788B2 (ja) 2011-09-30 2011-09-30 実行制御プログラム、実行制御装置および実行制御方法

Publications (2)

Publication Number Publication Date
JP2013080281A JP2013080281A (ja) 2013-05-02
JP5845788B2 true JP5845788B2 (ja) 2016-01-20

Family

ID=47993931

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011218560A Active JP5845788B2 (ja) 2011-09-30 2011-09-30 実行制御プログラム、実行制御装置および実行制御方法

Country Status (2)

Country Link
US (1) US8839191B2 (ja)
JP (1) JP5845788B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
PL3427148T3 (pl) 2016-03-11 2022-05-09 Lzlabs Gmbh Kompilator modułu ładowania

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59135551A (ja) 1983-01-21 1984-08-03 Matsushita Electric Ind Co Ltd 高機能命令計算機
JPH0776928B2 (ja) * 1987-04-27 1995-08-16 富士通株式会社 Cobolコンパイラにおけるuse手続き処理方法
JP3024131B2 (ja) * 1988-09-02 2000-03-21 富士通株式会社 コンパイラシステム
JPH0279125A (ja) 1988-09-16 1990-03-19 Nec Corp ベイシックインタプリタ言語での中断処理方法
JPH06168124A (ja) 1992-11-30 1994-06-14 Hitachi Ltd アドレスチェック方式
US5748964A (en) * 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US6247169B1 (en) * 1996-11-04 2001-06-12 Sun Microsystems, Inc. Structured exception-handling methods, apparatus, and computer program products
JP2002073347A (ja) * 2000-09-04 2002-03-12 Hitachi Ltd 例外処理方法及びコンパイラ
JP2004086545A (ja) * 2002-08-27 2004-03-18 Nippon Yunishisu Kk データ項目の状態を管理することでプログラムを自動生成するプログラム開発支援システム
US7559063B2 (en) * 2004-06-03 2009-07-07 International Business Machines Corporation Program flow control in computer systems
JP2006127440A (ja) * 2004-10-29 2006-05-18 Satoshi Obana 敷衍化した例外処理方法、およびそのコンピュータ読み取り可能なプログラム
US7389460B1 (en) * 2005-11-14 2008-06-17 University Of Central Florida Research Foundation, Inc. Runtime-competitive fault handling for reconfigurable logic devices

Also Published As

Publication number Publication date
US20130086596A1 (en) 2013-04-04
JP2013080281A (ja) 2013-05-02
US8839191B2 (en) 2014-09-16

Similar Documents

Publication Publication Date Title
KR101687213B1 (ko) 동적으로 로딩하는 그래프 기반 계산
US6003095A (en) Apparatus and method for demand loading a dynamic link library
US8583413B2 (en) Computer method and apparatus for chaining of model-to-model transformations
KR101903805B1 (ko) 프로그램 상태를 체크포인팅하며 복원하기 위한 방법
US20120159466A1 (en) Dynamic determination of application server runtime classloading
JPH11242597A (ja) Javaバイトコードデータのフローグラフの生成方法
US8701096B2 (en) In-order execution in an asynchronous programming environment
US7320121B2 (en) Computer-implemented system and method for generating embedded code to add functionality to a user application
JP6412276B2 (ja) 仮想マシン作成方法及び装置
US20180203676A1 (en) Removing library objects from a static library
WO2015032311A1 (zh) 一种代码生成方法、编译器、调度方法、装置及调度***
Narayan et al. Gobi: WebAssembly as a practical path to library sandboxing
US7673284B2 (en) Method and system for versioning codes based on relative alignment for single instruction multiple data units
CN111596970B (zh) 动态库延迟加载方法、装置、设备和存储介质
JP5845788B2 (ja) 実行制御プログラム、実行制御装置および実行制御方法
JP2011141676A (ja) 言語処理装置、言語処理方法およびコンピュータプログラムプロダクト
US9229698B2 (en) Method and apparatus for compiler processing for a function marked with multiple execution spaces
JP6013315B2 (ja) アプリケーション開発支援プログラム及びアプリケーション開発支援システム
JP5716469B2 (ja) ラッパープログラム及び集積回路装置
US20230325476A1 (en) Obfuscation device, obfuscation method, and obfuscation program
CN111596923B (zh) Haxe静态链接库构建方法、装置和电子设备
JP7073813B2 (ja) 制御プログラム、制御方法および情報処理装置
JP2007133820A (ja) プログラム開発支援装置およびプログラム開発支援方法
JP2009259078A (ja) バッファオーバーフロー検出方法、バッファオーバーフロー検出プログラム、およびバッファオーバーフロー検出装置
EP4270298A1 (en) Enhanced computer vision application programming interface

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140603

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150119

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150217

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150420

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151027

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151109

R150 Certificate of patent or registration of utility model

Ref document number: 5845788

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150