JP2535631B2 - Calling call control method - Google Patents
Calling call control methodInfo
- Publication number
- JP2535631B2 JP2535631B2 JP1312988A JP31298889A JP2535631B2 JP 2535631 B2 JP2535631 B2 JP 2535631B2 JP 1312988 A JP1312988 A JP 1312988A JP 31298889 A JP31298889 A JP 31298889A JP 2535631 B2 JP2535631 B2 JP 2535631B2
- Authority
- JP
- Japan
- Prior art keywords
- coroutine
- request
- serialization
- module
- identifier
- 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
Description
【発明の詳細な説明】 〔概要〕 複数のコルーチン間で要求を受け渡し,各要求につい
て,複数の実行体上でコルーチンを多量化して動作させ
るデータ処理システムにおけるコルーチン呼び出し制御
方式に関し, OSの排他制御機能を使用しなくても,異なる実行体上
でプログラムが同時に動作できる機構を提供することを
目的とし, 各要求に対して,その要求を処理すべきコルーチンの
識別子と排他的処理が必要になる単位ごとに付与される
逐次化識別子とを設定し,要求キューに接続する処理手
段と,上記要求が取り出し,その要求に設定されている
逐次化識別子に基づいて,該当するコルーチン起動の逐
次化を制御するコルーチンディスパッチャとを備えるよ
うに構成する。[Detailed Description of the Invention] [Outline] Regarding a coroutine call control method in a data processing system in which a request is passed between a plurality of coroutines and a coroutine is operated on a plurality of execution bodies for each request, OS exclusive control is performed. For the purpose of providing a mechanism that allows a program to operate simultaneously on different execution bodies without using a function, each request requires an identifier of a coroutine that should process the request and exclusive processing. The serialization identifier assigned to each unit is set, the processing means for connecting to the request queue, and the serialization of the corresponding coroutine activation are performed based on the serialization identifier set in the request by extracting the request. And a coroutine dispatcher for control.
本発明は,複数のコルーチン間で要求を受け渡し,各
要求について,複数の実行体上でコルーチンを多量化し
て動作させるデータ処理システムにおけるコルーチン読
み場し制御方式に関する。The present invention relates to a coroutine read-out control method in a data processing system in which a request is passed between a plurality of coroutines, and a coroutine is operated on a plurality of execution bodies with a large number of operations for each request.
計算機システムにおいて,処理を多重化した動作させ
る場合,使用する資源が同じときには,それに対するア
クセスが競合して論理矛盾が生じないようにするため
に,一般に排他制御が必要になる。その排他制御による
レスポンスやスループットの劣化を防ぐ技術が必要とさ
れる。In a computer system, when operations are performed in a multiplexed manner, exclusive control is generally required to prevent logical conflicts due to conflicting accesses to the same resources used. A technology is required to prevent the deterioration of the response and throughput due to the exclusive control.
第8図は一般なプログラム実行制御機構の例,第9図
はコルーチンの呼び出し例,第10図は従来の排他制御の
例,第11図は従来のコルーチン実行例を示す。FIG. 8 shows an example of a general program execution control mechanism, FIG. 9 shows an example of calling a coroutine, FIG. 10 shows an example of conventional exclusive control, and FIG. 11 shows an example of conventional coroutine execution.
第8図に示すように,コンピュータのオペレーティン
グ・システム(OS)11では,1つの中央演算処理(CPU)
を,複数のプログラムA,B,Cに対して割り当てるため
に,例えばタクス,スレッドまたはプロセスなどと呼ば
れる実行体E1,E2,E3という単位を設けている。実行体E
1,…は,複数存在し,それぞれが旨く動作するように,O
S11が制御する。As shown in FIG. 8, the computer operating system (OS) 11 has one central processing unit (CPU).
In order to allocate the above to a plurality of programs A, B, C, there are provided units called executers E1, E2, E3 called tax, thread or process. Execution body E
There are multiple 1, ..., so that each works well, O
S11 controls.
OS11が提供する実行体制御上で動作するプログラム
は,主プログラム,副プログラム等の階層構造で処理を
組んでいる。しかし,それは1つの実行体の中だけであ
り,異なる実行体間で動作するプログラムが1つの処理
制御機構の役割を果たす場合には,主プログラムと副プ
ログラムという階層構造の関係では,制御できない。そ
こで,主プログラムの位置づけで動作するプログラム間
で,同期を取りながらプログラムの制御を行う技法が用
いられている。このように制御されるプログラムをコル
ーチンと呼ぶ。Programs that run under the control of the executable provided by OS11 are structured in a hierarchical structure such as a main program and subprograms. However, it is only in one execution body, and when the programs operating between different execution bodies play the role of one processing control mechanism, they cannot be controlled in the hierarchical structure of the main program and the subprogram. Therefore, there is used a technique of controlling the programs while synchronizing the programs operating in the position of the main program. A program controlled in this way is called a coroutine.
このコルーチンの呼び出しの例を,第9図に示す。第
9図(イ)では,コルーチンaがコルーチンbを呼び出
し,さらにコルーチンbがコルーチンcを呼び出してい
る。第9図(ロ)では,コルーチンdが,コルーチンe,
f,gを呼び出し,コルーチンe,fはコルーチンhを,コル
ーチンgはコルーチンiを呼び出している。このよう
に,あるコルーチンから1つのコルーチンを呼び出すこ
とも,複数のコルーチンを呼び出すことも可能である。
また,これらのコルーチンは,それぞれ異なる実行体上
でも,同じ実行体上でも動作できる。An example of calling this coroutine is shown in FIG. In FIG. 9A, coroutine a calls coroutine b, and coroutine b calls coroutine c. In FIG. 9B, the coroutine d is the coroutine e,
f, g are called, coroutines e, f call coroutine h, and coroutine g calls coroutine i. As described above, it is possible to call one coroutine from a certain coroutine or a plurality of coroutines.
Further, these coroutines can operate on different execution bodies or the same execution body.
サブルーチンとの違いは,コルーチンの場合,呼び出
し関係で実行体が違ってもいいこと,通常,制御が戻ら
ないので,親子関係が生じないことである。このような
コルーチンの技法は,例えば入力に対し,応答を返すま
で,1つの実行体で制御しなくてもいい場合に適用され
る。The difference from the subroutine is that in the case of a coroutine, the execution body may be different depending on the calling relationship, and normally, because control does not return, a parent-child relationship does not occur. Such a coroutine technique is applied when, for example, input does not need to be controlled by one executing unit until a response is returned.
ところで,複数のプログラムが同じ計算機資源を使用
する場合には,ロックの獲得,解放などによる排他制御
が必要になる。第10図は,その排他制御の例を示してい
る。By the way, when a plurality of programs use the same computer resource, exclusive control by acquiring and releasing a lock is required. FIG. 10 shows an example of the exclusive control.
同じ内容のプログラムAが,異なる実行体E1,E2上で
動作している。このプログラムAは,仮想領域Rに対し
ロックをかけている。例えば,実行体E1のほうが,先に
ロックを獲得し,区間aの処理中であったとする。実行
体E2が,OSから制御を渡され,ロックを獲得しようとす
るが,既に実行体E1がロックを獲得しているので,実行
体E2は区間aの後まで,待ち状態となる。OSは,別の実
行体E3に対し制御を渡す。The program A having the same contents operates on different execution bodies E1 and E2. This program A locks the virtual area R. For example, it is assumed that the execution unit E1 acquires the lock first and is in the process of the section a. The execution body E2 receives control from the OS and tries to acquire the lock, but since the execution body E1 has already acquired the lock, the execution body E2 is in a waiting state until after the section a. The OS passes control to another execution unit E3.
コルーチンによる制御機構のもとでも,同じような排
他制御が必要になる。以下,第11図に従って,その例を
説明する。Even under the control mechanism of coroutines, similar exclusive control is required. An example will be described below with reference to FIG.
第11図(イ)に示すように,コルーチンモジュール00
0c,000d,000eから,それぞれコルーチンモジュール000a
に対して,要求,要求,要求があったとする。ま
た,コルーチンモジュール000fから,コルーチンモジュ
ール000bに対して,要求があったとする。As shown in FIG. 11 (a), the coroutine module 00
From 0c, 000d, 000e, coroutine module 000a
Suppose there is a request, a request, and a request. It is also assumed that there is a request from the coroutine module 000f to the coroutine module 000b.
ここで,2つの実行体E1,E2が実行可能であったとす
る。まず,実行体E1は,要求を取り上げ,コルーチン
モジュール000aを動作させて,その処理を行う。ここで
必要であれば,ある資源についてロックをかける。同様
に実行体E2は,要求を取り上げて,コルーチンモジュ
ール000aを動作させるが,同じ資源を使用していると,
第11図(ロ)に示すように,ロック解放待ちになり,OS
により停止させられる。Here, it is assumed that the two execution bodies E1 and E2 are executable. First, the execution unit E1 picks up the request, operates the coroutine module 000a, and performs the processing. If necessary, lock a resource. Similarly, the executing body E2 picks up the request and operates the coroutine module 000a, but uses the same resource,
As shown in Figure 11 (b), the lock release waits
Is stopped by.
このように,従来,要求とが,異なる実行体上で
コルーチンモジュール000aにより処理されることがある
ので,これを順番に処理するためには,OSのロックによ
る排他制御機能を使用しなければならなかった。そのた
め,要求の処理の逐次化の範囲内では,実行体が複数
あったとしても,1つの実行体しか動作しないことになる
という問題があった。また,ロックによる処理順番を,
コルーチンモジュールを作成する側でプログラムする必
要があった。As described above, conventionally, the request and the request may be processed by the coroutine module 000a on different execution bodies. Therefore, in order to process them in order, the exclusive control function by the OS lock must be used. There wasn't. Therefore, within the range of request processing serialization, even if there are multiple execution bodies, only one execution body operates. Also, the processing order by the lock is
It was necessary to program on the side that created the coroutine module.
同じプログラムが,異なる実行体で動作すると,コル
ーチンの技法を用いても,同じ仮想領域を更新する場合
などに,OSのロック機能を使用しないと,互いに動作の
保証ができないことになる。しかし,OSの排他制御機能
を使用した場合,排他関係にあるプログラム同士が並行
して動作する範囲が限定され,また,排他の範囲を拡げ
て,異なる実行体でプログラムを動作させる意味がなく
なるという問題がある。すなわち,実行体による実行多
重度を上げることができないという問題がある。If the same program operates in different execution bodies, even if the coroutine technique is used, the operations cannot be guaranteed unless the OS lock function is used, such as when updating the same virtual area. However, when the exclusive control function of the OS is used, the range in which exclusive programs run in parallel is limited, and there is no point in extending the exclusive range to run programs in different execution bodies. There's a problem. That is, there is a problem that the execution multiplicity of the execution body cannot be increased.
本発明は上記問題点の解決を図り,OSの排他制御機能
を使用しなくても,異なる実行体上で,アクセス競合等
に関連する問題を回避して,プログラムが同時に動作で
きる機構を提供することを目的としている。The present invention solves the above problems and provides a mechanism that allows programs to run simultaneously on different execution units, avoiding problems related to access conflicts, etc., without using the exclusive control function of the OS. Is intended.
第1図は本発明の原理説明図である。 FIG. 1 is an explanatory view of the principle of the present invention.
第1図において,10はCPUおよびメモリなどからなる処
理装置,11はオペレーティング・システム(OS),12−1,
12−2はCPU実行権の割り当て単位となる実行体,13−1,
13−2は要求を解析しコルーチンを起動するコルーチン
ディスパッチャ,14A〜14Dはコルーチンとして動作する
プログラムからなるコルーチンモジュール,15は他のコ
ルーチンモジュールを呼び出すための要求をキューに設
定するコルーチンスケジューラ,16は各コルーチンへの
処理要求が接続される要求キュー,17は要求キュー16の
キューターミナル,18はコルーチンモジュールが他のコ
ルーチンモジュールを呼び出す場合の呼び出し情報であ
る要求を表す。In FIG. 1, 10 is a processing unit including a CPU and memory, 11 is an operating system (OS), 12-1,
12-2 is an execution unit that is a unit of CPU execution right allocation, 13-1,
13-2 is a coroutine dispatcher that analyzes requests and activates coroutines, 14A to 14D are coroutine modules that consist of programs that operate as coroutines, 15 is a coroutine scheduler that queues requests to call other coroutines, and 16 is A request queue to which a processing request to each coroutine is connected, 17 is a queue terminal of the request queue 16, and 18 is a request which is call information when the coroutine module calls another coroutine module.
目的とする処理を行うプログラムが,その内容に応じ
てコルーチン識別子で区別されるコルーチンモジュール
14A,14B,…として用意される。これらのコルーチンモジ
ュール14A,…は,どの実行体12−1,12−2上でも動作可
能である。A coroutine module in which the program that performs the desired processing is distinguished by a coroutine identifier according to its contents.
Prepared as 14A, 14B, ... These coroutine modules 14A, ... Can operate on any of the execution bodies 12-1 and 12-2.
あるコルーチンモジュール,例えばコルーチンモジュ
ール14Aが,他のコルーチンモジュールを呼び出す場
合,呼び出し情報を要求18として設定する。その後,コ
ルーチンスケジューラ15を呼び出す。コルーチンスケジ
ューラ15は,要求18を呼び出し先のコルーチンモジュー
ル群に対応する要求キュー16に接続する。When a coroutine module, such as the coroutine module 14A, calls another coroutine module, the call information is set as the request 18. After that, the coroutine scheduler 15 is called. The coroutine scheduler 15 connects the request 18 to the request queue 16 corresponding to the callee coroutine module group.
この要求18には,コルーチンモジュールを識別するコ
ルーチンモジュール識別子のほかに,排他的処理が必要
になる単位ごとに付与される逐次化識別子が,要求元の
コルーチンモジュールにより,設定されるようになって
いる。In this request 18, in addition to the coroutine module identifier for identifying the coroutine module, the serialization identifier given to each unit that requires exclusive processing is set by the requesting coroutine module. There is.
コルーチンディスパッチャ13−1,13−2は,オペレー
ティング・システム11から,直に呼び出され,実行体12
−1,12−2でコルーチンモジュールを呼び出して動作さ
せるプログラムである。リエントラント構造を採り,各
実行体12−1,12−2でそれぞれ同様に動作するようにな
っている。The coroutine dispatchers 13-1 and 13-2 are directly called by the operating system 11 and
-1 and 12-2 are programs that call and operate coroutine modules. Adopting a reentrant structure, each executing body 12-1 and 12-2 operates similarly.
コルーチンディスパッチャ13−1,13−2は,要求キュ
ー16から要求を取り出し,コルーチン識別子から,該当
するコルーチンモジュール14B等を求める。このとき,
要求18内に,逐次化識別子が設定されていれば,現在,
同じ逐次化識別子で動作するコルーチンモジュールがあ
るかどうかを調べる。同じ逐次化識別子で動作するコル
ーチンモジュールがあれば,逐次化の制御のため,その
要求18のディスパッチを止め,次の要求18についての処
理に移る。同じ逐次化識別子で動作するコルーチンモジ
ュールがない場合には,そのコルーチンモジュールを起
動する。The coroutine dispatchers 13-1 and 13-2 take out the request from the request queue 16 and obtain the corresponding coroutine module 14B or the like from the coroutine identifier. At this time,
If the serialization identifier is set in request 18,
Check if there is a coroutine module that works with the same serialization identifier. If there is a coroutine module that operates with the same serialization identifier, the dispatch of the request 18 is stopped and the processing for the next request 18 is started for serialization control. If no coroutine module operates with the same serialization identifier, that coroutine module is activated.
この逐次化制御は,コルーチン間にわたって行って
も,1つの同じコルーチンだけを対象として行ってもよ
い。This serialization control may be performed between coroutines or may be performed only for one and the same coroutine.
コルーチンモジュール14A,…は,呼び出されて処理を
終了した後,同じ実行体12−1,…上のコルーチンディス
パッチャ13−1,13−2に復帰する。コルーチンディスパ
ッチャ13−1,13−2は,再度,要求キュー16から要求18
を取り出し,同様に逐次化制御を行いながら,コルーチ
ンモジュールを呼び出す。この処理を,要求キュー16に
要求18がなくなるまで繰り返す。The coroutine modules 14A, ... Are returned to the coroutine dispatchers 13-1, 13-2 on the same executing body 12-1 ,. The coroutine dispatchers 13-1 and 13-2 again request the request 18 from the request queue 16.
, And call the coroutine module while performing serialization control in the same way. This process is repeated until there are no more requests 18 in the request queue 16.
同じ資源を排他的に使用しなければならないコルーチ
ンモジュールには,あらかじめコルーチンモジュールの
設計時に,同じ逐次化識別子を付与しておく。そして,
このコルーチンモジュールに対し,処理を要求するとき
に,呼び出し情報中に,逐次化識別子を設定する。Coroutine modules that must exclusively use the same resource are assigned the same serialization identifier in advance when designing the coroutine module. And
When requesting processing to this coroutine module, the serialization identifier is set in the call information.
これにより,コルーチンディスパッチャは,同じ逐次
化識別子を持つコルーチンモジュールが動作中かどうか
を調べて,逐次化制御を行うので,OSが提供する排他制
御機能を使用しなくても,資源に対するアクセス競合な
どを防止できる。これに伴い,実行体がロック解放待ち
などにより,長時間待たされることがなくなる,実行体
の実行多重度を実質的に向上させることが可能になる。As a result, the coroutine dispatcher checks whether or not the coroutine module having the same serialization identifier is operating and performs serialization control. Therefore, even if the exclusive control function provided by the OS is not used, resource access conflicts, etc. Can be prevented. Along with this, it becomes possible to substantially improve the execution multiplicity of the execution body because the execution body is not kept waiting for a long time due to the lock release wait or the like.
なお,要求中に,逐次化識別子が設定されている場合
に,次の2つ方式を選択することができる。いずれの機
能を使用するかは,制御プログラムの初期化時に静的に
決定しておく。If the serialization identifier is set in the request, the following two methods can be selected. Which function is to be used is statically determined when the control program is initialized.
−同じ逐次化識別子で動作しているコルーチンがなけれ
ば,その要求に対するコルーチンを呼び出す。どのコル
ーチンも逐次化識別子が同じ場合,逐次化される。これ
をコルーチン間逐次化機能と呼ぶ。-If no coroutine is operating with the same serialization identifier, call the coroutine for the request. All coroutines are serialized if they have the same serialization identifier. This is called an inter-coroutine serialization function.
−同じ逐次化識別子が検出された場合,同じコルーチン
識別子を持つコルーチンが動作しているかを検出する。
異なるコルーチンであれば,その要求に対するコルーチ
ンを呼び出す。これをコルーチン内逐次化機能と呼ぶ。-If the same serialization identifier is detected, detect if a coroutine with the same coroutine identifier is running.
If it is a different coroutine, call the coroutine for that request. This is called a serialization function in the coroutine.
第2図は本発明の実施例説明図,第3図は本発明の実
施例のタイムチャート,第4図は本発明の実施例で用い
る管理テーブル関係図,第5図は本発明の実施例による
コルーチンスケジューラの処理フロー,第6図は本発明
の実施例によるコルーチンディスパッチャの処理フロ
ー,第7図は第6図に示すコルーチンディスパッチャの
処理フローの変更例を示す。FIG. 2 is an explanatory view of an embodiment of the present invention, FIG. 3 is a time chart of the embodiment of the present invention, FIG. 4 is a management table relationship diagram used in the embodiment of the present invention, and FIG. 5 is an embodiment of the present invention. 6 shows the processing flow of the coroutine scheduler according to FIG. 6, FIG. 6 shows the processing flow of the coroutine dispatcher according to the embodiment of the present invention, and FIG. 7 shows a modification of the processing flow of the coroutine dispatcher shown in FIG.
第2図において,スレッド20−1,20−2は,OSによっ
てCPU実行権が渡される単位である。以下,このスレッ
ド20−1,20−2を,実行体E1,E2という。In FIG. 2, threads 20-1 and 20-2 are units to which the CPU execution right is passed by the OS. Hereinafter, these threads 20-1 and 20-2 are referred to as execution bodies E1 and E2.
第2図に示すように,コルーチンモジュール14C,14D,
14E,14Fから,それぞれコルーチン呼び出しの要求,
,,があったとする。これらの要求には,その要
求を処理するコルーチンモジュールを識別するコルーチ
ン識別子(id)と,逐次化識別子(id)が,図示のよう
に設定されている。これに対し,実行体E1またはE2上
で,コルーチンディスパッチャ13は次のように処理す
る。As shown in FIG. 2, the coroutine modules 14C, 14D,
Requests to call coroutines from 14E and 14F,
,,, A coroutine identifier (id) for identifying the coroutine module that processes the request and a serialization identifier (id) are set in these requests as shown in the figure. On the other hand, the coroutine dispatcher 13 performs the following processing on the execution unit E1 or E2.
(1) 実行体E1のもとで,要求キュー16から要求を
取り出す。この要求に対応する逐次化idで,コルーチン
モジュールが動作していないので,コルーチンid=000a
のコルーチンモジュール14Aを呼び出す。(1) A request is fetched from the request queue 16 under the execution body E1. Since the coroutine module is not operating with the serialization id corresponding to this request, coroutine id = 000a
Call the coroutine module 14A.
(2) 実行体E2のもとで,要求キュー16から要求を
取り出す。この要求に対応する逐次化idで,コルーチン
モジュールが動作しているので,この要求をコルーチン
id=000aのスレッドのキューに繋げる。再度,要求キュ
ー16から,要求を取り出す。逐次化id(=0002)が,
現在実行体E1で動作しているもの(=0001)と異なるの
で,コルーチンid=000aのコルーチンモジュール14Aを
呼び出す。(2) A request is fetched from the request queue 16 under the execution body E2. The coroutine module is operating with the serialization id corresponding to this request.
Connect to the queue of the thread with id = 000a. The request is retrieved from the request queue 16 again. Serialization id (= 0002),
Since it is different from the one currently operating in the execution unit E1 (= 0001), the coroutine module 14A with the coroutine id = 000a is called.
(3) 実行体E1のもとで,コルーチンモジュール14A
が要求に対する処理を終え,コルーチンディスパッチ
ャ13に復帰する。コルーチンディスパッチャ13は,当コ
ルーチンモジュールに対する要求の有無を調べる。要求
があるため,再度,コルーチンモジュール14Aを呼び
出す。(3) Under the execution body E1, the coroutine module 14A
Completes the processing for the request and returns to the coroutine dispatcher 13. The coroutine dispatcher 13 checks whether there is a request for this coroutine module. Since there is a request, call coroutine module 14A again.
(4) 実行体E2のもとで,逐次化id=0002で動作して
いるコルーチンモジュール14Aが,要求に対する処理を
終え,コルーチンディスパッチャ13に復帰する。コルー
チンディスパッチャ13は,当コルーチンモジュールに対
する要求の有無を調べる。要求がないため,要求キュー
16から要求を取り出す。対応する逐次化idでコルーチ
ンモジュールが動作していないため,コルーチンid=00
0bのコルーチンモジュール14Bを呼び出す。(4) Under the execution body E2, the coroutine module 14A operating with the serialization id = 0002 finishes the processing for the request and returns to the coroutine dispatcher 13. The coroutine dispatcher 13 checks whether there is a request for this coroutine module. Request queue because there is no request
Take the request from 16. Since the coroutine module is not running with the corresponding serialization id, coroutine id = 00
Call coroutine module 14B at 0b.
以上の制御による動作のタイムチャートは,第3図に
示すようになる。実行体E1,E2上で,それぞれ異なる逐
次化idの要求に対する処理が行われるので,ロック解放
待ちなどによる待ち時間がなく,第11図(ロ)に示す従
来例と比較すると明らかなように,実行効率がよくな
る。A time chart of the operation by the above control is as shown in FIG. Since processing for different serialization id requests is performed on the execution bodies E1 and E2, there is no waiting time such as waiting for lock release, and as is clear from comparison with the conventional example shown in FIG. Execution efficiency improves.
実行体であるスレッドの管理のために,本実施例で
は,第4図に示すような管理テーブルを用いている。In this embodiment, a management table as shown in FIG. 4 is used to manage the threads that are execution bodies.
スレッド群管理テーブル30は,1つのスレッドまたは複
数のスレッドに,1つ作成する。複数のスレッドで構成す
る場合,第4図に示すように,各スレッド管理テーブル
31−1,31−2,…を,順次リング状に接続する。このスレ
ッド群管理テーブル30に対して,要求キュー16が設けら
れる。One thread group management table 30 is created for one thread or a plurality of threads. When configuring with multiple threads, as shown in Fig. 4, each thread management table
31-1, 31-2, ... are sequentially connected in a ring shape. A request queue 16 is provided for this thread group management table 30.
スレッド管理テーブル31−1,31−2,…は,コルーチン
ディスパッチャが動作するスレッドに対応させて作成す
る。各スレッド管理テーブル31−1,31−2,…は,現在そ
のスレッドで動作中のコルーチンモジュールが扱ってい
る逐次識別子と同じ逐次化識別子を持つ要求18が,逐次
化のために処理が保留されて接続される逐次化対象キュ
ー32−1,32−2,…を持つ。The thread management tables 31-1, 31-2, ... Are created corresponding to the threads in which the coroutine dispatcher operates. In each thread management table 31-1, 31-2, ..., a request 18 having the same serialization identifier as that handled by the coroutine module currently operating in the thread is suspended for serialization. Have serialization target queues 32-1, 32-2 ,.
第1図に示すコルーチンスケジューラ15は,各コルー
チンモジュールからサブルーチンのように呼び出され
て,第5図に示す(a)〜(c)の処理を行う。The coroutine scheduler 15 shown in FIG. 1 is called from each coroutine module like a subroutine and performs the processes (a) to (c) shown in FIG.
(a) 呼び出し情報の要求に説明されているコルーチ
ンidを検出する。(A) Detect the coroutine id described in the call information request.
(b) そのコルーチンidをもとに,対応するスレット
群管理テーブルを検出する。(B) The corresponding threat group management table is detected based on the coroutine id.
(c) 検出されたスレット群管理テーブルの要求キュ
ーに,その要求をキューイングし,呼び出し元のコルー
チンモジュールに復帰する。(C) Queuing the request in the request queue of the detected threat group management table, and returning to the calling coroutine module.
コルーチンディスパッチャは,各スレッド上で動作
し,第6図に示す処理(a)〜(p)を行う。The coroutine dispatcher operates on each thread and performs the processes (a) to (p) shown in FIG.
(a) まず,現コルーチンディスパッチャが動作して
いる当該スレッドに,要求が繋がれているかどうかを,
第4図に示すスレット管理テーブルの逐次化対象キュー
を調べることにより,判定する。繋がれていない場合,
処理(e)へ移る。(A) First, it is determined whether a request is connected to the thread in which the current coroutine dispatcher is operating,
The determination is made by checking the serialization target queue in the threat management table shown in FIG. If not connected,
Move to processing (e).
(b) 要求が繋がれている場合,その要求を採る。(B) If the requests are connected, take the request.
(c) 採った要求に対応するコルーチンモジュールを
検出する。(C) Detect the coroutine module corresponding to the taken request.
(d) 検出したコルーチンモジュールを起動し,その
コルーチンモジュールから復帰したならば,処理(a)
へ戻り,同様に処理を繰り返す。(D) If the detected coroutine module is started and the coroutine module is restored, the process (a)
Return to and repeat the same process.
(e) 当該スレッドの逐次化対象キューに要求が接続
されていない場合,スレッド群管理テーブルの要求キュ
ーを調べ,そのスレッドに対応する要求キューから要求
を1つ採る。(E) When the request is not connected to the serialization target queue of the thread, the request queue of the thread group management table is checked, and one request is taken from the request queue corresponding to the thread.
(f) 当該スレッドは,逐次化機能を使用するスレッ
ドであるかどうかを判定する。これは,スレッド管理テ
ーブルまたはスレッド群管理テーブルにあらかじめ静的
に設定される情報に基づいて判断される。逐次化機能を
使用する場合,処理(i)へ移る。(F) It is determined whether the thread is a thread that uses the serialization function. This is determined based on information statically set in advance in the thread management table or the thread group management table. When using the serialization function, move to processing (i).
(g) 逐次化機能を使用しない場合,採った要求に対
応するコルーチンモジュールを検出する。(G) When the serialization function is not used, the coroutine module corresponding to the taken request is detected.
(h) 検出したコルーチンモジュールを起動し,その
コルーチンモジュールから復帰したならば,処理(a)
へ戻り,同様に処理を繰り返す。(H) If the detected coroutine module is started and the coroutine module is restored, the process (a)
Return to and repeat the same process.
(i) 逐次化機能を使用する場合,要求に設定された
逐次化識別子を検出する。(I) When using the serialization function, the serialization identifier set in the request is detected.
(j) スレッド管理テーブルにリンクされる他のスレ
ッド管理テーブルを調べることにより,当スレッド群の
他スレッドを比較対象とする。(J) Other threads in this thread group are compared with each other by checking other thread management tables linked to the thread management table.
(k) 比較対象とする他スレッドがあるかどうかを判
定する。ない場合,処理(n)へ移る。(K) It is determined whether there is another thread to be compared. If not, move to process (n).
(l) 比較対象の他スレッドがある場合,そのスレッ
ドが,当該逐次化識別子と同じ識別子でコルーチンモジ
ュールを起動中であるかどうかを判定する。起動中でな
い場合,処理(j)へ戻り,同様に他スレッドについて
調べる。(L) If there is another thread to be compared, it is determined whether the thread is activating the coroutine module with the same identifier as the serialization identifier. If not started, the process returns to the process (j), and the other threads are checked in the same manner.
(m) 同じ逐次化識別子で起動中の場合,その比較対
象となっているスレッドのスレッド管理テーブルにおけ
る逐次化対象キューに,その要求を繋ぐ。その後,処理
(a)へ戻り,同様に処理を繰り返す。(M) If the threads are being activated with the same serialization identifier, the request is connected to the serialization target queue in the thread management table of the thread to be compared. After that, the process returns to the process (a), and the same process is repeated.
(n) 同じ逐次化識別子で動作しているスレッドがな
い場合,当該要求の逐次化識別子を,スレッド管理テー
ブルに記録する。(N) If there is no thread operating with the same serialization identifier, record the serialization identifier of the request in the thread management table.
(o) コルーチン識別子により,採った要求に対応す
るコルーチンモジュールを検出する。(O) The coroutine module corresponding to the taken request is detected by the coroutine identifier.
(p) 検出したコルーチンモジュールを起動し,その
コルーチンモジュールから復帰したならば,処理(a)
へ戻り,同様に処理を繰り返す。(P) If the detected coroutine module is started and the coroutine module is restored, processing (a)
Return to and repeat the same process.
以上のコルーチンディスパッチャの処理は,コルーチ
ン間逐次化機能を使用した場合の処理である。コルーチ
ン内逐次化機能を使用する場合には,第6図に示す処理
(l)〜処理(m)の部分が,例えば第7図に示すよう
に変更になる。以下,第7図に従って説明する。The above coroutine dispatcher processing is the processing when the inter-coroutine serialization function is used. When the serialization function in the coroutine is used, the processing (1) to processing (m) shown in FIG. 6 are changed as shown in FIG. 7, for example. This will be described below with reference to FIG.
(l) 第6図の処理(l)と同様である。“yes"の場
合,処理(q)を実行する。(L) It is the same as the process (l) in FIG. If "yes", the process (q) is executed.
(q) スレッド管理テーブルを参照し,当スレッドで
は,コルーチン内逐次化機能を使用するかどうかを判定
する。使用しない場合,処理(m)へ移る。(Q) With reference to the thread management table, this thread determines whether to use the in-coroutine serialization function. If not used, move to process (m).
(r) コルーチン内逐次化機能を使用する場合,動作
中のコルーチンモジュールと,要求されたコルーチンモ
ジュールは同じかどうかを判定する。同じ場合,コルー
チン内逐次化のため,処理(m)へ移る。(R) When the intra-coroutine serialization function is used, it is determined whether the coroutine module in operation and the requested coroutine module are the same. If the same, the process moves to the process (m) for serialization in the coroutine.
(s) 同じコルーチンモジュールでない場合,当該要
求の逐次化識別子を,スレッド管理テーブルに記録す
る。(S) If they are not the same coroutine module, record the serialization identifier of the request in the thread management table.
(t) コルーチン識別子により,採った要求に対応す
るコルーチンモジュールを検出する。(T) The coroutine module corresponding to the taken request is detected by the coroutine identifier.
(u) 検出したコルーチンモジュールを起動し,その
コルーチンモジュールから復帰したならば,第6図に示
す処理(a)へ戻り,同様に処理を繰り返す。(U) When the detected coroutine module is started and returned from the coroutine module, the process returns to the process (a) shown in FIG. 6 and the same process is repeated.
(m) 第6図に示す処理(m)と同様である。(M) It is the same as the process (m) shown in FIG.
以上の処理は,例えばオンライントランザクション処
理において,同じ要求がランダムに来る時に,それを制
御するプログラムなどに適用可能であり,コルーチン制
御によって,制御機構を簡明にすることができるととも
に,実行多重度を向上させることができるようになる。The above processing can be applied to a program for controlling the same request randomly when the same request comes in the online transaction processing, for example. By coroutine control, the control mechanism can be simplified and the execution multiplicity can be increased. You will be able to improve.
以上説明したように,本発明によれば,各実行体上で
コルーチンディスパッチャにより,コルーチンモジュー
ルの起動制御を行うことにより,簡明な制御機構を実現
できる。また,OSの提供するロック機構を使用しないで
済む部分ができるため,実行体を有効利用し,効率的に
処理を遂行できるようになる。これにより,制御機構全
体の処理のターンアラウンドを短縮することが可能にな
る。As described above, according to the present invention, a simple control mechanism can be realized by controlling the activation of the coroutine module by the coroutine dispatcher on each execution body. In addition, since there is a part that does not need to use the lock mechanism provided by the OS, the execution body can be effectively used and the processing can be executed efficiently. This makes it possible to shorten the turnaround of the processing of the entire control mechanism.
第1図は本発明の原理説明図, 第2図は本発明の実施例説明図, 第3図は本発明の実施例のタイムチャート, 第4図は本発明の実施例で用いる管理テーブル関係図, 第5図は本発明の実施例によるコルーチンスケジューラ
の処理フロー, 第6図は本発明の実施例によるコルーチンディスパッチ
ャの処理フロー, 第7図は第6図に示すコルーチンディスパッチャの処理
フローの変更例, 第8図は一般的なプログラム実行制御機構の例, 第9図はコルーチンの呼び出し例, 第10図は従来の排他制御の例, 第11図は従来のコルーチン実行例を示す。 図中,10は処理装置,11はオペレーティング・システム,1
2−1,12−2は実行体,13−1,13−2はコルーチンディス
パッチャ,14A〜14Dはコルーチンモジュール,15はコルー
チンスケジューラ,16は要求キュー,17はキューターミナ
ル,18は要求を表す。FIG. 1 is an explanatory view of the principle of the present invention, FIG. 2 is an explanatory view of an embodiment of the present invention, FIG. 3 is a time chart of the embodiment of the present invention, and FIG. 4 is a management table relationship used in the embodiment of the present invention. 5 and 5 are process flows of the coroutine scheduler according to the embodiment of the present invention, FIG. 6 is a process flow of the coroutine dispatcher according to the embodiment of the present invention, and FIG. 7 is a modification of the process flow of the coroutine dispatcher shown in FIG. Example, FIG. 8 shows an example of a general program execution control mechanism, FIG. 9 shows an example of calling a coroutine, FIG. 10 shows an example of conventional exclusive control, and FIG. 11 shows an example of conventional coroutine execution. In the figure, 10 is a processing unit, 11 is an operating system, 1
2-1 and 12-2 are execution bodies, 13-1 and 13-2 are coroutine dispatchers, 14A to 14D are coroutine modules, 15 is a coroutine scheduler, 16 is a request queue, 17 is a queue terminal, and 18 is a request.
Claims (1)
し,各要求について,複数の実行体(12−1,12−2,…)
上でコルーチンを多重化して動作させるデータ処理シス
テムにおいて, 各要求に対して,その要求を処理すべきコルーチンの識
別子と排他的処理が必要になる単位ごとに付与される逐
次化識別子とを設定し,要求キュー(16)に接続する処
理手段(14A,…,15)と, 上記要求キューに接続された要求を取り出し,その効果
に設定されている逐次化識別子に基づいて,同じ逐次化
識別子で動作しているコルーチンがなければ該当するコ
ルーチンを起動することによりコルーチン起動の逐次化
を制御する,または同じ逐次化識別子でかつ同じコルー
チン識別子を持つコルーチンが動作していなければ該当
するコルーチンを起動することによりコルーチン起動の
逐次化を制御する,上記各実行体ごとに設けられた複数
のコルーチンディスパッチャ(13−1,…)とを備えたこ
とを特徴とするコルーチン呼び出し制御方式。1. A request (18) is passed between a plurality of coroutines, and a plurality of execution bodies (12-1, 12-2, ...) Are passed for each request.
In the data processing system in which the coroutine is multiplexed and operated as described above, for each request, the identifier of the coroutine that should process the request and the serialization identifier assigned to each unit that requires exclusive processing are set. , The processing means (14A, ..., 15) connected to the request queue (16) and the request connected to the request queue are fetched, and the same serialization identifier is used based on the serialization identifier set in the effect. Controls the serialization of coroutine activation by activating the coroutine if no coroutine is operating, or activates the coroutine if the coroutines having the same serialization identifier and the same coroutine identifier are not operating A plurality of coroutine dispatchers (13- 1, ...) and a coroutine call control method.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP1312988A JP2535631B2 (en) | 1989-12-01 | 1989-12-01 | Calling call control method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP1312988A JP2535631B2 (en) | 1989-12-01 | 1989-12-01 | Calling call control method |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH03172938A JPH03172938A (en) | 1991-07-26 |
JP2535631B2 true JP2535631B2 (en) | 1996-09-18 |
Family
ID=18035887
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP1312988A Expired - Fee Related JP2535631B2 (en) | 1989-12-01 | 1989-12-01 | Calling call control method |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2535631B2 (en) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8589925B2 (en) * | 2007-10-25 | 2013-11-19 | Microsoft Corporation | Techniques for switching threads within routines |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6467631A (en) * | 1987-09-08 | 1989-03-14 | Nec Corp | Resources-based job starting system |
JPH0193829A (en) * | 1987-10-05 | 1989-04-12 | Hitachi Ltd | System for operating queue |
-
1989
- 1989-12-01 JP JP1312988A patent/JP2535631B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH03172938A (en) | 1991-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2866241B2 (en) | Computer system and scheduling method | |
US5333319A (en) | Virtual storage data processor with enhanced dispatching priority allocation of CPU resources | |
US5630128A (en) | Controlled scheduling of program threads in a multitasking operating system | |
US9201703B2 (en) | Sharing kernel services among kernels | |
US4791554A (en) | Method and apparatus for preventing deadlock in a data base management system | |
US6016490A (en) | Database management system | |
EP0428006A2 (en) | Multilevel locking system and method | |
US7797704B2 (en) | System and method for performing work by one of plural threads using a lockable resource | |
US6738846B1 (en) | Cooperative processing of tasks in a multi-threaded computing system | |
JPH031698B2 (en) | ||
JPH06208552A (en) | Small grain mechanism | |
US4945470A (en) | Hierarchy multi-processor system and control method therefor | |
EP0362903B1 (en) | A special purpose processor for off-loading many operating system functions in a large data processing system | |
WO2019159616A1 (en) | Program execution control method and vehicle control device | |
JP2535631B2 (en) | Calling call control method | |
JP3644042B2 (en) | Multitask processing device | |
US7823158B2 (en) | Adaptive scheduling and management of work processing in a target context in resource contention | |
US11301304B2 (en) | Method and apparatus for managing kernel services in multi-core system | |
Michael et al. | Relative performance of preemption-safe locking and non-blocking synchronization on multiprogrammed shared memory multiprocessors | |
WO2000033175A2 (en) | Method for increasing efficiency of multiprocessing systems | |
JP2804478B2 (en) | Task control system and online transaction system | |
JPH07319716A (en) | Exclusive control system for resources of computer system | |
JPH02171952A (en) | Dispatching system for multiprocessor | |
Takada et al. | Towards a scalable real-time kernel for function-distributed multiprocessors | |
US11809219B2 (en) | System implementing multi-threaded applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |