JP2866241B2 - コンピュータシステムおよびスケジューリング方法 - Google Patents

コンピュータシステムおよびスケジューリング方法

Info

Publication number
JP2866241B2
JP2866241B2 JP4015120A JP1512092A JP2866241B2 JP 2866241 B2 JP2866241 B2 JP 2866241B2 JP 4015120 A JP4015120 A JP 4015120A JP 1512092 A JP1512092 A JP 1512092A JP 2866241 B2 JP2866241 B2 JP 2866241B2
Authority
JP
Japan
Prior art keywords
lock
thread
threads
status variable
waiting
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
JP4015120A
Other languages
English (en)
Other versions
JPH05204675A (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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP4015120A priority Critical patent/JP2866241B2/ja
Priority to US08/011,142 priority patent/US5524247A/en
Publication of JPH05204675A publication Critical patent/JPH05204675A/ja
Application granted granted Critical
Publication of JP2866241B2 publication Critical patent/JP2866241B2/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
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】この発明はコンピュータシステム
におけるスケジューリング方式に関し、特に複数のスレ
ッドあるいはプロセス間の相互排除を共有変数を用いて
実現するコンピュータシステムにおいてそれら複数のス
レッドあるいはプロセスの処理順を決定するためのスケ
ジューリング方式に関する。
【0002】
【従来の技術】従来、コンピュータシステムにおいて、
オペレーティングシステムによって行われるスケジュー
リングは、各プロセス、各ユーザ間に、なるべく公平に
CPUタイムを割り振るような方針で行われていた。し
かし、近年、マルチプロセッサシステムが開発され、ス
レッドプログラミングを代表とする並行/並列プログラ
ミングが大きく取り上げられるに伴い、従来のスケジュ
ーリング方法では十分良い効率が得られないという問題
を生じ、新しいスケジューリング手法の開発が望まれて
いる。
【0003】まず、スレッドについて説明する。図10
には従来の典型的なオペレーティングシステム(例え
ば、Unix)におけるプロセスのメモリ空間の構成が
示されている。なお、図中の黒丸印は実行単位(CPU
割り当ての単位)を示す。
【0004】この図10に示すように、各プロセスは個
別のテキスト、データ、スタック空間を有し、互いに参
照し合うことはできない。プロセス間の通信、同期はシ
ステムコールを使わざるを得ず、オーバーヘッドが大き
い。この構成だと複数のプロセッサが協調して効率よく
1つの処理を行うようなプログラミングは困難である。
そこで考え出されたのがスレッドプログラミングであ
る。図11にスレッドのメモリ空間構成を示す。
【0005】スレッドは実行の単位であるが、複数のス
レッド間で同一のテキスト空間、データ空間、スタック
空間を共有することができる。このため、データ空間に
共有している変数を使うことにより、システムコールを
使わずに高速なスレッド間の通信および同期を実現で
き、マルチプロセッサシステムにおけるプログラミング
に適している。なお、同一空間を共有するスレッドをま
とめてタスクと呼ぶ。
【0006】また、同様な考え方で、図12に示されて
いるように、従来のプロセスに共有メモリを導入するこ
とも行われている。共有メモリは複数のプロセス間で共
有できる特別なデータ空間であり、やはりマルチプロセ
ッサシステムにおける高速なプロセス間通信、同期に利
用することができる。以降、スレッドに関して話を進め
るが、プロセス間の通信/同期に共有メモリを使う場合
についてもスレッドの場合と同様である。
【0007】一般的なスレッドプログラミングでは、複
数のスレッド間で共有する変数をスレッド間の同期(相
互排除)に用いる。以降、この様な変数を共有変数、あ
るいは、ロック変数と呼ぶ。
【0008】図13にその一例を示す。この図13で
は、タクス1のスレッド1、2、3、4が、ロック変数
Sを用いて、スレッド間で排他的に特定の処理を行って
いる。ロック変数Sの値が1の時は、ある1つのスレッ
ド(この図ではスレッド3)が排他的な処理を実行中で
あること(ロック状態)を示し、他のスレッド1、2、
4はその処理を実行することができない。
【0009】図14に、そのような排他制御を実現する
処理の流れをフローにして示す。図中、ステップS1,
S2,S3はロックを確保するときの処理の流れであ
り、ステップS4はロックを解除するときの処理の流れ
である。
【0010】ロック確保時のロック変数Sの参照、更新
は。テストアンドセット命令(test & set)
のように参照と変更が不可分に行われるプロセッサ命令
で行う必要がある。
【0011】テストアンドセット命令は、基本的には不
可分の単一機会命令として、指定されたロック変数から
値“0”を読み出した後、“1”の値をロック変数に書
き戻すものであり、最初に“0”(ロックがオフ)を受
け取るスレッドだけがロックを確保して処理を実行で
き、それ以外のスレッドはすべて“1”(ロックがオ
ン)を受け取ることにより実行を待たされる。この場
合、“1”を受け取った各スレッドは、ロック変数が
“0”になるまで繰り返しテストを行い、ロック解除さ
れまで待つ。この状態は、繁忙待機(busy wai
t)、またはスピンループと称されている。
【0012】このようにロック変数を用いて相互排除を
実現する方法はプログラミングが容易で、かつ確実にス
レッドの同期を取ることができる。しかし、複数のスレ
ッドが頻繁にロック変数による同期を行う際には実行効
率が悪化する場合がある。例えば、あるスレッドがロッ
クの解除を待ってスピンループしている途中で実行が止
まっていた(CPUが取り上げられていた)状態であ
り、かつそのスレッドが次の実行の候補に選ばれたとき
にロックがまだ解除されていないような場合、そのスレ
ッドを実行しても無駄にスピンループをするだけで実質
的に処理は進まない。このようなロック待ちでスピンル
ープしているスレッドを頻繁に選択し、実行するほどシ
ステム全体の効率は悪化する。
【0013】通常のオペレーティングシステムは、実行
中のスレッドを決められた時間(単位実行時間、タイム
クオンタムということがある)連続して実行したとき、
あるいは、そのスレッドがI/O待ちなどでそれ以上実
行を継続できなくなったときに、そのスレッドからCP
Uを取り上げ、スケジューリングを行い、次の実行時間
(CPU割り当て時間)において実行すべきスレッドを
新たに選び直す。
【0014】今、図13の状態でオペレーティングシス
テムが再スケジューリングして、次の実行時間に実行す
べきスレッドを、実行可能なスレッドの候補の中から選
択しようとしている場合を考える。
【0015】スレッド1〜4は全て実行可能な状態であ
り、この他に直接これら4つのスレッドと関係の無いス
レッドX、Y、Zがやはり同じように実行可能でスケジ
ュールの対象になっているとする。なお、話を簡単にす
るためこれら7つのスレッドの実行優先度はみな等しい
と仮定する。
【0016】この場合、オヘレーティングシステムのス
ケジューラはどのスレッドを実行することもできる。し
かし、次に実行すべきスレッドの選び方によっては、処
理効率は大きく異なってくる。
【0017】まず、シングルプロセッサシステム(CP
Uが1つ)の場合を考える。タスク1について考える
と、スレッド1、2、4が選択されても、これらはどれ
もロック待ちであるのでスピンループするだけである。
しかし、スレッド3を選択して実行した場合は、4つの
スレッド全体の効率がよい。すなわち、スレッド3の処
理が進めば、それだけ早く排他的な処理を終えることが
でき、ロックを解放し、他のスレッド1、2、4のいず
れかがそのロックを確保して排他的な処理を実行するこ
とができるからである。
【0018】あるいは、ロックと関係ない(この時点で
ロック待ちになっていない)スレッドX、Y、Zを実行
する場合も、CPUは有効に使用される。すなわち、こ
の場合の結論としては、
【0019】1)ロック待ちのスレッド1、2、4(分
類1)を選択するのはCPUの実行時間の浪費、2)ロ
ックを確保しているスレッド3(分類2)を実行する場
合は効率がよい、3)ロックとは関係の無いスレッド
X、Y、Z(分類3)を実行する場合もCPUを有効に
使える、ということがいえる。
【0020】しかしながら、従来の方法では、スケジュ
ーラはスレッドがロック待ちかどうか判断することがで
きないので、分類1,2,3のようにスレッドを区別す
ることができない。従って、通常は、スレッドの実行優
先度だけでスレッドを選んでしまうので、必ずしも分類
2、3に属すスレッドを選択することができず、ロック
待ちのスレッドを選んでしまう場合が生じる。
【0021】図15には、このようにロック待ちのスレ
ッドを選び効率悪くスレッドを実行する際のCPUの稼
働状態の一例を示す。ここでは、ロックをかけて処理す
る部分の時間を実行処理単位時間(以降Tと表す)のほ
ぼ1.5倍と仮定している。
【0022】時間t0 からTの期間中においてスレッド
3がロック状態である場合に、ロック待ちのスレッド
1,2,4の順でCPUを割り当てると、時間t1から
t4までの期間は処理は実行されず、スピンループによ
ってCPUが無駄に使用される。
【0023】そして、時間t4 からの期間Tにおいてス
レッド3のロック状態が解放されて初めて、スレッド1
は、次の時間t5 からの実行期間Tにおいてロックを確
保でき、排他的に処理を行うことができる。この図15
に示した範囲では、CPU使用率は半分以下であり、非
常に効率が悪い。マルチプロセッサシステムの場合も同
様の問題が生じる。やはりロック待ちのスレッドを選択
すると無駄なスピンループでCPUを消費する。
【0024】図16には、CPU1〜CPU4の4台の
CPU構成のマルチプロセッサシステムにおいて、効率
が悪いスレッド実行順序の一例が示されている。ロック
待ちのスレッド1,2,4は、ロック状態のスレッド3
の処理が進んでそのロックが解放されるまでスピンルー
プしている。このため、この例においても、図に示した
範囲でCPUの利用率は全体の約半分であり効率が悪
い。
【0025】上記2つの例とも極端に悪い例である。し
かし従来のUnixオペレーティングシステムのように
優先度に基づく多重レベルのラウンドロビンスケジュー
リングのみではこの様な現象が発生してしまい、システ
ム全体が無駄なスピンループにより効率が悪化するとい
う問題が生ずる。
【0026】なお、以上説明したスケージューリングの
問題は、スレッド間での排他制御処理の場合のみなら
ず、複数のプロセス間で共有メモリ上の同期変数を用い
て排他制御を行う場合でも全く同様に生じるものであ
る。
【0027】
【発明が解決しようとする課題】以上説明した様に、
来のスケジューリング方式では、スケジューラは、その
スレッドがロック待ちか、ロックを確保しているか、ロ
ックとは関係の無いものかを区別できない。そのため
に、通常は、スレッドの実行優先度だけでスレッドを選
んでしまうので、必ずしもロックを確保しているか、ロ
ックとは関係の無いものを選択できず、ロック待ちのス
レッドを選択して、スレッドの実行の効率が悪化し、
PUの実行時間が浪費される欠点があった。
【0028】この発明はこのような点に鑑みてなされた
ものであり、スケジューラ内に、実行候補として選択し
たスレッドあるいはプロセスが、ロックを必要としない
スレッドあるいはプロセスか否か、またはスレッドある
いはプロセスがロック待ち状態か否か、およびロック待
ち状態であればそのロック待ちの対象となっていた選択
したスレッドあるいはプロセスが属するタスク空間内の
スレッドあるいはプロセス間の排他制御に用いられるユ
ーザ空間上の共有変数のロックが既に開放されているか
否かを参照できる手段を設け、この手段に基づいてスケ
ジューリングを実行できるようにし、CPUの利用効率
を向上させることができるコンピュータシステムおよび
スケジューリング方法を提供することを目的とする。
【0029】
【課題を解決するための手段および作用】この発明は、
複数のスレッドあるいはプロセス間の相互排除を共有変
数を用いて実現するコンピュータシステムにおいて、
ペレーティングシステムのカーネル空間内に、複数のタ
スク内の複数のスレッドあるいはプロセスの処理順を所
定時間間隔で順次決定するスケジューリング手段を具備
し、前記複数のスレッドは、当該複数のスレッド毎に前
記カーネル空間内とは異なるタスク内のユーザ空間にあ
り当該タスク内のスレッドあるいはプロセス間の排他制
御に用いられる少なくとも一つのユーザ空間共有変数の
ロック待ち状態になる際のアドレスまたはロック待ち状
態ではない場合は所定の値とするステイタス変数を格納
するステイタス変数格納手段を具備し、前記スケジュー
リング手段は、前記複数のスレッド毎に対応する前記ス
テイタス変数を参照するステイタス変数ポインタを登録
し、前記ユーザ空間共有変数による実行許可判断が不要
のスレッドの場合は前記ステイタス変数ポインタを登録
しないステイタス変数ポインタ登録手段と、実行候補の
複数のスレッドあるいはプロセスの中から1つのスレッ
ドあるいはプロセスを選択する手段と、前記選択したス
レッドあるいはプロセスに対応するステイタス変数ポイ
ンタが前記ステイタス変数ポインタ登録手段に登録され
ているか否かを判別する手段と、前記選択したスレッド
あるいはプロセスに対応するステイタス変数ポインタが
登録されていた場合、当該選択したスレッドあるいはプ
ロセスがロック確保中であるか、ロック待ち状態である
かを当該ステイタス変数ポインタにより対応するステイ
タス変数を参照して判別する手段と、前記選択したスレ
ッドあるいはプロセスがロック待ち状態のときは、当該
選択したスレッドあるいはプロセスが属するタスク内の
当該選択したスレッドあるいはプロセスがロック待ちの
対象としている前記ユーザ空間共有変数を参照してその
ロック状態が既に解放されているか否かを判別する手段
とを具備し、ロックを必要としないスレッドあるいはプ
ロセス、またはロック確保中のスレッドあるいはプロセ
若しくはロック解除された前記ユーザ空間共有変数を
ロック待ちの対象としていたスレッドあるいはプロセス
に対してCPUが優先的に割り当てられるように前記複
数のスレッドあるいはプロセスの処理順を決定すること
を特徴とする。
【0030】このコンピュータシステムにおいては、実
行候補のスレッドあるいはプロセスの中で、ロックを必
要としないスレッドあるいはプロセス、またはロック待
ち状態に無いスレッドあるいはプロセス、つまりロック
確保中のスレッドあるいはプロセス若しくはロック解除
された実行候補のスレッドあるいはプロセスが属するタ
スク空間内のスレッドあるいはプロセス間の排他制御に
用いられるユーザ空間上の共有変数をロック待ちの対象
としていたスレッドあるいはプロセス、に対してCPU
が優先的に割り当てられるようにスケジューリングが行
われる。このため、ロック待ちによってスピンループし
ている無駄な時間が少なくなり、CPUの利用効率を向
上させることができる。
【0031】
【実施例】以下、図面を参照してこの発明の実施例を説
明する。
【0032】まず、図1を参照して、この発明の一実施
例に係わるスケジューリング方式の原理を説明する。オ
ペレーティングシステムのカーネル10内に存在するス
ケジューラ100は、排他制御下で実行処理される複数
のスレッドの処理順を決定するために、参照パス109
を介して、そのスレッドが属するタスク空間内のユーザ
空間上のロック変数106〜108を参照して次にCP
Uを割り当てる候補となった実行候補のスレッド(ここ
では、スレッド101〜105)がロック状態かロック
待ち状態かを調べ、その結果を実際にCPUをそのスレ
ッドに割り当てるか否かの判断に使う。以下、ロック変
数とは、そのスレッドが属するタスク空間内のユーザ空
間上のロック変数を指すものとする。
【0033】このため、ロックを確保しているスレッ
ド、または解除されたロック変数を待っていたスレッド
を優先的に選択し実行することが可能となる。従って、
従来のようにロック待ちのスレッドが頻繁に選択・実行
され、CPUが無駄に使用される事を避けることがで
き、システム全体として効率の良いCPU割り当てが実
現できる。図2には、スケジューラ100がロック変数
を参照するための具体的な構成の一例が示されている。
【0034】この実施例では、新たに2つのデータ構造
が用意されている。1つはタスク20の空間内の変数で
あり、ここでは「ステイタス変数」と呼ぶ。もう1つは
カーネル空間10内のデータであり、ここでは「ステイ
タス変数ポインタ」と呼ぶ。これらは、いずれもポイン
タ変数である。
【0035】ステイタス変数201,202はあらかじ
めスレッド101,102の空間に静的に宣言してお
き、スレッド101,102がロックを取れずロック待
ち状態になる際にそのロック変数106のアドレス(L
1)を格納する。また、ロック待ちでないとき、各スレ
ッド101,102は自分のステイタス変数201,2
02に“0”という値を入れておく。なお、ここでは、
ロック変数106,109,110のアドレスは“0”
以外の値になることが保証されていると仮定する。
【0036】ステイタス変数ポインタ301、302
は、生成されたスレッド101、102に対応してそれ
ぞれ用意される。但し、ロック変数を利用した実行許可
判断が不要であるスレッドの場合は、ステイタス変数ポ
インタは登録されない。各スレッド101、102は、
あらかじめこのステイタス変数ポインタ301、302
のフィールドに、自分のステイタス変数201、202
のアドレス(A、B)をセットする。また、このための
特別なシステムコールStatus−variable
declare( )を用意しており、ステイタス変
数201、202のアドレス(A、B)を引数に指定
し、このシステムコールを発行すればカーネル空間10
内のステイタス変数ポインタ301、302にそのアド
レス(A、B)がセットされるようになっている。
【0037】この例における各スレッド101,102
のステイタス変数201,202の初期化、および、オ
ペレーティングシステムのカーネル空間10に対する登
録は、図3のフローチャートのように行われる。ここで
は、C言語を用いて記述している。スレッドの数は10
個とし、ステイタス変数は10個用意するものとして、
説明する。まず、long status[10];
【0038】と配列でまとめて宣言し、ステイタス変数
[i]を“0”に初期化する(ステップS11,S1
2)。スレッド0のステイタス変数のアドレスはsta
tus[0]、スレッド1はstatus[1]、…
…、スレッド9はstatus[9]、と対応する。次
に、これらステイタス変数のアドレスをシステムコール
status−variable−declare(
)でカーネル10に通知し、それぞれのステイタス変
数ポインタにアドレスをセットする(ステップS1
3)。
【0039】この結果、図4に示すように、10個のス
レッド(スレッド0〜9)と、そのスレッドのステイタ
ス変数のアドレス(status[0]〜status
[9])を対応付けするテーブルがカーネル内に作られ
る。このテーブルは、図2のステイタス変数ポインタ3
01,302,…によって実現されるものにほかならな
い。
【0040】次に、図2の各スレッド101,102が
ロック変数106をアクセスする際の手順を図5のフロ
ーチャートで説明する。また、図6には、C言語でコー
ディングした例が示されている。但し、図6では、アド
レスL1のロック変数106はロックがかかっていない
時、値OK(=0)を示し、また、関数tas( )は
test & setを行う関数であり、戻り値がOK
の時は引数に指定したロック変数が取得できたことを示
している。
【0041】図5のフローチャートに示されているよう
に、各スレッド101、102は、アドレスL1のロッ
ク変数106の値からそのロック変数106がロックさ
れているか否かを調べ(ステップS21)、ロックされ
てなければ、自分のステイタス変数201、202に値
“0”を入れる(ステップS22)。次いで、スレッド
101、102は、test&set命令等によってロ
ック変数106のロック確保を試みる(ステップS2
3)。
【0042】ロック確保はいずれか1つのスレッドだけ
が可能であるので、ステップS24でロック確保を認識
したスレッド、例えばスレッド101は、ロック状態に
なり排他的に処理を実行する。また、ステップS24で
ロック確保出来なかったスレッド、例えばスレッド10
2は、自分のステイタス変数202にロック変数106
のアドレスL1を入れ(ステップS25)、そして、ス
テップS21に戻ってスピンループする。次に、図7の
フローチャートを参照して、スケジューラ100による
スケジューリングの際の処理手順を説明する。
【0043】まず、スケジューラ100は、通常のスケ
ジューリング手法により、例えば待ち行列にキューイン
グされている複数のスレッドの中から予め定められた優
先度にしたがって最も優先順位の高いスレッドを候補と
して1つ選ぶ(ステップS31)。
【0044】次に、スケジューラ100は、カーネル空
間10内にあるそのスレッドのステイタス変数ポインタ
を参照して、そのスレッドに対応するステイタス変数ポ
インタが登録されているか否かを調べる(ステップS3
2)。もし、登録されていなければ、ロック変数を利用
した実行許可判断が不要であると認識して、そのスレッ
ドにCPUを割り当てる(ステップS38)。一方、候
補として選ばれたスレッドに対応するステイタス変数ポ
インタが登録されていれば、ロック変数を利用した実行
許可判断を行うために、ステップS33〜S37の処理
に進む。
【0045】ここでは、スケジューラ100は、ステッ
プS31で実行候補として選んだスレッドに対応するス
テイタス変数ポインタを参照することによってそのスレ
ッドに対応するステイタス変数のアドレスを求め(この
際必要に応じて、アドレス値の正当性のチェック、論理
アドレスから物理アドレスへの変換、あるいは二次記憶
装置から主記憶へのページの転送、等を行い)、実行候
補のスレッドのステイタス変数に登録されている値を読
み取る(ステップS33)。
【0046】このときステイタス変数の値が“0”なら
ば(ステップS34)、その実行候補のスレッドはロッ
ク待ちの状態でないことが分かるので、スケジューラ1
00はステップS38に進んでCPUをそのスレッドに
割り当てて実行する。
【0047】また、もしステイタス変数の値が“0”で
ないときは(ステップS34)、このスレッドは前回実
行時にロック待ちであったことを意味している。この場
合は、ステイタス変数の値はそのスレッドが待っている
ロック変数のアドレスなので、スケジューラ100は、
そのスレッドが属すタスク空間内のロック変数を直接参
照し(この際も必要に応じて、アドレス値の正当性のチ
ェック、論理アドレスから物理アドレスへの変換、ある
いは二次記憶装置から主記憶へのページの転送、等を行
い)、ロックが解除されているかどうかを判断する(ス
テップS35,36)。
【0048】この時点でロックが解除されていれば(ロ
ック変数=“0”)、スケジューラ100はステップS
38に進んでCPUをそのスレッドに割り当てて実行す
る。一方、ロックが解除されていなければ(ロック変数
=“1”)、このスレッドの実行を見送り、次の候補と
して他のスレッドを選択する(ステップS37)。この
手順を実行スレッドが決まるまで繰り返す。
【0049】このようにして、ロック変数の値を参照し
てスケジューリングを行うことにより、ロック待ちのプ
ロセスを選び無駄にCPU時間を消費することを避ける
ことができる。
【0050】図8、図9には、このような手順でスケジ
ューリングを行った場合のCPUの稼働状況の一例が示
されている。図8はシングルプロセッサシステムの場合
に相当し、また図9は4台のCPUから成るマルチプロ
セッサシステムの場合に相当するものである。
【0051】また、これら図8、図9では、図13で前
述したようにスレッド3がロック状態であり、スレッド
1,2,4がロック待ち状態で、さらにスレッドX,
Y,Zがロックに関係しない場合を想定している。
【0052】図8の例では、時間t0 からTの期間中に
おいてスレッド3がロック状態である場合に、そのロッ
ク状態のスレッド3に対して優先的に次の実行期間(時
間t0 からTの期間)にCPUが割り当てられ、その期
間Tにおいてスレッド3のロックが解除されると、その
ロック解除を待っていたスレッド1にCPUが割り当て
られる。図9のマルチプロセッサシステムの場合も同様
にして、ロック状態のスレッドS3、またはロックに関
係しないスレッドY,Y,Zが優先的に実行される。
【0053】このようにロック待ちでないスレッドにC
PUを割り当てることによって、CPU利用率は100
パーセントになり、無駄なスピンループを大幅に減少す
ることができる。
【0054】以上のように、この実施例においては、ス
ケジューラ100がスケジューリングの際に、必要に応
じて実行候補のスレッドに対応するロック変数を参照
し、そのスレッドがすぐにロックを確保できるかどうか
を調べ、CPUを割り当てるか否かの判断の参考とす
る。この結果、ロック待ち状態にないスレッド、つまり
解除されたロック変数を待っていたスレッド、またはロ
ック状態のスレッド、を優先的に選んで実行できるの
で、スピンループによるCPUタイムの無駄な消費が少
なくなり、効率よい処理が実現できる。
【0055】尚、ここでは、複数のスレッド間の相互排
除を共有変数を用いて実現するシステムについてのみ説
明したが、この発明によるスケジューリングは、図12
に示したような共有メモリを持ち複数のプロセス間の相
互排除を共有変数を用いて実現するシステムについても
同様に適用できる。
【0056】また、この実施例では、図9に示すよう
に、ロックされているロック変数を待っている状態のス
レッドは選択していない。しかし、マルチプロセッサシ
ステムにおいて、プロセッサ数が多く、スケジューリン
グ時にプロセッサが余っている場合や、ロックをかけて
いるスレッドがすでに実行中である(従って比較的早く
ロックが解除される見込みがある)場合には、ロック解
除されていないロック変数を待つスレッドにCPUを割
り当てるようなスケジューリング方針も有効である。こ
の様なスケジューリングも本発明を適用することにより
実現することができる。
【0057】
【発明の効果】以上述べたように、この発明によれば、
スレッドまたはプロセスがロック待ち状態か否かに基づ
いてスケジューリングを実行できるようになり、CPU
の利用効率を向上させることができる。
【図面の簡単な説明】
【図1】この発明の一実施例に係わるスケジューリング
方式の原理を示すブロック図。
【図2】同実施例の具体的構成の一例を示すブロック
図。
【図3】同実施例におけるステイタス変数の初期化/登
録動作を説明するフローチャート。
【図4】同実施例におけるスケジューラで管理されるス
レッドとステイタス変数との対応関係を示すテーブルを
示す図。
【図5】同実施例におけるロック確保のための動作を説
明するフローチャート。
【図6】図5のフローチャートをC言語で記述した際の
プログラム文を示す図。
【図7】同実施例におけるスケジューリング動作を説明
するフローチャート。
【図8】同実施例におけるスケジューリング動作をシン
グロプロセッサシステムで実行した際のCPUの稼働状
況を示す図。
【図9】同実施例におけるスケジューリング動作をマル
チプロセッサシステムで実行した際のCPUの稼働状況
を示す図。
【図10】通常のプロセスのメモリ空間を示す図。
【図11】通常のスレッドのメモリ空間を示す図。
【図12】通常の共有メモリを持つプロセスのメモリ空
間を示す図。
【図13】従来のスケジューリング方式を説明するため
のブロック図。
【図14】従来のスケジューリング方式が適用されるシ
ステム内での排他制御の動作手順を説明するフローチャ
ート。
【図15】従来のスケジューリング方式をシングルプロ
セッサシステムで実行した際のCPUの稼働状況を示す
図。
【図16】従来のスケジューリング方式をマルチプロセ
ッサシステムで実行した際のCPUの稼働状況を示す
図。
【符号の説明】
10…カーネル空間、21,22…タスク、100…ス
ケジューラ、101〜105…スレッド、106〜10
8,109,110…ロック変数、201,202…ス
テイタス変数、301,302…ステイタス変数ポイン
タ。
───────────────────────────────────────────────────── フロントページの続き (58)調査した分野(Int.Cl.6,DB名) G06F 9/46,15/16

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】 複数のスレッドあるいはプロセス間の相
    互排除を共有変数を用いて実現するコンピュータシステ
    ムにおいて、オペレーティングシステムのカーネル空間内に、複数の
    タスク内の 複数のスレッドあるいはプロセスの処理順を
    所定時間間隔で順次決定するスケジューリング手段を具
    備し、前記複数のスレッドは、当該複数のスレッド毎に前記カ
    ーネル空間内とは異なるタスク内のユーザ空間にあり当
    該タスク内のスレッドあるいはプロセス間の排他制御に
    用いられる少なくとも一つのユーザ空間共有変数のロッ
    ク待ち状態になる際のアドレスまたはロック待ち状態で
    はない場合は所定の値とするステイタス変数を格納する
    ステイタス変数格納手段を具備し、 前記スケジューリング手段は、前記複数のスレッド毎に対応する前記ステイタス変数を
    参照するステイタス変数ポインタを登録し、前記ユーザ
    空間共有変数による実行許可判断が不要のスレッドの場
    合は前記ステイタス変数ポインタを登録しないステイタ
    ス変数ポインタ登録手段と、 実候補の複数のスレッドあるいはプロセスの中から1つ
    のスレッドあるいはプロセスを選択する手段と、前記選択したスレッドあるいはプロセスに対応するステ
    イタス変数ポインタが前記ステイタス変数ポインタ登録
    手段に登録されているか否かを判別する手段と、 前記選択したスレッドあるいはプロセスに対応するステ
    イタス変数ポインタが登録されていた場合、当該選択し
    たスレッドあるいはプロセスがロック確保中であるか、
    ロック待ち状態であるかを当該ステイタス変数ポインタ
    により対応するステイタス変数を参照して判別する手段
    と、 前記選択したスレッドあるいはプロセスがロック待ち状
    態のときは、当該選択したスレッドあるいはプロセスが
    属するタスク内の当該選択したスレッドあるいはプロセ
    スがロック待ちの対象としている前記ユーザ空間共有変
    数を参照してそのロック状態が既に解放されているか否
    かを判別する手段とを具備し、ロックを必要としないスレッドあるいはプロセス、また
    ロック確保中のスレッドあるいはプロセス若しくは
    ック解除された前記ユーザ空間共有変数をロック待ちの
    対象としていたスレッドあるいはプロセスに対してCP
    Uが優先的に割り当てられるように前記複数のスレッド
    あるいはプロセスの処理順を決定することを特徴とする
    コンピュータシステム。
  2. 【請求項2】 複数のスレッドあるいはプロセス間の相
    互排除を共有変数を用いて実現するコンピュータシステ
    ムにおいてオペレーティングシステムのカーネル空間内
    で、複数のタスク内の複数のスレッドあるいはプロセス
    の処理順を所定時間間隔で順次決定するスケジューリン
    グ方法であって、前記複数のスレッドは、当該複数のスレッド毎に前記カ
    ーネル空間内とは異なるタスク内のユーザ空間にあり当
    該タスク内のスレッドあるいはプロセス間の排他制御に
    用いられる少なくとも一つのユーザ空間共有変数のロッ
    ク待ち状態になる際のアドレスまたはロック待ち状態で
    はない場合は所定の値とするステイタス変数を格納し、 前記オペレーティングシステムのカーネル空間内では、 前記複数のスレッド毎に対応する前記ステイタス変数を
    参照するステイタス変数ポインタを登録し、前記ユーザ
    空間共有変数による実行許可判断が不要のスレッドの場
    合は前記ステイタス変数ポインタを登録せず、 実行候補の複数のスレッドあるいはプロセスの中から1
    つのスレッドあるいはプロセスを選択し、前記選択したスレッドあるいはプロセスに対応するステ
    イタス変数ポインタが前記ステイタス変数ポインタ登録
    手段に登録されているか否かを判別する手段と、 前記選択したスレッドあるいはプロセスに対応するステ
    イタス変数ポインタが登録されていた場合、当該選択し
    たスレッドあるいはプロセスがロック確保中であるか、
    ロック待ち状態であるかを当該ステイタス変数ポインタ
    により対応するステイタス変数を参照して判別し、 前記選択したスレッドあるいはプロセスがロック待ち状
    態のときは、当該選択したスレッドあるいはプロセスが
    属するタスク内の当該選択したスレッドあるい はプロセ
    スがロック待ちの対象としている前記ユーザ空間共有変
    数を参照してそのロック状態が既に解放されているか否
    かを判別し、ロックを必要としないスレッドあるいはプロセス、また
    ロック確保中のスレッドあるいはプロセス若しくは
    ック解除された前記ユーザ空間共有変数をロック待ちの
    対象としていたスレッドあるいはプロセスに対してCP
    Uが優先的に割り当てられるように前記複数のスレッド
    あるいはプロセスの処理順を決定することを特徴とする
    スケジューリング方法。
JP4015120A 1992-01-30 1992-01-30 コンピュータシステムおよびスケジューリング方法 Expired - Fee Related JP2866241B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP4015120A JP2866241B2 (ja) 1992-01-30 1992-01-30 コンピュータシステムおよびスケジューリング方法
US08/011,142 US5524247A (en) 1992-01-30 1993-01-29 System for scheduling programming units to a resource based on status variables indicating a lock or lock-wait state thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP4015120A JP2866241B2 (ja) 1992-01-30 1992-01-30 コンピュータシステムおよびスケジューリング方法

Publications (2)

Publication Number Publication Date
JPH05204675A JPH05204675A (ja) 1993-08-13
JP2866241B2 true JP2866241B2 (ja) 1999-03-08

Family

ID=11879967

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4015120A Expired - Fee Related JP2866241B2 (ja) 1992-01-30 1992-01-30 コンピュータシステムおよびスケジューリング方法

Country Status (2)

Country Link
US (1) US5524247A (ja)
JP (1) JP2866241B2 (ja)

Families Citing this family (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0784851A (ja) * 1993-09-13 1995-03-31 Toshiba Corp 共有データ管理方法
US5715395A (en) * 1994-09-12 1998-02-03 International Business Machines Corporation Method and apparatus for reducing network resource location traffic in a network
JP3231571B2 (ja) * 1994-12-20 2001-11-26 日本電気株式会社 順序付きマルチスレッド実行方法とその実行装置
US5822588A (en) * 1995-06-09 1998-10-13 Sun Microsystem, Inc. System and method for checking the use of synchronization locks in a multi-threaded target program
US5796954A (en) * 1995-10-13 1998-08-18 Apple Computer, Inc. Method and system for maximizing the use of threads in a file server for processing network requests
US6192388B1 (en) * 1996-06-20 2001-02-20 Avid Technology, Inc. Detecting available computers to participate in computationally complex distributed processing problem
US6289410B1 (en) * 1996-07-18 2001-09-11 Electronic Data Systems Corporation Method and system for maintaining consistency of shared objects based upon instance variable locking
US5887166A (en) * 1996-12-16 1999-03-23 International Business Machines Corporation Method and system for constructing a program including a navigation instruction
US6223204B1 (en) * 1996-12-18 2001-04-24 Sun Microsystems, Inc. User level adaptive thread blocking
US6073159A (en) * 1996-12-31 2000-06-06 Compaq Computer Corporation Thread properties attribute vector based thread selection in multithreading processor
US6418460B1 (en) * 1997-02-18 2002-07-09 Silicon Graphics, Inc. System and method for finding preempted threads in a multi-threaded application
US6026427A (en) * 1997-11-21 2000-02-15 Nishihara; Kazunori Condition variable to synchronize high level communication between processing threads
US6947987B2 (en) * 1998-05-29 2005-09-20 Ncr Corporation Method and apparatus for allocating network resources and changing the allocation based on dynamic workload changes
US6622155B1 (en) 1998-11-24 2003-09-16 Sun Microsystems, Inc. Distributed monitor concurrency control
US6295611B1 (en) 1998-12-14 2001-09-25 Sun Microsystems, Inc.. Method and system for software recovery
US6874144B1 (en) 1999-04-05 2005-03-29 International Business Machines Corporation System, method, and program for implementing priority inheritance in an operating system
US7483967B2 (en) * 1999-09-01 2009-01-27 Ximeta Technology, Inc. Scalable server architecture based on asymmetric 3-way TCP
US6493741B1 (en) 1999-10-01 2002-12-10 Compaq Information Technologies Group, L.P. Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit
US6810422B1 (en) 2000-01-14 2004-10-26 Lockheed Martin Tactical Defense Systems System and method for probabilistic quality of communication service determination
US6671795B1 (en) * 2000-01-21 2003-12-30 Intel Corporation Method and apparatus for pausing execution in a processor or the like
US7792923B2 (en) * 2000-10-13 2010-09-07 Zhe Khi Pak Disk system adapted to be directly attached to network
WO2002071218A2 (en) * 2001-03-05 2002-09-12 Koninklijke Philips Electronics N.V. Method of and system for withdrawing budget from a blocking task
US7783761B2 (en) * 2001-07-16 2010-08-24 Zhe Khi Pak Scheme for dynamically connecting I/O devices through network
US20050149682A1 (en) * 2001-10-09 2005-07-07 Han-Gyoo Kim Virtual multiple removable media jukebox
US7363474B2 (en) * 2001-12-31 2008-04-22 Intel Corporation Method and apparatus for suspending execution of a thread until a specified memory access occurs
JP3813930B2 (ja) 2002-01-09 2006-08-23 松下電器産業株式会社 プロセッサ及びプログラム実行方法
US7831974B2 (en) * 2002-11-12 2010-11-09 Intel Corporation Method and apparatus for serialized mutual exclusion
JP4750350B2 (ja) 2003-03-13 2011-08-17 パナソニック株式会社 タスク切換装置、方法及びプログラム
US7278141B2 (en) * 2003-04-23 2007-10-02 International Business Machines Corporation System and method for adding priority change value corresponding with a lock to a thread during lock processing
US7457880B1 (en) * 2003-09-26 2008-11-25 Ximeta Technology, Inc. System using a single host to receive and redirect all file access commands for shared data storage device from other hosts on a network
CA2442800A1 (en) * 2003-09-26 2005-03-26 Ibm Canada Limited - Ibm Canada Limitee Transforming locks in software loops
US7664836B2 (en) * 2004-02-17 2010-02-16 Zhe Khi Pak Device and method for booting an operation system for a computer from a passive directly attached network device
US20050193017A1 (en) * 2004-02-19 2005-09-01 Han-Gyoo Kim Portable multimedia player/recorder that accesses data contents from and writes to networked device
US20060069884A1 (en) * 2004-02-27 2006-03-30 Han-Gyoo Kim Universal network to device bridge chip that enables network directly attached device
GB2412761C (en) * 2004-04-02 2011-01-05 Nokia Corp Improvements in or relating to an operating system for a computing device
US7496918B1 (en) * 2004-06-01 2009-02-24 Sun Microsystems, Inc. System and methods for deadlock detection
US8046760B2 (en) * 2004-07-09 2011-10-25 Hewlett-Packard Development Company, L.P. Lock contention pinpointing
US7746900B2 (en) * 2004-07-22 2010-06-29 Zhe Khi Pak Low-level communication layers and device employing same
US7860943B2 (en) * 2004-08-23 2010-12-28 Zhe Khi Pak Enhanced network direct attached storage controller
US20060067356A1 (en) * 2004-08-23 2006-03-30 Han-Gyoo Kim Method and apparatus for network direct attached storage
US20060075404A1 (en) * 2004-10-06 2006-04-06 Daniela Rosu Method and system for scheduling user-level I/O threads
US7849257B1 (en) 2005-01-06 2010-12-07 Zhe Khi Pak Method and apparatus for storing and retrieving data
US20070011687A1 (en) * 2005-07-08 2007-01-11 Microsoft Corporation Inter-process message passing
US7823158B2 (en) * 2005-08-18 2010-10-26 International Business Machines Corporation Adaptive scheduling and management of work processing in a target context in resource contention
US7831960B2 (en) * 2006-06-08 2010-11-09 Oracle America, Inc. Configuration tool with multi-level priority semantic
US7818722B2 (en) * 2006-06-09 2010-10-19 International Business Machines Corporation Computer implemented method and system for accurate, efficient and adaptive calling context profiling
US20090063881A1 (en) * 2007-08-31 2009-03-05 Mips Technologies, Inc. Low-overhead/power-saving processor synchronization mechanism, and applications thereof
TWI462011B (zh) * 2007-12-28 2014-11-21 Accton Technology Corp 程序之執行緒群組管理方法
JP4857325B2 (ja) * 2008-10-31 2012-01-18 パナソニック株式会社 タスク切換装置、方法及びプログラム
JP2010113574A (ja) * 2008-11-07 2010-05-20 Panasonic Corp マルチプロセッサにおける資源の排他制御方法、排他制御システムおよびその関連技術
JP2010140290A (ja) * 2008-12-12 2010-06-24 Panasonic Corp マルチプロセッサシステム及びその排他制御の調停方法
US9086922B2 (en) 2009-10-26 2015-07-21 Microsoft Technology Licensing, Llc Opportunistically scheduling and adjusting time slices
EP2850555B1 (en) * 2012-05-16 2022-11-30 Nokia Technologies Oy Method in a processor, an apparatus and a computer program product
JP5990139B2 (ja) * 2013-08-01 2016-09-07 日本電信電話株式会社 実行制御装置及び実行制御方法
US10203995B2 (en) * 2013-11-22 2019-02-12 Excalibur Ip, Llc Method or system for access to shared resource
JP6443125B2 (ja) * 2015-02-25 2018-12-26 富士通株式会社 コンパイラプログラム、コンピュータプログラム及びコンパイラ装置
US10705875B2 (en) 2017-08-09 2020-07-07 Servicenow, Inc. Systems and methods for recomputing services
JP7014010B2 (ja) * 2018-03-30 2022-02-01 日本電気株式会社 ジョブ実行管理システム、およびジョブ実行管理方法
JP7360194B2 (ja) * 2021-05-19 2023-10-12 株式会社ユニバーサルエンターテインメント 遊技機
JP7345878B2 (ja) * 2021-05-19 2023-09-19 株式会社ユニバーサルエンターテインメント 遊技機
JP7345879B2 (ja) * 2021-05-19 2023-09-19 株式会社ユニバーサルエンターテインメント 遊技機
JP7270280B2 (ja) * 2021-05-19 2023-05-10 株式会社ユニバーサルエンターテインメント 遊技機
JP7270281B2 (ja) * 2021-05-19 2023-05-10 株式会社ユニバーサルエンターテインメント 遊技機
JP7345877B2 (ja) * 2021-05-19 2023-09-19 株式会社ユニバーサルエンターテインメント 遊技機
JP7345880B2 (ja) * 2021-05-19 2023-09-19 株式会社ユニバーサルエンターテインメント 遊技機
JP7270282B2 (ja) * 2021-05-19 2023-05-10 株式会社ユニバーサルエンターテインメント 遊技機
JP7345881B2 (ja) * 2021-05-19 2023-09-19 株式会社ユニバーサルエンターテインメント 遊技機

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5422738A (en) * 1977-07-21 1979-02-20 Nec Corp Lock control device
US4989133A (en) * 1984-11-30 1991-01-29 Inmos Limited System for executing, scheduling, and selectively linking time dependent processes based upon scheduling time thereof
JPH07120299B2 (ja) * 1986-01-10 1995-12-20 株式会社日立製作所 マルチプロセッサシステムの試験方法
US5274809A (en) * 1988-05-26 1993-12-28 Hitachi, Ltd. Task execution control method for a multiprocessor system with enhanced post/wait procedure
JP2650965B2 (ja) * 1988-05-27 1997-09-10 株式会社日立製作所 計算機システムおよびそのタスクスケジュール方法
JPH02204838A (ja) * 1989-02-03 1990-08-14 Hitachi Ltd タスク優先順位管理方式
JPH031244A (ja) * 1989-05-29 1991-01-07 Nec Corp タスクディスパッチ方式
JPH0365732A (ja) * 1989-08-03 1991-03-20 Matsushita Electric Ind Co Ltd 資源管理方法
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling

Also Published As

Publication number Publication date
US5524247A (en) 1996-06-04
JPH05204675A (ja) 1993-08-13

Similar Documents

Publication Publication Date Title
JP2866241B2 (ja) コンピュータシステムおよびスケジューリング方法
US10241831B2 (en) Dynamic co-scheduling of hardware contexts for parallel runtime systems on shared machines
US4779194A (en) Event allocation mechanism for a large data processing system
US6269391B1 (en) Multi-processor scheduling kernel
US5485626A (en) Architectural enhancements for parallel computer systems utilizing encapsulation of queuing allowing small grain processing
US5333319A (en) Virtual storage data processor with enhanced dispatching priority allocation of CPU resources
US4796178A (en) Special purpose processor for off-loading many operating system functions in a large data processing system
US6622155B1 (en) Distributed monitor concurrency control
JP2829078B2 (ja) プロセス分散方法
US5452459A (en) Method and apparatus for allocating server access in a distributed computing environment
US5586318A (en) Method and system for managing ownership of a released synchronization mechanism
US5010482A (en) Multi-event mechanism for queuing happened events for a large data processing system
KR20120042654A (ko) 누마-어웨어 시스템 태스크 매니지먼트 방법 및 장치
JP2005284749A (ja) 並列処理コンピュータ
JPH1115793A (ja) 資源の保全性を保護する方法
US6662364B1 (en) System and method for reducing synchronization overhead in multithreaded code
WO2012036791A1 (en) Run-time parallelization of computer software using data associated tokens
Takada et al. A novel approach to multiprogrammed multiprocessor synchronization for real-time kernels
EP0362903B1 (en) A special purpose processor for off-loading many operating system functions in a large data processing system
Michael et al. Relative performance of preemption-safe locking and non-blocking synchronization on multiprogrammed shared memory multiprocessors
US11301304B2 (en) Method and apparatus for managing kernel services in multi-core system
US6701429B1 (en) System and method of start-up in efficient way for multi-processor systems based on returned identification information read from pre-determined memory location
JP7346649B2 (ja) 同期制御システムおよび同期制御方法
JP2804478B2 (ja) タスク制御方式及びオンライン・トランザクション・システム
Wani Operating System

Legal Events

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

Free format text: PAYMENT UNTIL: 20071218

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081218

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091218

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091218

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101218

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101218

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111218

Year of fee payment: 13

LAPS Cancellation because of no payment of annual fees