JP4213582B2 - 仮想スレッドを介したコンピューター多重タスク - Google Patents
仮想スレッドを介したコンピューター多重タスク Download PDFInfo
- Publication number
- JP4213582B2 JP4213582B2 JP2003512804A JP2003512804A JP4213582B2 JP 4213582 B2 JP4213582 B2 JP 4213582B2 JP 2003512804 A JP2003512804 A JP 2003512804A JP 2003512804 A JP2003512804 A JP 2003512804A JP 4213582 B2 JP4213582 B2 JP 4213582B2
- Authority
- JP
- Japan
- Prior art keywords
- thread
- virtual
- threads
- list
- computer
- 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
Links
- 238000000034 method Methods 0.000 claims description 56
- 238000012545 processing Methods 0.000 claims description 46
- 238000013519 translation Methods 0.000 claims description 27
- 238000004891 communication Methods 0.000 claims description 20
- 230000004044 response Effects 0.000 claims description 15
- 230000008859 change Effects 0.000 claims description 11
- 238000012423 maintenance Methods 0.000 claims description 10
- 230000008569 process Effects 0.000 claims description 10
- 230000002093 peripheral effect Effects 0.000 claims description 9
- 238000012546 transfer Methods 0.000 claims description 7
- 230000004913 activation Effects 0.000 claims description 4
- 230000014616 translation Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 11
- 230000006399 behavior Effects 0.000 description 8
- 238000013459 approach Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000003542 behavioural effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 230000001771 impaired effect Effects 0.000 description 2
- 238000012913 prioritisation Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000005059 dormancy Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000001404 mediated effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 239000004175 ponceau 4R Substances 0.000 description 1
- 230000035939 shock Effects 0.000 description 1
- 230000007958 sleep Effects 0.000 description 1
- 230000002269 spontaneous effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
Description
【発明の背景】
この発明はコンピューター上において多重タスクを同時に行う方法と装置に関するものである。
【0002】
最近のほとんどのOS(オペレーティングシステム)はネイティブ多重タスクまたは多重スレッド能力、つまり内蔵の多重スレッド能力を有している。注目すべき例外はOSX以前のマッキントッシュOS(MacOS)であって、多重スレッド能力は全然またはごく少ししか持っていない。残念なことに用意された多重タスク能力はOSとハードウエアプラットフォームによって異なる。多くのプラットフォ−ムは同時に存在できるスレッドの数を制約し、あるプラットフォームは多重スレッドを全くできない。
【0003】
ソフトウエアでスレッドすることにより招来される問題とその解決方法を理解するには、多重スレッドへの一般的なアプローチとほとんどのプラットフォームネイティブスレッドシステムにより使用される特殊なアプローチを理解する必要がある。
【0004】
一度に多重処理タスクを行うには、コンピューターシステム中に多数の処理回路を設けるのが明白な解決法である。しかし一般のデスクトップコンピューターは1個のプロセッサーのみを有しており、高級ワークステーションであっても1〜4個のプロセッサーを有するのみである。
【0005】
ソフトウエアに基づいた解決法としてはタイムスライスがある。すなわちプロセッサーの時間を小さなスライスに分割するのであって、各スライスを異なるタスクまたはスレッドに用いるのである。一般には各スレッドはOSによっては3〜30メッセージの間でランすることができる。この時間にあってそのスレッドは一時停止しており、他のスレッドはランすることができる。
【0006】
通常OSはプロセッサーの時間割込みを用いて周期的に現行実行スレッドを割込みしてOSのスレッドスケジューラーを起こす。これは小さなソフトウエアであって、現行スレッドの状態または実行コンテキストをセーブし、ランする新たなスレッドを選択し、新たなスレッドのセーブされた実行コンテキストを再記憶し、プロセッサーをして正常な実行に復帰させる。この処理はコンテキストスイッチとして知られている。
【0007】
タイミングスライスが経過したときに起動するのに加えて、コンテキストスイッチはスレッドが待機状態、つまり特定のイベントが起きるまでスレッドがなにもすることがない状態に入ったときにも起動する。スレッドがそのような状態に入ると、スレッドスケジューラーが起動されてコンテキストスイッチが起動し、他のスレッドが残ったタイムスライスを使うことができる。
【0008】
一般にスレッドを待機状態に入らせるイベントは、スレッドがデイスクにページングされたメモリーにアクセスしようとするときに、起きる。OSは、メモリーシステムがメモリー中でページングする機会を得るまで、スレッドを一時停止する。他にもスレッドを待機状態に入らせるイベントとしては、スレッドがユーザー入力をチェックしたりスレッドがデイスクから読出しをしようとする場合がある。
【0009】
後者の場合には、OSはデイスク読出しが完了するまでスレッドを停止状態にする。そして他のスレッドは、第1のスレッドがデイスクから読み出されるデータを待っている間、処理タスクを行うことができる。さらにスレッドを待機状態に入らせるイベントしては、スレッドがそのタイムスライスの残りを特に放棄した場合がある。これは例えばスレッドが暫くの間やることがなにもない場合に起きるものである。
【0010】
非常な頻度をもってコンテキストスイッチは起動することができるので、コンテキストスイッチは極端に高速で動作することが重要である。多くのOSはシステム中に存在できるスレッドの数を制限している。Windows(登録商標)95は不能になるまでの最大数が約150〜200スレッドであり、BeOSはプロセッサー当り最大4096スレッドを有している。そのようなスレッド個数の制限は、挙動上の理由からの、システムがブーツしたときのスレッドテーブルの固定サイズメモリー塊のOS予備アロケーションの結果である。
【0011】
標準非翻訳プログラム語は人間読出しソースコードを機械読出しコードまたはプロセッサーによる直接読出し機械語にコンパイルする。
【0012】
他方翻訳された言語は人間読出しソースコードをインタープリター読出しコードまたはバイトコードにコンパイルする。インタープリターと呼ばれるソフトウエアプログラムは機械語で書かれており、バイトコードを読んでプロセッサーに適宜な動作をするように命令する。
【0013】
翻訳された言語の有利な点は、機械依存状にバイトコードを設計でき、言語で書かれてバイトコードにコンパイルされたプログラムをしてインタープリターが書かれたいかなるOSおよびハードウエアプラットフォーム上でランさせることができること、にある。
【0014】
プラットフォーム上で全く同じにランさせなければならない翻訳語を作成するには、プラットフォームのネイティブ多重スレッドに頼るのは最善でも問題がある。クロスプラットフォーム翻訳プログラム言語の最終目的はひとつのプラットフォーム上の言語中でプログラムを開発し、それをその言語で支持されたいかなる他のプラットフォーム上でも変更なくプログラムをランできることである。Java(登録商標)はそのような言語を形成するひとつの試みである。
【0015】
残念なことにそのようなアプリケーションが多重スレッドでなければならないならば、ネイティブ多重スレッド能力の使用は即アプリケーションがランできるプラットフォームを制約する。アプリケーションプログラムは即MacOS(スレッド能力を有していない)のほとんどのバージョン上でのランから締め出され、アプリケーションが必要とする同時実行スレッドの多さによっては、Windows(登録商標)95(最大約150〜200スレッド)、BeOS(最大プロセッサー当り4096スレッド)または他のプラットフォーム上でのランから締め出されることになる。
【0016】
【発明の要約】
この発明は上記の諸問題を解決することを意図するものであり、異なるプラットフォームと異なるOSを有したコンピューターに多重タスク能力を付与せんとするものである。この発明によれば、プラットフォーム依存手段多重タスクはインタープリターにより達成される。これは翻訳されたプログラム言語を構成する命令を翻訳するソフトウエアプログラムである。このインタープリターは仮想スレッドに応じて生成し保持し処理することにより多重タスクを実行する。この解決法はプラットフォームネイティブスレッド能力に依存することをなくしかつ翻訳されたプログラム言語を用いて多重スレッドクロスプラットフォームの信頼できる手段を提供する。
【0017】
一般的な翻訳されたプログラム言語においては、プログラム中の各命令はインタープリターにより読み出されてプロセッサーに送られなければならない。つまり翻訳されたプログラムは一般的に機械語プログラムより遅くランするであろう。従来の多重スレッドまたはタイムスライスにおいて行われるように、各機械コード命令においてタイマーまたはカウンターをチェックするインタープリターにコードを追加して、必要なときにはコンテキストスイッチを行うと、翻訳されたプログラムの挙動を厳しく衝撃することになろう。
【0018】
したがってこの発明においては連続する翻訳用語間においてのみコンテキストスイッチの挙動を行い、翻訳用語命令の実行中には行わないのである。かくしてここに開示のコンピューター使用多重タスクまたは多重スレッドは、タイマーやカウンターのチェックをすることなしに、反復して多くの機械語の均等物を実行するのである。
【0019】
この発明のコンピューターを操作する方法においては、コンピューターメモリーにそのいくつかが複数の機械コード命令を有する複数の翻訳用語命令を記憶し、コンピューターにより行われる複数のタスクまたはジョブのそれぞれについて、各実行コンテキストデータを自動的に生成する。該データは(a)各タスクまたはジョブを行う際に実行されるべき次の翻訳用語命令の記憶場所と(b)各タスクまたはジョブを行うのに必要な局所変数の値を含んだものである。
【0020】
複数のタスクまたはジョブはそれぞれ複数の機械語命令を有した翻訳用語命令のいずれかの実行を行わせる。さらにこの発明の方法においては、各仮想スレッドの制御の下に各タイムスライスまたは処理スロットにおいて各タスクまたはジョブを処理し、異なる仮想スレッド間の各コンテキストスイッチにおいて、いずれかの翻訳用語命令の現行実行の終了後にのみそのようなコンテキストスイッチを行う。
【0021】
細かくされた機械語命令を真似た従来の「仮想マシン」アプローチ(Java(登録商標)により使用されているアプローチ)を行うのに代えて、この発明の仮想スレッドは粗い命令の翻訳言語を用いる、つまり各命令が多くのより大きなタスクを達成するのである。
【0022】
例えば、機械語(または機械語を真似た翻訳言語)においてボックスを描くことは数百または数千の命令からなり、各命令はボックス中の1個のピクセルの色をセットする。
【0023】
仮想スレッドにあっては、ボックスを描くのに1個の命令が用いられ、インタープリターが機械語の残余を扱うのである。つまり、各命令の後に行われる潜在コンテキストスイッチのチェックが全体のボックス描写操作中に1回だけ行わればよく、各ピクセル後ではないのである。
【0024】
この結果インタープリターは、厳しいネガティブ挙動衝突なしに、多重スレッドを扱うことができるのである。
【0025】
この発明の他の特徴によれば、各仮想スレッドは仮想スレッドの各リンクリストの一部である。各仮想スレッドは各リンクリスト中の次の仮想スレッドのポインターを有している。またこの発明の方法においては、異なる仮想スレッド間の各コンテキストスイッチについて、現行実行仮想スレッドのポインターを参照して次に実行される仮想スレッドの識別を決定するのである。
【0026】
プラットフォームネイティブスレッド実行に際しての共通の問題点はシステム中に同時に存在できるスレッド(稼動および休止)の個数への制約である。
【0027】
例えばWindows(登録商標)95/98においては、全てのアプリケーションにおける総スレッド数が約150〜200を過ぎると、システムは極度に不安定となる。この状態に遭遇したテストシステムにより呈された挙動は自発的なリブート、ランダムなキーボード入力、ランダムなマウスの動き、メモリーの不正動作およびランダムアプリケーションクラッシュなどを含むものである。
【0028】
仮想スレッドにより用いられる粗い命令セットの結果としてはコンテキストスイッチ時間が厳正とならない点である。つまりリンクリストにスレッドを記憶するのに必要な超過時間を取ることが可能であり、その結果仮想スレッドにより非常に大きなスレッド数が可能となり、システム中で利用できる総メモリーのみによって制約される点である。
【0029】
この発明の意図するところによれば、コンピューターによるタスクまたはジョブの実行を支配または仲介する仮想スレッドが複数のリンクリスト中に記憶されるのである。該リンクリストは休止仮想スレッドのリストと稼動仮想スレッドのリストと待機列中に入っている仮想スレッドのリストとを含んでいる。さらにこの発明の方法にあっては、少なくとも1個の仮想スレッドを待機列中に入っている仮想スレッドのリストから稼動仮想スレッドのリストへと周期的に動かすものである。
【0030】
この仮想スレッドの動きは一般に(a)ミューテックスをセットして待機列中に入っている仮想スレッドのリストをロックすること、(b)(i)動かされた仮想スレッド中、(ii)当初稼動仮想スレッドのリスト中にあった少なくとも1個の仮想スレッドおよび(iii)待機列中に入っている仮想スレッドのリスト中に残っている少なくとも1個の仮想スレッド中のポインターを変更することおよび(c)その後ミューテックスをリセットまたはリリースして待機列中に入っている仮想スレッドのリストへのアクセスを可能とすることを含んでいる。
【0031】
この発明の他の特徴によれば、各仮想スレッドはミューテックスを有しており、選択された1個の仮想スレッドのミューテックスをセットして、その仮想スレッド中のデータを変更して、その後ミューテックスをリセットまたはリリースして選択された仮想スレッドへのアクセスを可能とするのである。選択されたスレッドのミューテックスのセッティング、データの変更およびミューテックスのリセットまたはリリースは他の仮想スレッドからのメッセージに反応して行われる。データの変更に際しては一般に選択された仮想スレッドのポインターの変更が行われる。
【0032】
この発明の他の特徴によれば、各仮想スレッドはメッセージ列を割り当てられ、さらに他の仮想スレッドに従ってのタスクまたはジョブの実行間に選択された1個の仮想スレッドのメッセージ列中のメッセージに入る。これらのスレッドは異なるアプリケーションプログラムから引き出された各タスクまたはジョブに対応していてもよく、選択された1個の仮想スレッドのメッセージ列中のメッセージに入るに際しては異なるアプリケーションプログラム間でのデータ移送が実行される。
【0033】
他のスレッド間メッセージにおいては選択されたスレッドと他のスレッドは異なるコンピューター上でのプロキシまたはインターフェイススレッドである。この場合メッセージ列中のメッセージに入るに際しては、コンピューター間の通信リンクを介してのメッセージ送信が行われる。この通信リンクは例えば個人コンピューターネットワーク、インターネットとして知られている世界規模コンピューターネットワークである。
【0034】
上記に示唆されたように、仮想スレッドの生成、各タイムスライスまたは処理スロットでのタスクまたはジョブの処理およびコンテキストスイッチの開始は全て翻訳プログラム下でのコンピューターの操作を含むものである。さらにこの発明によれば、コンピューター上で翻訳プログラムの複数のインスタンスがランされ、各インスタンスはネイティブスレッドに対応するものである。
【0035】
各ネイティブスレッドは実行コンテキストデータの各仮想スレッドセットを生成し、各仮想スレッドの制御の下で各タイムスライスまたは処理スロットでの複数のタスクまたはジョブを処理し、異なる仮想スレッド間で、各コンテキストスイッチ中、いずれかの翻訳用語命令の現行実行の終了後にのみそのようなコンテキストスイッチを開始する。
【0036】
多数のネイティブスレッドのランは単一のプロセッサー上では少数のスレッドに限られるのが望ましい。例えば1〜2スレッドである。プロセッサーが本来多重スレッド能力を具えている場合には、この制限により他のプラットフォーム基ネイティブスレッドが他のアップリケーションプログラムを扱うのが可能となる。
【0037】
仮想スレッドによると無制限数のスレッドが生成できる、かつスレッドはオーバーヘッドが非常に低いので、仮想スレッドを用いた言語で書かれたプログラムは独特のプログラムアプローチの利点を活かせる。
【0038】
このプログラムアプローチに際しては、多数のスレッドを使用するもので、各スレッドはスクリーン上の各ユーザーインターフェイス装置のためのものである。例えばボタンはそれ自身のスレッドを有している。スクロールバーは4個有しており、1個が各ボタンのため、1個がセンターバーのため、1個がマスタースレッドのためのものである。スレッドはユーザーインターフェイス装置に限定されるものではない。例えばサーバープログラムは各クライアント要求に奉仕する1個のスレッドを生成できる。
【0039】
アップリケーションの性質に応じて一般的なアプリケーションは100〜数千のスレッドを有している。システム上でランする多重アップリケーションでは、Windows(登録商標)95(150〜200スレッド)のネイティブスレッド能力を凌ぐもので、より大きなまたは制約なしのスレッド能力を具えたプラットフォーム上でさえもネガティブに挙動を衝撃するだろう。他方仮想スレッドはこれらの問題を扱うべく設計されており、挙動上の問題なしに1万個のスレッドを具えた多重アップリケーションをランすることを可能にする。
【0040】
ユーザーインターフェイスコードが数百のユーザーインターフェイス装置のトラックを保つ必要がないので、つまり各スレッドはスレッドが責任を負う単一のユーザーインターフェイス装置のトラックのみを保つ単純なプログラムのみをランするので、スレッドのこのような多数使用は複雑なアップリケーションの生成を簡単にする。この結果生成がより簡単でデバッグと保守がより容易な小さなプログラムとなる。
【0041】
この発明の他の特徴によれば、選択された1個の仮想スレッドが休止状態にあり(例えば休止スレッドのリンクリスト中で)、コンピューター外のソースからの入力に反応してメッセージを発生し、選択された仮想スレッドのためのメッセージ列中にメッセージを挿入し、選択されたスレッドを休止状態から稼動状態に変更し、その後メッセージ列にアクセスして、選択されたスレッドに割り当てられたタイムスライスまたは処理スロット間にメッセージを得る。この処理は各スレッドに関係あるイベントの発生に従って仮想スレッドを休止状態から稼動状態に移すものである。このイベントはコンピューター外のソースから発生される。例えばキーボードを起動するオペレーターまたは遠隔コンピューターからの通信による。
【0042】
この発明によるインタープリター仲介仮想スレッドはいかなる手法によっても異なるタスクまたはジョブ間で優先順位をつけることができる。各仮想スレッドがスレッド優先順位を有している場合には、さらに複数の仮想スレッド中のスレッド優先順位を参照して相対優先順位を決定し、それに従ってスレッドの順位を変更する。ある優先順位をつける手法にあっては、第2のスレッドより大きな部分数である優先順位を有したあるスレッドはあるタイムスライスまたは処理スロットの数を与えられ、それは第2のスレッドに与えられたタイムスライスまたは処理スロットの数より大である。
【0043】
仮想スレッドの優先順位付け(そしてそれに伴ってそれらのタスク)は異なるネイティブスレッド間での処理ロードの分配の機会を与え、1を越えるネイティブスレッドが使われる。スレッドはタスクの平均優先順位より多く有したネイティブスレッドからスレッドの平均優先順位より少なく有したネイティブスレッドへの仮想スレッド再分配のタスクを割り当てられる。一般にスレッドの変更は可動スレッドに限定される。
【0044】
すでに論じられたように、仮想スレッドの制御の下に各タイムスライスまたは処理スロット中で処理されるタスクまたはジョブはコンピューターディスプレー上に映像されたオブジェクトの制御を含んでおり、各オブジェクトは1個の仮想スレッドを割り当てられた別個のタスクまたはジョブを構成する。この発明に従ってインタープリターにより各仮想スレッドに割り当てられた処理済みタスクまたはジョブはさらにコンピューターキーボード上のキーの起動をモニターすることを含んでいる。各キーは各仮想スレッドを割り当てられた別個のタスクまたはジョブを構成する。
【0045】
タイムスロットまたは処理スロットは連続実行された翻訳用語命令を計数することにより測定するのが望ましい。さらにこの発明の方法においては、各タイムスライスまたは処理スロットについて、所定数の連続実行翻訳用語命令を計数すると各タイムスロットまたは処理スロットを終了する。
【0046】
この発明の多重タスクコンピューターの一実施例はメモリーと、ディスプレーと、入力周辺機器と、メモリーに動作上接続された少なくとも1個のプロセッサーとを有している。ディスプレーと入力周辺機器とプロセッサーとはコンパイラーを有しており、これがオペレーター入力ソースコード命令をバイトコードまたは翻訳用語命令に変更する。またコンパイラーは動作上メモリーにリンクされて、バイトコードまたは翻訳用語命令の記憶を可能とする。
【0047】
プロセッサーはまたバイトコードまたは翻訳用語命令を実行するインタープリターを有している。メモリーは休止仮想スレッドの第1のリンクリスト、稼動仮想スレッドの第2のリンクリストおよび待機列中に入っているまたは待機仮想スレッドの第3のリンクリストを記憶する。各スレッドはコンテキストまたは状態データ、ミューテックスおよび各リスト中の次のスレッドへのポインターを有している。インタープリターは入力周辺機器に動作上接続されていて、周辺機器により発生されたイベントを認識し、また動作上メモリーに接続されて、(a)少なくとも1個の休止仮想スレッドを第1のリンクリストから第3のリンクリストへ移し、(b)待機列中に入っているまたは待機仮想スレッドを第3のリンクリストから第2のリンクリストへ移し、(c)所定の優先順位スケジュールに従って連続するタイムスライスまたは処理スロットにおいてコンテキストおよび第2のリンクリスト中の異なる仮想スレッドの状態データに応じて命令を実行する。インタープリターは動作上ディスプレーに接続されて、第2のリンクリスト中の各稼動仮想スレッドにより特定される命令に反応してディスプレー上のオブジェクトを一部変更する。
【0048】
メモリーはさらにネイティブスレッドの第4のリンクリストを記憶することもできる。この場合、インタープリターは共通インタープリターの複数のインスタンスのひとつであって、各インスタンスは各ネイティブスレッドに対応する。また第2のリンクリストは複数のリンクされた稼動スレッドリストのひとつであり、各ネイティブスレッドは各ポインターによりリンクされた稼動スレッドのリストにリンクされている。一方第3のリンクリストは複数の待機列中に入っているスレッドリストのひとつであり、各ネイティブスレッドは各ポインターによりリンクされた待機列中に入っているスレッドのリストにリンクされている。
【0049】
この発明の他の特徴によれば、インタープリターはプログラムされた回路を有しており、この回路が仮想スレッドを平均より重いロードを有した第1のネイティブスレッドから平均より軽いロードを有した第2のネイティブスレッドへ切り替える。
【0050】
休止仮想スレッドのリストまたはテーブルはキーボードの各キーに割り当てられた複数のスレッドを有していて、各キーの起動を処理するのが望ましい。休止スレッドのリストまたはテーブルはディスプレーイメージ中の各オブジェクトに割り当てられた複数のスレッドを有していてもよく、これにより各オブジェクトの出現の変化を処理する。
【0051】
インタープリターがコンテキストスイッチモジュールと命令カウンターとを有している場合には、コンテキストスイッチモジュールはメモリーと命令カウンターとに動作上接続されており、現行実行稼動スレッドに従って所定数のバイトコードまたは翻訳用語命令が実行されると、第2のリンクリストの現行実行稼動スレッドから第2のリンクリストの次の稼動スレッドへのコンテキストスイッチを起動する。
【0052】
各仮想スレッドは各スレッド中で実行する次の命令の記憶場所と、各スレッドについてのいずれかの局所変数と各スレッドについての実行優先順位とを有している。
【0053】
この発明の他の特徴によれば、メモリーは各スレッドに割り当てられた複数のメッセージ列と少なくとも1個のプロキシまたはインターフェイススレッドとを有しており、該プロキシまたはインターフェイススレッドの実行コンテキストは通信リンクを介して遠隔コンピューターと通信を行う。通信リンクがインターネットのようなコンピューターネットワークである場合には、プロキシまたはインターフェイススレッドはネットワークプロトコルルーチンに至るメモリーアドレスを有している。
【0054】
この発明の他の実施例のコンピューターは、状態と多重スレッドまたはタスクのコンテキストデータとを記憶するメモリーと、一連のバイトコード命令を実行するインタープリターとを有している。各バイトコード命令は多数の機械コードステップを構成している。インタープリターはコンピューターにより行われる各タスクについての各仮想スレッドを定めるようにプログラムされており、一連の連続タイムスライスの各タイムスライス間に仮想スレッドから選択された各現行スレッドのバイトコード命令を実行し、かついずれかのバイトコードの実行後のみ、ある仮想スレッドから他の仮想スレッドへのコンテキストスイッチを実行する。以下この発明による種々の効果を記載する。
【0055】
【定義】
用語「多重タスク」とはコンピューターによる同時多重タスクを行うことを言う。
【0056】
用語「翻訳用語」とはインタープリターによる実行のためにコンパイルされたコンピューター命令を言う。インタープリターとはプログラムであって、機械語プログラムに翻訳し、翻訳されると表示された動作を行うものである。この「翻訳用語」は特定のコンピューターのハードウエアには関係なく、プログラムが使用される前にコンピューターにより使用されるコードへの変換を必要とする。多くの翻訳用語命令は多数の機械語命令の実行を引き起こす。翻訳用語は「バイトコード」とも言われる。
【0057】
用語「タスク」または「ジョブ」とはコンピューターにより行われるいかなる機能をも示すものである。タスクまたはジョブはプロセッサーレジスターのコンテキストの変更などの簡単な動作から多くの翻訳用語命令の実行を必要とする複雑で大きな動作まで変化する。
【0058】
タスクまたはジョブの例としては、(a)キーボードやその個々のキーなどのユーザー入力周辺機器のモニター、(b)メニューボタンやウインドーやスクロールバーやアイコンや背景パターンなどのモニターまたはディスプレー上のオブジェクトの発生と変更、(c)ネットワークまたは他の通信リンクを介しての遠隔コンピューターとの通信、(d)ワードプロセッサーやスプレッドシートやマルチメディアプレーヤーや計算機などのアプリケーションプログラムおよび(e)編集や印刷やスペルチェックやその他のワードプロセッサーのアプリケーションプログラム機能の種々の構成要素などがある。
【0059】
用語「タイムスライス」または「処理スロット」とはプロセッサー時間のセグメントを言う。従来の多重タスクコンピューターにあっては、全てのタイムスライスは期間が同じであり、時間ベースまたはタイマーインタラプトにより測定される。この発明の場合には、タイムスライスまたは処理スロットは従来の多重タスクコンピューターのようにタイマーまたは命令計数により測定される。後者の場合には、タイムスライスまたは処理スロットは全ての期間が同じである必要はない。
【0060】
用語「スレッド」とはコンピューターによりタスクまたはジョブを実行または行うための実行コンテキストを言う。実行コンテキストは一連のタイムスライスまたは処理スロット中で使用される。用語「仮想スレッド」とはインタープリターにより生成され、記憶され、変更され、処理されかつ従われるスレッドを言う。用語「ネイティブスレッド」とは特定のコンピューターのOSに内蔵されたスレッドを言う。コンピューターのOSが多重ネイティブスレッド能力を具えている場合には、複数のネイティブスレッドを使用でき、各ネイティブスレッドはインタープリターの各インスタンスをランさせる。
【0061】
用語「ミューテックス」とはロック可能なオブジェクトであって、一時に1個のスレッドによりセットまたはロックされて、他のスレッドのプログラムや仮想スレッドやメモリー領域やコンピューターシステムの他の構成要素へのアクセスを防止する。ミューテックスはネイティブスレッド実行により使用されて、スレッド間で分配されているデータへのアクセスを同時化する。ミューテックスを使用すると同時に同じデータを変更しようとしている多数のスレッド間での葛藤を防止できるので、その使用は重要である。ミューテックスを用いて分配データを代表し、スレッドはデータにアクセスする前にミューテックスをロックしなければならない。
【0062】
用語「リンクリスト」とはリスト中の各エントリーがリスト中の次のエントリーのメモリーアドレスを含んでいるようなソフトウエア産業で一般に用いられる構造である。このリンキングは、リスト中の他のエントリーを動かすことなしに、エントリーをリスト中に挿入またはリストから削除することを可能とする。いずれかのアイテムの削除に際しては、単にアイテムのプロセッサーを変更して、プロセッサーがアイテムの後者のアドレスをポイントするようにする。これによりアイテムにより使用されるメモリーを自由にする。
【0063】
用語「コンテキストスイッチ」とは現行実行スレッドが割込みされる処理を示す。そのスレッドの状態または実行コンテキストは記憶され、新たなスレッドが選択ランされ、新たなスレッドのセーブされた実行コンテキストが再記憶され、すぐ後続のコンピューター動作が続く。
【0064】
【好ましき実施例】
図1に示すように、コンピューターシステムはプロセッサー12、キーボード14、ディスプレー16およびメモリー18を有している。プロセッサー12はインターネット22などのコンピューターネットワークを介して遠隔コンピューター20に接続されている。
【0065】
図2に示すように、プロセッサー12はインタープリター24を有しており、このインタープリターは一般には多重コンピューター機能を実施するようにプログラム変更された総デジタルコンピューター回路として実装されており、キーボード14を介してユーザーにより入力される命令またはインターネット22を介してコンピューター20から受信された通信に反応して、キーボード起動の翻訳およびディスプレー16の制御および特にディスプレー上のオブジェクトの姿態の制御を行う。またプロセッサー12はコンパイラー26(インタープリター24の一部である)を有しており、これが人間によるソースコードをバイトコードまたはメモリー18に記憶されている翻訳用語に変換する。
【0066】
図3に示すように、インタープリター24はコード実行ユニット28を有しており、これが動作上メモリー18に接続されて、バイトコードを読み出してバイトコードに応じた操作を行う。インタープリター24はさらに実行ユニット28に接続された命令カウンター30を有しており、現行のタイムスライスまたは処理スロット中で処理されるバイトコード命令の数を追従する。
【0067】
カウンター30は動作上コンテキストスイッチモジュール32に接続されており、該モジュールは実行ユニット28に接続されて、ユニット28が所定数のバイトコード命令を計数すると、インタープリター24の実行コンテキスト中の変更を誘発する。事情によっては、例えば待機状態に入ったら、実行スイッチはより早く、つまり計数完了前に起きてもよい。
【0068】
以下の記載の多くにおいて、インタープリター24はコンパイルされたバイトコードのみを扱うものと仮定する。実際にはコンパイラー26(インタープリターの構成要素または別個のプログラム)は人間読出し可能ソースコードをバイトコードに翻訳する必要がある。コンパイラーはソフトウエア産業における標準品であり(C、C++、Basic、Pascal、Java(登録商標)その他多くの言語はランする前にコンパイルされなければならない)コンパイラーを書く手法は多くのプログラマーにとって公知のものであるので、これ以上の説明は省略する。
【0069】
インタープリター24は、各仮想スレッドの制御に応じてまたは制御の下に、各タイムスライスまたは処理スロットにおいて、仮想スレッドの生成およびリンキングおよびタスクの実行を介して多重タスクを実施する。以下においてはインタープリター24がスタック型インタープリターであると仮定する。実際には仮想スレッドはスタック型であろうとなかろうといかなる型式のインタープリターとも働くものである。
【0070】
以下のバイトコードを考察する。これはディスプレー16のスクリーン上に座標軸x=10、y=10およびx=20、y=20間にボックス描くものである。
【0071】
命令 パラメータ
整数押下 10
整数押下 10
整数押下 20
整数押下 20
ボックス描出
【0072】
スタック型言語においては、最初の4個の命令が値10、10、20、20をスタック上に押下する。ボックス描出命令はスタックから上の4個の値を除いて、ボックス描出用の座標軸に用いる。
【0073】
このバイトコード命令は以下のインタープリター24と仮想スレッドの例示プログラムとして用いる。
【0074】
【仮想スレッド】
仮想スレッドは基本的には実行コンテキスト以外のなにものでもない。実行コンテキストは(a)スレッド中で実行する次の命令の記憶場所、(b)スレッドについてのいずれかの局所変数の値、(c)スレッドについてのコールスタック、(d)スレッドの優先順位と他の属性および(e)プログラム言語がスレッド形式ごとで記憶しなければならない他のデータ(エラー状態データなど)からなるものである。バイトコードはスレッドの一部ではない。数個のスレッドが同じバイトコードを同時にランできる。スレッドは単に実行すべき次のバイトコード命令へのポインターをメモリー中に保持する。
【0075】
スレッドは以下の4通りの状態のいずれかをとれる。(1)休止。休止仮想スレッドは一時的になにもすることがない。例えばタイマーの経過を待機しているスレッドのようにキー押下などのユーザー入力を待機しているスレッド。休止スレッドは稼動仮想スレッドとは分離したリストに記憶され、いかなる処理時間をも取らない。(2)待機列中に入っている。仮想スレッドは稼動になる準備が整っており、インタープリターをランしているいずれかのネイティブスレッドに割り当てられている。しかしネイティブスレッドは命令の実行で忙しく、命令が完了するまで、仮想スレッドをその稼動リスト中に動かすことができない。
【0076】
(3)稼動。仮想スレッドはネイティブスレッドの稼動リスト中にあり、ネイティブスレッドからタイムスライスを収受する仮想スレッドのひとつである。(4)現行。現行仮想スレッドは常に稼動仮想スレッドでもある。現行仮想スレッドは現在実行している仮想スレッドであり、つまりネイティブスレッドはそれにタイムスライスを与えかつそれがタイムスライス中にある。
【0077】
【リンクされたスレッドリスト】
図4に示すように、インタープリター24はスレッド状態とコンテキストデータをリンクリストのセットとしてメモリー18に記憶する。2個の主たるリンクリストがあり、休止スレッドテーブル34とネイティブスレッドテーブル36である。各リスト34、36の第1エントリーへのポインター38、40はインタープリター24中の大域変数中に記憶される。
【0078】
休止スレッドテーブル34はシステム中の全休止仮想スレッド42のリストを記憶する。スレッドを再起動する各イベントが起きるまで、これらのスレッド42は休止テーブル34中に残る。休止テーブル34中の各エントリーまたは仮想スレッド42はスレッドの状態とコンテキストデータ44と、スレッドの状態とコンテキストデータへのアクセス制御に使われるミューテックス46と、リスト中の次のエントリーのメモリーアドレスを有しているポインター48とを有している。
【0079】
ネイティブスレッドテーブル36はインタープリター24のインスタンスをランさせかつ実行のための仮想スレッドを収受することのできる各ネイティブスレッド50のエントリーを有している。MacOSのあるバージョンのようなネイティブスレッド能力のないプラットフォーム上では、ネイティブスレッドテーブル36中に1個のエントリーのみがある。ネイティブスレッドテーブル36中の各エントリー50は1個のミューテックス52、稼動仮想スレッド58のリンクリスト56へのポインター54と、待機列中に入っているまたは待機仮想スレッド64のリンクリスト62への他のポインター60と、ネイティブスレッドリスト36中の次のエントリーへのさらに他のポインター66とを有している。
【0080】
仮想スレッド58、64のリンクリスト56、62は休止仮想スレッド42のリンクリスト34と同じフォーマットを使うが、各稼動スレッド58と各待機列中に入っているスレッド64とは休止スレッド42と同じ構造を有している。各ネイティブスレッド50は待機列中に入っている仮想スレッド64の各リンクリスト62から稼動仮想スレッド58の各リンクリスト56へと周期的にスレッドを動かす。ネイティブスレッド50はその待機列中に入っているスレッド64を使用しないが、ネイティブスレッドは命令(実行ユニット28を介して)を実行している。そこで各リンクリスト62はロックされて、ネイティブスレッドの稼動リスト56をロックすることなしに、スレッドは列中に配置される。かくして多重プロセッサーシステムの挙動を改善する。
【0081】
ミューテックス52は待機列中に入っている仮想スレッド64の各リンクリスト62へのアクセスを同期化するのに用いられる。ネイティブスレッド50(オーナーまたは他のネイティブスレッドのいずれであっても)は、各列62へのアクセスが得られる前に、各ミューテックス52上へのロックを有さなければならない。図4に示す残りのスレッド構造はミューテックスを必要としない。なぜならアクセス能力を具えた唯一のスレッドは各ネイティブスレッドだからである。
【0082】
インタープリター24は図5A、5Bに示すようなループ中でそのほとんどの時間(全てのインタープリターが行うように)を費やす。このループを使ってインタープリター24は仮想スレッドを支持する多くの動作を行う。
【0083】
【OS保守タスク】
インタープリター24が周期的に行わなければならないタスクのひとつはOS保守70である。このタスクの詳細はプラットフォームに応じて変化する。一般的にはただ1個のネイティブスレッド50が保守タスク70を行う必要があり、他のネイティブスレッドは単にバイトコード命令を実行するのである。あるプラットフォームにあっては、完全に分離したネイティブスレッドが保守に使用でき、ネイティブスレッドテーブル36中の全てのネイティブスレッド50はバイトコード実行に奉仕できる。他方、ネイティブスレッド能力(つまりOSX以前のMacOSバージョンなどの協調的な多重タスクシステム)を有さないプラットフォームは周期的にプラットフォーム保守タスクを行って、システム時間上の他のタスクをランさせねばならない。
【0084】
保守タスク70の一部として行われる一般的なタスクとしてはOSのイベントループ(MacOSプラットフォーム上のcallingGetNextEvent()またはWindows(登録商標)プラットフォーム上のPeekMessage()/GetMessage()/TranslateMessage()/DispatcchMessage())の反復である。
【0085】
【イベント処理】
保守タスク70の実行後、インタープリター24と特に命令実行ユニット28は、ネイティブスレッド50の稼動スレッドリスト56中に仮想スレッドがあるか否かについての、質問72をする。リスト56中に少なくとも1個の稼動スレッド58があれば、インタープリター24はイベントについての稼動チェック74を開始する。リスト56中に稼動スレッド58がない場合には、インタープリター24は76においてイベントを待機し、かくしてシステム上の他のアプリケーションにプロセッサー時間を放棄する。
【0086】
イベントが起きると、該イベントがメッセージとして符号化されて、適宜な仮想スレッドのためのメッセージ列に入れられる。各仮想スレッドはそれ自身のメッセージ列を与えられている。関連する仮想スレッドが休止スレッド42ならば、再起動されなければならない。これにはネイティブスレッド50を発見して、これに休止スレッドが待機列中に入っているまたは待機スレッド64として割り当てられる。
【0087】
図5Aに示すように、決定ジャンクション78においてインタープリター24により確認されるように、イベントチェック74が検出されたイベントになると、インタープリター24はステップ80において受信者スレッドを識別し、ステップ82において受信者スレッドのメッセージ列をロックする。ステップ76においてイベントの報せを受信したときにもインタープリター24によりこのロックが開始される。
【0088】
爾後インタープリター24は84において、受信者スレッドが休止スレッドであるか否かを調べる。調査84においてインタープリター24により決定されるように、受信者スレッドが休止スレッド42ならば、大域休止スレッドリスト34がステップ86においてロックされる(ミューテックスは図示せず)。受信者スレッドはついでステップ88においてリンクリスト34から削除される。この削除は一般に休止スレッドリスト34中の受信者スレッドのすぐ前の仮想スレッドのポインター48の変更を惹起する。これによりポインターは休止スレッドリスト34中の受信者スレッドにすぐ続く仮想スレッドを識別する。
【0089】
ステップ88におけるリンク休止スレッドリスト34からの受信者スレッドの削除後、インタープリター24はステップ90においてリスト34をロックする。次のステップ92において、インタープリター24はネイティブスレッド50のリンクリスト36をスキャンまたはトラバースして、最軽ロードのネイティブスレッドを発見する。ネイティブスレッドロードはネイティブスレッドに割り当てられた仮想スレッドの数として計算される。しかし物理的スレッド(つまり物理的スレッドの稼動リストおよび列中の全ネイティブスレッド)に割り当てられた全ネイティブスレッドの優先順位を合計することによりより正確にロードを計算する方がよい。
【0090】
最軽ロードを持っていると選択されたネイティブスレッド50の列ミューテックス52はステップ94においてインタープリター24によりロックされる。休止スレッドリスト34から削除されたばかりの受信者仮想スレッドはついでステップ96において選択されたネイティブスレッド50の待機列中に入っているスレッドリスト62に追加される。ついで各ミューテックス52はステップ98においてロック解除される。待機列中に入っているスレッドリスト56への受信者仮想スレッドの追加は、受信者スレッドの挿入に際して、受信者スレッドの中の2個のポインターおよび待機列中に入っているスレッドリスト56中の受信者スレッドの直ぐ前のスレッドの変更を誘発する。
【0091】
調査84においてインタープリター24により決定されるように、受信者スレッドが非稼動または休止スレッド42でない場合には、インタープリターはルーチン100を開始し、待機列中に入っているスレッド64をリンクリスト62からリスト56へと移す。ルーチン100は受信者スレッドのリスト34からリスト56への移送に際してもインタープリター24により開始される。ルーチン100の第1のステップ102においては、インタープリター24はミューテックス52をロックする。ついでインタープリター24は104において、リスト62が少なくとも1個の仮想スレッド64を含んでいるか否か、をチェックする。もしそうならば、列中の最初のスレッドがステップ106において列から削除され、ステップ108においてリスト56に追加される。
【0092】
この仮想スレッドのあるリストから他のリストへの移送は3個のポインターの変更を誘発する。つまり動かされたスレッドのポインターと2個のリスト中の直ぐ先行するスレッドのポインターである。スレッドの移送後、インタープリター24はジャンクション110において、新たに移送された仮想スレッドが現行実行スレッドより高い優先順位グループ中にあるか否か、を決定する。もしそうならば、ステップ112においてコンテキストスイッチがインタープリター24、特にモジュール32(図3)により行われて、新たに移されたスレッドが現行実行スレッドとなる。ついでステップ114において列ミューテックス52はロック解除される。
【0093】
【タイマー処理】
タイマー処理は仮想スレッドの重要な部分ではないので、図5A、5Bには含まれてない。しかし翻訳された言語は一般にタイマーをセットすることによりデベロッパーに提供される必要がある。
【0094】
仮想スレッドをタイマーに具える最も効率的な方法はメモリー18中に全てのタイマーの大域リストを保持することである。経過したタイマーが直ぐにリストの最初に現れるようにリストをソートすべきである。
【0095】
通常イベント処理中に主インタープリターループ(図5A、5B)が反復されるごとに、インタープリター24はタイマーリストの最初のエントリーをチェックして、そのエントリーが経過したか(してなければ、リスト中の後のタイマーは最初のタイマーが経過した後で経過するので、他のタイマーは経過してない)否か、を見る。タイマーが経過していれば、それはリストから削除されイベントが発生される。該イベントは適宜な仮想スレッドの稼動を引き起こし(すでに稼動でなければ)、そのスレッドは、スレッドがその列をチェックしたときに、タイマー経過イベントを発見する。
【0096】
ネイティブスレッドに割り当てられた仮想スレッドがなくネイティブスレッドがイベントをチェックする(ステップ74)代わりにイベントを待機している(ステップ76)場合には、インタープリター24はイベント待機前にタイマーをチェックしなければならない。リスト中にタイマーがある場合には、インタープリターはOSタイマーをセットして、OSがイベントを発生してタイマーが経過したときに待機をリリースするようにしなければならない。
【0097】
異なるOSシステムはそのタイマーにおいて異なる程度の正確さを有していることを認識するのが重要である。リスト中の最初のタイマーの残り時間がOSタイマーの正確さより少ない場合には、インタープリター24はメッセージを待機することなく、代わりにメッセージをチェックして、時間経過イベントが要求される正確さで発生されるようにしなければならない。
【0098】
【スレッド間メッセージ】
一般に互いにデータを交換できるように、仮想スレッドはある通信手段を有していることが必要である。従来の多重タスクコンピューターシステム中のネイティブスレッドは通常メモリーにデータを配置することによりデータを分け合い、これによりデータは全てのスレッドにアクセス可能であり、メモリーへのアクセスをロックして、多数のスレッドがデータに同時にアクセスすることを防止する。ここに開示する仮想スレッドは異なるアプローチを使用するもので、スレッド間でメッセージを交換する。メッセージはメッセージ識別子から構成され、識別子はメッセージのタイプとデータのブロックを独自に識別する(例えばストリング「mouse−move」などがメッセージ識別子となり得る)。データのブロックはいかなるフォーマットでもよく、いかなるサイズ(挙動上の理由から数メガバイトサイズの大きなブロックは勧められないが、そのような場合には一連のより小さなメッセージが好ましい)でもよい。
【0099】
メッセージはOSから収受された外部イベント(マウスの動きやキーの押下などのユーザー入力イベントも含む)または仮想スレッドバイトコード中の命令に反応して発生することもできる。
【0100】
図5Aのイベント処理部分には、イベントに反応していかにメッセージがスレッドメッセージ列に追加されるか、が示されている。この手法は、バイトコード命令に反応してメッセージをスレッドメッセージ列に追加するのにも使われる。スレッドがそれ自身のメッセージ列にメッセージを配置する場合には、バイトコード命令実行の一部としてすでにロックされているスレッドのコンテキストのロック部分を避けなければならない。両方の場所にロックしようとするとミューテックスのプラットフォーム実行によっては膠着状態を引き起こす。
【0101】
【稼動列から稼動リストへのスレッドの移動】
メッセージまたはイベントに反応して仮想スレッドが稼動されると、仮想スレッドは稼動スレッドリスト56ではなくネイティブスレッド50の待機列中に入っているスレッドリスト62中に置かれる。リスト56はネイティブスレッドそれ自身によってのみアクセスされるべきでリスト56はロックされる必要がないので、上記のようになる。
【0102】
リスト56をロックする必要を除きリスト62のみをロックすることにより、ネイティブスレッド50は命令を実行するのに忙しくかつ稼動(異なるプロセッサー上で異なるスレッドが同時にランすること)を行っているネイティブスレッドは命令実行の終了を待機する必要がないので、挙動が改善される。したがってネイティブスレッドはスレッドをその稼動列から稼動リストへと周期的に移動させる責任がある。
【0103】
【コンテキストスイッチ】
各ネイティブスレッド50は現行実行仮想スレッドへのポインター(例えばポインター54)をリスト36中のネイティブスレッドエントリー中に記憶する。コンテキストスイッチはこのポインターをリスト56中の異なる仮想スレッド58へのポイントに変更するだけである。命令実行ユニット28(図3)により行われた命令実行コードはポインターアドレスにおける仮想スレッドリストエントリー中のスレッドコンテキストを使い、したがってコンテキストスイッチについては他の行動は必要ない。つまりコンテキストスイッチの動作は非常に速いが、命令の実行はポインター遠回りの故に通常より若干遅い。
【0104】
【スレッド優先順位】
各仮想スレッド42、58、64は割り当てられた優先順位を有している。多数のスレッドが同時に稼動である場合には、つまり稼動スレッドリスト56が1個以上のスレッド58を有している場合には、高位優先順位を有したスレッドがより多くのプロセッサー時間を収受する。
【0105】
スレッド優先順位の大事な使用のひとつはユーザー入力に応答したスレッドに優位を与えることである。この優位付与により例えばインタープリター24は、オペレーターがキーボード14のキーを起動するとすぐ、ディスプレー16上のオブジェクトを変更する。かくしてオペレーターはコンピューターから即座にフィードバックを受けて、該フィードバックはその命令が収受されて処理されていることを示すものである。かくしてユーザーはキーボード14とプロセッサー12とが動作しており、フリーズまたは不動化されていないことを知るのである。
【0106】
例えばディスプレー16上にオブジェクトとして示された「Print」ボタンを有したアプリケーションを考えて見る。ユーザー入力装置であるボタンはそれ自身の仮想スレッド42、58、64を割り当てられる。ボタンのスレッドはその時間のほとんどを休止スレッドリスト34中で過ごす。ユーザーがボタン(マウスクリックはユーザー入力イベントである)をクリックすると、スレッドが起動される。スレッドはついでボタンを引き戻して、それが「pressed in」と見えるようにしなければならない。その後スレッドはメッセージを他のスレッドに送って、他のスレッドにボタンが押下されたことを報せる。他のスレッドは書面の印刷など必要なことを行う。
【0107】
ボタンがアプリケーションの他のタスクの優先順位より高位の優先順位のスレッドを割り当てられることにより、ユーザーは、システムが他のタスクの扱いで忙しい場合でもボタンをクリックしたときに即座の可視応答(ボタンは「Pressed in」に引き戻される)があること、を保証される。
【0108】
図5A、5Bに示された簡単な優先順位システムは各スレッドにその優先順位のための数値を割り当てることで行われる。一般的にこの値は0〜100の間にあり、大きな値が高位の優先順位を示している。しかしいかなる範囲の値を使用してもよい。この簡単な優先順位システムでは、各リスト56中により高位の優先順位スレッドがあれば、与えられた稼動スレッド58はいかなるプロセッサー時間をも割り当てられない。
【0109】
このシステムの各ネイティブスレッド50はリスト56中の高位優先順位仮想スレッド58の優先順位レベルのトラックを保つ(この優先順位レベルは最高位稼動優先順位と呼ばれる)。ネイティブスレッド50がコンテキストスイッチを行いかつ新たな仮想スレッド58を選択して現行仮想スレッドとなるときには、ネイティブスレッド50は常にリスト56中の次の仮想スレッド(高位稼動優先順位において)を選択する。これにはネイティブスレッドがリストの終りに達したときリストの始めからスタートする。また各ネイティブスレッド50は最高位稼動優先順位にある稼動仮想スレッド58の数のトラックを保つ。
【0110】
この簡単な優先順位システムにあっては、ネイティブスレッド50が仮想スレッドを各リスト62から各リスト56に移動させたときはいつでも、その仮想スレッドが最高位稼動優先順位より高位の優先順位ならば、最高位稼動優先順位は新たなスレッドの優先順位に調節され、最高位稼動優先順位におけるスレッドのカウントは1にセットされ、コンテキストスイッチが行われて、新たなスレッドを現行の仮想スレッドとする。新たな仮想スレッドが最高位稼動優先順位に等しい優先順位を有する場合には、最高位稼動優先順位におけるスレッドのカウントはインクレメントされるだけである。
【0111】
稼動仮想スレッド58が終了または休止になったときはいつでも、各ネイティブスレッド50は最高位稼動優先順位レベルにあるスレッドのカウントを低減する。カウントがゼロになったら、ネイティブスレッド50はそのリスト56をスキャンして、新たな最高位稼動優先順位とその優先順位のスレッドの新たなカウントを決定し、コンテキストスイッチを行って、適切なスレッドを新たな現行仮想スレッドとする。
【0112】
最後に稼動仮想スレッド58の優先順位レベルが増加して新たな優先順位が現行最高位稼動優先順位より高位の場合には、各スレッドの割当てにより最高位優先順位はその優先順位についての数値でなければならない。一般にこの値は0〜100の間であり、大きな値がより高い優先順位を示している。しかし範囲はこれに限定されない。この簡単な優先順位システムにあっては、与えられた稼動スレッド58は、各リスト56中により高い優先順位のスレッドがある場合には、いかなるプロセッサー時間をも割り当てられない。このシステムの各ネイティブスレッド50は調節された優先順位のトラックを保っており、そのスレッドは新たな現行スレッドとなる。同様に稼動仮想スレッド58の優先順位レベルが減少したら、もしその仮想スレッドが前に最高位優先順位レベルにあったのなら、各ネイティブスレッド50はそのリスト56をスキャンして新たな最高位稼動優先順位とその優先順位のスレッドの新たなカウントを決定し、ついでコンテキストスイッチを行って、適切なスレッドを新たな現行仮想スレッドとしなければならない。優先順位レベルはインタープリター24により実行された命令の結果変化することができる。
【0113】
【進化したスレッド優先順位】
より進化したシステムをスレッド優先順位に使用できるが、仮想スレッドが必ずしも働く必要はない。より高位の優先順位スレッドが稼動であっても、このシステムはスレッド58をしてプロセッサー時間を取得させ得るものである。これは優先順位グループを用いることにより行われる。
【0114】
一般的な実施においては、スレッドの優先順位は−9999と+9999の間の値である。スレッドの優先順位グループはスレッドの優先順位を100で除算したものに等しく、余りは切り捨てる。例えば
【0115】
優先順位グループ グループ中最低の優先順位 グループ中最高位の優先順位
−3 −399 −300
−2 −299 −200
−1 −199 −100
0 −99 +99
1 100 199
2 200 299
3 300 399
【0116】
前記の簡単なスレッド優先順位システムからの法則はまだ使用されているが、それらの法則は優先順位グループの代りに適用される。かくして、より高位の優先順位グループに稼動スレッドがある場合には、与えられた稼動スレッド58はいかなるプロセッサー時間をも受け取らない。
【0117】
しかし同じ優先順位グループ中のスレッド58はグループ中での優先順位に基づいてプロセッサー時間を受け取る。スレッド優先順位は相対的である。与えられた2個の優先順位PとQとが優先順位Qのスレッドが受け取った各(Q−P)+1タイムスライスについて1個のタイムスライスを受け取る。したがって優先順位Nのスレッドは優先順位N+3のスレッドが取得する各4個のタイムスライスについて1個のタイムスライスを取得する。例えば下記のスレッドセットを考察する。
【0118】
スレッドID スレッド優先順位
A 50
B 120
C 121
D 122
E 124
【0119】
それらのスレッドがすべて同時に稼動であると、スレッドAは他のスレッドより低位優先順位グループ中にあるので、ランしない。残りのスレッドは以下のようなタイムスライスを割り当てられる。B C D EEE D EEE C D EEE D EEE B C D EEE D EEE C D EEE D EEE。換言すると、各38タイムスライスからスレッドBは2タイムスライスを受け取り、スレッドCは4、スレッドDは8そしてスレッドEは24を受け取る。
【0120】
このタイムスライス分配は各稼動仮想スレッド58について(図3)スキップカウンター116を保つことにより実施される。各カウンター116は初期値0を有している。コンテキストスイッチが起きて新たなスレッド58が実行のために選択されなければならない時はいつでも、選択されたスレッドが最高位優先順位グループ中にある。しかし選択されたスレッドは稼動の最高位優先順位ではない。同じ優先順位グループ中に他のより高位の優先順位スレッドがある。したがってHが最高位優先順位の稼動スレッド58の優先順位であり、Pがコンテキストスイッチ動作のために新たな現行仮想スレッドとして選択された稼動スレッドの優先順位であり、Sが新たな現行仮想スレッドのためのスキップカウンター(初期値0)の値ならば、Sが(H−P)以上ならば、コンテキストスイッチが正常に起きる。でなければ各カウンター116はインクリメントされ、スレッドがスキップされ、異なる稼動仮想スレッド58が選択されて現行スレッドとなる。
【0121】
この経過を図5Aに示す。インタープリター24はまず、稼動仮想スレッド58の各リスト56中に同じ優先順位グループのスレッドが現行スレッドとしてあるか否か、をチェック118する。結果がイエスであれば、インタープリター24はステップ120において現行優先順位グループ中の次のスレッドを選択する。前記したように、インタープリター24はステップ122において現行優先順位グループ中の最高位優先順位稼動仮想スレッドの優先順位H、選択されたスレッドの優先順位P、および選択されたスレッドのスキップカウントSを決定する。
【0122】
続く決定ジャンクション124においてインタープリター24は、スキップカウントSが現行優先順位グループ中の最高位優先順位稼動仮想スレッドの優先順位Hと選択されたスレッドの優先順位Pとの間の差以上であるか否か、を質問する。スキップカウントSが差(H−P)以上であると、ステップ126においてインタープリター24は選択されたスレッドのスキップカウンター116をゼロにリセットし、ステップ128においてコンテキストスイッチを作成する。選択されたスレッドは現行実行スレッドとなる。スキップカウントSが差(H−P)未満であると、インタープリター24はステップ130において選択されたスレッドのスキップカウント116をインクリメントし、ステップ120に戻って、リスト56の現行優先順位グループ中の他のスレッドを選択する。
【0123】
絶対優先順位ではなくスレッド58の相対優先順位に全てを基づかせることにより、優先順位が10と20の1対のスレッドについて、優先順位が510と520の1対のスレッドのように、同じ数のスキップ動作が起きる。いずれの場合も、優先順位差は10でありしたがって低位優先順位のスレッドは、高位優先順位スレッドが受ける10個のタイムスライスについて1個のタイムスライスを受ける。
【0124】
【命令実行】
稼動仮想スレッド58のタイムスライスの間、仮想スレッドが割り当てられたネイティブスレッド50のインタープリター24、特に命令実行ユニット28は反復読み出して(ステップ132)仮想スレッドからの命令をなるべく速く実行(ステップ134)する。ステップ134において各命令を実行した後、ネイティブスレッド50(すなわちインタープリター24の各インスタンス)は一連のチェック136、138、140を行って、命令の結果、現行仮想スレッドが休止になっているか否か、現行スレッドが実行されたばかりの命令の結果終了しているか否か、または仮想スレッドタイムスライスが経過したか否か、を決定する。いずれかの状態が真ならば、ネイティブスレッド50または各インタープリター24は、スレッドが稼動になるか新たなタイムスライスに割り当てられるまで、その仮想スレッドからの命令実行を停止する。
【0125】
タイムスライスまたは処理スロットの測定に際してはタイマーまたは命令カウントを用いるが、後者は命令カウンター30(図3)によりトラックされる。一般に、各命令におけるオーバーヘッドが非常に低いので、命令カウントを用いる方がよい。タイムスライスが経過したかをチェックするに際しては、カウンター変数をインクリメントするだけであり、爾後タイムスライスについての命令の最大数をカウンター変数が越えたか否かをチェックする。所定のカウント最大数と命令カウントとの比較はコンテキストスイッチモジュール32(図3)で行うことができる。
【0126】
タイムスライスのために正しいサイズを選択するに当たっては、長いタイムスライスほどプロセッサー12の使用をより効率的にする(これにより仕事は速く行われる)、しかし与えられた時間内に起きることのできるコンテキストスイッチの数は低減される。この結果ユーザーインターフェイスについての挙動が間違ったものとなることがある。基礎をなしているOSとハードウエアプラットフォームおよびアプリケーションの内容などによりタイムスライスのサイズは異なったものとするのがよい。
【0127】
一般にはタイムスライス当り20〜200個の命令がよい。タイムスライスが小さすぎると(1〜3命令)挙動が大きく損なわれ、タイムスライスが大きすぎると(100万命令)多重スレッドの目的を損なうことになる。特にグラフ的なユーザーインターフェイスを持ったアプリケーションの場合がそうである。
【0128】
ネイティブスレッド50つまりインタープリター24の各インスタンスが、チェック136において、現行実行スレッドがその最後の実行命令の結果休止となったことを発見すると、そのスレッドはステップ142において各リスト56から削除される。この削除に際してはリスト56中で削除されたスレッドに直ぐ先行する稼動スレッドのポインターの調節を必要とする。各ネイティブスレッド50の列ミューテックス52はついでステップ144においてロックされ、新たな休止スレッドがステップ146において休止スレッドリスト34に挿入され、ミューテックス52はステップ148においてロック解除される。休止スレッドテーブル34にスレッドが挿入されると挿入スレッドおよび休止スレッドリスト34中で挿入スレッドにすぐ先行するスレッドのポインターの調節が行われる。
【0129】
ネイティブスレッド50つまりインタープリター24の各インスタンスが、チェック138において、現行実行スレッドが最後に実行された命令の結果そのタスクまたはジョブを終了したことを発見すると、ステップ150においてそのスレッドはリスト56から削除される。また終了したスレッドにより使用されていたリソースは自由になる。
【0130】
ステップ142、144、146、148におけるリスト56から休止リスト34へのスレッドの移送後またはステップ150におけるリスト56からの終了スレッドの削除の後、関連するネイティブスレッド50のインタープリター24は152において、現行スレッドと同じ優先順位グループのスレッドがリスト56中に残っているか否か、をチェックする。もしそうならばインタープリター24はステップ70(図5A)において保守タスクを行うことに戻る。もしそうでなければ、インタープリター24またはネイティブスレッド50はステップ154においてリスト56を通過してリスト中の最高位優先順位スレッドの優先順位を決定する。次のステップ156と158において、最高位優先順位スレッドは現行スレッドとされ、リスト56中で最高位優先順位レベルにあるスレッドの数が計数される。インタープリター24はステップ70において保守タスクを行うことに戻る。
【0131】
チェック136と138において、最後のバイトコード命令の実行後現行スレッドが休止になっていないかまたはそのタスクを終了していないか否かを、決定する。その後インタープリター24は決定ジャンクション160において、実行されたばかりの命令の結果現行スレッドの優先順位グループが変化したか否か、質問する。もしそうでなかったらチェック140が開始されてタイムスライスが経過したか否かが決定される。
【0132】
もしそうならば、インタープリター24は162において現行スレッドの優先順位グループが増減いずれをしたかを質問する。増加の場合には、最高位優先順位グループ中のスレッド数がステップ164において単一にリセットされる。もし減少ならば、最高位優先順位グループ中のスレッドのカウントがステップ166においてデクリメントされる。決定ジャンクション168においてインタープリター24は最高位優先順位グループ中に稼動スレッドが残っているか否かを調べる。この結果が否定だとインタープリター24はステップ170において稼動スレッドをスキャンして、新たな最高位優先順位グループを決定してそのグループ中のスレッドの数を計数する。インタープリター24はついでステップ172においてコンテキストスイッチを開始し、最高位優先順位稼動スレッド58が現行スレッドとなる。調べた結果が肯定ならば、決定ジャンクション168においてインタープリター24は直接コンテキストスイッチステップ172に行って、ステップ132、134を読み出し実行する。
【0133】
【スレッドロードバランス】
前記したように、各ネイティブスレッド50は稼動仮想スレッド58のリスト56からの命令を実行する。仮想スレッドが稼動になってネイティブスレッド50に割り当てられると、システムはそれをより軽いロードを持ったネイティブスレッドに割り当てようとする。これにより仮想スレッドはネイティブスレッド間で等しくバランスされる。
【0134】
稼動スレッドが終了するか休止になると、それぞれ10個の仮想スレッドを割り当てられた2個のネイティブスレッドを有したシステム上で該スレッドはそうする必要がなく、ひとつのネイティブスレッド中の6個の仮想スレッドについて全て終了するか休止となり、ひとつが4個の仮想スレッド、他が10個の仮想スレッドを有した2個のネイティブスレッドが残る。
【0135】
ネイティブスレッド50間ではアンバランスまたは等しくないロードを回避するのが望ましい。なぜならそのような事態は多重プロセッサー機械上ではプロセッサーの使用を効率的にしないからである。この問題を解決すべく、インタープリター24により扱われる仮想スレッドはスレッドバランスと呼ばれる手法を用いる。スレッドバランスの基本原理は、インタープリター24がランしている仮想スレッド58のセットを周期的にチェックしてそれらを分配してネイティブスレッド50間で仮想スレッドのバランス分布を保つこと、である。スレッドバランスは注意深く行って、ネイティブスレッド50が停止してロックされたデータを利用できるのを待機することを回避する必要がある。
【0136】
いずれのネイティブスレッド50でもスレッドバランスを行うことができる。各ネイティブスレッド50はカウンター(図示せず)を保っており、スレッドがタイムスライスのセットを完全に実行する(つまりネイティブスレッド50が稼動スレッド58のリスト56の最後に達して再び最初からスタートする)度毎に、ネイティブスレッドはインクリメントする。このカウンターがプラットフォームと予期されたアプリケーションセットおよびオペレーターの好みと一致するべく選択されたある値に達すると、カウンターはゼロにリセットされ、ネイティブスレッド50はスレッドバランスを行おうとする。
【0137】
ネイティブスレッド50がスレッドバランスを行うときになると、他のネイティブスレッドがすでにバランスを処理するプロセスに入っていれば、バランス動作をスキップする。数個のネイティブスレッド50間のスレッドバランスの調整は大域ミューテックス(図示せず)を用いて達成される。ネイティブスレッド50はミューテックス上にロックを有して、スレッドバランスを行わなければならない。ネイティブスレッド50が大域ミューテックスにアクセスしてそれがロックされていることを発見すると、ネイティブスレッドはミューテックスがロック解除となるのを待機せず、代りにスレッドバランスをスキップする。
【0138】
一旦ネイティブスレッド50がバランスミューテックス上にロックしてしまうと、ネイティブスレッドはネイティブスレッドテーブル36上に2回反復しなければならない。各ネイティブスレッド50はスレッドロード値(上記したように、一般的には全稼動スレッドの優先順位の和)を保つ。最初のスレッドテーブル36通過の間、バランスを行っているスレッド50は全てのネイティブスレッドのロード値を合計する。この和はついでネイティブスレッド50の数で除算されて平均ロードを引き出す。
【0139】
ネイティブスレッドリストを2回目に通過する間、いずれかのネイティブスレッド50が平均ロードより大なるロードを有している場合には、そのリスト56がロックされて、仮想スレッドは稼動リストから削除される。これには低位の優先順位スレッドからスタートして、ネイティブスレッドのロードが平均ロード以下になるまで、高位の優先順位スレッドに向けて動く。これらの仮想スレッドは、あたかも稼動になったばかりの如く、ついでネイティブスレッドに割り当てられる。これには通常のアルゴリズム(最も軽いロードのネイティブスレッドを決定してそれに仮想スレッドを割り当てる)を用いる。
【0140】
【名称付けスレッド】
アプリケーションが新たなスレッドを生成する命令を実行すると、アプリケーションは一般に生成されたばかりの独特な識別子を受け取る。これらの識別子は一般に独特な数字コードであって、スレッドが生成されるとダイナミックに割り当てられる。識別子はスレッド間メッセージを送るときに目標アドレスを特定するのに使われる。
【0141】
しかしときにはひとつのアプリケーションがすでにランしている他のアプリケーションとメッセージを交換するのが望ましいことがある。この場合ダイナミックに割り当てられた目標スレッドの数字IDはアプリケーションを送るのには用いることができない。
【0142】
したがって翻訳された言語がスレッドに名称を与える命令を提供するか、またはそのような機能を新たなスレッドを生成する命令の一部とすることが、望ましい。スレッド名称はスレッドを識別するのに使えるテキストのストリングである。一般にはアプリケーション開発者は彼等(開発パッケージのシリアルナンバーなど)に特有であってアプリケーションのための記載的な名称(Whiteboardなど)と組み合わされた識別子を用いてそのアプリケーションに彼等が使える独特なスレッド名称を作る。
【0143】
アプリケーションが他のスレッドにメッセージを送る必要がある場合には、スレッドのダイナミックに割り当てられた独特な数字IDによるか、またはもしすでに割り当てられているならスレッドの名称による。
【0144】
【スレッドメッセージとネットワーク】
スレッド間メッセージはアプリケーション構成要素、特にボタンやスクロールバーなどのユーザーインターフェイス構成要素間通信のための強力な手段であり、スレッド名称を用いて同じコンピューター上でランしているアプリケーション間通信のための強力なメカニズムを形成する。
【0145】
加えてスレッドメッセージは異なるコンピューター上のアプリケーション間通信の強力な手段をも形成する。該手段が適切に実施されるならば、スレッドメッセージが局所コンピューター上の名称を付けられたスレッドに送られているか否か、または遠隔コンピューター上の名称をつけられたスレッドメッセージを送るのに必要な命令に影響を及ぼさないか否か、がアプリケーションおよびその開発者達に明白になるだろう。
【0146】
異なるコンピューター上のアプリケーション間の通信はプロキシスレッド174、176(図6)を用いて達成される。局所コンピューター180上のスレッド178が遠隔コンピューター184上のスレッド182と通信する必要があるときには、スレッド178は遠隔スレッド182に接続する命令を実行しなければならない。命令が実行されると、新たな局所プロキシスレッド174が生成される。このスレッド174は遠隔コンピューター184へ接続するコードモジュールを実行する。遠隔コンピューター184は接続を受けてそれ自身のプロキシスレッド176を生成する。プロキシスレッド174、176はネットワーク186上で互いに通信する。この際にはTCP/IPなどの標準ネットワークプロトコルを用いる。
【0147】
最初の接続命令を実行したスレッド178は今度はスレッド174のIDを受ける。スレッド178は、あたかも遠隔目標スレッド182のIDであるかのごとく、そのIDを使用できる。つまりスレッド178はスレッド174のIDをスレッド182で目標とされたスレッド間メッセージのためのアドレスとして使用できる。
【0148】
スレッド174は、メッセージを受け取るといつでも、そのメッセージの表現をバイナリーバッファー(図示せず)中に生成し、標準プロトコルを用いそのバッファーをネットワーク186を介して遠隔スレッド176に送る。スレッド176はついでバイナリーバッファー表現を標準メッセージに翻訳し戻して該メッセージをスレッド182に送る。
【0149】
メッセージを他の方向に送るのにも同じシステムが用いられる。もしスレッド176がメッセージを受け取ったら、そのメッセージは翻訳されてからネットワークを介してスレッド174に送られ、該スレッドはそれをスレッド178に送る。
【0150】
ここに開示したプロセッサーモジュールはハードワイヤー構成要素または表示された機能を行うべくプログラムにより変更された一般のコンピューター回路である。かくしてインタープリターは、ソフトウェアによりユーザーのソースコードを翻訳用語にコンパイルしかつタスクまたはジョブ、現行実行仮想スレッドに応じて選択された翻訳用語を処理することを行う仮想スレッドを生成する、デジタル回路として、得られる。
【0151】
インタープリター24とその動作はランしているいかなるインタープリターのインスタンス、つまり異なるネイティブスレッド50にも応用される。
【0152】
この発明は以上の記載例に限定されるものではない。
【図面の簡単な説明】
【図1】 この発明の仮想スレッド能力を有したコンピューターシステムのブロック線図である。
【図2】 図1中のプロセッサーの選択された構成要素の他の構成要素への接続を示すブロック線図である。
【図3】 図2のインタープリターの選択された構成要素のブロック線図である。
【図4】 メモリーに記憶されたスレッド状態データとそのリンクリスト構造のブロック線図である。
【図5A】 図2のインタープリターにより行われる選択された動作の流れ線図である。
【図5B】 図2のインタープリターにより行われる選択された動作の流れ線図である。
【図5C】 図2のインタープリターにより行われる選択された動作の流れ線図である。
【図5D】 図2のインタープリターにより行われる選択された動作の流れ線図である。
【図5E】 図2のインタープリターにより行われる選択された動作の流れ線図である。
【図5F】 図2のインタープリターにより行われる選択された動作の流れ線図である。
【図6】 この発明の仮想スレッドを使用した2個のコンピューター間の通信のブロック線図である。
Claims (45)
- コンピューターのメモリーに複数の翻訳用語命令を記憶し、コンピューターにより行われる複数のタスクまたはジョブのそれぞれについて実行コンテキストデータの各仮想スレッドを自動的に生成し、各仮想スレッドの制御の下に各一連のタイムスライスまたは処理スロット中の各タスクまたはジョブを処理し、異なる仮想スレッド間のコンテキストスイッチにおいて現在実行しているいずれかの翻訳用語命令の完全な実行の後でのみそのようなコンテキストスイッチを開始するステップを有してなり、翻訳用語命令の少なくともいくつかは複数の機械コード命令を有しており、コンテキストデータは(a)各タスクまたはジョブを行う際に実行される次のいずれかの翻訳用語命令の記憶場所と、(b)各タスクまたはジョブを実行するのに必要な局所変数の値とを有しており、複数のタスクまたはジョブのそれぞれは複数の機械語命令を含んだ各翻訳用語命令の実行を引き起こすことを特徴とするコンピューターの操作方法。
- 仮想スレッドが仮想スレッドの各リンクリストの一部であって、各仮想スレッドがさらに各リンクリスト中の次の仮想スレッドへのポインターを有しており、さらに異なる仮想スレッド間のコンテキストスイッチについて現行実行仮想スレッドのポインターを参照して実行されるべき次の仮想スレッドの識別を決定するステップを有していることを特徴とする請求項1に記載の方法。
- 各リンクリストが仮想スレッドの複数のリンクリストのひとつであり、いずれかのリンクリストが休止仮想スレッドのリストであり、他のリンクリストが稼動仮想スレッドのリストであり、さらに他のリンクリストが待機列中に入っている仮想スレッドのリストであり、さらに少なくとも1個の仮想スレッドを待機列中に入っている仮想スレッドのリストから稼動仮想スレッドのリストに周期的に動かすステップを有していることを特徴とする請求項2に記載の方法。
- 待機列中に入っている仮想スレッドのリストから稼動仮想スレッドのリストへ仮想スレッドを動かすに際して、ミューテックスをセットして待機列中に入っている仮想スレッドのリストをロックし、続いて(i)動かされた仮想スレッド中、(ii)当初から稼動仮想スレッドのリスト中にある少なくとも1個の仮想スレッド中、および(iii)待機列中に入っている仮想スレッドのリスト中に残っている少なくとも1個の仮想スレッド中のポインターを変更し、その後ミューテックスをリセットまたはリリースして待機列中に入っている仮想スレッドのリストへのアクセスを可能とすることを特徴とする請求項3に記載の方法。
- 各仮想スレッドがさらにミューテックスを有しており、さらに選択された1個の仮想スレッドのミューテックスをセットし、続いて選択された1個の仮想スレッド中のデータを変更し、その後ミューテックスをリセットまたはリリースして選択された1個の仮想スレッドへのアクセスを可能とするステップを有していることを特徴とする請求項1に記載の方法。
- 選択された1個の仮想スレッドのミューテックスのセットと、データの変更と、選択された1個の仮想スレッドのミューテックスのリセットまたはリリースとがさらに他の仮想スレッドからのメッセージに反応して行われることを特徴とする請求項5に記載の方法。
- 各仮想スレッドが仮想スレッドの各リンクリストの一部であり、各仮想スレッドがさらに各リンクリスト中の次の仮想スレッドへのポインターを有しており、データを変更するに際して選択された1個の仮想スレッドのポインターを変更することを特徴とする請求項5に記載の方法。
- 各仮想スレッドがメッセージ列を割り当てられ、さらに他の1個の仮想スレッドに続いて、タスクまたはジョブの実行中に選択された1個の仮想スレッドのメッセージ列中にメッセージを入れるステップを有していることを特徴とする請求項1に記載の方法。
- 選択された1個の仮想スレッドと他の仮想スレッドとが異なるアプリケーションプログラムから引き出された各タスクまたはジョブに対応し、選択された1個の仮想スレッドのメッセージ列中のメッセージが異なるアプリケーションプログラム間のデータ移送を実行することを特徴とする請求項8に記載の方法。
- 選択された1個の仮想スレッドと他の仮想スレッドとが異なるコンピューター上のプロキシまたはインターフェイススレッドであり、メッセージ列へメッセージを入れるに際して、コンピューター間の通信リンク上でメッセージを送信することを特徴とする請求項8に記載の方法。
- 各タイムスライスまたは処理スロットにおけるタスクまたはジョブの処理およびコンテキストスイッチの開始が全て翻訳プログラムでのコンピューターの操作を含んでいることを特徴とする請求項1に記載の方法。
- さらにコンピューター上でネイティブスレッドに対応する翻訳プログラムの複数のインスタンスをランさせ、各ネイティブスレッド、実行コンテキストデータの仮想スレッドの各セットを生成し、各仮想スレッドの制御の下に各タイムスライスまたは処理スロット中の複数のタスクまたはジョブを処理し、異なる仮想スレッド間の各コンテキストスイッチにおいて現在実行中の翻訳用語命令の完全な実行の後でのみそのようなコンテキストスイッチを開始するステップを有していることを特徴とする請求項11に記載の方法。
- さらに平均より重いロードを有した第1のネイティブスレッドから平均より軽いロードを有した第2のネイティブスレッドへ仮想スレッドを移すステップを有していることを特徴とする請求項12に記載の方法。
- 仮想スレッドを移すに際して、ネイティブスレッドについてスレッドロード値を合計してスレッドの数により割り算して全てのネイティブスレッドに亘って平均ロードを決定し、各ネイティブスレッドについて各スレッドロード値を平均ロードと比較して相対ロードを決定することを特徴とする請求項13に記載の方法。
- 仮想スレッドが他のコンピューター上の第2のプロキシスレッドとコンピューターネットワークリンクを介して通信するための第1のプロキシスレッドを有しており、他のコンピューターとの通信処理に際して第1のプロキシスレッドの制御の下に標準ネットワークプロトコルを使用することを特徴とする請求項1に記載の方法。
- 第1のプロキシスレッドを含んだ各仮想スレッドがそれぞれのメッセージ列を割り当てられ、さらに第1のプロキシスレッドのメッセージ列中にメッセージを入れて、コンピューターネットワークリンクを介しての他のコンピューターへのデータ移送を実行することを特徴とする請求項15に記載の方法。
- 選択された1個の仮想スレッドが休止状態であって、さらにコンピューター外のソースからの入力に反応してメッセージを発生し、選択された1個の仮想スレッドについてメッセージ列に該メッセージを入れ、選択された1個の仮想スレッドを休止状態から稼動状態に変え、メッセージの挿入と状態の変更の後、該メッセージ列にアクセスして、選択された1個の仮想スレッドに割り当てられたタイムスライスまたは処理スロット中にメッセージを得ることを特徴とする請求項1に記載の方法。
- 各仮想スレッドがスレッド優先順位を有しており、さらに複数の仮想スレッド中のスレッド優先順位を自動的に参照して相対優先順位を決定し、決定された相対優先順位に応じてスレッドの順位を変えることを特徴とする請求項1に記載の方法。
- 各仮想スレッドの制御の下に各タイムスライスまたは処理スロット中で処理されるタスクまたはジョブが、コンピューターディスプレー上の各仮想スレッドに割り当てられた別個のタスクまたはジョブを構成するオブジェクトイメージを制御し、コンピューターキーボード上の各仮想スレッドに割り当てられた別個のタスクまたはジョブを構成するキーをモニターすることを特徴とする請求項1に記載の方法。
- タイムスロットまたは処理スロットが連続して実行される翻訳用語命令を計数することにより測定され、さらに各複数のタイムスライスまたは処理スロットについて所定数の連続実行翻訳用語命令を計数したら各タイムスロットまたは処理スロットを終了させることを特徴とする請求項1に記載の方法。
- メモリーと、ディスプレーと、入力周辺機器と、メモリーに動作上接続された少なくとも1個のプロセッサーとを有してなり、該ディスプレーと入力周辺機器とプロセッサーとが、オペレーターが入れたソースコード命令をバイトコードまたは翻訳用語命令に変更するコンパイラーと、バイトコードまたは翻訳用語命令を実行するインタープリターとを有しており、上記コンパイラーはメモリーに動作上接続されてその中へのバイトコードまたは翻訳用語命令の記憶を可能ならしめ、上記メモリーは休止仮想スレッドの第1のリンクリストと稼動仮想スレッドの第2のリンクリストと待機列中に入っているまたは待機している仮想スレッドの第3のリンクリストとを記憶し、各スレッドはコンテキストまたは状態データとミューテックスと各リスト中の次のスレッドへのポインターとを有しており、インタープリターは入力周辺機器に動作上接続されて入力周辺機器により発生されるイベントを認識し、インタープリターは動作上メモリーに接続されて、(a)少なくとも1個の休止仮想スレッドを第1のリンクリストから第3のリンクリストへと移し、(b)待機列中に入っているまたは待機している仮想スレッドを第3のリンクリストから第2のリンクリストへと移し、(c)所定の優先順位スケジュールに従って連続するタイムスライスまたは処理スロット中において第2のリンクリスト中の異なる仮想スレッドのコンテキストおよび状態データに応じて命令を実行し、インタープリターが動作上ディスプレーに部分的に接続されて第2のリンクリスト中の各々の稼動仮想スレッドによって特定される命令に反応してディスプレー上の特定のオブジェクトを変更することを特徴とする多重タスクコンピューター。
- メモリーがネイティブスレッドの第4のリンクリストを記憶し、インタープリターが共通インタープリターの複数のインスタンスのひとつであり、共通インタープリターの各インスタンスが各ネイティブスレッドに対応し、第2のリンクリストが複数のリンクされた稼動スレッドリストのひとつであり、各ネイティブスレッドが各ポインターによりいずれかのリンクされた稼動スレッドリストにリンクされており、第3のリンクリストが複数のリンクされた待機列中に入っているスレッドリストのひとつであり、各ネイティブスレッドが各ポインターによりいずれかの待機列中に入っているスレッドリストにリンクされていることを特徴とする請求項21に記載のコンピューター。
- 各稼動スレッドがあるネイティブスレッドによる各スレッドのロックを可能とするミューテックスを有していて、他のネイティブスレッドによる各スレッドへのアクセスを防止することを特徴とする請求項22に記載のコンピューター。
- インタープリターが平均より重いロードを有した第1のネイティブスレッドから平均より軽いロードを有した第2のネイティブスレッドへ仮想スレッドを移す手段を有していることを特徴とする請求項22に記載のコンピューター。
- 休止仮想スレッドのリストが各キーの起動を処理するためにキーボードの各キーに割り当てられた複数のスレッドを有していることを特徴とする請求項21に記載のコンピューター。
- 休止スレッドのリストが各オブジェクトの外観変化を処理するためのディスプレーイメージ上の各オブジェクトに割り当てられた複数のスレッドを有していることを特徴とする請求項21に記載のコンピューター。
- インタープリターがコンテキストスイッチモジュールと命令カウンターとを有しており、該コンテキストスイッチモジュールがメモリーと命令カウンターとに動作上接続されて、現行実行稼動スレッドに従っての所定数のバイトコードまたは翻訳用語命令が実行されると、第2のリンクリスト中の現行実行稼動スレッドから第2のリンクリスト中の次の稼動スレッドへコンテキストスイッチを齎すことを特徴とする請求項21に記載のコンピューター。
- 各仮想スレッドが各スレッド中で実行する次の命令の記憶場所と、各スレッドについてのいずれかの局所変数値と、各スレッドについての実行優先順位とを有していることを特徴とする請求項21に記載のコンピューター。
- メモリーが各スレッドに割り当てられた複数のメッセージ列を記憶していることを特徴とする請求項21に記載のコンピューター。
- メモリーが通信リンクを介して遠隔コンピューターとの通信を行う実行コンテキストを具えた少なくとも1個のプロキシまたはインターフェイススレッドを記憶し、該プロキシまたはインターフェイススレッドがネットワークプロトコルルーチンへと導くメモリーアドレスを含むことを特徴とする請求項21に記載のコンピューター。
- それぞれが多数の機械コードステップを有した一連のバイトコード命令を実行するインタープリターを有したコンピューターにおける多重タスク方法であって、コンピューターにより行われる各タスクについてインタープリターを用いて各仮想スレッドを定め、連続するタイムスライスのそれぞれの間仮想スレッド間から選択された各現行スレッドのバイトコード命令を実行し、あるバイトコード命令の実行後においてのみコンテキストスイッチをある仮想スレッドから他の仮想スレッドに実行することを特徴とする多重タスク方法。
- 各仮想スレッドが仮想スレッドの各リンクリストの一部であって、各仮想スレッドが各リンクリスト中の次の仮想スレッドへのポインターを有しており、さらに異なる仮想スレッド間の各コンテキストスイッチについて、現行実行仮想スレッドのポインターを参照して実行されるべき次の仮想スレッドの識別を決定することを特徴とする請求項31に記載の方法。
- 各リンクリストが仮想スレッドの複数のリンクリストのひとつであり、あるリンクリストは休止仮想スレッドのリストであり、他のリンクリストは稼動仮想スレッドのリストであり、さらに他のリンクリストは待機列中に入っている仮想スレッドのリストであり、さらに少なくとも1個の仮想スレッドを待機列中に入っている仮想スレッドのリストから稼動仮想スレッドのリストに周期的に動かすことを特徴とする請求項32に記載の方法。
- 待機列中に入っている仮想スレッドのリストから稼動仮想スレッドのリストへ仮想スレッドを動かすに際して、ミューテックスをセットして待機列中に入っている仮想スレッドのリストをロックし、ついで(i)動かされた仮想スレッド、(ii)当初稼動仮想スレッドのリスト中にある少なくとも1個の仮想スレッドおよび(iii)待機列中に入っている仮想スレッドのリスト中に残っている少なくとも1個の仮想スレッド中のポインターを変更し、その後ミューテックスをリセットまたはリリースして待機列中に入っている仮想スレッドのリストへのアクセスを可能とすることを特徴とする請求項33に記載の方法。
- 各仮想スレッドがミューテックスを有しており、さらに選択された1個の仮想スレッドのミューテックスをセットし、ついで選択された仮想スレッド中のデータを変更し、その後ミューテックスをリセットまたはリリースして選択された仮想スレッドへのアクセスを可能とすることを特徴とする請求項31に記載の方法。
- ミューテックスのセットと、データの変更と、ミューテックスのリセットまたはリリースとがいずれかの仮想スレッドからのメッセージに反応して行われることを特徴とする請求項35に記載の方法。
- 各仮想スレッドがメッセージ列を割り当てられ、さらにいずれかの仮想スレッドに従ってタスクまたはジョブの実行間に選択された1個の仮想スレッドのメッセージ列中のメッセージに入ることを特徴とする請求項31に記載の方法。
- 仮想スレッドが通信リンクを介しての他のコンピューター上の第2のプロキシスレッドとの通信のための第1のプロキシスレッドを有しており、さらに第1のプロキシスレッドに応じてバイトコード命令を処理して、通信リンクを介して第2のプロキシスレッドにメッセージを送ることを特徴とする請求項31に記載の方法。
- 各仮想スレッドがスレッド優先順位を有しており、さらに複数の仮想スレッド中のスレッド優先順位を自動的に参照して相対優先順位を決定し、決定された相対優先順位に応じてスレッドの順序を変えることを特徴とする請求項31に記載の方法。
- タイムスロットまたは処理スロットが連続的に実行された翻訳用語命令を計数することにより測定され、さらに各タイムスライスまたは処理スロットについて、所定数の連続実行翻訳用語命令を計数したら、各タイムスロットまたは処理スロットを終了することを特徴とする請求項31に記載の方法。
- 多重スレッドまたはタスクの状態とコンテキストデータとを記憶するメモリーと、それぞれが多数の機械コードステップから構成される一連のバイトコード命令を実行するインタープリターとを有してなり、インタープリターが、コンピューターにより行われる各タスクについて各仮想スレッドを定め、一連の連続したタイムスライスの各タイムスライスの間仮想スレッドから選択された各現行のスレッドのバイトコード命令を実行し、あるバイトコード命令の実行後にのみある仮想スレッドから他の仮想スレッドへのコンテキストスイッチを実行するべくプログラムされていることを特徴とする多重タスクコンピューター。
- 各仮想スレッドが仮想スレッドの各リンクリストの一部であり、各仮想スレッドが各リンクリスト中の次の仮想スレッドへのポインターを有しており、インタープリターが、異なる仮想スレッド間の各コンテキストスイッチについて、現行実行仮想スレッドのポインターを参照して実行されるべき次の仮想スレッドの識別を決定するようにプログラムされていることを特徴とする請求項41に記載のコンピューター。
- 各リンクリストが仮想スレッドの複数のリンクリストのひとつであり、あるリンクリストは休止仮想スレッドのリストであり、他のリンクリストは稼動仮想スレッドのリストであり、さらに他のリンクリストは待機列中に入っている仮想スレッドのリストであり、インタープリターが少なくとも1個の仮想スレッドを待機列中に入っている仮想スレッドのリストから稼動仮想スレッドのリストへ周期的に動かすようにプログラムされていることを特徴とする請求項42に記載のコンピューター。
- コンピューターのタイマーをランさせて一連のタイムスライスまたは処理スロットを発生させ、入力ユーザーソースコードをそれぞれが複数の機械コード命令に対応するバイトまたは翻訳用語命令にコンパイルし、コンピューターのインタープリターを操作して計算タスクを各仮想スレッドに割り当てしかもその際に各計算タスクについて状態とコンテキストデータとを識別記憶し、各タイムスライスにおいて、インタープリターを操作して現行の仮想スレッドの状態とコンテキストデータとに従って選択された1個のバイトまたは翻訳用語命令を実行し、各選択されたバイトまたは翻訳用語命令の実行後においてのみ、インタープリターを操作していずれかの仮想スレッドに従っての命令実行の開始からの所定の間隔が経過したか否かをチェックし、所定間隔の経過の決定後、インタープリターを操作してコンテキストスイッチを行うことを特徴とするコンピューター方法。
- 各仮想プログラムスレッドに割り当てられたタスクが(a)ディスプレースクリーン上のイメージに現れたオブジェクトを制御し、(b)オペレーター入力をモニターし、(c)アプリケーションプログラムのルーチンを実行し、(d)コンピューター保守ルーチンをランさせ、(e)コンピューターネットワークを介して遠隔コンピューターとの通信を行いおよび(f)局所変数を計算することを含んでいることを特徴とする請求項44に記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/721,695 US7234139B1 (en) | 2000-11-24 | 2000-11-24 | Computer multi-tasking via virtual threading using an interpreter |
PCT/US2001/051441 WO2003007105A2 (en) | 2000-11-24 | 2001-10-26 | Computer multi-tasking via virtual threading |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004522234A JP2004522234A (ja) | 2004-07-22 |
JP4213582B2 true JP4213582B2 (ja) | 2009-01-21 |
Family
ID=24898939
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003512804A Expired - Fee Related JP4213582B2 (ja) | 2000-11-24 | 2001-10-26 | 仮想スレッドを介したコンピューター多重タスク |
Country Status (11)
Country | Link |
---|---|
US (1) | US7234139B1 (ja) |
EP (1) | EP1364284A4 (ja) |
JP (1) | JP4213582B2 (ja) |
CN (1) | CN1316357C (ja) |
AU (1) | AU2001297946B2 (ja) |
CA (1) | CA2429966A1 (ja) |
IL (2) | IL156075A0 (ja) |
MX (1) | MXPA03004581A (ja) |
NZ (1) | NZ526626A (ja) |
RU (1) | RU2286595C2 (ja) |
WO (1) | WO2003007105A2 (ja) |
Families Citing this family (69)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6824064B2 (en) | 2000-12-06 | 2004-11-30 | Mobile-Mind, Inc. | Concurrent communication with multiple applications on a smart card |
US7461148B1 (en) * | 2001-02-16 | 2008-12-02 | Swsoft Holdings, Ltd. | Virtual private server with isolation of system components |
US20050108711A1 (en) * | 2003-11-13 | 2005-05-19 | Infineon Technologies North America Corporation | Machine instruction for enhanced control of multiple virtual processor systems |
US9098340B2 (en) * | 2003-12-08 | 2015-08-04 | Teradata Us, Inc. | Virtual regulator for a database system |
US20050251804A1 (en) * | 2004-05-04 | 2005-11-10 | International Business Machines Corporation | Method, data processing system, and computer program product for detecting shared resource usage violations |
US7617497B1 (en) * | 2004-08-30 | 2009-11-10 | Sun Microsystems, Inc. | Method and system for creating and using storage threads |
US20060235927A1 (en) * | 2005-04-19 | 2006-10-19 | Bhakta Dharmesh N | System and method for synchronizing distributed data streams for automating real-time navigation through presentation slides |
US7730491B2 (en) * | 2005-08-30 | 2010-06-01 | Intel Corporation | Fair scalable reader-writer mutual exclusion |
RU2312388C2 (ru) * | 2005-09-22 | 2007-12-10 | Андрей Игоревич Ефимов | Способ организации многопроцессорной эвм |
JP4557949B2 (ja) * | 2006-04-10 | 2010-10-06 | 富士通株式会社 | 資源ブローカリングプログラム、該プログラムを記録した記録媒体、資源ブローカリング装置、および資源ブローカリング方法 |
RU2320002C2 (ru) * | 2006-04-18 | 2008-03-20 | Общество с ограниченной ответственностью "Юникор микросистемы" | Способ переключения контекста задач и процедур в процессоре |
CA2654423A1 (en) * | 2006-06-19 | 2007-12-27 | Diskeeper Corporation | Computer micro-jobs |
CN101098527B (zh) * | 2006-06-27 | 2012-06-13 | 雅斯拓(北京)智能卡科技有限公司 | 同时处理个人令牌中的数据传输会话的线程控制器 |
US7975272B2 (en) | 2006-12-30 | 2011-07-05 | Intel Corporation | Thread queuing method and apparatus |
US8321849B2 (en) * | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US8024731B1 (en) * | 2007-04-25 | 2011-09-20 | Apple Inc. | Assigning priorities to threads of execution |
US20080313647A1 (en) * | 2007-06-18 | 2008-12-18 | Microsoft Corporation | Thread virtualization techniques |
JPWO2009022371A1 (ja) | 2007-08-16 | 2010-11-04 | ネットクリアスシステムズ株式会社 | タスク処理装置 |
US20090100435A1 (en) * | 2007-10-11 | 2009-04-16 | Microsoft Corporation | Hierarchical reservation resource scheduling infrastructure |
US8539485B2 (en) * | 2007-11-20 | 2013-09-17 | Freescale Semiconductor, Inc. | Polling using reservation mechanism |
WO2009101563A1 (en) * | 2008-02-11 | 2009-08-20 | Nxp B.V. | Multiprocessing implementing a plurality of virtual processors |
US8561072B2 (en) * | 2008-05-16 | 2013-10-15 | Microsoft Corporation | Scheduling collections in a scheduler |
US8650570B2 (en) * | 2008-06-02 | 2014-02-11 | Microsoft Corporation | Method of assigning instructions in a process to a plurality of scheduler instances based on the instruction, in which each scheduler instance is allocated a set of negoitaited processor resources |
US9417914B2 (en) * | 2008-06-02 | 2016-08-16 | Microsoft Technology Licensing, Llc | Regaining control of a processing resource that executes an external execution context |
US8312230B2 (en) | 2008-06-06 | 2012-11-13 | International Business Machines Corporation | Dynamic control of partition memory affinity in a shared memory partition data processing system |
US9027027B2 (en) * | 2008-06-09 | 2015-05-05 | Microsoft Technology Licensing, Llc | Thread management based on device power state |
US7921195B2 (en) * | 2008-06-09 | 2011-04-05 | International Business Machines Corporation | Optimizing service processing based on business information, operational intelligence, and self-learning |
JP5330384B2 (ja) * | 2008-06-25 | 2013-10-30 | パナソニック株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
US8266394B2 (en) * | 2008-07-14 | 2012-09-11 | International Business Machines Corporation | Methods for single-owner multi-consumer work queues for repeatable tasks |
DE102009055752A1 (de) * | 2009-11-25 | 2011-05-26 | Robert Bosch Gmbh | Verfahren zum Ermöglichen einer sequentiellen, nicht blockierenden Abarbeitung von Anweisungen in nebenläufigen Tasks in einer Steuereinrichtung |
TWI486966B (zh) * | 2010-02-04 | 2015-06-01 | Phison Electronics Corp | 快閃記憶體儲存裝置、其控制器與寫入管理方法 |
CN101976208B (zh) * | 2010-10-25 | 2014-08-13 | 中兴通讯股份有限公司 | 信息投递的方法和装置 |
FR2969787B1 (fr) * | 2010-12-24 | 2013-01-18 | Morpho | Protection des applets |
US9218186B2 (en) * | 2011-09-01 | 2015-12-22 | International Business Machines Corporation | Software compiler generated threaded environment |
US9507638B2 (en) * | 2011-11-08 | 2016-11-29 | Nvidia Corporation | Compute work distribution reference counters |
FR2984554B1 (fr) * | 2011-12-16 | 2016-08-12 | Sagemcom Broadband Sas | Bus logiciel |
CN102567111B (zh) * | 2011-12-23 | 2017-10-27 | 融创天下(上海)科技发展有限公司 | 一种异步过程调用的方法、系统和终端设备 |
US9110878B2 (en) * | 2012-01-18 | 2015-08-18 | International Business Machines Corporation | Use of a warning track interruption facility by a program |
US9104508B2 (en) * | 2012-01-18 | 2015-08-11 | International Business Machines Corporation | Providing by one program to another program access to a warning track facility |
US9274819B2 (en) * | 2013-03-19 | 2016-03-01 | Hewlett Packard Enterprise Development Lp | Performing garbage collection using a virtual thread in operating system without kernel thread support |
RU2598988C2 (ru) * | 2013-08-07 | 2016-10-10 | Фиизер Инк. | Способы и системы для поиска прикладных программ |
CN103731356B (zh) * | 2013-12-09 | 2017-05-24 | 福建星网锐捷网络有限公司 | 报文处理方法及装置 |
CN103701709B (zh) * | 2013-12-13 | 2015-07-01 | 北京京东尚科信息技术有限公司 | 一种流量控制方法及系统 |
FR3015067B1 (fr) * | 2013-12-18 | 2017-03-17 | Krono Safe | Procede de composition et d'execution d'un plan de sequencement de taches temps-reel |
US9645980B1 (en) | 2014-03-19 | 2017-05-09 | Google Inc. | Verification of native applications for indexing |
US9921848B2 (en) * | 2014-03-27 | 2018-03-20 | International Business Machines Corporation | Address expansion and contraction in a multithreading computer system |
US9354883B2 (en) * | 2014-03-27 | 2016-05-31 | International Business Machines Corporation | Dynamic enablement of multithreading |
US9772867B2 (en) * | 2014-03-27 | 2017-09-26 | International Business Machines Corporation | Control area for managing multiple threads in a computer |
US9524347B1 (en) | 2014-04-01 | 2016-12-20 | Google Inc. | Automatically implementing an application in response to a search query |
US9513961B1 (en) * | 2014-04-02 | 2016-12-06 | Google Inc. | Monitoring application loading |
US9348646B1 (en) * | 2014-09-22 | 2016-05-24 | Amazon Technologies, Inc. | Reboot-initiated virtual machine instance migration |
US9552223B2 (en) * | 2014-09-30 | 2017-01-24 | International Business Machines Corporation | Post-return asynchronous code execution |
US9367344B2 (en) * | 2014-10-08 | 2016-06-14 | Cisco Technology, Inc. | Optimized assignments and/or generation virtual machine for reducer tasks |
US9684546B2 (en) * | 2014-12-16 | 2017-06-20 | Microsoft Technology Licensing, Llc | Job scheduling and monitoring in a distributed computing environment |
CN104598563B (zh) * | 2015-01-08 | 2018-09-04 | 北京京东尚科信息技术有限公司 | 高并发数据存储方法及装置 |
US10248463B2 (en) * | 2015-02-13 | 2019-04-02 | Honeywell International Inc. | Apparatus and method for managing a plurality of threads in an operating system |
JP6447217B2 (ja) * | 2015-02-17 | 2019-01-09 | 富士通株式会社 | 実行情報通知プログラム、情報処理装置および情報処理システム |
US10073714B2 (en) | 2015-03-11 | 2018-09-11 | Western Digital Technologies, Inc. | Task queues |
US9846589B2 (en) | 2015-06-04 | 2017-12-19 | Cisco Technology, Inc. | Virtual machine placement optimization with generalized organizational scenarios |
US10069949B2 (en) | 2016-10-14 | 2018-09-04 | Honeywell International Inc. | System and method for enabling detection of messages having previously transited network devices in support of loop detection |
US11150943B2 (en) * | 2017-04-10 | 2021-10-19 | Intel Corporation | Enabling a single context hardware system to operate as a multi-context system |
CN107678701A (zh) * | 2017-06-12 | 2018-02-09 | 平安科技(深圳)有限公司 | 单证打印的装置、方法及计算机可读存储介质 |
US10459751B2 (en) * | 2017-06-30 | 2019-10-29 | ATI Technologies ULC. | Varying firmware for virtualized device |
US10810086B2 (en) | 2017-10-19 | 2020-10-20 | Honeywell International Inc. | System and method for emulation of enhanced application module redundancy (EAM-R) |
US10783026B2 (en) | 2018-02-15 | 2020-09-22 | Honeywell International Inc. | Apparatus and method for detecting network problems on redundant token bus control network using traffic sensor |
CN108446147B (zh) * | 2018-03-23 | 2021-01-12 | 携程旅游网络技术(上海)有限公司 | 移动终端的多线程计算方法及系统 |
IL279479B2 (en) * | 2018-07-02 | 2024-09-01 | Drivenets Ltd | A system that implements multi-process uses |
US11210816B1 (en) * | 2018-08-28 | 2021-12-28 | Apple Inc. | Transitional effects in real-time rendering applications |
CN111324438B (zh) * | 2020-02-18 | 2023-09-19 | 北京嘀嘀无限科技发展有限公司 | 请求的调度方法、装置、存储介质及电子设备 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4744048A (en) * | 1985-10-09 | 1988-05-10 | American Telephone And Telegraph Company | Display context switching arrangement |
US6226789B1 (en) | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
US6766515B1 (en) * | 1997-02-18 | 2004-07-20 | Silicon Graphics, Inc. | Distributed scheduling of parallel jobs with no kernel-to-kernel communication |
US6269391B1 (en) | 1997-02-24 | 2001-07-31 | Novell, Inc. | Multi-processor scheduling kernel |
US5907702A (en) * | 1997-03-28 | 1999-05-25 | International Business Machines Corporation | Method and apparatus for decreasing thread switch latency in a multithread processor |
US6240440B1 (en) | 1997-06-30 | 2001-05-29 | Sun Microsystems Incorporated | Method and apparatus for implementing virtual threads |
US6233599B1 (en) * | 1997-07-10 | 2001-05-15 | International Business Machines Corporation | Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers |
US6282701B1 (en) | 1997-07-31 | 2001-08-28 | Mutek Solutions, Ltd. | System and method for monitoring and analyzing the execution of computer programs |
US6260150B1 (en) * | 1998-03-10 | 2001-07-10 | Agere Systems Guardian Corp. | Foreground and background context controller setting processor to power saving mode when all contexts are inactive |
US6141732A (en) | 1998-03-24 | 2000-10-31 | Novell, Inc. | Burst-loading of instructions into processor cache by execution of linked jump instructions embedded in cache line size blocks |
US6289446B1 (en) | 1998-09-29 | 2001-09-11 | Axis Ab | Exception handling utilizing call instruction with context information |
-
2000
- 2000-11-24 US US09/721,695 patent/US7234139B1/en not_active Expired - Fee Related
-
2001
- 2001-10-26 WO PCT/US2001/051441 patent/WO2003007105A2/en active IP Right Grant
- 2001-10-26 EP EP01274262A patent/EP1364284A4/en not_active Withdrawn
- 2001-10-26 AU AU2001297946A patent/AU2001297946B2/en not_active Expired - Fee Related
- 2001-10-26 IL IL15607501A patent/IL156075A0/xx active IP Right Grant
- 2001-10-26 JP JP2003512804A patent/JP4213582B2/ja not_active Expired - Fee Related
- 2001-10-26 NZ NZ526626A patent/NZ526626A/xx unknown
- 2001-10-26 CA CA002429966A patent/CA2429966A1/en not_active Abandoned
- 2001-10-26 MX MXPA03004581A patent/MXPA03004581A/es active IP Right Grant
- 2001-10-26 CN CNB018218555A patent/CN1316357C/zh not_active Expired - Fee Related
- 2001-10-26 RU RU2003118641/09A patent/RU2286595C2/ru active
-
2003
- 2003-05-22 IL IL156075A patent/IL156075A/en not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
EP1364284A4 (en) | 2007-07-11 |
NZ526626A (en) | 2004-12-24 |
CN1592886A (zh) | 2005-03-09 |
MXPA03004581A (es) | 2004-05-05 |
AU2001297946B2 (en) | 2006-11-30 |
WO2003007105A2 (en) | 2003-01-23 |
US7234139B1 (en) | 2007-06-19 |
JP2004522234A (ja) | 2004-07-22 |
IL156075A0 (en) | 2003-12-23 |
CA2429966A1 (en) | 2003-01-23 |
IL156075A (en) | 2008-06-05 |
EP1364284A2 (en) | 2003-11-26 |
RU2286595C2 (ru) | 2006-10-27 |
WO2003007105A3 (en) | 2003-09-12 |
CN1316357C (zh) | 2007-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4213582B2 (ja) | 仮想スレッドを介したコンピューター多重タスク | |
AU2001297946A1 (en) | Computer multi-tasking via virtual threading | |
US6560626B1 (en) | Thread interruption with minimal resource usage using an asynchronous procedure call | |
US5748959A (en) | Method of conducting asynchronous distributed collective operations | |
US6854114B1 (en) | Using a virtual machine instance as the basic unit of user execution in a server environment | |
US8161453B2 (en) | Method and apparatus for implementing task management of computer operations | |
EP1934737B1 (en) | Cell processor methods and apparatus | |
JP2829078B2 (ja) | プロセス分散方法 | |
US20040199927A1 (en) | Enhanced runtime hosting | |
EP0945797A2 (en) | Method and apparatus for object-oriented interrupt system | |
RU2003118641A (ru) | Реализация компьютерной многозадачности через виртуальную организацию поточной обработки | |
GB2273591A (en) | Microcomputer control systems for interprogram communication and scheduling methods | |
WO2019159616A1 (ja) | プログラム実行制御方法および車両制御装置 | |
US5862340A (en) | Method operating in each node of a computer system providing and utilizing special records for collective communication commands to increase work efficiency at each node | |
JPH06243112A (ja) | マルチプロセッサ装置 | |
CN112162840A (zh) | 一种基于中断重入机制的协程处理及管理方法 | |
CN109709900B (zh) | 数值控制装置 | |
AU2007200660B2 (en) | Computer Multi-Tasking via Virtual Threading | |
US9223637B1 (en) | Method and apparatus to advise spin and yield decisions | |
Locke et al. | Java technology comes to real-time applications | |
Troelsen et al. | Multithreaded, Parallel, and Async Programming | |
CN109308215B (zh) | 一种基于纤程的交互方法、交互系统及计算机装置 | |
Hamid et al. | Process Migration for Load Balancing and Fault Tolerance | |
Subramaniam | Using the Concert emulator | |
Dıaz et al. | On integrating posix signals into a real-time operating system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041015 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070130 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070424 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070424 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070508 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070529 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070605 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070619 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070626 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070727 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071218 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080310 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080317 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20081007 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20081030 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111107 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |