本発明の一実施形態について図1〜図8に基づいて説明すると、以下の通りである。
図1は、本実施形態に係る制御システムの構成を示すブロック図である。図2は、当該制御システムにおけるHMI(Human Machine Interface)機器1の要部の構成を示すブロック図である。
HMI機器1(メモリ制御装置)は、専用のOS(Operating System)を実装した組み込み機器であり、HMI機器1の各種の機能を実現するためのHMIプログラムを実行する機能を備えている専用機である。HMI機器1は、プログラマブル表示器のように、工場などの厳しい環境に適合するように、防塵性、防滴性、耐振動性などを高めた専用のコンピュータである。
HMIプログラムは、HMI機器1で行われるような、外部機器との通信、当該外部機器から取得したデータの表示、入力装置を用いた操作者による操作の受け付けなどの各種の機能を実現するアプリケーションプログラムである。
まず、HMI機器1のハードウェア構成について説明する。
図1に示すように、HMI機器1は、CPU(Central Processing Unit)11と、メインメモリ12(メモリ)と、ROM(Read Only Memory)13と、ユーザメモリ14と、タッチパネルを15と、表示パネル16と、インターフェース部17とを備えている。
CPU11は、HMIプログラムを実行する処理装置である。具体的には、CPU11は、HMIプログラムの実行に際して、メインメモリ12、ユーザメモリ14、タッチパネル15などからデータを受け取り、当該データに対して演算または加工を施した結果を、メインメモリ12、ユーザメモリ14、表示パネル16などに出力する。
メインメモリ12は、HMI機器1における主記憶装置を構成するメモリであり、DRAM(Dynamic Random Access Memory)によって構成される。また、図2に示すように、メインメモリ12はヒープ領域12aを有している。ヒープ領域12aは、HMIプログラムが動的に確保可能な領域である。
ROM13は、HMI機器1の起動時やリセット時に実行されるBIOS(Basic Input Output System)などの、HMI機器1の動作に不可欠なプログラムを記憶している。
ユーザメモリ14は、図2に示すように、ユーザが作成したデータ、例えば後述するHMI画面を表示するための画面データを記憶する大容量の記憶装置であり、FEPROM(Flash Erasable and Programmable ROM)などで構成されている。FEPROMは、書き替え可能な読み出し専用のフラッシュメモリであり、一般のパーソナルコンピュータにおけるハードディスクドライブの役割を果たす。フラッシュメモリは、可動部を持たず、かつ衝撃に強いので、劣悪な周囲環境でも安定して動作する。
また、ユーザメモリ14は、図2に示すように、OSおよびHMIプログラムを記憶している。
タッチパネル15は、表示パネル16上に配置されており、表示パネル16に表示された画面上でのタッチ操作を受け入れて、タッチ操作信号を入力信号として出力する。
表示パネル16は、ユーザメモリ14に記憶されている画面データに基づいたHMI画面を表示する。表示パネル16としては、液晶表示パネル、EL(Electro-Luminescence)表示パネルなどの平板型表示パネルが用いられる。
インターフェース部17は、制御機器2と通信可能に接続するための接続部である。インターフェース部17は、シリアルインターフェース、LAN(Local Area Network)などの各種のインターフェースを装備している。
制御機器2は、PLC(Programmable Logic Controller)、温度調節計、インバータなどの機器であり、HMI機器1と通信する機能を備えている。制御機器2は、デバイス20との間でデータの授受を行なう。デバイス20としては、センサ、スイッチのような入力機器や、アクチュエータ、リレー、電磁弁、表示器のような出力機器が用いられる。
続いて、HMI機器1のシステム構成について説明する。
図2に示すように、HMI機器1は、制御機能を有する部分としてHMI制御部8を含み、ガベージコレクション機能を使用することを前提として、ガベージコレクションを実行する実体部分としてガベージコレクション実行部9を含んでいる。
HMI制御部8は、HMIプログラムがCPU11によって実行されることで実現される、HMI機能を有する部分である。
ここで、HMI機能とは、ユーザの入力操作に応じた制御機器2への指示の発生と、制御機器2からの各種データの取得と、取得した当該各種データの表示および上記入力操作の受け付けを行うためのHMI画面の表示とを含む機能である。HMI制御部8は、HMI機能として、ユーザの操作入力および制御機器2が保持するデータの変化に基づいて各部を制御する動作制御部81と、HMI画像の表示を制御する表示制御部82とを有している。また、HMI制御部8は、ガベージコレクション機能を使用することを前提として、ガベージコレクション実行部9の動作を制御するガベージコレクション制御部83を有している。
HMI画面は、制御機器2に接続されたデバイス20の状態を表示したり、タッチパネル15への操作を受け付けたりするための各種のオブジェクトを含む画面である。HMI画面に設けられるオブジェクトとしては、ランプ画像、データ表示器画像、スイッチ画像などの各種の部品画像が用意されている。このようなHMI画面を表示するための画面データは、パーソナルコンピュータなどにおいて作成されて、ユーザメモリ14に保存されている。
動作制御部81は、タッチパネル15におけるユーザのタッチによる入力操作に応じた操作指示を発生する。この操作指示としては、制御機器2の起動・停止指示、制御機器2に与える制御データの変更、画面の切り替えなどがある。また、動作制御部81は、制御機器2のデータの変化に応じた制御指示を発生する。この制御指示としては、画面の切り替えなどがある。
表示制御部82は、画面データに基づいて表示パネル16にHMI画面を表示させる制御処理を行う。また、表示制御部82は、インターフェース部17を介して取得した制御機器2のデータを、HMI画面に反映させる処理を行う。例えば、表示制御部82は、HMI画面において、上述のランプ画像を点灯・消灯させたり、上述のデータ表示器画像にデータを表示させたりする処理を行う。また、表示制御部82は、上記操作指示に応じてHMI画面の状態を変化させる処理を行う。例えば、表示制御部82は、上述のスイッチ画像を操作する上記操作指示を受けて、当該スイッチ画像の表示状態(色、形状など)を変化させる処理を行う。さらに、表示制御部82は、ユーザの操作に応じてHMI画面の切り替え処理を行なう。
ガベージコレクション制御部83は、ガベージコレクション実行部9の動作を制御する部分である。
ガベージコレクション制御部83は、領域監視部831と、処理リスト832と、メモリ使用量予測部833と、空き容量判定部834と、起動・停止制御部835と、ステップサイズ変更部836(解放メモリ量変更部)と、を有している。
領域監視部831は、ヒープ領域12aの使用状態を監視しており、ヒープ領域12aにおける未使用の空き領域のサイズ(空き容量)をメモリ使用量予測部833および空き容量判定部834に通知する。また、領域監視部831は、処理リスト832を参照して、実行される処理が中断されないことを要求される処理(中断不可処理)であるか、または中断が差し支えない通常処理であるかを判定し、判定結果を起動・停止制御部835に通知する。中断不可処理は、具体的には、リアルタイム性が要求されるプログラム実行処理(リアルタイム処理)や優先度(あるいは優先順位)の高いプログラム実行処理(高優先処理)のような処理であり、いずれも中断されないことが要求される。
処理リスト832は、中断不可処理の一覧を表すデータである。処理リスト832は、実際には、HMIプログラムにハードコーディングされている。なお、処理リスト832は、別途、ユーザメモリ14などに記憶されていてもよい。
メモリ使用量予測部833は、現在および過去の複数回の使用メモリ量に基づいて所定の演算を行なうことにより、後のメモリ使用量の増加量を予測する。メモリ使用量は、中断不可処理がメインメモリ12のヒープ領域12aを使用しようとするメモリ量である。
空き容量判定部834は、メモリ使用量予測部833によって予測されたメモリ使用量を空き容量と比較し、メモリ使用量が空き容量未満であるか否かを判定する。また、空き容量判定部834は、中断不可処理のメモリ使用量と空き容量との差が所定値以上であるか否かを判定する。
起動・停止制御部835は、空き容量判定部834の判定結果に基づいて、メモリ使用量が空き容量未満であるときには実行されているインクリメンタルガベージコレクションを停止させるようにガベージコレクション実行部9を制御する。また、起動・停止制御部835は、空き容量判定部834の判定結果に基づいて、メモリ使用量が空き容量未満でないときにはガベージコレクションを実行することを決定する。
起動・停止制御部835は、メモリ使用量と空き容量との差に応じてフルガベージコレクションまたはインクリメンタルガベージコレクションのいずれかを実行することを決定する。具体的には、起動・停止制御部835は、空き容量判定部834の判定結果に基づいて、メモリ使用量と空き容量との差が所定値以上であるときには、フルガベージコレクションを起動するようにガベージコレクション実行部9を制御する。また、起動・停止制御部835は、空き容量判定部834の判定結果に基づいて、メモリ使用量と空き容量との差が所定値未満であるときには、インクリメンタルガベージコレクションを起動するようにガベージコレクション実行部9を制御する。
また、起動・停止制御部835は、インクリメンタルガベージコレクションを、停止から一定時間後に再起動させるようにガベージコレクション実行部9を制御する。
ステップサイズ変更部836は、状況に応じてインクリメンタルガベージコレクションのステップサイズを変更する。具体的には、ステップサイズ変更部836は、中断不可処理が実行されるときに、中断不可処理が終了した後に実行されるインクリメンタルガベージコレクションのステップサイズを増加させる。また、ステップサイズ変更部836は、インクリメンタルガベージコレクションの動作が再開した後に、ステップサイズを減少させる。ステップサイズは、インクリメンタルガベージコレクションが行なう1回の解放処理で解放するメモリ量(解放メモリ量)を定めるための設定量である。ステップサイズによって定まる解放メモリ量は、ガベージコレクション実行部9の仕様に応じて異なる。
ガベージコレクション実行部9は、ヒープ領域12aにおいてHMIプログラムが動的に確保して不要になった領域を自動的に解放する処理を実行する。ガベージコレクション実行部9は、フルガベージコレクションやインクリメンタルガベージコレクションを実行する部分であり、プログラミング言語処理系に実装されているものや、ライブラリとして提供されているものである。また、ガベージコレクション実行部9は、タスクやスレッドとして実装されるガベージコレクタとして実現される。
ガベージコレクション実行部9は、起動・停止制御部835の指示に応じて、中断不可処理が実行されるときに、動作しているインクリメンタルガベージコレクションを停止する。ただし、ガベージコレクション実行部9は、中断不可処理が実行されるときでも、空き容量が中断不可処理のメモリ使用量に足りないときには、起動・停止制御部835の指示に応じて、フルガベージコレクションまたはインクリメンタルガベージコレクションを実行する。また、ガベージコレクション実行部9は、インクリメンタルガベージコレクションを停止したとき、起動・停止制御部835の指示に応じて、停止から一定時間後にインクリメンタルガベージコレクションを再起動する。また、ガベージコレクション実行部9は、ステップサイズ変更部836によって変更されたステップサイズでインクリメンタルガベージコレクションを実行する。
ガベージコレクション実行部9は、起動・停止制御部835からフルガベージコレクションの実行が要求されると、フルガベージコレクションを実行してヒープ領域12aの解放処理を行い、解放処理が完了すると、そのことをHMI制御部8に通知する。CPU11は、フルガベージコレクションによる解放処理が実行されている間、その処理に占有されるので、HMIプログラムを実行することができない。このため、HMI制御部8は動作を停止する。
一方、ガベージコレクション実行部9は、起動・停止制御部835からインクリメンタルガベージコレクションの実行が要求されると、直ぐに要求を受けたことをHMI制御部8に返答し、適時に断続的にヒープ領域12aの解放処理を行う。CPU11は、インクリメンタルガベージコレクションによる解放処理が実行されている間、その処理に占有されるので、HMIプログラムを実行することができないのはフルガベージコレクションの実行時と同様である。しかしながら、CPU11は、インクリメンタルガベージコレクションによる解放処理が実行されていない間には、HMIプログラムを実行することができる。したがって、HMI制御部8は、インクリメンタルガベージコレクションの実行の要求を受けたことをガベージコレクション実行部9より返答されてから、インクリメンタルガベージコレクションによる解放処理が実行されていない間にも動作することができる。
以上のように構成されるHMI機器1によるガベージコレクションの処理について説明する。図3は、HMI機器1によるガベージコレクションの制御の手順を示すフローチャートである。図4は、ガベージコレクション選択動作についての処理手順を示すフローチャートである。図5は、HMI機器1によるレベルに対するステップサイズの変化を示すグラフである。
まず、HMI制御部8が起動すると、図3に示すように、インクリメンタルガベージコレクションが起動する。このとき、ガベージコレクション実行部9は、起動・停止制御部835の要求を受けて起動するが、起動と同時にインクリメンタルガベージコレクションによる解放処理を行なうのではなく、ガベージコレクション実行部9に応じたタイミングで解放処理を行なう。
領域監視部831は、動作制御部81から処理が開始することを通知されると、処理リスト832を参照して、当該処理が処理リスト832に含まれる中断不可処理であるか否かを判定する(ステップS1)。例えば、動作制御部81は、画面切り替えのようなリアルタイム性を要する処理の実行を指示するユーザの操作を受け付けることで、画面切り替え処理が開始することを領域監視部831に通知する。領域監視部831は、画面切り替え処理が処理リスト832に含まれていることを確認すると、画面切り替え処理が中断不可処理であると判定する。
なお、画面切り替えは、周期的または所定時刻に自動的に行なわれることもある。動作制御部81は、このような自動的に画面切り替えを行なうときにも、画面切り替え処理が開始することを領域監視部831に通知する。
領域監視部831は、HMI制御部8の起動時からヒープ領域12aの空き領域を監視しており、使用済みの使用メモリ量を、メモリ使用量予測部833による予測のために、所定時間間隔でヒープ領域12aから取得する。メモリ使用量予測部833は、領域監視部831から取得した使用メモリ量に基づいて、中断不可処理のためのメモリ使用量を予測する。
領域監視部831が、ステップS1において通知された処理が中断不可処理であると判定すると(YES)、空き容量判定部834は、当該中断不可処理が使用しようとするメモリ使用量が空き容量未満であるか否かを判定する(ステップS2)。領域監視部831は、中断不可処理が通知されたと判断したときに、ヒープ領域12aから空き容量を取得する。空き容量判定部834は、メモリ使用量予測部833から取得したメモリ使用量の予測値と、領域監視部831から取得した空き容量とを比較して、上記の判定を行なう。
空き容量判定部834は、ステップS2において、中断不可処理のメモリ使用量が空き容量未満であると判定すると(YES)、空き容量が中断不可処理を実行するために足りると判断する。起動・停止制御部835は、空き容量判定部834による判断に基づいて、インクリメンタルガベージコレクション処理を停止するようにガベージコレクション実行部9に指示する。ガベージコレクション実行部9は、停止の指示を受けて、インクリメンタルガベージコレクションを停止する(ステップS3)。
インクリメンタルガベージコレクションが停止すると、ステップサイズ変更部836は、ステップサイズが上限値(最大値)に達したか否かを判定する(ステップS4)。ステップサイズ変更部836が、ステップS4においてステップサイズが上限値に達したと判定すると(YES)、動作制御部81は中断不可処理を実行する(ステップS5)。また、ステップサイズ変更部836は、ステップS4においてステップサイズが上限値に達していないと判定すると(NO)、インクリメンタルガベージコレクションのステップサイズを増加させて(ステップS6)、ステップS6の処理を行なう。ステップS6の後は、処理がステップS5に移行する。
ステップサイズ変更部836は、起動・停止制御部835からのインクリメンタルガベージコレクションの停止指示を受けると、例えば図5に示すように、インクリメンタルガベージコレクションが1回停止するごとに1つ上のレベルにステップサイズを増加させていく。図5におけるステップサイズを増加させる値(縦軸の値)は、ガベージコレクションの種類によって異なる。図5に示す例では、初期値(最小値)を2000とし、レベルが0から15の範囲で変化している。
ガベージコレクションのステップサイズSSは次式で表される。次式において、Sbは、ベースとなるサイズ(ベースサイズ)を表し、Lはレベルを表し、10は係数を表している。次式に示すように、レベルLを二乗することにより、レベルLが多いほどステップサイズSSの増加量が大きくなるようにしている。また、図5に示す例では、ベースサイズSbを2000としている。ステップサイズ変更部836は、次式によってステップサイズSSを算出して、ガベージコレクション実行部9に与えている。
SS=Sb+L2*10
ステップサイズを際限なく大きくしていくと、インクリメンタルガベージコレクションの1ステップの解放処理に要する時間が長引くので、上限値を決めておき、上限値を超えてステップサイズが増加しないようにする。図5に示す例では、上限値を4250としている。
起動・停止制御部835は、中断不可処理の実行が終了してからさらに中断不可処理が発生したか否かを動作制御部81からの通知に基づいて判定する(ステップS7)。起動・停止制御部835は、中断不可処理が発生していないと判定すると(NO)、インクリメンタルガベージコレクションを再起動させるようにガベージコレクション実行部9に指示する。ガベージコレクション実行部9は、起動の指示を受けて、インクリメンタルガベージコレクションを再起動する(ステップS8)。
なお、中断不可処理が実行されている途中で、次の中断不可処理が実行される場合は、ステップS5の処理においてステップS7の処理を行なうようにしてもよい。
ステップサイズ変更部836は、ステップサイズが初期値(または下限値)に達したか否かを判定する(ステップS9)。ステップS9においてステップサイズが初期値に達したと判定されると(YES)、HMI制御部8は、システムの停止要求があるか否かを判定する(ステップS10)。HMI制御部8が、システムの停止要求があると判定すると、当該制御が終了する一方、HMI制御部8が、システムの停止要求がないと判定すると、ステップS1以降の処理が再び行なわれる。
また、ステップサイズ変更部836は、ステップS9においてステップサイズが初期値(または下限値)に達していないと判定すると(NO)、ステップサイズを減少し(ステップS11)、インクリメンタルガベージコレクションの再起動から一定時間待機して(ステップS12)、再びステップS9の処理を行なう。
なお、中断不可処理が頻繁に生じない場合は、起動・停止制御部835がステップS7において中断不可処理が発生したか否かを判定する必要はない。しかしながら、中断不可処理が頻繁に生じる場合には、起動・停止制御部835は、ステップS8,S9,S11,S12の間にも、ステップS7の処理を行なう必要がある。ステップS8,S9,S11,S12の間にステップS7の処理を行なう場合、中断不可処理が発生したときにはステップS2へ移行する。
また、ステップサイズ変更部836は、ステップS8において、インクリメンタルガベージコレクションが再起動したときに、最初のステップサイズの減少を行なってもよい。
ステップサイズ変更部836は、ステップS12において、上述の式のLを減少させていくことにより、図5に示すように、インクリメンタルガベージコレクションの起動から例えば10秒ごとに1つ下のレベルにステップサイズを減少させていく。図5におけるステップサイズを減少させる値(縦軸の値)は、ガベージコレクションの種類によって異なる。また、図5に示す例は、上限値4250から初期値2000までステップサイズを減少させていく。ステップサイズ変更部836は、所定の演算によってステップサイズを算出して、ガベージコレクション実行部9に与えている。
ステップS1において、通知された処理が中断不可処理でないと判定すると、動作制御部81は通常処理を実行する(ステップS14)。この後、処理がステップS1に戻る。
また、ステップS7において中断不可処理が発生していると判定されると(YES)、処理がステップS2に戻る。
ステップS2において、空き容量判定部834は、中断不可処理のメモリ使用量が空き容量未満でない(空き容量以上である)と判定すると(NO)、空き容量が中断不可処理を実行するために足りないと判断する。この場合は、空き容量判定部834および起動・停止制御部835によるフルガベージコレクションまたはインクリメンタルガベージコレクションを選択的に行なうガベージコレクション選択的動作処理が行なわれる。
続いて、当該ガベージコレクション選択的動作処理について図4を参照して説明する。
図4に示すように、まず、空き容量判定部834は、上記の判断に基づいて、中断不可処理のメモリ使用量と空き容量との差が所定値以上であるか否かを判定する(ステップS131)。ステップS2において、メモリ使用量が空き容量以上であると判定されているので、メモリ使用量は、空き容量と等しいか、または空き容量よりも大きい。そこで、メモリ使用量を確保するために少なくとも解放すべきメモリ量である、メモリ使用量と空き容量との差が所定値以上であるか否かに応じて、フルガベージコレクションまたはインクリメンタルガベージコレクションを選択的に動作させる。
ステップS131において中断不可処理のメモリ使用量と空き容量との差が所定値以上であると判定されると(YES)、起動・停止制御部835は、ガベージコレクション実行部9にフルガベージコレクションの起動を指示する。これにより、ガベージコレクション実行部9はフルガベージコレクションを起動する(ステップS132)。ステップS132において、インクリメンタルガベージコレクションが動作している場合は、起動・停止制御部835は、ガベージコレクション実行部9にインクリメンタルガベージコレクションの停止を指示する。
起動・停止制御部835は、起動後のフルガベージコレクションが終了したか否かをフルガベージコレクションが終了するまで(NO)監視している(ステップS133)。フルガベージコレクションが終了すると(YES)、ステップサイズ変更部836は、ステップサイズを初期値に設定する(ステップS134)。この後、処理が上述のステップS3の処理に戻る。
また、ステップS131において中断不可処理のメモリ使用量と空き容量との差が所定値以上でない(所定値未満である)と判定されると(YES)、ステップサイズ変更部836は、ステップサイズを最大値に設定する(ステップS135)。ここで、ステップサイズ変更部836は、メモリ使用量予測部833によって予測されたメモリ使用量と空き容量との差分である、追加して解放が必要なメモリ量に基づいてステップサイズを特定してもよい。この場合は、ステップサイズの設定値が最大値には限定されない。ステップサイズ変更部836は、ステップサイズを設定するときに、併せて現在のステップサイズをメインメモリ12にバックアップしておく。
次いで、起動・停止制御部835は、インクリメンタルガベージコレクションが停止しているか否かを判定する(ステップS136)。起動・停止制御部835は、インクリメンタルガベージコレクションが停止しているときには、ガベージコレクション実行部9にインクリメンタルガベージコレクションの起動を指示する。これにより、ガベージコレクション実行部9はインクリメンタルガベージコレクションを起動する(ステップS137)。
その後、空き容量判定部834は、中断不可処理に必要な空き容量が確保されたか否かを判定する(ステップS138)。ステップS138において中断不可処理に必要な空き容量が確保されたと判定されると、ステップサイズ変更部836は、ステップサイズをバックアップしておいた元の値に戻す(ステップS139)。この後、処理が上述のステップS3の処理に戻る。
ステップS136においてインクリメンタルガベージコレクションが停止していない(起動している)と判定されると、処理がステップS138に移行する。空き容量判定部834は、ステップS138において中断不可処理に必要な空き容量が確保されていないと判定すると(NO)、一定時間待機して(ステップS140)、再びステップS138の処理を行なう。
中断不可処理のメモリ使用量が空き容量以上であっても、メモリ使用量が空き容量と同じか、少し超えた程度であれば、メモリ解放量は少なくてよい。このような場合は、フルガベージコレクションによってヒープ領域12aを全て解放するよりも、中断不可処理に必要な空き容量が確保されるまで一時的にステップサイズを大きくしてインクリメンタルガベージコレクションを実行することが効率的である。一方、メモリ使用量と空き容量との差が大きければ、メモリ解放量を多くする必要がある。この場合は、インクリメンタルガベージコレクションでは適切なステップサイズの設定が難しく、設定が適正でなければ解放処理が無駄に中断されるおそれがあることから、非効率である。したがって、この場合は、フルガベージコレクションを実行することが好ましい。
そこで、メモリ使用量と空き容量との差が所定値以上であればフルガベージコレクションを起動し、メモリ使用量と空き容量との差が所定値未満であればインクリメンタルガベージコレクションを起動する。上記の所定値は、特に具体的な値を示さないが、フルガベージコレクションまたはインクリメンタルガベージコレクションが効率的に行なわれるように、使用環境に応じて適切な値に設定される。
ガベージコレクション制御部83は、以上のメインルーチンによってガベージコレクションの制御を行なう。また、ガベージコレクション制御部83は、上記のメインルーチンのバックグラウンドで、定期的にガベージコレクションを実行する制御、およびメモリ使用量の予測に基づくガベージコレクションの制御を行なう。続いて、これらの制御について説明する。
図6は、HMI機器1によるガベージコレクションの他の制御の手順を示すフローチャートである。図7は、HMI機器1によるガベージコレクションのさらに他の制御の手順を示すフローチャートである。図8は、HMI機器1によるメモリ使用量の予測方法を示すグラフである。
定期的にガベージコレクションを実行する制御について説明する。
図6に示すように、まず、起動・停止制御部835は、インクリメンタルガベージコレクションが5秒以上停止しているか否かを判定する(ステップS21)。起動・停止制御部835は、インクリメンタルガベージコレクションが5秒以上停止していると判定すると(YES)、ガベージコレクション実行部9を起動させる(ステップS22)。これにより、ガベージコレクション実行部9は、インクリメンタルガベージコレクションを実行する。
そして、HMI制御部8は、システムの停止要求があるか否かを判定する(ステップS23)。HMI制御部8が、システムの停止要求があると判定すると、当該制御が終了する一方、HMI制御部8が、システムの停止要求がないと判定すると、ステップS21以降の処理が繰り返される。
続いて、メモリ使用量の予測に基づくガベージコレクションの制御について説明する。
図7に示すように、まず、メモリ使用量予測部833は、中断不可処理が実行されることにより発生するメモリ使用量を予測する(ステップS31)。メモリ使用量予測部833は、過去に使用された使用メモリ量を領域監視部831から取得し、取得した使用メモリ量に基づいて所定の演算を行なうことにより、後のメモリ使用量の増加量を予測する。具体的には、メモリ使用量予測部833は、図8に示すように、直近3回の使用メモリ量V1〜V3を用いて以下の式(1)または式(2)の演算によりメモリ使用量Mを予測する。各式において、V3は現在の使用メモリ量を表し、V2は1秒前の使用メモリ量を表し、V1は2秒前の使用メモリ量を表している。使用メモリ量は、領域監視部831によって1秒ごとに算出されてメインメモリ12に保存されている。メモリ使用量予測部833は、これらの使用メモリ量を取得することで次式の演算を行なう。
0秒時は、使用メモリ量V1,V2が現在の使用メモリ量V3と同じ値となる。また、1秒時は、使用メモリ量V1が使用メモリ量V2と同じ値となる。このように使用メモリ量V1,V2が等しい場合、メモリ使用量予測部833は、式(1)に基づいてメモリ使用量Mを算出する。あるいは、この場合、メモリ使用量予測部833は、使用メモリ量V1,V2の平均をメモリ使用量Mとして算出してもよい。一方、2秒時以降は、使用メモリ量V1,V2が同じ値となる場合と、使用メモリ量V1,V2が異なる値となる場合とがある。メモリ使用量予測部833は、前者の場合、式(1)に基づいてメモリ使用量Mを算出する一方、後者の場合、式(2)に基づいてメモリ使用量Mを算出する。
M=V3+(V3−V2) …(1)
M=V3+{(V3−V2)2/(V2−V1)} …(2)
V3−V2は、V2−V1よりも起こる確率が高いと考えられる。このため、メモリ使用量予測部833は、V3−V2という項を含む簡単な上式(1)または上式(2)でメモリ使用量を算出する。
図8に示す例では、V1=25、V2=35、V3=40を用いて上式の演算を行なった結果、メモリ使用量の予測値として42.5(K bytes)が得られたことを示している。
なお、メモリ使用量予測部833によるメモリ使用量の予測のアルゴリズムは、上式で表されるアルゴリズムに限らず、他のアルゴリズムを用いてもよい。例えば、後述するような高性能のコンピュータ機器においては、高精度な予測アルゴリズムを利用してもよい。
その後、空き容量判定部834は、領域監視部831から現在の空き容量を取得するとともに、メモリ使用量予測部833からメモリ使用量の予測値(予測メモリ使用量)を取得する(ステップS32)。空き容量判定部834は、取得した予測メモリ使用量が、取得した空き容量を超えるか否かを判定する(ステップS33)。起動・停止制御部835は、予測されたメモリ使用量が空き容量を超えると判定すると(YES)、フルガベージコレクションを実行するようにガベージコレクション実行部9を起動する。これにより、ガベージコレクション実行部9がフルガベージコレクションを実行する(ステップS34)。
なお、ステップS34では、図4に示すように、フルガベージコレクションおよびインクリメンタルガベージコレクションのいずれかを選択的に実行してもよい。
起動・停止制御部835は、ステップS33において、予測されたメモリ使用量が空き容量を超えていないと判定すると(NO)、一定時間待機し(ステップS36)、メモリ使用量予測部833にメモリ使用量の予測を指示する。これにより、再びステップS31以降の処理が行なわれる。
そして、HMI制御部8は、システムの停止要求があるか否かを判定する(ステップS35)。HMI制御部8が、システムの停止要求があると判定すると、当該制御が終了する一方、HMI制御部8が、システムの停止要求がないと判定すると、ステップS31以降の処理が繰り返される。
以上のように、本実施形態に係るHMI機器1は、ガベージコレクション制御部83を備えている。
ガベージコレクション制御部83は、空き容量が中断不可処理を実行するのに足りる場合、インクリメンタルガベージコレクションを停止させる。具体的には、ガベージコレクション制御部83は、中断不可処理が使用しようとするメモリ使用量が空き容量未満である場合、空き容量が中断不可処理を実行するのに足りると判断する。また、ガベージコレクション制御部83は、中断不可処理が実行されないときにインクリメンタルガベージコレクションを再起動させる。
このように、中断不可処理の実行に影響を及ぼすガベージコレクションを実行しないことにより、中断不可処理を中断することなく実行することができる。また、インクリメンタルガベージコレクションは、動作を停止しても、中断不可処理が実行されないときには再起動する。これにより、インクリメンタルガベージコレクションが動作する期間をできるだけ長く設けることができる。それゆえ、空き容量が十分ある状態であっても、ヒープ領域12aの解放処理が適宜実施される。それゆえ、中断不可処理が実行されない場合であっても、インクリメンタルガベージコレクションを動作させて、CPU11を効率的に稼働させることができる。
また、ガベージコレクション制御部83は、インクリメンタルガベージコレクションを上記のように停止したときには、インクリメンタルガベージコレクションのステップサイズを増加させる。
また、単にガベージコレクションを停止させるだけでは、中断不可処理が繰り返し行なわれると、直ぐに空き容量が無くなって、フルガベージコレクションを行なわなければならない。したがって、フルガベージコレクションが極力実行されないように、インクリメンタルガベージコレクションのステップサイズを増加させる。これにより、インクリメンタルガベージコレクションの1回のステップで解放されるメモリ量が多くなるので、ヒープ領域12aにおいて不要となった領域を早く解放することができる。したがって、中断不可処理が中断する状態をできるだけ回避することができる。
特に、HMI機器1においては、画面切り替えのようなリアルタイム性を要求される処理が繰り返し実行される場合、画面切り替えの動作が遅くなるといった事態を極力発生させないようにすることができる。
また、ガベージコレクション制御部83は、ステップサイズに上限値を設け、ステップサイズが上限値を超えないようにしている。これにより、ヒープ領域12aにおいて不要となった領域が大きくなったときに、その解放処理に多くの時間が費やされるという不都合を回避することができる。
また、ガベージコレクション制御部83は、空き容量が中断不可処理を実行するのに足りない場合、フルガベージコレクションを実行するとともに、インクリメンタルガベージコレクションのステップサイズを初期値に戻す。具体的には、ガベージコレクション制御部83は、中断不可処理が使用しようとするメモリ使用量が空き容量以上である場合、空き容量が中断不可処理を実行するのに足りないと判断する。
フルガベージコレクションによって十分な空き容量が確保できた状態で通常処理が行なわれる場合、使用メモリ量が多くないにも関わらず、ステップサイズが増加したままでインクリメンタルガベージコレクションを実行すると、非効率的である。そこで、ステップサイズを初期値に戻すことにより、効率的にガベージコレクションを行なうことができる。
また、ガベージコレクション制御部83は、空き容量が中断不可処理を実行するのに足りない場合、空き容量に応じてフルガベージコレクションおよびインクリメンタルガベージコレクションのいずれかを選択的に実行する。具体的には、ガベージコレクション制御部83は、中断不可処理のメモリ使用量とヒープ領域12aにおける空き容量との差が所定値以上である場合は、フルガベージコレクションを実行し、上記の差が所定値未満である場合は、インクリメンタルガベージコレクションを実行する。
メモリ使用量と空き容量との差が小さい場合には、フルガベージコレクションを実行すると、必要以上に要して(無駄な時間が生じて)、中断不可処理が中断されることになる。したがって、この場合は、インクリメンタルガベージコレクションを実行して、上記の無駄な時間を削減することができる。これにより、無条件でフルガベージコレクションを実行するよりも、必要な空き容量を早く確保することができる。
また、ガベージコレクション制御部83は、上記のように、中断不可処理が実行されずにインクリメンタルガベージコレクションを再起動するとき以後に、ステップサイズ減少する。
通常処理が実行されるときには、突発的な使用メモリ量の増加はあまり生じない。このような場合にステップサイズが増加したままでインクリメンタルガベージコレクションを実行すると、過度にヒープ領域12aの解放が行なわれることになり、通常処理の実行に影響を及ぼす。そこで、ステップサイズを一定期間ごとに徐々に減少することにより、インクリメンタルガベージコレクションによるメモリの解放量を減らして、過度に解放処理を行なわれないようにすることができる。
また、ガベージコレクション制御部83は、図7に示すように、中断不可処理に対するメモリ使用量を予測して、メモリ使用量の予測値が、ヒープ領域12aの空き容量を超える場合に、フルガベージコレクションを起動させる。
上記のように、空き容量が中断不可処理を実行するのに足りない状態でフルガベージコレクションを実行する場合、中断不可処理の実行時にフルガベージコレクションが起動されることになり、中断不可処理が待たされる。画面切替のような中断不可処理を実行する場合、画面切替が実行されるか否かはオペレータの操作次第であるので、画面切替を頻繁に行なっている場合、その後切替が起こる可能性が高いと予測できる。そこで、中断不可処理が開始するまでの期間を利用して、予め予測しておいたメモリ使用量に基づいてフルガベージコレクションを起動する。これにより、中断不可処理の実行がフルガベージコレクションの終了まで待たされる時間を短縮することができる。
一般に、中断不可処理を実行していない場合、ユーザは、ソフトウェアを利用している際に、操作をしていないときの処理が遅くなるよりも、操作に対する処理が遅くなる方が、利用しているソフトウェアが遅いソフトウェアであるという印象を持ちやすい。そこで、ユーザに遅いと感じさせないように、中断不可処理を行なう前に、上記のようにしてフルガベージコレクションを行なうことが効果的である。
なお、無条件にフルガベージコレクションを実行する代わりに、前述のように、フルガベージコレクションおよびインクリメンタルガベージコレクションを選択的に実行してもよい。
また、ガベージコレクション制御部83は、インクリメンタルガベージコレクションが一定期間以上停止して動作をしていない場合、図6に示すように、インクリメンタルガベージコレクションを再開させる。これにより、中断不可処理が繰り返して行なわれる場合に、図3に示すメインルーチンにおいてガベージコレクションが実行されていない間に生じるメモリ容量不足を解消することができる。
なお、本実施形態では、HMI機器1を専用機として説明したが、汎用のコンピュータにHMIプログラムを実行させることによりHMI機器として動作させてもよい。このようなHMI機器としては、制御対象の監視および制御を行うプログラマブル表示器、SCADA(Supervisory Control And Data Acquisition)のような監視・制御システムなどが該当する。
また、本実施形態では、HMI機器1について説明したが、HMI機器1に限らず、汎用のOS(Operating System)を実装したコンピュータ機器であってもよい。このようなコンピュータ機器としては、パーソナルコンピュータ、産業用コンピュータ、パネルコンピュータなどが挙げられる。このようなコンピュータ機器は、高性能のCPUおよび大容量のメインメモリを搭載しているので、中断不可処理が頻発してもメモリ量の不足に陥ることは少ないかもしれない。しかしながら、マルチタスクによって複数のアプリケーションプログラムが実行されている状態で中断不可処理が頻発したときなどに本実施形態のガベージコレクション制御を適用すれば、メモリの解放が効率的に行なわれる。これにより、全体的な処理の効率を向上させることができる。
〔ソフトウェアによる実現例〕
HMI機器1の制御ブロック(特にHMI制御部8)は、CPU11を用いてソフトウェアによって実現されるが、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよい。
前者の場合、HMI機器1は、CPU11が、各機能を実現するソフトウェアであるプログラムの命令を実行し、上記プログラムおよび各種データがCPU11で読み取り可能に記録されたユーザメモリ14に記憶される。そして、CPU11が上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して上記コンピュータに供給されてもよい。なお、本発明の一態様は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。