JP2001014177A - 非同期データ入出力処理方法およびそのプログラム記録媒体 - Google Patents
非同期データ入出力処理方法およびそのプログラム記録媒体Info
- Publication number
- JP2001014177A JP2001014177A JP11184583A JP18458399A JP2001014177A JP 2001014177 A JP2001014177 A JP 2001014177A JP 11184583 A JP11184583 A JP 11184583A JP 18458399 A JP18458399 A JP 18458399A JP 2001014177 A JP2001014177 A JP 2001014177A
- Authority
- JP
- Japan
- Prior art keywords
- processing
- thread
- output
- input
- data input
- 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.)
- Pending
Links
Landscapes
- Multi Processors (AREA)
Abstract
域の固定処理を行うスレッドが長時間,CPU時間を占
有しないようにし,効率のよいデータ入出力を可能にす
る。 【解決手段】ユーザ空間のプロセスからの入出力処理要
求を処理するスレッドを第1のスレッド(T0,T1, …) と
第2のスレッド(A0,A1, …) とに分離し,第1のスレッ
ドは,ユーザ空間のプロセスからデータの入出力処理要
求があった場合にデータ領域Dnの確保を行った後,第2
のスレッドを呼び出し,他のスレッドがCPU時間を確
保できるように処理を中断し,第2のスレッドは,一連
の非同期のデータ入出力のための処理を終えた後,カー
ネルシステムの条件変数を活用し,状態変数を導入して
適切な値を書き込み,次に第1のスレッドは,これらの
変数が適切な値になったことを確認して,中断していた
処理を引き続き実行する。
Description
ットワークで接続したコンピュータ・システムにおい
て,もしくはノードと周辺装置で接続したコンピュータ
・システムにおいて,ノード間またはノードと周辺装置
間のデータ入出力処理を行う技術に関し,特に,データ
領域の固定処理で,スレッドがCPUを保持し続けない
よう条件変数(condition variable)と状態変数(statu
s variable)とを用いて他のスレッドと並列に処理でき
るようにした非同期データ入出力処理方式に関する。
ステムにおけるデータ入出力に対して,他のCPUとの
通信および周辺装置との通信に対して高速化の要求が増
大してきている。このため,高速なデータ入出力処理方
式の実現がますます重要になってきている。
力を行う処理として,データの入出力を同期して行う従
来型のデータ入出力方式は,一連の作業でCPUを占有
してしまうものであった。これに代わり,最近では,非
同期にデータの入出力要求を行うことができる非同期の
データ入出力方式が多く取り入れられてきている。
は,ユーザプロセス上のスレッドが所定の入出力関数を
発行することによって,カーネル空間において各デバイ
スごとに入出力を処理するデバイスドライバのスレッド
を起動し,そのカーネルのスレッドによって,ユーザプ
ロセスのスレッドから要求された実際の入出力を行って
いた。なお,スレッドは,CPU時間を獲得する処理の
単位である。
ム上で非同期にデータの入出力処理を行わせる場合,デ
ータの入出力対象となるデータ領域は,仮想記憶制御な
どによって他のプロセスに再割当てされてしまうことが
ないように確保して固定する必要がある。このデータ領
域の固定処理は,必ずシリアライズして行わなければな
らない。このため,この処理を行うスレッドはCPU時
間を長く占有してしまう問題があった。
領域の固定処理を行うスレッドが長時間,CPU時間を
占有しないようにし,効率のよいデータ入出力を可能に
することを目的とする。
力を非同期に行う非同期データ入出力処理方法におい
て,データ領域の固定を行うスレッドの処理で,CPU
時間を保持し続けないように,カーネルシステムの条件
変数を活用し,本発明のシステムに状態変数を導入し
て,処理を複数のスレッドに分担させることで,並列処
理を可能とすることを特徴とする。
出力処理要求を処理するカーネルのスレッドを第1のス
レッドと第2のスレッドとに分離し,第1のスレッド
は,ユーザ空間のプロセスからデータの入出力処理要求
があった場合にデータ領域の確保を行った後,カーネル
システムの条件変数を活用し,本発明のシステムに状態
変数を導入して第2のスレッドを呼び出し,他のスレッ
ドがCPU時間を確保できるように処理を中断し,第2
のスレッドは,一連の非同期のデータ入出力のための処
理を終えた後,前記条件変数を活用し,前記状態変数に
適切な値を書き込み,そこで,第1のスレッドは,前記
条件変数を活用し,前記状態変数の値が適切な値になっ
たことを確認して,中断していた処理を引き続き実行す
る。
は,例えば状態変数に,処理中の意味を持つ“1”また
は処理が完了した意味を持つ“0”を代入することを意
味する。なお,状態変数はこのような2値に限られるわ
けではなく,他の複数の状態を表すことができる変数と
して定義することもできる。
上でデータ通信を行うためのデータの入出力の処理にお
いて,スレッドの一連の処理を2つのスレッドに分離
し,カーネルシステムの条件変数の活用と本発明のシス
テムに状態変数を導入して,第1のスレッドがCPUを
保持し続けないようにすることで,他のスレッドに処理
を渡すことを可能とするものであり,これにより,CP
U時間の割当ての効率化を図ることができる。
ためのプログラムは,計算機が読み取り可能な可搬媒体
メモリ,半導体メモリ,ハードディスクなどの適切な記
録媒体に格納することができる。
図である。図1において,1はCPUおよびメモリ等か
らなるデータ処理装置,P0,P1,P2はユーザ空間
で動作するユーザプロセススレッド,Dは入出力処理要
求を受け付けるデバイスエントリ,T0,T1,T2は
カーネル空間で動作し入出力処理要求を処理するカーネ
ルスレッド,A0,A1,A2はカーネル空間で動作し
入出力処理要求を処理する第2のスレッドである非同期
スレッド,Tは各スレッドT0,…に対応する条件変数
と状態変数を管理する管理表,D1,…,Dn,…は入
出力のためのデータ領域を表す。
に付随した処理状態を示す変数である。この状態変数
を,例えば“0”であれば処理未完了,“1”であれば
処理完了を示すフラグによって構成してもよい。E0,
…,En,…は,各カーネルスレッドT0,…,Tn,
…に対応するエントリ番号である。条件変数は,例えば
UNIX系のオペレーティング・システム等で知られて
いるカーネルシステムが持つ変数であり,ドライバのプ
ログラムが値を代入できないのに対し,状態変数は,本
システムにおいて導入した変数であり,ドライバのプロ
グラムが値を設定して状態を遷移させるために用いるも
のである。
デバイスエントリDを通してデータの入出力処理要求が
あった場合,カーネルスレッドT0は,データ領域D1
の確保を行った後,非同期スレッドA0を起動するため
のデータ入出力関数の呼び出しを行う。この際に,カー
ネルシステムの条件変数cv1をカーネルシステムのた
めに用意し,一方で状態変数st1に適切な値を与え
る。
の処理を終えた後,この条件変数cv1を活用し,この
状態変数st1に適切な値を書き込む。カーネルスレッ
ドT0は,条件が合うまで処理を中断し,他の処理,例
えばカーネルスレッドT1,T2などがCPUを使用で
きるようにする。条件が合えば,スレッドT0のそれ以
降の処理を引き続き行い,処理が終了した後,データ領
域D1に適切な値を格納する。
理と非同期スレッドA0の処理とが,同じ一つのスレッ
ドで行われていたため,そのスレッドの処理が完全に終
了するかスリープ(ウェイト)状態になるまで,他のデ
ータ入出力処理要求を処理するスレッドが動作できなか
ったが,本発明では,図1に示すように,カーネル空間
において入出力処理要求を処理するスレッドが,カーネ
ルスレッドT0(第1のスレッド)と,非同期スレッド
A0(第2のスレッド)とに分離されているため,カー
ネルスレッドT0から非同期スレッドA0を起動して処
理を依頼した時点で,他のスレッド,例えばカーネルス
レッドT1,T2などにCPU時間を渡すことができ
る。
構成図である。本発明は,例えば図2に示すようなシス
テムにおいて実現される。図2に示すシステムは,AT
&Tベル研究所が開発したUNIX系のオペレーティン
グ・システムを用いるシステムであり,ユーザ空間とカ
ーネル空間とでそれぞれ動作するソフトウェアと,周辺
機器を含む計算機のハードウェアからなる。ここでは,
特にデータ通信に関連する本発明に関係する部分だけを
示している。
n)20は,ユーザの業務処理を遂行するプログラムで
ある。ライブラリ(Library)21は,アプリケーション
プログラム20にリンクされる通信ライブラリインタフ
ェースである。システム監視部(Manager daemon)22
は,本システムの初期化および状態の監視を行うデーモ
ンであり,終了についても司る。
めのドライバには,以下の処理部がある。インスタンス
管理部(Instance)24は,本システムで使用し,ノー
ド間データ通信でのエンドポイントとなるインスタンス
を管理する。また,これらを管理するための管理構造体
を保持する。接続管理部25は,このシステムのインス
タンス間で行われる接続の管理部である。メモリ管理部
(Memory & Protection)26は,このシステム内で使用
されるメモリとその保護のための管理部である。通信管
理部(Communication)27は,インスタンス間で行われ
る通信の管理部であり,ネットワークインタフェースコ
ントローラ32を直接制御する機能も持つ。デバイスの
制御振り分け部(Device)28は,システム監視部22
またはライブラリ21からの要求を受け,システム内の
該当する処理部に振り分ける。同期制御部(Synchronu
s)29は,ドライバ内の同期を制御する。
イブラリ21との間のインタフェースであり,インタフ
ェース部(/dev/admin)31は,システム監視部22と
の間のインタフェースである。ネットワークインタフェ
ースコントローラ(NetworkInterface Controller)3
2は,ネットワークを介した通信のためのハードウェア
である。
テムに用意された入出力関数によって呼び出されるもの
であるが,UNIX系オペレーティング・システム等に
おいて知られている技術であるので,ここでのこれ以上
の詳しい説明は省略する。
の説明図である。本発明では,条件変数を用いてスレッ
ドの細分化を行っている。図3に示すように,ユーザプ
ロセススレッドPnが,入出力処理要求部40にて例え
ばカーネルのデバイスドライバに対して非同期のリード
処理を行うように要求する関数aioread() を呼び出す
と,カーネルスレッドTnが起動される。
び出し部41にて第2のスレッドである非同期スレッド
Anを呼び出し,条件変数待ち合わせ部42にて要求し
た処理が終了するのを待つ。この待ち合わせの間,カー
ネルスレッドTnはスリープ状態になり,他のスレッド
がCPU時間を得ることができる。
実行部43により要求された入出力処理のオペレーショ
ンを実行し,処理が完了したならば,条件変数広報部4
4によって条件変数に付随する状態変数を更新した後,
条件変数の待ち合わせを解くための広報(ブロードキャ
スト)を行う。
えばUNIX系のオペレーティング・システムにおいて
知られている技術である。以下では,待ち合わせを行な
いたいスレッドと,待ち合わせを解くための広報をする
スレッドについての条件変数の使用方法について,具体
例に従って説明する。図4は,その条件変数の使用方法
の例を説明する図である。図4では,処理内容を周知の
プログラミング言語であるC言語によって記述した例を
表している。もちろん他の計算機言語を用いることもで
きる。
レッドTnでは,スレッドの待ち合わせたいポイント,
すなわち図3に示す条件変数待ち合わせ部42で,図4
(A)に示すような処理を実行する。ここで,kmutex_
enter( &mutex ) は,排他変数mutex によって排他制御
を開始するための関数である。state は,システムの状
態ビット(状態変数)を示しており,そのビット状態
が,登録途中の状態であるという意味を示すOUTSTANDIN
G という状態である限りは,関数cv_wait( … )を実行
するよう記述されている。関数cv_wait( … )は,条件
変数condvar によって,条件が変わるまで状態を維持し
続ける処理を行う関数である。条件が変わって待ち合わ
せが解かれると,kmutex_exit( &mutex )により,排他
変数mutexによる排他制御を終了する。
非同期スレッドAnでは,そのスレッドの終了するポイ
ント,すなわち図3に示す条件変数広報部44で,図4
(B)に示すような処理を実行する。まず,kmutex_en
ter( &mutex ) により,排他変数mutex による排他制御
を開始する。次に,システムの状態ビットであるstate
のビット状態を,登録途中の状態であるという意味を示
すOUTSTANDING でない状態にセットする。その後,条件
変数condvar を用いて,関数cv_broadcast( &condvar
) を実行する。cv_broadcast( &condvar ) は,条件
が変わったことをカーネルドライバ内に広報する関数で
ある。その後,kmutex_exit( &mutex )により,排他変
数mutex による排他制御を終了する。
への処理の中途半端な状態で回収処理が進んでしまわな
いように,リソースの回収処理スレッド(図示省略)
に,図4(C)に示す処理シーケンスを入れておくこと
が望ましい。この処理は,図4(A)に示す条件変数待
ち合わせ部42の処理と同様であるが,この処理をリソ
ースの回収処理スレッドに組み込んでおくことで,異常
時の不具合を解消し,かつ処理の画一化および処理の高
速化を実現することができる。
入出力処理の流れについて説明する。
呼び出しは,ユーザプロセススレッドPnから非同期入
出力関数であるaioread() によって行われる。aiorea
d() 関数は,ユーザ側の呼び出しにより起動され,デバ
イスドライバに対し非同期のリード処理を行うように要
求する関数である。この関数をエントリポイントとし
て,デバイスエントリDを通し,カーネルのデバイスド
ライバ側で,カーネルスレッドTn内のaread() 関数を
窓口として入出力処理に必要な引数の受け渡しが行われ
る。
d() からは,メモリ管理部26の関数を呼び出す。カー
ネルスレッドTn内のこの関数では,必要となる管理構
造体へ情報をリンクし,データの固定処理に必要とされ
るデータ領域Dnを確保する。確保に成功したら,デー
タの固定処理を非同期に呼び出すaphysio() 関数を呼び
出す。aphysio() は,デバイスドライバ側で呼び出され
る関数であり,該当するデバイスと入出力要求を管理す
る管理構造体の該当する要素が指し示すアドレス空間と
の間で,非同期の入出力オペレーションを行う関数であ
る。
では,strategy()関数の中で,実際に行う処理を記述す
るので,strategy()関数内でデータの固定処理を行うbp
_mapin() を呼び出す。なお,strategy()関数は,ブロ
ックデバイス上のデータの数ブロックを読み書きするた
めにカーネルによって間接的に呼び出される関数であ
り,本システムではaphysio() 関数によって呼び出され
る。bp_mapin() 関数は,デバイスドライバが仮想アド
レス空間を割り当てるのに用いる関数である。
数によってデータの固定処理を行うが,処理が終了次
第,条件変数condvar を用いて処理の終了を待つカーネ
ルスレッドTnに対し広報を行わせる。
26の関数では,この広報によって終了を検知し,ユー
ザに対して処理の終了の通知として,デバイスエントリ
Dを通して,ユーザプロセススレッドPnにおいてハン
ドルの払い出しを行う。
来技術との違いは,本方式では,条件変数condvar を用
いて複数のスレッドで処理を分担しているのに対し,従
来技術では,条件変数condvar を用いていないことであ
る。
数→aphysio() 関数→strategy()関数→bp_mapin() 関
数→メモリ管理部関数という一連の処理は,一つのスレ
ッドとして取り扱われている。したがって,このスレッ
ドが一連の処理を行っている間,他のスレッドはCPU
時間を取得できない。
に位置するstrategy()関数に導入した条件変数condvar
によってスレッドを切り離すことができるため,処理を
細分化し,他のスレッドにCPU時間を明け渡すことが
できる。特に,非同期の処理においては,該当の非同期
関数内で待ち合わせが発生する可能性があるため,CP
U時間が無駄になることがある。これを本方式によって
最小限に抑えることもできる。
処理においては,次のような副次的な効用がある。例え
ば上述した処理(1) 〜(5) のいずれかで異常系の障害が
起きたと仮定する。こうした場合,リソースの回収処理
を行わなければならない。本方式では,条件変数condva
r とともに取り入れた状態変数に,現在,データ領域の
固定を行っている状態を示す値を入れておく。そうすれ
ば,固定中のデータ領域の処理中にリソースの回収を行
って,オペレーティング・システムには致命的なパニッ
クが生じるのを回避することが可能となる。また,条件
変数condvar の広報は,このリソース回収処理スレッド
にも通知することで,データ領域固定を完了した静的な
状態で処理を行わせる契機となる。
にはリソースの回収処理の契機を得ることができない。
この場合,多くはメモリ管理関数について,リソース回
収処理などの関数と排他制御(mutex)を行う。こうした
場合,余計にCPU時間を占有することになる。
データの入出力を非同期に行う非同期データ入出力処理
において,データ領域の固定を行う処理で,システムの
条件変数とシステムの状態変数(フラグ)を導入するこ
とによって,一つのスレッドがCPU時間を保持し続け
ずに,他のスレッドと並列に処理を行うことが可能とな
り,入出力処理の効率を高めることができるようにな
る。
る。
る。
Claims (2)
- 【請求項1】 ユーザ空間のプロセスからの入出力処理
要求を非同期に処理する非同期データ入出力処理方法に
おいて,前記入出力処理要求を処理するスレッドを第1
のスレッドと第2のスレッドとに分離し,前記第1のス
レッドは,ユーザ空間のプロセスからデータの入出力処
理要求があった場合にデータ領域の確保を行った後,カ
ーネルシステムの条件変数を活用し,導入した状態変数
に適切な値を与えて前記第2のスレッドを呼び出し,他
のスレッドがCPU時間を確保できるように処理を中断
し,前記第2のスレッドは,一連の非同期のデータ入出
力のための処理を終えた後,前記条件変数を活用し,前
記状態変数に適切な値を書き込み,前記第1のスレッド
は,前記条件変数を活用し,前記状態変数の値が適切な
値になったことを確認して,中断していた処理を引き続
き実行することを特徴とする非同期データ入出力処理方
法。 - 【請求項2】 ユーザ空間のプロセスからの入出力処理
要求を非同期に処理する非同期データ入出力処理方法を
計算機に実行させるためのプログラムを記録した記録媒
体であって,前記入出力処理要求を処理する第1のスレ
ッドと第2のスレッドのプログラムを含み,前記第1の
スレッドのプログラムは,ユーザ空間のプロセスからデ
ータの入出力処理要求があった場合にデータ領域の確保
を行った後,カーネルシステムの条件変数を活用し,導
入した状態変数に適切な値を与えて前記第2のスレッド
を呼び出し,他のスレッドがCPU時間を確保できるよ
うに処理を中断し,前記条件変数を活用し,前記状態変
数が適切な値になったことを確認して,中断していた処
理を引き続き実行する処理を行い,前記第2のスレッド
のプログラムは,一連の非同期のデータ入出力のための
処理を終えた後,前記条件変数を活用し,前記状態変数
に適切な値を書き込む処理を行うことを特徴とする非同
期データ入出力処理プログラム記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11184583A JP2001014177A (ja) | 1999-06-30 | 1999-06-30 | 非同期データ入出力処理方法およびそのプログラム記録媒体 |
US09/593,425 US6754736B1 (en) | 1999-06-23 | 2000-06-14 | Information processing apparatus, data inputting/outputting method, and program storage medium therefor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11184583A JP2001014177A (ja) | 1999-06-30 | 1999-06-30 | 非同期データ入出力処理方法およびそのプログラム記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2001014177A true JP2001014177A (ja) | 2001-01-19 |
Family
ID=16155759
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11184583A Pending JP2001014177A (ja) | 1999-06-23 | 1999-06-30 | 非同期データ入出力処理方法およびそのプログラム記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2001014177A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005092875A (ja) * | 2003-08-29 | 2005-04-07 | Microsoft Corp | スレッドスケジューリングを使用してデータスループットを向上させるためのシステムおよび方法 |
-
1999
- 1999-06-30 JP JP11184583A patent/JP2001014177A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005092875A (ja) * | 2003-08-29 | 2005-04-07 | Microsoft Corp | スレッドスケジューリングを使用してデータスループットを向上させるためのシステムおよび方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US4685125A (en) | Computer system with tasking | |
US7840965B2 (en) | Selective generation of an asynchronous notification for a partition management operation in a logically-partitioned computer | |
US20040122953A1 (en) | Communication multiplexor for use with a database system implemented on a data processing system | |
JP2000242512A (ja) | 複数のオペレーティングシステムを実行する計算機 | |
AU603876B2 (en) | Multiple i/o bus virtual broadcast of programmed i/o instructions | |
JP3546694B2 (ja) | マルチスレッド計算機システム及びマルチスレッド実行制御方法 | |
JP2821345B2 (ja) | 非同期i/o制御方式 | |
JP2001014177A (ja) | 非同期データ入出力処理方法およびそのプログラム記録媒体 | |
JPH1011412A (ja) | マルチcpu構成システムにおける初期処理負荷分散方式 | |
JP2693916B2 (ja) | タスクスケジュール方法 | |
US7320044B1 (en) | System, method, and computer program product for interrupt scheduling in processing communication | |
EP0851352B1 (en) | Input/output control device and method applied to fault-resilient computer system | |
JP2585905B2 (ja) | マルチタスク実行装置 | |
JPH11161506A (ja) | 情報処理装置のディスパッチ方法、情報処理装置及びその記録媒体 | |
JPH04364550A (ja) | メモリ管理方法 | |
US5692191A (en) | Address space utilization in a distributed data processing system | |
JP3130892B2 (ja) | 二重化システム | |
JPH02158840A (ja) | タスク間通信用メッセージ領域制御方式 | |
JPH113231A (ja) | ソフトウェア処理方法 | |
JPH0573507A (ja) | 電子計算機間メツセージ交信時の救済装置 | |
JPH06187312A (ja) | マルチcpuシステムにおける処理方法および装置 | |
JPH07168794A (ja) | 計算機システムのジョブ管理方法 | |
JPS6048541A (ja) | 電子計算機システム | |
JPH02247748A (ja) | マルチプロセッサによるデータベース処理方式 | |
EP0598673A1 (en) | Method of and apparatus for providing a client/server architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060525 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20080421 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080507 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080704 |
|
RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20080704 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20080704 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080805 |