(57)【要約】【課題】  複数のタスクでリソースを保持する場合であってもシステムリソースの開放忘れを検出する。【解決手段】  システムリソースの取得及び開放を実行する１以上のタスクからなるタスク群の各タスクを識別する識別情報をシステムリソース管理テーブル６１のタスク群リンク６２に登録し、システムリソース管理テーブル６１に登録されたタスク群の処理が実行されると、各タスクにおけるシステムリソースの取得又は開放状況を検出し、この検出結果をシステムリソース管理テーブル６１のシステムリソースリンク６３に登録して更新する。タスク群の処理を終了する際、更新されたリソース管理テーブル６１のシステムリソースリンク６３に基づきシステムリソースの開放状況をチェックする。【選択図】  図１
2006331213.tif 000002
【特許請求の範囲】
【請求項１】
マルチタスクシステムにおけるシステムリソースの取得及び開放を管理するシステムリソース管理装置であって、
前記システムリソースの取得及び開放を実行する１以上のタスクからなるタスク群を管理する管理タスクと、
各タスクにおけるシステムリソースの取得又は開放状況を検出する取得開放検出部とを有し、
前記取得開放検出部は、前記タスク群のリソース取得又は開放状況を登録するリソース管理テーブルを、その検出結果に基づき更新し、
前記管理タスクは、前記リソース管理テーブルに基づき前記システムリソースの開放状況をチェックする
ことを特徴とするシステムリソース管理装置。
【請求項２】
前記管理タスクは、前記システムリソース管理テーブルにタスク群を識別する識別情報を登録する登録処理部と、前記リソース管理テーブルに登録されたタスク群の終了処理をする終了処理部とを有し、
前記取得開放検出部は、前記リソース管理テーブルに登録されたタスク群の処理が開始されると各タスクのシステムリソースの取得又は開放状況を検出し、この検出結果に基づき前記リソース管理テーブルを更新し、
前記終了処理部は、前記タスク群の処理が終了する際に、前記システムリソース管理テーブルに基づき前記システムリソースの開放状態をチェックする
ことを特徴とする請求項１記載のシステムリソース管理装置。
【請求項３】
前記管理タスクは、一のタスク群で構成されたプログラムをメモリにロードするロード処理部と、前記ロードされたプログラムを構成するタスク群の識別情報を前記リソース管理テーブルに登録する登録処理部と、前記メモリにロードしたプログラムをアンロードするアンロード処理部とを有し、
前記取得開放検出部は、前記リソース管理テーブルに登録されたタスク群から構成されるプログラムの処理が開始されると各タスクのシステムリソースの取得又は開放状況を検出し、この検出結果に基づき前記リソース管理テーブルを更新し、
前記アンロード処理部は、前記プログラムのアンロードの際に、前記システムリソース管理テーブルに基づき前記システムリソースの開放状態をチェックする
ことを特徴とする請求項１記載のシステムリソース管理装置。
【請求項４】
前記管理タスクは、システムリソースの開放忘れを検出した場合、当該検出結果をユーザに通知する
ことを特徴とする請求項１乃至３のいずれか１項記載のシステムリソース管理装置。
【請求項５】
前記管理タスクは、システムリソースの開放忘れを検出すると、当該システムリソースを開放する
ことを特徴とする請求項１乃至３のいずれか１項記載のシステムリソース管理装置。
【請求項６】
マルチタスクシステムにおけるシステムリソースの取得及び開放を管理するシステムリソース管理方法であって、
前記システムリソースの取得及び開放を実行する１以上のタスクからなるタスク群の各タスクを識別する識別情報をシステムリソース管理テーブルに登録し、
前記システムリソース管理テーブルに登録されたタスク群の処理が実行されると、各タスクにおけるシステムリソースの取得又は開放状況を検出し、
前記検出結果を前記システムリソース管理テーブルに登録して更新し、
前記タスク群の処理を終了する際、更新されたリソース管理テーブルに基づき前記システムリソースの開放状況をチェックする
ことを特徴とするシステムリソース管理方法。
【請求項７】
マルチタスクシステムにおけるシステムリソースの取得及び開放を管理するシステムリソース管理方法であって、
前記システムリソースの取得及び開放を実行する１以上のタスクからなるタスク群で構成されたプログラムをメモリにロードし、
前記メモリにロードされたプログラムを構成するタスク群の各タスクを識別する識別情報をシステムリソース管理テーブルに登録し、
前記システムリソース管理テーブルに登録されたタスク群で構成されるプログラムの処理が実行されると、各タスクにおけるシステムリソースの取得又は開放状況を検出し、
前記検出結果を前記システムリソース管理テーブルに登録して更新し、
前記プログラムを前記メモリからアンロードする際、更新されたリソース管理テーブルに基づき前記システムリソースの開放状況をチェックする
ことを特徴とするシステムリソース管理方法。
【請求項８】
マルチタスクシステムにおけるシステムリソースの取得及び開放を管理する処理をコンピュータに実行させるためのプログラムであって、
前記システムリソースの取得及び開放を実行する１以上のタスクからなるタスク群の各タスクを識別する識別情報をシステムリソース管理テーブルに登録し、
前記システムリソース管理テーブルに登録されたタスク群の処理が実行されると、各タスクにおけるシステムリソースの取得又は開放状況を検出し、
前記検出結果を前記システムリソース管理テーブルに登録して更新し、
前記タスク群の処理を終了する際、更新されたリソース管理テーブルに基づき前記システムリソースの開放状況をチェックする
ことを特徴とするプログラム。
【請求項９】
マルチタスクシステムにおけるシステムリソースの取得及び開放を管理する処理をコンピュータに実行させるためのプログラムであって、
前記システムリソースの取得及び開放を実行する１以上のタスクからなるタスク群で構成されたプログラムをメモリにロードし、
前記メモリにロードされたプログラムを構成するタスク群の各タスクを識別する識別情報をシステムリソース管理テーブルに登録し、
前記システムリソース管理テーブルに登録されたタスク群で構成されるプログラムの処理が実行されると、各タスクにおけるシステムリソースの取得又は開放状況を検出し、
前記検出結果を前記システムリソース管理テーブルに登録して更新し、
前記プログラムを前記メモリからアンロードする際、更新されたリソース管理テーブルに基づき前記システムリソースの開放状況をチェックする
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスクシステムのメモリ等のシステムリソースの取得および開放を管理するシステムリソース管理装置、システムリソース管理方法及びプログラムに関する。
【背景技術】
【０００２】
図１４は、従来のマルチタスクシステムの構成を説明する図である。従来システム１００は、ハードウェアとして、プロセッサ１０１、メモリ及び他のハードウェアリソース１０２を有する。また、ソフトウェアとして、リアルタイムＯＳを動作させる基本プログラムであるリアルタイムＯＳカーネル１１１及びシステムの初期化を行なうシステムstartup処理部１１２を有する。リアルタイムＯＳカーネル１１１は、タスクを管理するためのタスク管理モジュール１１３、リソースを管理するためのリソース管理モジュール１１４などのモジュールと、各タスクが発行するシステムコールを処理するシステムコール処理部１１５とを有する。
【０００３】
更に、各ユーザタスクを動作させるプログラムであるアプリケーションタスク１２１及びアプリケーションタスクを処理するアプリケーションハンドラ１２２を有する。また、タスク管理モジュール１１３が管理する管理情報であるリアルタイムＯＳタスク管理情報１３１、リソース管理モジュール１１４が管理する管理情報であるリアルタイムＯＳリソース管理情報１３２、及びリアルタイムＯＳカーネルが使用するリソースデータであるリアルタイムＯＳリソース１３３、並びにアプリケーションが使用するアプリケーションデータ１４１等を有する。
【０００４】
上記システムにおいては、タスクの実行が開始され、そのタスク実行中にメモリ等のシステムリソースが必要になると、システムリソースを取得するためのシステムコールを発行する。取得したシステムリソースの使用が終了して不要となると、不要となったシステムリソースを解放するためのシステムコールを発行し、システムリソースの解放を行う。タスクの全処理が終了するとタスクが終了する。
【０００５】
従来、上記のように構成されたシステムにおいて、リアルタイムＯＳ等のマルチタスクＯＳアプリケーションプログラムのシステムリソースの取得及び開放は、一般に必ず対で行うものである。しかし、アプリケーションが複雑化するとその対応付けが難しくなる。また、システムリソースを取得したタスクと開放するタスクが異なる場合もある。
【０００６】
システムリソース取得と開放の対応付けを誤ると、取得したシステムリソースが開放されず、それが蓄積されていくと空きメモリの枯渇につながり、システム動作が不安定になる場合もある。更に、プログラム領域を複数のタスク群で共有し、動的ロード機構を持ったシステムになると、上述の問題が解決されないまま、一層問題の検出が難しくなる。
【０００７】
そこで、特許文献１には、システムリソースの開放忘れを防止するためシステムリソースの管理を管理タスクで行うタスクリソース管理プログラムが開示されている。この特許文献１に記載の技術においては、アプリケーションタスクからリアルタイムＯＳへのタスク生成及び削除、タスク以外のシステムリソースの取得及び開放の要求は、管理タスクを経由して行う。それによりタスクの生成及び削除、タスク以外のシステムリソースの取得及び開放を一元管理することができる。
【特許文献１】特開２００２−３５８２０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、かかる方法において、システムリソースがタスク別の管理となっているため、複数のタスクで保持するリソースの管理が十分に行えない。更には動的プログラムロード方式を伴うシステムの場合にはリソース管理を行うことができないという問題点もある。
【課題を解決するための手段】
【０００９】
本発明にかかるシステムリソース管理装置は、マルチタスクシステムにおけるシステムリソースの取得及び開放を管理するシステムリソース管理装置であって、前記システムリソースの取得及び開放を実行する１以上のタスクからなるタスク群を管理する管理タスクと、各タスクにおけるシステムリソースの取得又は開放状況を検出する取得開放検出部とを有し、前記取得開放検出部は、前記タスク群のリソース取得又は開放状況を登録するリソース管理テーブルを、その検出結果に基づき更新し、前記管理タスクは、前記リソース管理テーブルに基づき前記システムリソースの開放状況をチェックするものである。
【００１０】
本発明においては、取得開放検出部がタスク群のリソース取得又は開放状況を登録するシステムリソース管理テーブルを、タスクのシステムリソースの取得又は開放に基づき更新し、システムリソース管理タスクがこのシステムリソース管理テーブルをチェックすることで、開放状況をチェックし、開放忘れを検出することができる。
【００１１】
本発明にかかるシステムリソース管理方法は、マルチタスクシステムにおけるシステムリソースの取得及び開放を管理するシステムリソース管理方法であって、前記システムリソースの取得及び開放を実行する１以上のタスクからなるタスク群の各タスクを識別する識別情報をシステムリソース管理テーブルに登録し、前記システムリソース管理テーブルに登録されたタスク群の処理が実行されると、各タスクにおけるシステムリソースの取得又は開放状況を検出し、前記検出結果を前記システムリソース管理テーブルに登録して更新し、前記タスク群の処理を終了する際、更新されたリソース管理テーブルに基づき前記システムリソースの開放状況をチェックするものである。
【００１２】
本発明においては、タスク群の識別情報をシステムリソース管理テーブルに登録しておき、タスクが実行されると各タスクにおけるシステムリソースの取得又は開放状況の検出結果によりそのシステムリソース管理テーブルを更新し、この更新された管理テーブルに基づきシステムリソースの管理状況をチェックすることができ、例えばシステムデバック時などに極めて有効に使用することができる。
【００１３】
本発明にかかる他のシステムリソース管理方法は、マルチタスクシステムにおけるシステムリソースの取得及び開放を管理するシステムリソース管理方法であって、前記システムリソースの取得及び開放を実行する１以上のタスクからなるタスク群で構成されたプログラムをメモリにロードし、前記メモリにロードされたプログラムを構成するタスク群の各タスクを識別する識別情報をシステムリソース管理テーブルに登録し、前記システムリソース管理テーブルに登録されたタスク群で構成されるプログラムの処理が実行されると、各タスクにおけるシステムリソースの取得又は開放状況を検出し、前記検出結果を前記システムリソース管理テーブルに登録して更新し、前記プログラムを前記メモリからアンロードする際、更新されたリソース管理テーブルに基づき前記システムリソースの開放状況をチェックするものである。
【００１４】
本発明においては、タスク群を動的にロード及びアンロードするような複雑なシステムであっても、システムリソース管理テーブルによりシステムリソースの開放状況をチェックすることができ、システムリソースの取得及び開放を完全に管理することができる。
【発明の効果】
【００１５】
本発明によるシステムリソース管理装置、システムリソース管理方法及びプログラムによれば、複数のタスクでリソースを保持する場合であってもシステムリソースの開放忘れを検出することができる。また、動的プログラムロード方式を伴うシステムであっても、システムリソースの開放忘れを検出することができる。
【発明を実施するための最良の形態】
【００１６】
実施の形態１． 
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。図１は、本実施の形態にかかるマルチタスクシステムの構成を説明する図である。本システム１０は、ハードウェアとして、プロセッサ１、メモリ及び他のハードウェアリソース２を有する。また、ソフトウェアとして、リアルタイムＯＳを動作させる基本プログラムであるリアルタイムＯＳカーネル１１及びシステムの初期化を行なうシステムstartup処理部１２を有する。リアルタイムＯＳカーネル１１は、ユーザタスクを管理するためのタスク管理モジュール１３、リソースを管理するためのリソース管理モジュール１４などのモジュールと、各ユーザタスクが発行するシステムコールを処理するシステムコール処理部１５とを有する。
【００１７】
更に、各ユーザタスクを動作させるプログラムであるアプリケーションタスク２１及びアプリケーションタスク２１を処理するアプリケーションハンドラ２２を有する。また、タスク管理モジュール１３が管理する管理情報であるリアルタイムＯＳタスク管理情報３１、リソース管理モジュール１４が管理する管理情報であるリアルタイムＯＳリソース管理情報３２、及びリアルタイムＯＳカーネルが使用するリソースデータであるリアルタイムＯＳリソース３３、並びにアプリケーションが使用するアプリケーションデータ４１等を有する。
【００１８】
そして、本実施の形態においては、この構成に更に、システムリソース管理タスク５１及びシステムリソース取得フック（hook）処理部及びシステムリソース開放フック処理部（以下、システムリソース取得／開放フック処理部という）５２、並びにシステムリソース管理テーブル６１を有する。
【００１９】
システムリソース管理タスク５１は、複数のユーザタスクからなるタスク群を管理する管理タスクであり、タスク群登録要求処理部５３及びタスク群終了要求処理部５４を有する。タスク群とは、タスクの集合を示し、タスク群を構成するタスクはそこで取得したシステムリソースを共有可能とする。更にタスク群終了要求処理部５４はシステムリソースチェック部５５を含んでいる。システムリソース管理テーブル６１は、タスク群リンク６２及びシステムリソースリンク６３を有し、タスク群を構成する各タスクの識別情報や、各タスクが取得又は開放したシステムリソースの使用状況などが登録される。
【００２０】
本実施の形態においては、システムリソース管理タスク５１のタスク群登録要求処理部５３により、タスク群がシステムリソースを取得する前に、タスク群からの登録要求により、タスク群毎に、当該タスク群を示すタスク群識別情報（タスク群ＩＤ）、各タスクを識別するタスク識別子などをシステムリソース管理テーブル６１に登録する。図２は、システムリソース管理テーブル６１を示す図である。
【００２１】
システムリソース管理テーブル６１は可変長のテーブルとなっており、タスク群ＩＤ、一のタスク群に含まれる各タスクをリンクさせるためのリンク情報を示すタスク群リンク、及びタスク群が取得したシステムリソースを登録するシステムリソースリンクの３つの要素からなり、これら３つの要素がタスク群＋１の数連続したものとなっている。
【００２２】
タスク群ＩＤは、例えば１、２、・・等、タスク群を識別するための識別番号などである。タスク群リンクは、一のタスク群に含まれる各タスクをポインタによりリストでつないだものとなっており、例えばタスク群ＩＤ＝１に含まれるタスクが、タスク識別子＝task１１、task１２、task１３・・の場合、ポインタを１２、１３・・などとすることができる。最後のタスク識別子ＩＤ＝task１ｎにおける次へのポインタはＮＵＬＬとして終端する。
【００２３】
なお、システムリソース管理テーブル６１に登録するタスクは、システムリソースの取得又は開放を行うタスクだけでよい。また、タスク識別子及びポインタを有するタスク群リンクのメモリ領域は動的に割り当てが必要であるが、リアルタイムＯＳリソースとしてのメモリ資源を利用する必要はなく、予めメモリ領域を割り当てるようにしてもよい。
【００２４】
システムリソース取得／開放フック処理部５２は、システムリソース管理テーブル６１のタスク群リンク６２にタスク識別情報が登録されたタスク群の処理が開始されると、各タスクのシステムリソースの取得及び開放状況をフックする。そして、その結果をシステムリソース管理テーブル６１のシステムリソースリング６３に登録する。すなわち、タスク群のシステムリソース取得又は開放状況を検出し、その検出結果に基づきシステムリソース管理テーブル６１を更新する取得開放検出部として機能する。
【００２５】
システムリソースリンクには、システムリソースを取得又は開放したタスクが属するタスク群のシステムリソースリンクに、当該取得又は開放したシステムリソースが登録される。システムリソースリンクは、システムリソース識別、システムリソース識別子、及び各情報をリンクさせるためのポインタからなり、終端のポインタはＮＵＬＬとして終端する。システムリソース種別としては、メモリブロックやタスクが必要とするメモリの提供・解放を行うメモリプールがある。また、同期・通信 待ち合わせ機構と通信手段として、タスク間の待ち合わせ機構であり、主に共有資源の待ち合わせに利用されるセマフォ、同じくタスク間の待ち合わせ機構であり、処理の完了などを通知する場合に利用されるイベントフラグ、及びタスク間のデータの送受信と待ち合わせ機構であり、メッセージ通信に利用されるメールボックス等がある。また、必要に応じて生成又は削除されるタスクをシステムリソースの一種として捉えることも可能である。
【００２６】
システムリソース識別子は、システムリソースにおける識別情報を示すもので、例えばシステムリソースがメモリブロックの場合はメモリブロックアクセスアドレス、セマフォの場合はセマフォＩＤ、イベントフラグの場合はイベントフラグＩＤなどとすることができる。
【００２７】
システムリソース取得／開放フック処理部５２は、これらのシステムリソースの種別毎に用意された後述するシステムリソース取得フック関数及びシステムリソース開放フック関数を利用し、タスク群の処理が開始され、あるタスクがシステムリソース取得要求として、システムリソース取得システムコールを与えられたパラメータで発行するとこれをフックする。そして、当該システムリソース取得要求を発行した発行元のタスクが属するタスク群のシステムリソースリンク６３に、当該システムリソースの取得情報を登録していく。こうして、システムリソース取得／開放フック処理部５２は、タスクのシステムリソースの取得毎、開放毎にその情報（システムリソースの使用状況）をフックしてシステムリソースリンク６３を更新する。
【００２８】
システムリソース管理タスク５１のタスク群終了要求処理部５４は、タスク群終了要求を受け取ると、当該終了要求を発行したタスク群のシステムリソース管理テーブル６１を読み出す。タスク群終了要求処理部５４に含まれるシステムリソースチェック部５５は、このシステムリソース管理テーブル６１のシステムリソースリンクに基づき、システムリソース開放忘れがないか否かをチェックし、必要に応じて当該開放忘れのシステムリソースを開放したり、ユーザに通知する処理を実行する。
【００２９】
このように、本実施の形態にかかるシステムリソース管理装置においては、システムリソース管理テーブルに各タスク群のシステムリソースリンクを有し、システムリソース取得毎、開放毎に更新して、タスク群が終了するタイミングで開放忘れのシステムリソースがあるか否かのチェック処理を行うことができるため、システムリソースの完全な管理を行うことができる。
【００３０】
次に、本実施の形態にかかるシステムリソース管理方法について詳細に説明する。図３は、本発明の実施の形態１にかかるシステム処理方法を示すフローチャートである。プロセッサ１の動作直後に、一般にリセット割り込みハンドラが起動し、その先のシステムstartup処理部１２において、ハードウェアリソース２やソフトウェアの初期化を行う（ステップＳ１００）。その後、リアルタイムシステムとして、予め登録してあるタスクを起動させる。
【００３１】
ここで、本実施の形態においては、初期登録のタスクからシステムリソース管理タスク５１を起動する（ステップＳ１０１）。このため、システムリソース管理タスク５１は他のユーザタスクよりも優先度を高く設定しておく。
【００３２】
システムリソース管理タスク５１は、先ず、最初のタスク群の登録要求を処理する（ステップＳ１０２）。ここでは、最初のタスク群を登録する際のタスク群ＩＤをgroup１とし、以下タスク群group１ということとする。ステップＳ１０２においては、タスク群group１を構成する全てのタスクをシステムリソース管理テーブル６１に登録する。ここで、task１１，task１２,・・・，task１ｎはタスク群group１に登録すべきタスク識別子（タスクＩＤ）を示す。
【００３３】
次に、タスク群group１の処理を行う（ステップＳ１０３）。このステップＳ１０３の処理がタスク群group１の本体処理である。必要に応じて、ステップＳ１０２で登録済みのタスクを開始（生成）又は終了（削除）してもよい。リアルタイムＯＳのシステムコールやサービスコールなどのコマンドには、一般にシステムリソースの取得や、開放の機能がある。このステップＳ１０３におけるタスク群group1の処理本体では、これらの機能を利用して適宜システムリソースを取得しタスクを実行する。
【００３４】
タスク群group１の処理が終了すると、その終了要求を処理する（ステップＳ１０４）。タスク群group１の終了要求の処理が終わると、次のタスク群（タスク群group２）の処理を開始する。タスク群group２の処理も、タスク群group１と同様である。すなわち、システムリソース管理タスク５１は、タスク群group２の登録要求を処理し（ステップＳ１０５）、タスク群group２は、その本体処理を実行し（ステップＳ１０６）、その後、システムリソース管理タスク５１がタスク群group２の終了要求を処理する（ステップＳ１０７）。全てのタスク群の処理が終了した時点でシステム終了となる。
【００３５】
次に、システムリソース管理タスク５１の登録処理、終了処理の処理方法について説明する。図４は、システムリソース管理タスク５１の処理フローを示す図である。システムリソース管理タスク５１は、上述したように、図３に示すステップＳ１０１で起動する。
【００３６】
システムリソース管理タスク５１の起動直後に、システムリソース取得／開放フック処理部５２が、システムリソース取得フックルーチンへのトラップ（trap）設定及びシステムリソース開放フックルーチンへのトラップ設定を行う（ステップＳ２００）。システムリソース取得／開放フック処理部５２のシステムリソース取得フック処理及び開放フック処理については後述する。
【００３７】
その後、システムリソース管理タスク５１は、ユーザタスクからの要求を待つ（ステップＳ２０１）。要求には、タスク群登録要求とタスク群終了要求とがある。要求の待ち方としては、例えば上述のメールボックス等のシステムリソースを使用することができる。
【００３８】
要求が届くと、それがタスク群登録要求か否かを判定する（ステップＳ２０２）。要求がタスク群登録要求であれば、タスク群登録要求処理部５３が、システムリソース管理テーブル６１のタスク群（group）に対し、タスクを登録し（ステップＳ２０３）、ステップＳ２０１の要求待ちに戻る。タスクを登録する際には、上述のように、タスク識別子（タスクＩＤ）及びポインタを使用し、タスク群リンク６２を生成する。
【００３９】
一方、要求がタスク群登録要求ではない場合（ステップＳ２０２：Ｎｏ）、要求がタスク群終了要求か否かを判定する（ステップＳ２０４）。要求がタスク群終了要求でなければ、存在しない要求のため、ステップＳ２０１の要求待ちに戻る。タスク群終了要求であれば、タスク群終了要求処理部５４がシステムリソース管理テーブル６１から、登録及び更新済みのタスク群groupに対応するシステムリソース管理テーブルを取得する（ステップＳ２０５）。
【００４０】
そして、次に、タスク群終了要求処理部５４に含まれるシステムリソースチェック部５５がシステムリソース管理テーブル６１のシステムリソースリンク６３に基づき、開放していないシステムリソースが存在するか否かを判定する（ステップＳ２０６）。開放していないシステムリソースが存在しない場合は、ステップＳ２０１の要求待ちに戻る。開放していないシステムリソースが存在する場合は、開放していないシステムリソース情報をログに残す（ステップＳ２０７）。次に、システムリソース管理タスク５１をブレークさせ、ユーザに通知する（ステップＳ２０８）。最後にシステムを停止する。
【００４１】
次にシステムリソース取得／開放フック処理部５２におけるシステムリソース取得フック処理について説明する。システムリソース取得フック処理には、システムリソース取得フック関数を使用することができる。システムリソース取得フック関数はシステムリソースの種別毎に用意される。ここでは、システムリソースとしてメモリブロックを取得する場合のフック処理について説明する。図５は、メモリブロックの取得フック処理を示すフローチャートである。
【００４２】
先ず、システムリソースを取得しようとするユーザタスクがメモリブロック取得システムコールを与えられたパラメータで発行する（ステップＳ３０１）。この際、実行可能状態、実行待ち状態、実行状態などのタスク状態に変更があっても構わない。次に、システム取得／開放フック処理部５２が、発行元タスクがメモリブロックなどのシステムリソースとして取得に成功したか否かをチェックする（ステップＳ３０２）。発行元タスクがメモリブロックの取得に成功しなかった場合はメモリブロック取得フック関数を終える。
【００４３】
一方、発行元タスクがメモリブロックの取得に成功していれば、システム取得／開放フック処理部５２は、発行元タスクをシステムリソース管理テーブル６１のタスク群リンク６２より検索する（ステップＳ３０３）。発行元タスクが発見できなければ（ステップＳ３０４：Ｎｏ）フック関数を終える。一方、発行元タスクを発見できたときは、発行元タスクが属するタスク群のシステムリソースリンクの末尾にメモリブロック情報を追加する（ステップＳ３０５）。こうして、システムリソース取得／開放フック処理部５２は、各タスクがシステムリソースを取得する毎に、それをフックし、システムリソースリンクを更新していく。
【００４４】
次にシステムリソース取得／開放フック処理部５２のシステムリソース開放フック処理について説明する。システムリソースの開放フック処理には、システムリソース開放フック関数を使用することができる。システムリソース開放フック関数もシステムリソースの種別毎に用意される。ここではシステムリソースとしてメモリブロックを開放する場合のフック処理について説明する。図６は、メモリブロックの開放フック処理を示すフローチャートである。
【００４５】
先ず、システムリソースを開放しようとするユーザタスクが、メモリブロック開放システムコールを与えられたパラメータで発行する（ステップＳ４０１）。この際、タスク状態に変更があっても構わない。次に、システム取得／開放フック処理部５２が、発行元のユーザタスクがメモリブロックの開放に成功したか否かをチェックする（ステップＳ４０２）。発行元のタスクがメモリブロックの開放に成功しなかった場合はフック関数を終える。
【００４６】
一方、発行元のタスクがメモリブロックの開放に成功していれば、システム取得／開放フック処理部５２は、発行元タスクをシステムリソース管理テーブル６１のタスク群リンク６２より検索する（ステップＳ４０３）。発行元タスクが発見できなければ（ステップＳ４０４：Ｎｏ）フック関数を終える。一方、発行元タスクを発見できたときは、システムリソース管理テーブル６１において、該当するタスク群のシステムリソースリンク６３からメモリブロックアクセスアドレスを検索する（ステップＳ４０５）。該当するメモリブロックアクセスアドレスが発見できなかった場合（ステップＳ４０６：Ｎｏ）はフック関数を終える。一方、発見できたときは、タスク群のシステムリソースリンク６３からメモリブロック登録情報を削除する（ステップＳ４０７）。こうして、システム取得／開放フック処理部５２は、各タスクがシステムリソースを開放する毎に、それをフックし、システムリソースリンクを更新していく。
【００４７】
次に、以上のシステムリソース管理方法について更に具体的に説明する。ここでは、タスク群group１がシステムリソース管理タスク５１によって登録処理され、その後、タスク群group１がその処理を実行し、タスク群group１に含まれるタスクtask１２がメモリブロックの開放を忘れたまま処理を終了した場合について説明する。タスク群登録要求として図３において、先ず、タスクを開始する（ステップＳ１０１）。上述のように、システムリソース管理タスク５１の優先度が高く設定されているため、図２に示すシステムリソース管理タスク５１が起動する。そして、システムリソース取得／開放フック処理部５２がシステムリソースの取得と開放の各フックルーチンへのトラップ設定をそれぞれ行い（ステップＳ２００）、その後、リソース要求待ちに入る（ステップＳ２０１）。
【００４８】
図１に戻り、タスク群group1（task１１，task１２，・・・，task１ｎ）が登録要求する（ステップＳ１０２）。すると、図２のステップＳ２０１の要求が満たされ、システムリソース管理タスク５１が、当該要求がタスク群登録要求か否かを判定する（ステップＳ２０２）。ここでは、タスク群登録要求であるので、要求どおり、システムリソース管理タスク５１のタスク群登録要求処理部５３が、システムリソース管理テーブル６１のタスク群リンク６２のタスク群group１に対して、登録要求しているtask１１，task１２，・・・，task１ｎを登録する。
【００４９】
次に、タスク群group１の処理において、例えばtask１２よりメモリブロック取得システムコールを発行し、メモリブロックを取得する（ステップＳ１０３）。その際、図４に示すステップ２００におけるトラップ設定において、メモリブロック取得フック関数が登録されているため、図５に示すメモリブロックの取得フック関数を呼ぶことになる。
【００５０】
先ず、メモリブロック取得を発行元のタスクがリアルタイムＯＳのシステムコールとして発行する（ステップＳ３０１）。このタスクのメモリブロック取得が成功したか否かを判定し（ステップＳ３０２）、正常にメモリブロックを取得できなければメモリブロックフック関数を終える。
【００５１】
正常にメモリブロックを取得できた場合について説明すると、発行元タスクを、システムリソース管理テーブルのタスク群リンク６２より検索する（ステップＳ３０３）。本例ではtask１２が発行元タスクであり、タスク群リンク６２にtask１２のタスク識別子は、登録されている。したがって、発行元タスクがタスク群リンク６２に見つかるか否かを判定する（ステップＳ３０４）発行元タスクtask１２の識別子がタスク群リンク６２に登録されているため、タスクtask１２が属するタスク群group１におけるシステムリソースリンク６３の末尾にメモリブロック情報を追加する（ステップＳ３０５）。
【００５２】
上述したように、タスク群group１に登録されたタスクのリソース取得と開放の管理は、それに対応するシステムリソースリンク６３により行う。システムリソースを取得すれば、そのシステムリソースの情報を該当するタスク群のシステムリソースリンクへ登録する。その際、システムリソース種別、その識別子、及び次の情報へのポインタにより登録する。こうして、本例においては、タスク群group１のタスクtask１２が取得したシステムリソース（メモリブロック）が、システムリソースリンクに登録されることになる。このシステムリソースリンク６３は、システムリソースを取得する度に登録され、開放すると登録から削除されることで更新されていく。
【００５３】
本例においては、タスクtask１２が取得したメモリブロックを開放せずに、タスク群group１の処理を終え、タスク群group１の終了要求を行うことする（ステップＳ１０４）。この場合、図４のフローのＳ２０１の要求が満たされ、要求がタスク群終了要求と判断され、ステップ２０５に進む。ここで、タスク群終了要求処理部５４は、登録済みのタスク群group１に対応するシステムリソース管理テーブルを得る（ステップＳ２０５）。こうして、本例においてはタスク群ＩＤ＝１に対応するシステムリソースリンク６３を得る。このタスク群ＩＤ＝１に対応するシステムリソースリンク６３に基づき、システムリソースチェック部５５が開放していないシステムリソースがあるか否かを判断する（ステップＳ２０６）。本例においては、task１２のシステム種別＝メモリブロックのリソースが登録された状態である。
【００５４】
システムリソースチェック部５５は、これを検出すると、このシステムリソース情報をログに残す（ステップＳ２０７）。本例では、開放忘れのシステムリソースの種別＝メモリブロックと、メモリブロックのアクセスアドレスとをログに残すことになる。ログの場所は特に問わず、特定のメモリ領域や外部記憶等とすることができる。そして、タスクをブレークさせ、このシステムリソース開放忘れをユーザに通知する（ステップＳ２０８）。通知手段は特に問わず、デバッガ等のコンソール上に警告メッセージを出す等とすることができる。
【００５５】
本実施の形態においては、タスク群group１の登録要求でタスクを登録し、タスク群group１の構成タスク内でメモリブロックを取得し、そのメモリブロックを開放せずにタスク群group１の終了要求を行った場合には、そのメモリブロックの開放忘れを自動的に検出することができる。これは、システムリソース管理テーブル６１にタスク群リンク６２及びシステムリソースリンク６３を有し、タスク群のシステムリソースリンク６３をシステムリソース取得毎及び開放毎に更新し、タスク群が終了するタイミングで開放忘れのシステムリソースが存在するか否かのチェック処理を有するためであり、このことで完全にシステムリソース管理を行うことができる。
【００５６】
例えば、タスク群group１の終了要求の際に、システムリソースの開放忘れ防止のために、当該タスク群group1の処理にシステムリソースの開放処理を追加する等の処理が不要となり、システムリソースの取得又は開放毎に更新したシステムリソース管理テーブルにより、システムリソースの開放忘れを自動的に検出し、必要に応じてユーザに通知したり、システムリソースを開放する処理を実行したりすることが可能となる。また、本システムをシステムデバッグ時に用いると容易かつ正確にバグを取り除くことができる。
【００５７】
実施の形態２． 
次に、本発明の実施の形態２について説明する。本実施の形態においては、実施の形態１の構成に加え、タスク群を動的にロード、アンロードする仕組みを付加し、システムが更に複雑化した場合について説明する。
【００５８】
図７は、本実施の形態にかかるマルチタスクシステムの構成を説明する図である。なお、図７に示す本実施の形態及び後述する図１２に示す実施の形態３にかかるマルチタスクシステムにおいて、図１に示す実施の形態１にかかるマルチタスクシステムと同一構成要素には同一の符号を付してその詳細な説明は省略する。本実施の形態にかかるシステム７０においては、システムリソース管理タスク７１及びシステムリソース取得／開放フック処理部７２を有する。システムリソース管理タスク７１は、プログラムロード要求処理部７３、タスク群登録要求処理部７４、及びプログラムアンロード要求処理部７５を有し、プログラムアンロード要求処理部７５は、システムリソースチェック部７６を含んでいる。
【００５９】
図８は、本実施の形態にかかるシステムリソース管理方法を示すフローチャートである。先ず、実施の形態１と同様、プロセッサ１の動作直後に一般にリセット割り込みハンドラが起動し、その先のシステムstartup処理部１２において、ハードウェアリソースやソフトウェアの初期化を行う（ステップＳ５００）。その後、リアルタイムシステムとして、あらかじめ登録してあるタスクに起動がかかる。システムリソース管理タスク７１は、他のユーザタスクよりも優先度を高く設定しておき、初期登録のタスクからシステムリソース管理タスク７１を起動する（ステップＳ５０１）。
【００６０】
次に、プログラムロードを要求する（ステップＳ５０２）。動的プログラムは、function blockというロード単位でロードされる。要求を受け取るとプログラムロード要求処理部７３は、メモリ又は外部記憶装置などのロードする装置識別子unit、アドレスやファイル名等を示すロードするファイル識別子file、ロードするプログラムメモリ領域areaなどを使用してプログラムをロードする。ここでは、プログラムロード要求により、プログラムメモリ領域area１にロード装置unit１のファイルfile１をロードする場合について説明する。
【００６１】
次に、タスク群の登録要求を行う（ステップＳ５０３）。このタスク群の登録処理では、ステップＳ５０２においてでロードしたプログラムを構成する全てのタスクを登録する。ここでは、ロードするプログラムメモリ領域をarea１とし、登録するタスク群をtask１１，task１２，・・・，task１ｎのタスク識別子（タスクＩＤ）で示される各タスクをタスク群group１に登録するものとする。このタスク群group１から動的プログラムfunction block１が構成される。
【００６２】
その後、タスク群group１、すなわち動的プログラムfunction block１の本体処理を行う（ステップＳ５０４）。ここで、各タスクがシステムリソース取得、開放の機能を利用する。必要に応じてステップＳ５０３にて登録済みのタスクを開始／終了してもよい。処理が終了すると、プログラムアンロードを要求する（ステップＳ５０５）。area1はアンロードするプログラムメモリ領域を示す。
【００６３】
更に、次の動的プログラムfunction block２以降も、ステップＳ５０２〜ステップＳ５０５と同様に、ステップＳ５０６〜ステップＳ５０９の処理がなされる。全てのfunction blockの実行が終了すると、システム終了となる。
【００６４】
次に、システムリソース管理タスク７１の各処理について詳細に説明する。図９は、システムリソース管理タスク７１の処理フローを示す図である。システムリソース管理タスク７１は、図８に示すステップＳ５０１で起動される。
【００６５】
システムリソース管理タスク７１の起動直後に、システムリソース取得／開放フック処理部７２により、システムリソース取得フックルーチンへのトラップ設定及びシステムリソース開放フックルーチンへのトラップ設定を行う（ステップＳ６００）。これらの処理については後述する。
【００６６】
次に、ユーザタスクからの要求を待つ（ステップＳ６０１）。本実施の形態においては、この要求には、プログラムロード要求、タスク群登録要求、プログラムアンロード要求がある。要求の待ち方は、リアルタイムＯＳのメールボックス等のシステムリソースを使用することができる。
【００６７】
要求が届けば、システムリソース管理タスク７１は、当該要求がプログラムロード要求か否かを判定する（ステップＳ６０２）。要求がプログラムロード要求であれば、プログラムロード要求処理部７３がプログラムメモリ領域areaに、ファイル装置unitの識別子fileで示すプログラムファイルをロードし（ステップＳ６０３）、ステップＳ６０１の要求待ちに戻る。
【００６８】
一方、要求がプログラムロード要求ではない場合、タスク群登録要求か否かを判定する（ステップＳ６０４）。要求がタスク群登録要求であれば、タスク群登録要求処理部７４がプログラムメモリ領域areaに対し、タスク群を登録し（ステップＳ６０５）、ステップＳ６０１の要求待ちに戻る。タスク識別子としてタスクＩＤ等を使用する。ここでは、実施の形態１のシステムリソース管理テーブルの同様のタスク群リンクが生成される。
【００６９】
更に、要求がタスク群登録要求ではない場合、プログラムアンロード要求か否かを判定する（ステップＳ６０６）。なお、要求がプログラムアンロード要求でなければ、存在しない要求のため、ステップＳ６０１の要求待ちに戻る。要求がプログラムアンロード要求であれば、プログラムアンロード要求処理部７５が登録済みのプログラムメモリ領域areaに対応するシステムリソース管理テーブルを得る（ステップＳ６０７）。
【００７０】
次に、プログラムアンロード要求処理部７５のシステムリソースチェック部７６が、取得したシステムリソース管理テーブルのシステムリソースリンクにおいて、開放していないシステムリソースが存在するか否かを判定する（ステップＳ６０８）。
【００７１】
開放していないシステムリソースが存在しない場合は、ステップＳ６０１の要求待ちに戻る。開放していないシステムリソースが存在する場合は、そのシステムリソース情報をログに残す（ステップＳ６０９）。次にシステムリソース管理タスク７１をブレークさせ、ユーザに通知する（ステップＳ６１０）。最後にシステムを停止する。
【００７２】
次にシステムが使用するシステムリソース取得及び開放フック方法について説明する。本実施の形態におけるフック処理は、実施の形態１に示すそれと同様である。すなわち、システムリソース取得／開放フックには、それぞれシステムリソース取得／開放フック関数を使用することができ、システムリソース取得／開放フック関数はそれぞれシステムリソースの種別毎に用意される。ここでは、システムリソースとしてメモリブロックを取得及び開放する場合のフック処理について説明する。図１０は、メモリブロックの取得フック処理を示すフローチャートである。図１１は、メモリブロックの開放フック処理を示すフローチャートである。
【００７３】
先ず、システム取得開放フック処理においては、図１０に示すように、システムリソースを取得しようとするユーザタスクがメモリブロック取得システムコールを与えられたパラメータで発行する（ステップＳ７０１）。この際、実行可能状態、実行待ち状態、実行状態などのタスク状態に変更があっても構わない。次に、システム取得／開放フック処理部７２が、発行元タスクがメモリブロックの取得に成功したか否かをチェックする（ステップＳ７０２）。発行元タスクがメモリブロックの取得に成功しなかった場合はメモリブロック取得フック関数を終える。
【００７４】
一方、発行元タスクがメモリブロックの取得に成功していれば、システム取得／開放フック処理部７２は、発行元タスクをシステムリソース管理テーブル６１のタスク群リンク６２より検索する（ステップＳ７０３）。発行元タスクが発見できなければ（ステップＳ７０４：Ｎｏ）フック関数を終える。一方、発行元タスクを発見できたときは、発行元タスクが属するタスク群のシステムリソースリンクの末尾にメモリブロック情報を追加する（ステップＳ７０５）。こうして、システム取得／開放フック処理部７２は、各タスクがシステムリソースを取得する毎に、それをフックし、システムリソースリンクを更新していく。
【００７５】
次に、システム開放フック処理においては、図１１に示すように、先ず、システムリソースを開放しようとするユーザタスクが、メモリブロック開放システムコールを与えられたパラメータで発行する（ステップＳ８０１）。この際、タスク状態に変更があっても構わない。次に、システム取得／開放フック処理部７２が、発行元のユーザタスクがメモリブロックの開放に成功したか否かをチェックする（ステップＳ８０２）。発行元のタスクがメモリブロックの開放に成功しなかった場合はフック関数を終える。
【００７６】
一方、発行元のタスクがメモリブロックの開放に成功していれば、システム取得／開放フック処理部７２は、発行元タスクをシステムリソース管理テーブル６１のタスク群リンク６２より検索する（ステップＳ８０３）。発行元タスクが発見できなければ（ステップＳ８０４：Ｎｏ）フック関数を終える。一方、発行元タスクを発見できたときは、システムリソース管理テーブル６１において、該当するタスク群のシステムリソースリンク６３からメモリブロックアクセスアドレスを検索する（ステップＳ８０５）。該当するメモリブロックアクセスアドレスが発見できなかった場合（ステップＳ８０６：Ｎｏ）はフック関数を終える。一方、発見できたときは、タスク群のシステムリソースリンク６３からメモリブロック登録情報を削除する（ステップＳ８０７）。こうして、システム取得／開放フック処理部７２は、各タスクがシステムリソースを開放する毎に、それをフックし、システムリソースリンクを更新していく。
【００７７】
次に、以上のシステムリソース管理方法について更に具体的に説明する。ここでは、プログラムfunction block１がプログラムロード要求し、このプログラムfunction block１を構成するタスク群group１を登録し、プログラムfunction block１を処理した際に、プログラムfunction block１を構成するタスク群group１に含まれるタスクtask１２がメモリブロックを開放忘れした場合についての処理について説明する。
【００７８】
図８において、まず、システムリソース管理タスクを開始する（ステップＳ５０１）上述したように、システムリソース管理タスク７１の優先度が高く設定されているため、図９に示すように、システムリソース管理タスク７１が起動する。すると、システムリソース取得／開放フック処理部７２がシステムリソースの取得と開放の各フックルーチンへのトラップ設定を行い（ステップＳ６００）、リソース要求待ちに入る（ステップＳ６０１）。
【００７９】
図８に戻り、次にunit１のfile１で示されるプログラムfunction block１をプログラムメモリ領域area１にロード要求する（ステップＳ５０２）。これにより、図９のステップＳ６０１の要求が満たされる。要求がプログラムロード要求であると、プログラムロード要求処理部７３が要求どおり、プログラムfunction block１を指定領域area１にロードし（ステップＳ６０３）、再びリソース要求待ちとなる（ステップＳ６０１）。
【００８０】
次に、図８に戻り、プログラムfunction block１を構成するタスク群group１＝task１１，task１２，・・・，task１ｎを、プログラムメモリ領域area１にタスク群登録要求する（ステップＳ５０３）。これにより、図６のステップＳ６０１の要求が満たされ、要求がタスク群登録要求であると判定され（ステップＳ６０４：Ｙｅｓ）、タスク群登録要求処理部７４は、要求どおりプログラムメモリ領域area１に対して、task１１，task１２，・・・，task１ｎを登録する。
【００８１】
次に図８に戻りプログラムfunction block１の処理を開始する。ここでは、例えばtask１２よりメモリブロック取得システムコールを発行し、メモリブロックを取得する（ステップＳ５０４）。その際、図９に示すステップＳ６００においてメモリブロック取得フック関数が登録されているため、図１０に示すメモリブロックの取得フック関数を呼ぶことになる。
【００８２】
この場合、先ず、メモリブロック取得をリアルタイムＯＳのシステムコールとしてタスクtask１２が発行する（ステップＳ７０１）。タスクtask１２が正常にメモリブロック取得できれば、システムリソース取得／開放フック処理部７２は、発行元タスク（タスクtask１２）をタスク群登録リンクから検索する（ステップＳ７０３）。ここでは、発行元タスクtask１２がタスク群リンクに登録されているので、当該タスクtask１２が属するタスク群group１のシステムリソースリンクの末尾にメモリブロック情報を追加する（ステップＳ７０５）。
【００８３】
図８に戻り、次に、プログラムfunction block１の処理を終える。ここでは、取得したシステムリソースを開放しないままプログラムアンロード要求を行うとする（ステップＳ５０５）。これにより、図９に示すステップＳ６０１の要求が満たされる。ここで、要求がプログラムアンロード要求であるのでステップＳ６０６に進み、プログラムアンロード要求処理部７５は、登録済みのプログラムメモリ領域area１に対応するシステムリソース管理テーブルを得る（ステップＳ６０７）。ここでは、タスク群ＩＤ＝１に対応するシステムリソースリンクを得ることになる。
【００８４】
そして、システムリソースチェック部７６は、このシステムリソースリンクに基づき開放していないシステムリソースが存在するか否かをチェックする（ステップＳ６０８）。本例においては、システム種別＝メモリブロックのリソースが存在するため、このシステムリソース情報をログに残す（ステップＳ６０９）。つまり、当該のメモリブロックの種別と、メモリブロックのアクセスアドレスとをログに残すことになる。そして、システムリソース管理タスク７１をブレークさせ、ユーザに通知し（ステップＳ６１０）。システムを停止する。ログの残し方、ユーザへの通知方法は実施の形態１と同様とすることができる。
【００８５】
本実施の形態においては、実施の形態１と同様に、極めて正確かつ容易にデバック処理を行うことができる。また、タスク群が動的にロードされるシステムにおいても、プログラムロード要求でfunction block１をロードし、function block１を構成するタスク群group１を登録する。登録したタスク群group１の構成タスク内でメモリブロックなどのシステムリソースを取得し、そのメモリブロックを開放せずにプログラムアンロード要求を行えば、システムリソースの取得又は開放毎に更新したシステムリソース管理テーブルによりメモリブロックなどのシステムリソース開放わすれを自動的に検出してユーザに通知するなどの措置をとることができる。
【００８６】
実施の形態３． 
次に、本発明の実施の形態３について説明する。本実施の形態においては、実施の形態２の構成に加え、アンロードする際に解放忘れのシステムリソースを自動的に開放する機能を付加する。このことにより、例えばシステムの一部が故障などしても、システムの運転を続行することができ、よりフェイルソフトなシステムを提供することができる。
【００８７】
図１２は、本実施の形態にかかるマルチタスクシステムの構成を説明する図である。図１２に示すように、本実施の形態にかかるシステム８０においては、システムソース管理タスク８１は、実施の形態２と同様に、プログラムロード要求処理部８３、タスク群登録要求処理部８４及びプログラムアンロード登録要求処理部８５を有する。そして、本実施の形態におけるプログラムアンロード登録要求処理部８５は、システムリソースチェック部８６にシステムリソース開放部８７を含む。システムリソース開放部８７は、システムリソースチェック部８６にてシステムリソース開放忘れを検出した場合にこれを開放するものである。
【００８８】
本システムにおけるシステムリソース管理方法は、図８に示す実施の形態２と同様である。次に、システムリソース管理タスク８１の各処理について詳細に説明する。図１３は、システムリソース管理タスク８１の処理フローを示す図である。システムリソース管理タスク８１の起動直後のステップＳ９００から、開放していないシステムリソースが存在するか否かをチェックするステップＳ９０８までの処理は、図９に示すステップＳ６００からステップＳ６０８までの処理と同様である。
【００８９】
そして、ステップＳ９０８において、開放していないシステムリソースが存在する場合は、本実施の形態にかかるシステムリソースチェック部８６は、そのシステムリソースはメモリブロックか否かの判定をする（ステップＳ９０９）。当該システムリソースがメモリブロックであれば、そのメモリブロックの開放をＯＳのシステムコールとして発行する（ステップＳ９１０）。
【００９０】
また、システムリソースがメモリブロックではない場合、イベントフラグであるか否かを判定する（ステップＳ９１１）。イベントフラグであれば、そのイベントフラグの開放をＯＳのシステムコールとして発行する（ステップＳ９１２）。以下、同様に、管理する全てのシステムリソースの種別判断処理を行い、その判定結果をシステムリソース情報としてログに残す（ステップＳ９１３）。
【００９１】
次に、ＯＳのシステムコールとして発行し、開放したシステムリソースの情報を、システムリソース管理テーブルのシステムリソースリンクから削除する（ステップＳ９１４）。以上のステップＳ９０８〜ステップＳ９１４の処理を、システムリソースリンクにシステムリソース情報が存在しなくなるまで繰り返す。
【００９２】
例えば、実施の形態２における例のように、システムリソース開放忘れとしてメモリブロックが存在する場合、ステップＳ９８０にて開放していないシステムリソースが存在すると判断され、ステップＳ９０９にて、メモリブロックであることが判定される。この場合、そのメモリブロックの開放をＯＳのシステムコールとして発行し（ステップＳ９１０）、そのシステムリソース情報をログに残す（ステップＳ９１３）。つまり、当該メモリブロックの種別と、メモリブロックのアクセスアドレスとをログに残す。そして、開放したメモリブロックのメモリブロック情報を、システムリソースリンクから削除する（ステップＳ９１４）。このような処理を繰り返し、システムリソースリストが空になった時点で処理を終了する。これにより、全ての開放忘れのシステムリソースを開放することができる。
【００９３】
本実施の形態においては、開放忘れのシステムリソースを自動的に検出し、自動的に開放することができるので、開放忘れのシステムリソースが蓄積されていくことがなく、空きメモリの枯渇を防止することができ、よって空きメモリの枯渇を最大限防止するシステムを提供することができる。また、自動開放した旨をユーザに通知するようにしてもよい。本実施の形態は、システム運用時に用いると、特に有効である。
【００９４】
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００９５】
【図１】本発明の実施の形態１にかかるマルチタスクシステムの構成を説明する図である。
【図２】本発明の実施の形態１にかかるシステムリソース管理テーブルを示す図である。
【図３】本発明の実施の形態１にかかるシステム処理方法を示すフローチャートである。
【図４】本発明の実施の形態１におけるシステムリソース管理タスクの処理フローを示す図である。
【図５】本発明の実施の形態１におけるメモリブロックの取得フック処理を示すフローチャートである。
【図６】本発明の実施の形態１におけるメモリブロックの開放フック処理を示すフローチャートである。
【図７】本発明の実施の形態２にかかるマルチタスクシステムの構成を説明する図である。
【図８】本発明の実施の形態２にかかるシステムリソース管理方法を示すフローチャートである。
【図９】本発明の実施の形態２におけるシステムリソース管理タスクの処理フローを示す図である。
【図１０】本発明の実施の形態２におけるメモリブロックの取得フック処理を示すフローチャートである。
【図１１】本発明の実施の形態２におけるメモリブロックの開放フック処理を示すフローチャートである。
【図１２】本発明の実施の形態３にかかるマルチタスクシステムの構成を説明する図である。
【図１３】本発明の実施の形態３におけるシステムリソース管理タスクの処理フローを示す図である。
【図１４】従来のマルチタスクシステムの構成を説明する図である。
【符号の説明】
【００９６】
１０，７０，８０  システム
１  プロセッサ
２  ハードウェアリソース
１１  リアルタイムＯＳカーネル
１２  システムstartup処理部
１３  タスク管理モジュール
１４  リソース管理モジュール
１５  システムコール処理部
２１  アプリケーションタスク
２２  アプリケーションハンドラ
３１  リアルタイムＯＳタスク管理情報
３２  リアルタイムＯＳリソース管理情報
３３  リアルタイムＯＳリソース
４１  アプリケーションデータ
５１，７１，８１  システムリソース管理タスク
５２，７２，８２  システムリソース取得／開放フック処理部
５３，７４，８４  タスク群登録要求処理部
５４  タスク群終了要求処理部
５５，７６，８６  システムリソースチェック部
６３  システムリソースリング
６１  システムリソース管理テーブル
６２  タスク群リンク
６３  システムリソースリンク
７３，８３  プログラムロード要求処理部
７５，８５  プログラムアンロード要求処理部
８７  システムリソース開放部
【図１】
2006331213.tif 000003
【図２】
2006331213.tif 000004
【図３】
2006331213.tif 000005
【図４】
2006331213.tif 000006
【図５】
2006331213.tif 000007
【図６】
2006331213.tif 000008
【図７】
2006331213.tif 000009
【図８】
2006331213.tif 000010
【図９】
2006331213.tif 000011
【図１０】
2006331213.tif 000012
【図１１】
2006331213.tif 000013
【図１２】
2006331213.tif 000014
【図１３】
2006331213.tif 000015
【図１４】
2006331213.tif 000016