JP3724075B2 - プロセスの実行方法 - Google Patents
プロセスの実行方法 Download PDFInfo
- Publication number
- JP3724075B2 JP3724075B2 JP22640496A JP22640496A JP3724075B2 JP 3724075 B2 JP3724075 B2 JP 3724075B2 JP 22640496 A JP22640496 A JP 22640496A JP 22640496 A JP22640496 A JP 22640496A JP 3724075 B2 JP3724075 B2 JP 3724075B2
- Authority
- JP
- Japan
- Prior art keywords
- prohibition
- function
- abort
- processing
- preemption
- 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 - Lifetime
Links
Images
Description
【発明の属する技術分野】
本発明は計算機を制御するオペレーティング・システムにおけるプロセスの実行方法に係り、特に、マルチプロセシング環境を提供するオペレーティング・システムにおける共有資源を使用するプロセスの実行方法に関する。
【0002】
【従来の技術】
複数のプロセス(またはタスク)を時分割で並列に実行するマルチプロセシング環境を提供するオペレーティング・システムでは、プロセス間で共有する資源(共有資源)が複数のプロセスに同時に割り当てられないように排他制御を行ないながらプロセスを実行する必要がある。この排他制御を実現するために、オペレーティング・システム(OS)においてロック制御と呼ばれる手法が広く使用されている。
【0003】
ロック制御では、共有資源毎に対応する共有資源が使用中であることを示すフラグを設ける。プロセスが共有資源に対する処理を行う際には、このフラグが他のプロセスによりセットされているかを調べる。そして、他のプロセスによりフラグがセットされた状態でなければ、このプロセスによりフラグをセットして資源を占有する(これを「ロック」すると言う)。そして、この共有資源に対する処理の終了とともにプロセスがフラグをリセットして資源を解放する(これを「アンロック」すると言う)。一方、他のプロセスによりフラグがセットされた状態ならば、OSはこの共有資源がアンロックされるまで、このプロセスを待ち状態にする。
【0004】
ところで、並列に実行される優先度の低いプロセス1と優先度の高いプロセス2が存在し、二つのプロセスが共有する資源Aがあるとする。いま、プロセス1がCPU占有中に共有資源Aをロックし、共有資源Aをロックしたまま休眠状態に入ったとする。この場合、CPUの使用権が割り当てられたプロセス2が共有資源Aを使用しようとしても、共有資源Aが他のプロセスによりロックされているため、プロセス2は共有資源Aを使用できない。このためプロセス2は、実行継続不能となる。
【0005】
このように優先度の低いプロセスが獲得しているロックのために、優先度の高いプロセスが実行継続不能となることを優先度逆転問題という。従来のオペレーティング・システムでは、優先度逆転問題が発生した場合は、ロックを取ったまま休眠している優先度の低いプロセスを最優先で実行させることにより、優先度の低いプロセスが獲得している資源を解放させ、優先度の高いプロセスをできるだけ早く実行できるようにしている。
【0006】
【発明が解決しようとする課題】
連続メディア処理では、動画データなどのデータを処理するプロセスの動作に周期性が生ずる。この性質を利用したプロセス・スケジューリング方法を特願平8−73673で提供した。
【0007】
しかし、優先度逆転問題は周期性を利用したプロセス・スケジューリング方法に対しても悪影響を及ぼす。例えば、連続メディア処理を行うプロセス1、プロセス2が存在し、二つのプロセスの間で共有する資源Aがあるとする。プロセス1とプロセス2がこの共有資源Aをロックを使って排他制御する場合、優先度逆転問題を発生させる可能性があり、発生すればプロセスの周期駆動性を損なうことになる。
【0008】
更に問題なのは、優先度逆転問題が発生すると、その原因となったロックを持っているプロセスが最優先にスケジュールされるため、そのロックとは関係なく連続メディア処理を行っている別のプロセスの周期駆動性にまで影響を与えることである。
【0009】
そこで、連続メディア処理を行うシステムでは、優先度逆転問題を回避するために最初から一切ロックを用いずに計算機システムを構築する方法が考えられる。そのような計算機システムにおいて排他制御を行う方法として、共有資源使用中はプロセスにCPUを占有させる、すなわち、共有資源使用中は他のプロセスがスケジューリングされないプロセス制御方法が考えられる。これは、特願平8−97997の発明で提供したプリエンプト制御方法を使用することで実現可能である。プリエンプト制御方法とは、実行中プロセスの実行が一時中断される(これを「プリエンプト」されると言う)ことを防ぐために「プリエンプト禁止」及び「プリエンプト禁止解除」のインタフェースを用意し、プリエンプト禁止にされてからプリエンプト禁止が解除されるまでの間(これを「プリエンプト禁止区間」と呼ぶ)は他のプロセスのスケジューリング要求が発行されても、実行中プロセスはプリエンプトされずに実行を続ける方法である。このような制御を行うことによって、共有資源を使用しているプロセスは常に1個であることが保証できるため、排他制御が実現できる。
【0010】
しかし、この方法では共有資源使用中のプロセス走行区間が長時間に渡る場合には他のプロセスの周期駆動性を損なってしまう。
【0011】
例えば、システム内で共有している使用可能な資源をキューイングするフリーリストから資源を取り出し、これを初期化して、あるプロセスの資源割当てリストに繋ぐ処理を考える。ここで排他制御が必要な共有資源となるのは、フリーリストと資源割当てリストである。
【0012】
この処理をプリエンプト禁止区間の設定だけで行う場合、プリエンプト禁止区間は「フリーリストに触る前」から「資源割当てリストに資源を繋ぎおわる」まで設定する必要がある。すなわち、
(1)プリエンプト禁止の設定を行う
(2)フリーリストから資源を取り出す
(3)資源の初期化を行う
(4)資源をプロセスの資源割当てリストに繋ぐ
(5)プリエンプト禁止の設定を解除する
となる。ここで、資源の初期化に要する時間は短いとは限らない。実際、オペレーティング・システム内でメモリを割り当てる際のメモリの初期化等では数十msを要する。そのような場合に上記の様にプリエンプト禁止区間の設定だけで排他制御を行うと、一つのプロセスが長時間CPUを占有することになる。この結果、リアルタイム応答性が悪くなり、連続メディア処理の周期駆動性に影響を与えることになる。
【0013】
そこで、上記処理を
(1)プリエンプト禁止の設定を行う
(2)フリーリストから資源を取り出す
(3)プリエンプト禁止の設定を解除する
(4)資源の初期化を行う
(5)プリエンプト禁止の設定を行う
(6)資源をプロセスの資源割当てリストに繋ぐ
(7)プリエンプト禁止の設定を解除する
という形に変更することが考えられる。このようにすれば、排他制御という点でのみ見れば、必要条件を満たしている。しかも、プリエンプト禁止区間の長さは10μs程度に抑えられ、(4)の処理中はCPU使用権を他のプロセスに移すことができるので、リアルタイム応答性が良くなる。ところが、(4)の処理をしている途中に、この処理を行っているプロセスが外部から強制終了させられた場合に問題が生ずる。
【0014】
一般の計算機システムでは、プログラムの暴走に備えて、外部からプロセスを強制的に停止・消滅させる機能を備えている。この機能を使って上記処理を行っているプロセスが他のプロセス等から強制終了させられた場合、(4)で初期化している資源がどの管理リストにも属さない所属不明の資源となる可能性がある。この結果、オペレーティング・システムがプロセスを消滅させる際に資源の回収ができず、その資源は永久に使用できなくなる可能性がある。これを回避するためには、フリーリスト、あるいは資源割り当てリストに資源を繋いだ状態で資源を初期化する方法が考えられるが、この方法では、前の例の処理全体をプリエンプト禁止区間で覆う方法とプリエンプト禁止区間の長さがほとんど変わらなくなる。別の方法として、初期化中の資源を管理するリストを別に用意し、(4)の処理中はこのリストに繋ぐ方法もあるが、リストの繋ぎ換え処理が多くなるため、初期化処理のオーバヘッドが大きくなる。
【0015】
また、共有資源獲得のために必要な時間を短時間に抑えることができない場合にも、上記の方法は使用できない。
【0016】
そこで本発明者は、プリエンプト制御方法を利用して、連続メディア処理の周期駆動性に影響を与えずに共有資源の処理を行うことができるプロセス実行方法を発明した。
【0017】
したがって、本発明の目的は連続メディア処理を行う計算機システムの共有資源を使用するプロセスの実行方法を提供することにある。
【0018】
【課題を解決するための手段】
本発明では、プロセスが共有資源を使用する際には、予め自プロセスが強制終了させられない(これを「アボート」されないと言い、アボートされないようにすることを「アボート禁止」にすると言う)ように宣言を行う。その上で,自プロセスの処理が中断されないように「プリエンプト禁止」にする。そして、共有資源の使用が終了した際にはプリエンプト禁止の解除を行う。共有資源に対するすべての処理が終了したら、自プロセスが強制終了させられてもよい(これを「アボート禁止解除」と呼ぶ)ことを宣言する。このアボート禁止を宣言してからアボート禁止解除を宣言するまでのプロセスが強制終了させられない区間のことをアボート禁止区間と呼び、このアボート禁止区間内に当該プロセスの強制終了要求が入った場合は、アボート禁止区間が終了するまでプロセスの実行を継続し、アボート禁止解除が行われた時点で、当該プロセスを強制終了させる。
【0019】
また、共有資源の使用時間が長い場合については、システム内にその処理を専門に行うプロセスを1個だけ用意し、更に、そのプロセスに要求を送るためのキューを用意する。そして、他の連続メディア処理を行うプロセスは、周期駆動を開始する前に専用プロセスに処理を依頼し、共有資源への処理が完了した後、周期駆動に入る。処理要求は先のキューに入れる。専用プロセス内では、共有資源に対する処理を行うプロセスがシステム内で1個であることが保証されるため、プリエンプト可能状態のまま共有資源に対する処理を行うことができ、周期駆動プロセスと並行して動作することができる。
【0020】
これら二つのプロセス実行方法を組み合わせることで、複数のプロセスが並列に動作するマルチプロセシング環境において、他の周期駆動を行っているプロセスに影響を与えずに、共有資源を使用する複数のプロセスを実行させることが可能となる。
【0021】
【発明の実施の形態】
以下、本発明の実施形態を詳細に説明する。
【0022】
本発明に必要なモジュール群及びデータを図1に示す。
【0023】
図1において、10はプロセスを管理するためのテーブルであり、この中にアボート要求フラグ11、アボート禁止フラグ12、アボート禁止のネストをカウントするためのカウンタ13を保持している。また、20はプロセスを管理するプロセス管理部、21はアボート禁止を行うためのインタフェース関数、22はアボート禁止を解除にするためのインタフェース関数であり、200は共有資源の処理を必要としているプロセスである。なお、プロセス200内の共用資源を使用する関数40は作業領域23及び37を保持している。更に、30は特願平8−97997に基づくプリエンプト制御部であり、スケジューラ31、プリエンプト禁止関数32、プリエンプト禁止解除関数33、スケジューリング要求フラグ34、プリエンプト禁止フラグ35、プリエンプト禁止のネストをカウントするためのカウンタ36を保持している。
【0024】
本発明を実現するためのプロセス内のアボート禁止、プリエンプト禁止の制御の流れを図2に示す。共有資源に関わる処理を行う場合、その処理を行うプロセス200内の関数40は最初にアボート禁止関数21を用いて自プロセスをアボート禁止にする(101)。そして、共有資源を使用する直前に自プロセスをプリエンプト禁止部30内のプリエンプト禁止関数32を用いてプリエンプト禁止にし(102)、共有資源を利用する処理に入る(103)。共有資源に対する処理を終了したら、直ちにプリエンプト禁止部30内のプリエンプト禁止解除関数33を用いてプリエンプト禁止を解除する(104)。ここで、プリエンプト禁止から禁止解除までの間(102〜104)のプリエンプト禁止区間が設定できるのは、周期駆動性に影響を与えない時間、例えば周期駆動を管理する最小単位時間の10%以下の時間で終了する共有資源への処理に限られる。次のプリエンプト禁止を宣言するまでの間はプリエンプト可能状態で、割り当て資源に対する初期化等、処理に長い時間を必要とする処理を行う(105)。この間は他のプロセスがスケジュールされ、プロセス200の実行が一時中断されてもよい。そして再び共有資源への処理が必要になった場合は、再度プロセス200は自プロセスをプリエンプト禁止状態にする(106)。そして、共有資源への処理(107)を行った後、プリエンプト禁止を解除する(108)。すべての処理が終了したら最後にアボート禁止解除関数22を使ってアボート禁止を解除する(109)。
【0025】
図2の例では、アボート禁止からアボート禁止解除までの間に2回のプリエンプト禁止区間が存在するが、実際に存在するプリエンプト禁止区間の数は3個以上でもよい。
【0026】
図3は図2におけるアボート禁止の手続き101の内部処理を詳細に示したフローチャートである。図3の処理は図1に示したアボート禁止関数21が行う。まず、アボート禁止関数21は、プロセス200を管理しているプロセス管理テーブル10内のアボート禁止フラグ12がOFFの状態かどうかを調べる(120)。アボート禁止フラグ12がOFFであるならば、これをONにする(121)。その後、カウンタ13の値を1上げる(122)。図3の処理は、全体を不可分に行う。
【0027】
図4は図2におけるプリエンプト禁止の手続き102及び106の内部処理を詳細に示したフローチャートである。図4の処理は図1に示したプリエンプト禁止関数31が行う。まず、プリエンプト禁止関数31は、プリエンプト制御部30内のプリエンプト禁止フラグ35がOFFの状態かどうかを調べる(130)。アボート禁止フラグ35がOFFであるならば、これをONにする(131)。その後、カウンタ36の値を1上げる(132)。図4の処理は、全体を不可分に行う。
【0028】
図5は図2におけるプリエンプト禁止解除の手続き104及び108の内部処理を詳細に示したフローチャートである。図5の処理は図1に示したプリエンプト禁止解除関数32が行う。まず、プリエンプト禁止解除関数32は、第1引数で渡される関数のネストの値(後述)がカウンタ36の値と一致してるか非かを調べる(140)。もし、一致していないければ異常処理を行う。一致している場合は、プリエンプト制御部30内のカウンタ36の値を1減らす(141)。その結果、カウンタ36の値が正の値ならば、そのまま処理を終了する(142)。0又は負の値になったならば、プリエンプト禁止フラグをOFFにする(143)。次に、プリエンプト制御部30内のスケジューリング要求フラグ34を調べる(144)。OFFならば処理を終了する。ONならばスケジューラ31を起動し(145)、プロセスのスケジューリング処理に入る。
【0029】
図6は図2におけるアボート禁止解除の手続き109の内部処理を詳細に示したフローチャートである。図6の処理は図1に示したアボート禁止解除関数22が行う。まずアボート禁止解除関数22は、第1引数で渡される関数のネストの値(後述)がカウンタ13の値と一致してるか非かを調べる(150)。もし、一致していないければ異常処理を行う。一致している場合は、プロセス200を管理しているプロセス管理テーブル10内のカウンタ13の値を1減らす(151)。その結果、カウンタ13の値が正の値ならば、そのまま処理を終了する(152)。0又は負の値になったならば、アボート禁止フラグをOFFにする(153)。次に、プロセス管理テーブル10内のアボート要求フラグ11を調べる(154)。OFFならば処理を終了する。ONならばプロセス管理部20が起動し、プロセス200のアボート処理に入る(155)。
【0030】
また、図6において、アボート要求フラグ11がOFFの状態で処理が終了した場合、プロセス管理部20はプリエンプト禁止部30内のスケジューラ31を起動し、プロセスの再スケジューリングを行う。
【0031】
図1において、アボート禁止フラグ12がONになっている間、すなわち、アボート禁止関数21が呼び出されてアボート禁止フラグ12がONにされてから、アボート禁止解除関数22が呼び出されてアボート禁止フラグ12がOFFにされるまでの間がアボート禁止区間となる。アボート禁止フラグ12はプロセス生成時にはOFFになっており、アボート禁止関数21が呼び出されることによって初めてONになる。プロセス200がアボート禁止関数21を呼び出してアボート禁止フラグ12をONにした後、アボート禁止区間内、すなわち、アボート禁止フラグ12がONになっている間にプロセス200の強制終了が発生した場合、プロセス管理部20はアボート要求フラグ11をONにする処理だけを行い、プロセス200の処理は続行させる。そして、プロセス200がアボート禁止解除関数22を呼び出してアボート禁止フラグをOFFにした時に、プロセス200の強制終了を行う。
【0032】
また、図1において、プリエンプト禁止フラグ35がONになっている間、すなわち、プリエンプト禁止関数32が呼び出されてプリエンプト禁止フラグ35がONにされてから、プリエンプト禁止解除関数33が呼び出されてプリエンプト禁止フラグ35がOFFにされるまでの間がプリエンプト禁止区間となる。プリエンプト禁止フラグ35はシステム起動時にはOFFになっており、プリエンプト禁止関数32が呼び出されることによって初めてONになる。プロセス200がプリエンプト禁止関数32を呼び出してプリエンプト禁止フラグをONにした後、プリエンプト禁止フラグ35がONになっている間に他のプロセスへのスケジューリング要求が発生した場合、スケジューラ31はスケジューリング要求フラグ34をONにする処理だけを行い、他のプロセスのスケジューリングは行わず、プロセス200の処理を続行させる。そして、プロセス200がプリエンプト禁止解除関数33を呼び出してプリエンプト禁止フラグ35をOFFにした時に、スケジューラ31はスケジューリング要求フラグをOFFにし、プロセス200の実行を中断させ、他のプロセスをスケジュールする。
【0033】
図2において、102〜104及び106〜108の間はプリエンプト禁止区間となり、CPU使用権が他のプロセスへ移ることはないので、共有資源を使用するのは走行中のプロセスだけとなる。したがって、他のプロセスが共有資源を使用することはなく、資源の排他処理が実現でき、共有資源を使用する連続メディア処理のマルチプロセシングを行うことができる。また、101〜109の間はアボート禁止区間となるため、強制終了によってプロセスが資源を獲得したまま消滅し、資源が永久に使用不能になることもない。
【0034】
アボート禁止、アボート禁止解除は、それぞれ以下のインタフェースにより行う。
【0035】
<関数名>
abort_disable(*level)
<引数>
level:本関数と関数abort_enableで形成される対のネストの深さが返される。
【0036】
<説明>
本関数は、実行中のプロセスをアボート禁止状態に遷移させる。本関数を発行してアボート禁止状態に遷移してから関数abort_enalbeを発行してアボート可能状態に復帰するまでの区間で、本関数と関数abort_enableを対にして発行してもよい。すなわち、本関数と関数abort_enableの対はネスト可能である。ネストの内側で発行される本関数と関数abort_enableでは、アボート禁止状態とアボート可能状態との間の状態遷移は行わない。引数levelには、このネストの深さが返る。
【0037】
<関数名>
abort_enable(level)
<引数>
level:本関数と対になる関数abort_disableが返したネスト・レベルを指定する。
【0038】
<説明>
本関数は、実行中のプロセスをアボート可能状態に復帰させる。関数abort_disableを発行してアボート禁止状態に遷移してから本関数を発行してアボート可能状態に復帰するまでの区間で、関数abort_disableと本関数を対にして発行してもよい。すなわち、関数abort_disableと本関数の対はネスト可能である。ネストの内側で発行される関数abort_disableと本関数では、アボート禁止状態とアボート可能状態との間の状態遷移は行わない。引数levelには、このネストの深さ、すなわち対となる関数abort_disableの発行により得られたlevelの値を指定する。オペレーティング・システム側でもこの値を保持しており、引数で指定されたネストの深さと一致しない場合、エラーリターンする。
【0039】
プロセス200内の関数40がアボート禁止関数21を使用する際には、アボート禁止関数21より返される現在のネストの深さを自関数内の作業領域23に格納する。そして、アボート禁止解除関数22を発行する際に、その作業領域に格納されている値を同関数の引数として指定する。アボート禁止解除関数では、この値と現在のネストの深さを比較し、両者が一致しない場合はエラーリターンする。この機能により、アボート禁止関数と対になるべきアボート禁止解除関数が存在しないというプログラムミスを容易に検出することができる。
【0040】
また、プリエンプト禁止、プリエンプト禁止解除の処理は、特願平8−97997において発明されているプリエンプト禁止、プリエンプト禁止解除のインタフェースを使用して行う。すなわち、次のインタフェースを使用する。
【0041】
<関数名>
preempt_disable(*level )
<引数>
level:本関数と関数 preempt_enable で形成される対のネストの深さが返される。
【0042】
<説明>
本関数は実行中タスクをプリエンプト禁止状態に遷移させる。本関数を発行しプリエンプト禁止状態に遷移してから、関数 preempt_enable を発行してプリエンプト可能状態に復帰するまでの区間で、本関数と関数preempt_enableを対にして発行しても良い。すなわち、本関数と関数 preempt_enable の対はネスト可能である。ネストの内側で発行される本関数と関数 preempt_enable は、プリエンプト禁止状態とプリエンプト可能状態との間の状態遷移は行なわない。level には、このネストの深さが返る。
【0043】
<関数名>
preempt_enable(level)
<引数>
level:本関数と対となる関数 preempt_disable が返したネスト・レベルを指定する。
【0044】
<説明>
本関数は実行中タスクをプリエンプト可能状態に復帰させる。関数 preempt_disable を発行しプリエンプト禁止状態に遷移してから、本関数を発行してプリエンプト可能状態に復帰するまでの区間で、関数 preempt_disable と本関数を対にして発行しても良い。すなわち、関数 preempt_disable と本関数の対はネスト可能である。ネストの内側で発行される関数 preempt_disable と本関数は、プリエンプト禁止状態とプリエンプト可能状態との間の状態遷移は行なわない。level には、このネストの深さ、すなわち対となる関数 preempt_enable の発行により得られた level の値を指定する。カーネルもこのネストの深さを保持しており、引数で指定されたネストの深さと一致しない場合には、エラーリターンする。
【0045】
プロセス200内の関数40がプリエンプト禁止関数31を使用する際には、プリエンプト禁止関数31より返される現在のネストの深さを自関数内の作業領域37に格納する。そして、プリエンプト禁止解除関数32を発行する際に、その作業領域に格納されている値を同関数の引数として指定する。プリエンプト禁止解除関数では、この値と現在のネストの深さを比較し、両者が一致しない場合はエラーリターンする。この機能により、プリエンプト禁止関数と対になるべきプリエンプト禁止解除関数が存在しないというプログラムミスを容易に検出することができる。
【0046】
次に、共有資源の使用時間が長い場合の、共有資源を使用するプロセスの実行方法の実施形態について説明する。
【0047】
このプロセス実行方法の実施形態では、周期駆動を行うプロセスは、周期駆動開始前の周期駆動を行っていない状態の時に、次に説明するプロセス実行方法を用いて必要な資源の獲得等を行い、その処理が完了した後、自プロセスの周期駆動を開始する。周期駆動開始後は、次に説明するプロセス実行方法では資源の獲得は行わない。
【0048】
本発明に必要なモジュール群を図7に示す。
【0049】
図7において210〜212は共有資源を使用したいプロセスであり、220は特定の共有資源に処理を行うことができる唯一のプロセスである。このプロセスを以下逐次化プロセスと呼ぶ。逐次化プロセス220はシステム内に常駐している。300はプロセス210〜212の処理要求を逐次化プロセス220に通知するための処理要求通知部であり、逐次化プロセス220に対してただ1個だけ存在し、逐次化プロセス220と同様常にシステム内に常駐している。310〜312はプロセス220からの処理完了通知をプロセス210〜212に通知するための処理完了通知部であり、プロセス210〜212の生成時、または処理要求の発生時に割り当てられる。処理要求通知部300及び処理完了通知部310〜312はそれぞれ内部に待ち行列400、410〜412を持っている。
【0050】
次に、図7の処理を図8〜11のフローチャートを使って説明する。
【0051】
図8は、共有資源に対する処理を必要とするプロセス210〜212の処理を説明したフローチャートである。プロセス210〜212はその共有資源に処理を行うことができるプロセス220に処理を要求するため、処理要求通知部300に処理要求の通知を行う(160)。通知終了後、通知を行ったプロセス210〜212は直ちに処理完了受理待ちになる(161)。処理完了通知部310〜312から処理完了が通知されたら(161)、処理完了通知部310〜312内の待ち行列410〜412から処理終了通知を受理し(162)、共有資源に対する処理を終了する。
【0052】
図9は、処理要求通知部300の処理を説明したフローチャートである。処理要求通知部300は常に処理要求通知の受信待ちになっている(171)。そして、処理要求の通知を受け取ったら(170)、受け付け順に処理要求を待ち行列400に入れ(171)、処理要求が発生したことをプロセス220に通知する(172)。
【0053】
図10は、共有資源に処理を行うことができる逐次化プロセス220の処理を説明したフローチャートである。逐次化プロセス220も処理要求通知部300と同様、常に処理要求通知の受信待ちになっている(180)。処理要求通知部300から処理要求発生の通知を受けると(180)、処理要求通知部300内の待ち行列400から処理要求を受理し(181)、要求に応じた共有資源に対する処理を行う(182)。処理終了後、プロセス220は処理を要求したプロセス210〜212の処理完了通知部310〜312に処理完了及び処理結果の通知を行う(183)。逐次化プロセス220は、次の要求が通知されているかを調べ、通知されている場合は次の要求処理を行う。通知がない場合は次の要求受理待ちになる(180)。
【0054】
図11は、処理完了通知部310〜312の処理を説明したフローチャートである。処理完了通知部310〜312は、プロセス210〜212が処理要求を発行したと同時に完了通知受信待ちになる(190)。そして、逐次化プロセス220から処理完了を受信したら(190)、受理した処理完了通知と処理結果を待ち行列410〜412に入れ(191)、プロセス210〜212に処理完了を通知する(192)。
【0055】
図7の例では、共有資源の処理を要求するプロセスが3個であったが、2個以下または4個以上の場合でも処理は同じである。
【0056】
図7における逐次化プロセス220は常にプリエンプト可能状態のまま動作する。
【0057】
また、プロセス210〜212は、上記の処理(図8)を周期駆動開始前、すなわち、周期駆動に関係のない状態の時に行い、上記処理の完了によって資源の獲得等が完了した後、周期駆動を開始させる。
【0058】
上記のような逐次化プロセスによるプロセス実行方法を用いると、共有資源に直接処理を行うプロセスが逐次化プロセスただ1個であるため、共有資源の排他制御を行う必要がない。また、共有資源に対する処理を専用の独立したプリエンプト可能なプロセスが行うため、他の連続メディア処理を行うプロセスの周期駆動性に影響を与えないプロセス実行が可能である。
【0059】
【発明の効果】
以上述べたように、本発明によれば、共有資源を使用するマルチプロセシングの環境において、連続メディア処理等を行うプロセスの周期駆動性に影響を与えずに、プロセス間で共有資源を使用できる。
【図面の簡単な説明】
【図1】本発明に関わるモジュール群、及びデータの構成図である。
【図2】図1の実施例の処理手順を示すフローチャートである。
【図3】図1におけるアボート禁止関数21の処理手順を示すフローチャートである。
【図4】図1におけるプリエンプト禁止関数31の処理手順を示すフローチャートである。
【図5】図1におけるプリエンプト禁止解除関数32の処理手順を示すフローチャートである。
【図6】図1におけるアボート禁止解除関数22の処理手順を示すフローチャートである。
【図7】他の実施形態に関わるモジュール群の構成図である。
【図8】図7におけるプロセス210〜212の処理手順を示すフローチャートである。
【図9】図7における処理要求通知部300の処理手順を示すフローチャートである。
【図10】図7における逐次化スレッド220の処理手順を示すフローチャートである。
【図11】図7における処理完了通知部310〜312の処理手順を示すフローチャートである。
【符号の説明】
10……プロセス管理テーブル、11……アボート要求フラグ、12……アボート禁止フラグ、20……プロセス管理部、21……アボート禁止関数、22……アボート禁止解除関数、30……プリエンプト制御部、31……スケジューラ、32……プリエンプト禁止関数、33……プリエンプト禁止解除関数、34……スケジューリング要求フラグ、35……プリエンプト禁止フラグ、220……逐次化プロセス
Claims (2)
- 複数のプロセスが並列に動作する計算機システムにおいて、1つの共有資源を獲得し、当該資源を操作し、当該資源を解放する前記複数の中の1つのプロセスの実行方法において、
前記1つのプロセスをアボート禁止にするとともにプリエンプト禁止にした後、当該プロセスが使用する前記共有資源を獲得し、
当該プロセスのプリエンプト禁止を解除するとともに前記共有資源の操作を行なった後、当該プロセスをプリエンプト禁止にし、
当該プロセスが前記共有資源を解放した後、当該プロセスのプリエンプト禁止を解除するとともにアボート禁止を解除し、さらに、
アボート禁止中に発生した当該プロセスの強制終了要求をアボート禁止解除後の実行することを特徴とするプロセスの実行方法。 - 請求項1記載のプロセスの実行方法において、
前記共有資源の操作を要求するプロセスのキューを設け、
前記共有資源に対する処理を要求する前記キューの先頭のプロセスをマルチプロセシング環境で実行し、
前記プロセスの実行完了後、当該プロセスに関する処理を周期的に駆動し、前記キューに登録されたプロセスを順次実行することを特徴とするプロセスの実行方法。
Priority Applications (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP22640496A JP3724075B2 (ja) | 1996-08-28 | 1996-08-28 | プロセスの実行方法 |
CA002213371A CA2213371C (en) | 1996-08-28 | 1997-08-20 | Process executing method and resource accessing method in computer system |
EP97114394A EP0834806B1 (en) | 1996-08-28 | 1997-08-20 | Process executing method and resource accessing method in computer system |
DE69738646T DE69738646T2 (de) | 1996-08-28 | 1997-08-20 | Verfahren zur Ausführung eines Prozesses und Betriebsmittelzugriffsverfahren in einem Computer-System |
US08/917,477 US6253225B1 (en) | 1996-08-28 | 1997-08-26 | Process executing method and resource accessing method in computer system |
US09/838,767 US6848102B2 (en) | 1996-08-28 | 2001-04-20 | Process executing method and resource accessing method in computer system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP22640496A JP3724075B2 (ja) | 1996-08-28 | 1996-08-28 | プロセスの実行方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH1069392A JPH1069392A (ja) | 1998-03-10 |
JP3724075B2 true JP3724075B2 (ja) | 2005-12-07 |
Family
ID=16844596
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP22640496A Expired - Lifetime JP3724075B2 (ja) | 1996-08-28 | 1996-08-28 | プロセスの実行方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3724075B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7191443B2 (en) | 2001-01-25 | 2007-03-13 | Matsushita Electric Industrial Co., Ltd. | Digital device, task management method and program therefor |
US20060168214A1 (en) * | 2004-10-29 | 2006-07-27 | International Business Machines Corporation | System for managing logical partition preemption |
-
1996
- 1996-08-28 JP JP22640496A patent/JP3724075B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JPH1069392A (ja) | 1998-03-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2650965B2 (ja) | 計算機システムおよびそのタスクスケジュール方法 | |
JP2866241B2 (ja) | コンピュータシステムおよびスケジューリング方法 | |
EP1942413B1 (en) | Multi-Tasking Method According to Simple Priority Inheritance Scheme and Embedded System Therefor | |
JP2514299B2 (ja) | プロセスレベルプログラミングのための割込み処理の直列化方法 | |
Brandenburg | Multiprocessor real-time locking protocols | |
Yang et al. | Global real-time semaphore protocols: A survey, unified analysis, and comparison | |
US8572626B2 (en) | Symmetric multi-processor system | |
JPH11327931A (ja) | セマフォ操作を実行する方法及び装置 | |
US8413163B2 (en) | Program control device including per-timeslot switching of thread execution | |
CA2245976A1 (en) | Symmetric multi-processor system and method | |
EP2664989A1 (en) | Task scheduling | |
JP3717951B2 (ja) | デッドロック回避システムおよび方法 | |
US9792419B2 (en) | Starvationless kernel-aware distributed scheduling of software licenses | |
JP3724075B2 (ja) | プロセスの実行方法 | |
JPH0468461A (ja) | 資源管理方式 | |
JPH11212810A (ja) | タイム・クアンタム共有方法および装置 | |
Rajkumar et al. | An optimal priority inheritance policy for synchronization in real-time systems | |
JPS6321941B2 (ja) | ||
JPH07319716A (ja) | 計算機システムの資源の排他制御方式 | |
Bordoloi | Scheduling with shared resources | |
Dimitoglou | Deadlocks and methods for their detection, prevention and recovery in modern operating systems | |
JP2023091314A (ja) | 半導体装置、半導体装置の制御方法及びプログラム | |
Lin et al. | Ada 2012: resource sharing and multiprocessors | |
Raxmonova et al. | Analysis of scheduling algorithms in operating systems | |
JPH03235130A (ja) | 排他優先制御方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20041108 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041221 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050221 |
|
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: 20050830 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050912 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080930 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090930 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090930 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100930 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100930 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110930 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120930 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120930 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130930 Year of fee payment: 8 |
|
EXPY | Cancellation because of completion of term |