JPH08297585A - オペレーティングシステムによるデータ転送方法 - Google Patents
オペレーティングシステムによるデータ転送方法Info
- Publication number
- JPH08297585A JPH08297585A JP7101152A JP10115295A JPH08297585A JP H08297585 A JPH08297585 A JP H08297585A JP 7101152 A JP7101152 A JP 7101152A JP 10115295 A JP10115295 A JP 10115295A JP H08297585 A JPH08297585 A JP H08297585A
- Authority
- JP
- Japan
- Prior art keywords
- data
- resource
- input
- output
- input source
- 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
Abstract
(57)【要約】
【目的】アプリケーションプログラムからの要求にした
がって入力元リソースから出力先リソースへOSがデー
タを転送するときのオーバヘッドを軽減する。 【構成】ユーザプロセス1により、データ転送に使用す
る入力元リソースと出力先のリソースの対をチャネルと
してOSに指定し、チャネル登録処理部7によりこれを
チャネル構造体13A〜13Nの一つに登録する。さら
に、そのユーザプロセス1より、使用するチャネルと転
送すべきデータ量を指定して、OSにデータ転送を要求
する。転送処理部2の制御の元で、このチャネル用に、
OSカーネル空間内にバッファ10を確保し、入力先リ
ソースをアクセスするための入力処理部8と出力先リソ
ースをアクセスするための出力処理部9を選択し、選択
された入力処理部と出力処理部により、指定された量の
データの転送が終了するまでをこのバッファ10を繰返
し使用してデータ転送を繰り返す。
がって入力元リソースから出力先リソースへOSがデー
タを転送するときのオーバヘッドを軽減する。 【構成】ユーザプロセス1により、データ転送に使用す
る入力元リソースと出力先のリソースの対をチャネルと
してOSに指定し、チャネル登録処理部7によりこれを
チャネル構造体13A〜13Nの一つに登録する。さら
に、そのユーザプロセス1より、使用するチャネルと転
送すべきデータ量を指定して、OSにデータ転送を要求
する。転送処理部2の制御の元で、このチャネル用に、
OSカーネル空間内にバッファ10を確保し、入力先リ
ソースをアクセスするための入力処理部8と出力先リソ
ースをアクセスするための出力処理部9を選択し、選択
された入力処理部と出力処理部により、指定された量の
データの転送が終了するまでをこのバッファ10を繰返
し使用してデータ転送を繰り返す。
Description
【0001】
【産業上の利用分野】本発明は、計算機システムにおい
て、アプリケーションプログラムがオペレーティングシ
ステム(OS)に、特定のリソースが関与するデータ転
送を要求し、OSがそのリソースを用いてデータ転送を
実行するデータ転送方法に関する。
て、アプリケーションプログラムがオペレーティングシ
ステム(OS)に、特定のリソースが関与するデータ転
送を要求し、OSがそのリソースを用いてデータ転送を
実行するデータ転送方法に関する。
【0002】
【従来の技術】図13に示すように、代表的な計算機シ
ステム300上では、1つまたはそれ以上のプロセッサ
や主記憶を有する処理システム301内で動作するアプ
リケーションプログラム302が、OS(3)の管理の
下に、磁気ディスク装置304上のファイル307や、
ネットワーク305に接続された送受信回路内のバッフ
ァ、コンソールディスプレイ306内のビデオRAMあ
るいは同じ計算機上で走行する別のアプリケーションプ
ログラム303などに対して、データを入出力しつつ処
理を進めている。以下では、転送すべきデータの入力元
として使用される、磁気ディスク装置装置上のファイ
ル、ネットワークに接続された送受信回路内のバッフ
ァ、コンソールディスプレイ内のビデオRAM、アプリ
ケーションプログラムまたはその他の、入力元のデータ
を保持すると論理的に考えられるリソースを、互いに区
別しないで呼ぶときには、これらを「入力元リソース」
と呼び、そのデータの出力先としてこれらのリソースの
いずれかが使用されたとき、それらのリソースを「出力
先リソース」と呼ぶことにする。このようなリソースに
対するデータの入出力処理の一つは、入力元リソースか
らデータを読み出し、読み出されたデータに処理を施す
ことなく、出力先リソースにそのまま移動することであ
る。以下では、このようなデータ移動をデータ転送とも
呼ぶ。
ステム300上では、1つまたはそれ以上のプロセッサ
や主記憶を有する処理システム301内で動作するアプ
リケーションプログラム302が、OS(3)の管理の
下に、磁気ディスク装置304上のファイル307や、
ネットワーク305に接続された送受信回路内のバッフ
ァ、コンソールディスプレイ306内のビデオRAMあ
るいは同じ計算機上で走行する別のアプリケーションプ
ログラム303などに対して、データを入出力しつつ処
理を進めている。以下では、転送すべきデータの入力元
として使用される、磁気ディスク装置装置上のファイ
ル、ネットワークに接続された送受信回路内のバッフ
ァ、コンソールディスプレイ内のビデオRAM、アプリ
ケーションプログラムまたはその他の、入力元のデータ
を保持すると論理的に考えられるリソースを、互いに区
別しないで呼ぶときには、これらを「入力元リソース」
と呼び、そのデータの出力先としてこれらのリソースの
いずれかが使用されたとき、それらのリソースを「出力
先リソース」と呼ぶことにする。このようなリソースに
対するデータの入出力処理の一つは、入力元リソースか
らデータを読み出し、読み出されたデータに処理を施す
ことなく、出力先リソースにそのまま移動することであ
る。以下では、このようなデータ移動をデータ転送とも
呼ぶ。
【0003】近年分散ネットワークコンピューティング
や超並列プロセッサ計算機の普及、あるいはマルチメデ
ィアデータの利用拡大に伴い、データ転送の高速化が望
まれている。
や超並列プロセッサ計算機の普及、あるいはマルチメデ
ィアデータの利用拡大に伴い、データ転送の高速化が望
まれている。
【0004】従来のデータ転送の典型的な方法の一つ
が、例えば S. J. Leffler他著 "TheDesign and Implem
entation of the 4.3BSD UNIX Operating System," Add
ison-Wesley, PP.169-185 (1989) に詳しく説明され
ている。ここでは、ユーザプロセスがOSに対して、リ
ードシステムコールを発行して、データを所望の入力元
リソースからユーザプロセス内のバッファに読み出すこ
とを要求し、この読み出しの完了後に、このバッファ内
のデータを所望の出力先リソースに転送することを要求
するの及びライトシステムコール発行する。以下、所望
のデータが全て転送されるまで、これらのシステムコー
ルの発行を繰り返す。
が、例えば S. J. Leffler他著 "TheDesign and Implem
entation of the 4.3BSD UNIX Operating System," Add
ison-Wesley, PP.169-185 (1989) に詳しく説明され
ている。ここでは、ユーザプロセスがOSに対して、リ
ードシステムコールを発行して、データを所望の入力元
リソースからユーザプロセス内のバッファに読み出すこ
とを要求し、この読み出しの完了後に、このバッファ内
のデータを所望の出力先リソースに転送することを要求
するの及びライトシステムコール発行する。以下、所望
のデータが全て転送されるまで、これらのシステムコー
ルの発行を繰り返す。
【0005】例として、図2のように、ユーザプロセス
60において、磁気ディスク装置11上のファイル30
7内のデータを、ネットワーク12に出力する場合を考
える。なお、本明細書では、ユーザプロセスとは、OS
の管理の下に実行されるプログラムの制御の流れの単位
であり、文献によっては「プロセス」「タスク」「スレ
ッド」などとも呼ばれ、アプリケーションプログラムの
一部又は全部を構成するものである。また、この例で
は、ファイル307からデータを入力し、ネットワーク
12に出力する場合について述べるが、他の入力先リソ
ースあるいは他の出力先リソースに関しても同様であ
る。なお、ユーザプロセスからOSへのサービスの要求
は、ユーザプロセスがシステムコールをOSに発行する
ことにより行われる。OSでは、ディスパッチャがこの
システムコールを受け付け、どのようなサービスが要求
されているか否かを判定し、そのサービスを実行するた
めの、OS内の特定の処理部を呼び出す。しかし、後述
する実施例を含めて、以下の説明では、説明の簡単化の
ために、ディスパッチャには言及しないで、OSがシス
テムコールに応答してその特定の処理部を呼び出すと記
述する。
60において、磁気ディスク装置11上のファイル30
7内のデータを、ネットワーク12に出力する場合を考
える。なお、本明細書では、ユーザプロセスとは、OS
の管理の下に実行されるプログラムの制御の流れの単位
であり、文献によっては「プロセス」「タスク」「スレ
ッド」などとも呼ばれ、アプリケーションプログラムの
一部又は全部を構成するものである。また、この例で
は、ファイル307からデータを入力し、ネットワーク
12に出力する場合について述べるが、他の入力先リソ
ースあるいは他の出力先リソースに関しても同様であ
る。なお、ユーザプロセスからOSへのサービスの要求
は、ユーザプロセスがシステムコールをOSに発行する
ことにより行われる。OSでは、ディスパッチャがこの
システムコールを受け付け、どのようなサービスが要求
されているか否かを判定し、そのサービスを実行するた
めの、OS内の特定の処理部を呼び出す。しかし、後述
する実施例を含めて、以下の説明では、説明の簡単化の
ために、ディスパッチャには言及しないで、OSがシス
テムコールに応答してその特定の処理部を呼び出すと記
述する。
【0006】さて、ユーザプロセス60は、入力元リソ
ースとしてファイル307指定するオープンシステムコ
ールなどのシステムコールをOSに対して発行し、ファ
イル307に対する識別子としてOSで予め定められた
記述子をOSから得る。出力先リソースとして使用する
ネットワーク12に関しても同様である。これらの記述
子を得たユーザプロセス60は、次にファイル307に
対応する記述子と、ユーザメモリ空間内に設けたデータ
転送用のバッファ50のアドレスとその大きさを引数と
して指定して、データの読み出しを要求するリードシス
テムコール51を発行する。
ースとしてファイル307指定するオープンシステムコ
ールなどのシステムコールをOSに対して発行し、ファ
イル307に対する識別子としてOSで予め定められた
記述子をOSから得る。出力先リソースとして使用する
ネットワーク12に関しても同様である。これらの記述
子を得たユーザプロセス60は、次にファイル307に
対応する記述子と、ユーザメモリ空間内に設けたデータ
転送用のバッファ50のアドレスとその大きさを引数と
して指定して、データの読み出しを要求するリードシス
テムコール51を発行する。
【0007】OS3では、このシステムコール51を受
けて、ファイルシステム8を呼び出す。すなわち、OS
3は、このシステムコールを発行したユーザプロセス1
の状態を格納している4内の記述子テーブル45を、リ
ードシステムコール51の際に引数として指定された記
述子により参照し、この記述子に対応するエントリ14
から、カーネルファイルテーブル5内のエントリ16の
アドレス26を得る。カーネルファイルテーブル5は、
いろいろの入力処理部と出力処理部を起動するためのア
ドレスを保持するもので、今の例では、エントリ16内
に、上記システムコールで指定された入力元リソースか
らデータ入力を行なう時に呼び出すべき入力処理部、今
の例ではファイルシステム8、のアドレス28が納めら
れている。OS3はこのアドレス28を用いてファイル
システム8に対して関数呼び出しを行なう。
けて、ファイルシステム8を呼び出す。すなわち、OS
3は、このシステムコールを発行したユーザプロセス1
の状態を格納している4内の記述子テーブル45を、リ
ードシステムコール51の際に引数として指定された記
述子により参照し、この記述子に対応するエントリ14
から、カーネルファイルテーブル5内のエントリ16の
アドレス26を得る。カーネルファイルテーブル5は、
いろいろの入力処理部と出力処理部を起動するためのア
ドレスを保持するもので、今の例では、エントリ16内
に、上記システムコールで指定された入力元リソースか
らデータ入力を行なう時に呼び出すべき入力処理部、今
の例ではファイルシステム8、のアドレス28が納めら
れている。OS3はこのアドレス28を用いてファイル
システム8に対して関数呼び出しを行なう。
【0008】ファイルシステム8は、磁気ディスク装置
11上の然るべき領域に対する読み込み命令313を発
行し、要求されたデータをファイルシステム内に読み出
し(311)、さらにバッファ50に読み出されたデー
タを書き込む(55)。
11上の然るべき領域に対する読み込み命令313を発
行し、要求されたデータをファイルシステム内に読み出
し(311)、さらにバッファ50に読み出されたデー
タを書き込む(55)。
【0009】これでファイルシステム8の動作が終了
し、OS3からユーザプロセス60へ制御が戻る。ユ
ーザプロセス60がバッファ50に入力されたデータを
さらにネットワーク12に出力しようとする場合、ユー
ザプロセス60は、ネットワーク12を指定する記述子
と、バッファ50のアドレス及び大きさとを引数として
指定する、書き込み(ライト)システムコール53を発
行する。OS3では、リードシステムコールの場合と同
様にして、プロトコル処理部9が、バッファ50のデー
タを読み出し(58)、然るべきプロトコル処理を施し
た後、ネットワーク12へ出力する(314)。これで
バッファ50の大きさに相当するデータの転送が終了し
たが、ファイル307にまだ読み込むべきデータが残っ
ている場合は、ユーザプロセスによりシステムコール5
1、53の発行という手順が繰り返される。
し、OS3からユーザプロセス60へ制御が戻る。ユ
ーザプロセス60がバッファ50に入力されたデータを
さらにネットワーク12に出力しようとする場合、ユー
ザプロセス60は、ネットワーク12を指定する記述子
と、バッファ50のアドレス及び大きさとを引数として
指定する、書き込み(ライト)システムコール53を発
行する。OS3では、リードシステムコールの場合と同
様にして、プロトコル処理部9が、バッファ50のデー
タを読み出し(58)、然るべきプロトコル処理を施し
た後、ネットワーク12へ出力する(314)。これで
バッファ50の大きさに相当するデータの転送が終了し
たが、ファイル307にまだ読み込むべきデータが残っ
ている場合は、ユーザプロセスによりシステムコール5
1、53の発行という手順が繰り返される。
【0010】このような、データ転送の高速化を支援す
る様々な方法が提案されてきた。例えば、O. Krieger,
M. Stumm, and R. Unrau, "The Alloc Stream Facility
--A Redesign of Application-Level Stream I/O", IE
EE Computer, Vol.27, No.3, pp.75-82 (March 1994)
において説明されている、Alloc Stream Facility(A
SF)では、図2のバッファ50に相当する記憶領域を
カーネルメモリ空間に設けることにより、いずれかの入
力先リソースからこの記憶領域に読み出したデータをア
プリケーションプログラムがアクセス可能にし、もって
そのデータをアプリケーションプログラム内のバッファ
にコピーする操作を不要にしている。また、R. Govinda
n and D. P. Anderson, "Scheduling and IPC Mechanis
ms forContinuous Media", Proceedings of 13th ACM S
ymposium on Operating System Principles, pp.68-80
(1991)において説明されている、Memory-mapped Ster
ams (MMS)では、入力元リソースのデータを仮想記憶
空間上の領域にマップし、入力すべきデータをOSによ
り予め実記憶上に用意させ、これをアプリケーションプ
ログラムにより利用させることにより、アプリケーショ
ンプログラムによる、システムコールの発行回数を抑え
ている。
る様々な方法が提案されてきた。例えば、O. Krieger,
M. Stumm, and R. Unrau, "The Alloc Stream Facility
--A Redesign of Application-Level Stream I/O", IE
EE Computer, Vol.27, No.3, pp.75-82 (March 1994)
において説明されている、Alloc Stream Facility(A
SF)では、図2のバッファ50に相当する記憶領域を
カーネルメモリ空間に設けることにより、いずれかの入
力先リソースからこの記憶領域に読み出したデータをア
プリケーションプログラムがアクセス可能にし、もって
そのデータをアプリケーションプログラム内のバッファ
にコピーする操作を不要にしている。また、R. Govinda
n and D. P. Anderson, "Scheduling and IPC Mechanis
ms forContinuous Media", Proceedings of 13th ACM S
ymposium on Operating System Principles, pp.68-80
(1991)において説明されている、Memory-mapped Ster
ams (MMS)では、入力元リソースのデータを仮想記憶
空間上の領域にマップし、入力すべきデータをOSによ
り予め実記憶上に用意させ、これをアプリケーションプ
ログラムにより利用させることにより、アプリケーショ
ンプログラムによる、システムコールの発行回数を抑え
ている。
【0011】
【発明が解決しようとする課題】図2を用いて説明した
従来のデータ転送方法は、次の問題を有する。
従来のデータ転送方法は、次の問題を有する。
【0012】まず、ユーザプロセスとOSとの間で頻繁
に制御の行き来が生ずるため、これに由来するオーバヘ
ッドが大きい。すなわち、あるユーザプロセスがあるデ
ータを読み出すためにリードシステムコールを発行した
後、そのデータの読み出しが完了すると、OSは、完了
割り込みを発生し、その割り込みを処理するルーチンに
より、そのデータに対するリードシステムコールを発行
したユーザプロセスを見つけ、そのユーザプロセスにデ
ータの読み出しの完了を通知する。そのユーザプロセス
は、この完了通知を受けて、出力先リソースへの、その
データの書き込みを要求するライトシステムコールを発
行する。このように、データ転送のために繰り返しユー
ザプロセスとOSとの間で制御の行き来が生ずる。
に制御の行き来が生ずるため、これに由来するオーバヘ
ッドが大きい。すなわち、あるユーザプロセスがあるデ
ータを読み出すためにリードシステムコールを発行した
後、そのデータの読み出しが完了すると、OSは、完了
割り込みを発生し、その割り込みを処理するルーチンに
より、そのデータに対するリードシステムコールを発行
したユーザプロセスを見つけ、そのユーザプロセスにデ
ータの読み出しの完了を通知する。そのユーザプロセス
は、この完了通知を受けて、出力先リソースへの、その
データの書き込みを要求するライトシステムコールを発
行する。このように、データ転送のために繰り返しユー
ザプロセスとOSとの間で制御の行き来が生ずる。
【0013】とくに、入力元リソースから出力先リソー
スへのデータの転送の場合、多量のデータの転送に対し
て、リードシステムコールとライトシステムコールの対
を複数回発行する必要があり、この制御の往来の回数が
増大する。ユーザプロセスとOSとの間で制御の行き来
が生ずると、その際にユーザモード(いわゆる非特権保
護モード)とカーネルモード(いわゆる特権保護モー
ド)との間の、計算機のモード切り替えが必要となり、
このモード切り替えの際に発生するコンテクストスイッ
チングのための処理などがオーバヘッドとなる。
スへのデータの転送の場合、多量のデータの転送に対し
て、リードシステムコールとライトシステムコールの対
を複数回発行する必要があり、この制御の往来の回数が
増大する。ユーザプロセスとOSとの間で制御の行き来
が生ずると、その際にユーザモード(いわゆる非特権保
護モード)とカーネルモード(いわゆる特権保護モー
ド)との間の、計算機のモード切り替えが必要となり、
このモード切り替えの際に発生するコンテクストスイッ
チングのための処理などがオーバヘッドとなる。
【0014】さらに、マルチタスキング環境では、複数
のユーザプロセスが要求する複数のデータ転送の実行
を、効率的にスケジュールすることが難しい。この環境
下では、各ユーザプロセスは、OSによるスケジューリ
ングにより、プロセッサを割当てられた状態でしか処理
を進めることができない。すなわち、上記ユーザプロセ
スがデータ読み出しのために、リードシステムコールを
発行した後、上記データ読み出しの完了までの間に、そ
のユーザプロセスがプロセッサ待ちの状態になると、上
記読み出し完了の割り込みが発生しても、このユーザプ
ロセスは、そのユーザプロセスに実際にプロセッサが再
度割り当てるまで、そのデータに対してライトシステム
コールを発行することが出来ない。したがって、そのデ
ータの読み出しが終了しているにも拘らず、そのデータ
に対するライトシステムコールの発行が遅延する。この
ように、データ転送を要求するシステムコールの発行タ
イミングが、ユーザプロセスの状態に依存するため、こ
のデータの転送の実行をスケジュールすることは難し
い。さらに、この従来技術では、リソースを最大限有効
に利用するように、これらのデータ転送をスケジュール
することも難しい。すなわち、いずれかのユーザプロセ
スから現に発行されたシステムコールが要求する入力元
リソースあるいは出力先リソースが利用可能でないため
にそのシステムコールを実行できないが、他の空き状態
にある入力元リソースあるいは出力先リソースにを使用
するシステムコールがまだ他のユーザプロセスから発行
されていないという状態が起こり得る。各ユーザプロセ
スは、連続するデータを構成する複数のデータ部分を読
み出すために、複数のリードシステムコールと複数のラ
イトシステムコール交互に発行する。これらのシステム
コールの発行時刻は、各ユーザプロセスに依存するうえ
に、OSはこれらのシステムコールが現に発行された時
点でしか、スケジュールすべきシステムコールを知り得
ない。したがって、OSは、複数のユーザプロセスによ
り要求されるデータ転送を効率よく実行するようにスケ
ジュールできない。
のユーザプロセスが要求する複数のデータ転送の実行
を、効率的にスケジュールすることが難しい。この環境
下では、各ユーザプロセスは、OSによるスケジューリ
ングにより、プロセッサを割当てられた状態でしか処理
を進めることができない。すなわち、上記ユーザプロセ
スがデータ読み出しのために、リードシステムコールを
発行した後、上記データ読み出しの完了までの間に、そ
のユーザプロセスがプロセッサ待ちの状態になると、上
記読み出し完了の割り込みが発生しても、このユーザプ
ロセスは、そのユーザプロセスに実際にプロセッサが再
度割り当てるまで、そのデータに対してライトシステム
コールを発行することが出来ない。したがって、そのデ
ータの読み出しが終了しているにも拘らず、そのデータ
に対するライトシステムコールの発行が遅延する。この
ように、データ転送を要求するシステムコールの発行タ
イミングが、ユーザプロセスの状態に依存するため、こ
のデータの転送の実行をスケジュールすることは難し
い。さらに、この従来技術では、リソースを最大限有効
に利用するように、これらのデータ転送をスケジュール
することも難しい。すなわち、いずれかのユーザプロセ
スから現に発行されたシステムコールが要求する入力元
リソースあるいは出力先リソースが利用可能でないため
にそのシステムコールを実行できないが、他の空き状態
にある入力元リソースあるいは出力先リソースにを使用
するシステムコールがまだ他のユーザプロセスから発行
されていないという状態が起こり得る。各ユーザプロセ
スは、連続するデータを構成する複数のデータ部分を読
み出すために、複数のリードシステムコールと複数のラ
イトシステムコール交互に発行する。これらのシステム
コールの発行時刻は、各ユーザプロセスに依存するうえ
に、OSはこれらのシステムコールが現に発行された時
点でしか、スケジュールすべきシステムコールを知り得
ない。したがって、OSは、複数のユーザプロセスによ
り要求されるデータ転送を効率よく実行するようにスケ
ジュールできない。
【0015】本発明の目的は、アプリケーションプログ
ラムから要求されたデータ転送を実行する間に生じる、
そのユーザプロセスとOSの間の制御の往来を減少する
データ転送方法を提供することである。
ラムから要求されたデータ転送を実行する間に生じる、
そのユーザプロセスとOSの間の制御の往来を減少する
データ転送方法を提供することである。
【0016】本発明の他の目的は、複数のアプリケーシ
ョンプログラムが要求する複数のデータ転送の実行をO
Sによりスケジュールし易いデータ転送方法を提供する
ことである。
ョンプログラムが要求する複数のデータ転送の実行をO
Sによりスケジュールし易いデータ転送方法を提供する
ことである。
【0017】
【問題点を解決するための手段】上記目的を達成するた
めに、本発明では、アプリケーションプログラムによ
り、入力元リソースと出力先リソースの対(チャネル)
と転送すべきデータの量を指定して、それらのリソース
の間のデータ転送をオペレーティングシステムに要求
し、この要求に応答して、OSにより、この指定された
量のデータの転送を実行する。具体的には、OSが使用
可能なバッファを確保し、入力元リソースからデータを
読み出し、このバッファに読み出されたデータを書き込
み、その後この書き込まれたデータをこのバッファーか
ら出力先リソースに転送する。以上の読み出しから転送
までの動作を、上記の指定された量のデータが転送され
るまで繰り返す。この結果、アプリケーションプログラ
ムは一度のデータ転送要求をOSに発行するだけで、後
はOSが実際にデータ転送を繰返し実行する。したがっ
て、本発明では、ユーザプロセスとOSとの間の制御の
往来が非常に少なくなる。その結果、この際に必要とな
るユーザモードとカーネルモードとの間の計算機モード
の切り替えに伴うオーバヘッドが減少する。
めに、本発明では、アプリケーションプログラムによ
り、入力元リソースと出力先リソースの対(チャネル)
と転送すべきデータの量を指定して、それらのリソース
の間のデータ転送をオペレーティングシステムに要求
し、この要求に応答して、OSにより、この指定された
量のデータの転送を実行する。具体的には、OSが使用
可能なバッファを確保し、入力元リソースからデータを
読み出し、このバッファに読み出されたデータを書き込
み、その後この書き込まれたデータをこのバッファーか
ら出力先リソースに転送する。以上の読み出しから転送
までの動作を、上記の指定された量のデータが転送され
るまで繰り返す。この結果、アプリケーションプログラ
ムは一度のデータ転送要求をOSに発行するだけで、後
はOSが実際にデータ転送を繰返し実行する。したがっ
て、本発明では、ユーザプロセスとOSとの間の制御の
往来が非常に少なくなる。その結果、この際に必要とな
るユーザモードとカーネルモードとの間の計算機モード
の切り替えに伴うオーバヘッドが減少する。
【0018】さらに、本発明では、複数のアプリケーシ
ョンプログラムからのデータ転送要求の各々を上記の方
法で実行するとともに、それぞれのデータ転送要求のた
めのデータの読み出し及び書き込みの繰返しをOSによ
り制御する。この結果、複数のアプリケーションプログ
ラムプログラムが、複数の異なるチャネルにおけるデー
タ転送を要求しているような環境においても、これらの
データ転送の実行をOSによりスケジュールしやすくな
る。
ョンプログラムからのデータ転送要求の各々を上記の方
法で実行するとともに、それぞれのデータ転送要求のた
めのデータの読み出し及び書き込みの繰返しをOSによ
り制御する。この結果、複数のアプリケーションプログ
ラムプログラムが、複数の異なるチャネルにおけるデー
タ転送を要求しているような環境においても、これらの
データ転送の実行をOSによりスケジュールしやすくな
る。
【0019】
【実施例】以下、本発明に係るデータ転送方法を図面に
示した実施例および変形例を参照してさらに詳細に説明
する。
示した実施例および変形例を参照してさらに詳細に説明
する。
【0020】<実施例1>図1において、40は、入力
元リソースとして使用され得る入力装置を表わし、例え
ば、磁気ディスク装置、他の計算機システム等に接続さ
れたネットワーク、キーボードなどを示す。50は、出
力先リソースとして使用され得る出力装置を表わし、例
えば、上に述べた磁気ディスク装置と同じかもしくは異
なるディスク記憶装置、上のネットワークと同じネット
ワーク、あるいは他のキーボードなどを示す。
元リソースとして使用され得る入力装置を表わし、例え
ば、磁気ディスク装置、他の計算機システム等に接続さ
れたネットワーク、キーボードなどを示す。50は、出
力先リソースとして使用され得る出力装置を表わし、例
えば、上に述べた磁気ディスク装置と同じかもしくは異
なるディスク記憶装置、上のネットワークと同じネット
ワーク、あるいは他のキーボードなどを示す。
【0021】ユーザプロセス1は、データ転送をOS3
に要求するときに、従来と同様に、使用する入力元リソ
ースと出力先リソースの記述子をOSに決定して貰い、
データ転送の入力元リソースの記述子と出力先リソース
の記述子との対を指定するようになっている。以下で
は、データ転送すべき入力元リソースと出力先リソース
の組合せを「データ転送路」もしくは「チャネル」と呼
ぶ。20は、ユーザプロセスが使用する新たなシステム
コールとして用意されたもので、入力元リソースに対応
する記述子と出力先リソースに対応する記述子との対を
引数として含み、この対により指定されたチャネルを登
録することをOS3に要求するチャネルシステムコール
である。OS3では、チャネル登録処理部7が、このシ
ステムコールに応答して、このチャネルに関する情報を
保持するチャネル構造体を作成することにより、そのチ
ャネルを登録する。さらに、そのチャネルに対してチャ
ネル識別子を決定し、ユーザプロセス1にこのシステム
コールの戻り値としてこのチャネル識別子を返す。チャ
ネル構造体13A〜13Nは、登録されたいろいろのチ
ャネルの現在の状態を保持するもので、それらは互いに
チェインされて、チャネルリスト6が形成される。この
チャネルシステムコールは、さらに、そのチャネルを介
したデータ転送に使用するバッファの大きさを指定する
ようになっており、チャネル登録処理部7は、この指定
された大きさに基づいて、バッファのサイズを決め、さ
おの決められたサイズのバッファとして、カーネルアド
レス空間(カーネル空間)内に位置し、このOSが走行
する計算機システムの主記憶(図示せず)内の領域が割
り当てられたバッファ10を確保する。さらに、その決
められたバッファサイズをそのチャネル構造体内に書き
込む。
に要求するときに、従来と同様に、使用する入力元リソ
ースと出力先リソースの記述子をOSに決定して貰い、
データ転送の入力元リソースの記述子と出力先リソース
の記述子との対を指定するようになっている。以下で
は、データ転送すべき入力元リソースと出力先リソース
の組合せを「データ転送路」もしくは「チャネル」と呼
ぶ。20は、ユーザプロセスが使用する新たなシステム
コールとして用意されたもので、入力元リソースに対応
する記述子と出力先リソースに対応する記述子との対を
引数として含み、この対により指定されたチャネルを登
録することをOS3に要求するチャネルシステムコール
である。OS3では、チャネル登録処理部7が、このシ
ステムコールに応答して、このチャネルに関する情報を
保持するチャネル構造体を作成することにより、そのチ
ャネルを登録する。さらに、そのチャネルに対してチャ
ネル識別子を決定し、ユーザプロセス1にこのシステム
コールの戻り値としてこのチャネル識別子を返す。チャ
ネル構造体13A〜13Nは、登録されたいろいろのチ
ャネルの現在の状態を保持するもので、それらは互いに
チェインされて、チャネルリスト6が形成される。この
チャネルシステムコールは、さらに、そのチャネルを介
したデータ転送に使用するバッファの大きさを指定する
ようになっており、チャネル登録処理部7は、この指定
された大きさに基づいて、バッファのサイズを決め、さ
おの決められたサイズのバッファとして、カーネルアド
レス空間(カーネル空間)内に位置し、このOSが走行
する計算機システムの主記憶(図示せず)内の領域が割
り当てられたバッファ10を確保する。さらに、その決
められたバッファサイズをそのチャネル構造体内に書き
込む。
【0022】21は、ユーザプロセス用に設けられた他
のシステムコールで、これは、データ転送に使用するチ
ャネル識別子と転送データ量とを引数として含み、この
識別子で指定されるチャネルにおけるデータ転送をOS
3に要求するトランスファシステムコールである。OS
3では、転送処理部2がこのトランスファシステムコー
ルを受け付け、チャネルリスト6内の、このシステムコ
ールを発行したユーザプロセスに対して設けられたチャ
ネル構造体を参照しながら、要求されたデータ転送を行
なう。すなわち、本実施例では、ユーザプロセスが入力
元リソースと出力先リソースの対を指定するチャネル
し、この入力先リソース内の、ユーザプロセスが指定し
たデータの全てを、この出力先リソースへ転送し終るま
で、データ転送を入力元リソースと出力先リソースの間
で繰返し実行するように、転送処理部2がデータ転送を
制御するところに特徴がある。この結果、ユーザプロセ
スは、一度データ転送を要求するシステムコールをOS
を発行すればよい。したがって、従来のようにデータ転
送のためにユーザプロセスとOSとの間で頻繁に制御の
行き来が生じるようなことがないので、データ転送に付
随するオーバヘッドが小さくなる。
のシステムコールで、これは、データ転送に使用するチ
ャネル識別子と転送データ量とを引数として含み、この
識別子で指定されるチャネルにおけるデータ転送をOS
3に要求するトランスファシステムコールである。OS
3では、転送処理部2がこのトランスファシステムコー
ルを受け付け、チャネルリスト6内の、このシステムコ
ールを発行したユーザプロセスに対して設けられたチャ
ネル構造体を参照しながら、要求されたデータ転送を行
なう。すなわち、本実施例では、ユーザプロセスが入力
元リソースと出力先リソースの対を指定するチャネル
し、この入力先リソース内の、ユーザプロセスが指定し
たデータの全てを、この出力先リソースへ転送し終るま
で、データ転送を入力元リソースと出力先リソースの間
で繰返し実行するように、転送処理部2がデータ転送を
制御するところに特徴がある。この結果、ユーザプロセ
スは、一度データ転送を要求するシステムコールをOS
を発行すればよい。したがって、従来のようにデータ転
送のためにユーザプロセスとOSとの間で頻繁に制御の
行き来が生じるようなことがないので、データ転送に付
随するオーバヘッドが小さくなる。
【0023】より具体的には、OS(3)は、さらに、
従来技術と同様に、複数の入力元リソースからのデータ
の読み出しを行なうための複数の入力処理部8と、複数
の出力先リソースへのデータの書き込みを行なうための
複数の入力処理部9とを有し、転送処理部2は、そのシ
ステムコールが指定するチャネルに属する入力元リソー
スと出力先リソースを、そのシステムコールを発行した
ユーザプロセスに対応して設けられたチャネル構造体に
もとづいて判別し、その入力元リソースからの一定量の
データの読み出しを、その入力元リソースに体する入力
動作を行い得る、いずれか一つの入力処理部8に要求
し、この入力処理部8の制御により、そのデータがその
チャネル用に設けたバッファ10に読み出されると、そ
のチャネルに属する出力先リソース用に設けられたいず
れかの出力処理部9に、その読み出されたデータをその
出力先リソースに書き込むことを要求する。この書き込
みが終了後、上記読みだされたデータの後続のデータに
関して、データの読み出しと書き込みを、上記トランス
ファコールで指定された転送データ量のデータが転送さ
れるまで繰り返す。
従来技術と同様に、複数の入力元リソースからのデータ
の読み出しを行なうための複数の入力処理部8と、複数
の出力先リソースへのデータの書き込みを行なうための
複数の入力処理部9とを有し、転送処理部2は、そのシ
ステムコールが指定するチャネルに属する入力元リソー
スと出力先リソースを、そのシステムコールを発行した
ユーザプロセスに対応して設けられたチャネル構造体に
もとづいて判別し、その入力元リソースからの一定量の
データの読み出しを、その入力元リソースに体する入力
動作を行い得る、いずれか一つの入力処理部8に要求
し、この入力処理部8の制御により、そのデータがその
チャネル用に設けたバッファ10に読み出されると、そ
のチャネルに属する出力先リソース用に設けられたいず
れかの出力処理部9に、その読み出されたデータをその
出力先リソースに書き込むことを要求する。この書き込
みが終了後、上記読みだされたデータの後続のデータに
関して、データの読み出しと書き込みを、上記トランス
ファコールで指定された転送データ量のデータが転送さ
れるまで繰り返す。
【0024】本実施例では、複数のユーザプロセスが複
数のチャネルをOSに登録してデータ転送を行なわせる
ことができる構造となっている。しかし、図1では、簡
単化のために、チャネル構造体以外は、1つのユーザプ
ロセスが登録した、1つのチャネルに関連する部分のみ
を図示し、その他は省略している。
数のチャネルをOSに登録してデータ転送を行なわせる
ことができる構造となっている。しかし、図1では、簡
単化のために、チャネル構造体以外は、1つのユーザプ
ロセスが登録した、1つのチャネルに関連する部分のみ
を図示し、その他は省略している。
【0025】転送制御部2は、以上のデータ転送を複数
のユーザプロセスから要求された複数のデータ転送の各
々に対して実行し、かつ、これらの複数のデータ転送を
並列に実行するように、これらのデータ転送のためのデ
ータの読み込みとデータの書き出しをスケジュールす
る。このために、本実施例では、転送制御部2は、チャ
ネルリスト6を繰返し走査して、それぞれのチャネル構
造体が指定する、入力元リソースからのデータ入力ある
いは出力先リソースからのデータ出力のいずれを実行す
べきかを判定し、その実行すべきデータ入力あるいはデ
ータ出力を実行する、然るべき入力処理部8または出力
処理部9に、入力要求あるいは出力要求を発行する。こ
の入力要求あるいは出力要求に基づいて、データの読み
込みがそのチャネルに体して実行されているのと並行し
て、転送制御部2は、チャネルリスト2の後続のチャネ
ル構造体に対して、上に述べたのと同じ処理を実行す
る。
のユーザプロセスから要求された複数のデータ転送の各
々に対して実行し、かつ、これらの複数のデータ転送を
並列に実行するように、これらのデータ転送のためのデ
ータの読み込みとデータの書き出しをスケジュールす
る。このために、本実施例では、転送制御部2は、チャ
ネルリスト6を繰返し走査して、それぞれのチャネル構
造体が指定する、入力元リソースからのデータ入力ある
いは出力先リソースからのデータ出力のいずれを実行す
べきかを判定し、その実行すべきデータ入力あるいはデ
ータ出力を実行する、然るべき入力処理部8または出力
処理部9に、入力要求あるいは出力要求を発行する。こ
の入力要求あるいは出力要求に基づいて、データの読み
込みがそのチャネルに体して実行されているのと並行し
て、転送制御部2は、チャネルリスト2の後続のチャネ
ル構造体に対して、上に述べたのと同じ処理を実行す
る。
【0026】具体的には、転送制御部2は、いずれかの
走査されたチャネル構造体が指定するチャネルに関し
て、その入力元リソースからそのチャネル用のバッファ
へのデータの読み出しがなされていないときには、デー
タの読み出しを要求し、その入力元リソースからそのバ
ッファへのデータの読み出しが終了している場合には、
そのデータの、そのバッファから出力先リソースへの書
き出しを要求する。さらに、このデータの書き出しが終
了している場合には、再度、入力元リソースからそのバ
ッファへの後続のデータの読み出しを要求する。こよう
な制御のために、各チャネル構造体には、データの読み
込みが終了したか否かの情報と、データの書き出しが終
了したか否かの情報と、ユーザプロセスに要求された転
送データ量、すでに読み込まれたデータの総量、すでに
書き出されたデータの総量などを保持するようになって
いて、そのチャネル構造体が代表するチャネルに関し
て、データの読み込みあるいはデータの書き出しが終了
した時点で、これらの情報を更新するようになってい
る。
走査されたチャネル構造体が指定するチャネルに関し
て、その入力元リソースからそのチャネル用のバッファ
へのデータの読み出しがなされていないときには、デー
タの読み出しを要求し、その入力元リソースからそのバ
ッファへのデータの読み出しが終了している場合には、
そのデータの、そのバッファから出力先リソースへの書
き出しを要求する。さらに、このデータの書き出しが終
了している場合には、再度、入力元リソースからそのバ
ッファへの後続のデータの読み出しを要求する。こよう
な制御のために、各チャネル構造体には、データの読み
込みが終了したか否かの情報と、データの書き出しが終
了したか否かの情報と、ユーザプロセスに要求された転
送データ量、すでに読み込まれたデータの総量、すでに
書き出されたデータの総量などを保持するようになって
いて、そのチャネル構造体が代表するチャネルに関し
て、データの読み込みあるいはデータの書き出しが終了
した時点で、これらの情報を更新するようになってい
る。
【0027】本実施例では、チャネルリストを走査する
契機は、いずれかのユーザプロセスから新にトランスフ
ァコールが発行されたことがチャネル登録部7から通知
された場合、あるいは、いずれかのチャネルに関して、
データの読み込みが終了したことがいずれかの入力処理
部8から通知された場合、あるいは、データの書き出し
が終了したことがいずれかの出力処理部9から通知され
た場合である。
契機は、いずれかのユーザプロセスから新にトランスフ
ァコールが発行されたことがチャネル登録部7から通知
された場合、あるいは、いずれかのチャネルに関して、
データの読み込みが終了したことがいずれかの入力処理
部8から通知された場合、あるいは、データの書き出し
が終了したことがいずれかの出力処理部9から通知され
た場合である。
【0028】したがって、本実施例では、複数のデータ
転送の間に頻繁に発生する呼び出しは、転送処理部2か
ら入力処理部8の呼び出し31、出力処理部9の呼び出
し34、及びそれらの逆である入力処理部8から転送処
理部2の呼び出し32および出力処理部9から転送処理
部2の呼び出し33であるが、これらはすべて、システ
ムコールのような割込み(トラップ)ではなく、サブル
ーチン呼び出しで呼び出しであることに注意すべきであ
る。これにより、これらのデータ転送を小さいオーバヘ
ッドで行なうことができる。
転送の間に頻繁に発生する呼び出しは、転送処理部2か
ら入力処理部8の呼び出し31、出力処理部9の呼び出
し34、及びそれらの逆である入力処理部8から転送処
理部2の呼び出し32および出力処理部9から転送処理
部2の呼び出し33であるが、これらはすべて、システ
ムコールのような割込み(トラップ)ではなく、サブル
ーチン呼び出しで呼び出しであることに注意すべきであ
る。これにより、これらのデータ転送を小さいオーバヘ
ッドで行なうことができる。
【0029】以上のごとく、本実施例では、複数のチャ
ネルにおけるデータ転送をOS内で制御することができ
る。この結果、たとえ、データ転送を要求したユーザプ
ロセスが、その後、プロセッサ待ちの状態になっても、
OSは、そのユーザプロセスがすでに要求したデータ転
送を継続することが出来る。また、複数のチャネルにお
いてデータ転送が行なわれている場合でも、1つ1つの
チャネルにおけるデータの流れを容易に制御できる。
ネルにおけるデータ転送をOS内で制御することができ
る。この結果、たとえ、データ転送を要求したユーザプ
ロセスが、その後、プロセッサ待ちの状態になっても、
OSは、そのユーザプロセスがすでに要求したデータ転
送を継続することが出来る。また、複数のチャネルにお
いてデータ転送が行なわれている場合でも、1つ1つの
チャネルにおけるデータの流れを容易に制御できる。
【0030】なお、本実施例でも、図2に示した従来技
術と同様に、複数の入力処理部8と複数の出力処理部の
アドレスを保持するカーネルファイルテーブル5と、各
プロセスに関する情報を保持するプロセス構造体4とが
設けられている。この4には、従来と同様に、記述子テ
ーブル45が設けられている。この記述子テーブル45
には、このプロセスが使用するチャネルに対する入力動
作を実行する一つの入力処理部8のアドレスを保持す
る、カーネルファイルテーブル内のエントリ16のアド
レス14と、そのチャネルに対する出力動作を実行する
一つの出力処理部9のアドレスを保持する、カーネルフ
ァイルテーブル内のエントリ17のアドレス115、お
よび、その記述子に対して次に入出力動作を行おうとす
る時に、入出力を行う位置を示すファイルポインタとを
保持する。以下、本実施例の動作を詳細に説明する。
術と同様に、複数の入力処理部8と複数の出力処理部の
アドレスを保持するカーネルファイルテーブル5と、各
プロセスに関する情報を保持するプロセス構造体4とが
設けられている。この4には、従来と同様に、記述子テ
ーブル45が設けられている。この記述子テーブル45
には、このプロセスが使用するチャネルに対する入力動
作を実行する一つの入力処理部8のアドレスを保持す
る、カーネルファイルテーブル内のエントリ16のアド
レス14と、そのチャネルに対する出力動作を実行する
一つの出力処理部9のアドレスを保持する、カーネルフ
ァイルテーブル内のエントリ17のアドレス115、お
よび、その記述子に対して次に入出力動作を行おうとす
る時に、入出力を行う位置を示すファイルポインタとを
保持する。以下、本実施例の動作を詳細に説明する。
【0031】(記述子テーブルとカーネルファイルテー
ブル)ユーザプロセス1は、データ転送をOSに要求す
る前に、以下のような処理を従来技術と同様に実行す
る。
ブル)ユーザプロセス1は、データ転送をOSに要求す
る前に、以下のような処理を従来技術と同様に実行す
る。
【0032】OSは予めカーネルファイルテーブル5を
従来技術と同様に、予め作成する。このテーブル5は、
各入力処理部8と各出力処理部9を起動するのに使用す
る、それぞれの処理部のアドレスを保持している。ま
た、各ユーザプロセスは、自分の現在の状態を保持する
プロセス構造体をOS内に持っている。
従来技術と同様に、予め作成する。このテーブル5は、
各入力処理部8と各出力処理部9を起動するのに使用す
る、それぞれの処理部のアドレスを保持している。ま
た、各ユーザプロセスは、自分の現在の状態を保持する
プロセス構造体をOS内に持っている。
【0033】ユーザプロセス1が使用する入力元リソー
スまたは出力先リソースの記述子の決定は以下のように
従来と同様にして行われる。
スまたは出力先リソースの記述子の決定は以下のように
従来と同様にして行われる。
【0034】走行中のユーザプロセスの各々には、予
め、例えば、そのユーザプロセスの起動時にOS3によ
り4が割り当てられる。いずれかのユーザプロセスが、
いずれかのディスク記憶装置に保持されたファイル内の
データを利用するとき、そのユーザプロセスは、そのフ
ァイルの名称と、ファイル内のデータの内、使用すべき
データの先頭アドレスを指定するオープンシステムコー
ルというシステムコールをOSに発行する。OSはこの
システムコールに応答して、このファイルに対する記述
子を決定して、ユーザプロセスに通知するとともに、こ
の記述子に対応して記述子テーブル45の1つのエント
リ14を割当てる。このエントリ14は、このファイル
を保持するディスク装置をアクセスするために用意され
た、例えば、ファイルシステムと呼ばれる、一つの入出
力処理部8のアドレスを保持する、カーネルファイルテ
ーブル5内のエントリ16のアドレスを保持する。さら
に、エントリ16は、オープンシステムコールで指定さ
れた、このファイルの名称を保持している。およびファ
イル内の読み出すべきデータの先頭アドレスは、記述子
テーブル45内のエントリ14に、既に述べたファイル
ポインタとして格納される。このファイルポインタは、
そのファイルのどの位置から入力すべきかを示す情報と
して、入力処理部8(この例ではファイルシステム)に
より参照される。次に同様にして、上記ユーザプロセス
は、例えば上のファイルのデータを他のファイルに転送
したい場合、そのファイルに関しても同様なオープンシ
ステムコールをOSに発行する。このシステムコールも
同様に処理され、記述子テーブル45には、同様に、こ
の他のファイルに関する、テーブル5のエントリ17の
アドレス15が格納される。
め、例えば、そのユーザプロセスの起動時にOS3によ
り4が割り当てられる。いずれかのユーザプロセスが、
いずれかのディスク記憶装置に保持されたファイル内の
データを利用するとき、そのユーザプロセスは、そのフ
ァイルの名称と、ファイル内のデータの内、使用すべき
データの先頭アドレスを指定するオープンシステムコー
ルというシステムコールをOSに発行する。OSはこの
システムコールに応答して、このファイルに対する記述
子を決定して、ユーザプロセスに通知するとともに、こ
の記述子に対応して記述子テーブル45の1つのエント
リ14を割当てる。このエントリ14は、このファイル
を保持するディスク装置をアクセスするために用意され
た、例えば、ファイルシステムと呼ばれる、一つの入出
力処理部8のアドレスを保持する、カーネルファイルテ
ーブル5内のエントリ16のアドレスを保持する。さら
に、エントリ16は、オープンシステムコールで指定さ
れた、このファイルの名称を保持している。およびファ
イル内の読み出すべきデータの先頭アドレスは、記述子
テーブル45内のエントリ14に、既に述べたファイル
ポインタとして格納される。このファイルポインタは、
そのファイルのどの位置から入力すべきかを示す情報と
して、入力処理部8(この例ではファイルシステム)に
より参照される。次に同様にして、上記ユーザプロセス
は、例えば上のファイルのデータを他のファイルに転送
したい場合、そのファイルに関しても同様なオープンシ
ステムコールをOSに発行する。このシステムコールも
同様に処理され、記述子テーブル45には、同様に、こ
の他のファイルに関する、テーブル5のエントリ17の
アドレス15が格納される。
【0035】(チャネル構造体)チャネル構造体13
は、入力元リソースから出力先リソースへの1つのデー
タ転送の、現時点における状態が格納されるデータ構造
である。図3に示すように、チャネル構造体13は以下
の情報を格納する記憶領域を含んでいる。
は、入力元リソースから出力先リソースへの1つのデー
タ転送の、現時点における状態が格納されるデータ構造
である。図3に示すように、チャネル構造体13は以下
の情報を格納する記憶領域を含んでいる。
【0036】フラグ141は、そのチャネルの状態を数
値化し、要約して示すものである。数値化されるべき状
態の主なものは、次の通りである。すなわち、ユーザの
要求したデータ転送が終了したことを示すフラグCHDON
E、チャネルにおいてデータ転送を行なっている際にエ
ラーが発生したことを示すフラグCHERROR、チャネルシ
ステムコール20によって登録された後、トランスファ
システムコール21によって転送開始を要求されるのを
待っている状態であることを示すフラグCHWAIT、入力元
リソースからこれ以上データを読み込めないことを示す
フラグCHEOFなどである。ここでフラグCHDONE、CHERRO
R、CHWAIT、CHEOFなどは、同時にセットされても識別で
きるような、互いに異なるフラグである。
値化し、要約して示すものである。数値化されるべき状
態の主なものは、次の通りである。すなわち、ユーザの
要求したデータ転送が終了したことを示すフラグCHDON
E、チャネルにおいてデータ転送を行なっている際にエ
ラーが発生したことを示すフラグCHERROR、チャネルシ
ステムコール20によって登録された後、トランスファ
システムコール21によって転送開始を要求されるのを
待っている状態であることを示すフラグCHWAIT、入力元
リソースからこれ以上データを読み込めないことを示す
フラグCHEOFなどである。ここでフラグCHDONE、CHERRO
R、CHWAIT、CHEOFなどは、同時にセットされても識別で
きるような、互いに異なるフラグである。
【0037】リストポインタ142は、別のチャネル構
造体へのポインタを格納する。このリストポインタ14
2を用いてすべてのチャネルを結合し、チャネルリスト
6を構成する。リストポインタ142の値を一定の値
(例えば0)にすることにより、このチャネル構造体が
リストの最後であることを示すことができる。
造体へのポインタを格納する。このリストポインタ14
2を用いてすべてのチャネルを結合し、チャネルリスト
6を構成する。リストポインタ142の値を一定の値
(例えば0)にすることにより、このチャネル構造体が
リストの最後であることを示すことができる。
【0038】プロセスポインタ143は、このチャネル
を登録したユーザプロセスの、プロセス構造体4へのポ
インタを格納する。
を登録したユーザプロセスの、プロセス構造体4へのポ
インタを格納する。
【0039】入力記述子144は、バッファ10へデー
タの入力を行なう時の入力元リソースを指定する記述子
を格納する。この入力記述子144と、プロセスポイン
タ143により、このチャネルにおいてデータの入力を
行なう際に、呼び出すべき入力処理部8を見出すことが
できる。
タの入力を行なう時の入力元リソースを指定する記述子
を格納する。この入力記述子144と、プロセスポイン
タ143により、このチャネルにおいてデータの入力を
行なう際に、呼び出すべき入力処理部8を見出すことが
できる。
【0040】出力記述子145は、バッファ10に置か
れたデータを出力する時の出力先リソースを指定する記
述子を格納する。転送処理部2は、出力記述子146
と、プロセスポインタ143により、このチャネルにお
ける出力処理部9を見出すことが出来る。
れたデータを出力する時の出力先リソースを指定する記
述子を格納する。転送処理部2は、出力記述子146
と、プロセスポインタ143により、このチャネルにお
ける出力処理部9を見出すことが出来る。
【0041】チャネル識別子146は、ユーザプロセス
がトランスファシステムコール21によりデータ転送を
要求する際に、データ転送を実行すべきチャネルを指定
するのに用いられる。
がトランスファシステムコール21によりデータ転送を
要求する際に、データ転送を実行すべきチャネルを指定
するのに用いられる。
【0042】バイトカウンタ147は、データ転送を行
なうべきバイト数を格納する。この値が負の数である場
合、入力元リソースから入力できるデータがなくなるま
でデータ転送を行なうことを示す。
なうべきバイト数を格納する。この値が負の数である場
合、入力元リソースから入力できるデータがなくなるま
でデータ転送を行なうことを示す。
【0043】バッファ管理構造体150は、チャネル構
造体13に含まれるデータ構造で、そのチャネルにおけ
るデータ転送のために割り当てられたバッファ10を管
理するためのものである。本実施例では、バッファ10
はOS3のカーネル空間内に静的に割り当てられた連続
した記憶領域とするが、バッファ10は、入力元リソー
スから入力したデータを出力先リソースに出力するまで
の間一時的に格納しておくことができれば十分なので、
メモリ空間を利用してバッファ10を実現する方法とし
ては、記憶領域を動的に割り当てるやり方など、本実施
例とは異なるバッファ管理の方法を用いることもでき
る。本実施例では、バッファ管理構造体150は、以下
のような情報を含む。
造体13に含まれるデータ構造で、そのチャネルにおけ
るデータ転送のために割り当てられたバッファ10を管
理するためのものである。本実施例では、バッファ10
はOS3のカーネル空間内に静的に割り当てられた連続
した記憶領域とするが、バッファ10は、入力元リソー
スから入力したデータを出力先リソースに出力するまで
の間一時的に格納しておくことができれば十分なので、
メモリ空間を利用してバッファ10を実現する方法とし
ては、記憶領域を動的に割り当てるやり方など、本実施
例とは異なるバッファ管理の方法を用いることもでき
る。本実施例では、バッファ管理構造体150は、以下
のような情報を含む。
【0044】バッファポインタ151は、このチャネル
におけるデータ転送のために割り当てられた記憶領域で
あるバッファ10へのポインタを格納する。データポイ
ンタ152には、バッファ10上の次に出力すべきデー
タのアドレスを格納する。入力データカウンタ153
は、これまでに入力したデータのバイト数を保持する。
さらに、出力データカウンタ154は、これまでに出力
したデータのバイト数を保持する。
におけるデータ転送のために割り当てられた記憶領域で
あるバッファ10へのポインタを格納する。データポイ
ンタ152には、バッファ10上の次に出力すべきデー
タのアドレスを格納する。入力データカウンタ153
は、これまでに入力したデータのバイト数を保持する。
さらに、出力データカウンタ154は、これまでに出力
したデータのバイト数を保持する。
【0045】(チャネルシステムコール)本実施例にお
いては、ユーザプロセスがデータ転送をOSに要求する
ときに、チャネルシステムコールにより、入力元リソー
スと出力先リソースとの対を指定してチャネルを登録す
る必要がある。チャネルシステムコールは、次のような
形式である。
いては、ユーザプロセスがデータ転送をOSに要求する
ときに、チャネルシステムコールにより、入力元リソー
スと出力先リソースとの対を指定してチャネルを登録す
る必要がある。チャネルシステムコールは、次のような
形式である。
【0046】チャネル(入力記述子,出力記述子,バッ
ファサイズ) ここで、入力記述子は入力元リソースに対応する記述
子、出力記述子は出力先リソースに対応する記述子であ
る。これらの記述子は、ユーザプロセス1が利用予定の
入力元リソースと出力先リソースをOSに指定し、それ
らのリソースに対する記述子をOSから予め得ておく。
これらの記述子をOSから得るには、従来技術で記載し
たような公知の方法を使用すればよい。バッファサイズ
は、このチャネルにおけるデータ転送のために確保すべ
きバッファ10の大きさである。
ファサイズ) ここで、入力記述子は入力元リソースに対応する記述
子、出力記述子は出力先リソースに対応する記述子であ
る。これらの記述子は、ユーザプロセス1が利用予定の
入力元リソースと出力先リソースをOSに指定し、それ
らのリソースに対する記述子をOSから予め得ておく。
これらの記述子をOSから得るには、従来技術で記載し
たような公知の方法を使用すればよい。バッファサイズ
は、このチャネルにおけるデータ転送のために確保すべ
きバッファ10の大きさである。
【0047】(チャネル登録処理部7)OS3では、こ
のチャネルシステムコールを受けて、チャネル登録処理
部7を呼び出す。チャネル登録処理部7は、図5に示す
ように、新しいチャネル構造体13をカーネル空間内に
確保する(ステップ121)。具体的な領域確保の方法
は様々であり、OSがサポートしているメモリ割り当て
ルーチンを用いてもいいし、あらかじめ大きな領域を確
保しておき、そこをチャネル構造体のプールとして用い
ても良い。次にこのチャネル構造体を、発行されたチャ
ネル・システム・コールの引数をもとに初期化する(ス
テップ122)。初期化としてはプロセス・ポインタ1
43、入力記述子145及び出力記述子146の設定な
どを含むが、特に、チャネル構造体のフラグ141の部
分には、フラグCHWAITをセットし、このチャネルはトラ
ンスファ・システム・コールによるデータ転送の開始を
待っていることを明示する。次に、このチャネル構造体
をチャネルリスト6に追加する(ステップ123)。リ
スト6のどこにこのチャネル構造体を追加するかは様々
である。次に、データ転送用のバッファ10のための領
域をカーネル空間内に確保し、そのアドレスをチャネル
構造体のバッファ・ポインタ144に格納する(ステッ
プ124)。より具体的な領域確保の方法はチャネル構
造体を割り当る時と同様に様々である。OSは、このバ
ッファのサイズを、チャネルシステムコマンドで指定さ
れたサイズを参考にして決める。バッファサイズが指定
されない場合、指定されたバッファサイズが不適切な場
合、あるいは性能上より好ましいバッファサイズがある
場合には、OSは、チャネルシステムコマンドで指定さ
れたサイズとは異なるサイズのバッファをカーネル空間
内に確保することもありうる。最後に、このチャネルを
識別できる識別番号を1つ決定し、それをこのチャネル
の識別子としてチャネル構造体のチャネル識別子147
に格納する。その後、この値を戻り値としてユーザプロ
セスに通知する(ステップ125)。なお、チャネルシ
ステムコールの引数が不正であるなどの原因によりチャ
ネルの登録に失敗したときは、システムコールの戻り値
を−1としてその旨をユーザプロセスに通知する。
のチャネルシステムコールを受けて、チャネル登録処理
部7を呼び出す。チャネル登録処理部7は、図5に示す
ように、新しいチャネル構造体13をカーネル空間内に
確保する(ステップ121)。具体的な領域確保の方法
は様々であり、OSがサポートしているメモリ割り当て
ルーチンを用いてもいいし、あらかじめ大きな領域を確
保しておき、そこをチャネル構造体のプールとして用い
ても良い。次にこのチャネル構造体を、発行されたチャ
ネル・システム・コールの引数をもとに初期化する(ス
テップ122)。初期化としてはプロセス・ポインタ1
43、入力記述子145及び出力記述子146の設定な
どを含むが、特に、チャネル構造体のフラグ141の部
分には、フラグCHWAITをセットし、このチャネルはトラ
ンスファ・システム・コールによるデータ転送の開始を
待っていることを明示する。次に、このチャネル構造体
をチャネルリスト6に追加する(ステップ123)。リ
スト6のどこにこのチャネル構造体を追加するかは様々
である。次に、データ転送用のバッファ10のための領
域をカーネル空間内に確保し、そのアドレスをチャネル
構造体のバッファ・ポインタ144に格納する(ステッ
プ124)。より具体的な領域確保の方法はチャネル構
造体を割り当る時と同様に様々である。OSは、このバ
ッファのサイズを、チャネルシステムコマンドで指定さ
れたサイズを参考にして決める。バッファサイズが指定
されない場合、指定されたバッファサイズが不適切な場
合、あるいは性能上より好ましいバッファサイズがある
場合には、OSは、チャネルシステムコマンドで指定さ
れたサイズとは異なるサイズのバッファをカーネル空間
内に確保することもありうる。最後に、このチャネルを
識別できる識別番号を1つ決定し、それをこのチャネル
の識別子としてチャネル構造体のチャネル識別子147
に格納する。その後、この値を戻り値としてユーザプロ
セスに通知する(ステップ125)。なお、チャネルシ
ステムコールの引数が不正であるなどの原因によりチャ
ネルの登録に失敗したときは、システムコールの戻り値
を−1としてその旨をユーザプロセスに通知する。
【0048】このチャネル識別子は、その後ユーザプロ
セスがデータ転送をOS3に要求する時に、転送を行な
うべきチャネルを指定するのに用いられる。1つのユー
ザプロセスは、複数のチャネルを登録できる。チャネル
識別子の役割は、トランスファシステムコールを受けた
転送処理部2がチャネル(より正確にはチャネル構造
体)を一意に識別できるようにするためのもので、この
条件を満たす限りどのようなチャネル識別子の選び方を
してもかまわない。考えられる方法の1つとして、チャ
ネル識別子を、記述子の1つとして扱うというやり方が
考えられる。この場合、チャネル識別子を決めるには、
従来のOSに備わったルーチンを呼び出して、使用され
ていない(入出力先リソースが対応付けられていない)
記述子を見出し、それをチャネル識別子とすれば良い。
こうすることにより、オペレーティングシステムに従来
から備わる、記述子を操作するシステムコールが、チャ
ネルに対しても有効となるという利点がある。例とし
て、従来技術で挙げた代表的なオペレーティングシステ
ムが備えるフォークシステムコールにより、新たにユー
ザプロセスを生成する場合を考える。フォークシステム
コールでは、新しいユーザプロセス(子プロセス)は、
元のユーザプロセス(親プロセス)の記述子をそのまま
受け継ぐことができるという機能を持つ。そのため、親
プロセスが登録したチャネルを、チャネルを引き継ぐ機
能をOSに新設することなく、新しいユーザプロセスに
受け継がせることが可能となる。
セスがデータ転送をOS3に要求する時に、転送を行な
うべきチャネルを指定するのに用いられる。1つのユー
ザプロセスは、複数のチャネルを登録できる。チャネル
識別子の役割は、トランスファシステムコールを受けた
転送処理部2がチャネル(より正確にはチャネル構造
体)を一意に識別できるようにするためのもので、この
条件を満たす限りどのようなチャネル識別子の選び方を
してもかまわない。考えられる方法の1つとして、チャ
ネル識別子を、記述子の1つとして扱うというやり方が
考えられる。この場合、チャネル識別子を決めるには、
従来のOSに備わったルーチンを呼び出して、使用され
ていない(入出力先リソースが対応付けられていない)
記述子を見出し、それをチャネル識別子とすれば良い。
こうすることにより、オペレーティングシステムに従来
から備わる、記述子を操作するシステムコールが、チャ
ネルに対しても有効となるという利点がある。例とし
て、従来技術で挙げた代表的なオペレーティングシステ
ムが備えるフォークシステムコールにより、新たにユー
ザプロセスを生成する場合を考える。フォークシステム
コールでは、新しいユーザプロセス(子プロセス)は、
元のユーザプロセス(親プロセス)の記述子をそのまま
受け継ぐことができるという機能を持つ。そのため、親
プロセスが登録したチャネルを、チャネルを引き継ぐ機
能をOSに新設することなく、新しいユーザプロセスに
受け継がせることが可能となる。
【0049】(トランスファシステムコール)ユーザプ
ロセス1がOS3にデータ転送を開始させるためには、
トランスファシステムコール21を発行しなくてはなら
ない。このトランスファシステムコール21は次のよう
な形式である。
ロセス1がOS3にデータ転送を開始させるためには、
トランスファシステムコール21を発行しなくてはなら
ない。このトランスファシステムコール21は次のよう
な形式である。
【0050】トランスファ(チャネル識別子,バイト
数) ここでチャネル識別子はユーザプロセス1が先にチャネ
ルシステムコール20により登録したチャネルの識別子
である。また、バイト数は転送すべきバイト数を指定す
る。なお、本実施例では、データ転送するバイト数を、
トランスファシステムコールが発行されてから出力先リ
ソースに出力されたデータのバイト数とする。入力元リ
ソースから入力すべきデータがまだ存在する場合でも、
このバイト数だけのデータ転送が行なわれたらトランス
ファシステムコールは終了する。バイト数として0を指
定した場合は、入力すべきデータがなくなるまで(例え
ば入力元リソースがファイルの時はファイルの終わりま
で)データ転送が続けられる。後に説明するように、デ
ータ転送処理部2は、トランスファシステムコール21
に応答して、データ転送を実行し、実際に転送したバイ
ト数を戻り値として返る。この戻り値が引数で指定した
バイト数と同じ場合は、ユーザプロセスの要求したデー
タ転送が成功裡に終了したことを意味する。また、戻り
値が引数よりも小さい場合は、データ転送において何か
しら障害があったことを意味し、また負の数である場合
は、引数が不正であるなど、データ転送の前にエラーが
あったことを示す。
数) ここでチャネル識別子はユーザプロセス1が先にチャネ
ルシステムコール20により登録したチャネルの識別子
である。また、バイト数は転送すべきバイト数を指定す
る。なお、本実施例では、データ転送するバイト数を、
トランスファシステムコールが発行されてから出力先リ
ソースに出力されたデータのバイト数とする。入力元リ
ソースから入力すべきデータがまだ存在する場合でも、
このバイト数だけのデータ転送が行なわれたらトランス
ファシステムコールは終了する。バイト数として0を指
定した場合は、入力すべきデータがなくなるまで(例え
ば入力元リソースがファイルの時はファイルの終わりま
で)データ転送が続けられる。後に説明するように、デ
ータ転送処理部2は、トランスファシステムコール21
に応答して、データ転送を実行し、実際に転送したバイ
ト数を戻り値として返る。この戻り値が引数で指定した
バイト数と同じ場合は、ユーザプロセスの要求したデー
タ転送が成功裡に終了したことを意味する。また、戻り
値が引数よりも小さい場合は、データ転送において何か
しら障害があったことを意味し、また負の数である場合
は、引数が不正であるなど、データ転送の前にエラーが
あったことを示す。
【0051】(データ転送処理部2)トランスファシス
テムコール21を受けたOS3は、転送処理部2を呼び
出す。この転送処理部2のより詳細な構造は、図4のよ
うになっている。
テムコール21を受けたOS3は、転送処理部2を呼び
出す。この転送処理部2のより詳細な構造は、図4のよ
うになっている。
【0052】転送開始/終了処理部73は、トランスフ
ァシステムコール73を受け、すでにチャネル登録処理
部7によって登録されているチャネルのいずれかにおけ
るデータ転送を準備し、スケジュール処理部75を呼び
出し(84)、そのチャネルでのデータ転送を開始させ
る。その後、待機処理部74を呼び出し(82)、ユー
ザプロセスが要求したデータ転送が終了するのを待た
せ、データ転送が終了した時点でユーザプロセスに制御
を戻す。
ァシステムコール73を受け、すでにチャネル登録処理
部7によって登録されているチャネルのいずれかにおけ
るデータ転送を準備し、スケジュール処理部75を呼び
出し(84)、そのチャネルでのデータ転送を開始させ
る。その後、待機処理部74を呼び出し(82)、ユー
ザプロセスが要求したデータ転送が終了するのを待た
せ、データ転送が終了した時点でユーザプロセスに制御
を戻す。
【0053】待機処理部74は、基本的にはデータ転送
が終了するまでトランスファシステムコールを発行した
ユーザプロセスを休眠状態にするためのルーチンである
(本実施例では行なわないが、ユーザからのオプション
設定により、休眠状態にしないようにすることもでき
る)。しかし、必要に応じて走行可能状態とされて、入
力処理部または出力処理部を行なう(86または87)
場合もある。
が終了するまでトランスファシステムコールを発行した
ユーザプロセスを休眠状態にするためのルーチンである
(本実施例では行なわないが、ユーザからのオプション
設定により、休眠状態にしないようにすることもでき
る)。しかし、必要に応じて走行可能状態とされて、入
力処理部または出力処理部を行なう(86または87)
場合もある。
【0054】スケジュール処理部75は、新にトランス
ファシステムコールがユーザプロセスにより新にいずれ
かのチャネルに対するデータ転送が要求されたときに転
送開始/終了処理部76により起動されるか、あるい
は、いずれかの入力処理部8あるいは出力処理部9によ
る入力処理あるいは出力処理が終了したときに、入力終
了処理部78あるいは出力終了処理部79により起動さ
れる。どれか1つのチャネルに関する事象の発生(具体
的には、データ転送要求の発生、データ入出力の終了)
により呼び出される。
ファシステムコールがユーザプロセスにより新にいずれ
かのチャネルに対するデータ転送が要求されたときに転
送開始/終了処理部76により起動されるか、あるい
は、いずれかの入力処理部8あるいは出力処理部9によ
る入力処理あるいは出力処理が終了したときに、入力終
了処理部78あるいは出力終了処理部79により起動さ
れる。どれか1つのチャネルに関する事象の発生(具体
的には、データ転送要求の発生、データ入出力の終了)
により呼び出される。
【0055】スケジュール処理部75の基本的な動作
は、チャネルリスト6を走査し、そこに登録されたチャ
ネル構造体の各々を参照して、それぞれが対応するチャ
ネルの現時点での状態を調べ、それぞれチャネルに対し
データの入力とデータの出力の一方あるいは両方が可能
かどうかを判定し、データ入力が可能であれば入力要求
発行処理部76を呼び出し(88)、データ出力が可能
であれば出力要求発行処理部77を呼び出す(90)と
いうものである。
は、チャネルリスト6を走査し、そこに登録されたチャ
ネル構造体の各々を参照して、それぞれが対応するチャ
ネルの現時点での状態を調べ、それぞれチャネルに対し
データの入力とデータの出力の一方あるいは両方が可能
かどうかを判定し、データ入力が可能であれば入力要求
発行処理部76を呼び出し(88)、データ出力が可能
であれば出力要求発行処理部77を呼び出す(90)と
いうものである。
【0056】入力要求発行処理部76及び出力要求発行
処理部77は、スケジュール処理部75により指定され
た1つのチャネルに対して入力要求あるいは出力要求を
発行する。より具体的には、そのチャネルにおける入力
元リソースまたは出力先リソースへのアクセスを行なう
際に呼び出すべきいずれかの入力処理部8あるいはいず
れかの出力処理部9を決定し、この決定された入力処理
部8あるいは出力処理部9に対して入力要求あるいは出
力要求を出力する。これらのルーチンは入力要求または
出力要求を発行するだけで、データのバッファ10への
入力あるいはバッファ10からのデータの出力が終了す
るまで待たずにスケジュール処理部75に制御を戻す。
この結果、すべてのチャネル構造体の操作を素早く行な
えるため、複数のチャネルを一括してスケジュールする
のが容易になる。
処理部77は、スケジュール処理部75により指定され
た1つのチャネルに対して入力要求あるいは出力要求を
発行する。より具体的には、そのチャネルにおける入力
元リソースまたは出力先リソースへのアクセスを行なう
際に呼び出すべきいずれかの入力処理部8あるいはいず
れかの出力処理部9を決定し、この決定された入力処理
部8あるいは出力処理部9に対して入力要求あるいは出
力要求を出力する。これらのルーチンは入力要求または
出力要求を発行するだけで、データのバッファ10への
入力あるいはバッファ10からのデータの出力が終了す
るまで待たずにスケジュール処理部75に制御を戻す。
この結果、すべてのチャネル構造体の操作を素早く行な
えるため、複数のチャネルを一括してスケジュールする
のが容易になる。
【0057】なお、複数の入力処理部8あるいは複数の
出力処理部9の中には、入出力のために呼び出しを受け
た場合、データの入出力が終了するまで呼び出したルー
チンに制御を返さないという同期入出力しかサポートし
ていないものがある。
出力処理部9の中には、入出力のために呼び出しを受け
た場合、データの入出力が終了するまで呼び出したルー
チンに制御を返さないという同期入出力しかサポートし
ていないものがある。
【0058】本実施例では、こうした入出力処理部に対
して入出力要求を発行する場合は、待機処理部74にて
休眠状態となっているユーザプロセスを走行可能状態と
し、そこから入力処理部8あるいは出力処理部9を呼び
出させることにより、入力要求発行処理部76及び出力
要求発行処理部77は要求を発行するだけで、データの
入出力を待たずにすぐに戻るというセマンティクスを実
現する。
して入出力要求を発行する場合は、待機処理部74にて
休眠状態となっているユーザプロセスを走行可能状態と
し、そこから入力処理部8あるいは出力処理部9を呼び
出させることにより、入力要求発行処理部76及び出力
要求発行処理部77は要求を発行するだけで、データの
入出力を待たずにすぐに戻るというセマンティクスを実
現する。
【0059】なお、入力処理部あるいは出力処理部の中
には、入出力のために呼び出しを行なった場合、データ
の入出力が終了するまで呼び出したルーチンに制御を返
さないという同期入出力しかサポートしていないものが
ある。そこで、本実施例では、こうした入出力処理部に
対して入出力要求を発行する場合は、待機処理部74に
て休眠状態となっているユーザプロセスを走行可能状態
とし、そこから入力処理部あるいは出力処理部を呼び出
させることにより、入力要求発行処理部76及び出力要
求発行処理部77は要求を発行するだけで、データの入
出力を待たずにすぐに戻るというセマンティクスを実現
する。これらの点を含め、入力要求発行処理部76及び
出力要求発行処理部77のより詳細な実装については後
述する。なお、以下本明細書では、OSが備える各種の入
力処理部及び出力処理部を、入出力要求を発行した際に
データの入出力を待たず、すぐに呼び出したルーチンに
もどるというセマンティクスをサポートするものと、こ
のようなセマンティクスをサポートせず、入出力要求を
発行したら、データの入出力が終了するまで呼び出した
入出力処理部内で待つことを余儀なくされるものの2つ
に分類し、前者を非同期的、後者を同期的であると呼
ぶ。
には、入出力のために呼び出しを行なった場合、データ
の入出力が終了するまで呼び出したルーチンに制御を返
さないという同期入出力しかサポートしていないものが
ある。そこで、本実施例では、こうした入出力処理部に
対して入出力要求を発行する場合は、待機処理部74に
て休眠状態となっているユーザプロセスを走行可能状態
とし、そこから入力処理部あるいは出力処理部を呼び出
させることにより、入力要求発行処理部76及び出力要
求発行処理部77は要求を発行するだけで、データの入
出力を待たずにすぐに戻るというセマンティクスを実現
する。これらの点を含め、入力要求発行処理部76及び
出力要求発行処理部77のより詳細な実装については後
述する。なお、以下本明細書では、OSが備える各種の入
力処理部及び出力処理部を、入出力要求を発行した際に
データの入出力を待たず、すぐに呼び出したルーチンに
もどるというセマンティクスをサポートするものと、こ
のようなセマンティクスをサポートせず、入出力要求を
発行したら、データの入出力が終了するまで呼び出した
入出力処理部内で待つことを余儀なくされるものの2つ
に分類し、前者を非同期的、後者を同期的であると呼
ぶ。
【0060】入力終了処理部78及び出力終了処理部7
9は、あるチャネルに属する入力元リソースまたは出力
先リソースへのアクセスを行なうための入力処理部8ま
たは出力処理部9から、バッファ10へのデータの入力
あるいはバッファ10からのデータの出力が終了した際
に呼び出される(98または99)。これらのルーチン
は、入力元リソースあるいは出力先リソースによって異
なる入力処理部8または出力処理部9が、データの入出
力が終了した時に返してくる情報を検査し、対応するチ
ャネル構造体が保持している情報を更新し、その後スケ
ジュール処理部75を呼び出す。これにより、あるチャ
ネルの状態が変化したとき、常にスケジュール処理部7
5が呼び出されることになる。
9は、あるチャネルに属する入力元リソースまたは出力
先リソースへのアクセスを行なうための入力処理部8ま
たは出力処理部9から、バッファ10へのデータの入力
あるいはバッファ10からのデータの出力が終了した際
に呼び出される(98または99)。これらのルーチン
は、入力元リソースあるいは出力先リソースによって異
なる入力処理部8または出力処理部9が、データの入出
力が終了した時に返してくる情報を検査し、対応するチ
ャネル構造体が保持している情報を更新し、その後スケ
ジュール処理部75を呼び出す。これにより、あるチャ
ネルの状態が変化したとき、常にスケジュール処理部7
5が呼び出されることになる。
【0061】待機処理部74は、基本的にはデータ転送
が終了するまでトランスファシステムコールを発行した
ユーザプロセスを休眠状態にするためのルーチンであ
る。なお、ユーザからのオプション設定により、休眠状
態にしないようにすることもできる。しかし、必要に応
じて走行可能状態として、入力処理部8または出力処理
部9を動作させる(86または87)場合もある。
が終了するまでトランスファシステムコールを発行した
ユーザプロセスを休眠状態にするためのルーチンであ
る。なお、ユーザからのオプション設定により、休眠状
態にしないようにすることもできる。しかし、必要に応
じて走行可能状態として、入力処理部8または出力処理
部9を動作させる(86または87)場合もある。
【0062】以上から明らかなように、転送処理部2に
おいて、スケジュール処理部75は、少なくとも1つの
チャネルにおいてその状態が変化したとき常に呼び出さ
れ、またあるチャネルにおいてデータの入出力を行おう
とする際にも、しかるべき入力処理部8又は出力処理部
9を呼び出して入出力要求を発行するだけで、その入出
力の実行を待たずに直ちに次のチャネルに対するデータ
転送要求の処理へ移行できる。従って、複数のチャネル
が登録されてデータ転送が行われている場合でも、実際
のデータの流れをスケジュール処理部75において容易
に管理することができる。そのため、スケジュール処理
部75には、必要に応じて、後述するようなアルゴリズ
ム以外にも、リアルタイムスケジューリングアルゴリズ
ムなどの様々なアルゴリズムを容易に実装することがで
き、それにより本実施例のデータ転送機能をさらに高機
能かつ高性能のものとすることができる。
おいて、スケジュール処理部75は、少なくとも1つの
チャネルにおいてその状態が変化したとき常に呼び出さ
れ、またあるチャネルにおいてデータの入出力を行おう
とする際にも、しかるべき入力処理部8又は出力処理部
9を呼び出して入出力要求を発行するだけで、その入出
力の実行を待たずに直ちに次のチャネルに対するデータ
転送要求の処理へ移行できる。従って、複数のチャネル
が登録されてデータ転送が行われている場合でも、実際
のデータの流れをスケジュール処理部75において容易
に管理することができる。そのため、スケジュール処理
部75には、必要に応じて、後述するようなアルゴリズ
ム以外にも、リアルタイムスケジューリングアルゴリズ
ムなどの様々なアルゴリズムを容易に実装することがで
き、それにより本実施例のデータ転送機能をさらに高機
能かつ高性能のものとすることができる。
【0063】(転送開始/終了処理部73)転送開始/
終了処理部73の動作を図6に示す。この処理部73
は、トランスファシステムコール21を受けて呼び出さ
れ、まずシステムコールの引数として指定されたチャネ
ル識別子に対応するチャネル構造体を、チャネルリスト
6を走査して得る(ステップ221)。次に、発行され
たトランスファシステムコールの引数をチェックしなが
ら、それらをチャネル構造体に設定していく(ステップ
222)。特に、ここでチャネル構造体のフラグ141
においてフラグCHWAITをリセットし、データ転送中であ
ることを明示する。また、注意すべき点として、ここで
入力データカウンタ153及び出力データカウンタ15
4の初期化は行なわない。これらが初期化されるのはチ
ャネル登録処理部7においてのみであり、これにより、
データ転送を(シグナルの配送などの原因で)一時中断
して再開する場合も、同じトランスファシステムコール
を発行することで行なうことができる。以上までで、不
当な引数が用いられているなど、何かエラーがあった場
合は(ステップ223)、それを通知する形で(すなわ
ちトランスファシステムコールの戻り値が−1を返すよ
うに)制御がユーザプロセスに戻される(ステップ22
7)。エラーがなかった場合は、スケジュール処理部7
5が呼び出される((ステップ224)。スケジュール
処理部75はチャネルリスト6につながれたすべてのチ
ャネル構造体を走査するので、この時点でこのチャネル
に対するデータ転送が開始される。スケジュール処理部
75から戻ったら、次に待機処理部74を呼び出し、ト
ランスファシステムコールにより要求されたバイト数の
データ転送が終了するまで待機する(ステップ22
5)。その後ユーザプロセスに、実際に転送されたデー
タのバイト数を戻り値として戻る(ステップ226)。
終了処理部73の動作を図6に示す。この処理部73
は、トランスファシステムコール21を受けて呼び出さ
れ、まずシステムコールの引数として指定されたチャネ
ル識別子に対応するチャネル構造体を、チャネルリスト
6を走査して得る(ステップ221)。次に、発行され
たトランスファシステムコールの引数をチェックしなが
ら、それらをチャネル構造体に設定していく(ステップ
222)。特に、ここでチャネル構造体のフラグ141
においてフラグCHWAITをリセットし、データ転送中であ
ることを明示する。また、注意すべき点として、ここで
入力データカウンタ153及び出力データカウンタ15
4の初期化は行なわない。これらが初期化されるのはチ
ャネル登録処理部7においてのみであり、これにより、
データ転送を(シグナルの配送などの原因で)一時中断
して再開する場合も、同じトランスファシステムコール
を発行することで行なうことができる。以上までで、不
当な引数が用いられているなど、何かエラーがあった場
合は(ステップ223)、それを通知する形で(すなわ
ちトランスファシステムコールの戻り値が−1を返すよ
うに)制御がユーザプロセスに戻される(ステップ22
7)。エラーがなかった場合は、スケジュール処理部7
5が呼び出される((ステップ224)。スケジュール
処理部75はチャネルリスト6につながれたすべてのチ
ャネル構造体を走査するので、この時点でこのチャネル
に対するデータ転送が開始される。スケジュール処理部
75から戻ったら、次に待機処理部74を呼び出し、ト
ランスファシステムコールにより要求されたバイト数の
データ転送が終了するまで待機する(ステップ22
5)。その後ユーザプロセスに、実際に転送されたデー
タのバイト数を戻り値として戻る(ステップ226)。
【0064】(待機処理部74)このルーチンの動作は
図7の通りである。このルーチンはある1つのチャネル
構造体とともに呼び出される。まずこのチャネル構造体
のフラグ141においてフラグCHERRORがセットされて
いるかが検査され、このチャネルに対してエラーが発生
しているかどうかが調べられる(ステップ201)。も
しセットされていれば、発生したエラーに関する情報が
ユーザプロセスに渡るようにして自分を呼んだルーチン
に戻る(ステップ202)。CHERRORがセットされてい
なければ、次にフラグCHDONEを検査し、データ転送が終
了しているかどうか調べる(ステップ203)。CHDONE
がセットされている時は、ユーザの要求したデータ転送
が完了した旨の通知と共に自分を呼び出したルーチンに
戻る(ステップ204)。もしCHDONEもCHERRORもセッ
トされていなければ、次に待機処理部はこのチャネルに
対して同期入力あるいは同期出力の要求が生じていない
かどうか調べる(ステップ205および207)。これ
らの検査はチャネル構造体のフラグ141において、そ
れぞれフラグCHSYNCRD、CHSYNCWRがセットされているか
どうかを調べることにより行なわれる。これらのフラグ
はチャネル構造体のフラグ141において既述のCHDONE
などのフラグとは独立にセットまたはリセットできる。
もしフラグCHSYNCRDがセットされている場合は、そのチ
ャネルに対する入力処理部8を呼び出して、バッファ1
0に入力元リソースからデータを入力する(ステップ2
06)。そのチャネルに対する入力処理部8を決定する
のは、従来の方法であった図2の時と同様、4の記述子
テーブル18、カーネルファイルテーブル5を参照する
ことにより行なわれる。記述子などの情報は、チャネル
構造体に格納されている。ステップ206の終了時点で
データの入力は(エラーであれなんであれ)終了してい
るので、次に入力終了処理部78を呼び出す(ステップ
208)。その後、待機処理部74の始めに戻る。CHSY
NCWRがセットされている場合も同様に、出力処理部9を
呼び出してデータの出力を行ない(ステップ209)、
続いて出力終了処理部を呼び出し(ステップ210)、
待機処理部74の始めに戻る。CHSYNCRD、CHSYNCWRのい
ずれもセットされていない時は、OSのプロセス管理機
構を呼び出して、自分自身を休眠状態にする(ステップ
211)。
図7の通りである。このルーチンはある1つのチャネル
構造体とともに呼び出される。まずこのチャネル構造体
のフラグ141においてフラグCHERRORがセットされて
いるかが検査され、このチャネルに対してエラーが発生
しているかどうかが調べられる(ステップ201)。も
しセットされていれば、発生したエラーに関する情報が
ユーザプロセスに渡るようにして自分を呼んだルーチン
に戻る(ステップ202)。CHERRORがセットされてい
なければ、次にフラグCHDONEを検査し、データ転送が終
了しているかどうか調べる(ステップ203)。CHDONE
がセットされている時は、ユーザの要求したデータ転送
が完了した旨の通知と共に自分を呼び出したルーチンに
戻る(ステップ204)。もしCHDONEもCHERRORもセッ
トされていなければ、次に待機処理部はこのチャネルに
対して同期入力あるいは同期出力の要求が生じていない
かどうか調べる(ステップ205および207)。これ
らの検査はチャネル構造体のフラグ141において、そ
れぞれフラグCHSYNCRD、CHSYNCWRがセットされているか
どうかを調べることにより行なわれる。これらのフラグ
はチャネル構造体のフラグ141において既述のCHDONE
などのフラグとは独立にセットまたはリセットできる。
もしフラグCHSYNCRDがセットされている場合は、そのチ
ャネルに対する入力処理部8を呼び出して、バッファ1
0に入力元リソースからデータを入力する(ステップ2
06)。そのチャネルに対する入力処理部8を決定する
のは、従来の方法であった図2の時と同様、4の記述子
テーブル18、カーネルファイルテーブル5を参照する
ことにより行なわれる。記述子などの情報は、チャネル
構造体に格納されている。ステップ206の終了時点で
データの入力は(エラーであれなんであれ)終了してい
るので、次に入力終了処理部78を呼び出す(ステップ
208)。その後、待機処理部74の始めに戻る。CHSY
NCWRがセットされている場合も同様に、出力処理部9を
呼び出してデータの出力を行ない(ステップ209)、
続いて出力終了処理部を呼び出し(ステップ210)、
待機処理部74の始めに戻る。CHSYNCRD、CHSYNCWRのい
ずれもセットされていない時は、OSのプロセス管理機
構を呼び出して、自分自身を休眠状態にする(ステップ
211)。
【0065】ステップ211にて休眠状態となったユー
ザプロセスは、必要に応じて実行可能状態とされる。実
行可能状態となったユーザプロセスは、その時点から処
理を再開し、ステップ201に戻る。ここで注意すべき
点は、このユーザプロセスは既にOS内の待機処理部7
4にて休眠しており、処理再開後、必要に応じて例えば
入力処理部などを直接呼び出すという点である。この
間、OSとユーザプロセスとの間の制御の往来、すなわ
ちカーネルモードとユーザモードとの間の計算機モード
の切り替えを要しないため、一々システムコールを発行
して入出力を行う場合と比較して、オーバヘッドが非常
に小さい。
ザプロセスは、必要に応じて実行可能状態とされる。実
行可能状態となったユーザプロセスは、その時点から処
理を再開し、ステップ201に戻る。ここで注意すべき
点は、このユーザプロセスは既にOS内の待機処理部7
4にて休眠しており、処理再開後、必要に応じて例えば
入力処理部などを直接呼び出すという点である。この
間、OSとユーザプロセスとの間の制御の往来、すなわ
ちカーネルモードとユーザモードとの間の計算機モード
の切り替えを要しないため、一々システムコールを発行
して入出力を行う場合と比較して、オーバヘッドが非常
に小さい。
【0066】(スケジュール処理部75)この動作を図
8および図9に示す。ここではチャネルリスト6上のす
べてのチャネル構造体が検査され、データ転送が終了し
たか、あるいは入出力を行なうことが可能か、などが1
つ1つのチャネルに対して調べられる。スケジュール処
理部75においては、まず一連の操作において入力要求
または出力要求が発行されたチャネルがあるかどうかを
示す変数(Iとする)に0を代入して初期化する(ステ
ップ101)。次に、チャネルリスト6の先頭にあるチ
ャネル構造体を取り出す(ステップ102)。そして、
このチャネル構造体を参照して入出力が可能かどうかの
検査を行なっていくが、ここでまず始めに、このチャネ
ルにおけるデータ転送を要求したユーザプロセスに対し
てシグナル(ユーザプロセスレベルでのソフトウェア割
込み)が配送されていないかどうか調べる(ステップ1
03)。この検査はチャネル構造体のプロセスポインタ
143により4を参照することにより行なわれる。もし
シグナルが配送されているときは、このチャネルにおけ
るデータ転送を中断するが、その際エラーが発生したの
と同じ扱いとする。すなわち、このチャネルに対応する
チャネル構造体のフラグ141にフラグCHERRORをセッ
トし、待機処理部74中で休眠状態となっているユーザ
プロセスを走行可能状態とする(ステップ112)。も
しシグナルが配送されていなければ、次にこのチャネル
おいてデータを入力することが可能であるかどうかを、
チャネル構造体のデータポインタ148、入力データカ
ウンタ149、出力データカウンタ150、バッファサ
イズ155などをもとに判定する。入力可能かどうかの
判定は、バッファにまだ空きがあり、判定の結果、もし
そのチャネルに対してデータの入力が可能であれば(ス
テップ105)、入力要求発行処理部76が呼び出され
て、そのチャネルの入力元リソースへのアクセスを行な
う入力処理部8に対して入力要求が発行され(ステップ
106)、変数Iの内容に1が加算される(ステップ1
07)。ステップ106においてエラーが生じた場合
は、既に述べたステップ112が実行され、フラグCHER
RORがセットされ、そのチャネルを要求しているユーザ
プロセスを走行可能状態にする。エラーでなければ、次
に、このチャネルにおいて出力先リソースにデータを出
力することが可能かどうかを判定し(ステップ10
8)、可能であれば出力要求発行処理部77を呼び出し
(ステップ109)、さらに変数Iの内容に1が加算さ
れる(ステップ110)。入力の場合と同様、エラーが
発生した場合はステップ112が実行される(ステップ
111)。以上で1つのチャネルに対する処理を終え、
チャネル構造体のリストポインタ142をみてチャネル
リスト上の次のチャネル構造体を取り出す(ステップ1
13)。もし次のチャネル構造体があれば(ステップ1
14)、ステップ103に戻る。もしもうチャネル構造
体がない場合は、次に変数Iが検査される(ステップ1
15)。もし変数Iが0でなければ、ステップ101に
戻ってチャネルリスト6の走査が繰り返される。ここで
走査の繰り返しが行なわれるのは、あるチャネルの入出
力が、別のチャネルに対して入出力要求が発行されたこ
とによって可能となる可能性があるからである。一方、
もし変数Iが0、すなわちチャネルリスト6の一連の操
作において入力要求あるいは出力要求が発行されたチャ
ネルが1つもなければ、スケジュール処理部75を終え
て、自分を呼び出したルーチンに戻る(ステップ11
6)。
8および図9に示す。ここではチャネルリスト6上のす
べてのチャネル構造体が検査され、データ転送が終了し
たか、あるいは入出力を行なうことが可能か、などが1
つ1つのチャネルに対して調べられる。スケジュール処
理部75においては、まず一連の操作において入力要求
または出力要求が発行されたチャネルがあるかどうかを
示す変数(Iとする)に0を代入して初期化する(ステ
ップ101)。次に、チャネルリスト6の先頭にあるチ
ャネル構造体を取り出す(ステップ102)。そして、
このチャネル構造体を参照して入出力が可能かどうかの
検査を行なっていくが、ここでまず始めに、このチャネ
ルにおけるデータ転送を要求したユーザプロセスに対し
てシグナル(ユーザプロセスレベルでのソフトウェア割
込み)が配送されていないかどうか調べる(ステップ1
03)。この検査はチャネル構造体のプロセスポインタ
143により4を参照することにより行なわれる。もし
シグナルが配送されているときは、このチャネルにおけ
るデータ転送を中断するが、その際エラーが発生したの
と同じ扱いとする。すなわち、このチャネルに対応する
チャネル構造体のフラグ141にフラグCHERRORをセッ
トし、待機処理部74中で休眠状態となっているユーザ
プロセスを走行可能状態とする(ステップ112)。も
しシグナルが配送されていなければ、次にこのチャネル
おいてデータを入力することが可能であるかどうかを、
チャネル構造体のデータポインタ148、入力データカ
ウンタ149、出力データカウンタ150、バッファサ
イズ155などをもとに判定する。入力可能かどうかの
判定は、バッファにまだ空きがあり、判定の結果、もし
そのチャネルに対してデータの入力が可能であれば(ス
テップ105)、入力要求発行処理部76が呼び出され
て、そのチャネルの入力元リソースへのアクセスを行な
う入力処理部8に対して入力要求が発行され(ステップ
106)、変数Iの内容に1が加算される(ステップ1
07)。ステップ106においてエラーが生じた場合
は、既に述べたステップ112が実行され、フラグCHER
RORがセットされ、そのチャネルを要求しているユーザ
プロセスを走行可能状態にする。エラーでなければ、次
に、このチャネルにおいて出力先リソースにデータを出
力することが可能かどうかを判定し(ステップ10
8)、可能であれば出力要求発行処理部77を呼び出し
(ステップ109)、さらに変数Iの内容に1が加算さ
れる(ステップ110)。入力の場合と同様、エラーが
発生した場合はステップ112が実行される(ステップ
111)。以上で1つのチャネルに対する処理を終え、
チャネル構造体のリストポインタ142をみてチャネル
リスト上の次のチャネル構造体を取り出す(ステップ1
13)。もし次のチャネル構造体があれば(ステップ1
14)、ステップ103に戻る。もしもうチャネル構造
体がない場合は、次に変数Iが検査される(ステップ1
15)。もし変数Iが0でなければ、ステップ101に
戻ってチャネルリスト6の走査が繰り返される。ここで
走査の繰り返しが行なわれるのは、あるチャネルの入出
力が、別のチャネルに対して入出力要求が発行されたこ
とによって可能となる可能性があるからである。一方、
もし変数Iが0、すなわちチャネルリスト6の一連の操
作において入力要求あるいは出力要求が発行されたチャ
ネルが1つもなければ、スケジュール処理部75を終え
て、自分を呼び出したルーチンに戻る(ステップ11
6)。
【0067】(入力要求発行処理部76)この動作は図
10の通りである。この処理はある1つのチャネルを引
数としてスケジュール処理部75から呼び出される。ま
ず、チャネル構造体の入力記述子145とプロセスポイ
ンタ143から、このチャネルに対応するユーザプロセ
スの記述子テーブル18とOS3のカーネルファイルテ
ーブル5が参照され、そのチャネルに対応する入力処理
部8が決定される(ステップ161)。次に、その入力
処理部が同期的であれば(ステップ162)、チャネル
構造体のフラグ141にフラグCHSYNCRDをセットして、
待機処理部74にて休眠中であったユーザプロセスを走
行可能状態とする(ステップ164)。非同期的であれ
ば、データの入力が終了した時に入力終了処理部78を
呼び出すように設定した後、入力処理部8を呼び出して
データ入力要求を発行する(ステップ163)。その
後、発行した入力要求に対して既にデータ入力がなされ
た(例えば入力処理部がファイルシステムで、必要とす
るデータが既にバッファキャッシュに読み込まれていた
場合などが考えられる)かどうかが調べられ(ステップ
165)、もし読み込まれていれば入力終了処理部79
を呼び出してチャネル構造体の内容を更新する(ステッ
プ166)。ここで、入力終了処理部79を呼び出すと
きに、入力要求発行処理部76からの呼び出しであるこ
とが入力終了処理部79において認識できるようにす
る。入力終了処理部79は、入力要求発行処理部76か
らの呼び出しである場合は、スケジュール処理部75を
呼び出さずに終わる。これにより、スケジュール処理部
75が自分を再帰的に呼び出す結果となってしまうのを
防ぐ。その後ステップ163または164においてエラ
ーが発生したかどうかを調べ(ステップ167)、エラ
ーの有無を通知する形で自分を呼び出したスケジュール
処理部75に制御を返す(ステップ168、169)。
10の通りである。この処理はある1つのチャネルを引
数としてスケジュール処理部75から呼び出される。ま
ず、チャネル構造体の入力記述子145とプロセスポイ
ンタ143から、このチャネルに対応するユーザプロセ
スの記述子テーブル18とOS3のカーネルファイルテ
ーブル5が参照され、そのチャネルに対応する入力処理
部8が決定される(ステップ161)。次に、その入力
処理部が同期的であれば(ステップ162)、チャネル
構造体のフラグ141にフラグCHSYNCRDをセットして、
待機処理部74にて休眠中であったユーザプロセスを走
行可能状態とする(ステップ164)。非同期的であれ
ば、データの入力が終了した時に入力終了処理部78を
呼び出すように設定した後、入力処理部8を呼び出して
データ入力要求を発行する(ステップ163)。その
後、発行した入力要求に対して既にデータ入力がなされ
た(例えば入力処理部がファイルシステムで、必要とす
るデータが既にバッファキャッシュに読み込まれていた
場合などが考えられる)かどうかが調べられ(ステップ
165)、もし読み込まれていれば入力終了処理部79
を呼び出してチャネル構造体の内容を更新する(ステッ
プ166)。ここで、入力終了処理部79を呼び出すと
きに、入力要求発行処理部76からの呼び出しであるこ
とが入力終了処理部79において認識できるようにす
る。入力終了処理部79は、入力要求発行処理部76か
らの呼び出しである場合は、スケジュール処理部75を
呼び出さずに終わる。これにより、スケジュール処理部
75が自分を再帰的に呼び出す結果となってしまうのを
防ぐ。その後ステップ163または164においてエラ
ーが発生したかどうかを調べ(ステップ167)、エラ
ーの有無を通知する形で自分を呼び出したスケジュール
処理部75に制御を返す(ステップ168、169)。
【0068】(出力要求発行処理部77)このルーチン
の動作は、出力記述子146が参照され、この記述子が
指定する出力先リソースに対応する出力処理部9に出力
要求が発行されること以外は、既に述べた入力要求発行
処理部76と同じ動作である。
の動作は、出力記述子146が参照され、この記述子が
指定する出力先リソースに対応する出力処理部9に出力
要求が発行されること以外は、既に述べた入力要求発行
処理部76と同じ動作である。
【0069】(入力終了処理部78)この動作を図11
に示す。この処理部は、あるチャネルにおいてデータの
入力が終了した時に呼び出される。まず、どのチャネル
に対する入力が終了したのかが決定され、そのチャネル
に対応するチャネル構造体が取り出される(ステップ2
01)。次に、そのチャネルの入力元リソースに対して
行なわれたデータ入力がエラーであったかどうかが検査
され(ステップ202)、もしエラーであればチャネル
構造体のフラグ141にフラグCHERRORをセットする
(ステップ203)。その後、実際に読み込まれたデー
タのバイト数に応じて、チャネル構造体内のバッファ管
理構造体150を更新する(ステップ204)。次に、
そのチャネルの入力元リソースから入力すべきデータが
これ以上ないか、あるいはユーザが(トランスファシス
テムコールの引数として)要求したバイト数だけ入力し
終えたかどうかが調べられ(ステップ205)、もしな
ければチャネル構造体のフラグ141にフラグCHEOFを
セットする(ステップ206)。この後、もし入力終了
処理部が入力要求発行処理部76からの呼び出しでなけ
れば(ステップ207)、スケジュール処理部75を呼
び出す(ステップ208)。それから自分を呼び出した
ルーチンに戻る(ステップ209)。
に示す。この処理部は、あるチャネルにおいてデータの
入力が終了した時に呼び出される。まず、どのチャネル
に対する入力が終了したのかが決定され、そのチャネル
に対応するチャネル構造体が取り出される(ステップ2
01)。次に、そのチャネルの入力元リソースに対して
行なわれたデータ入力がエラーであったかどうかが検査
され(ステップ202)、もしエラーであればチャネル
構造体のフラグ141にフラグCHERRORをセットする
(ステップ203)。その後、実際に読み込まれたデー
タのバイト数に応じて、チャネル構造体内のバッファ管
理構造体150を更新する(ステップ204)。次に、
そのチャネルの入力元リソースから入力すべきデータが
これ以上ないか、あるいはユーザが(トランスファシス
テムコールの引数として)要求したバイト数だけ入力し
終えたかどうかが調べられ(ステップ205)、もしな
ければチャネル構造体のフラグ141にフラグCHEOFを
セットする(ステップ206)。この後、もし入力終了
処理部が入力要求発行処理部76からの呼び出しでなけ
れば(ステップ207)、スケジュール処理部75を呼
び出す(ステップ208)。それから自分を呼び出した
ルーチンに戻る(ステップ209)。
【0070】(出力終了処理部79)この動作を図12
に示す。この処理部は、あるチャネルにおいてデータの
出力が終了した時に呼び出される。入力終了処理部78
の場合と同様、まずどのチャネルに対する入力が終了し
たのかが決定され、そのチャネルに対応するチャネル構
造体が取り出される(ステップ231)。次に、そのチ
ャネルの出力先リソースに対して行なわれたデータ出力
がエラーであったかどうかが検査され(ステップ23
2)、もしエラーであればチャネル構造体のフラグ14
1にフラグCHERRORをセットする(ステップ233)。
次に、実際に出力先リソースに出力されたデータのバイ
ト数に応じて、チャネル構造体内のバイトカウンタ14
7及びバッファ管理構造体150を更新する(ステップ
234)。ここで、もしチャネル構造体のフラグ141
にフラグCHEOFがセットされており、かつバッファにデ
ータがない場合(ステップ235)あるいはバイトカウ
ンタ147が0になってユーザの要求したバイト数だけ
データを転送し終えた場合は(ステップ236)、チャ
ネル構造体のフラグ141にフラグCHDONEをセットする
(ステップ237)。その後、もし自分が出力要求発行
処理部77から呼び出されたものでなければ(ステップ
238)、スケジュール処理部75を呼び出す(ステッ
プ239)。その後自分を呼び出したルーチンに戻る
(ステップ240)。
に示す。この処理部は、あるチャネルにおいてデータの
出力が終了した時に呼び出される。入力終了処理部78
の場合と同様、まずどのチャネルに対する入力が終了し
たのかが決定され、そのチャネルに対応するチャネル構
造体が取り出される(ステップ231)。次に、そのチ
ャネルの出力先リソースに対して行なわれたデータ出力
がエラーであったかどうかが検査され(ステップ23
2)、もしエラーであればチャネル構造体のフラグ14
1にフラグCHERRORをセットする(ステップ233)。
次に、実際に出力先リソースに出力されたデータのバイ
ト数に応じて、チャネル構造体内のバイトカウンタ14
7及びバッファ管理構造体150を更新する(ステップ
234)。ここで、もしチャネル構造体のフラグ141
にフラグCHEOFがセットされており、かつバッファにデ
ータがない場合(ステップ235)あるいはバイトカウ
ンタ147が0になってユーザの要求したバイト数だけ
データを転送し終えた場合は(ステップ236)、チャ
ネル構造体のフラグ141にフラグCHDONEをセットする
(ステップ237)。その後、もし自分が出力要求発行
処理部77から呼び出されたものでなければ(ステップ
238)、スケジュール処理部75を呼び出す(ステッ
プ239)。その後自分を呼び出したルーチンに戻る
(ステップ240)。
【0071】なお、本実施例によれば、データ転送の高
速化に付随して、次のような利点もある。のOSに適合
するアプリケーションプログラムを新規に開発する場合
には、本実施例で用いた新規なシステムコールを用いる
必要がある。しかし、これらのシステムコールは、「デ
ータの経路を登録し、そこにデータを流す」という形式
の、データの移動経路を明確に記述するので、アプリケ
ーションプログラム内でのデータの移動経路の使用状況
が明確になる。このため、そのようなアプリケーション
プログラムの開発を容易にする。
速化に付随して、次のような利点もある。のOSに適合
するアプリケーションプログラムを新規に開発する場合
には、本実施例で用いた新規なシステムコールを用いる
必要がある。しかし、これらのシステムコールは、「デ
ータの経路を登録し、そこにデータを流す」という形式
の、データの移動経路を明確に記述するので、アプリケ
ーションプログラム内でのデータの移動経路の使用状況
が明確になる。このため、そのようなアプリケーション
プログラムの開発を容易にする。
【0072】<変形例>実施例1を以下のように変形す
ることも出来る。
ることも出来る。
【0073】(1)実施例1では、あるチャネルにおけ
るデータ転送を実行する際に呼び出される入力処理部8
や出力処理部9は、ユーザプロセスがそのチャネルを登
録する時に何を入出力先リソースとして指定したかによ
って異なるが、これらのルーチンは従来のものを変更な
く使うことができる。しかし、カーネル空間内のバッフ
ァ10にデータを入力し、それをまた出力するという処
理を、すべてOS3内で行なうという構造になっている
ことを活用して、既存の入力処理部や出力処理部を、デ
ータ転送の際に最適な処理が行なわれるように拡張する
ことも可能で、これによりさらにデータ転送の性能を改
善することができる。また、データ転送専用の入力処理
部又は出力処理部を本実施例のOSに新規に追加しても
よく、そうすればデータ転送をより高機能のものにでき
る。
るデータ転送を実行する際に呼び出される入力処理部8
や出力処理部9は、ユーザプロセスがそのチャネルを登
録する時に何を入出力先リソースとして指定したかによ
って異なるが、これらのルーチンは従来のものを変更な
く使うことができる。しかし、カーネル空間内のバッフ
ァ10にデータを入力し、それをまた出力するという処
理を、すべてOS3内で行なうという構造になっている
ことを活用して、既存の入力処理部や出力処理部を、デ
ータ転送の際に最適な処理が行なわれるように拡張する
ことも可能で、これによりさらにデータ転送の性能を改
善することができる。また、データ転送専用の入力処理
部又は出力処理部を本実施例のOSに新規に追加しても
よく、そうすればデータ転送をより高機能のものにでき
る。
【0074】(2)ユーザが独自の入力処理部あるいは
出力処理部をプログラムしてOSに登録できるようにす
れば、実施例1のOSを適用して処理の性能を高めるこ
とのできる範囲が、データ転送だけでなく、ユーザが指
定した入力元リソースから、ユーザが指定した出力先リ
ソースへの、ユーザが定義したデータ処理を間に置いた
データ転送にまで、すなわち、ほとんどのアプリケーシ
ョンプログラムにまで、拡大できる。
出力処理部をプログラムしてOSに登録できるようにす
れば、実施例1のOSを適用して処理の性能を高めるこ
とのできる範囲が、データ転送だけでなく、ユーザが指
定した入力元リソースから、ユーザが指定した出力先リ
ソースへの、ユーザが定義したデータ処理を間に置いた
データ転送にまで、すなわち、ほとんどのアプリケーシ
ョンプログラムにまで、拡大できる。
【0075】(3)実施例1では単一のプロセッサの下
で動作するOSに実装することを想定して説明した。し
かし、実施例1は同様の特徴を持つOSに容易に適用可
能であり、また疎結合あるいは密結合マルチプロセッサ
システムの下で動作するOSに対しても、異なるプロセ
ッサ間の協調のための機能がOSにサポートされていれ
ば、少々の拡張により実施例1を適用することができ
る。
で動作するOSに実装することを想定して説明した。し
かし、実施例1は同様の特徴を持つOSに容易に適用可
能であり、また疎結合あるいは密結合マルチプロセッサ
システムの下で動作するOSに対しても、異なるプロセ
ッサ間の協調のための機能がOSにサポートされていれ
ば、少々の拡張により実施例1を適用することができ
る。
【0076】<実施例2>実施例1では、そこ用いたチ
ャネルシステムコールの形式から分かるように、記述子
を割り当てられるリソース(例えばファイル)のみを、
データ転送の入力元リソース又は出力先リソースとして
指定できる。本実施例では、記述子を割り当てることが
できるリソースの種類を増やすことにより、実施例1の
データ転送機能の適用範囲を拡大する。例えば、OS3
にユーザプロセスのユーザアドレス空間(ユーザ空間)
のある領域に記述子を割り当てる機能がある場合を考え
る。この場合、従来のリードシステムコールまたはライ
トシステムコールによって行なっていた入出力は、チャ
ネルシステムコールとトランスファシステムコールの組
み合わせですべて置き換えることができる(すなわちす
べての入出力をデータ転送としてとらえることができ
る)。ユーザ空間の一部に記述子を割り当てることがで
きると、頻繁に入力や出力の行なわれるメモリ空間に記
述子をあらかじめ割り当ててチャネルを登録しておくこ
とにより、アドレスに依存しない入出力が可能となる。
また、仮想記憶をサポートしているOSでは、ユーザ空
間との入出力を行なう場合、一般にユーザアドレス空間
内の目的とする領域を物理メモリに固定する処理をその
たびに必要とするが、この処理はオーバヘッドが大き
い。そこで、頻繁に入出力を行なうメモリ領域に記述子
を割り当てておき、その際にその領域を物理メモリに固
定したままにしておくことにより、毎回の入出力(デー
タ転送)においてはこのオーバヘッドを回避することが
できる。
ャネルシステムコールの形式から分かるように、記述子
を割り当てられるリソース(例えばファイル)のみを、
データ転送の入力元リソース又は出力先リソースとして
指定できる。本実施例では、記述子を割り当てることが
できるリソースの種類を増やすことにより、実施例1の
データ転送機能の適用範囲を拡大する。例えば、OS3
にユーザプロセスのユーザアドレス空間(ユーザ空間)
のある領域に記述子を割り当てる機能がある場合を考え
る。この場合、従来のリードシステムコールまたはライ
トシステムコールによって行なっていた入出力は、チャ
ネルシステムコールとトランスファシステムコールの組
み合わせですべて置き換えることができる(すなわちす
べての入出力をデータ転送としてとらえることができ
る)。ユーザ空間の一部に記述子を割り当てることがで
きると、頻繁に入力や出力の行なわれるメモリ空間に記
述子をあらかじめ割り当ててチャネルを登録しておくこ
とにより、アドレスに依存しない入出力が可能となる。
また、仮想記憶をサポートしているOSでは、ユーザ空
間との入出力を行なう場合、一般にユーザアドレス空間
内の目的とする領域を物理メモリに固定する処理をその
たびに必要とするが、この処理はオーバヘッドが大き
い。そこで、頻繁に入出力を行なうメモリ領域に記述子
を割り当てておき、その際にその領域を物理メモリに固
定したままにしておくことにより、毎回の入出力(デー
タ転送)においてはこのオーバヘッドを回避することが
できる。
【0077】<実施例3>実施例1では、あるチャネル
が登録された時点で、データ転送すべき入力元リソース
と出力先リソースの両方がOSに分かっている。そこ
で、本実施例では実施例1の転送処理部2(とりわけ入
力要求発行処理部76)の拡張により、そのチャネルに
おけるデータ転送を最適化する。例えば、あるチャネル
における入力元リソースと出力先リソースが同じファイ
ルシステムによって管理された2つのファイルである場
合、このチャネルのバッファとしてファイルシステムの
バッファキャッシュを用いるようにすれば、このチャネ
ルに対してはデータ転送用のバッファ10をカーネル空
間内に別に割り当てる手間を省くことができ、かつ、本
来必要ないメモリ間コピーの回数を減らして、データ転
送をより高速に行なえる。また、ディスプレイのフレー
ムバッファのように、一定のアドレス空間内の領域への
アクセスがハードウェア的に機器へのアクセスへ変換さ
れるような入出力先リソースが、あるチャネルにおける
入力あるいは出力先リソースである場合、そのアドレス
の領域をそのチャネルのバッファとすることにより、メ
モリ間コピーの回数だけでなく処理量をも削減すること
が可能である。さらに、本変形例を実装したOSが動作
する計算機にしかるべき手段が備えられている場合は、
入力元リソースと出力先リソースの組み合わせによって
は、入力元リソースから一度主記憶中にデータを読み込
まずに、出力先リソースにハードウェア的に直接出力す
ることができ、それによってより高速なデータ転送を行
なえる。
が登録された時点で、データ転送すべき入力元リソース
と出力先リソースの両方がOSに分かっている。そこ
で、本実施例では実施例1の転送処理部2(とりわけ入
力要求発行処理部76)の拡張により、そのチャネルに
おけるデータ転送を最適化する。例えば、あるチャネル
における入力元リソースと出力先リソースが同じファイ
ルシステムによって管理された2つのファイルである場
合、このチャネルのバッファとしてファイルシステムの
バッファキャッシュを用いるようにすれば、このチャネ
ルに対してはデータ転送用のバッファ10をカーネル空
間内に別に割り当てる手間を省くことができ、かつ、本
来必要ないメモリ間コピーの回数を減らして、データ転
送をより高速に行なえる。また、ディスプレイのフレー
ムバッファのように、一定のアドレス空間内の領域への
アクセスがハードウェア的に機器へのアクセスへ変換さ
れるような入出力先リソースが、あるチャネルにおける
入力あるいは出力先リソースである場合、そのアドレス
の領域をそのチャネルのバッファとすることにより、メ
モリ間コピーの回数だけでなく処理量をも削減すること
が可能である。さらに、本変形例を実装したOSが動作
する計算機にしかるべき手段が備えられている場合は、
入力元リソースと出力先リソースの組み合わせによって
は、入力元リソースから一度主記憶中にデータを読み込
まずに、出力先リソースにハードウェア的に直接出力す
ることができ、それによってより高速なデータ転送を行
なえる。
【0078】実施例1の入力要求発行処理部76におい
て、ステップ161ではそのチャネルに対応する入力処
理部のアドレスを得る。これを拡張して、このステップ
にて出力処理部のアドレスも得るようにし、2つのアド
レスの組を見て上記のような転送の最適化ができるかど
うか調べるようにする。これは、例えばそうした最適化
が可能なアドレスの組(同じファイルシステムの入力と
出力のためのアドレスなどの組)をテーブルにして、O
S内の適当な領域に格納しておき、これを参照すること
によって行うことができる。調べた結果最適化が可能な
らば、ステップ162以降で呼び出す入力処理部を、別
の、最適化された転送のための処理部への呼び出しに変
更する。この処理部は前記の最適化が可能なアドレスの
組ごとに個別に存在し、それぞれの入力元リソースと出
力先リソースの組に応じた最適なデータ転送を実行す
る。
て、ステップ161ではそのチャネルに対応する入力処
理部のアドレスを得る。これを拡張して、このステップ
にて出力処理部のアドレスも得るようにし、2つのアド
レスの組を見て上記のような転送の最適化ができるかど
うか調べるようにする。これは、例えばそうした最適化
が可能なアドレスの組(同じファイルシステムの入力と
出力のためのアドレスなどの組)をテーブルにして、O
S内の適当な領域に格納しておき、これを参照すること
によって行うことができる。調べた結果最適化が可能な
らば、ステップ162以降で呼び出す入力処理部を、別
の、最適化された転送のための処理部への呼び出しに変
更する。この処理部は前記の最適化が可能なアドレスの
組ごとに個別に存在し、それぞれの入力元リソースと出
力先リソースの組に応じた最適なデータ転送を実行す
る。
【0079】<実施例4>実施例1では、チャネルシス
テムコールがユーザプロセスに返すチャネル識別子を、
記述子の1つとして扱うことができるため、チャネルシ
ステムコールの引数として、別のチャネルのチャネル識
別子を指定できる。そこで、本実施例では、然るべき処
理の実装により、データ転送路の分岐や合流などといっ
た、より複雑な転送経路の設定をユーザプロセスが行え
るようにする。例えば、データ転送路の合流を実現する
場合、次のように実施例1を拡張すればよい。実施例1
の出力要求発行処理部77では、ある1つのチャネル
(cとする)のチャネル構造体13の出力記述子143
を検査する。このステップを拡張して、検査の結果、出
力記述子が別のチャネル(dとする)のチャネル識別子
であった場合に、そのチャネルdのチャネル構造体に格
納された出力記述子に対応する出力先リソースに出力す
るようにする。これにより、チャネルdの出力先リソー
スには、チャネルcの入力元リソースからのデータとチ
ャネルdの入力元リソースからのデータが交互に出力さ
れ、結果として2つの入力元リソースからのデータを合
流させ、1つの出力先リソースに出力することが可能に
なる。また、このやり方だと、さらに別のチャネルの出
力先リソースとしてチャネルc又はチャネルdを指定す
ることにより、3つ以上のチャネルの合流、すなわち3
つ以上の入力元リソースからのデータを合流させること
もできる。データの分岐も、実施例1の入力要求発行処
理部76をこれと同様に拡張することにより容易に実現
することが出来る。
テムコールがユーザプロセスに返すチャネル識別子を、
記述子の1つとして扱うことができるため、チャネルシ
ステムコールの引数として、別のチャネルのチャネル識
別子を指定できる。そこで、本実施例では、然るべき処
理の実装により、データ転送路の分岐や合流などといっ
た、より複雑な転送経路の設定をユーザプロセスが行え
るようにする。例えば、データ転送路の合流を実現する
場合、次のように実施例1を拡張すればよい。実施例1
の出力要求発行処理部77では、ある1つのチャネル
(cとする)のチャネル構造体13の出力記述子143
を検査する。このステップを拡張して、検査の結果、出
力記述子が別のチャネル(dとする)のチャネル識別子
であった場合に、そのチャネルdのチャネル構造体に格
納された出力記述子に対応する出力先リソースに出力す
るようにする。これにより、チャネルdの出力先リソー
スには、チャネルcの入力元リソースからのデータとチ
ャネルdの入力元リソースからのデータが交互に出力さ
れ、結果として2つの入力元リソースからのデータを合
流させ、1つの出力先リソースに出力することが可能に
なる。また、このやり方だと、さらに別のチャネルの出
力先リソースとしてチャネルc又はチャネルdを指定す
ることにより、3つ以上のチャネルの合流、すなわち3
つ以上の入力元リソースからのデータを合流させること
もできる。データの分岐も、実施例1の入力要求発行処
理部76をこれと同様に拡張することにより容易に実現
することが出来る。
【0080】<実施例5>実施例1においては、トラン
スファシステムコールの引数を、チャネルを指定するチ
ャネル識別子と、転送すべきバイト数の2つとしたが、
本実施例では、この他にデータ転送の様式を指定するよ
うなオプションを付け加える(あるいは、別のシステム
コールでオプションの指定を行なっても良い)。こうし
たオプションとしては、例えばデータ転送をできる限り
高速に行なわせるのではなく、それよりも遅いある一定
の転送速度を指定して、その速度でデータ転送を行なわ
せる(いわゆるアイソクロナス(isochronous)データ
転送)、など様々なものが考えられる。このような時間
を意識した機能を実現するためには、OS3内の各処理
部が利用可能な計時機能を計算機システム300内に設
け、実施例1の転送処理部2、とりわけスケジュール処
理部75に、然るべきアルゴリズムを実装すればよい。
このような計時機能は、現在ほとんどの計算機システム
に備わっている。また、スケジュール処理部75に実装
すべきアルゴリズムとしては、リアルタイムスケジュー
リングアルゴリズム、またはマルチメディアスケジュー
リングアルゴリズムとして、従来の技術の項で挙げたGo
vindan他の文献など、過去に多数発表されている。これ
らのアルゴリズムは、わずかな変更を加えるだけでスケ
ジュール処理部75に実装することができる。
スファシステムコールの引数を、チャネルを指定するチ
ャネル識別子と、転送すべきバイト数の2つとしたが、
本実施例では、この他にデータ転送の様式を指定するよ
うなオプションを付け加える(あるいは、別のシステム
コールでオプションの指定を行なっても良い)。こうし
たオプションとしては、例えばデータ転送をできる限り
高速に行なわせるのではなく、それよりも遅いある一定
の転送速度を指定して、その速度でデータ転送を行なわ
せる(いわゆるアイソクロナス(isochronous)データ
転送)、など様々なものが考えられる。このような時間
を意識した機能を実現するためには、OS3内の各処理
部が利用可能な計時機能を計算機システム300内に設
け、実施例1の転送処理部2、とりわけスケジュール処
理部75に、然るべきアルゴリズムを実装すればよい。
このような計時機能は、現在ほとんどの計算機システム
に備わっている。また、スケジュール処理部75に実装
すべきアルゴリズムとしては、リアルタイムスケジュー
リングアルゴリズム、またはマルチメディアスケジュー
リングアルゴリズムとして、従来の技術の項で挙げたGo
vindan他の文献など、過去に多数発表されている。これ
らのアルゴリズムは、わずかな変更を加えるだけでスケ
ジュール処理部75に実装することができる。
【0081】
【発明の効果】本発明では、アプリケーションプログラ
ムがOSにデータ転送を要求するためにOSに対して発
行されるシステムコールの回数が削減され、それにより
このデータ転送に伴うオーバヘッドが低減する。
ムがOSにデータ転送を要求するためにOSに対して発
行されるシステムコールの回数が削減され、それにより
このデータ転送に伴うオーバヘッドが低減する。
【0082】さらに、こうしたデータ転送が同時に複数
実行されているような場合、本発明ではこれらのデータ
転送のスケジュールをOSにより容易に行い得る。
実行されているような場合、本発明ではこれらのデータ
転送のスケジュールをOSにより容易に行い得る。
【図1】本発明によるデータ転送方法を実現するオペレ
ーティングシステムの概略構造を示す図である。
ーティングシステムの概略構造を示す図である。
【図2】従来のオペレーティングシステムにおけるデー
タ転送方法を示す図である。
タ転送方法を示す図である。
【図3】本発明の一実施例におけるチャネル構造体のデ
ータ構造を表す図である。
ータ構造を表す図である。
【図4】上記実施例における転送処理部のプログラム構
造を示す図である。
造を示す図である。
【図5】上記実施例におけるチャネル登録処理部の手順
を示す流れ図である。
を示す流れ図である。
【図6】上記実施例における転送開始/終了処理部の手
順を示す流れ図である。
順を示す流れ図である。
【図7】上記実施例における待機処理部の手順を示す流
れ図である。
れ図である。
【図8】上記実施例におけるスケジュール処理部の手順
の一部を示す流れ図である。
の一部を示す流れ図である。
【図9】上記スケジュール処理部の手順の残部を示す流
れ図である。
れ図である。
【図10】上記実施例における入力要求発行処理部の手
順を示す流れ図である。
順を示す流れ図である。
【図11】上記実施例における入力終了処理部の手順を
示す流れ図である。
示す流れ図である。
【図12】上記実施例における出力終了処理部の手順を
示す流れ図である。
示す流れ図である。
【図13】従来技術によるデータ転送方法を示す図であ
る。
る。
20:チャネルシステムコール、21:トランスファシ
ステムコール
ステムコール
Claims (11)
- 【請求項1】処理装置と、主記憶と、複数の入出力装置
とを有し、複数のアプリケーションプログラムがオペレ
ーティングシステム(OS)の制御の下で実行されてい
る計算機システムにおける、オペレーティングシステム
によるデータ転送方法であって、 転送すべきデータを保持する入力元リソースと、そのデ
ータを受け取るべき出力先リソースとの対と、該入力元
リソースと該出力先リソースとの間で転送すべきデータ
の量とを指定する、該複数のアプリケーションプログラ
ムの一つから発行されたデータ転送要求に応答して、該
入力元リソースに保持されたデータの内、所定量の大き
さのデータ部分を該入力元リソースから該主記憶に読み
込み、 該読み込みの完了後、該読み込まれたデータを該主記憶
から該出力先リソースに書き出し、 該書き出しの完了後、該読み込みと該書き出しを、該デ
ータ転送要求で指定された量のデータが該入力元リソー
スから該出力先リソースに転送されるまで、該入力元リ
ソースに保持された他のデータ部分に対して繰り返し、 該繰返しの終了後に、該アプリケーションプログラム
に、該データ転送要求で要求されたデータ転送の終了を
通知するステップを有するもの。 - 【請求項2】該入力元リソースと該出力先リソースの対
に対応して、該要求されたデータ転送を制御する情報ブ
ロックを記憶し、 上記入力元リソースからのデータ部分の読み込みあるい
は該出力先リソースへの書き出しの実行を該情報ブロッ
クに基づいて制御し、 上記入力元リソースからのデータ部分の読み込みあるい
は該出力先リソースへの書き出しを実行する毎に該情報
ブロックを書き換えるステップをさらに有する請求項1
記載のオペレーティングシステムによるデータ転送方
法。 - 【請求項3】該情報ブロックは、少なくとも、上記デー
タ転送要求で指定された転送データ量、該入力元リソー
スから読み込み済みのデータの総量、該出力先リソース
へ書き出し済みのデータの総量を含み、 上記方法は、 該入力元リソースからの読み込みステップを実行する毎
に、該読み込み済みのデータの総量を更新し、 該出力先リソースへのデータの書き出しを実行する毎
に、該書き出し済みのデータの総量を更新するステップ
をさらに有し、 該繰返すステップは、該更新された、読み込み済みのデ
ータの総量が該要求されたデータ転送量に等しくなるま
で、該入力元リソースからのデータの読み込みを繰返
し、該更新された、書き出し済みのデータの総量が該要
求されたデータ転送量に等しくなるまで、該出力先リソ
ースへのデータの書き出しを繰返すステップを有する請
求項1記載のオペレーティングシステムによるデータ転
送方法。 - 【請求項4】該読み込みステップは、 該データ転送要求に応答して、該入力元のリソースがデ
ータ読み出し可能な状態にあるか否かを判別し、 該入力元のリソースがデータ読み出し可能な状態にある
ときには、上記OS内に準備された複数の入力処理ルー
チンの内、該入力元リソースに対してデータの読み出し
動作を実行可能な一つの入力処理ルーチンに対して、該
入力元リソースから該主記憶へのデータの読み込みを要
求し、 該一つの入力処理ルーチンの制御下で該入力元リソース
に対して該要求された読み込みを該実行するステップを
有し、 該書き出しステップは、 該出力元リソースがデータを書き込み可能な状態にある
か否かを判別し、 該出力元のリソースがデータ書き込み可能な状態にある
ときには、上記OS内に準備された複数の出力処理ルー
チンの内、上記出力元リソースに対してデータの書き込
み動作を実行可能な一つの出力処理ルーチンに対して、
該読み込みステップで読み込まれたデータの該主記憶か
ら該出力先リソースへの書き出しを要求し、 該一つの出力処理ルーチンの制御下で、該出力先リソー
スに対して該要求された書き出しを実行するステップを
有する請求項1記載のオペレーティングシステムによる
データ転送方法。 - 【請求項5】該データ転送要求を該一つのアプリケーシ
ョンプログラムから該OSに発行する前に、その一つの
アプリケーションプログラムから発行された、該入力元
リソースと該出力先リソースとの対の登録要求に応答し
て、上記OS内に準備された複数の入力処理ルーチンの
内、該入力元リソースに対してデータの読み込み動作を
実行可能な一つの入力処理ルーチンと、上記OSに含ま
れた複数の出力処理ルーチンの内、上記出力元リソース
に対してデータの書き込み動作を実行可能な一つの出力
処理ルーチンとを選択し、 選択された一つの入力処理ルーチンを起動するための第
1の情報と該入力元リソースを指定する第2の情報と、
選択された一つの出力処理ルーチンを起動するための第
3の情報と、該出力先リソースを指定する第4の情報を
該主記憶に記憶するステップをさらに有し、 該読み出し要求の発行は、該記憶された第1、第2のの
情報に基づいて、該一つの入力処理ルーチンに、該入力
元リソースからのデータの読み出し込みを要求するステ
ップを有し、 該書き出しは、該記憶された第3、第4の情報に基づい
て、該一つの出力処理ルーチンに、該出力元リソースへ
のデータの書き出しを要求するステップを有する請求項
1記載のオペレーティングシステムによるデータ転送方
法。 - 【請求項6】処理装置と、主記憶と、複数の入出力装置
とを有し、複数のアプリケーションプログラムがオペレ
ーティングシステム(OS)の制御の下で実行されてい
る計算機システムにおける、オペレーティングシステム
によるデータ転送方法であって、 (a)複数のアプリケーションプログラムが要求した複
数のデータ転送を制御する情報ブロックであって、それ
ぞれ、いずれか一つのアプリケーションプログラムを指
定する情報と、転送されるべきデータを保持する、該一
つのアプリケーションプログラムにより指定された入力
元リソースを指定する情報と、そのデータを受けとるべ
き、該一つのアプリケーションプログラムにより指定さ
れた出力先リソースを指定する情報と、その入力元リソ
ースとその出力先リソースとの対に関する、該一つのア
プリケーションにより指定された転送データ量とを含む
ものを記憶し、 (b)該複数の情報ブロックの所定の順に順次選択し、 (c)該ステップ(b)により現在選択された情報ブロ
ックに基づいてデータの読み込みを要求し、その要求で
はその情報ブロックに含まれた、入力元リソースを指定
する情報が指定する入力元リソースから主記憶へのデー
タの読み出しを要求し、 (d)該要求されたデータの読み出しが終了した後、そ
の読み出しが完了したデータを、該主記憶から、その情
報ブロックに含まれた、出力先リソースを指定する情報
により指定される出力先リソースに書き出すことを要求
し、 (e)該要求されたデータの書き出しが終了した後、該
読み出しが完了したデータの後続のデータの読み出しを
要求し、その後続のデータの読み出しが完了する毎に、
その読み出された後続のデータの書き込みを要求するよ
うに、該読み出しの要求ステップ(c)と該書き込みの
要求ステップ(d)とを、該一つの情報ブロックに含ま
れた転送データ量のデータが該入力元リソースから該出
力先リソースに転送されるまで繰返すステップを有し、 ここでステップ(b)は、そのステップ(b)によりす
でに選択された一つ又は複数の情報ブロックの各々に基
づいて、上記ステップ(c)から(e)が実行するのと
並行して、該複数の情報ブロックの内、未選択の複数の
情報ブロックを順次選択するように実行されるもの。 - 【請求項7】該ステップ(a)で選択されたいずれか一
つの情報ブロックに基づいて、該ステップ(b)を実行
する前に、該選択された情報ブロックが指定する入力元
リソースがデータの読み込みが可能な状態にあるか否か
を判別し、 その入力元リソースがデータを読み込み可能であるとき
に上記ステップ(b)をその情報ブロックに基づいて実
行し、 その入力元リソースがデータを読み込み可能でないとき
に上記ステップ(b)をその情報ブロックに対して実行
するのを延期し、 該一つの情報ブロックに基づいて、該ステップ(b)を
実行した後、該ステップ(c)を実行する前に、該選択
された情報ブロックが指定する出力先リソースがデータ
の書き出しが可能な状態にあるか否かを判別し、 その出力先リソースがデータの書き出しが可能であると
きに上記ステップ(c)をその情報ブロックに基づいて
実行し、 その出力先リソースがデータを書き出し読み込み可能で
ないときに上記ステップ(c)をその情報ブロックに対
して実行するのを延期するステップをさらに有する請求
項6記載のオペレーティングシステムによるデータ転送
方法。 - 【請求項8】各情報ブロックは、それが指定する入力元
リソースからデータを主記憶に読み込みが完了したか否
かを示す読み込み完了情報と、該入力元リソースから読
み出されたデータをその情報ブロックが指定する出力先
リソースに書き出し済みか否かを示す書き出し完了情報
をさらに有し、 該方法は、 (f)各情報ブロックに基づく、該ステップ(c)また
はステップ(e)によるステップ(c)の繰返しにおけ
る、データの読み込みが完了する毎に、その情報ブロッ
ク内の、入力元リソースからの読み込みが完了したか否
かを示す上記情報をセットし、 (g)その情報ブロックに基づく、該ステップ(d)ま
たはステップ(e)によるそのステップ(d)の繰返し
におけるデータの書き出しが完了する毎に、その情報ブ
ロック内の、出力先リソースへの書き出しが完了したか
否かを示す上記情報をセットし、 (h)該複数の情報ブロックが繰返し選択されるよう
に、上記ステップ(a)を繰返し、 (i)各情報ブロックが該ステップ(b)または(h)
により選択される毎に、その情報ブロック内の、上記読
み込み完了情報および上記書き出し完了情報に基づい
て、上記ステップ(c)または(d)を行うべきかを判
別するステップをさらに有する請求項6記載のオペレー
ティングシステムによるデータ転送方法。 - 【請求項9】該ステップ(h)は、いずれかの情報ブロ
ックに基づいて実行された該ステップ(c)により要求
された読み出しの完了ごとにおよび該いずれの情報ブロ
ックに基づいて実行された該ステップ(d)により要求
された書き出しの完了ごとに、起動される請求項8記載
のオペレーティングシステムによるデータ転送方法。 - 【請求項10】該ステップ(a)は、 (a1)いずれかのアプリケーションプログラムから発
行された、一つの入力元リソースと出力先リソースの対
の登録要求に応答して、その対を表わす情報を含む一つ
のの情報ブロックを記憶し、 (a2)該一つのアプリケーションプログラムからその
後発行された、上記対と転送データ量とを指定するデー
タ転送要求に応答して、その対に対してステップ(a
1)で記憶された上記一つの情報ブロック内に、その指
定された転送データ量を記憶するステップを有する請求
項8記載のオペレーティングシステムによるデータ転送
方法。 - 【請求項11】各情報ブロックは、データ転送を要求し
たいずれかのアプリケーションプログラムが指定した該
入力元リソースから読み込み済みのデータの総量と、該
アプリケーションプログラムが指定した該出力先リソー
スへ書き出し済みのデータの総量を含み、 上記方法は、 該入力元リソースからの読み込みステップ(c)を実行
する毎に、該読み込み済みのデータの総量を更新し、 該出力先リソースへのデータの書き出しステップ(d)
を実行する毎に、該書き出し済みのデータの総量を更新
するステップをさらに有し、 該繰返すステップ(e)は、該更新された、読み込み済
みのデータの総量が該要求されたデータ転送量に等しく
なるまで、該入力元リソースからのデータの読み込みス
テップ(c)を繰返し、該更新された、書き出し済みの
データの総量が該要求されたデータ転送量に等しくなる
まで、該出力先リソースへのデータの書き出しステップ
(d)を繰返すステップからなる請求項6記載のオペレ
ーティングシステムによるデータ転送方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP7101152A JPH08297585A (ja) | 1995-04-25 | 1995-04-25 | オペレーティングシステムによるデータ転送方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP7101152A JPH08297585A (ja) | 1995-04-25 | 1995-04-25 | オペレーティングシステムによるデータ転送方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH08297585A true JPH08297585A (ja) | 1996-11-12 |
Family
ID=14293087
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP7101152A Pending JPH08297585A (ja) | 1995-04-25 | 1995-04-25 | オペレーティングシステムによるデータ転送方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH08297585A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000068882A1 (fr) * | 1999-05-10 | 2000-11-16 | Sony Corporation | Appareil et procede de traitement d'images, et robot associe |
US7660604B2 (en) | 2002-08-30 | 2010-02-09 | Fujitsu Limited | Mobile terminal |
JP2017037505A (ja) * | 2015-08-11 | 2017-02-16 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
-
1995
- 1995-04-25 JP JP7101152A patent/JPH08297585A/ja active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000068882A1 (fr) * | 1999-05-10 | 2000-11-16 | Sony Corporation | Appareil et procede de traitement d'images, et robot associe |
US6912449B2 (en) | 1999-05-10 | 2005-06-28 | Sony Corporation | Image processing apparatus, robot apparatus and image processing method |
JP4759810B2 (ja) * | 1999-05-10 | 2011-08-31 | ソニー株式会社 | 画像処理装置及びロボット装置並びに画像処理方法 |
US7660604B2 (en) | 2002-08-30 | 2010-02-09 | Fujitsu Limited | Mobile terminal |
JP2017037505A (ja) * | 2015-08-11 | 2017-02-16 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6732138B1 (en) | Method and system for accessing system resources of a data processing system utilizing a kernel-only thread within a user process | |
JP3659062B2 (ja) | 計算機システム | |
US9996401B2 (en) | Task processing method and virtual machine | |
US5742825A (en) | Operating system for office machines | |
US4914570A (en) | Process distribution and sharing system for multiple processor computer system | |
US8387075B1 (en) | Common scheduling and synchronization primitives | |
JP2005284749A (ja) | 並列処理コンピュータ | |
KR101150661B1 (ko) | 정보 처리 장치 및 메모리 영역 관리 방법 | |
JP2004272894A (ja) | グラフィックス処理ユニットのマルチスレッド式カーネル | |
US20050066302A1 (en) | Method and system for minimizing thread switching overheads and memory usage in multithreaded processing using floating threads | |
US5630074A (en) | Inter-program communication and scheduling method for personal computers | |
JP2011526040A (ja) | オペレーションの保護モードスケジューリング | |
JP2004054933A (ja) | メモリ割当ての延期方法及び装置 | |
US10241829B2 (en) | Information processing device, information processing method, recording medium, calculation processing device, calculation processing method | |
JP2002196960A (ja) | ファイル入出力制御方法、ファイル管理サーバ及び並列計算機システム | |
US20050066149A1 (en) | Method and system for multithreaded processing using errands | |
JPH1021094A (ja) | リアルタイム制御方式 | |
JPH06243112A (ja) | マルチプロセッサ装置 | |
US8010963B2 (en) | Method, apparatus and program storage device for providing light weight system calls to improve user mode performance | |
JPH08297585A (ja) | オペレーティングシステムによるデータ転送方法 | |
JP3169624B2 (ja) | プロセッサ間通信方法およびそのための並列プロセッサ | |
US8424013B1 (en) | Methods and systems for handling interrupts across software instances and context switching between instances having interrupt service routine registered to handle the interrupt | |
JP3349547B2 (ja) | スケジューリングシステム | |
JP2021060707A (ja) | 同期制御システムおよび同期制御方法 | |
JP2024116638A (ja) | 情報処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20040420 |