(57)【特許請求の範囲】
【請求項１】
少なくともマルチスレッド機能及びあるスレッドによってある範囲のコードを実行中に他のスレッドがアクセスできないようにする同期オブジェクトに対応する機能を有するオペレーティングシステムを備えたプログラム制御システムの制御装置において、少なくともスレッドがオペレーティングシステムから受付けられた時間及び前記スレッドごとにそのスレッドの状態を示すチェックフラグを記憶する管理テーブルを設け、スレッドを実行するのに先立って、前記管理テーブルにアクセスする第１の同期オブジェクトを取得して少なくともスレッドの受付時間を前記管理テーブルに書込んで第１の同期オブジェクトを開放し、そのスレッドの処理を実行するための第２の同期オブジェクトを取得し、前記管理テーブルを参照することにより、前記スレッドの最早受付時間をチェックしそのスレッドが最早受付時間のものか否かをその最早受付時間の前記チェッフラグが示す状態に基づいて判断し、最早受付時間のものでないと判断した場合は第２の同期オブジェクトを開放し、最早受付時間のものであると判断した場合はそのスレッドの処理を実行してから第２の同期オブジェクトを開放することを特徴とするプログラム制御システムの制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マルチスレッド機能を備えたプログラム制御システムの制御装置に関する。
【０００２】
【従来の技術】
この種の制御装置は、ＣＰＵ（中央処理装置）、このＣＰＵが各部を制御するためのプログラムデータなどを記憶したＲＯＭ（リード・オンリ・メモリ）、ＣＰＵが行う各種データ処理のために使用されるメモリエリア等を設けたＲＡＭ（ランダム・アクセス・メモリ）、アプリケーションプログラムなどを記憶したハードディスク装置等を備え、オペレーティングシステム（ＯＳ）、その上で稼働するアプリケーションプログラム、これらオペレーティングシステムとアプリケーションプログラムとのインタフェースであるアプリケーションプログラムインタフェース（ＡＰＩ）によりプログラム制御システムを構成する。
【０００３】
上記オペレーティングシステムには、複数のタスクを同時に処理実行可能なマルチタスク機能、このマルチタスク機能を実行するときに１つのプログラムを個々のタスクを表す単位（スレッド）に細分化して複数のスレッドを同時に実行させるマルチスレッド機能を備えるものがある。
【０００４】
但し、「複数のタスクを同時に処理実行可能である」とはいっても、１つのＣＰＵが実行できる命令は１個だけである。つまり、マルチスレッドというのは、タイマ割込を使ってＣＰＵに割込みをかけて他のルーチンへ実行を移している。これを定期的に行えば、ユーザー側から見れば、複数のルーチンが並行して走っているかのように見える。
【０００５】
このようなオペレーティングシステムのマルチタスク機能、マルチスレッド機能をアプリケーションからの要求によって実行させる場合において、ログ書込みなどのように１つのスレッドが処理中の際に複数のスレッドがオペレーティングシステムに受付けられて（ＣＰＵ時間を割当てられて）ウエイトした場合、次に実行権限が与えられるスレッドの選択はオペレーティングシステムの判断に依存していた。つまり、オペレーティングシステムが自動的にスレッドの実行を次々に切替えるようになっていた。
【０００６】
【発明が解決しようとする課題】
しかし、このようなプログラム制御システムの制御装置においては、１つのスレッドが処理中の際に他の複数のスレッドがウエイトした場合、オペレーティングシステムによって次の実行権限が与えられるので、一番早く要求を出したものが先に処理されるとは限られず、大きなタイムラグが発生するおそれがあるという問題があった。
【０００７】
そこで、本発明は、アプリケーションによって実行要求が発生した順番通りにその処理を実行できるプログラム制御システムの制御装置を提供しようとするものである。
【０００８】
【課題を解決するための手段】
請求項１の本発明は、少なくともマルチスレッド機能及びあるスレッドによってある範囲のコードを実行中に他のスレッドがアクセスできないようにする同期オブジェクトに対応する機能を有するオペレーティングシステムを備えたプログラム制御システムの制御装置において、少なくともスレッドがオペレーティングシステムから受付けられた時間及びスレッドごとにそのスレッドの状態を示すチェックフラグを記憶する管理テーブルを設け、スレッドを実行するのに先立って、管理テーブルにアクセスする第１の同期オブジェクトを取得して少なくともスレッドの受付時間を管理テーブルに書込んで第１の同期オブジェクトを開放し、そのスレッドの処理を実行するための第２の同期オブジェクトを取得し、管理テーブルを参照することにより、スレッドの最早受付時間をチェックしそのスレッドが最早受付時間のものか否かをその最早受付時間のチェッフラグが示す状態に基づいて判断し、最早受付時間のものでないと判断した場合は第２の同期オブジェクトを開放し、最早受付時間のものであると判断した場合はそのスレッドの処理を実行してから第２の同期オブジェクトを開放することを特徴とするプログラム制御システムの制御装置である。
【０００９】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、本実施の形態にかかる制御装置の構成を示すブロック図で、１は制御部本体を構成するＣＰＵ（中央処理装置）、２は上記ＣＰＵ１が各部を制御するためのプログラムデータなどを記憶したＲＯＭ（リード・オンリ・メモリ）、３は上記ＣＰＵ１が行う各種データ処理のために使用されるメモリエリア等を設けたＲＡＭ（ランダム・アクセス・メモリ）、４はアプリケーションプログラムなどを記憶したハードディスク装置（ＨＤＤ）、５は所望の情報を表示するディスプレイ、６はユーザーが各種のキー操作を行うためのキーボードである。
【００１０】
図２は、本実施の形態にかかる制御装置におけるプログラム制御システムの構成を示す図で、１１はオペレーティングシステム（ＯＳ）、１２はアプリケーションプログラム本体１３とそれに付属する複数のフレーム１４からなるアプリケーションプログラム、１５はオペレーティングシステム１１とその上で稼働するアプリケーションプログラム１２とのインタフェースとして機能するアプリケーションプログラムインタフェース（ＡＰＩ）である。
【００１１】
上記フレーム１４としては、例えばマルチプロセス、マルチスレッドアプリケーション間においてグローバルな共有メモリを提供するメモリマネージャ１４ａ、レジストリにアクセスする際に使用するレジストリアクセスクラス１４ｂ、ログに対する管理と制御を行うログマネージャ１４ｃ、その他メッセージのやり取りを行うメッセージハンドラなどがある。
【００１２】
ところで、アプリケーションを開発する場合において、通常アプリケーションに付随する部分であるフレーム１４は開発時に同時に行うのではなく、予め再利用性を考慮してアプリケーション１２から切離せる部分だけを切出してアプリケーション本体１３に先行して又は並行して開発する。本実施の形態では、特にこのアプリケーション開発時には必要不可欠なログに対する管理と制御を取りまとめるログマネージャ１４ｃについて本発明を適用した場合について説明する。
【００１３】
このログマネージャ１４ｃは、アプリケーション本体１３に対し、ログ書込みを行う関数を提供し、アプリケーション本体１３はこの関数によってのみログを出力することができる。
【００１４】
上記ＣＰＵ１１は、アプリケーション本体１３によってログ書込み要求が発生した場合、ログマネージャ１４ｃに基づいて図３に示すような処理を行うようになっている。なお、この処理は、メモリマネージャ１４ａ、レジストリアクセスクラス１４ｂなどのフレームをも利用しながら実行するものでもよく、またログマネージャ１４ｃのみに基づいて実行するものでもよい。
【００１５】
上記処理は、先ずＳＴ（ステップ）１にてシステムタイムを取得し、ＳＴ２にて後述の管理テーブルを排他的に実行する権限である第１の同期オブジェクトとしての第１のミューテックス（Mutex ；MUTually EXclusiveの略）の取得待ちとなる。ここでいう管理テーブルは、図４に示すように発生したログ書込み要求のスレッドごとにそのスレッドの状態を示すチェックフラグ、スレッドのＩＤ、スレッドがオペレーティングシステム１１から受付けられたとき（オペレーティングシステム１１からＣＰＵ時間を割当てられたとき）のシステムタイムを記憶したものである。このチェックフラグとしては、「００」はテーブルエントリなしであることを意味し、「０１」はテーブルエントリ中であることを意味し、「０２」はテーブル内最早要求であることを意味する。なお、上記管理テーブルは、例えばＲＡＭ３などのメモリやＨＤＤ４などに記憶する。
【００１６】
また、ここでいうミューテックスとは、同期オブジェクトと呼ばれるものの１つで、あるスレッドによってある範囲のコードを実行中に他のスレッドがアクセスできないようにするオペレーティングシステム１１のもつ機能の１つである。システムの相互排他ということもある。このミューテックスはアプリケーションプログラムインタフェース１５で作成することができる。なお、ミューテックスを使用する場合は、予めその旨を宣言しておく必要がある。このような機能を利用する場合は、先ずミューテックスを取得し、処理が終了したらミューテックスを開放する。そうしなければ、他のスレッドが永遠に止ってしまうおそれがあるからである。
【００１７】
ＳＴ２にて第１のミューテックスを取得したと判断した場合は、ＳＴ３にてチェックフラグはテーブルエントリ中の「０１」に変更し、そのスレッドのＩＤ及びＳＴ１で取得したシステムタイムを管理テーブルに書込んで、ＳＴ４にて管理テーブルの第１のミューテックスを開放する。
【００１８】
次に、ＳＴ５にてログマネージャ１４ｃの第２の同期オブジェクトとしての第２のミューテックス（ログをファイルに書込む処理を排他的に実行する権限）の取得待ちとなる。ＳＴ５にて第２のミューテックスを取得したと判断した場合は、ＳＴ６にて管理テーブルのシステムタイムにより最早受付時間をチェックする。
【００１９】
そして、ＳＴ７にて次に実行しようとするスレッドが最早受付時間のＩＤと一致するか否かを判断する。ＳＴ７にてＩＤが一致しないと判断した場合は、ＳＴ８にて第２のミューテックスを開放してＳＴ５の処理に戻り、ＩＤが一致したと判断した場合は、ＳＴ９にてログ出力を行う。具体的には、例えばメモリマネージャなどを利用してログをＲＡＭ３又はＨＤＤ４のファイルに書込む。
次に、ＳＴ１０にて第２のミューテックスを開放し、実行したスレッドのチェックフラグを「００」にセットしてこの処理を終了する。
【００２０】
このように、本発明の実施の形態では、ログ出力の要求があった場合に、ミューテックスの機能を利用してスレッドの実行状況やスレッドがオペレーティングシステム１１から受付けられたときのシステムタイムを管理テーブルに記憶しておき、そのスレッドを実行するときに上記管理テーブルを参照することにより、最も早く受付けられたスレッドから順にログ書込みの処理を行うことができる。これにより、いわゆる先入れ先出し方式によるログ書込みを行うことができるため、単一のログファイルへの書込みが競合することを防止できるとともに、複数のプロセスやスレッドによるログ書込み要求に対応できる。従って、本実施の形態によれば、アプリケーション本体１３によって実行要求が発生した順番通りにその処理を実行できる。
【００２１】
また、上述したような処理をログマネージャ１４ｃのプログラムによってオペレーティングシステム１１の機能を利用して実行するので、アプリケーション本体とログマネージャ１４ｃとを切離して開発することができるため、近年におけるアプリケーション開発におけるコンポーネント化、共通化、再利用性などの要求に対応することができる。
【００２２】
なお、本発明の実施の形態においては、ログ出力要求によるスレッドについてオペレーティングシステム１１から受付けられた順番に処理を実行できる場合について述べたが、必ずしもこれに限定されるものではなく、他の要求によるスレッドについて受付られた順番に処理を実行する場合に適用してもよい。
【００２３】
【発明の効果】
以上詳述したように本発明によれば、マルチスレッド機能を利用する場合に、スレッドがオペレーティングシステムから受付けられると、第１の同期オブジェクトを利用しながらスレッド受付時間を管理テーブルに書込み、そのスレッドを実行する第２の同期オブジェクトを取得したときは、管理テーブルを参照することにより、そのスレッドが最早受付時間のものか否かを判断し、最早受付時間のものでないと判断した場合は第２の同期オブジェクトを開放し、最早受付時間のものであると判断した場合はそのスレッドの処理を実行してから第２の同期オブジェクトを開放するようにしたので、最も早く受付けられたスレッドから順に実行できる。従って、アプリケーションによって実行要求が発生した順番通りにその処理を実行できる。
【図面の簡単な説明】
【図１】本発明の実施の形態にかかる制御装置の構成を示すブロック図。
【図２】同実施の形態にかかるプログラム制御システムの構成を説明する図。
【図３】同実施の形態においてマルチスレッド機能を利用する場合のスレッド受付時の処理を示す図。
【図４】同実施の形態における管理テーブルの例を示す図。
【符号の説明】
１…ＣＰＵ
３…ＲＡＭ
４…ＨＤＤ
１１…オペレーティングシステム
１２…アプリケーションプログラム
１３…アプリケーションプログラム本体
１４…フレーム
１５…アプリケーションプログラムインタフェース
１４ｃ…ログマネージャ
【図１】
0003764282.tif 000002
【図２】
0003764282.tif 000003
【図３】
0003764282.tif 000004
【図４】
0003764282.tif 000005