JP2009098907A - デバッグ装置及びデバッグ方法 - Google Patents
デバッグ装置及びデバッグ方法 Download PDFInfo
- Publication number
- JP2009098907A JP2009098907A JP2007269523A JP2007269523A JP2009098907A JP 2009098907 A JP2009098907 A JP 2009098907A JP 2007269523 A JP2007269523 A JP 2007269523A JP 2007269523 A JP2007269523 A JP 2007269523A JP 2009098907 A JP2009098907 A JP 2009098907A
- Authority
- JP
- Japan
- Prior art keywords
- task
- information
- state
- resource
- tasks
- 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
Links
Images
Abstract
【課題】プログラムの開発時に、デッドロックの発生あるいは優先度逆転現象の発生を検出することができるデバッグ装置を提供する。
【解決手段】デバッグ装置1は、プログラム15の実行中にOS16において発生するイベントに応じて生成されるログ情報を解析して、プログラムの各タスクの状態と各タスクが使用する資源の使用状態を検出する。そして、デバッグ装置1は、解析して得られた各タスクの状態の情報(TIT)と各タスクが使用する資源の使用状態の情報(RIT)を記憶する。デバッグ装置1は、ログ情報の入力に応じて、各タスクの状態と各タスクが使用する資源の使用状態の情報に基づいて、タスク間でのデッドロック状態またはタスク間での優先度逆転状態の発生を検出し、その発生したことを示す発生情報を出力する。
【選択図】図1
【解決手段】デバッグ装置1は、プログラム15の実行中にOS16において発生するイベントに応じて生成されるログ情報を解析して、プログラムの各タスクの状態と各タスクが使用する資源の使用状態を検出する。そして、デバッグ装置1は、解析して得られた各タスクの状態の情報(TIT)と各タスクが使用する資源の使用状態の情報(RIT)を記憶する。デバッグ装置1は、ログ情報の入力に応じて、各タスクの状態と各タスクが使用する資源の使用状態の情報に基づいて、タスク間でのデッドロック状態またはタスク間での優先度逆転状態の発生を検出し、その発生したことを示す発生情報を出力する。
【選択図】図1
Description
本発明は、デバッグ装置及びデバッグ方法に関する。
近年、コンピュータを利用した情報処理技術の一つに、複数のタスクあるいは複数のプロセスを同時に実行するマルチタスクシステムがある。マルチタスクあるいはマルチプロセスのシステムでは、資源の共有が行われるため、いわゆるデッドロックの問題がある。アプリケーションのソフトウエアプログラム(以下、単にプログラムともいう)の実行中にいわゆるデッドロック、言い換えるとすくみ状態、が発生すると、そのプログラム中の複数のタスクは互いに実行できない状態になってしまう。そのため、デッドロックが発生した場合には、プログラムの実行が継続して行われるように、通常は、所定の対策処理が実行される。
従来より、このようなデッドロックの発生に関する種々の技術が提案されている。例えば、プログラムの実行中におけるデッドロックを検出する技術、プログラムの実行中におけるデッドロックを防止する技術、及びプログラムの実行中にデッドロックを検出してデッドロックの状態から回復する技術が、種々提案されている(例えば、特許文献1、2、3参照)。
しかし、これらの技術は、プログラムの実行中にデッドロックが発生しても、プログラムの実行が継続するようにするために、デッドロックの検出、防止等を行うための技術である。言い換えると、これらの提案に係る技術は、プログラムの実行中にデッドロックを検出して、自動的にプログラムの実行を継続させるための技術である。自動的にプログラムの実行を継続する場合、デッドロックの検出タイミングにおいて、他タスク、ハンドラ、あるいはそれ以降の処理を考慮せずに、対策処理すなわち回復処理が実行される。
ところで、従来、プログラムの開発中にデッドロックの発生自体を検出する技術はなかった。プログラムの開発においては、プログラム開発者は、プログラムのデバッグ時にプログラム実行中に何らかの動作異常があると、その異常の原因がデッドロックの発生であったことを、プログラムの実行過程をトレースすることによって、発見していた。その場合、デッドロックの発生原因を突き止めるためには、プログラム開発者は、一般的に利用することができる開発ツールなどのデバッグ機能を使い、プログラムの実行過程等のトレースを行う。そのトレースを行うことによって、プログラムの動作の確認をすることができ、その結果として、デッドロックの発生を見出すことができる。なお、その場合、ユーザには、これらのツール及び環境に依存する制限、その制限を確認する知識及び技術が必要とされ、そのような知識等を利用して、デッドロックの発見をすることができる。
また、開発中のプログラムを実行した結果においては処理の目的は達成しているが、その処理の過程において、あるタスク間でのデッドロックの発生、あるいは設計時に意図していない優先度逆転の状態の発生をしている可能性もある。
しかし、デバッグ時にデッドロックが発生しても、上述したように、自動的にプログラムの実行を継続させる対策処理が実行されるので、ユーザは、デッドロック状態、あるいはタスク間における優先度逆転現象の状態を検出したくても、処理中における異常がない限り、デッドロック状態自体、あるいは優先度逆転現象自体を検出することができず、さらにデッドロックの発生原因を追及するための情報を得ることも出来なかった。
また、優先度逆転現象の場合、開発者がその優先度の逆転を意図して発生させている場合もあり、優先度逆転現象の発生に対して自動的に対策処理を行わなくてもよい場合もある。ユーザの意図していた優先度逆転現象に対してまでも、そのような対策処理を行うことはオーバヘッドの発生となってしまう。
以上のように、ユーザは、プログラムの開発時に、デッドロックの発生あるいは優先度逆転現象の発生を検出することはできなかった。
特開2001-259433号公報
特開平9-3302415号公報
特開2004-341878号公報
以上のように、ユーザは、プログラムの開発時に、デッドロックの発生あるいは優先度逆転現象の発生を検出することはできなかった。
そこで、本発明は、プログラムの開発時に、デッドロックの発生あるいは優先度逆転現象の発生を検出することができるデバッグ装置及びその方法を提供することを目的とする。
本発明の一態様によれば、プログラムの実行中にオペレーティングシステムにおいて発生するイベントに応じて生成されるログ情報を解析して、前記プログラムの各タスクの状態と前記各タスクが使用する資源の使用状態を検出するログ情報解析部と、該ログ情報解析部によって解析して得られた前記各タスクの状態の情報と前記各タスクが使用する資源の使用状態の情報を記憶する状態情報記憶部と、前記ログ情報の入力に応じて、前記各タスクの状態と前記各タスクが使用する資源の使用状態の情報に基づいて、タスク間でのデッドロック状態またはタスク間での優先度逆転状態の発生を検出するタスク状態検出部と、該タスク状態検出部によって検出された前記タスク間でのデッドロック状態または前記タスク間での優先度逆転状態が発生したことを示す発生情報を出力する発生情報出力部と、を有することを特徴とするデバッグ装置を提供することができる。
本発明の一態様によれば、プログラムの実行中にオペレーティングシステムにおいて発生するイベントに応じて生成されるログ情報を解析して、前記プログラムの各タスクの状態と前記各タスクが使用する資源の使用状態を検出し、解析して得られた前記各タスクの状態の情報と前記各タスクが使用する資源の使用状態の情報を記憶し、前記ログ情報の入力に応じて、前記各タスクの状態と前記各タスクが使用する資源の使用状態の情報に基づいて、タスク間でのデッドロック状態またはタスク間での優先度逆転状態の発生を検出し、検出された前記タスク間でのデッドロック状態または前記タスク間での優先度逆転状態が発生したことを示す発生情報を出力することを特徴とするデバッグ方法を提供することができる。
本発明によれば、プログラムの開発時に、デッドロックの発生あるいは優先度逆転現象の発生を検出することができる。
以下、図面を参照して本発明の実施の形態を説明する。
(第1の実施の形態)
まず図1に基づき、本発明の第1の実施の形態に係わるプログラム開発システムの構成を説明する。
(第1の実施の形態)
まず図1に基づき、本発明の第1の実施の形態に係わるプログラム開発システムの構成を説明する。
(装置構成)
図1は、本実施の形態に係わるプログラム開発システムの構成を示す構成図である。
開発装置としてのプログラム開発システム1は、デバッグ装置であるホスト側のコンピュータ(以下、ホストコンピュータという)2と、ターゲットボード3と、モニタ等の出力装置4とを含んで構成されている。
ホストコンピュータ2は、パーソナルコンピュータ等であり、プログラムを開発するために一般的に使用されているソフトウエアプログラムであるプログラム開発ツール11と、ワーニング事象通知部12と、解析情報を記憶するデータ記憶部13とを含むデバッグ装置である。ユーザは、プログラム開発ツール11を利用して、開発対象であるアプリケーションプログラム15の作成、そのプログラム15のデバッグ、ターゲットボード3におけるプログラム15の実行制御、等のための操作を行うことができる。プログラム15は、例えば、リアルタイムOSなどのマルチタスク制御システム上で実行させるアプリケーションプログラムである。
図1は、本実施の形態に係わるプログラム開発システムの構成を示す構成図である。
開発装置としてのプログラム開発システム1は、デバッグ装置であるホスト側のコンピュータ(以下、ホストコンピュータという)2と、ターゲットボード3と、モニタ等の出力装置4とを含んで構成されている。
ホストコンピュータ2は、パーソナルコンピュータ等であり、プログラムを開発するために一般的に使用されているソフトウエアプログラムであるプログラム開発ツール11と、ワーニング事象通知部12と、解析情報を記憶するデータ記憶部13とを含むデバッグ装置である。ユーザは、プログラム開発ツール11を利用して、開発対象であるアプリケーションプログラム15の作成、そのプログラム15のデバッグ、ターゲットボード3におけるプログラム15の実行制御、等のための操作を行うことができる。プログラム15は、例えば、リアルタイムOSなどのマルチタスク制御システム上で実行させるアプリケーションプログラムである。
ターゲットボード3は、開発対象であるアプリケーションプログラム(以下、単にプログラムという)15と、そのプログラム15を搭載し実行を制御するオペレーティングシステム(以下、OSという)16と、ログ出力部17とを含む。OS16は、後述するログデータを生成するログ生成部18を含む。
ターゲットボード3は、例えば、開発対象のプログラム15を実行する1チップの半導体装置であるプロセッサを基板上に搭載した配線板、あるいは基板上で各種回路素子を配線により接続して模擬的に実現した配線板である。従って、ターゲットボード3にはOS16も搭載可能であり、ユーザは、そのOS16上で、開発中の、あるいは開発した、プログラム15を実行させることができる。
ターゲットボード3は、例えば、開発対象のプログラム15を実行する1チップの半導体装置であるプロセッサを基板上に搭載した配線板、あるいは基板上で各種回路素子を配線により接続して模擬的に実現した配線板である。従って、ターゲットボード3にはOS16も搭載可能であり、ユーザは、そのOS16上で、開発中の、あるいは開発した、プログラム15を実行させることができる。
ホストコンピュータ2とターゲットボード3は、ケーブル19により接続され、互いにコマンド及びデータの送受信が可能となっている。ホストコンピュータ2からのプログラムの実行命令等が、コネクタケーブルを介して、ターゲットボード3に供給される。
さらに、ログ生成部18は、通常のOSが有する、ログデータを生成するソフトウエアプログラムである。ログ生成部18のログ出力機能は、一般的な手段によるもので、ログ情報の生成を行うときは、実行中のソフトウエアプログラムの実行を一時的に中断し、一つあるいは複数のログ情報を、逐次生成して出力する仕組みを備えている。その一時的な中断の処理は、通常のOS16が備えているログ出力機能における中断処理と同じであり、ソフトウエアプログラムへの影響を極めて最小限に抑えられるように設計されている。このようなログ出力機能を使うことで、OS16において発生するイベントの情報がリアルタイムに利用することができる。
具体的には、ログ生成部18は、プログラム15から実行要求されたコマンド、コマンドに応じて実行した内容、プログラム15の実行中に発生した事象、等をログ情報として生成する関数である。ログ生成部18は、プログラム15の実行中にOS16において発生したイベントの情報を逐次生成して、ログ情報LDとして、ログ出力部17に出力する。よって、ログ出力部17は、ケーブル19を介してワーニング事象通知部12にログ情報LDを出力する。
ホストコンピュータ2は、上述したように、ワーニング事象通知部12を備える。ワーニング事象通知部12は、ログ出力部17から出力されるログ情報LDを受信して解析し、データ記憶部13に対して、解析して得られた情報の構築、追加、修正、削除などの管理を行うプログラムである。後述するように、ワーニング事象通知部12は、そのデータ記憶部13に記憶された情報から、ワーニング事象としてのデッドロック状態を検出して出力装置4へその検出した事象の報告すなわち出力する機能も有する。また、ワーニング事象通知部12は、OS16において発生しているイベントの情報から、プログラム開発ツール11へ、イベント情報EDの報告すなわち出力する機能も有する。
また、データ記憶部13には、後述するタスク情報管理テーブルを記憶するタスク情報記憶部13aと、後述する資源情報管理テーブルを記憶する資源情報記憶部13bとを含む。
(各処理部の動作あるいは機能)
次に、各処理部の動作あるいは機能について説明する。
(OS)
OS16は、一般的なマルチタスク制御を提供するOSであり、タスクあるいはプロセスの単位に分割される複数のプログラムの実行を制御する。OS16は、アプリケーションプログラムを構成するタスク、ハンドラ、タスク及びハンドラから利用されるセマフォ及びメモリの共有資源(以下、タスク、ハンドラ、共有資源を纏めて指す場合はオブジェクトと記す)の管理機能を有する。OS16は、さらに、これらオブジェクトを操作するインターフェース(以下、このインターフェースをサービスコールという)を有する。さらに、OS16は、OS内部においてイベントが発生した場合に、ログ情報LDをログ生成部18から出力する。
次に、各処理部の動作あるいは機能について説明する。
(OS)
OS16は、一般的なマルチタスク制御を提供するOSであり、タスクあるいはプロセスの単位に分割される複数のプログラムの実行を制御する。OS16は、アプリケーションプログラムを構成するタスク、ハンドラ、タスク及びハンドラから利用されるセマフォ及びメモリの共有資源(以下、タスク、ハンドラ、共有資源を纏めて指す場合はオブジェクトと記す)の管理機能を有する。OS16は、さらに、これらオブジェクトを操作するインターフェース(以下、このインターフェースをサービスコールという)を有する。さらに、OS16は、OS内部においてイベントが発生した場合に、ログ情報LDをログ生成部18から出力する。
タスク、セマフォ、メモリ等の各オブジェクトは、ユーザにより予め設定された、オブジェクト種別に応じて特定の識別子(以下、IDという)を有し、さらに、各タスクには優先度の情報も設定されている。OS16は、実行するタスクを優先度に従って決定するタスクスケジューリング機能と、実行タスクを切り替えるディスパッチ機能とを有する。
(タスクの状態)
図2は、本実施の形態に係るタスクの状態遷移図である。各タスクは、タスクスケジューリング機能に従って、4つの状態を取り得る。4つの状態は、ここでは、実行状態(S-1)、実行可能状態(S-2)、待ち状態(S-3)及び休止状態(S-4)である。タスクスケジューリング機能により、一つのタスクが実行状態(S-1)になると、他のタスクは、実行状態ではないタスクとされる。実行状態(S-1)以外の状態は複数あり、各状態に対して複数のタスクが存在可能である。タスクは各状態間を遷移する。例えば、実行状態(S-1)のタスクが処理を終了あるいは中断する時は、利用したサービスコールの機能により、実行可能状態(S-2)、待ち状態(S-3)及び休止状態(S-4)のいずれか一つに遷移し、次に、タスクスケジューリング機能により、実行可能状態(S-2)のタスクの中で、一番優先度の高いタスクが実行状態(S-1)に遷移し、同時にディスパッチ処理が発生される。
図2は、本実施の形態に係るタスクの状態遷移図である。各タスクは、タスクスケジューリング機能に従って、4つの状態を取り得る。4つの状態は、ここでは、実行状態(S-1)、実行可能状態(S-2)、待ち状態(S-3)及び休止状態(S-4)である。タスクスケジューリング機能により、一つのタスクが実行状態(S-1)になると、他のタスクは、実行状態ではないタスクとされる。実行状態(S-1)以外の状態は複数あり、各状態に対して複数のタスクが存在可能である。タスクは各状態間を遷移する。例えば、実行状態(S-1)のタスクが処理を終了あるいは中断する時は、利用したサービスコールの機能により、実行可能状態(S-2)、待ち状態(S-3)及び休止状態(S-4)のいずれか一つに遷移し、次に、タスクスケジューリング機能により、実行可能状態(S-2)のタスクの中で、一番優先度の高いタスクが実行状態(S-1)に遷移し、同時にディスパッチ処理が発生される。
(ログ情報)
OS16において発生するイベントの中で、本実施の形態において必要なイベントの種類としては、OS16が提供するサービスコールの利用と、そのサービスコールの利用に起因して発生するタスクのディスパッチとがある。ログ生成部18は、OS16の管理する情報を参照し、図3に示すようなデータを生成して、出力する。
OS16において発生するイベントの中で、本実施の形態において必要なイベントの種類としては、OS16が提供するサービスコールの利用と、そのサービスコールの利用に起因して発生するタスクのディスパッチとがある。ログ生成部18は、OS16の管理する情報を参照し、図3に示すようなデータを生成して、出力する。
図3は、ログ生成部18が生成して出力するログ情報LDのデータフォーマットの構成を示す図である。ログ情報LDのデータフォーマットは、複数のデータフィールド部からなり、具体的には、ログコード21、サブコード22、ターゲットID23、タスクID24、拡張情報25、及びプログラムカウンタ26の6つのデータフィールド部を有している。
ログコード21は、OS16内で発生したイベント等のコード情報である。
サブコード22は、ログコード部21に関連するコード情報である。
ターゲットID23は、OS16の管理する、例えばセマフォ、メモリ等のリソースのID情報である。
タスクID24は、アプリケーションプログラム15のタスクのID情報、すなわちタスク識別情報である。
拡張情報25は、例えば、タスクに関する補足情報等の付加情報である。
プログラムカウンタ26は、イベントが発生した時のプログラムカウンタの値である。
サブコード22は、ログコード部21に関連するコード情報である。
ターゲットID23は、OS16の管理する、例えばセマフォ、メモリ等のリソースのID情報である。
タスクID24は、アプリケーションプログラム15のタスクのID情報、すなわちタスク識別情報である。
拡張情報25は、例えば、タスクに関する補足情報等の付加情報である。
プログラムカウンタ26は、イベントが発生した時のプログラムカウンタの値である。
図4及び図5は、ログ情報LDの例を示す図である。図4は、サービスコール利用時におけるログ情報LDの例を示す図である。図5は、タスクのディスパッチ時におけるログ情報LDの例を示す図である。
図4に示すように、サービスコールが利用されると、そのログ情報LDが生成され、ログ情報LD中、ログコード21にサービスコール識別コード、サブコード22にエラーコード、ターゲットID、タスクIDにサービスコール発行タスクID、拡張情報25にタスク操作時の引数情報、及びプログラムカウンタ26にサービスコール発行時のプログラムカウンタのアドレスが含まれる。なお、エラーコードは、サービスコールの発行が成功したか否かを示す情報である。
また、図5に示すように、タスクのディスパッチが発生すると、そのログ情報LDが生成され、ログ情報LD中、ログコード21にディスパッチコード、サブコード22に0、ターゲットIDにディスパッチ後のタスクID、タスクIDにディスパッチ前のタスクID、拡張情報25に0、及びプログラムカウンタ26に0が含まれる。なお、ディスパッチ後のタスクIDは、ディスパッチによりその後に実行されるタスクのIDであり、ディスパッチ前のタスクIDは、ディスパッチ前に実行されていて、ディスパッチ後は実行されなくなるタスクのIDである。
以上説明したログ情報LDは、ログ生成部18において生成され、ログ出力部17を介してワーニング事象通知部12へ供給される。
ホストコンピュータ2のワーニング事象通知部12は、供給されたログ情報LDから、解析情報としてのオブジェクト情報管理情報を生成し、さらに、検出したイベント情報EDをプログラム開発ツール11及び出力装置4へ出力する。プログラム開発ツール11は、イベント情報EDを受信した場合、例えば、ターゲットボード3上で実行中のプログラム15の実行を停止するといった動作をするように、設定あるいは制御を行うことができる。
(オブジェクト情報管理情報)
図6及び図7は、解析情報としてのオブジェクト情報管理情報の例を示す図である。ワーニング事象通知部12は、ログ情報LDを受信すると、オブジェクト情報管理情報の生成あるいは更新を行う。オブジェクト情報管理情報は、初期値が予め設定されており、プログラム15の実行後は、ログ情報LDに基づいて動的に更新されていく。
図6及び図7は、解析情報としてのオブジェクト情報管理情報の例を示す図である。ワーニング事象通知部12は、ログ情報LDを受信すると、オブジェクト情報管理情報の生成あるいは更新を行う。オブジェクト情報管理情報は、初期値が予め設定されており、プログラム15の実行後は、ログ情報LDに基づいて動的に更新されていく。
図6は、オブジェクト情報管理情報の一つであるタスク情報管理データTIのデータフォーマットの構成を示す図である。タスク情報管理データTIのデータフォーマットは、複数のデータフィールド部からなり、具体的には、タスクID31、タスクの優先度32、タスクの状態33、セマフォ34、及びメモリ35についての5つのデータフィールド部を有している。タスクID31は、タスクを識別するためのタスク識別情報である。タスクの状態33は、タスクの状態を示す状態情報である。セマフォ34とメモリ35は、各資源の獲得及び空き待ちの状態を示す資源獲得状態情報である。
タスクID31により特定されるタスク毎に、その優先度32、タスクの状態33、セマフォ34及びメモリ45についての内容が記憶される。ワーニング事象通知部12では、ログ情報LDを受信すると、図3のタスクID24の情報に基づいて、対応するタスクID31の有無がチェックされる。ワーニング事象通知部12は、タスクID24に対応するタスクID31について、拡張情報25に含まれる引数情報25からタスクの優先度32を抽出し、サービスコール利用時あるいはディスパッチ発生時にログ情報LDからタスクの状態33を抽出し、サービスコール利用時のログコード21とターゲットID23からセマフォ34とメモリ35のID情報を抽出する。
図7は、オブジェクト情報管理情報の一つである資源情報管理データRIのデータフォーマットの構成を示す図である。資源情報管理データRIのデータフォーマットは、複数のデータフィールド部からなり、具体的には、資源ID41、資源を獲得したタスクID42、及び資源を獲得したときの位置、すなわちプログラムカウンタのアドレス43を有している。
ターゲットID23により特定される資源ID41毎に、資源を獲得したタスクID42、及び資源を獲得したときの位置43の内容が記憶される。ワーニング事象通知部12では、ログ情報LDを受信すると、図3のターゲットID23の情報に基づいて、ターゲットID23に対応する資源ID41について、サービスコール発行タスクID24から資源を獲得したタスクID42を抽出し、サービスコール発行アドレス26から資源を獲得した位置43の情報を抽出する。
これらのオブジェクト情報管理情報は、タスクID及び資源ID毎に生成される。タスクID毎に生成された複数のタスク情報管理データTIはテーブル形式のテーブルデータとして、データ記憶部13のタスク情報記憶部13aに記憶され、資源ID毎に生成された複数の資源情報管理データRIはテーブル形式のテーブルデータとして、データ記憶部13の資源情報記憶部13bに記憶される。以下、タスク情報管理データTIのデータテーブルを、タスク情報管理テーブルTITといい、資源情報管理データRIのデータテーブルを、資源情報管理テーブルRITという。すなわち、タスク情報記憶部13aは、タスク情報管理テーブルを有し、資源情報記憶部13bは、資源情報管理テーブルを有する。よって、データ記憶部13は、各タスクの状態の情報と、各タスクが使用する資源の使用状態の情報を記憶する状態情報記憶部を構成する。
タスク情報管理テーブルTITは、アプリケーションプログラム15において生成あるいは開始されるタスクの数の分だけレコードを含み、各タスクの管理情報と各タスクの資源取得状況を管理するためのテーブルである。また、資源情報管理テーブルRITは、オブジェクト種別毎のテーブルが作成され、資源が取得されている状況を管理するためのテーブルである。以下、この2種類のテーブルを纏めて指す場合は、オブジェクト情報管理テーブルOITという。
タスク情報管理テーブルTITにおいては、タスクを生成あるいは開始するサービスコールの利用があった場合に、新規のレコードが追加され、資源を操作するサービスコールの利用があった場合は、対象タスクのレコードの情報が更新される。資源情報管理テーブルRITにおいては、管理するオブジェクトを生成するタイミング、あるいは初めて使用するタイミングにおいてテーブルが作成され、資源の取得と返却に応じて、各資源のレコードの追加と削除の操作が行われる。
(ワーニング事象通知部の動作)
次に、上述した構成のワーニング事象通知部12における動作を、3つのタスクが動作する場合を例として、説明する。
図8は、タスクと資源の状態の変化を説明するための図である。図8は、デッドロックが発生するまでの経過を示している。タスクAはIDが1で、タスクBはIDが2で、タスクCはIDが3である。以下、IDが1をID1と、IDが2をID2と、IDが3をID3という。
次に、上述した構成のワーニング事象通知部12における動作を、3つのタスクが動作する場合を例として、説明する。
図8は、タスクと資源の状態の変化を説明するための図である。図8は、デッドロックが発生するまでの経過を示している。タスクAはIDが1で、タスクBはIDが2で、タスクCはIDが3である。以下、IDが1をID1と、IDが2をID2と、IDが3をID3という。
図8の例では、3つのタスクA,B,Cを含む、タスク及びハンドラにより構成されるアプリケーションプログラムにおいて、タスクAの優先度は3で、タスクBの優先度は5で、タスクCの優先度は7で、3つのタスクにおける優先度は以下の関係にある。
タスクA>タスクB>タスクC
さらに、セマフォ資源の内、ID1のセマフォ資源は、2つのタスクが使用でき、メモリ資源の内、ID1のメモリ資源は、1つしか使用できないものとする。
図8は、この条件において、タスクAとBの間で発生するデッドロックの検出と、デッドロックの発生を通知する例を示す。
タスクA>タスクB>タスクC
さらに、セマフォ資源の内、ID1のセマフォ資源は、2つのタスクが使用でき、メモリ資源の内、ID1のメモリ資源は、1つしか使用できないものとする。
図8は、この条件において、タスクAとBの間で発生するデッドロックの検出と、デッドロックの発生を通知する例を示す。
図8は、一般的なOSを利用するアプリケーションにおいて、デッドロックの発生に対する対策処理がユーザあるいはOSによって行われていない場合における、デッドロックの事象が発生するまでの経過の例を示し、時刻t7において、ID1のメモリ資源を、タスクAが獲得しようとした結果、タスクAとタスクBの間でデッドロックが発生していることを示している。デッドロックが発生していることについては、後で詳述する。
また、図9は、図8の場合におけるタスク情報管理テーブルTITと、セマフォとメモリの各資源情報管理テーブルRITの状態を説明するための図である。
図8に示すように、タスクAは、待ち状態、具体的にはID1のメモリ資源が空くのを待っている状態から、時刻t6において実行状態に遷移し、その後時刻t8において待ち状態に遷移している。タスクBは、実行状態から、時刻t3において、待ち状態に遷移している。さらに、タスクCは、実行可能状態から、時刻t3において、実行状態に遷移し、その後時刻t6において実行可能状態に遷移し、さらに時刻t8において実行状態に遷移している。
具体的に、各タスクの資源の獲得について説明する。タスクCがID1のセマフォ資源を既に獲得しており、タスクBは、時刻t1においてID1のセマフォ資源を獲得している。さらにタスクBは、さらに時刻t2において、ID1のメモリ資源を獲得しようとするが、ID1のメモリ資源は既にタスクCによって使用されているため、獲得できず、その結果、時刻t3において、タスクBは実行状態から待ち状態に遷移する。
タスクCは、時刻t3において実行状態になり時刻t4において、ID1のメモリ資源を返却し、ID1のメモリ資源は、使用可能状態となる。図8では、時刻t4から、ID1のメモリ資源の残り資源は1になっている。
その結果、ID1のメモリ資源の空きを待っている、タスクB、Cよりも優先度の高いタスクAが、待ち状態から実行状態に遷移し、時刻t6において、ID1のメモリ資源を獲得している。
タスクAが実行中に、ID1のセマフォ資源を獲得しようとするが、ID1のセマフォ資源に残りはなく、タスクAはID1のセマフォ資源を獲得できない。
図9は、時刻t7直前における3つのタスクの状態と資源の保有状況、および資源の状態を示す。
図9のタスク情報管理テーブルTITに示すように、タスクAは、IDが1であり、優先度が3であり、実行状態にあり、セマフォ資源は使用しておらず、メモリ資源を使用していることを示している。メモリ資源を使用していることは、タスク情報管理テーブルTITのフィールド35にMEMTBLが記憶されていることにより示されている。
図9のタスク情報管理テーブルTITに示すように、タスクAは、IDが1であり、優先度が3であり、実行状態にあり、セマフォ資源は使用しておらず、メモリ資源を使用していることを示している。メモリ資源を使用していることは、タスク情報管理テーブルTITのフィールド35にMEMTBLが記憶されていることにより示されている。
タスクBは、IDが2であり、優先度が5であり、待ち状態にあり、セマフォ資源を使用しており、ID1のメモリ資源が空くのを待っていることを示している。セマフォ資源を使用していることは、タスク情報管理テーブルTITのフィールド34にSEMTBLが記憶されていることにより示されている。ID1のメモリ資源が空くのを待っていることは、タスク情報管理テーブルTITのフィールド35に1が記憶されていることにより示されている。
タスクCは、IDが3であり、優先度が7であり、実行可能状態にあり、セマフォ資源を使用しており、メモリ資源が空くのは待っていないことを示している。セマフォ資源を使用していることは、タスク情報管理テーブルTITのフィールド34にSEMTBLが記憶されていることにより示されている。メモリ資源が空くのを待っていないことは、タスク情報管理テーブルTITのフィールド35に0が記憶されていることにより示されている。
図9のオブジェクト情報管理テーブルOITは、ワーニング事象通知部12によって、ログ情報を受信する度に最新の状態に更新される。
図9の資源情報管理テーブルRIT(SEMTBL)に示すように、ID1のセマフォ資源については、フィールド42にそれぞれ、ID2に対応する2とID3に対応する3とが記憶されていることから、タスクID2のタスクBとタスクID3のタスクCによって使用されており、フィールド43には、それぞれのタスクがID1のセマフォ資源を獲得したときのプログラムカウンタのアドレス(すなわち位置)が記憶されている。
ID1のセマフォ資源は、2つのタスクを超えて使用はできないので、残り資源が無い(ゼロ)である。
図9の資源情報管理テーブルRIT(MEMTBL)に示すように、ID1のメモリ資源については、フィールド42に、ID1に対応する1が記憶されていることから、ID1のタスクAによって使用されており、フィールド43には、タスクAがID1のメモリ資源を獲得したときのプログラムカウンタのアドレス(すなわち位置)が記憶されている。
ID1のメモリ資源は、1つのタスクを超えて使用はできないので、残り資源が無い(ゼロ)である。
図9に示すような状態で、時刻t7において、タスクAが、ID1のセマフォオブジェクトの獲得のためにサービスコール「wai_sem」を発行すると、その結果、OS16は、ID1のセマフォ資源の残りが無いために、資源獲得失敗の処理を行う。
この資源獲得失敗のイベントの発生により、ログ生成部18は、図10に示すログ情報LDを出力する。図10のログ情報LDは、上記のサービスコールの発行のイベントに応じて生成され、ログ出力部17を介して、ホストコンピュータ2のワーニング事象解析部12に入力される。
図10は、資源獲得失敗のイベントにおいて生成されるログ情報LDの例を示す図である。図10のログ情報LDは、セマフォの獲得のためのサービスコールについて、サブコードにおいて「獲得失敗」の結果であったこと、獲得しようとした資源は「セマフォID1」であり、獲得しようとしたタスクは、「タスクID1」であり、プログラムカウンタは「当該サービスコールを発行したときのアドレス」であることを示している。特に、サブコード22は、サービスコールの発行に対して、資源の獲得に失敗したことを示すエラーコードである。後述するように、このエラーコード22に基づいて、タスクが資源の獲得に失敗したことが判定される。
ワーニング事象通知部12は、ログ情報LDを受信すると、所定の処理を実行する。図11は、ワーニング事象通知部12がログ情報LDを受信したときの処理の流れの例を示すフローチャートである。
図11を用いて、上述したサービスコールによる資源の獲得に失敗したときに、ワーニング事象通知部12がデッドロックの発生を検出する処理について説明する。
まず、ワーニング事象通知部12は、受信したログ情報LDから、ログ情報のイベントはサービスコールに関するものであるか否かを判定する(ステップS1)。ログ情報のイベントがサービスコールに関するものでないときは、ステップS1でNOとなり、処理は、その他の処理に移行する(ステップS2)。
ログ情報のイベントがサービスコールに関するものであるときは、ステップS1でYESとなり、ワーニング事象通知部12は、サービスコールを発行したタスクが行った処理内容、すなわちサービスコールの内容を確認する(ステップS3)。この処理内容の確認は、ログ情報LDにおけるデータフィールド21と23を参照することによって行われる。
続いて、ワーニング事象通知部12は、サービスコールの発行結果を確認する(ステップS4)。この発行結果の確認は、ログ情報LDにおけるデータフィールド22を参照することによって行われる。
確認後、資源獲得のサービスコールが失敗しているか否かの判定がされる(ステップS5)。サービスコールが失敗していない場合は、ステップS5でNOとなり、続いて、サービスコールが正常に発行されて成功しているか否かの判定がされる(ステップS6)。ステップS1からS5の処理が、ログ情報LDを解析して、各タスクの状態、及び各タスクが使用する各資源の使用状態を検出するログ情報解析部を構成する。
ステップS6において、NOとなる場合、すなわち正常発行されなかったときは、処理は、その他の処理に移行する(ステップS7)。ステップS6において、YESとなる場合、すなわち正常発行されたときは、処理は、終了する。
ステップS5において、YESの場合、すなわち、資源獲得のためのサービスコールが、資源を獲得できずに失敗した場合、ワーニング事象通知部12は、そのサービスコールを発行したタスクを確認し、タスク情報管理テーブルTITの中のそのタスクの状態をセマフォID1の待ち状態に更新する(ステップS8)。ステップS8の処理が、ログ情報LDを解析して得られたタスクの状態情報と資源の使用状態の情報を記憶するデータ記憶部13の情報を更新する情報更新部を構成する。
図12は、ステップS8の処理の結果の状態を示すタスク情報管理テーブルTITの内容を示す図である。図12に示すように、タスクAについては、タスクが待ち状態にあり、ID1のセマフォ資源が空くのを待っていることを示す1の情報が、タスク情報管理テーブルTITに記憶されている。図12において、タスクAについて、ID1のセマフォ資源が空くのを待っていることを示す1の情報は、資源が空くのを待っていることを示す空き待ち情報である。この空き待ち情報に基づいて、タスクがどの資源について空くのを待っているのかを検出することができる。
そして、ワーニング事象通知部12は、タスク情報管理テーブルTITと資源情報管理テーブルRITとから、獲得に失敗した資源を保有するタスクを探索する(ステップS9)。タスクAがID1のセマフォ資源を獲得しようしているので、この探索は、図9の場合、タスク情報管理テーブルTITのフィールド34を、例えば順番に、探索して、セマフォテーブルを参照していることを示す「SEMTBL」の有無をチェックし、さらに、そのセマフォの資源情報管理テーブルRIT(SEMTBL)のフィールド42を、例えば、順番に探索して、資源を獲得しているタスクIDをチェックすることによって行われる。
図9の場合、まず、タスク情報管理テーブルTITから、タスクIDが2と3のフィールド34に「SEMTBL」があり、さらに、セマフォの資源情報管理テーブルRIT(SEMTBL)のフィールド42に、タスクIDが2と3のタスクがID1のセマフォを使用している。よって、ワーニング事象通知部12は、タスクAが獲得に失敗した資源を保有しているのが、タスクBとCであることを判定することができる。
なお、図11の処理では、図9のタスク情報管理テーブルTITのフィールド34を順番に確認し、「SEMTBL」があれば、セマフォの資源情報管理テーブルRIT(SEMTBL)のフィールド42を順番に確認するので、最初に、タスクBが、タスクAが獲得に失敗した資源を、保有していると判定する。
続いて、探索して得られたタスクは、サービスコールを発行したタスクが保有する資源の獲得待ちの状態にあるか否かが判断される(ステップS10)。この判断は、サービスコールを発行したタスクについて、タスク情報管理テーブルTITと資源情報管理テーブルRITをチェックすることによって行われる。
タスクAがそのサービスコールを発行したタスクであるので、図9の場合、ワーニング事象通知部12は、タスク情報管理テーブルTITにおける、タスクAのレコードについて、使用している資源の有無をチェックし、さらに使用している資源は、メモリであるので、そのメモリについての資源情報管理テーブルRIT(MEMTBL)をチェックすると、ID1のメモリ資源をタスクAが使用していることが判断される。さらに、ID1のメモリ資源をタスクAが使用しているので、ワーニング事象通知部12は、そのID1のメモリ資源を、タスクBが空くのを待っているか否かを、タスク情報管理テーブルTITにおけるタスクBのフィールド35を確認することによって行う。タスクBについては、資源が空くのを待っていることを示す空き待ち情報として、ID1のメモリを待っていることを示す1がフィールド35に記憶されている。
よって、図9に示す場合は、タスクAが獲得に失敗した資源(ID1のセマフォ資源)を保有するタスクBが、タスクAの保有する資源(ID1のメモリ資源)が空くのを待っていることなる。すなわち、ワーニング事象通知部12は、タスクAとBの間で、資源の獲得におけるデッドロックが発生していることを、判定することができる。ステップS9とS10が、ログ情報LDの入力に応じて、各タスクの状態と各タスクが使用する資源の使用状態の情報に基づいて、タスク間でのデッドロック状態を検出するタスク状態検出部を構成する。
よって、ステップS10において、YESの場合、すなわち探索して得られたタスクは、サービスコールを発行したタスクが保有する資源の獲得待ちの状態にある場合、ワーニング事象通知部12は、デッドロックが発生していること、出力装置4にメッセージ等を出力することによって、ユーザに通知する(ステップS11)。
さらに、ワーニング事象通知部12は、獲得に失敗した資源を保有するタスクが、その資源を獲得したときのプログラムカウンタの値(アドレス)をデッドロック発生の原因推定位置として出力することによって、ユーザに通知し(ステップS12)、処理は終了する。ステップS11とS12が、タスク間でデッドロック状態が発生したことを示す発生情報を出力する発生情報出力部を構成する。
なお、ステップS10でNOの場合、すなわち、すなわち探索して得られたタスクが、サービスコールを発行したタスクが保有する資源の獲得待ちの状態にない場合、資源情報管理テーブルRIT中の全てのタスクについて、ステップS9及びS10の処理を終了したか否かが判断される(ステップS13)。
全てのタスクについてステップS9及びS10の処理が終了していない場合は、ステップS13でNOとなり、処理は、ステップS9に戻る。
以上のように、ワーニング事象通知部12は、ステップS1からS8において、イベントの種類がサービスコールの発行である場合には、タスク情報管理テーブルTITの情報を更新する。また、ステップS5及びS6の処理において、サービスコール発行により資源獲得の成功を確認した場合は、そのまま処理を終了する。
そして、ワーニング事象通知部12は、ステップS9,10,13において、デッドロックの対象となるタスクを検出し、ステップS11,12において、デッドロックの発生及びその発生の原因推測位置の情報を通知する処理を行う。なお、ワーニング事象通知部12において受け取ったログの履歴を保管している場合は、通知する情報としては、デッドロックの発生及びその発生の原因推測位置の情報以外に、デッドロック発生時から所定の時間あるいは量だけ、過去に遡って1つあるいは複数のログ情報を出力するようにしてもよい。
なお、図8に示すように、タスクAとBの間においてデッドロックが発生した後、ターゲットボード3にあるOS16を含むソフトウエアプログラムは実行を止めずに処理を続け、時刻t8でディスパッチのイベントが発生し、タスクCが実行状態になる。例えばタスクCが、この実行状態のタイミングで保有しているセマフォオブジェクトID1の資源を返却すると、タスクAは、その資源を獲得し再び目的の処理を開始することになる。
以上のように、本実施の形態に係るワーニング事象通知部12を、ホストコンピュータ2に設け、デッドロックの検出および通知処理を行うようにしたため、OS16を含むソフトウエアプログラムが高速に処理されている間においても、ほぼリアルタイムにデッドロックの検出と通知が可能になり、ユーザはデッドロックの発生を容易に認識することができる。
また、プログラムの処理は継続して実行されるため、あるタスク間にデッドロックが発生する場合でも、ユーザの判断でプログラムの停止あるいは継続、処理結果の妥当性判断が可能になる。更には、デッドロック状態の発生を探し出すために従来必要とされていた、プログラム実行停止後のログ解析の手間と知識、技術を必要としなくなる。
(第2の実施の形態)
次に、本発明の第2の実施の形態について説明する。以下、第2の実施の形態について、図面を用いて説明するが、プログラム開発システムの構成は、第1の実施の形態のシステムと同様であるので、第1の実施の形態と同じ構成要素については、同じ符号を用いて説明は省略する。本実施の形態では、ワーニング事象通知部12が、プログラムの実行中に、タスク間に優先度の逆転現象が生じた場合に、その検出と発生の通知を行う。
次に、本発明の第2の実施の形態について説明する。以下、第2の実施の形態について、図面を用いて説明するが、プログラム開発システムの構成は、第1の実施の形態のシステムと同様であるので、第1の実施の形態と同じ構成要素については、同じ符号を用いて説明は省略する。本実施の形態では、ワーニング事象通知部12が、プログラムの実行中に、タスク間に優先度の逆転現象が生じた場合に、その検出と発生の通知を行う。
以下、例を用いて説明する。図13は、タスクと資源の状態の変化を説明するための図である。図13は、優先度逆転現象が発生するまでの経過を示している。
図13の例では、3つのタスクL,M,Nを含む、タスク及びハンドラにより構成されるアプリケーションプログラムにおいて、タスクLの優先度は3で、タスクMの優先度は5で、タスクNの優先度は7で、3つのタスクにおける優先度は以下の関係にある。
図13の例では、3つのタスクL,M,Nを含む、タスク及びハンドラにより構成されるアプリケーションプログラムにおいて、タスクLの優先度は3で、タスクMの優先度は5で、タスクNの優先度は7で、3つのタスクにおける優先度は以下の関係にある。
タスクL>タスクM>タスクN
さらに、本実施の形態では、セマフォ資源は、1つのタスクのみが使用できないものとする。
図13は、この条件において、タスクLとMの間で発生する優先度逆転現象の発生の検出と、優先度逆転現象の発生を通知する例を示す。
さらに、本実施の形態では、セマフォ資源は、1つのタスクのみが使用できないものとする。
図13は、この条件において、タスクLとMの間で発生する優先度逆転現象の発生の検出と、優先度逆転現象の発生を通知する例を示す。
図13は、一般的なOSを利用するアプリケーションにおいて、優先度逆転現象の発生に対する対策処理がユーザあるいはOSによって行われていない場合における、優先度逆転現象の発生の事象が発生するまでの経過の例を示し、時刻t23において、ID1のセマフォ資源を、タスクLが獲得しようとした結果、タスクLとタスクMの間で優先度逆転現象が発生していることを示している。優先度逆転現象の発生については、後で詳述する。
時刻t21において、タスクLが待ち状態で、かつタスクMが実行可能状態であるときに、タスクNが実行状態においてセマフォ資源を獲得し、セマフォ資源の残りは0になった後に、ディスパッチが発生してタスクLに実行権が移動している。
さらに、時刻t23において、タスクLがセマフォ資源を獲得しようとしたが、セマフォ資源はタスクNが獲得しているので、獲得できず、その後の時刻t24において、ディスパッチが発生して、タスクMが実行状態になっている。すなわち、優先度の高いタスクLから、タスクLよりも優先度の低いタスクMが実行状態になっており、優先度逆転現象が発生している。
時刻t23の直前における3つのタスクL,M,Nの状態は、図14に示す通りである。図14は、図13の場合におけるタスク情報管理テーブルTITと、セマフォの資源情報管理テーブルRITの状態を説明するための図である。図14に示すように、タスクNはセマフォ資源を獲得しており、セマフォ資源の資源情報管理テーブルRITにも、ID1のセマフォ資源がタスクNによって獲得されていることを示すデータが記憶されている。
時刻t23において、タスクLがセマフォ資源を獲得しようとして、その獲得に失敗すると、第1の実施の形態において説明した図10に示すようなログ情報LDが、ログ生成部18により生成される。その結果、ワーニング事象通知部12は、ログ出力部17を介して、そのログ情報LDを取得する。
ワーニング事象通知部12は、上述した図11のステップS1において、そのログ情報LDを受信すると、上述した図11の処理を実行するので、上述したデッドロックの発生していないことが確認される。
OS16は、タスクLの状態が待ち状態に遷移したことに起因してタスクスケジューリングを行い、時刻t24においてタスクのディスパッチが発生する。このディスパッチのイベントにより、ログ生成部18は、図15に示すログ情報LDをワーニング事象解析部12に供給する。ワーニング事象解析部12は、受け取ったそのログ情報LDに基づいて図16の処理を実行する。図15は、ディスパッチの発生に基づいて生成されたログ情報の構成を示す図である。図15のログ情報LDは、ディスパッチのイベントに応じて生成された情報である。図16は、ディスパッチに応じて、実行される処理の流れの例を示すフローチャートである。このとき、イベントの種類は、ディスパッチの発生である。
図11のステップS1において、ログ情報のイベントがディスパッチである場合、NOとなって、処理は、ステップS2へ移行する。ステップS2の処理は、図16に示す処理を含む。
図16のステップS21において、ログ情報LDがディスパッチに関するか否かが判断され、ディスパッチに関するものなければ、処理は、その他の処理へ移行する(ステップS22)。ステップS21の処理が、ログ情報LDを解析して、各タスクの状態、及び各タスクが使用する各資源の使用状態を検出するログ情報解析部を構成する。
ワーニング事象通知部12は、ログ情報LDがディスパッチに関するものである場合、データ記憶部13におけるタスク情報管理テーブルTITにおいて、ディスパッチ後のタスクIDのタスクを実行状態に更新し、かつディスパッチ前のタスクIDのタスクを実行可能状態に更新する(ステップS23)。図13の場合、ワーニング事象通知部12は、タスクMを実行可能状態から実行状態に更新し、ディスパッチ前のタスクである実行タスクLを実行状態から待ち状態に更新する。ステップS23の処理が、ログ情報LDを解析して得られたタスクの状態情報と資源の使用状態の情報を記憶するデータ記憶部13の情報を更新する情報更新部を構成する。
図17は、ステップS23の処理後のタスク情報管理テーブルTITの内容を示す図である。図17に示すように、タスクLについては、待ち状態になり、かつ、ID1のセマフォ情報の開放を待っていることを示す1に更新され、タスクMについては、実行状態になっていることを示す情報に更新されている。
次に、ワーニング事象通知部12は、ディスパッチ後に実行状態のタスクよりも優先度が高いタスクであって、かつ待ち状態のタスクを探索する(ステップS24)。
ワーニング事象通知部12は、図17に示すように、タスク情報管理テーブルTITを参照することによって、ディスパッチ後に実行状態のタスクMよりも優先度が高いタスクであって、かつ待ち状態のタスクとして、タスクLを探索して抽出する。
次に、ワーニング事象通知部12は、その待ち状態のタスクが、低い優先度のタスクが保有する資源の開放を待っているか否かを判断する(ステップS25)。
本例では、待ち状態のタスクLが、優先度の低いタスクNが保有する資源の開放を待っていることが検出される。ステップS24とS25が、ログ情報LDの入力に応じて、各タスクの状態と、各タスクが使用する資源の使用状態の情報に基づいて、タスク間での優先度逆転状態の発生を検出するタスク状態検出部を構成する。
よって、その場合、ステップS25でYESの場合となって、ワーニング事象通知部12は、実行状態のタスクと、資源の開放を待っているタスク間で優先度逆転の現象が発生していることを、メッセージデータ等を出力装置4に出力することによって、ユーザに通知する(ステップS26)。
そして、ワーニング事象通知部12は、優先度の高いタスクが資源獲得に失敗し、優先度の低いタスクがその資源を獲得したときのプログラムカウンタの値を、資源情報管理テーブルRITから読み出して、優先度逆転現象発生の原因推定位置として通知する(ステップS27)。ステップS26とS27が、タスク間で優先度逆転状態が発生したことを示す発生情報を出力する発生情報出力部を構成する。
以上のように、図16の処理によれば、ワーニング事象通知部12は、イベントの種類がディスパッチの発生である場合、タスク情報管理テーブルTITの情報を更新し、さらに、ステップS24、S25において、優先度逆転の対象となるタスクを検出し、ステップS26,S27において、優先度逆転の発生と、その発生の原因推測位置を通知する。
よって、本実施の形態に係るホストコンピュータ2はワーニング事象通知部12を備えて、優先度逆転現象の発生の検出およびその通知処理を行うため、OS16を含むソフトウエアプログラムが高速に処理されている間においても、ほぼリアルタイムに優先度逆転現象の発生の検出とその通知を可能となり、ユーザは優先度逆転現象の発生を容易に認識することができる。更には、ユーザは、優先度逆転現象の発生を探し出すために従来必要とされていた、プログラム実行停止後のログ解析の手間、知識、及び技術を必要としなくなる。
(第3の実施の形態)
次に、本発明の第3の実施の形態について説明する。以下、第3の実施の形態について、図面を用いて説明するが、第1の実施の形態と同じ構成要素については、同じ符号を用いて説明は省略する。本実施の形態では、開発者が所望する特定の状態を示す情報を通知条件として設定することができ、ワーニング事象通知部12が、その設定された条件に合致するか否かの解析を行い、条件に合致したときに、条件に合致したことを通知する。
次に、本発明の第3の実施の形態について説明する。以下、第3の実施の形態について、図面を用いて説明するが、第1の実施の形態と同じ構成要素については、同じ符号を用いて説明は省略する。本実施の形態では、開発者が所望する特定の状態を示す情報を通知条件として設定することができ、ワーニング事象通知部12が、その設定された条件に合致するか否かの解析を行い、条件に合致したときに、条件に合致したことを通知する。
以下、例を用いて説明する。図18は、本実施の形態に係わるプログラム開発システムの構成を示す構成図である。
図18に示すように、プログラム開発システム1Aは、入力装置5を有し、ワーニング事象通知部12Aは、通知条件管理部12aと、通知条件解析部12bとを含む。ワーニング事象通知部12Aは、外部から、ここでは入力装置5から、設定された通知条件と、データ記憶部13Aの解析情報の状態とが、一致したときには、ワーニング事象通知部12Aが、出力装置4に通知条件と解析情報の状態が一致したことを、ユーザに通知するための出力信号を出力する。
図18に示すように、プログラム開発システム1Aは、入力装置5を有し、ワーニング事象通知部12Aは、通知条件管理部12aと、通知条件解析部12bとを含む。ワーニング事象通知部12Aは、外部から、ここでは入力装置5から、設定された通知条件と、データ記憶部13Aの解析情報の状態とが、一致したときには、ワーニング事象通知部12Aが、出力装置4に通知条件と解析情報の状態が一致したことを、ユーザに通知するための出力信号を出力する。
通知条件管理部12aは、ユーザによって入力装置5から入力された通知条件の情報を、データ記憶部13Aの通知条件記憶部13cに記憶し、設定する。すなわち、通知条件管理部は、通知条件として1以上のタスク及び1以上の資源の少なくとも1つの状態を、通知条件記憶部13cに設定し記憶するための処理部である。また、その設定された通知条件が変更されれば、通知条件管理部12aは、通知条件記憶部13cに記憶された通知条件のデータの変更を行う。通知条件管理部12aは、通知条件として1以上のタスク及び1以上の資源の少なくとも1つの状態を設定し記憶する通知条件管理部を構成する。
通知条件解析部12bは、通知条件の書式情報から、通知条件の意味を解析する処理部である。通知条件解析部12bは、ログ情報LDの入力に応じて、データ記憶部13Aに記憶された各タスクの状態あるいは資源の使用状態が、通知条件に一致するか否かを判断する通知条件一致判断部を構成する。
通知条件は、データ記憶部13Aに記憶されたタスク情報記憶部13aと、資源情報記憶部13bとに記憶されたデータに関して、通知を要求するオブジェクトの状態を、タスクIDと列、列と数量、等により指定される。
ここでは、ユーザの利便性を考慮して、各テーブルの各列にユニークな識別名を付与することによって、ユーザにとって通知条件の可読性を良くして、通知条件の認識、設定及び変更が容易にしている。
具体的には、タスク情報管理テーブルTITにおいて、タスクIDをTSKID、優先度をPRI、タスクの状態をSTATE、セマフォ資源の保有情報をSEM、そして、メモリ資源の保有情報をMEMとしている。
また、資源情報管理テーブルRITにおいては、オブジェクトの種類毎に、各列が識別される。セマフォIDをSEMID、セマフォ資源を獲得したタスクIDをGETID_SEM、その獲得した位置をGETPC_SEM、メモリIDをMEMID、メモリ資源を獲得したタスクIDをGETID_MEM、その資源を獲得した位置をGETPC_MEMとしている。
また、資源情報管理テーブルRITにおいては、オブジェクトの種類毎に、各列が識別される。セマフォIDをSEMID、セマフォ資源を獲得したタスクIDをGETID_SEM、その獲得した位置をGETPC_SEM、メモリIDをMEMID、メモリ資源を獲得したタスクIDをGETID_MEM、その資源を獲得した位置をGETPC_MEMとしている。
通知条件は、ここでは、次のような2つの書式で与えることとする。
書式A)
ID識別名(id)=識別名(条件[,number])[,識別名(条件[,number])]
書式B)
ID識別名(id)=number
ここで、[]内は省略することができる。
書式A)
ID識別名(id)=識別名(条件[,number])[,識別名(条件[,number])]
書式B)
ID識別名(id)=number
ここで、[]内は省略することができる。
以下に例を示すが、通知条件として、各オブジェクト情報管理テーブルに保管されるデータが指定される。さらに、書式A)あるいはB)を and や or で接続することができ、2つあるいはそれ以上をandで接続する場合は、接続される各書式が表現するオブジェクトの状態をすべて満たす場合を検出し、orで接続する場合は、接続される各書式で表現するオブジェクトの状態のいずれかを満たす場合を検出する。以下に、いくつかの指定例を示す。
例1)タスクID1が待ち状態になったことを検出したい場合:
TSKID(1)=STATE(WAITING)
例2)タスクID2がセマフォID1の開放待ち状態で、且つタスクID3がセマフォID1を保有し、実行状態になったことを検出したい場合:
TSKID(2)=SEM(1),STATE(WAITING) and TSKID(3)=STATE(RUNNING) and
SEMID(1)=GETID_SEM(3)
例3)セマフォID2が3つ獲得されたことを検出したい場合:
SEMID(2)= 3
例4)セマフォID1がタスクID3によって2つ獲得されたことを検出したい場合:
SEMID(1)=GETID_SEM(3,2)
例5)タスクID1が実行状態、あるいはタスクID2が実行状態になったことを検出したい場合:
TSKID(1)=STATE(RUNNING) or TSKID(2)=STATE(RUNNING)
このような書式の通知条件は、入力装置5から入力され、通知条件管理部12aによって、データ記憶部13Aの通知条件記憶部13cに記憶される。なお、通知条件を入力するタイミングは、ターゲットボード3において、OS16を含むソフトウエアプログラムが実行中の時、通知条件管理部12aから通知条件記憶部13cに通知条件の情報を保管することが可能である。なお、通知条件管理部12aに通知条件の情報を渡す方法は、前記の入力装置5から入力する方法に限らず、ソフトウエアプログラム開発ツール11にインターフェース部を設け、ソフトウエアプログラム開発ツール11から通知条件の情報を入力するようにしてもよい。
TSKID(1)=STATE(WAITING)
例2)タスクID2がセマフォID1の開放待ち状態で、且つタスクID3がセマフォID1を保有し、実行状態になったことを検出したい場合:
TSKID(2)=SEM(1),STATE(WAITING) and TSKID(3)=STATE(RUNNING) and
SEMID(1)=GETID_SEM(3)
例3)セマフォID2が3つ獲得されたことを検出したい場合:
SEMID(2)= 3
例4)セマフォID1がタスクID3によって2つ獲得されたことを検出したい場合:
SEMID(1)=GETID_SEM(3,2)
例5)タスクID1が実行状態、あるいはタスクID2が実行状態になったことを検出したい場合:
TSKID(1)=STATE(RUNNING) or TSKID(2)=STATE(RUNNING)
このような書式の通知条件は、入力装置5から入力され、通知条件管理部12aによって、データ記憶部13Aの通知条件記憶部13cに記憶される。なお、通知条件を入力するタイミングは、ターゲットボード3において、OS16を含むソフトウエアプログラムが実行中の時、通知条件管理部12aから通知条件記憶部13cに通知条件の情報を保管することが可能である。なお、通知条件管理部12aに通知条件の情報を渡す方法は、前記の入力装置5から入力する方法に限らず、ソフトウエアプログラム開発ツール11にインターフェース部を設け、ソフトウエアプログラム開発ツール11から通知条件の情報を入力するようにしてもよい。
ワーニング事象通知部12Aでは、第1の実施の形態及び第2の実施の形態において示した図11及び図16の処理の終了に引き続いて、図19の処理を実行することにより、条件一致の検出とその通知を行うことができる。
図19は、第3の実施の形態に係わる処理の流れの例を示すフローチャートである。
まず、ワーニング事象通知部12Aは、データ記憶部13Aの通知条件記憶部13cに記憶されている通知条件を参照する(ステップS31)。
まず、ワーニング事象通知部12Aは、データ記憶部13Aの通知条件記憶部13cに記憶されている通知条件を参照する(ステップS31)。
その参照の結果、ワーニング事象通知部12Aは、通知条件記憶部13cに通知条件が記憶すなわち保管されているか否かを判断する(ステップS32)。通知条件が記憶されていなければ、ステップS32でNOとなり、処理は終了する。
通知条件が1つ以上記憶されているときは、ステップS32でYESの場合となり、ワーニング事象通知部12Aは、通知条件解析部12bを用いて、通知条件記憶部13cに記憶された通知条件を一つずつ抽出して通知条件を解析する(ステップS33)。この解析において、通知条件の書式から条件の意味が得られる。ステップS33は、記憶された通知条件を解析する通知条件解析部を構成する。
そして、ワーニング事象通知部12Aは、通知条件解析部12bによって得られた解析情報に基づいて、抽出した通知条件におけるID識別名を、タスク情報管理テーブルTITあるいは資源情報管理テーブルRITから探索する(ステップS34)。
ワーニング事象通知部12Aは、探索の結果得られたオブジェクト情報管理テーブルにおけるID識別名があれば、そのID識別名のオブジェクトについての状態情報と、通知条件とが一致するか否かの判断を行う(ステップS35)。
ワーニング事象通知部12Aは、探索の結果得られたオブジェクト情報管理テーブルにおけるID識別名があれば、そのID識別名のオブジェクトについての状態情報と、通知条件とが一致するか否かの判断を行う(ステップS35)。
ID識別名のオブジェクトについての状態情報と通知条件とが一致する場合、ステップS35でYESとなり、ワーニング事象通知部12Aは、条件一致を通知し(ステップS36)、処理は終了する。すなわち、ワーニング事象通知部12Aは、設定された通知条件に一致した状態が発生したことを通知するために、所定のメッセージ等の出力信号を出力装置4に出力する。ステップS36は、通知条件解析部12bによって、データ記憶部13Aに記憶された各タスクの状態あるいは資源の使用状態が、通知条件に一致すると判断されたときに、所定の情報を出力する一致情報出力部を構成する。
また、ID識別名のオブジェクトについての状態情報と通知条件とが一致しない場合、あるいはID識別名のオブジェクトについての状態情報が存在しない場合は、ステップS35でNOとなり、ワーニング事象通知部12Aは、抽出した通知条件の全てについてステップS34及びS35の処理を実行したか否かを判断する(ステップS37)。
抽出した通知条件の全てについてステップS34及びS35の処理を実行していれば、ステップS37においてYESの場合となり、処理は終了する。抽出した通知条件の全てについてステップS34及びS35の処理を実行していないときは、ステップS37でNOとなり、処理は、ステップS34に移行する。
以上のように、本実施の形態によれば、ステップS31とS32において、所定の書式の通知情報の入力が確認される。そして、通知条件管理部12aによって、データ記憶部13Aの通知条件記憶部13cに、通知条件の情報が保持されている場合は、ステップS33において、通知条件解析部12aを用いて書式情報を解析し、通知条件の意味理解が行われる。解析された通知条件の情報を用いて、ステップS34からS37の処理においてオブジェクト情報管理テーブルOITから、通知が要求されているオブジェクトの状態情報を探し出す。そして、得られたオブジェクトの状態と条件とが一致した場合は、ステップS36においてその条件一致の発生したことを通知する。
上述したように、第1の実施の形態あるいは第2の実施の形態において、デッドロックあるいは優先度逆転現象の通知が必要としない場合においても、図11のステップS8よりも後の処理、及び図16のステップS23よりも後の処理は実行されず、図19の処理が実行されるので、開発者が知りたいオブジェクト状態、すなわち開発者が所望する特定の状態だけを検出することができる。
以上のように、第3の実施の形態によれば、ユーザは、OS16が管理する1以上のオブジェクトについて、ある所望の特定の状態を検出するにあたり、OS16の管理項目と検出したい条件内容により指定することができる。特に、上述した通知条件の設定方法によれば、開発者であるユーザは、メモリ、レジスタ等を意識する必要がなくなり、開発者にとっては通知条件の可読性及び設定操作性が良い。
また、その条件を任意のタイミングで入力装置5から入力することができ、かつワーニング事象通知部12が、その条件に一致したときにほぼリアルタイムに、条件一致の検出とその通知をできる。そのため、従来のように、プログラム実行停止後にログ解析してその条件を探す、あるいは変数、メモリ、レジスタの変化の検出を組み合わせて条件に一致する状態を探し出す、といった作業の手間や知識、技術を必要としなくなる。
以上のように、上述した各実施の形態のデバッグ装置によれば、プログラムの開発時に、デッドロックの発生あるいは優先度逆転現象の発生を検出することができる。
なお、本明細書における各「部」は、実施の形態の各機能に対応する概念的なもので、必ずしも特定のハードウエアやソフトウエア・ルーチンに1対1には対応しない。従って、本明細書では、実施の形態の各機能を有する仮想的回路ブロック(部)を想定して実施の形態を説明した。また、本実施の形態における各手順の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、あるいは実行毎に異なった順序で実行してもよい。
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
1、1A プログラム開発システム、2、2A ホストコンピュータ、3 ターゲットボード、4 出力装置、5 入力装置、11 プログラム開発ツール、12、12A ワーニング事象通知部、12a 通知条件管理部、12b 通知条件解析部、13 データ記憶部、13a タスク情報記憶部、13b 資源情報記憶部、13c 通知条件記憶部、15 アプリケーションプログラム、16 OS、17 ログ出力部、18 ログ生成部、19 ケーブル
Claims (5)
- プログラムの実行中にオペレーティングシステムにおいて発生するイベントに応じて生成されるログ情報を解析して、前記プログラムの各タスクの状態と前記各タスクが使用する資源の使用状態を検出するログ情報解析部と、
該ログ情報解析部によって解析して得られた前記各タスクの状態の情報と前記各タスクが使用する資源の使用状態の情報を記憶する状態情報記憶部と、
前記ログ情報の入力に応じて、前記各タスクの状態と前記各タスクが使用する資源の使用状態の情報に基づいて、タスク間でのデッドロック状態またはタスク間での優先度逆転状態の発生を検出するタスク状態検出部と、
該タスク状態検出部によって検出された前記タスク間でのデッドロック状態または前記タスク間での優先度逆転状態が発生したことを示す発生情報を出力する発生情報出力部と、
を有することを特徴とするデバッグ装置。 - 前記各タスクの状態の情報は、前記各タスクを識別するためのタスク識別情報と、前記各タスクの状態を示す状態情報と、前記各タスクの資源の獲得及び空き待ちの状態を示す資源獲得状態情報とを含み、
前記各タスクが使用する資源の使用状態の情報は、各資源を使用しているタスクの識別情報を含み、
前記タスク状態検出部は、前記タスク識別情報、前記状態情報、前記資源獲得状態情報及び前記各資源を使用しているタスクの識別情報に基づいて、第1の資源を保有する第1のタスクが第2の資源の獲得に失敗し、前記第2の資源を保有する第2のタスクが、前記第1のタスクが保有する前記第1の資源が空くのを、待っている状態にあることを検出することによって、前記タスク間でのデッドロック状態を検出することを特徴とする請求項1に記載のデバッグ装置。 - 前記各タスクの状態の情報は、前記各タスクを識別するためのタスク識別情報と、前記各タスクの優先度情報と、前記各タスクの状態情報と、前記各タスクの資源の獲得及び空き待ちの資源獲得状態情報とを含み、
前記タスク状態検出部は、前記タスク識別情報、前記状態情報及び前記資源獲得状態情報に基づいて、第1の資源が空くのを待っている第1のタスクよりも優先度の低い第2のタスクが、実行状態にあることを検出することによって、前記タスク間での優先度逆転状態の発生を検出することを特徴とする請求項1に記載のデバッグ装置。 - 通知条件として1以上のタスク及び1以上の資源の少なくとも1つの状態を設定し記憶する通知条件管理部と、
前記ログ情報の入力に応じて、前記状態情報記憶部に記憶された前記各タスクの状態あるいは前記資源の使用状態が、前記通知条件に一致するか否かを判断する通知条件一致判断部と、
前記通知条件一致判断部によって、前記状態情報記憶部に記憶された前記各タスクの状態あるいは前記資源の使用状態が、前記通知条件に一致すると判断されたときに、所定の情報を出力する一致情報出力部とを有することを特徴とする請求項1に記載のデバッグ装置。 - プログラムの実行中にオペレーティングシステムにおいて発生するイベントに応じて生成されるログ情報を解析して、前記プログラムの各タスクの状態と前記各タスクが使用する資源の使用状態を検出し、
解析して得られた前記各タスクの状態の情報と前記各タスクが使用する資源の使用状態の情報)を記憶し、
前記ログ情報の入力に応じて、前記各タスクの状態と前記各タスクが使用する資源の使用状態の情報に基づいて、タスク間でのデッドロック状態またはタスク間での優先度逆転状態の発生を検出し、
検出された前記タスク間でのデッドロック状態または前記タスク間での優先度逆転状態が発生したことを示す発生情報を出力する、
ことを特徴とするデバッグ方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007269523A JP2009098907A (ja) | 2007-10-16 | 2007-10-16 | デバッグ装置及びデバッグ方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007269523A JP2009098907A (ja) | 2007-10-16 | 2007-10-16 | デバッグ装置及びデバッグ方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009098907A true JP2009098907A (ja) | 2009-05-07 |
Family
ID=40701855
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007269523A Pending JP2009098907A (ja) | 2007-10-16 | 2007-10-16 | デバッグ装置及びデバッグ方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009098907A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100125848A1 (en) * | 2008-11-18 | 2010-05-20 | International Business Machines Corporation | Mechanisms to detect priority inversion |
JP2011232956A (ja) * | 2010-04-27 | 2011-11-17 | Clarion Co Ltd | コンピュータシステムとプログラム |
CN109445721A (zh) * | 2017-11-06 | 2019-03-08 | 贵阳朗玛信息技术股份有限公司 | 一种规范日志信息打印的方法及装置 |
-
2007
- 2007-10-16 JP JP2007269523A patent/JP2009098907A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100125848A1 (en) * | 2008-11-18 | 2010-05-20 | International Business Machines Corporation | Mechanisms to detect priority inversion |
US8689223B2 (en) * | 2008-11-18 | 2014-04-01 | International Business Machines Corporation | Mechanisms to detect priority inversion |
JP2011232956A (ja) * | 2010-04-27 | 2011-11-17 | Clarion Co Ltd | コンピュータシステムとプログラム |
CN109445721A (zh) * | 2017-11-06 | 2019-03-08 | 贵阳朗玛信息技术股份有限公司 | 一种规范日志信息打印的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6101524A (en) | Deterministic replay of multithreaded applications | |
Liu et al. | Dcatch: Automatically detecting distributed concurrency bugs in cloud systems | |
US5319645A (en) | Method for debugging and testing the correctness of programs | |
JP4888272B2 (ja) | ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置 | |
US8739133B2 (en) | Multi-threaded debugger support | |
US8136097B2 (en) | Thread debugging device, thread debugging method and information storage medium | |
US7917909B2 (en) | Detecting deadlocks in interop-debugging | |
US7992042B2 (en) | Debug support device, and program for directing computer to perform debugging method | |
US8661450B2 (en) | Deadlock detection for parallel programs | |
US20140372986A1 (en) | Timed API Rules for Runtime Verification | |
US20060070076A1 (en) | Detecting lock acquisition hierarchy violations in multithreaded programs | |
KR20040111141A (ko) | 플러그 가능한 컴포넌트들에서의 브레이크 포인트 디버깅 | |
US20070256082A1 (en) | Monitoring and controlling applications executing in a computing node | |
JP2006277115A (ja) | 異常検出プログラムおよび異常検出方法 | |
Gotovos et al. | Test-driven development of concurrent programs using Concuerror | |
JP5212357B2 (ja) | マルチcpu異常検出復旧システム、方法及びプログラム | |
JP2009037271A (ja) | 仮想計算機システムの停止方法および計算機装置 | |
US20160188441A1 (en) | Testing multi-threaded applications | |
JPH06324885A (ja) | 例外条件処理方法及び装置 | |
US20120059997A1 (en) | Apparatus and method for detecting data race | |
JP2009098907A (ja) | デバッグ装置及びデバッグ方法 | |
JP2006309276A (ja) | デバッグ機構およびデバッグレジスタ | |
CN103593239A (zh) | Linux系统中应用进程命令处理的方法及装置 | |
Ma et al. | Analyzing distributed Java applications by automatic centralization | |
JPH02294739A (ja) | 障害検出方式 |