JP3027845B2 - プログラム制御装置および方法 - Google Patents

プログラム制御装置および方法

Info

Publication number
JP3027845B2
JP3027845B2 JP10260427A JP26042798A JP3027845B2 JP 3027845 B2 JP3027845 B2 JP 3027845B2 JP 10260427 A JP10260427 A JP 10260427A JP 26042798 A JP26042798 A JP 26042798A JP 3027845 B2 JP3027845 B2 JP 3027845B2
Authority
JP
Japan
Prior art keywords
thread
context switch
processing
state
priority
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.)
Expired - Fee Related
Application number
JP10260427A
Other languages
English (en)
Other versions
JPH11212808A (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.)
Omron Corp
Original Assignee
Omron Corp
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 Omron Corp filed Critical Omron Corp
Priority to JP10260427A priority Critical patent/JP3027845B2/ja
Priority to US09/195,125 priority patent/US6910213B1/en
Publication of JPH11212808A publication Critical patent/JPH11212808A/ja
Application granted granted Critical
Publication of JP3027845B2 publication Critical patent/JP3027845B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、コンピュータの
プログラム制御装置およびその方法に関する。
【0002】
【従来の技術】先ず、本願発明の明細書において用いる
各種用語の定義を以下に示す。尚、出典記号は次のとお
りである。
【0003】 JIS:JIS工業用語大辞典第4版(日本規格協会
刊) 参1:情報技術用語事典(オーム社刊) 参2:情報処理用語大事典(オーム社刊) 参3:先端ソフトウエア用語事典(オーム社刊) 参A:SUPER ASCII Glossary Help on Internet (1) プロセス(process) :処理や過程を意味する一般用
語(参2) (2) スレッド(thread):プロセスまたはタスクと呼ばれ
る1つの実行環境の中で並列実行可能な処理を複数に分
割した場合に、プロセッサのスケジュール対象となる実
行単位または制御フローのこと。(参3) (3) コンテキスト(context) :(オブジェクト指向シス
テムに関連して)メソッドを実行するために必要な情報
を蓄えるオブジェクトをいう。コンテキストは、呼び出
し先のコンテキスト、プログラムの入ったメソッドオブ
ジェクト、プログラムカウンタ、スタックポインタとい
う情報、引数や一時変数を取るところ、および評価スタ
ックから成立する。このような実行環境をオブジェクト
としてとるが、プロセスなどをサポートする高級言語の
特徴でヒープ言語と呼ばれる。他方PASCALやAL
GOL60では実行環境はスタックにとられFORTR
ANでは固定領域にとられる。(参1) (4) タスク(task):多重プログラミング又は多重プロセ
ッシングの環境において、計算機によって実行されるべ
き仕事の要素として制御プログラムによって取り扱われ
る命令の1つ以上の列(JIS) (5) ガベージ(garbage) :どこからも参照されていない
が、生成されてしまったオブジェクト。ガベージはガー
ベジコレクタで回収する。(参1) (6) ガベージコレクション(Garbage Collection):(オ
ブジェクト指向システムに関連して)メモリ管理の中心
となるプログラムを言う。主記憶を使いきるとメインの
計算を止め、ガーベジコレクタを動かして、もはや使わ
れていないオブジェクトを全部集める方法である。この
方法でガーベジコレクタが働くと、計算が止まってしま
うため入出力が全く反応しなくなり、実時間の応答が必
要な用途には使えない。(参1) (7) インタプリタ(interpreter) :解釈実行を行う翻訳
プログラム(JIS) (8) リアルタイム(real time) :計算機外部の他の処理
との関係をもちながら、かつ外部の処理によって定めら
れる時間要件に従って、計算機の行うデータの処理に関
する用語。実時間。(JIS) (9) オブジェクト(object):プロシジュア(定義した手
続き)とデータの特性を結合させるエンティティ(実
体)であり、これにより計算が行われ、局部的状態が蓄
えられる。(参1) (10) クラス(class) :同一の手続き群とデータ構造を
持つオブジェクトの集合。(参3) (11) ヒープ領域(heap area) :プログラム実行時に必
要に応じて使用されるような作業領域。(参2) (12) スケジュールする(scheduling):ディスパッチさ
れるべきジョブ又はタスクを選択すること。(JIS) (13) イベント(event) :ハードウエア/ソフトウエア
が、自分自身の状態の変化を他のハードウエア/ソフト
ウエアに通知すること。一般にこの際の通知では、イベ
ントの種類やハードウエア/ソフトウエアの状態を表す
各種パラメータをメッセージとしてまとめ、相手に送信
する。そしてイベントの通知を受けた側では、メッセー
ジのパラメータなどから適切な処理を行う。(参A) (14) イベントフラグ(event flag):タスクが1つまた
は複数の事象の発生を待ち合わせるための機能とその事
象を通知する機能とからなるタスク間同期通信機構。
(参3) (15) セマフォ(semaphore) :複数のプロセスやタスク
を並列に処理するシステムで、各プロセス間,タスク間
の同期やメッセージ制御、割込処理を行うための仕組
み。(参3) (16) 仮想マシーン(仮想機械)(virtual mathine) :
複数の特定のプラットホーム(OSやハードウエア)に
組み込まれた、特定のプラットホームに依存しないアプ
リケーションプログラムを実行する環境。同じ仮想マシ
ンさえ提供されていれば、プラットホームが変わっても
同じアプリケーションプログラムが実行できる。
【0004】(17) Java VM(Java Virtual Machine) :
オペレーティングシステムに組み込まれた、Javaア
プリケーションプログラムを実行するための環境。一般
的なプログラムは、ソースコードをコンパイルして、そ
れぞれのオペレーティングシステムに最適化した実行コ
ードを生成する、というスタイルを採る。Javaで書
かれたプログラムも同様の手順で作成するが、コンパイ
ル後のコードは、特定のオペレーティングシステムに依
存しない中間コードの形をとる。これをロードし、各オ
ペレーティングシステムに合わせたコードに変換しなが
ら実行するのがJava仮想マシンの役目であり、同じ
仮想マシンさえ提供されていれば、プラットホームが変
わっても同じコードが実行できるようになっている。
【0005】(18) フリー領域(free area) :ヒープ領
域上の使用可能な領域、未使用領域。
【0006】(19) ノーマルスレッド(normal thread)
:リアルタイム性が要求されない処理を行うスレッ
ド。
【0007】(20) マークテーブル(mark table):オブ
ジェクトがどこからも参照されないか否かを調べるため
に存在するオブジェクトに1対1に対応する表。或るオ
ブジェクトに参照があることが確かめられた場合、その
オブジェクトに対応する表の欄にマークを付ける。全て
の参照関係を調べたときマークの無いオブジェクトは不
要であるので取り除くことができる。
【0008】(21) オブジェクトの寿命(life time of t
he object) :オブジェクトが生成され、消去されるま
での時間。
【0009】(22) ライトバリア(write barrier) :オ
ブジェクトへの参照関係の変更をチェックし、書き替え
が起こった場合に何らかの処理をすること。本件の場合
は、書き替えが起きたとき、書き替える参照が指してい
るオブジェクトに対応するマークテーブルの欄にマーク
を付ける。
【0010】(23) スイープ(sweeping):ヒープ領域上
の不要なオブジェクトを取り除く処理。
【0011】(24) オブジェクト生成(create the objec
t) :新しいオブジェクトを生成すること。具体的に
は、ヒープ領域の一部をオブジェクトに割り当て、内容
を初期化すること。
【0012】(25) オブジェクト消去(delete the objec
t) :不要なオブジェクトを取り除くこと。具体的に
は、ヒープ領域に確保してある領域を解放すること。
【0013】(26) 参照(reference) :或るオブジェク
トAが別の特定のオブジェクトBにアクセスするために
オブジェクトBを特定する情報。具体的には、オブジェ
クトBを指すポインタまたはインデックス。
【0014】(27) 参照変更(chenge the reference /
reconnect the reference) :参照を現在のオブジェク
トBから別のオブジェクトCに変更すること。
【0015】さて、従来のシングルプロセッサのコンピ
ュータシステムにおいて、オペレーティングシステム上
で複数のスレッドを並行処理する場合、共有メモリを用
いて排他制御するために、また複数のタスク間で同期を
とるために、従来よりセマフォやイベントフラグなどを
用いて排他制御が行われている。
【0016】また、例えばプログラムを少量のメモリ環
境下で動作させることなどを目的として、仮想記憶を行
わないで単一のアドレス空間のメモリをプログラムの実
行時に動的に割り当てる、いわゆる動的記憶管理が従来
より行われている。このような動的記憶管理によれば、
プログラムにより明示的にメモリ領域の解放を行わなけ
れば、プログラムの実行過程において使用されなくなっ
たメモリ領域が発生する。その結果、プログラムが使用
できるフリー領域が次第に不足する。こうした問題を回
避するために、使用されなくなったメモリ領域(ガベー
ジ)を抽出し、これらを集めて(コレクトして)再び使
用可能なフリー領域とする、ガベージコレクションと呼
ばれる処理を自動的に行うようにしている。
【0017】ここで従来のガベージコレクションの処理
手順をフローチャートとして図49に示す。ガベージコ
レクションのアルゴリズムにはマーク&スイープ法、複
写法、参照カウント法などの各種方法が考えられている
が、ここではマーク&スイープ法について例示する。図
54に示すように、まずガベージコレクションの途中で
ガベージコレクションスレッド以外の他のスレッドが実
行されないように割り込みを禁止し、シングルスレッド
モードにする(s201)。続いてメモリ上のガベージコレク
ションの対象となる領域(以下「ヒープ領域」とい
う。)に割り当てられているオブジェクトにそれぞれ対
応するマークの記憶領域(以下「マークテーブル」とい
う。)をクリアする(s202)。続いてヒープ領域内に割り
当てられているオブジェクトの参照関係を示す情報を基
に何れかのオブジェクから参照されているオブジェクト
を検出し、それらに対応するマークテーブル上の位置に
マークを付ける処理を行う(s203)。この処理により、何
れのオブジェクトからも参照されていないオブジェクト
はもはや使われなくなったオブジェクトであり、それに
相当するマークテーブルにはマークが付けられないこと
になる。従ってそのマークしていないオブジェクトを新
たなオブジェクトの割当可能な領域、すなわちフリー領
域として抽出する(s204)。例えばこのフリー領域をリス
ト構造のデータとして生成する。その後、割り込み禁止
を解除し、マルチスレッドのモードに戻す(s205)。
【0018】従来はこのようなガベージコレクション
が、メモリのフリー領域が所定量まで減少した時点で自
動的に起動されるようにしていた。
【0019】また、ガベージコレクションを行ったと
き、任意の大きさ(メモリサイズ)のオブジェクトが任
意に解放されるのでフラグメントが発生する。そこで、
連続したサイズの大きな領域がとれるように、オブジェ
クトの割当領域を例えば先頭から順次詰めるメモリコン
パクション(以下単に「コンパクション」という。)を
実行していた。
【0020】
【発明が解決しようとする課題】上述した排他制御の機
能をセマフォやイベントフラグなどのコンピュータ資源
を用いることで実現している従来のシステムにおいて
は、その資源が他のスレッドなどで使用されている場合
には、他のスレッドはその資源が解放されるのを待たな
ければならない。このような資源待ちの時間が生じる
と、リアルタイム性の要求されるシステムにおいては大
きな障害となる。すなわち、資源待ち状態にあるスレッ
ドは、その資源が解放されるまで、処理できずリアルタ
イムな応答が不可能となる。
【0021】例えば上記従来のガベージコレクション
(以下「GC」という。)の方法によれば、メモリ空間
が広いほど、ガベージとしてコレクトしてもよい領域を
見つけ出すのに時間がかかり、例えば64〜128MB
のヒープ領域で数秒間を要し、且つGCはフリー領域が
ある程度減少した時点で不定期に行われるので、リアル
タイム性の要求されるシステムには用いることができな
かった。
【0022】リアルタイム性の要求されるシステムで
は、あるタスクを実行中に何らかのイベント(割り込
み)が発生すれば、そのイベントに応じた他のスレッド
を処理することになるが、そのスレッドの切替に要する
時間は、最悪値として例えば数十μsec以下であるこ
とが要求される。ところが、上述したようにGCが何時
起動されるか予測できず、一旦起動されれば、CPUは
数秒間GCに専念することになるため、その間リアルタ
イム処理は不可能となる。
【0023】上述の問題はGCの場合に限らず、長時間
の資源待ち状態が生じるシステムに共通の問題である。
【0024】この発明の目的はセマフォやイベントフラ
グなどのコンピュータ資源をロックのメカニズムとして
使用せずに、処理の排他性を保証することにより、上述
の問題を解消することにある。
【0025】GCの他の方法として、従来の複写法をイ
ンクリメンタルに行うようにして、リアルタイム性を確
保する方法が情報処理Vol.35 No.11 pp1008 〜pp1010に
示されている。この方法によれば、GCの途中で中断を
許すことができるので、時分割的に他のスレッドと並行
処理することが一応はできる。しかし、この複写法をイ
ンクリメンタルに行うようにする方法では、複写中に他
のスレッドがメモリを使用する訳にはいかないので、メ
モリを使用しない極一部のスレッドしか並行処理できな
い。また、複写法では、複写元と複写先のメモリ領域を
確保しておかなければならないので、メモリの使用効率
が低く、少量のメモリ環境下で動作させるシステムには
向かない。
【0026】また、マーク&スイープ法でマルチスレッ
ドに対応するために参照関係が変更される度にマークを
付与する方法は、「On-the-fly GC 」という名前で、G
C専用のCPUに処理を割り当てるマルチCPU化のた
めの方法が情報処理Vol.35 No.11 pp1006 〜pp1008に示
されている。しかし、この方法では、オブジェクトが常
に作成されて、且つ参照関係が変更されている場合に、
既にマークしているツリーを何回も辿り直して新しいノ
ードを見つけてマークしなければならず、マーク作業が
いつまでも終わらない場合が生じたり、非常に長い時間
がかかる、という問題があった。また、この方法ではス
イープ中にシステムをロックする必要があった。
【0027】そこで、この発明の他の目的はマーク&ス
イープ法でありながらGCスレッドを他のスレッドと実
質的に並行処理可能とし、GCの任意の時点で中断して
も短時間に確実にGCを完了できるようにしたインクリ
メンタルなGCを可能とすることにある。
【0028】
【0029】
【0030】
【0031】
【0032】ここで、先行技術調査を行った際に発見し
た文献と本願発明との関係について示しておく。
【0033】(1) Incremental Garbage Collection of
Concurrent Objects for Real-TimeApplication この論文はBaker が書いたという1978年のリアルタイム
GCに対して、全体の処理時間から必要なGCの処理時
間の割合を求めるものである。本願発明に係る課題を解
決するものではない。
【0034】(2) Distributed Garbage Collection for
the Parallel Inference Machine:PIE64 GCを行う領域を細かく分けることにより、個々の処理
時間を短くしてリアルタイム性を向上する方法である。
本願発明のように全ての領域を対象にするものとは基本
的に異なる。また、スケジューリングについては述べら
れていない。
【0035】(3) Garbage Collection in Distributed
Enviroment Baker の考えを発展させ、ネットワークの分散環境に適
応したもの。ネットワーク固有の問題を解決しようとす
るものであり、本願発明とは異なる。この分散環境の考
え方に、本願発明のスケジューラを組み合わせることに
より、分散環境でより高度なリアルタイムCGを実現す
ることも可能となる。
【0036】(4) 特開平1−220039号 システムコール発行時に、そのシステムコールにより起
動されるタスクの優先度を制御するもの。優先度制御と
いう点で共通点があるだけ。
【0037】(5) 特開平3−231333号 オブジェクトのサイズを検出し、そのサイズに応じてワ
ークエリアをメモリに確保することが一応示されてい
る。
【0038】(6) 電子情報通信学会誌Vol.80 No.6 pp58
6-592 マルチメディアオペレーティングシステムのコンセプト
が示されている。
【0039】(7) 日本ソフトウェア科学会第12回D7
−4 スタック上のオブジェクトの一番上にオブジェクトの大
きさを書いておくことが示されている。すなわちオブジ
ェクトのサイズを記憶しておく、という点でのみ関連が
ある。
【0040】(8) 11TH Real-Time System Symposium "I
ncremental Garbage Collection ofConcurrent Object
for Real-Time Applications" オブジェクト間の参照ツリーに類似の考え方が示されて
いる。
【0041】(9) 情報処理学会第38回全国大会5U-7 オブジェクトの寿命に関連してメモリ割当を行うことが
示されている。
【0042】(10)Lecture Notes in Computer Science
259 "Garbage Collection in a Distributed Environme
nt" アプリケーションプログラムインタフェースの呼出に応
じてGCを制御することと、オブジェクト参照に関する
技術思想が示されている。
【0043】
【課題を解決するための手段】この発明の請求項1,
に係る発明は、或るスレッドからの、コンテキス
トスイッチ発生有無検出の開始を依頼するアプリケーシ
ョンプログラムインタフェースの呼び出しに応答して、
コンテキストスイッチの発生有無を示すフラグをコンテ
キストスイッチが発生していない状態に設定し、前記フ
ラグがコンテキストスイッチの発生していない状態に設
定された後、スケジューラによってコンテキストスイッ
チが行われたとき、前記フラグをコンテキストスイッチ
が発生した状態に設定するようにし、前記スレッドから
の、コンテキストスイッチ発生有無検出の終了を依頼す
るアプリケーションプログラムインタフェースの呼び出
しに応答して、前記フラグの状態に応じた値を前記スレ
ッドに返す。
【0044】これにより、コンピュータ資源をロックの
メカニズムとして使用せずに、処理の排他性保証
る。すなわち或るスレッドAからのコンテキストスイッ
チ発生有無検出の開始を依頼するアプリケーションプロ
グラムインタフェース(以下「API」という。)の呼
び出しからコンテキストスイッチ発生有無検出の終了を
依頼するAPIの呼び出しまでの間で行われたスレッド
Aの処理の途中で、コンテキストスイッチがあったか否
、そのスレッドAで分かるようにする。もしコンテ
キストスイッチが発生しなければ、スレッドの切替は行
われておらず、排他性が保たれている(例えば上記AP
Iを発行したスレッドAが使用しているメモリ内容が他
のスレッドBにより書き替えられていない)ことが分か
る。逆に、コンテキストスイッチが発生していれば、そ
の間のスレッドの処理を無効にして、例えばその処理を
再度実行するなどの方法によって高い応答性を保ちなが
ら、排他制御を行うことができるようにる。
【0045】また、或るスレッドの優先度を高い状態と
低い状態とに交互に変更するようにしておき、コンテキ
ストスイッチ発生有無検出の開始を依頼するアプリケー
ションプログラムインタフェースの呼び出しから前記コ
ンテキストスイッチ発生有無検出の終了を依頼するアプ
リケーションプログラムインタフェース呼び出まで
予定されている処理時間を受け取って、前記スレッド
の優先度が高い状態のとき、該スレッドの優先度が低い
状態になるまでの残時間と前記処理時間とを比較し、前
記残時間が前記処理時間より短いことを検知したとき
、前記スレッドの優先度を低くする。
【0046】これにより、上記処理時間内に終了できな
い状態は、その処理が行われることがないため、その分
のCPUパワーを無駄にすることがなく、全体の処理を
進められる。
【0047】請求項に係る発明は、メモリのヒープ領
域内の他のいずれかのオブジェクトから参照されている
オブジェクトを検出し、当該オブジェクトを前記ヒープ
領域内の所定領域に複写する複写方式のガベージコレク
ションスレッドの際に、上記のコンテキストスイッチの
検出による処理を行う。これにより、システムをロック
することなく、GCを開始することができ、リアルタイ
ム性を保証することができる。
【0048】請求項に係る発明は、メモリのヒープ領
域内のどのオブジェクトからも参照されないオブジェク
トのメモリ領域を他のオブジェクトのメモリ割り当て可
能なフリー領域として解放することにより生じるフラグ
メントを解消するメモリコンパクションを行う際に、上
記のコンテキストスイッチの検出による処理を行う。こ
れにより、システムをロックすることなく、メモリコン
パクションを開始することができ、リアルタイム性を保
証することができる。
【0049】
【0050】
【0051】
【0052】
【0053】
【0054】
【0055】
【0056】
【0057】
【0058】
【0059】
【0060】
【0061】
【0062】
【0063】
【0064】
【0065】
【0066】
【0067】
【0068】
【0069】
【0070】
【0071】
【0072】
【0073】
【0074】
【0075】
〔第1の実施形態〕
【0076】図1は装置のハードウエアの構成を示すブ
ロック図である。装置は基本的にCPU1とオブジェク
ト群を生成するヒープ領域およびマークテーブル等を記
憶するメモリ2、および外部との入出力を行うI/O3
とから構成する。また、外部から必要なプログラムをメ
モリにロードする場合は、CD−ROM読取インタフェ
ース4を用い、プログラムが予め書き込まれたCD−R
OM5を読み取るようにする。このCD−ROMが本願
発明に係るプログラム記録媒体に相当する。
【0077】図2はソフトウエアの構成を示すブロック
図である。同図において、カーネル部分はCPUやメモ
リを資源として管理し、時分割によるマルチスレッドの
機能を実現する。VM(仮想マシーン)部分はプログラ
ムとカーネルとのインタフェースを行うソフトウエアで
あり、ここではアプリケーションプログラムから見てV
M以下の階層全体が例えばJava仮想マシンとして作
用させる。(JavaはSun Microsystems社の商標)こ
の場合、カーネルとVM部分がJavaOSを構成す
る。このVMにはプログラムがバイトコード等の中間コ
ードで与えられるとき、これを解釈するインタプリタと
その解釈に応じて呼び出されるプログラムモジュール等
を含む。同図におけるプログラムは中間コードによる各
種スレッドであり、上記インタプリタを介して、内部の
プログラムモジュールを実行する。
【0078】図3はメモリのヒープ領域に生成されるオ
ブジェクトの参照関係およびスタックとの関係を示す図
である。ヒープ領域に対してオブジェクトを生成した
際、或るオブジェクトから他のオブジェクトへの参照関
係は同図に示すようにルートノードから延びるツリー構
造を成す。例えばグローバル変数を宣言すれば、その変
数に対応するオブジェクトが生成される。またスレッド
毎に引き数領域、戻り番地、ローカル変数、作業領域等
の情報を記憶するスタックが生成され、例えば図中矢印
で示すようなスタック上のローカル変数からツリー上の
グローバル変数への参照関係なども記憶される。これら
のスタックはヒープ領域外の所定領域に格納される。
【0079】図4は図2に示したソフトウエアの構成を
ブロック図として詳細に示したものである。同図におい
て、GCモジュール10はGCを行うための各種処理の
プログラムモジュールであり、GCスレッド11はこれ
らのモジュールを呼び出すことによって、GCを実行さ
せる。また、インタプリタ12は、この例で、「スレッ
ド4」からオブジェクト生成依頼があったとき、GCモ
ジュール10の「オブジェクト生成」を呼び出し、また
オブジェクト間の参照関係の変更依頼があったとき、G
Cモジュール10の「マーク付与」を呼び出す。
【0080】なお、図4に示した例では、各スレッドが
中間コード(例えばJavaアプレットの場合バイトコ
ード)で表されているが、中間コードをVMに対するネ
イティブコードに変換するコンパイラを設けてもよい。
(例えばJavaの場合、JIT(Just-In-Time コンパ
イラ)等を設ける。)この場合、ネイティブコードで記
述したスレッドであるので、図4に示したインタプリタ
12を介さずにGCモジュール10を直接アクセスする
ことになる。
【0081】図5はGCを行うことによって、ヒープ領
域内に生じるフラグメントを解消するためのコンパクシ
ョンを行った例を示す図である。図中ハッチング部分が
オブジェクトであり、これをコンパクションすることに
よって、(B)に示すようにフラグメントが解消され
て、連続したメモリ空間が広がることになる。
【0082】上記コンパクションは図4に示したGCモ
ジュールの「コンパクション」のプログラムにより行
う。
【0083】図6はコンテキストスイッチ発生有無を検
出するためのAPIの使用例を示す図である。同図の
(A)に示すように、処理1を実行する前にコンテキス
トスイッチ発生有無の検出開始を依頼するAPI#Aを
発行してから処理1を実行する。処理1の終了後、コン
テキストスイッチ発生有無検出の終了を依頼するAPI
#Bを発行する。(A)に示す例ではこの間にコンテキ
ストスイッチが発生していないので、そのまま次の処理
2を行う。もし、(B)に示すように、処理1の途中で
スレッド#2の処理が行われれば、すなわちコンテキス
トスイッチが発生していれば、API#Bの発行後、処
理1を破棄する。たとえばメモリの領域Aの内容を領域
Bにコピーするような処理で、コピー処理中にコンテキ
ストスイッチが発生した場合、領域Aの内容が変わって
領域AとBの内容が不一致となる場合がある。不一致で
はコピーしたことにならないので、領域Bを無効にす
る。このことは、最初から処理が行われなかったのと同
じであり、処理自体を破棄したことに他ならない。
【0084】図7は上記の処理をフローチャートとして
示したものである。まず、API#Aを発行してから処
理1を実行する(s1→s2)。この処理1が終了した
後、API#Bを発行して、その戻り値を取得する(s
3)。戻り値がコンテキストスイッチの発生を表す場
合、処理1を破棄して、再び処理1を実行する(s4→
s5→s1→s2)。戻り値がコンテキストスイッチの
非発生を表す場合、処理を終了する。このように所定の
期間内でのコンテキストスイッチの発生有無が分かるの
で、コンテキストスイッチが発生すれば、その間の処理
を破棄し無効とすることによって、システムを現実には
ロックしていないにも拘らず排他的制御を行うことが可
能となる。
【0085】図8は上記API#AおよびAPI#Bの
カーネルにおける処理手順を示すフローチャートであ
る。API#Aの発行(システムコール)があれば、コ
ンテキストスイッチの発生有無を示すフラグをクリアす
る。また、API#Bが発行されると、上記フラグの状
態を戻り値としてスレッドに返す。
【0086】図9はコンテキストスイッチの処理手順を
示すフローチャートである。コンテキストスイッチがス
ケジューラによって行われると、上記フラグをセットし
てからコンテキストスイッチを実行する。すなわちスイ
ッチ前のスレッドの実行状態をコンテキストとして格納
するとともに、スイッチ後のスレッドのコンテキストを
読み出してCPUのレジスタ等に設定する。
【0087】図10は上記コンパクションの処理手順を
示すフローチャートである。先ず、ヒープ領域内の先頭
のオブジェクトを指定し(s11)、そのオブジェクト
をヒープ領域の先頭にコピーするための領域を確保し
(s12)、コピー中に他のスレッドによってその領域
に何らかのデータが書き込まれないようにしてから上記
API#Aを発行する(s13)。そして、図5に示し
たように、ヒープ領域内のオブジェクトを先頭から順次
空き領域へコピーすることによって詰めていく(s1
4)。1つのオブジェクトについてのコピーが終われ
ば、上記API#Bを発行する(s15)。このことに
より、API#Aを発行してから、API#Bを発行す
るまでの期間にコンテキストスイッチが発生したか否か
がAPI#Bの戻り値として得られる。もしコンテキス
トスイッチが発生していれば、今回コピーを行ったオブ
ジェクトを既に確保している領域に再びコピーする(s
16→s13→・・・)。もしコンテキストスイッチが
発生していなければ、次のオブジェクトについて同様に
処理を行う(s16→s17→s18→・・・)。この
ようにシステムをロックすることなく、しかも他のスレ
ッドとともに、コンパクションを同時に行うことが可能
となる。
【0088】上述の例ではマーク&スイープ法によるG
Cにおけるコンパクションに適用したが、複写法による
GCに適用する場合、図11および図12に示す処理を
行う。
【0089】図11は上記複写法によるGCのフローチ
ャートである。先ず、オブジェクトの参照関係を表すツ
リー構造のデータのルートノードへポインタを移動し
(s21)、そのルートノードに相当する、From領
域にあるオブジェクトをTo領域に複写する(s2
2)。(ヒープ領域はFrom領域とTo領域に分けら
れ、From領域内の残すべきオブジェクトのみをTo
領域に複写することによってTo領域にガベージのない
オブジェクトだけを再構成する。次回は現在のFrom
領域をTo領域とし、To領域をFrom領域として、
その操作を交互に繰り返すのが、複写法によるガベージ
コレクションである。)その後、ツリーを辿って、参照
関係にある次のオブジェクトへポインタを移動させ(s
23)、そのオブジェクトをTo領域に複写する(s2
4)。この処理をツリーで辿れるすべてのオブジェクト
について行う。
【0090】図12は図11における複写処理の内容を
示すフローチャートである。先ず、複写すべきオブジェ
クトをTo領域内の所定位置にコピーするための領域を
確保し、コピー中に他のスレッドによってその領域に何
らかのデータが書き込まれないようにし、上記API#
Aを発行してから(s31)、オブジェクトをFrom
領域からTo領域に複写する(s32)。その後、上記
API#Bを発行する(s33)。このことにより、A
PI#Aを発行してから、API#Bを発行するまでの
期間にコンテキストスイッチが発生したか否かがAPI
#Bの戻り値として得られる。もしコンテキストスイッ
チが発生していれば、今回複写を行ったオブジェクトを
既に確保している領域に再び複写する(s34→s31
→・・・)。
【0091】図13および図14はコンテキストスイッ
チの発生有無を検出して排他性を確保するのではなく、
複写しようとするオブジェクトが複写前に書き替えられ
たか否かを検出して排他性を確保する場合の処理手順を
示すフローチャートである。
【0092】複写を行う場合、先ず複写すべきオブジェ
クトをTo領域内の所定位置にコピーするための領域を
確保し、コピー中に他のスレッドによってその領域に何
らかのデータが書き込まれないようにしてから、図13
に示すようにAPI#Cを発行する(s41)。このA
PIは指定したメモリ領域ない対する書き込みが発生し
たか否かの検出を依頼するアプリケーションプログラム
インタフェースである。続いてオブジェクトをFrom
領域からTo領域に複写する(s42)。その後、上記
API#Dを発行する(s43)。このAPIは上記A
PI#Cが呼び出されてから、このAPI#Dが呼び出
されるまでの間に指定メモリ領域に何らかのデータの書
き込みが発生したか否かが戻り値として返されるアプリ
ケーションプログラムインタフェースである。したがっ
て、複写しようとするオブジェクトのメモリ領域を指定
してAPI#Cを発行し、API#Dも戻り値を見れ
ば、そのオブジェクトが参照されたか否かが判る。オブ
ジェクトが参照されていれば、内容が書き変わっている
可能性があるので、そのオブジェクトの複写をやり直す
(s44→s41→・・・)。
【0093】図14は上記API#CおよびAPI#D
のカーネルにおける処理手順を示すフローチャートであ
る。API#Cの発行(システムコール)があれば、所
定にワークエリアをクリアし、API#Cのパラメータ
で指定された領域がライトされたときに例外が発生する
ようにMMU(Memory Management Unit) を設定する。
また、API#Dが発行されると、上記パラメータで指
定された領域がライトされたときに例外が発生しないよ
うに、MMUに対する上記設定を解除する。そして上記
ワーク領域にセットされるフラグの状態を戻り値として
スレッドに返す。
【0094】図15は上記例外発生時のMMUの処理内
容を示すフローチャートである。例外が発生すると、上
記ワーク領域内の参照フラグをセットする。
【0095】なお、上述の例では複写法によるGCの場
合について示したが、マーク&スイープ法におけるコン
パクションの場合にも同様に適用できる。
【0096】〔第2の実施形態〕図16および図17は
インクリメンタルにガベージコレクションできるGCス
レッドの優先度を自動的に切り替えるようにした場合の
例を示す図である。
【0097】図16の(A)に示すように、GCスレッ
ドの優先度を、高優先度時間は高め(例えば最高優先度
にし)、低優先度時間は低く(例えば最低優先度)する
動作を交互に行う。
【0098】同図の(B)はGCスレッド以外の中程度
の優先度のスレッドを同時に行った場合の例について示
している。すなわちGCスレッドの優先度が低いとき、
それより優先度の高いスレッドがReady状態となれ
ば、コンテキストがスイッチされ、そのスレッドの実行
中にGCスレッドの優先度が高くなれば、そのGCスレ
ッドにコンテキストがスイッチされ、そのGCスレッド
の処理が中断すると、上記のGCスレッド以外のスレッ
ドの処理を行うことになる。このようにすれば、一定周
期で必ずGCスレッドが実行されるため、フリー領域が
慢性的に不足状態となることが防止され、常に高いパフ
ォーマンスを維持することができる。
【0099】図17はスレッドの優先度の切替に関する
カーネルの行う処理手順を示すフローチャートである。
優先度の値は複数段階あり、その値の設定は対応するA
PIの発行により行えるようにしている。ここでは、G
Cスレッドの2つの優先度を設定する際、高優先度の値
を設定するAPIが発行されると、図17の(A)に示
すように、その値をGCスレッドの高優先度の値として
設定する。同様に、低優先度の値を設定するAPIが発
行されると、(B)に示すように、その値をGCスレッ
ドの低優先度の値として設定する。また、GCスレッド
の高優先度の時間を設定するAPIが発行されると、同
図の(C)に示すように、その値を設定し、同様に低優
先度の時間を設定するAPIが発行されると、同図の
(D)に示すように、その値を設定する。
【0100】図17の(E)は、カーネルのスケジュー
ラに対する処理手順を示すフローチャートである。ここ
では、初期状態で、高優先度のキューにGCスレッドが
資源の割当を受けようとする待ち行列に入っているもの
とし、先ず、そのデータ(GCスレッドを識別するデー
タ)を高優先度のキューから取り出して低優先度のキュ
ーに挿入する(s51)。そしてスケジューラは、既に
設定されている低優先度時間だけ時間待ちを行い(s5
2)、続いて低優先度のキューからGCスレッドを識別
するデータを取り出して高優先度のキューに挿入する
(s53)。そしてスケジューラは、既に設定されてい
る高優先度時間だけ時間待ちを行う(s54)。以上の
処理を繰り返すことによって、スケジューラの動作によ
り図16(A)に示したようにGCスレッドの優先度が
交互に切り替わる。GCスレッド以外のスレッドについ
ては、そのスレッドの優先度に対応するキューの待ち行
列に応じて従来と同様のスケジューリングが行われ、図
16の(B)に示したように、コンテキストスイッチが
なされる。
【0101】図18は上記のGCスレッドの高優先度時
間をAPIによって設定可能とした場合について示して
いる。また、図19はそのAPIの呼び出しに応じたカ
ーネルにおける処理手順を示すフローチャートである。
このAPIの発行(システムコール)があれば、上記の
高優先度時間をそのAPIのパラメータによって設定
(登録)する。
【0102】図20は上記のGCスレッドの高優先度時
間を設定可能とするAPIを使うプログラムの例を示す
フローチャートである。先ず、ループの1回目の示すフ
ラグの状態を見る(s61)。最初はOFF状態である
ので、このフラグをONし(s62)、現在のフリー領
域を調べ、それを記録する(s63)。初めはGCの高
優先度時間と低優先度時間は予め定められたデフォルト
値である。スケジューラにより、一定時間停止した後
(s64)、今度は、前回に調べたフリー領域の容量と
現在のフリー領域の容量との大小比較を行い(s6
5)、フリー領域の容量が増加していれば、GCスレッ
ドの高優先度時間を短くし(s66→s67)、フリー
領域の容量が減少していれば、GCスレッドの高優先度
時間を長くする(s68)。以上の処理を繰り返す。こ
のことによって、GCの優先度が動的に自動調整され
る。
【0103】図21はGCスレッドの高優先度時間と低
優先度時間とによる周期を設定可能とした場合について
示している。(A)は周期が長い場合、(B)は短い場
合である。
【0104】図22は上記周期を設定可能とする周期設
定APIの呼び出しに応じたカーネルにおける処理手順
を示すフローチャートである。この周期設定APIの発
行があれば、現在設定されている高優先度時間および低
優先度時間の値を読み取り、その割合(比率)を計算す
る(s71→s72→s73)。その後、この周期設定
APIのパラメータで指定された周期の値に応じて高・
低優先度時間を再計算する(s74)。そして、その高
優先度時間および低優先度時間を設定更新する(s75
→s76)。
【0105】たとえば連続的なパルスを処理するよう
な、連続してCPU資源が必要なアプリケーションプロ
グラムの場合には、GCスレッドの周期が短くなるよう
に周期設定APIを発行し、通常のアプリケーションプ
ログラムのように断続的にCPU資源を利用するアプリ
ケーションプログラムでは周期が長くなるように周期設
定APIを発行する。
【0106】〔第3の実施形態〕図23および図24は
必要な時点でGCスレッドを実行し、且つリアルタイム
性を確保するようにした例であり、図23に示す例で
は、スレッド1とスレッド3がリアルタイム性の要求さ
れるスレッド、スレッド2がリアルタイム性の要求され
ないスレッド(ノーマルスレッド)である。また、スレ
ッド3がGCスレッドである。メモリのフリー領域が多
い通常状態で、スレッド2が実行されているときにイベ
ント1が発生すれば処理がスレッド1に移され、イベン
ト1の処理に起因するスレッド1の処理が終了すればス
レッド2へ戻る。同様に、イベント2が発生すればスレ
ッド3に処理が移る。もしスレッド2の処理によってフ
リー領域が予め定めた警告レベルまで低下したとき、ス
レッド2の処理を中断して、スレッド3のGCスレッド
を実行する。この処理によってフリー領域が確保される
とスレッド2の処理へ戻る。もしGCスレッドの処理途
中でイベント1が発生すれば、GCの途中であってもス
レッド1へ処理が移る。このようにリアルタイム性の要
求されるスレッドでは、一般に生成されるオブジェクト
の量が少なく、大体の予測が可能であるので、それに応
じて上記警告レベルを設定しておけば、スレッド2に処
理によって、フリー領域が大幅に減少してスレッド1や
スレッド3のリアルタイム性の要求される処理が実行で
きなくなるといった、不都合が回避できる。
【0107】図24は上記コンテキストスイッチの処理
を行うスケジューラの処理手順を示すフローチャートで
ある。先ずイベントの発生有無を検知し(s81)、イ
ベントが発生していれば、対応するリアルタイムスレッ
ドにコンテキストをスイッチする(s82)。イベント
が発生していなくて、フリー領域が警告レベルより多け
れば、ノーマルスレッドのうち優先度の最も高いもの
(図23に示した例ではスレッド2)にコンテキストを
スイッチする(s83→s84)。もしフリー領域が警
告レベルより少なくなれば、GCスレッドにコンテキス
トをスイッチする(s85)。
【0108】〔第4の実施形態〕図25はコンテキスト
スイッチの検出を依頼するAPIにおける強制コンテキ
ストスイッチの例を示している。先に示した例では、A
PI#Aを発行してから、API#Bを発行するまでの
間にコンテキストスイッチが発生したか否かが判るよう
にしたものであったが、この図25に示す例は、GCの
優先度を高・低交互に切り替える場合に、上記の排他制
御のためのAPIを発行している間にコンテキストスイ
ッチが発生することを予測して、無駄な処理を行わない
ようにしたものである。すなわち、高優先度GCスレッ
ドを実行中にAPI#A′を発行した際、API#A′
は高優先度時間が終了するまでに、必要な処理が完了す
るか否かを判定して、もし完了しなければ、その時点で
GCスレッドの優先度を低くする。図25に示した例で
は、GCスレッドの優先度が低くなったことにより、G
Cスレッド以外の中優先度のスレッドにコンテキストス
イッチされることになる。このことにより無駄な処理が
避けられる。
【0109】図26は上記API#A′の呼び出しに応
じたカーネルにおける処理手順を示すフローチャートで
ある。このAPIの呼び出しがあれば、コンテキストス
イッチフラグをクリアし(s91)、GCスレッドの高
優先度時間の残時間を取得する(s92)。そして、こ
のAPI#A′のパラメータである排他時間(API#
A′を発行してから、API#Bを発行するまでの時
間)と上記残時間との大小比較を行う(s93)。も
し、残時間が排他時間より短ければGCスレッドの優先
度を強制的に低くする(s94)。なお、API#B呼
び出しによる処理内容とコンテキストスイッチの処理内
容は図8および図9に示したものと同様である。
【0110】〔第5の実施形態〕図27はメモリ(ヒー
プ領域)使用量に応じてGCのアルゴリズムを切り替え
るための処理手順を示すフローチャートである。先ず、
メモリ使用量の値とそれに応じてどのアルゴリズムでG
Cを行うかを示すしきい値を設定し(s101)、メモ
リ使用量を取得する(s102)。これはヒープ領域内
に生成されたオブジェクトのメモリサイズの合計値であ
る。メモリ使用量がしきい値th1を超えた場合、GC
アルゴリズム(1)の手順でGCを行う(s103→s
104)。メモリ使用量がしきい値th2を超えたな
ら、GCアルゴリズム(2)の手順でGCを行う(s1
05→s106)。以下同様である。ここで、しきい値
th1はしきい値th2より小さく、GCアルゴリズム
(1)としては図16に示した、GCスレッドの優先度
の高低を交互に繰り返す処理を行う。しきい値の高いと
きに行うGCアルゴリズムとしては、図23に示した不
定期のGCを実行する。ここでGC自体は例えばマーク
&スイープ法により行う。通常、前者の場合にはCPU
負荷が軽く、専らこの方法によりGCが行われるが、ノ
ーマルスレッドによって短時間に大量のメモリが使用さ
れた場合には、図23に示した方法によりGCを重点的
に行う。このことによって常に広いフリー領域を確保
し、且つリアルタイム性を維持する。
【0111】〔第6の実施形態〕図28〜図30はオブ
ジェクト生成時のヒープ領域に対する新たなオブジェク
トの割り当てサイズを定めるための処理に関する図であ
る。一般にプログラムの実行により生成されるオブジェ
クトのサイズの分布は図28に示すように略正規分布を
示す。その中心値は32と64バイトの間に納まる程度
である。そこで、図29の(A)に示すように、この中
心値より大きなサイズで、且つ2の巾乗バイトの整数倍
のサイズをオブジェクトの割り当てサイズとする。従来
は同図の(B)に示すように、生成すべきオブジェクト
のサイズの量だけ任意に割り当てられていたため、その
オブジェクトの消去の際、不揃いのサイズのフラグメン
トが生じる。本願発明によれば、新たに生成されるオブ
ジェクトのサイズが上記固定値の整数倍であるため、メ
モリ領域の再利用性が高まり、メモリ使用効率が全体に
高まる。しかも場合によってはコンパクションが不要と
なる。
【0112】図30はそのオブジェクト生成時の処理手
順を示すフローチャートである。先ず、これまでに生成
したオブジェクトのサイズの発生頻度の分布データを求
める(s111)。既に前回までに分布データを求めて
いる場合には、それを更新する。続いて、今回割り当て
るべきメモリの空いている領域で、且つ生成しようとす
るオブジェクトのサイズより大きな領域を探し、上記の
固定サイズの整数倍のメモリ領域にオブジェクトを割り
当てる(s112→s113→s114→s115)。
上記2の巾乗バイトはシステム定数であるが、必ずしも
この値を固定サイズとする必要はなく、任意である。固
定サイズをもし大き過ぎる値に採れば、サイズの大きな
領域に小さなオブジェクトが割り当てられる場合が増え
ることになり、逆に、固定サイズを小さ過ぎる値に採れ
ば、オブジェクトの生成に再利用できない領域が増える
ことになる。分布データを基に上記固定サイズを決定す
る場合には、メモリの使用効率が最適となるように決定
すればよい。また、最適値でなくても、例えば2の巾乗
の値を採れば、アドレス決定がやり易くなるという効果
を奏する。
【0113】図31は上記オブジェクトのサイズの発生
頻度分布データを求めるプログラムモジュール、および
オブジェクトの割り当てサイズを決定するプログラムモ
ジュールの処理内容を示すフローチャートである。先
ず、オブジェクトのサイズの発生頻度分布データを求め
るプログラムモジュールをロードし(s121)、その
プログラムモジュールを起動する。すなわち一定時間が
経過するまで(たとえばアプリケーションプログラムの
起動・終了が10回行われるまで、またたとえば24時
間経過するまで)、生成された各オブジェクトのサイズ
をサイズ毎に計数し、その分布データを求める(s12
2→s123)。その後、その分布データをシステムに
登録し(s124)、オブジェクトのサイズの発生頻度
分布データを求めるプログラムモジュールをアンロード
する(s125)。続いて固定サイズを決定するプログ
ラムモジュールをロードし(s126)、そのプログラ
ムモジュールを実行する。すなわちシステムの登録され
た分布データを取得し、その分布中心値より大きなサイ
ズで、且つたとえば2の巾乗バイトを固定サイズとして
決定し、その値をシステムに登録する(s127→s1
28)。その後、固定サイズを決定するプログラムモジ
ュールをアンロードする(s129)。
【0114】このように、一度オブジェクトのサイズの
分布が検知された後、および固定サイズが決定された後
は、それらのためのプログラムモジュールをアンロード
することによって、メモリ領域とCPUパワーの無駄を
無くす。
【0115】〔第7の実施形態〕図49は上記固定サイ
ズをAPIによって設定する例を示している。図に示す
ように、固定サイズ設定処理では、固定サイズを引数と
して固定サイズ設定APIを呼び出す。呼び出されたA
PIでは、引数を固定サイズとしてシステムに登録す
る。オブジェクト生成時にはオブジェクトのサイズと固
定サイズを比較し(s211)、固定サイズ以下であれ
ば、ヒープ上の固定サイズの空き領域を探し、見つかっ
た領域をオブジェクトに割り当てる(s212→s21
3)。固定サイズを超える場合は、ヒープ上のオブジェ
クトサイズより大きな空き領域を探し、見つかった領域
をオブジェクトに割り当てる(s214→s215)。
【0116】〔第8の実施形態〕図50は上記固定サイ
ズをAPIによって設定する他の例を示している。図5
0に示すように、この例では、まずオブジェクトサイズ
の分布データをオブジェクトサイズ分布設定APIを呼
び出して設定する。この分布データは予め所定時間所定
のアプリケーションを実行して測定したものである。オ
ブジェクトサイズ分布設定APIは呼び出しに応答し
て、引数をオブジェクトサイズ配列変数にセットする。
続いて、その中心値より大きなサイズで、且つ2の巾乗
バイトを固定サイズとして決定し、これを固定サイズ変
数にセットする。
【0117】〔第9の実施形態〕図51〜図53はオブ
ジェクトの割り当てサイズを予めいくつかのサイズに定
めておく例を示す図である。図51は事前に所定のアプ
リケーションを所定時間実行して測定したオブジェクト
サイズの分布および分割領域の集合を表している。予め
ヒープ領域を分割する場合、実際のオブジェクトサイズ
の分布を測定し、その分布に近くなるように、分割サイ
ズと数を定める。たとえば、ヒープ領域が2MBの場
合、分割サイズ指定変数を とする。
【0118】上記分割サイズを設定する場合、図52に
示すように、分割サイズ設定APIを呼び出して行う。
呼び出された分割サイズ設定APIは図53に示すよう
に、引数を分割サイズ指定変数にセットし、それに応じ
てヒープ領域を分割する。すなわち、まずループカウン
タnを0とし(s221)、n番目の分割サイズ指定変
数からサイズkと個数mを取得する(s222)。続い
てヒープ領域からサイズkの領域をm個に分割し(m個
分確保し)、リストに登録する(s223)。この処理
をループカウンタnを1インクリメントしながら繰り返
し、全てのサイズの分割を行う(s225→s222→
・・・)。なお、上記の例で、サイズが32kバイトを
超えるオブジェクトを生成する場合は、ヒープ領域内の
上記分割された領域以外の領域に割り当てる。
【0119】〔第10の実施形態〕図32〜図34はオ
ブジェクトの寿命を考慮してGCの効率を高めるための
処理を行う例を示す図である。図32の(A)に示す例
では、ヒープ領域として、短寿命のオブジェクトを生成
する領域と長寿命のオブジェクトを生成する領域とに分
け、クラスは長寿命領域に確保する。尚、クラスはその
他の固定領域に確保してもよい。そして、クラスにはオ
ブジェクトを生成するためのテンプレートとしての定義
情報以外に、生成するオブジェクトの寿命を示す寿命フ
ラグを持たせる。この寿命フラグはクラスの生成時に自
動的に生成する。同図の(B)は従来のヒープ領域に対
するオブジェクトの割り当て例を示す図である。
【0120】図33はオブジェクトの消去の手順を示す
フローチャートである。同図に示すようにオブジェクト
を消去した際に、そのオブジェクトの寿命が長いか短い
かを判定し、寿命が短ければ、そのオブジェクトのクラ
スの寿命フラグを短寿命にセットする。例えばオブジェ
クトの領域内にそのオブジェクトが生成された時刻を格
納しておき、そのオブジェクトを消去する時刻との差に
よって、そのオブジェクトの寿命を求める。上記時刻は
例えばGCの回数を単位としてもよい。
【0121】図34はオブジェクトの生成の処理手順を
示すフローチャートである。クラスの寿命フラグが短寿
命を示していれば、短寿命領域にオブジェクトを生成
し、そうでなけば、長寿命領域にオブジェクトを生成す
る。
【0122】このようにオブジェクトの寿命に応じてメ
モリの割り当て領域を区分することによって、長寿命領
域ではフラグメントを大幅に低下でき、メモリの使用効
率が向上する。また、例えば寿命領域についてGCを重
点的に行うことにより、GCに消費されるCPUパワー
を小さくすることができる。
【0123】〔第11の実施形態〕次に、マーク&スイ
ープ法によるインクリメンタルGCについて図35〜4
8を参照して説明する。
【0124】図35はマーク&スイープ法によるGCの
全体の処理手順を示すフローチャートである。このGC
はマークテーブルのクリア、上記ツリー探索によるマー
ク付与およびオブジェクトの消去(スイープ)を繰り返
し行う。
【0125】図36は図35における「マーククリア」
の処理内容を示すフローチャートである。この処理はマ
ークテーブルの内容を一旦クリアするものであり、まず
マークテーブルの先頭にポインタを移動し(s13
1)、その位置のマークをクリアし(s132)、次の
マークの位置までポインタを移動させる(s133)。
この処理を全てのマークについて繰り返す(s134→
s132→・・・)。
【0126】図37は図35における「オブジェクトの
消去」の処理内容を示すフローチャートである。先ず、
マークテーブルの先頭にポインタを移動させ(s14
1)、マークの有無を検出し、マークされていなけれ
ば、そのマークテーブル上の位置に相当するオブジェク
トのヒープ領域内の位置を計算し、該当のオブジェクト
を消去する(s142→s143→s144)。続い
て、マークテーブルのポインタを次に移動して、同様の
処理を繰り返す(s145→s146→s142→・・
・)。これによりマークテーブルにマークされているオ
ブジェクトを残し、その他のオブジェクトをヒープ領域
から消去する。
【0127】説明を容易にするために、先ず前提となる
マーク&スイープ法におけるマーク付与について説明す
る。
【0128】図38はツリー探索によるマーク付与の手
順を示す図である。(A)に示すように、ルートノード
10から各ノードへ、ツリー構造で表される参照関係を
辿って、参照関係にあるノード(オブジェクト)にマー
クを付与する。具体的にはマークテーブル上の該当位置
のビットをセットする。このツリー構造は、たとえば或
るオブジェクトが他のどのオブジェクトを参照している
かを示す、オブジェクト内に設けられる変数の内容によ
って構成され、このオブジェクトの参照関係を辿ること
が、すなわちツリーを辿ることである。
【0129】(A)のように、ノード番号3までマーク
付与を行った時点で割込が発生し、その割込処理によっ
て、(B)のように、ルートノードからノード番号7で
表されるオブジェクトへの参照関係が絶たれて、ノード
番号2で表されるオブジェクトからノード番号7で表さ
れるオブジェクトが参照される関係となれば、割込処理
が終了してGCスレッドに戻って、マーク付与を再開し
たとき、ルートノードからノード番号7で表されるオブ
ジェクトへの参照関係が絶たれているので、(C)に示
すようにポインタをルートノードに戻して次の参照関係
にあるノード番号8に進むことになる。この時点ではノ
ード番号5,6に対してはマーク付与されない。そこ
で、参照関係の変更のあったオブジェクトについては、
そのオブジェクトからツリーを辿ってそのオブジェクト
から参照されているオブジェクトについてマークを付与
する必要がある。
【0130】図39は「オブジェクトの生成」の処理内
容を示すフローチャートである。まずカーネルに対して
システムのロックを起動し(s151)、ヒープ領域内
の空いている領域を探し(s152)、生成しようとす
るオブジェクトのサイズより大きな領域に対して必要な
サイズを割り当て(s153→s154)、参照変更の
マーク付与(ライトバリア)を行い(s155)、シス
テムをアンロックする(s156)。
【0131】図40は上記「参照変更のマーク付与」の
処理手順を示すフローチャートである。先ず、参照変更
されたオブジェクトからマークテーブル上の位置を計算
し、該当のマークがWhite であるか否かを判定する。こ
のWhite マークはたとえば00の2ビットで表され、未だ
マークされていない状態を意味する。もし、White マー
クでなければ、すでにマークされているので、そのまま
処理を終了する。White マークであれば、それをGrayに
マークする。このGrayマークはたとえば01の2ビットで
表され、参照変更のあったオブジェクトであることを意
味する。なお、オブジェクトからマークの位置を計算す
る際、たとえばオブジェクトのアドレスを1/8してオ
フセットを加えることによって行うか、オブジェクトの
通し番号により計算する。
【0132】図41は「ツリー探索によるマーク付与」
の処理手順を示すフローチャートである。まず、ツリー
を辿るためのポインタをツリーのルートノードに移動さ
せ(s161)、新たに生成するオブジェクトに対応す
るマークを付与する(s162)。続いてツリーを辿っ
て、ポインタを次のオブジェクトへ移動させ(s16
3)、この処理をツリーの最後まで繰り返す(s164
→s162→・・・)。その後、各スレッドスタックの
先頭へポインタを移動させ(s165)、スタックにあ
るオブジェクトに対応するマークを付与する(s16
6)。その後、ポインタをスタックの次に移動させて
(s167)、この処理をツリーの最後まで繰り返す
(s168→s166→・・・)。その後、スレッドス
タックの次に移り(s169)、同様の処理をスレッド
スタックの最後まで繰り返す(s170→s166→・
・・)。さらにこのスレッドスタックについての処理を
すべてのスレッドスタックについて行う(s171→s
172→s165→・・・)。この一連のツリー探索に
おいて、Grayマークが途中で1度でも検出された場合、
もう一度ルートノードから探索およびマーク付与を行う
(s173→s161→・・・)。
【0133】図42は図41における「オブジェクトに
対応するマーク付与」の処理手順を示すフローチャート
である。この処理は、生成されているオブジェクトから
マークテーブル上の位置を計算し、Black マークを付与
する。このBlack マークはたとえば1xの2ビットで表さ
れ、マークされている状態を意味する。
【0134】上述したようなマーク付与の方法では、そ
の途中で割込がかかってオブジェクトの参照関係が変化
すると、Grayマークが付与されるので、ツリー探索を繰
り返さなければならない。場合によってはいつまでたっ
てもマーク付与が完了せずに、GCがいつまでも行われ
ないといった事態に陥る。
【0135】図43は上記の問題を解消するための「ツ
リー探索によるマーク付与」の手順を示す図である。
(A)は図38に示した(A)の状態で割込がかかって
参照関係が変化したときの状態を示す。このように、ノ
ード番号3までマーク付与を行った時点で割込が発生
し、その割込処理によって、ルートノードからノード番
号7で表されるオブジェクトへの参照関係が絶たれて、
ノード番号2で表されるオブジェクトからノード番号7
で表されるオブジェクトが参照される関係となれば、参
照先のノード番号7表すデータをマークスタックに積
む。その後、割込処理が終了してGCスレッドに戻っ
て、マーク付与を再開したとき、ルートノードからノー
ド番号7で表されるオブジェクトへの参照関係が絶たれ
ているので、(B)に示すようにポインタをルートノー
ドに戻して次の参照関係にあるノード番号8をマークす
る。この時点で一通りのツリー探索を終了し、その後
は、(C)に示すようにマークスタックの内容によって
示されるノードからツリーを辿って参照関係にあるオブ
ジェクトについてマークを付与する。これにより(D)
に示すように、参照関係にある全てのオブジェクトにつ
いてのマーク付与が完了する。
【0136】図44は「参照変更のマーク付与」の処理
手順を示すフローチャートである。このように、参照変
更されたオブジェクトを示すデータを上記マークスタッ
クに積む。なお、オブジェクトの生成の処理は図39に
示したもの変わらない。
【0137】図45は、「ツリー探索によるマーク付
与」の処理手順を示すフローチャートである。ステップ
s161〜s172の部分は図41に示したフローチャ
ートのステップs161〜s172と同じである。この
図45に示す例では、全スレッドスタックについてのツ
リー探索を完了した後、マークスタックからデータを取
り出し(s181→s182)、そのデータで示される
オブジェクトに対応するマーク付与を行い(s18
3)、そのオブジェクトからツリーを辿ってツリーの最
後まで、参照関係にあるオブジェクトのマーク付与を行
う(s184→s185→s183→・・・)。この処
理をマークスタックが空になるまでマークスタックのポ
インタを更新しながら繰り返す(s181→s182→
・・・)。
【0138】図46は図45における「オブジェクトに
対応するマーク付与」の処理手順を示すフローチャート
である。この処理は、生成されているオブジェクトから
マークテーブル上の位置を計算し、マークを付与する。
【0139】このようにマークスタックを用いることに
よって、ツリー探索をルートノードから再開する必要が
なくなり、マーク付与に要する全体の処理時間を大幅に
短縮化できる。
【0140】図47および図48は上記マークスタック
を用いてマーク付与を行う場合に、更に無駄な処理時間
を無くすようするフローチャートである。図47は上記
「参照変更のマーク付与」の処理手順を示すフローチャ
ートである。先ず、参照変更されたオブジェクトからマ
ークテーブル上の位置を計算し、該当のマークがWhite
であるか否かを判定する(s191→s192)。この
White マークは上述したように未だマークされていない
状態を意味する。もし、White マークでなければ、すで
にマークされているので、そのまま処理を終了する。Wh
ite マークであれば、それをGrayにマークする(s19
3)。上述したようにこのGrayマークは参照変更のあっ
たオブジェクトであることを意味する。続いてマークス
タックに参照先のオブジェクトを示すデータを積む(s
194)。
【0141】図48は上記「オブジェクトに対応するマ
ーク付与」の処理手順を示すフローチャートである。こ
の処理は、生成されているオブジェクトからマークテー
ブル上の位置を計算し、Black マークを付与する。この
Black マークは上述したように、マークされている状態
を意味する。なお、「オブジェクトの生成」の処理は図
39に示したものと同様である。
【0142】このように、参照変更のあったオブジェク
トについてマークを付与する場合、そのオブジェクトが
初めて検出されたオブジェクトである場合にのみマーク
を付与するようにしたため、マークスタックの内容によ
るツリー探索に要する時間およびマークスタックの読み
出しに要する時間を短縮化できる。
【0143】なお、参照変更のあったオブジェクトにつ
いてのマークを記憶するのはスタックでなくてもよく、
FIFOのバッファを用いてもよい。
【0144】また、実施形態ではマークテーブルにマー
クを付与するようにしたが、オブジェクトの内部にマー
ク用の情報を設けて、オブジェクトに直接マークを付与
するようにしてもよい。
【0145】
【発明の効果】請求項1,に係る発明によれば、
或るスレッドからのコンテキストスイッチ発生有無検出
の開始を依頼するAPIの呼び出しからコンテキストス
イッチ発生有無検出の終了を依頼するAPIの呼び出し
までの間で行われたスレッドの処理の途中で、コンテキ
ストスイッチがあったか否かが、そのスレッドで分かる
ため、コンピュータ資源をロックのメカニズムとして使
用せずに、処理の排他性が保証される。
【0146】また、コンテキストスイッチが発生してい
れば、その間のスレッドの処理を無効にして、例えばそ
の処理を再度実行するなどの方法によって高い応答性を
保ちながら、排他制御を行うことができるようになる。
【0147】さらに、或るスレッドの優先度を高い状態
と低い状態とに交互に変更するようにしておき、スレッ
ドの優先度が高い状態のとき、該スレッドの優先度が低
い状態になるまでの残時間が必要な処理時間より短い
とき、その処理が行われることがないため、その分のC
PUパワーを無駄にすることがなく、全体の処理を効率
よく進められる。
【0148】請求項に係る発明によれば、システムを
ロックすることなく、GCを開始することができるの
で、リアルタイム性を保証することができる。
【0149】請求項に係る発明によれば、システムを
ロックすることなく、メモリコンパクションを開始する
ことができるので、リアルタイム性を保証することがで
きる。
【0150】
【0151】
【0152】
【0153】
【0154】
【0155】
【0156】
【0157】
【0158】
【0159】
【0160】
【0161】
【0162】
【0163】
【図面の簡単な説明】
【図1】実施形態に係る装置のハードウエアの構成を示
すブロック図
【図2】同装置のソフトウエアの構成を示すブロック図
【図3】オブジェクト間の参照関係を示すツリーおよび
各スレッドのスタックとの関係を示す図
【図4】ソフトウエアの機能ブロック図
【図5】コンパクションの作用を説明するための図
【図6】コンテキストスイッチの有無によるスレッドの
処理内容の変化の例を示す図
【図7】排他制御の処理手順を示すフローチャート
【図8】コンテキストスイッチ発生有無検出のAPIに
関する処理手順を示すフローチャート
【図9】コンテキストスイッチの処理手順を示すフロー
チャート
【図10】コンパクションの処理手順を示すフローチャ
ート
【図11】複写法によるGCの処理手順を示すフローチ
ャート
【図12】複写法GCにおける排他制御の処理手順を示
すフローチャート
【図13】複写法GCにおける他の排他制御の処理手順
を示すフローチャート
【図14】図13における排他制御用APIに関する処
理手順を示すフローチャート
【図15】図13における排他制御用APIに関する処
理手順を示すフローチャート
【図16】GCスレッドの優先度の自動切替の例を示す
【図17】スレッドの優先度値および優先度時間の切替
に関するフローチャート
【図18】GCスレッドの高優先度時間を変更した例を
示す図
【図19】GCスレッドの高優先度時間を変更可能とす
るためのフローチャート
【図20】GCスレッドの高優先度時間を自動変更する
例を示すフローチャート
【図21】GCスレッドの高・低優先度時間の切り替え
周期を変更した例を示す図
【図22】GCスレッドの高・低優先度時間の切り替え
周期を変更するためのフローチャート
【図23】不定期なGC処理の例を示す図
【図24】図21に対応するフローチャート
【図25】排他制御APIによるGCスレッドの優先度
の強制変更の例を示す図
【図26】排他制御APIによるGCスレッドの優先度
を強制変更するためのフローチャート
【図27】GCのアルゴリズムを切り替える処理手順を
示すフローチャート
【図28】生成されるオブジェクトのサイズの分布の例
を示す図
【図29】オブジェクトのメモリの割り当てサイズの例
を示す図
【図30】オブジェクト生成の処理手順を示すフローチ
ャート
【図31】オブジェクトサイズの分布検知および固定サ
イズの決定処理に関するフローチャート
【図32】ヒープ領域の構成を示す図
【図33】オブジェクト消去の手順を示すフローチャー
【図34】オブジェクト生成の手順を示すフローチャー
【図35】マーク&スイープ法によるGCの手順を示す
フローチャート
【図36】マーククリアの処理手順を示すフローチャー
【図37】オブジェクト消去の処理手順を示すフローチ
ャート
【図38】ツリー探索によるマーク付与の例を示す図
【図39】図38に対応するフローチャート
【図40】図38に対応するフローチャート
【図41】図38に対応するフローチャート
【図42】図38に対応するフローチャート
【図43】ツリー探索によるマーク付与の例を示す図
【図44】図43に対応するフローチャート
【図45】図43に対応するフローチャート
【図46】図43に対応するフローチャート
【図47】参照変更のマーク付与の他の処理手順を示す
フローチャート
【図48】オブジェクトに対応するマーク付与の他の処
理手順を示すフローチャート
【図49】固定サイズの設定とオブジェクト生成に関す
る処理手順を示すフローチャート
【図50】オブジェクトサイズ分布設定に関する処理手
順を示すフローチャート
【図51】オブジェクトサイズの分布と分割サイズの例
を示す図
【図52】ヒープ領域を所定サイズで分割する処理とオ
ブジェクト生成に関する処理手順を示すフローチャート
【図53】ヒープ領域を所定サイズで分割する処理に関
する処理手順を示すフローチャート
【図54】従来のマーク&スイープ法によるGCの手順
を示すフローチャート
───────────────────────────────────────────────────── フロントページの続き (72)発明者 栗林 博 京都府京都市右京区花園土堂町10番地 オムロン株式会社内 (56)参考文献 特開 平1−217638(JP,A) 特開 平3−141442(JP,A) 特開 平8−153037(JP,A) 特開 平6−208502(JP,A) 特開 昭61−75649(JP,A) 特開 平4−38540(JP,A) 発明協会公開技報・公技番号94−6618 発明協会公開技報・公技番号92−1076 (58)調査した分野(Int.Cl.7,DB名) G06F 9/46 G06F 12/00 G06F 9/44 G06F 12/02 G06F 11/14

Claims (5)

    (57)【特許請求の範囲】
  1. 【請求項1】 或るスレッドからの、コンテキストスイ
    ッチ発生有無検出の開始を依頼するアプリケーションプ
    ログラムインタフェースの呼び出しに応答して、コンテ
    キストスイッチの発生有無を示すフラグをコンテキスト
    スイッチが発生していない状態に設定する手段と、 前記フラグがコンテキストスイッチの発生していない状
    態に設定された後、スケジューラによってコンテキスト
    スイッチが行われたとき、前記フラグをコンテキストス
    イッチが発生した状態に設定する手段と、 前記スレッドからの、コンテキストスイッチ発生有無検
    出の終了を依頼するアプリケーションプログラムインタ
    フェースの呼び出しに応答して、前記フラグの状態に応
    じた値を前記スレッドに返す手段と、 前記コンテキストスイッチが発生したとき、前記コンテ
    キストスイッチ発生有無検出の開始を依頼するアプリケ
    ーションプログラムインタフェースの呼び出しから前記
    コンテキストスイッチ発生有無検出の終了を依頼するア
    プリケーションプログラムインタフェースの呼び出しま
    での間の前記スレッドの処理を無効にする手段と、 前記或るスレッドの優先度を高い状態と低い状態とに交
    互に変更するとともに、前記コンテキストスイッチ発生
    有無検出の開始を依頼するアプリケーションプログラム
    インタフェースの呼び出しから前記コンテキストスイッ
    チ発生有無検出の終了を依頼するアプリケーションプロ
    グラムインタフェースの呼び出しまでの処理時間を受け
    取って、前記スレッドの優先度が高い状態のとき、該ス
    レッドの優先度が低い状態になるまでの残時間と前記処
    理時間とを比較し、前記残時間が前記処理時間より短い
    ことを検知したとき、前記スレッドの優先度を低くす
    る手段とを設けて成るプログラム制御装置。
  2. 【請求項2】 前記スレッドは、メモリのヒープ領域内
    の他のいずれかのオブジェクトから参照されているオブ
    ジェクトを検出し、当該オブジェクトを前記ヒープ領域
    内の所定領域に複写する複写方式のガベージコレクショ
    ンスレッドである請求項1に記載のプログラム制御装
    置。
  3. 【請求項3】 前記スレッドは、メモリのヒープ領域内
    のどのオブジェクトからも参照されないオブジェクトの
    メモリ領域を他のオブジェクトのメモリ割り当て可能な
    フリー領域として解放することにより生じるフラグメン
    トを解消するメモリコンパクションスレッドである請求
    項1に記載のプログラム制御装置。
  4. 【請求項4】 或るスレッドからの、コンテキストスイ
    ッチ発生有無検出の開始を依頼するアプリケーションプ
    ログラムインタフェースの呼び出しに応答して、コンテ
    キストスイッチの発生有無を示すフラグをコンテキスト
    スイッチが発生していない状態に設定するステップと、 前記フラグがコンテキストスイッチの発生していない状
    態に設定された後、スケジューラによってコンテキスト
    スイッチが行われたとき、前記フラグをコンテキストス
    イッチが発生した状態に設定するステップと、 前記スレッドからの、コンテキストスイッチ発生有無検
    出の終了を依頼するアプリケーションプログラムインタ
    フェースの呼び出しに応答して、前記フラグの状態に応
    じた値を前記スレッドに返すステップと、前記コンテキストスイッチが発生したとき、前記コンテ
    キストスイッチ発生有無検出の開始を依頼するアプリケ
    ーションプログラムインタフェースの呼び出しから前記
    コンテキストスイッチ発生有無検出の終了を依頼するア
    プリケーションプログラムインタフェースの呼び出しま
    での間の前記スレッドの処理を無効にするステップと、 前記或るスレッドの優先度を高い状態と低い状態とに交
    互に変更するとともに、前記コンテキストスイッチ発生
    有無検出の開始を依頼するアプリケーションプログラム
    インタフェースの呼び出しから前記コンテキストスイッ
    チ発生有無検出の終了を依頼するアプリケーションプロ
    グラムインタフェースの呼び出しまでの処理時間を受け
    取って、前記スレッドの優先度が高い状態のとき、該ス
    レッドの優先度が低い状態になるまでの残時間と前記処
    理時間とを比較し、前記残時間が前記処理時間より短い
    ことを検知したとき、前記スレッドの優先度を低くする
    ステップ とから成るプログラム制御方法。
  5. 【請求項5】 或るスレッドからの、コンテキストスイ
    ッチ発生有無検出の開始を依頼するアプリケーションプ
    ログラムインタフェースの呼び出しに応答して、コンテ
    キストスイッチの発生有無を示すフラグをコンテキスト
    スイッチが発生していない状態に設定する処理プログラ
    ムと、 前記フラグがコンテキストスイッチの発生していない状
    態に設定された後、スケジューラによってコンテキスト
    スイッチが行われたとき、前記フラグをコンテキストス
    イッチが発生した状態に設定する処理プログラムと、 前記スレッドからの、コンテキストスイッチ発生有無検
    出の終了を依頼するアプリケーションプログラムインタ
    フェースの呼び出しに応答して、前記フラグの状態に応
    じた値を前記スレッドに返す処理プログラムと、前記コンテキストスイッチが発生したとき、前記コンテ
    キストスイッチ発生有無検出の開始を依頼するアプリケ
    ーションプログラムインタフェースの呼び出しから前記
    コンテキストスイッチ発生有無検出の終了を依頼するア
    プリケーションプログラムインタフェースの呼び出しま
    での間の前記スレッドの処理を無効にする処理プログラ
    ムと、 前記或るスレッドの優先度を高い状態と低い状態とに交
    互に変更するとともに、前記コンテキストスイッチ発生
    有無検出の開始を依頼するアプリケーションプログラム
    インタフェースの呼び出しから前記コンテキストスイッ
    チ発生有無検出の終了を依頼するアプリケーションプロ
    グラムインタフェースの呼び出しまでの処理時間を受け
    取って、前記スレッドの優先度が高い状態のとき、該ス
    レッドの優先度が低い状態になるまでの残時間と前記処
    理時間とを比較し、前記残時間が前記処理時間より短い
    ことを検知したとき、前記スレッドの優先度を低くする
    処理プログラム とを記録して成るプログラム記録媒体。
JP10260427A 1997-11-21 1998-09-14 プログラム制御装置および方法 Expired - Fee Related JP3027845B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP10260427A JP3027845B2 (ja) 1997-11-21 1998-09-14 プログラム制御装置および方法
US09/195,125 US6910213B1 (en) 1997-11-21 1998-11-18 Program control apparatus and method and apparatus for memory allocation ensuring execution of a process exclusively and ensuring real time operation, without locking computer system

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP9-321766 1997-11-21
JP32176697 1997-11-21
JP10260427A JP3027845B2 (ja) 1997-11-21 1998-09-14 プログラム制御装置および方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP20034599A Division JP3826626B2 (ja) 1997-11-21 1999-07-14 プログラム制御装置、プログラム制御方法、およびプログラム記録媒体

Publications (2)

Publication Number Publication Date
JPH11212808A JPH11212808A (ja) 1999-08-06
JP3027845B2 true JP3027845B2 (ja) 2000-04-04

Family

ID=26544603

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10260427A Expired - Fee Related JP3027845B2 (ja) 1997-11-21 1998-09-14 プログラム制御装置および方法

Country Status (2)

Country Link
US (1) US6910213B1 (ja)
JP (1) JP3027845B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7395285B2 (en) 2003-06-30 2008-07-01 Matsushita Electric Industrial Co., Ltd. Garbage collection system

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3611295B2 (ja) 2000-03-09 2005-01-19 インターナショナル・ビジネス・マシーンズ・コーポレーション コンピュータシステム、メモリ管理方法及び記憶媒体
US20030074390A1 (en) * 2001-10-12 2003-04-17 Hudson Richard L. Hardware to support non-blocking synchronization
US7577816B2 (en) * 2003-08-18 2009-08-18 Cray Inc. Remote translation mechanism for a multinode system
GB2399897B (en) * 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems
JP4170988B2 (ja) 2003-05-09 2008-10-22 富士通株式会社 実行環境の危険予測/回避方法,システム,プログラムおよびその記録媒体
US8307194B1 (en) 2003-08-18 2012-11-06 Cray Inc. Relaxed memory consistency model
US7519771B1 (en) 2003-08-18 2009-04-14 Cray Inc. System and method for processing memory instructions using a forced order queue
US7543133B1 (en) 2003-08-18 2009-06-02 Cray Inc. Latency tolerant distributed shared memory multiprocessor computer
US7735088B1 (en) * 2003-08-18 2010-06-08 Cray Inc. Scheduling synchronization of programs running as streams on multiple processors
US7478156B1 (en) * 2003-09-25 2009-01-13 Juniper Networks, Inc. Network traffic monitoring and reporting using heap-ordered packet flow representation
US7191300B2 (en) * 2003-12-23 2007-03-13 International Business Machines Corporation Parallel memory compaction
US7539831B2 (en) * 2004-08-18 2009-05-26 Intel Corporation Method and system for performing memory clear and pre-fetch for managed runtimes
US7600223B2 (en) * 2004-10-25 2009-10-06 Microsoft Corporation Abstracted managed code execution
JP4641176B2 (ja) * 2004-11-08 2011-03-02 三菱電機株式会社 アプリケーション処理装置及びアプリケーション処理プログラム
US8245230B2 (en) * 2005-03-14 2012-08-14 Qnx Software Systems Limited Adaptive partitioning scheduler for multiprocessing system
US8387052B2 (en) * 2005-03-14 2013-02-26 Qnx Software Systems Limited Adaptive partitioning for operating system
CA2538503C (en) * 2005-03-14 2014-05-13 Attilla Danko Process scheduler employing adaptive partitioning of process threads
US9361156B2 (en) 2005-03-14 2016-06-07 2236008 Ontario Inc. Adaptive partitioning for operating system
KR100846499B1 (ko) * 2006-10-27 2008-07-17 삼성전자주식회사 메모리를 관리하는 방법 및 장치
CN101046755B (zh) * 2006-03-28 2011-06-15 郭明南 一种计算机自动内存管理的系统及方法
US8813082B2 (en) * 2006-06-22 2014-08-19 International Business Machines Corporation Thread priority based on object creation rates
US8533710B1 (en) * 2006-08-31 2013-09-10 Oracle America, Inc. Using observed thread activity to dynamically tune a virtual machine for responsiveness
JP4751814B2 (ja) * 2006-11-28 2011-08-17 富士通東芝モバイルコミュニケーションズ株式会社 携帯端末
US8413125B2 (en) * 2007-01-26 2013-04-02 Oracle International Corporation Asynchronous dynamic compilation based on multi-session profiling to produce shared native code
US8185899B2 (en) * 2007-03-07 2012-05-22 International Business Machines Corporation Prediction based priority scheduling
US8478738B2 (en) * 2007-12-10 2013-07-02 International Business Machines Corporation Object deallocation system and method
US20090228537A1 (en) * 2008-03-07 2009-09-10 Branda Steven J Object Allocation System and Method
JP5330384B2 (ja) * 2008-06-25 2013-10-30 パナソニック株式会社 情報処理装置、情報処理方法及び情報処理プログラム
US20090327377A1 (en) * 2008-06-26 2009-12-31 Tatu Ylonen Oy Ltd Copying entire subgraphs of objects without traversing individual objects
US9135054B1 (en) 2008-07-16 2015-09-15 Apple Inc. Method and apparatus to migrate stacks for thread execution
JP4555879B2 (ja) * 2008-08-11 2010-10-06 株式会社日立製作所 メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置
JP5618796B2 (ja) * 2010-12-02 2014-11-05 株式会社日立製作所 計算機、計算機の制御方法及びプログラム
US11099982B2 (en) * 2011-03-31 2021-08-24 Oracle International Corporation NUMA-aware garbage collection
KR101476113B1 (ko) 2011-08-02 2014-12-23 캐비엄, 인코포레이티드 룩업 클러스터 컴플렉스
KR101867960B1 (ko) * 2012-01-05 2018-06-18 삼성전자주식회사 매니 코어 시스템을 위한 운영체제 동적 재구성 장치 및 방법
EP2811412A4 (en) * 2012-06-25 2016-03-09 Hitachi Ltd COMPUTER SYSTEM AND METHOD FOR MIGRATION OF APPLICATION PROGRAM EXECUTION ENVIRONMENT
US9589000B2 (en) 2012-08-30 2017-03-07 Atheer, Inc. Method and apparatus for content association and history tracking in virtual and augmented reality
JP2015022504A (ja) * 2013-07-18 2015-02-02 富士通株式会社 情報処理装置、方法、及びプログラム
KR102519663B1 (ko) 2015-07-31 2023-04-07 삼성전자주식회사 스토리지 장치, 스토리지 장치를 포함하는 시스템 및 그것의 동작 방법
US10795872B2 (en) * 2016-06-29 2020-10-06 EMC IP Holding Company LLC Incremental bloom filter rebuild for B+ trees under multi-version concurrency control
US10783022B2 (en) 2018-08-03 2020-09-22 EMC IP Holding Company LLC Immediate replication for dedicated data blocks

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6175649A (ja) 1984-09-21 1986-04-18 Hitachi Ltd 通信制御装置のバツフア管理方式
US5088036A (en) * 1989-01-17 1992-02-11 Digital Equipment Corporation Real time, concurrent garbage collection system and method
JPH03231333A (ja) 1990-02-07 1991-10-15 Toshiba Corp プログラム作成装置および制御装置
JPH041076A (ja) 1990-04-18 1992-01-06 Nec Corp 印字制御方式
JPH0438540A (ja) 1990-06-05 1992-02-07 Toshiba Corp メモリ管理方式
US5355484A (en) * 1991-08-12 1994-10-11 International Business Machines Corporation Dynamically established event monitors in event management services of a computer system
JP3382264B2 (ja) 1992-06-18 2003-03-04 キヤノン株式会社 ファクシミリ装置及びその制御方法
JPH06208502A (ja) 1993-01-08 1994-07-26 Sanyo Electric Co Ltd メモリ管理方法
JPH08153037A (ja) 1994-11-28 1996-06-11 Nec Corp シーケンシャル領域におけるデータ管理方式
US6061711A (en) * 1996-08-19 2000-05-09 Samsung Electronics, Inc. Efficient context saving and restoring in a multi-tasking computing system environment
US5898873A (en) * 1996-11-12 1999-04-27 International Business Machines Corporation System and method for visualizing system operation trace chronologies
US5842016A (en) * 1997-05-29 1998-11-24 Microsoft Corporation Thread synchronization in a garbage-collected system using execution barriers
US6026428A (en) * 1997-08-13 2000-02-15 International Business Machines Corporation Object oriented thread context manager, method and computer program product for object oriented thread context management
US6212544B1 (en) * 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
発明協会公開技報・公技番号92−1076
発明協会公開技報・公技番号94−6618

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7395285B2 (en) 2003-06-30 2008-07-01 Matsushita Electric Industrial Co., Ltd. Garbage collection system

Also Published As

Publication number Publication date
US6910213B1 (en) 2005-06-21
JPH11212808A (ja) 1999-08-06

Similar Documents

Publication Publication Date Title
JP3027845B2 (ja) プログラム制御装置および方法
JP4265610B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
US7167881B2 (en) Method for heap memory management and computer system using the same method
EP1049979B1 (en) Incremental garbage collection
JP4511653B2 (ja) マルチスレッド仮想マシン内におけるメモリ・アロケーションの方法及び装置
US7454447B1 (en) Declarative pinning
US7962707B2 (en) Apparatus and method for deterministic garbage collection of a heap memory
US7111294B2 (en) Thread-specific heaps
EP2175370B1 (en) System and method of using pooled thread-local character arrays
EP0840210A2 (en) Method and apparatus for dynamically sizing non-contiguous runtime stacks
US6842759B2 (en) Single-instance class objects across multiple JVM processes in a real-time system
JP2002506548A (ja) 部分的に再配置されたオブジェクトのインスタンスに関連する読み込みバリア及び書き込みバリアを有する有界休止時間ガーベッジコレクションシステム及びそのガーベッジコレクション方法
JP2002506550A (ja) 部分的に再配置されたオブジェクトのソース及び目標インスタンスに関する書込みバリアを含む有界休止時間ガーベッジコレクションシステム及び方法
JP4333676B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
WO2018144286A1 (en) Multiple stage garbage collector
US8966212B2 (en) Memory management method, computer system and computer readable medium
JP3826626B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
CN114051610A (zh) 基于arena的存储器管理
JP5051961B2 (ja) モジュール式ガーベッジコレクタを実現するための方法および装置
JP4345748B2 (ja) メモリ割当装置、メモリ割当方法、およびプログラム記録媒体
US20090228537A1 (en) Object Allocation System and Method
CN112313631B (zh) 闭环垃圾收集器
Higuera-Toledano et al. Analyzing the performance of memory management in RTSJ
Cai et al. Towards a high integrity real-time Java virtual machine
Martin Garbage collection in java

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090204

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees