JPH06236287A - 情報処理装置 - Google Patents
情報処理装置Info
- Publication number
- JPH06236287A JPH06236287A JP5022647A JP2264793A JPH06236287A JP H06236287 A JPH06236287 A JP H06236287A JP 5022647 A JP5022647 A JP 5022647A JP 2264793 A JP2264793 A JP 2264793A JP H06236287 A JPH06236287 A JP H06236287A
- Authority
- JP
- Japan
- Prior art keywords
- thread
- queue
- management block
- message
- block
- 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に容易に移行できる情報処理装置を提供する。 【構成】 デバイス管理部11がスレッド1からのI/
O要求によりデバイスドライバ7を起動し、デバイスド
ライバ7がI/O完了時にフラグテーブル6中のI/O
完了フラグをオンにし、スケジューラ8がI/Oキュー
4に接続されたスレッド管理ブロック内のI/O完了フ
ラグをポーリングしてI/O完了フラグがオンになって
いるものからレディキュー5に接続し直して、レディキ
ュー5の中から次の実行スレッドを選択してディスパッ
チャ9を起動してスイッチングを行なうことにより、マ
ルチタスクOSの1タスク上に複数のスレッド1を作
り、各スレッド1がそれぞれのデバイス制御を行なう。
クのOSに容易に移行できる情報処理装置を提供する。 【構成】 デバイス管理部11がスレッド1からのI/
O要求によりデバイスドライバ7を起動し、デバイスド
ライバ7がI/O完了時にフラグテーブル6中のI/O
完了フラグをオンにし、スケジューラ8がI/Oキュー
4に接続されたスレッド管理ブロック内のI/O完了フ
ラグをポーリングしてI/O完了フラグがオンになって
いるものからレディキュー5に接続し直して、レディキ
ュー5の中から次の実行スレッドを選択してディスパッ
チャ9を起動してスイッチングを行なうことにより、マ
ルチタスクOSの1タスク上に複数のスレッド1を作
り、各スレッド1がそれぞれのデバイス制御を行なう。
Description
【0001】
【産業上の利用分野】本発明は、マルチタスクOS上の
1タスク内で動作する情報処理装置に関するものであ
る。
1タスク内で動作する情報処理装置に関するものであ
る。
【0002】
【従来の技術】近年、ワークステーションなどの計算機
システム上には、マルチタスクOSが搭載され、さら
に、種々の開発環境が整えられているため、組み込み機
器用のアプリケーションのクロス開発やプロトタイプ開
発などが行なわれている。また、複数のデバイスを制御
するような組み込み機器においては、マルチタスクの機
構を持ったOS上にアプリケーションを構築すると効率
がよい。しかし、このようなOS上で複数のタスクを用
いて開発したアプリケーションは、ターゲットの機器上
に使用するOSがコストなどの問題からシングルタスク
であった場合、移行が容易ではなく、大幅な修正を要求
される。
システム上には、マルチタスクOSが搭載され、さら
に、種々の開発環境が整えられているため、組み込み機
器用のアプリケーションのクロス開発やプロトタイプ開
発などが行なわれている。また、複数のデバイスを制御
するような組み込み機器においては、マルチタスクの機
構を持ったOS上にアプリケーションを構築すると効率
がよい。しかし、このようなOS上で複数のタスクを用
いて開発したアプリケーションは、ターゲットの機器上
に使用するOSがコストなどの問題からシングルタスク
であった場合、移行が容易ではなく、大幅な修正を要求
される。
【0003】従来、マルチタスクOS上の情報処理装置
は、図6のように、デバイスドライバ60と、タスク6
1とを備えていた。複数のデバイスドライバ60は、マ
ルチタスクOS上に作成された同期型のI/Oを行な
う。複数のタスク61は、マルチタスクOS上に作成さ
れたI/Oの実行依頼などを行なう。図7は上記従来の
情報処理装置を用いた場合のデバイス制御のようすを表
す摸式図である。
は、図6のように、デバイスドライバ60と、タスク6
1とを備えていた。複数のデバイスドライバ60は、マ
ルチタスクOS上に作成された同期型のI/Oを行な
う。複数のタスク61は、マルチタスクOS上に作成さ
れたI/Oの実行依頼などを行なう。図7は上記従来の
情報処理装置を用いた場合のデバイス制御のようすを表
す摸式図である。
【0004】なお図示していないが、デバイスドライバ
60は、3つの同期型のデバイスドライバ60a,60
b,60cを含んでおり、デバイスドライバ60aは光
磁気ディスク装置に対して実際のI/O命令を行ない、
デバイスドライバ60bは圧縮画像の伸長ボードに対し
て実際のI/O命令を行ない、デバイスドライバ60c
はDMAコントローラのハードウェアに対して実際のI
/O命令を行なう。タスク61は、3つのタスク61
a,61b,61cを含んでおり、タスク61aは光磁
気ディスク装置を制御し、タスク61bは圧縮画像の伸
長ボードを制御し、タスク61cはDMAコントローラ
のハードウェアを制御する。メインメモリ上には、圧縮
画像データ読み込み用の第1および第2のバッファ領域
と、伸長ボードにより第1または第2のバッファ領域の
圧縮画像データを伸長したデータを格納する第3のバッ
ファ領域とが設定されている。光磁気ディスク装置の光
磁気ディスクには、圧縮された画像データが格納されて
いる。伸長ボードは、メインメモリ上の圧縮画像をメイ
ンメモリ上の別の領域へ伸長する。DMAコントローラ
は、メインメモリからVRAMへのメモリ間転送を行な
う。伸長ボードとDMAコントローラとの処理速度は、
合計しても光磁気ディスク装置の処理速度に比べ速い。
初期状態では、第1のバッファ領域には既に圧縮画像デ
ータが読み込まれているものとする。
60は、3つの同期型のデバイスドライバ60a,60
b,60cを含んでおり、デバイスドライバ60aは光
磁気ディスク装置に対して実際のI/O命令を行ない、
デバイスドライバ60bは圧縮画像の伸長ボードに対し
て実際のI/O命令を行ない、デバイスドライバ60c
はDMAコントローラのハードウェアに対して実際のI
/O命令を行なう。タスク61は、3つのタスク61
a,61b,61cを含んでおり、タスク61aは光磁
気ディスク装置を制御し、タスク61bは圧縮画像の伸
長ボードを制御し、タスク61cはDMAコントローラ
のハードウェアを制御する。メインメモリ上には、圧縮
画像データ読み込み用の第1および第2のバッファ領域
と、伸長ボードにより第1または第2のバッファ領域の
圧縮画像データを伸長したデータを格納する第3のバッ
ファ領域とが設定されている。光磁気ディスク装置の光
磁気ディスクには、圧縮された画像データが格納されて
いる。伸長ボードは、メインメモリ上の圧縮画像をメイ
ンメモリ上の別の領域へ伸長する。DMAコントローラ
は、メインメモリからVRAMへのメモリ間転送を行な
う。伸長ボードとDMAコントローラとの処理速度は、
合計しても光磁気ディスク装置の処理速度に比べ速い。
初期状態では、第1のバッファ領域には既に圧縮画像デ
ータが読み込まれているものとする。
【0005】この従来の情報処理装置においては、先ず
タスク61aが光磁気ディスク装置の光磁気ディスクに
格納されている画像データをメインメモリ上の第2のバ
ッファ領域に読み込むためのシステムコールを発行す
る。これによりマルチタスクOSが、光磁気ディスク装
置用のデバイスドライバ60aを起動する。これにより
デバイスドライバ60aが、光磁気ディスクの画像デー
タをメインメモリ上の第2のバッファ領域に読み込むた
めのI/O 命令を光磁気ディスク装置に発行する。こ
れによりマルチタスクOSが、タスク61aをI/O待
ち状態とした後、タスク61bを実行状態へ移行する。
これによりタスク61bが、第1のバッファ領域の画像
データを伸長して第3のバッファ領域へ格納するための
システムコールを発行する。これによりマルチタスクO
Sが、圧縮画像の伸長ボード用のデバイスドライバ60
bを起動する。これによりデバイスドライバ60bが、
第1のバッファ領域にある画像データを伸長して第3の
バッファ領域へ格納するためのI/O命令を伸長ボード
に発行する。これによりマルチタスクOSが、タスク6
1bをI/O待ちとした後、タスク61cを実行状態へ
移行する。これによりタスク61cが、第3のバッファ
領域に画像データが格納されるまでポーリングした後、
第3のバッファ領域の画像データをVRAMへDMA転
送するためのシステムコールを発行する。これによりマ
ルチタスクOSが、DMAコントローラ用のデバイスド
ライバ60cを起動する。これによりデバイスドライバ
60cが、第3のバッファ領域の画像データをVRAM
へDMA転送するするためのI/O命令を伸長ボードに
発行する。これによりマルチタスクOSが、タスク61
cをI/O待ちとした後、タスク61aを実行状態へ移
行する。これによりタスク61aが、第2のバッファ領
域から第1のバッファ領域へ圧縮画像読み込み用のバッ
ファを切り替え、以下、上記の動作が繰り返される。こ
の結果、光磁気ディスクの画像データが表示画面に次々
と表示される。
タスク61aが光磁気ディスク装置の光磁気ディスクに
格納されている画像データをメインメモリ上の第2のバ
ッファ領域に読み込むためのシステムコールを発行す
る。これによりマルチタスクOSが、光磁気ディスク装
置用のデバイスドライバ60aを起動する。これにより
デバイスドライバ60aが、光磁気ディスクの画像デー
タをメインメモリ上の第2のバッファ領域に読み込むた
めのI/O 命令を光磁気ディスク装置に発行する。こ
れによりマルチタスクOSが、タスク61aをI/O待
ち状態とした後、タスク61bを実行状態へ移行する。
これによりタスク61bが、第1のバッファ領域の画像
データを伸長して第3のバッファ領域へ格納するための
システムコールを発行する。これによりマルチタスクO
Sが、圧縮画像の伸長ボード用のデバイスドライバ60
bを起動する。これによりデバイスドライバ60bが、
第1のバッファ領域にある画像データを伸長して第3の
バッファ領域へ格納するためのI/O命令を伸長ボード
に発行する。これによりマルチタスクOSが、タスク6
1bをI/O待ちとした後、タスク61cを実行状態へ
移行する。これによりタスク61cが、第3のバッファ
領域に画像データが格納されるまでポーリングした後、
第3のバッファ領域の画像データをVRAMへDMA転
送するためのシステムコールを発行する。これによりマ
ルチタスクOSが、DMAコントローラ用のデバイスド
ライバ60cを起動する。これによりデバイスドライバ
60cが、第3のバッファ領域の画像データをVRAM
へDMA転送するするためのI/O命令を伸長ボードに
発行する。これによりマルチタスクOSが、タスク61
cをI/O待ちとした後、タスク61aを実行状態へ移
行する。これによりタスク61aが、第2のバッファ領
域から第1のバッファ領域へ圧縮画像読み込み用のバッ
ファを切り替え、以下、上記の動作が繰り返される。こ
の結果、光磁気ディスクの画像データが表示画面に次々
と表示される。
【0006】
【発明が解決しようとする課題】しかしながら上記従来
の情報処理装置では、マルチタスクOS上において、各
タスクに1つづつのデバイスの制御を同期的に行なわせ
ることにより、複数のデバイスの並列的な制御を簡単
に、かつ、効率よく記述することが可能であるものの、
ターゲットの機器が使用するOSが、コストなどの問題
からシングルタスクになった場合、各デバイス毎に1つ
のタスクを用意して制御を行なうことができず、移行が
容易ではなく、大幅な修正を要求されるという問題点を
有していた。また、並列にデバイスに対して命令を実行
する場合には、各デバイスドライバとそれらを制御する
スレッドとの関係を1対1とした場合、複数のデバイス
の制御を簡単に、かつ、効率よく記述することが可能で
あるものの、デバイスに対してシーケンシャルに命令を
実行する場合でも、各デバイス毎にスレッドを作成しな
ければならないという問題点を有していた。また、ペン
入力などを扱うデバイスドライバを接続した場合、イベ
ントの有無の状況をマルチタスクOSのシステムコール
を介してポーリングした場合、そのオーバヘッドにより
他のスレッドのスループットが落ちるという問題点を有
していた。
の情報処理装置では、マルチタスクOS上において、各
タスクに1つづつのデバイスの制御を同期的に行なわせ
ることにより、複数のデバイスの並列的な制御を簡単
に、かつ、効率よく記述することが可能であるものの、
ターゲットの機器が使用するOSが、コストなどの問題
からシングルタスクになった場合、各デバイス毎に1つ
のタスクを用意して制御を行なうことができず、移行が
容易ではなく、大幅な修正を要求されるという問題点を
有していた。また、並列にデバイスに対して命令を実行
する場合には、各デバイスドライバとそれらを制御する
スレッドとの関係を1対1とした場合、複数のデバイス
の制御を簡単に、かつ、効率よく記述することが可能で
あるものの、デバイスに対してシーケンシャルに命令を
実行する場合でも、各デバイス毎にスレッドを作成しな
ければならないという問題点を有していた。また、ペン
入力などを扱うデバイスドライバを接続した場合、イベ
ントの有無の状況をマルチタスクOSのシステムコール
を介してポーリングした場合、そのオーバヘッドにより
他のスレッドのスループットが落ちるという問題点を有
していた。
【0007】本発明はかかる事情に鑑みて成されたもの
であり、並列なデバイス制御を容易とし、かつ、シング
ルタスクのOSにも容易に移行することができる情報処
理装置を提供することを目的とする。また、スレッドと
デバイスドライバとの関係を固定せずに、どのスレッド
も動的に複数のデバイスドライバに対してI/O要求を
出すことができる情報処理装置を提供することを目的と
する。
であり、並列なデバイス制御を容易とし、かつ、シング
ルタスクのOSにも容易に移行することができる情報処
理装置を提供することを目的とする。また、スレッドと
デバイスドライバとの関係を固定せずに、どのスレッド
も動的に複数のデバイスドライバに対してI/O要求を
出すことができる情報処理装置を提供することを目的と
する。
【0008】また、オーバヘッドを軽減し、スループッ
トを向上することができる情報処理装置を提供すること
を目的とする。
トを向上することができる情報処理装置を提供すること
を目的とする。
【0009】
【課題を解決するための手段】請求項1の発明は、マル
チタスクOSの1タスク上またはシングルタスクOS上
に、スタックポインタや汎用レジスタ値などのコンテキ
スト情報を保持するスレッド管理ブロックを退避および
復帰しながら各種処理を行なう複数のスレッドと、この
スレッドに含まれて、各デバイスに1対1に対応してI
/O命令を発行することにより各デバイスの制御を行な
う複数のデバイス制御スレッドと、前記スレッド管理ブ
ロックを全スレッドについて保持するスレッド管理テー
ブルと、I/O待ち状態にあるスレッド管理ブロックを
キューイングするI/Oキューと、実行可能状態にある
スレッド管理ブロックをキューイングするレディーキュ
ーと、I/Oの完了を通知する領域であるI/O完了フ
ラグを各デバイス毎に保持するフラグテーブルと、各デ
バイスに対して非同期I/Oを行ない、I/O完了時に
前記フラグテーブル内の対応するI/O完了フラグをオ
ンとする複数のデバイスドライバと、前記フラグテーブ
ルを検索して、いずれかのI/O完了フラグがオンとな
っているならば対応するデバイス制御スレッドのスレッ
ド管理ブロックを前記I/Oキューから外して前記レデ
ィキューにキューイングした後、前記レディキューの中
から次実行のスレッド管理ブロックを決定し、そのスレ
ッド管理ブロックを前記レディキューから外すスケジュ
ーラと、現在実行中のスレッドのコンテキスト情報をそ
のスレッドに対応するスレッド管理ブロックに退避した
後、前記スケジューラで決定されたスレッド管理ブロッ
クに保持されているコンテキスト情報をスタックポイン
タや汎用レジスタなどに復帰して、スレッドの実行を切
り替えるディスパッチャと、前記デバイス制御スレッド
により発行された前記デバイスドライバに対するI/O
命令を前記マルチタスクOSまたはシングルタスクOS
に依存したI/O命令に変換して、それを前記マルチタ
スクOSかまたはシングルタスクOSに対して発行する
OS依存部と、前記デバイス制御スレッドからのI/O
要求を受理して対応する前記フラグテーブル内のI/O
完了フラグをオフとし、要求を受理したデバイス制御ス
レッドのスレッド管理ブロックを前記I/Oキューにキ
ューイングした後、前記OS依存部に対して前記デバイ
ス制御スレッドからのI/O命令を発行し、前記スケジ
ューラを起動するデバイス管理部と、前記各スレッドが
ポートを指定して送信する送信メッセージ情報を保持す
る送信ブロックを各ポート毎にキューイングする送信キ
ューと、受信を要求したスレッドのスレッド管理ブロッ
クをキューイングする受信キューとの組を保持するメッ
セージテーブルと、前記スレッドからの受信要求時に指
定ポートの前記メッセージテーブル内の送信キューに送
信ブロックがキューイングされているならば、送信キュ
ーから送信ブロックを1つ外した後、受信要求スレッド
のスレッド管理ブロックを前記レディキューにキューイ
ングし、指定ポートの前記メッセージテーブル内の送信
キューに送信ブロックがキューイングされていないなら
ば、指定ポートの前記メッセージテーブル内の受信キュ
ーにスレッド管理ブロックをキューイングし、前記スレ
ッドからの送信要求時に指定ポートの前記メッセージテ
ーブル内の受信キューにスレッド管理ブロックがキュー
イングされているならば、受信キューからスレッド管理
ブロックを1つ外した後、受信要求スレッドの前記スレ
ッド管理ブロックを前記レディキューにキューイング
し、指定ポートの前記メッセージテーブル内の受信キュ
ーにスレッド管理ブロックがキューイングされていない
ならば、指定ポートの前記メッセージテーブル内の送信
キューに送信ブロックをキューイングし、その後、前記
スケジューラを起動するメッセージ管理部と、を備えた
ことを特徴としている。
チタスクOSの1タスク上またはシングルタスクOS上
に、スタックポインタや汎用レジスタ値などのコンテキ
スト情報を保持するスレッド管理ブロックを退避および
復帰しながら各種処理を行なう複数のスレッドと、この
スレッドに含まれて、各デバイスに1対1に対応してI
/O命令を発行することにより各デバイスの制御を行な
う複数のデバイス制御スレッドと、前記スレッド管理ブ
ロックを全スレッドについて保持するスレッド管理テー
ブルと、I/O待ち状態にあるスレッド管理ブロックを
キューイングするI/Oキューと、実行可能状態にある
スレッド管理ブロックをキューイングするレディーキュ
ーと、I/Oの完了を通知する領域であるI/O完了フ
ラグを各デバイス毎に保持するフラグテーブルと、各デ
バイスに対して非同期I/Oを行ない、I/O完了時に
前記フラグテーブル内の対応するI/O完了フラグをオ
ンとする複数のデバイスドライバと、前記フラグテーブ
ルを検索して、いずれかのI/O完了フラグがオンとな
っているならば対応するデバイス制御スレッドのスレッ
ド管理ブロックを前記I/Oキューから外して前記レデ
ィキューにキューイングした後、前記レディキューの中
から次実行のスレッド管理ブロックを決定し、そのスレ
ッド管理ブロックを前記レディキューから外すスケジュ
ーラと、現在実行中のスレッドのコンテキスト情報をそ
のスレッドに対応するスレッド管理ブロックに退避した
後、前記スケジューラで決定されたスレッド管理ブロッ
クに保持されているコンテキスト情報をスタックポイン
タや汎用レジスタなどに復帰して、スレッドの実行を切
り替えるディスパッチャと、前記デバイス制御スレッド
により発行された前記デバイスドライバに対するI/O
命令を前記マルチタスクOSまたはシングルタスクOS
に依存したI/O命令に変換して、それを前記マルチタ
スクOSかまたはシングルタスクOSに対して発行する
OS依存部と、前記デバイス制御スレッドからのI/O
要求を受理して対応する前記フラグテーブル内のI/O
完了フラグをオフとし、要求を受理したデバイス制御ス
レッドのスレッド管理ブロックを前記I/Oキューにキ
ューイングした後、前記OS依存部に対して前記デバイ
ス制御スレッドからのI/O命令を発行し、前記スケジ
ューラを起動するデバイス管理部と、前記各スレッドが
ポートを指定して送信する送信メッセージ情報を保持す
る送信ブロックを各ポート毎にキューイングする送信キ
ューと、受信を要求したスレッドのスレッド管理ブロッ
クをキューイングする受信キューとの組を保持するメッ
セージテーブルと、前記スレッドからの受信要求時に指
定ポートの前記メッセージテーブル内の送信キューに送
信ブロックがキューイングされているならば、送信キュ
ーから送信ブロックを1つ外した後、受信要求スレッド
のスレッド管理ブロックを前記レディキューにキューイ
ングし、指定ポートの前記メッセージテーブル内の送信
キューに送信ブロックがキューイングされていないなら
ば、指定ポートの前記メッセージテーブル内の受信キュ
ーにスレッド管理ブロックをキューイングし、前記スレ
ッドからの送信要求時に指定ポートの前記メッセージテ
ーブル内の受信キューにスレッド管理ブロックがキュー
イングされているならば、受信キューからスレッド管理
ブロックを1つ外した後、受信要求スレッドの前記スレ
ッド管理ブロックを前記レディキューにキューイング
し、指定ポートの前記メッセージテーブル内の受信キュ
ーにスレッド管理ブロックがキューイングされていない
ならば、指定ポートの前記メッセージテーブル内の送信
キューに送信ブロックをキューイングし、その後、前記
スケジューラを起動するメッセージ管理部と、を備えた
ことを特徴としている。
【0010】請求項2の発明は、スレッド管理ブロック
が、スレッド管理情報に加えてスレッド毎に現在I/O
待ち状態にあるデバイスに対応するI/O完了フラグへ
のポインタを保持し、スケジューラが、I/Oキューを
検索してスレッド管理ブロックの保持するI/O完了フ
ラグへのポインタを参照し、いずれかのI/O完了フラ
グがオンとなっているならば対応するスレッド管理ブロ
ックをI/Oキューから外してレディキューにキューイ
ングした後、前記レディキューの中から次実行のスレッ
ド管理ブロックを決定し、そのスレッド管理ブロックを
前記レディキューから外す構成としたことを特徴として
いる。
が、スレッド管理情報に加えてスレッド毎に現在I/O
待ち状態にあるデバイスに対応するI/O完了フラグへ
のポインタを保持し、スケジューラが、I/Oキューを
検索してスレッド管理ブロックの保持するI/O完了フ
ラグへのポインタを参照し、いずれかのI/O完了フラ
グがオンとなっているならば対応するスレッド管理ブロ
ックをI/Oキューから外してレディキューにキューイ
ングした後、前記レディキューの中から次実行のスレッ
ド管理ブロックを決定し、そのスレッド管理ブロックを
前記レディキューから外す構成としたことを特徴として
いる。
【0011】請求項3の発明は、イベント入力を扱い、
イベントを保持していれば、フラグテーブル内の対応す
るI/O完了フラグをオンとし、イベントを保持してい
なければオフとするイベントドライバと、スレッドから
のイベント獲得要求を受理し、フラグテーブル内の対応
するI/O完了フラグがオンであればOS依存部を介し
て前記イベントドライバを起動してイベントを獲得した
後、前記スレッドをレディキューにキューイングし、オ
フであれば、前記スレッドのスレッド管理ブロックをI
/Oキューにキューイングした後、スケジューラを起動
し、再び実行状態となったときに前記OS依存部を介し
て前記イベントドライバを起動してイベントを獲得する
イベント管理部と、を備えたことを特徴としている。
イベントを保持していれば、フラグテーブル内の対応す
るI/O完了フラグをオンとし、イベントを保持してい
なければオフとするイベントドライバと、スレッドから
のイベント獲得要求を受理し、フラグテーブル内の対応
するI/O完了フラグがオンであればOS依存部を介し
て前記イベントドライバを起動してイベントを獲得した
後、前記スレッドをレディキューにキューイングし、オ
フであれば、前記スレッドのスレッド管理ブロックをI
/Oキューにキューイングした後、スケジューラを起動
し、再び実行状態となったときに前記OS依存部を介し
て前記イベントドライバを起動してイベントを獲得する
イベント管理部と、を備えたことを特徴としている。
【0012】
【作用】請求項1の発明において、複数のスレッドは、
スタックポインタや汎用レジスタ値などのコンテキスト
情報を保持するスレッド管理ブロックを退避および復帰
しながら各種処理を行なう。複数のデバイス制御スレッ
ドは、スレッドに含まれて、各デバイスに1対1に対応
してI/O命令を発行することにより各デバイスの制御
を行なう。スレッド管理テーブルは、スレッド管理ブロ
ックを全スレッドについて保持する。I/Oキューは、
I/O待ち状態にあるスレッド管理ブロックをキューイ
ングする。レディーキューは、実行可能状態にあるスレ
ッド管理ブロックをキューイングする。フラグテーブル
は、I/Oの完了を通知する領域であるI/O完了フラ
グを各デバイス毎に保持する。複数のデバイスドライバ
は、各デバイスに対して非同期I/Oを行ない、I/O
完了時にフラグテーブル内の対応するI/O完了フラグ
をオンとする。スケジューラは、フラグテーブルを検索
して、いずれかのI/O完了フラグがオンとなっている
ならば対応するデバイス制御スレッドのスレッド管理ブ
ロックをI/Oキューから外してレディキューにキュー
イングした後、レディキューの中から次実行のスレッド
管理ブロックを決定し、そのスレッド管理ブロックをレ
ディキューから外す。ディスパッチャは、現在実行中の
スレッドのコンテキスト情報をそのスレッドに対応する
スレッド管理ブロックに退避した後、スケジューラで決
定されたスレッド管理ブロックに保持されているコンテ
キスト情報をスタックポインタや汎用レジスタなどに復
帰して、スレッドの実行を切り替える。OS依存部は、
デバイス制御スレッドにより発行されたデバイスドライ
バに対するI/O命令をマルチタスクOSまたはシング
ルタスクOSに依存したI/O命令に変換して、それを
マルチタスクOSかまたはシングルタスクOSに対して
発行する。デバイス管理部は、デバイス制御スレッドか
らのI/O要求を受理して対応するフラグテーブル内の
I/O完了フラグをオフとし、要求を受理したデバイス
制御スレッドのスレッド管理ブロックをI/Oキューに
キューイングした後、OS依存部に対してデバイス制御
スレッドからのI/O命令を発行し、スケジューラを起
動する。メッセージテーブルは、各スレッドがポートを
指定して送信する送信メッセージ情報を保持する送信ブ
ロックを各ポート毎にキューイングする送信キューと、
受信を要求したスレッドのスレッド管理ブロックをキュ
ーイングする受信キューとの組を保持する。メッセージ
管理部は、スレッドからの受信要求時に指定ポートのメ
ッセージテーブル内の送信キューに送信ブロックがキュ
ーイングされているならば、送信キューから送信ブロッ
クを1つ外した後、受信要求スレッドのスレッド管理ブ
ロックをレディキューにキューイングし、指定ポートの
メッセージテーブル内の送信キューに送信ブロックがキ
ューイングされていないならば、指定ポートのメッセー
ジテーブル内の受信キューにスレッド管理ブロックをキ
ューイングし、スレッドからの送信要求時に指定ポート
のメッセージテーブル内の受信キューにスレッド管理ブ
ロックがキューイングされているならば、受信キューか
らスレッド管理ブロックを1つ外した後、受信要求スレ
ッドのスレッド管理ブロックをレディキューにキューイ
ングし、指定ポートのメッセージテーブル内の受信キュ
ーにスレッド管理ブロックがキューイングされていない
ならば、指定ポートのメッセージテーブル内の送信キュ
ーに送信ブロックをキューイングし、その後、スケジュ
ーラを起動する。
スタックポインタや汎用レジスタ値などのコンテキスト
情報を保持するスレッド管理ブロックを退避および復帰
しながら各種処理を行なう。複数のデバイス制御スレッ
ドは、スレッドに含まれて、各デバイスに1対1に対応
してI/O命令を発行することにより各デバイスの制御
を行なう。スレッド管理テーブルは、スレッド管理ブロ
ックを全スレッドについて保持する。I/Oキューは、
I/O待ち状態にあるスレッド管理ブロックをキューイ
ングする。レディーキューは、実行可能状態にあるスレ
ッド管理ブロックをキューイングする。フラグテーブル
は、I/Oの完了を通知する領域であるI/O完了フラ
グを各デバイス毎に保持する。複数のデバイスドライバ
は、各デバイスに対して非同期I/Oを行ない、I/O
完了時にフラグテーブル内の対応するI/O完了フラグ
をオンとする。スケジューラは、フラグテーブルを検索
して、いずれかのI/O完了フラグがオンとなっている
ならば対応するデバイス制御スレッドのスレッド管理ブ
ロックをI/Oキューから外してレディキューにキュー
イングした後、レディキューの中から次実行のスレッド
管理ブロックを決定し、そのスレッド管理ブロックをレ
ディキューから外す。ディスパッチャは、現在実行中の
スレッドのコンテキスト情報をそのスレッドに対応する
スレッド管理ブロックに退避した後、スケジューラで決
定されたスレッド管理ブロックに保持されているコンテ
キスト情報をスタックポインタや汎用レジスタなどに復
帰して、スレッドの実行を切り替える。OS依存部は、
デバイス制御スレッドにより発行されたデバイスドライ
バに対するI/O命令をマルチタスクOSまたはシング
ルタスクOSに依存したI/O命令に変換して、それを
マルチタスクOSかまたはシングルタスクOSに対して
発行する。デバイス管理部は、デバイス制御スレッドか
らのI/O要求を受理して対応するフラグテーブル内の
I/O完了フラグをオフとし、要求を受理したデバイス
制御スレッドのスレッド管理ブロックをI/Oキューに
キューイングした後、OS依存部に対してデバイス制御
スレッドからのI/O命令を発行し、スケジューラを起
動する。メッセージテーブルは、各スレッドがポートを
指定して送信する送信メッセージ情報を保持する送信ブ
ロックを各ポート毎にキューイングする送信キューと、
受信を要求したスレッドのスレッド管理ブロックをキュ
ーイングする受信キューとの組を保持する。メッセージ
管理部は、スレッドからの受信要求時に指定ポートのメ
ッセージテーブル内の送信キューに送信ブロックがキュ
ーイングされているならば、送信キューから送信ブロッ
クを1つ外した後、受信要求スレッドのスレッド管理ブ
ロックをレディキューにキューイングし、指定ポートの
メッセージテーブル内の送信キューに送信ブロックがキ
ューイングされていないならば、指定ポートのメッセー
ジテーブル内の受信キューにスレッド管理ブロックをキ
ューイングし、スレッドからの送信要求時に指定ポート
のメッセージテーブル内の受信キューにスレッド管理ブ
ロックがキューイングされているならば、受信キューか
らスレッド管理ブロックを1つ外した後、受信要求スレ
ッドのスレッド管理ブロックをレディキューにキューイ
ングし、指定ポートのメッセージテーブル内の受信キュ
ーにスレッド管理ブロックがキューイングされていない
ならば、指定ポートのメッセージテーブル内の送信キュ
ーに送信ブロックをキューイングし、その後、スケジュ
ーラを起動する。
【0013】請求項2の発明において、スレッド管理ブ
ロックは、スレッド管理情報に加えてスレッド毎に現在
I/O待ち状態にあるデバイスに対応するI/O完了フ
ラグへのポインタを保持する。スケジューラは、I/O
キューを検索してスレッド管理ブロックの保持するI/
O完了フラグへのポインタを参照し、いずれかのI/O
完了フラグがオンとなっているならば対応するスレッド
管理ブロックをI/Oキューから外してレディキューに
キューイングした後、レディキューの中から次実行のス
レッド管理ブロックを決定し、そのスレッド管理ブロッ
クをレディキューから外す。
ロックは、スレッド管理情報に加えてスレッド毎に現在
I/O待ち状態にあるデバイスに対応するI/O完了フ
ラグへのポインタを保持する。スケジューラは、I/O
キューを検索してスレッド管理ブロックの保持するI/
O完了フラグへのポインタを参照し、いずれかのI/O
完了フラグがオンとなっているならば対応するスレッド
管理ブロックをI/Oキューから外してレディキューに
キューイングした後、レディキューの中から次実行のス
レッド管理ブロックを決定し、そのスレッド管理ブロッ
クをレディキューから外す。
【0014】請求項3の発明において、イベントドライ
バは、イベント入力を扱い、イベントを保持していれ
ば、フラグテーブル内の対応するI/O完了フラグをオ
ンとし、イベントを保持していなければオフとする。イ
ベント管理部は、スレッドからのイベント獲得要求を受
理し、フラグテーブル内の対応するI/O完了フラグが
オンであればOS依存部を介してイベントドライバを起
動してイベントを獲得した後、スレッドをレディキュー
にキューイングし、オフであれば、スレッドのスレッド
管理ブロックをI/Oキューにキューイングした後、ス
ケジューラを起動し、再び実行状態となったときにOS
依存部を介してイベントドライバを起動してイベントを
獲得する。
バは、イベント入力を扱い、イベントを保持していれ
ば、フラグテーブル内の対応するI/O完了フラグをオ
ンとし、イベントを保持していなければオフとする。イ
ベント管理部は、スレッドからのイベント獲得要求を受
理し、フラグテーブル内の対応するI/O完了フラグが
オンであればOS依存部を介してイベントドライバを起
動してイベントを獲得した後、スレッドをレディキュー
にキューイングし、オフであれば、スレッドのスレッド
管理ブロックをI/Oキューにキューイングした後、ス
ケジューラを起動し、再び実行状態となったときにOS
依存部を介してイベントドライバを起動してイベントを
獲得する。
【0015】
【実施例】以下、本発明の実施例を図面を用いて詳細に
説明する。 (実施例1)図1は本発明の実施例1における情報処理
装置の構成図で、この情報処理装置は、スレッド1と、
デバイス制御スレッド2と、スレッド管理テーブル3
と、I/Oキュー4と、レディキュー5と、フラグテー
ブル6と、デバイスドライバ7と、スケジューラ8と、
ディスパッチャ9と、OS依存部10と、デバイス管理
部11と、メッセージテーブル12と、メッセージ管理
部13とを備えている。複数のスレッド1は、マルチタ
スクOSの1タスク上またはシングルタスクOS上に、
スタックポインタや汎用レジスタ値などのコンテキスト
情報を保持するスレッド管理ブロックを退避および復帰
しながら各種処理を行なう。複数のデバイス制御スレッ
ド2は、スレッド1に含まれており、各デバイスに1対
1に対応してI/O命令を発行することにより各デバイ
スの制御を行なう。スレッド管理テーブル3は、スレッ
ド管理ブロックを全てのスレッド1について保持する。
I/Oキュー4は、I/O待ち状態にあるスレッド管理
ブロックをキューイングする。レディキュー5は、実行
可能状態にあるスレッド管理ブロックをキューイングす
る。フラグテーブル6は、I/Oの完了を通知する領域
であるI/O完了フラグを各デバイス毎に保持する。複
数のデバイスドライバ7は、各デバイスに対して非同期
I/Oを行ない、I/O完了時にフラグテーブル6内の
対応するI/O完了フラグをオンとする。スケジューラ
8は、フラグテーブル6を検索して、いずれかのI/O
完了フラグがオンとなっているならば対応するデバイス
制御スレッド2のスレッド管理ブロックをI/Oキュー
4から外してレディキュー5にキューイングした後、レ
ディキュー5の中から次実行のスレッド管理ブロックを
決定し、そのスレッド管理ブロックをレディキュー5か
ら外す。ディスパッチャ9は、現在実行中のスレッド1
のコンテキスト情報をそのスレッド1に対応するスレッ
ド管理ブロックに退避した後、スケジューラ8で決定さ
れたスレッド管理ブロックに保持されているコンテキス
ト情報をスタックポインタや汎用レジスタなどに復帰し
て、スレッド1の実行を切り替える。OS依存部10
は、デバイス制御スレッド2が発行するデバイスドライ
バ7に対するI/O命令をマルチタスクOSまたはシン
グルタスクOSに依存したI/O命令に変換して、それ
をマルチタスクOSまたはシングルタスクOSに対して
発行する。デバイス管理部11は、デバイス制御スレッ
ド2からのI/O要求を受理して対応するフラグテーブ
ル6内のI/O完了フラグをオフとし、要求を受理した
デバイス制御スレッド2のスレッド管理ブロックをI/
Oキュー4にキューイングした後、OS依存部10に対
してデバイス制御スレッド2からのI/O命令を発行
し、スケジューラ8を起動する。メッセージテーブル1
2は、各ポート毎に送信ブロックをキューイングする送
信キューと、受信を要求したスレッド1のスレッド管理
ブロックをキューイングする受信キューとの組を保持す
る。メッセージ管理部13は、スレッド1からの受信要
求時に指定ポートのメッセージテーブル12内の送信キ
ューに送信ブロックがキューイングされているならば、
送信キューから送信ブロックを1つ外した後、その受信
要求スレッドのスレッド管理ブロックをレディキュー5
にキューイングし、指定ポートのメッセージテーブル1
2内の送信キューに送信ブロックがキューイングされて
いないならば、指定ポートのメッセージテーブル12内
の受信キューにスレッド管理ブロックをキューイング
し、スレッド1からの送信要求時に指定ポートのメッセ
ージテーブル12内の受信キューにスレッド管理ブロッ
クがキューイングされているならば、受信キューからス
レッド管理ブロックを1つ外した後、その受信要求スレ
ッドのスレッド管理ブロックをレディキュー5にキュー
イングし、指定ポートのメッセージテーブル12内の受
信キューにスレッド管理ブロックがキューイングされて
いないならば、指定ポートのメッセージテーブル12内
の送信キューに送信ブロックをキューイングし、その
後、スケジューラ8を起動する。
説明する。 (実施例1)図1は本発明の実施例1における情報処理
装置の構成図で、この情報処理装置は、スレッド1と、
デバイス制御スレッド2と、スレッド管理テーブル3
と、I/Oキュー4と、レディキュー5と、フラグテー
ブル6と、デバイスドライバ7と、スケジューラ8と、
ディスパッチャ9と、OS依存部10と、デバイス管理
部11と、メッセージテーブル12と、メッセージ管理
部13とを備えている。複数のスレッド1は、マルチタ
スクOSの1タスク上またはシングルタスクOS上に、
スタックポインタや汎用レジスタ値などのコンテキスト
情報を保持するスレッド管理ブロックを退避および復帰
しながら各種処理を行なう。複数のデバイス制御スレッ
ド2は、スレッド1に含まれており、各デバイスに1対
1に対応してI/O命令を発行することにより各デバイ
スの制御を行なう。スレッド管理テーブル3は、スレッ
ド管理ブロックを全てのスレッド1について保持する。
I/Oキュー4は、I/O待ち状態にあるスレッド管理
ブロックをキューイングする。レディキュー5は、実行
可能状態にあるスレッド管理ブロックをキューイングす
る。フラグテーブル6は、I/Oの完了を通知する領域
であるI/O完了フラグを各デバイス毎に保持する。複
数のデバイスドライバ7は、各デバイスに対して非同期
I/Oを行ない、I/O完了時にフラグテーブル6内の
対応するI/O完了フラグをオンとする。スケジューラ
8は、フラグテーブル6を検索して、いずれかのI/O
完了フラグがオンとなっているならば対応するデバイス
制御スレッド2のスレッド管理ブロックをI/Oキュー
4から外してレディキュー5にキューイングした後、レ
ディキュー5の中から次実行のスレッド管理ブロックを
決定し、そのスレッド管理ブロックをレディキュー5か
ら外す。ディスパッチャ9は、現在実行中のスレッド1
のコンテキスト情報をそのスレッド1に対応するスレッ
ド管理ブロックに退避した後、スケジューラ8で決定さ
れたスレッド管理ブロックに保持されているコンテキス
ト情報をスタックポインタや汎用レジスタなどに復帰し
て、スレッド1の実行を切り替える。OS依存部10
は、デバイス制御スレッド2が発行するデバイスドライ
バ7に対するI/O命令をマルチタスクOSまたはシン
グルタスクOSに依存したI/O命令に変換して、それ
をマルチタスクOSまたはシングルタスクOSに対して
発行する。デバイス管理部11は、デバイス制御スレッ
ド2からのI/O要求を受理して対応するフラグテーブ
ル6内のI/O完了フラグをオフとし、要求を受理した
デバイス制御スレッド2のスレッド管理ブロックをI/
Oキュー4にキューイングした後、OS依存部10に対
してデバイス制御スレッド2からのI/O命令を発行
し、スケジューラ8を起動する。メッセージテーブル1
2は、各ポート毎に送信ブロックをキューイングする送
信キューと、受信を要求したスレッド1のスレッド管理
ブロックをキューイングする受信キューとの組を保持す
る。メッセージ管理部13は、スレッド1からの受信要
求時に指定ポートのメッセージテーブル12内の送信キ
ューに送信ブロックがキューイングされているならば、
送信キューから送信ブロックを1つ外した後、その受信
要求スレッドのスレッド管理ブロックをレディキュー5
にキューイングし、指定ポートのメッセージテーブル1
2内の送信キューに送信ブロックがキューイングされて
いないならば、指定ポートのメッセージテーブル12内
の受信キューにスレッド管理ブロックをキューイング
し、スレッド1からの送信要求時に指定ポートのメッセ
ージテーブル12内の受信キューにスレッド管理ブロッ
クがキューイングされているならば、受信キューからス
レッド管理ブロックを1つ外した後、その受信要求スレ
ッドのスレッド管理ブロックをレディキュー5にキュー
イングし、指定ポートのメッセージテーブル12内の受
信キューにスレッド管理ブロックがキューイングされて
いないならば、指定ポートのメッセージテーブル12内
の送信キューに送信ブロックをキューイングし、その
後、スケジューラ8を起動する。
【0016】なお図示していないが、メッセージテーブ
ル12には4つのポートa,b,c,d用の領域がそれ
ぞれ確保されているものとする。また、スレッド1には
1つのメインスレッド1aが含まれており、デバイス制
御スレッド2には3つのデバイス制御スレッド2b,2
c,2dが含まれているものとする。そしてメインスレ
ッド1aは、3つのデバイス制御スレッド2b,2c,
2dとメッセージ通信を行ないながら全体の制御を行な
う。また、光磁気ディスク装置の光磁気ディスクには圧
縮された画像データが格納されているものとする。ま
た、伸長ボードはメインメモリ上の圧縮画像をメインメ
モリ上の別の領域へ伸長するものとする。また、DMA
コントローラはメインメモリからVRAMへのメモリ間
転送を行なうものとする。また、伸長ボードとDMAコ
ントローラとの処理速度は合計しても光磁気ディスク装
置の処理速度に比べ速いものとする。また、メインメモ
リ上には圧縮画像データ読み込み用の第1および第2の
バッファ領域と、伸長ボードにより第1または第2のバ
ッファ領域の圧縮画像データを伸長したデータを格納す
る第3のバッファ領域とが設定されているものとする。
また、初期状態では第1のバッファ領域には既に圧縮画
像データが読み込まれているものとする。
ル12には4つのポートa,b,c,d用の領域がそれ
ぞれ確保されているものとする。また、スレッド1には
1つのメインスレッド1aが含まれており、デバイス制
御スレッド2には3つのデバイス制御スレッド2b,2
c,2dが含まれているものとする。そしてメインスレ
ッド1aは、3つのデバイス制御スレッド2b,2c,
2dとメッセージ通信を行ないながら全体の制御を行な
う。また、光磁気ディスク装置の光磁気ディスクには圧
縮された画像データが格納されているものとする。ま
た、伸長ボードはメインメモリ上の圧縮画像をメインメ
モリ上の別の領域へ伸長するものとする。また、DMA
コントローラはメインメモリからVRAMへのメモリ間
転送を行なうものとする。また、伸長ボードとDMAコ
ントローラとの処理速度は合計しても光磁気ディスク装
置の処理速度に比べ速いものとする。また、メインメモ
リ上には圧縮画像データ読み込み用の第1および第2の
バッファ領域と、伸長ボードにより第1または第2のバ
ッファ領域の圧縮画像データを伸長したデータを格納す
る第3のバッファ領域とが設定されているものとする。
また、初期状態では第1のバッファ領域には既に圧縮画
像データが読み込まれているものとする。
【0017】次に動作を説明する。先ず、メインスレッ
ド1aおよびデバイス制御スレッド2b,2c,2dの
動作の流れについて述べる。各スレッドが以下の動作を
行なうことにより、光磁気ディスクに格納されている圧
縮画像データが伸長されて、VRAMに接続された表示
装置の表示画面に次々と表示されていく。すなわちメイ
ンスレッド1aは、ポートbへのメッセージ送信命令を
メッセージ管理部13に発行する。またポートcへのメ
ッセージ送信命令をメッセージ管理部13に発行する。
またポートaからのメッセージ受信待ち命令をメッセー
ジ管理部13に発行する。またメッセージを受信する
と、ポートdへのメッセージ送信命令をメッセージ管理
部13に発行する。またポートaからのメッセージ受信
待ち命令をメッセージ管理部13に発行する。またメッ
セージを受信すると、再び、ポートaからのメッセージ
受信待ち命令をメッセージ管理部13に発行する。この
ようにメインスレッド1aは上記の動作を繰り返す。そ
してデバイス制御スレッド2bは、ポートbからのメッ
セージ受信待ち命令をメッセージ管理部13に発行す
る。またメッセージを受信すると、光磁気ディスク装置
から第1あるいは第2のバッファ領域へのリード命令を
デバイス管理部11に発行する。また上記I/Oが完了
すると、ポートaへのメッセージ送信命令をメッセージ
管理部13に発行する。このようにデバイス制御スレッ
ド2bは上記の動作を繰り返す。そしてデバイス制御ス
レッド2cは、ポートcからのメッセージ受信待ち命令
をメッセージ管理部13に発行する。またメッセージを
受信すると、第2あるいは第1のバッファ領域の圧縮画
像を第3のバッファ領域へ伸長する命令をデバイス管理
部11に発行する。また上記I/O が完了すると、ポ
ートaへのメッセージ送信命令をメッセージ管理部13
に発行する。このようにデバイス制御スレッド2cは上
記の動作を繰り返す。そしてデバイス制御スレッド2d
は、ポートdからのメッセージ受信待ち命令をメッセー
ジ管理部13に発行する。またメッセージを受信する
と、DMAコントローラを用いて第3のバッファ領域か
らVRAMへのメモリ間転送を行なう命令をデバイス管
理部11に発行する。また上記I/Oが完了すると、ポ
ートaへのメッセージ送信命令をメッセージ管理部13
に発行する。このようにデバイス制御スレッド2dは上
記の動作を繰り返す。
ド1aおよびデバイス制御スレッド2b,2c,2dの
動作の流れについて述べる。各スレッドが以下の動作を
行なうことにより、光磁気ディスクに格納されている圧
縮画像データが伸長されて、VRAMに接続された表示
装置の表示画面に次々と表示されていく。すなわちメイ
ンスレッド1aは、ポートbへのメッセージ送信命令を
メッセージ管理部13に発行する。またポートcへのメ
ッセージ送信命令をメッセージ管理部13に発行する。
またポートaからのメッセージ受信待ち命令をメッセー
ジ管理部13に発行する。またメッセージを受信する
と、ポートdへのメッセージ送信命令をメッセージ管理
部13に発行する。またポートaからのメッセージ受信
待ち命令をメッセージ管理部13に発行する。またメッ
セージを受信すると、再び、ポートaからのメッセージ
受信待ち命令をメッセージ管理部13に発行する。この
ようにメインスレッド1aは上記の動作を繰り返す。そ
してデバイス制御スレッド2bは、ポートbからのメッ
セージ受信待ち命令をメッセージ管理部13に発行す
る。またメッセージを受信すると、光磁気ディスク装置
から第1あるいは第2のバッファ領域へのリード命令を
デバイス管理部11に発行する。また上記I/Oが完了
すると、ポートaへのメッセージ送信命令をメッセージ
管理部13に発行する。このようにデバイス制御スレッ
ド2bは上記の動作を繰り返す。そしてデバイス制御ス
レッド2cは、ポートcからのメッセージ受信待ち命令
をメッセージ管理部13に発行する。またメッセージを
受信すると、第2あるいは第1のバッファ領域の圧縮画
像を第3のバッファ領域へ伸長する命令をデバイス管理
部11に発行する。また上記I/O が完了すると、ポ
ートaへのメッセージ送信命令をメッセージ管理部13
に発行する。このようにデバイス制御スレッド2cは上
記の動作を繰り返す。そしてデバイス制御スレッド2d
は、ポートdからのメッセージ受信待ち命令をメッセー
ジ管理部13に発行する。またメッセージを受信する
と、DMAコントローラを用いて第3のバッファ領域か
らVRAMへのメモリ間転送を行なう命令をデバイス管
理部11に発行する。また上記I/Oが完了すると、ポ
ートaへのメッセージ送信命令をメッセージ管理部13
に発行する。このようにデバイス制御スレッド2dは上
記の動作を繰り返す。
【0018】次に装置全体の動作について述べる。い
ま、スレッド管理ブロックには、コンテキスト情報とし
てスタックポインタおよび汎用レジスタ値が格納されて
いるものとする。また、メインスレッド1aおよびデバ
イス制御スレッド2b,2c,2dのスレッド管理ブロ
ックをそれぞれスレッド管理ブロック3a,3b,3
c,3dとする。またデバイスドライバ7は、光磁気デ
ィスク装置に対して実際のI/O命令を行なう非同期型
のデバイスドライバ7iと、圧縮画像の伸長ボードに対
して実際のI/O命令を行なう非同期型のデバイスドラ
イバ7jと、DMAコントローラに対して実際のI/O
命令を行なう非同期型のデバイスドライバ7kとを含ん
でいるものとする。またフラグテーブル6には、デバイ
スドライバ7iのI/O完了フラグ6iと、デバイスド
ライバ7jのI/O 完了フラグ6jと、デバイスドラ
イバ7kのI/O完了フラグ6kとが含まれているもの
とする。また初期状態として、デバイス制御スレッド2
bが実行状態であり、レディキュー5には先頭からスレ
ッド管理ブロック3c,3d,3aがこの順に接続され
ており、I/Oキュー4には何も接続されていないもの
とする。また、送信ブロック中には送信元のスレッドI
Dが入っているものとする。また、本実施例における情
報処理装置はマルチタスクOSの1タスク上に構成され
ているものとする。
ま、スレッド管理ブロックには、コンテキスト情報とし
てスタックポインタおよび汎用レジスタ値が格納されて
いるものとする。また、メインスレッド1aおよびデバ
イス制御スレッド2b,2c,2dのスレッド管理ブロ
ックをそれぞれスレッド管理ブロック3a,3b,3
c,3dとする。またデバイスドライバ7は、光磁気デ
ィスク装置に対して実際のI/O命令を行なう非同期型
のデバイスドライバ7iと、圧縮画像の伸長ボードに対
して実際のI/O命令を行なう非同期型のデバイスドラ
イバ7jと、DMAコントローラに対して実際のI/O
命令を行なう非同期型のデバイスドライバ7kとを含ん
でいるものとする。またフラグテーブル6には、デバイ
スドライバ7iのI/O完了フラグ6iと、デバイスド
ライバ7jのI/O 完了フラグ6jと、デバイスドラ
イバ7kのI/O完了フラグ6kとが含まれているもの
とする。また初期状態として、デバイス制御スレッド2
bが実行状態であり、レディキュー5には先頭からスレ
ッド管理ブロック3c,3d,3aがこの順に接続され
ており、I/Oキュー4には何も接続されていないもの
とする。また、送信ブロック中には送信元のスレッドI
Dが入っているものとする。また、本実施例における情
報処理装置はマルチタスクOSの1タスク上に構成され
ているものとする。
【0019】先ずデバイス制御スレッド2bが、ポート
bからのメッセージ受信待ち命令をメッセージ管理部1
3に発行する。次にメッセージ管理部13が、メッセー
ジテーブル12のポートb用の受信キューへスレッド管
理ブロック3bをキューイングし、スケジューラ8を呼
び出す。次にスケジューラ8が、レディキュー5の先頭
に接続されているスレッド管理ブロック3cをキューか
ら外し、ディスパッチャ9に渡す。次にディスパッチャ
9が、現在実行中のデバイス制御スレッド2bのスタッ
クポインタおよび汎用レジスタ値をスレッド管理ブロッ
ク3bに退避した後、スレッド管理ブロック3cに保持
されていたスタックポインタおよび汎用レジスタ値を復
帰して、スレッドの実行を切り替える。次にデバイス制
御スレッド2cが、ポートcからのメッセージ受信待ち
命令をメッセージ管理部13に発行する。次にメッセー
ジ管理部13が、メッセージテーブル12のポートc用
の受信キューへスレッド管理ブロック3cをキューイン
グし、スケジューラ8を呼び出す。次にスケジューラ8
が、レディキュー5の先頭に接続されているスレッド管
理ブロック3dをキューから外し、ディスパッチャ9に
渡す。次にディスパッチャ9が、現在実行中のデバイス
制御スレッド2cのスタックポインタおよび汎用レジス
タ値をスレッド管理ブロック3cに退避した後、スレッ
ド管理ブロック3dに保持されていたスタックポインタ
および汎用レジスタ値を復帰して、スレッドの実行を切
り替える。次にデバイス制御スレッド2dが、ポートd
からのメッセージ受信待ち命令をメッセージ管理部13
に発行する。次にメッセージ管理部13が、メッセージ
テーブル12のポートd用の受信キューへスレッド管理
ブロック3dをキューイングし、スケジューラ8を呼び
出す。次にスケジューラ8が、レディキュー5の先頭に
接続されているスレッド管理ブロック3aをキューから
外し、ディスパッチャ9に渡す。次にディスパッチャ9
が、現在実行中のデバイス制御スレッド2dのスタック
ポインタおよび汎用レジスタ値をスレッド管理ブロック
3dに退避した後、スレッド管理ブロック3aに保持さ
れているスタックポインタおよび汎用レジスタ値を復帰
して、スレッドの実行を切り替える。次にメインスレッ
ド1aが、ポートbへのメッセージ送信命令をメッセー
ジ管理部13に発行する。次にメッセージ管理部13
が、メッセージテーブル12のポートb用の受信キュー
にスレッド管理ブロック3bがキューイングされている
ので、受信キューからスレッド管理ブロック3bを外し
た後、スレッド管理ブロック3bをレディキュー5にキ
ューイングした後、スケジューラ8を起動する。次にス
ケジューラ8が、レディキュー5の先頭に接続されてい
るスレッド管理ブロック3bをキューから外し、ディス
パッチャ9に渡す。次にディスパッチャ9が、現在実行
中のメインスレッド1aのスタックポインタおよび汎用
レジスタ値をスレッド管理ブロック3aに退避した後、
スレッド管理ブロック3bに保持されているスタックポ
インタおよび汎用レジスタ値を復帰して、スレッドの実
行を切り替える。次にデバイス制御スレッド2bが、光
磁気ディスク装置から第1または第2のバッファ領域へ
のリード命令をデバイス管理部11に発行する。次にデ
バイス管理部11が、リード命令の要求により、OS依
存部10へ光磁気ディスク装置用のデバイスドライバ9
iの起動を依頼する。次にOS依存部10が、上記のリ
ード命令をマルチタスクOSに対するI/O命令のため
のシステムコールに変換した後、このシステムコールを
発行する。次にマルチタスクOSが、光磁気ディスク装
置用のデバイスドライバ9iを起動する。次にデバイス
ドライバ9iが、光磁気ディスク装置に対して実際のI
/O 命令を発行し、デバイス管理部11に復帰する。
次にデバイス管理部11が、スレッド管理ブロック3b
をI/Oキュー4にキューイングした後、スケジューラ
8を起動する。次にスケジューラ8が、フラグテーブル
6を順次参照し、I/O完了フラグをチェックし、全て
オフなので、レディキュー5の先頭に接続されているス
レッド管理ブロック3aをキューから外し、ディスパッ
チャ9を起動する。次にディスパッチャ9が、現在実行
中のデバイス制御スレッド2bのスタックポインタおよ
び汎用レジスタ値をスレッド管理ブロック3bに退避し
た後、スレッド管理ブロック3aに保持されていたスタ
ックポインタおよび汎用レジスタ値を復帰して、スレッ
ドの実行を切り替える。次にメインスレッド1aが、ポ
ートcへのメッセージ送信命令をメッセージ管理部13
に発行する。次にメッセージ管理部13が、メッセージ
テーブル12のポートc用の受信キューにスレッド管理
ブロック3cがキューイングされているので、受信キュ
ーからスレッド管理ブロック3cを外した後、スレッド
管理ブロック3cをレディキュー5にキューイングし、
スケジューラ8を起動する。次にスケジューラ8が、レ
ディキュー5の先頭に接続されているスレッド管理ブロ
ック3cをレディキュー5から外し、ディスパッチャ9
に渡す。次にディスパッチャ9が、現在実行中のデバイ
ス制御スレッド1aのスタックポインタおよび汎用レジ
スタ値をスレッド管理ブロック3aに退避した後、スレ
ッド管理ブロック3cに保持されているスタックポイン
タおよび汎用レジスタ値を復帰して、スレッドの実行を
切り替える。次にデバイス制御スレッド2cが、第2あ
るいは第1のバッファ領域の圧縮画像を第3のバッファ
領域へ伸長する命令をデバイス管理部11に発行する。
次にデバイス管理部11が、伸長命令の要求により、O
S依存部10へ光磁気ディスク装置用のデバイスドライ
バ9jの起動を依頼する。次にOS依存部10が、上記
の伸長命令をマルチタスクOSに対するI/O命令のた
めのシステムコールに変換した後、このシステムコール
を発行する。次にマルチタスクOSが、画像伸長ボード
用のデバイスドライバ9jを起動する。次にデバイスド
ライバ9jが、画像伸長ボードに対して実際のI/O命
令を発行し、デバイス管理部11に復帰する。次にデバ
イス管理部11が、スレッド管理ブロック3cをI/O
キュー4にキューイングした後、スケジューラ8を起動
する。次にスケジューラ8が、フラグテーブル6を順次
参照し、I/O完了フラグをチェックし、全てオフなの
で、レディキュー5の先頭に接続されているスレッド管
理ブロック3aをキューから外し、ディスパッチャ9を
起動する。次にディスパッチャ9が、現在実行中のデバ
イス制御スレッド2cのスタックポインタおよび汎用レ
ジスタ値をスレッド管理ブロック3cに退避した後、ス
レッド管理ブロック3aに保持されていたスタックポイ
ンタおよび汎用レジスタ値を復帰して、スレッドの実行
を切り替える。次にメインスレッド1aが、ポートaか
らのメッセージ受信待ち命令をメッセージ管理部13に
発行する。次にメッセージ管理部13が、メッセージテ
ーブル12のポートa用の受信キューへスレッド管理ブ
ロック3aをキューイングし、スケジューラ8を呼び出
す。次にスケジューラ8が、レディキュー5に接続され
ているスレッド管理テーブル3がないので、フラグテー
ブル6を順次参照し、I/O完了フラグのチェックを繰
り返す。次にデバイスドライバ9jが、画像伸長ボード
に対するI/O命令が完了すると、フラグテーブル6中
のI/O完了フラグ6jをオンとし、I/O命令の完了
を通知する。次にスケジューラ8が、フラグテーブル6
を順次参照し、I/O完了フラグのチェックを繰り返し
ているが、フラグテーブル6中のI/O完了フラグ6j
がオンであるので、これをオフとし、I/O完了フラグ
6jに対応するデバイス制御スレッド1cのスレッド管
理ブロック3cをレディキュー5にキューイングした
後、レディキュー5の先頭に接続されているスレッド管
理ブロック3cをレディキュー5から外し、ディスパッ
チャ9を起動する。次にディスパッチャ9が、現在実行
中のメインスレッド1aのスタックポインタおよび汎用
レジスタ値をスレッド管理ブロック3aに退避した後、
スレッド管理ブロック3cに保持されているスタックポ
インタおよび汎用レジスタ値を復帰して、スレッドの実
行を切り替える。次にデバイス制御スレッド2cが、ポ
ートaへのメッセージ送信命令をメッセージ管理部13
に発行する。次にメッセージ管理部13が、メッセージ
テーブル12のポートa用の受信キューにスレッド管理
ブロック3aがキューイングされているので、受信キュ
ーからスレッド管理ブロック3aを外し、スレッド管理
ブロック3cをレディキュー5にキューイングした後、
スケジューラ8を起動する。次にスケジューラ8が、レ
ディキュー5の先頭に接続されているスレッド管理ブロ
ック3aをレディキュー5から外し、ディスパッチャ9
に渡す。次にディスパッチャ9が、現在実行中のデバイ
ス制御スレッド2cのスタックポインタおよび汎用レジ
スタ値をスレッド管理ブロック3cに退避した後、スレ
ッド管理ブロック3aに保持されているスタックポイン
タおよび汎用レジスタ値を復帰して、スレッドの実行を
切り替える。次にメインスレッド1aが、ポートdへの
メッセージ送信命令をメッセージ管理部13に発行す
る。次にメッセージ管理部13が、メッセージテーブル
12のポートd用の受信キューにスレッド管理ブロック
3dがキューイングされているので、受信キューからス
レッド管理ブロック3dを外した後、スレッド管理ブロ
ック3dをレディキュー5にキューイングした後、スケ
ジューラ8を起動する。次にスケジューラ8が、レディ
キュー5の先頭に接続されているスレッド管理ブロック
3cをキューから外し、ディスパッチャ9に渡す。次に
ディスパッチャ9が、現在実行中のデバイス制御スレッ
ド1aのスタックポインタおよび汎用レジスタ値をスレ
ッド管理ブロック3aに退避した後、スレッド管理ブロ
ック3cに保持されているスタックポインタおよび汎用
レジスタ値を復帰して、スレッドの実行を切り替える。
次にデバイス制御スレッド2cが、ポートcからのメッ
セージ受信待ち命令をメッセージ管理部13に発行す
る。次にメッセージ管理部13が、メッセージテーブル
12のポートc用の受信キューへスレッド管理ブロック
3cをキューイングし、スケジューラ8を呼び出す。次
にスケジューラ8が、レディキュー5の先頭に接続され
ているスレッド管理ブロック3dをキューから外し、デ
ィスパッチャ9に渡す。次にディスパッチャ9が、現在
実行中のデバイス制御スレッド2cのスタックポインタ
および汎用レジスタ値をスレッド管理ブロック3cに退
避した後、スレッド管理ブロック3dに保持されている
スタックポインタおよび汎用レジスタ値を復帰して、ス
レッドの実行を切り替える。次にデバイス制御スレッド
2dが、第3のバッファ領域の画像データをVRAMへ
転送する命令をデバイス管理部11に発行する。次にデ
バイス管理部11が、伸長命令の要求により、OS依存
部10へDMAコントローラ用のデバイスドライバ9k
の起動を依頼する。次にOS依存部10が、上記の伸長
命令をマルチタスクOSに対するI/O命令のためのシ
ステムコールに変換した後、このシステムコールを発行
する。次にマルチタスクOSが、DMAコントローラ用
のデバイスドライバ9kを起動する。次にデバイスドラ
イバ9kが、DMAコントローラに対して実際のI/O
命令を発行し、デバイス管理部11に復帰する。次にデ
バイス管理部11が、スレッド管理ブロック3dをI/
Oキュー4にキューイングした後、スケジューラ8を起
動する。次にスケジューラ8が、フラグテーブル6を順
次参照し、I/O完了フラグをチェックし、全てオフな
ので、レディキュー5の先頭に接続されているスレッド
管理ブロック3aをレディキュー5から外し、ディスパ
ッチャ9を起動する。次にディスパッチャ9が、現在実
行中のデバイス制御スレッド2dのスタックポインタお
よび汎用レジスタ値をスレッド管理ブロック3dに退避
した後、スレッド管理ブロック3aに保持されているス
タックポインタおよび汎用レジスタ値を復帰して、スレ
ッドの実行を切り替える。次にメインスレッド1aが、
ポートaからのメッセージ受信待ち命令をメッセージ管
理部13に発行する。次にメッセージ管理部13が、メ
ッセージテーブル12のポートa用の受信キューへスレ
ッド管理ブロック3aをキューイングし、スケジューラ
8を呼び出す。次にスケジューラ8が、レディキュー5
に接続されているスレッド管理ブロックがないので、フ
ラグテーブル6を順次参照し、I/O完了フラグのチェ
ックを繰り返す。次にデバイスドライバ9kが、DMA
コントローラに対するI/O命令が完了すると、フラグ
テーブル6中のI/O完了フラグ6kをオンとし、I/
O命令の完了を通知する。次にスケジューラ8が、フラ
グテーブル6を順次参照し、I/O完了フラグのチェッ
クを繰り返すが、フラグテーブル6中のI/O完了フラ
グ6kがオンであるので、これをオフとし、I/O完了
フラグ6kに対応するデバイス制御スレッド1dのスレ
ッド管理ブロック3dをレディキュー5にキューイング
した後、レディキュー5の先頭に接続されているスレッ
ド管理ブロック3dをレディキュー5から外し、ディス
パッチャ9を起動する。次にディスパッチャ9が、現在
実行中のメインスレッド1aのスタックポインタおよび
汎用レジスタ値をスレッド管理ブロック3aに退避した
後、スレッド管理ブロック3dに保持されているスタッ
クポインタおよび汎用レジスタ値を復帰して、スレッド
の実行を切り替える。次にデバイス制御スレッド2d
が、ポートaへのメッセージ送信命令をメッセージ管理
部13に発行する。次にメッセージ管理部13が、メッ
セージテーブル12のポートa用の受信キューにスレッ
ド管理ブロック3aがキューイングされているので、受
信キューからスレッド管理ブロック3aを外した後、ス
レッド管理ブロック3aをレディキュー5にキューイン
グし、スケジューラ8を起動する。次にスケジューラ8
が、レディキュー5の先頭に接続されているスレッド管
理ブロック3aをレディキュー5から外し、ディスパッ
チャ9に渡す。次にディスパッチャ9が、現在実行中の
デバイス制御スレッド2dのスタックポインタおよび汎
用レジスタ値をスレッド管理ブロック3dに退避した
後、スレッド管理ブロック3aに保持されているスタッ
クポインタおよび汎用レジスタ値を復帰して、スレッド
の実行を切り替える。次にメインスレッド1aが、ポー
トaからのメッセージ受信待ち命令をメッセージ管理部
13に発行する。次にメッセージ管理部13が、メッセ
ージテーブル12のポートa用の受信キューへスレッド
管理ブロック3aをキューイングし、スケジューラ8を
呼び出す。次にスケジューラ8が、レディキュー5の先
頭に接続されているスレッド管理ブロック3dをキュー
から外し、ディスパッチャ9に渡す。次にディスパッチ
ャ9が、現在実行中のメインスレッド1aのスタックポ
インタおよび汎用レジスタ値をスレッド管理ブロック3
aに退避した後、スレッド管理ブロック3dに保持され
ているスタックポインタおよび汎用レジスタ値を復帰し
て、スレッドの実行を切り替える。次にデバイス制御ス
レッド2dが、ポートdからのメッセージ受信待ち命令
をメッセージ管理部13に発行する。次にメッセージ管
理部13が、メッセージテーブル12のポートd用の受
信キューへスレッド管理ブロック3dをキューイング
し、スケジューラ8を呼び出す。次にスケジューラ8
が、レディキュー5に接続されているスレッド管理ブロ
ックがないので、フラグテーブル6を順次参照し、I/
O完了フラグのチェックを繰り返す。次にデバイスドラ
イバ9iが、光磁気ディスク装置に対するI/O命令が
完了すると、フラグテーブル6中のI/O完了フラグ6
iをオンとし、I/O命令の完了を通知する。次にスケ
ジューラ8が、フラグテーブル6を順次参照し、I/O
完了フラグのチェックを繰り返しているが、フラグテー
ブル6中のI/O完了フラグ6iがオンであるので、こ
れをオフとし、I/O完了フラグ6iに対応するデバイ
ス制御スレッド1bのスレッド管理ブロック3bをレデ
ィキュー5にキューイングした後、レディキュー5の先
頭に接続されているスレッド管理ブロック3bをキュー
から外し、ディスパッチャ9を起動する。次にディスパ
ッチャ9が、現在実行中のデバイス制御スレッド2dの
スタックポインタおよび汎用レジスタ値をスレッド管理
ブロック3dに退避した後、スレッド管理ブロック3b
に保持されているスタックポインタおよび汎用レジスタ
値を復帰して、スレッドの実行を切り替える。次にデバ
イス制御スレッド2dが、ポートaへのメッセージ送信
命令をメッセージ管理部13に発行する。次にメッセー
ジ管理部13が、メッセージテーブル12のポートa用
の受信キューにスレッド管理ブロック3aがキューイン
グされているので、受信キューからスレッド管理ブロッ
ク3aを外した後、スレッド管理ブロック3aをレディ
キュー5にキューイングし、スケジューラ8を起動す
る。次にスケジューラ8が、レディキュー5の先頭に接
続されているスレッド管理ブロック3aをキューから外
し、ディスパッチャ9に渡す。次にディスパッチャ9
が、現在実行中のデバイス制御スレッド2bのスタック
ポインタおよび汎用レジスタ値をスレッド管理ブロック
3bに退避した後、スレッド管理ブロック3aに保持さ
れているスタックポインタおよび汎用レジスタ値を復帰
して、スレッドの実行を切り替える。以下、上記の動作
を繰り返すことにより、光磁気ディスクに格納されてい
る圧縮画像データが伸長されて、VRAMに接続された
表示装置の表示画面に次々と表示されていく。
bからのメッセージ受信待ち命令をメッセージ管理部1
3に発行する。次にメッセージ管理部13が、メッセー
ジテーブル12のポートb用の受信キューへスレッド管
理ブロック3bをキューイングし、スケジューラ8を呼
び出す。次にスケジューラ8が、レディキュー5の先頭
に接続されているスレッド管理ブロック3cをキューか
ら外し、ディスパッチャ9に渡す。次にディスパッチャ
9が、現在実行中のデバイス制御スレッド2bのスタッ
クポインタおよび汎用レジスタ値をスレッド管理ブロッ
ク3bに退避した後、スレッド管理ブロック3cに保持
されていたスタックポインタおよび汎用レジスタ値を復
帰して、スレッドの実行を切り替える。次にデバイス制
御スレッド2cが、ポートcからのメッセージ受信待ち
命令をメッセージ管理部13に発行する。次にメッセー
ジ管理部13が、メッセージテーブル12のポートc用
の受信キューへスレッド管理ブロック3cをキューイン
グし、スケジューラ8を呼び出す。次にスケジューラ8
が、レディキュー5の先頭に接続されているスレッド管
理ブロック3dをキューから外し、ディスパッチャ9に
渡す。次にディスパッチャ9が、現在実行中のデバイス
制御スレッド2cのスタックポインタおよび汎用レジス
タ値をスレッド管理ブロック3cに退避した後、スレッ
ド管理ブロック3dに保持されていたスタックポインタ
および汎用レジスタ値を復帰して、スレッドの実行を切
り替える。次にデバイス制御スレッド2dが、ポートd
からのメッセージ受信待ち命令をメッセージ管理部13
に発行する。次にメッセージ管理部13が、メッセージ
テーブル12のポートd用の受信キューへスレッド管理
ブロック3dをキューイングし、スケジューラ8を呼び
出す。次にスケジューラ8が、レディキュー5の先頭に
接続されているスレッド管理ブロック3aをキューから
外し、ディスパッチャ9に渡す。次にディスパッチャ9
が、現在実行中のデバイス制御スレッド2dのスタック
ポインタおよび汎用レジスタ値をスレッド管理ブロック
3dに退避した後、スレッド管理ブロック3aに保持さ
れているスタックポインタおよび汎用レジスタ値を復帰
して、スレッドの実行を切り替える。次にメインスレッ
ド1aが、ポートbへのメッセージ送信命令をメッセー
ジ管理部13に発行する。次にメッセージ管理部13
が、メッセージテーブル12のポートb用の受信キュー
にスレッド管理ブロック3bがキューイングされている
ので、受信キューからスレッド管理ブロック3bを外し
た後、スレッド管理ブロック3bをレディキュー5にキ
ューイングした後、スケジューラ8を起動する。次にス
ケジューラ8が、レディキュー5の先頭に接続されてい
るスレッド管理ブロック3bをキューから外し、ディス
パッチャ9に渡す。次にディスパッチャ9が、現在実行
中のメインスレッド1aのスタックポインタおよび汎用
レジスタ値をスレッド管理ブロック3aに退避した後、
スレッド管理ブロック3bに保持されているスタックポ
インタおよび汎用レジスタ値を復帰して、スレッドの実
行を切り替える。次にデバイス制御スレッド2bが、光
磁気ディスク装置から第1または第2のバッファ領域へ
のリード命令をデバイス管理部11に発行する。次にデ
バイス管理部11が、リード命令の要求により、OS依
存部10へ光磁気ディスク装置用のデバイスドライバ9
iの起動を依頼する。次にOS依存部10が、上記のリ
ード命令をマルチタスクOSに対するI/O命令のため
のシステムコールに変換した後、このシステムコールを
発行する。次にマルチタスクOSが、光磁気ディスク装
置用のデバイスドライバ9iを起動する。次にデバイス
ドライバ9iが、光磁気ディスク装置に対して実際のI
/O 命令を発行し、デバイス管理部11に復帰する。
次にデバイス管理部11が、スレッド管理ブロック3b
をI/Oキュー4にキューイングした後、スケジューラ
8を起動する。次にスケジューラ8が、フラグテーブル
6を順次参照し、I/O完了フラグをチェックし、全て
オフなので、レディキュー5の先頭に接続されているス
レッド管理ブロック3aをキューから外し、ディスパッ
チャ9を起動する。次にディスパッチャ9が、現在実行
中のデバイス制御スレッド2bのスタックポインタおよ
び汎用レジスタ値をスレッド管理ブロック3bに退避し
た後、スレッド管理ブロック3aに保持されていたスタ
ックポインタおよび汎用レジスタ値を復帰して、スレッ
ドの実行を切り替える。次にメインスレッド1aが、ポ
ートcへのメッセージ送信命令をメッセージ管理部13
に発行する。次にメッセージ管理部13が、メッセージ
テーブル12のポートc用の受信キューにスレッド管理
ブロック3cがキューイングされているので、受信キュ
ーからスレッド管理ブロック3cを外した後、スレッド
管理ブロック3cをレディキュー5にキューイングし、
スケジューラ8を起動する。次にスケジューラ8が、レ
ディキュー5の先頭に接続されているスレッド管理ブロ
ック3cをレディキュー5から外し、ディスパッチャ9
に渡す。次にディスパッチャ9が、現在実行中のデバイ
ス制御スレッド1aのスタックポインタおよび汎用レジ
スタ値をスレッド管理ブロック3aに退避した後、スレ
ッド管理ブロック3cに保持されているスタックポイン
タおよび汎用レジスタ値を復帰して、スレッドの実行を
切り替える。次にデバイス制御スレッド2cが、第2あ
るいは第1のバッファ領域の圧縮画像を第3のバッファ
領域へ伸長する命令をデバイス管理部11に発行する。
次にデバイス管理部11が、伸長命令の要求により、O
S依存部10へ光磁気ディスク装置用のデバイスドライ
バ9jの起動を依頼する。次にOS依存部10が、上記
の伸長命令をマルチタスクOSに対するI/O命令のた
めのシステムコールに変換した後、このシステムコール
を発行する。次にマルチタスクOSが、画像伸長ボード
用のデバイスドライバ9jを起動する。次にデバイスド
ライバ9jが、画像伸長ボードに対して実際のI/O命
令を発行し、デバイス管理部11に復帰する。次にデバ
イス管理部11が、スレッド管理ブロック3cをI/O
キュー4にキューイングした後、スケジューラ8を起動
する。次にスケジューラ8が、フラグテーブル6を順次
参照し、I/O完了フラグをチェックし、全てオフなの
で、レディキュー5の先頭に接続されているスレッド管
理ブロック3aをキューから外し、ディスパッチャ9を
起動する。次にディスパッチャ9が、現在実行中のデバ
イス制御スレッド2cのスタックポインタおよび汎用レ
ジスタ値をスレッド管理ブロック3cに退避した後、ス
レッド管理ブロック3aに保持されていたスタックポイ
ンタおよび汎用レジスタ値を復帰して、スレッドの実行
を切り替える。次にメインスレッド1aが、ポートaか
らのメッセージ受信待ち命令をメッセージ管理部13に
発行する。次にメッセージ管理部13が、メッセージテ
ーブル12のポートa用の受信キューへスレッド管理ブ
ロック3aをキューイングし、スケジューラ8を呼び出
す。次にスケジューラ8が、レディキュー5に接続され
ているスレッド管理テーブル3がないので、フラグテー
ブル6を順次参照し、I/O完了フラグのチェックを繰
り返す。次にデバイスドライバ9jが、画像伸長ボード
に対するI/O命令が完了すると、フラグテーブル6中
のI/O完了フラグ6jをオンとし、I/O命令の完了
を通知する。次にスケジューラ8が、フラグテーブル6
を順次参照し、I/O完了フラグのチェックを繰り返し
ているが、フラグテーブル6中のI/O完了フラグ6j
がオンであるので、これをオフとし、I/O完了フラグ
6jに対応するデバイス制御スレッド1cのスレッド管
理ブロック3cをレディキュー5にキューイングした
後、レディキュー5の先頭に接続されているスレッド管
理ブロック3cをレディキュー5から外し、ディスパッ
チャ9を起動する。次にディスパッチャ9が、現在実行
中のメインスレッド1aのスタックポインタおよび汎用
レジスタ値をスレッド管理ブロック3aに退避した後、
スレッド管理ブロック3cに保持されているスタックポ
インタおよび汎用レジスタ値を復帰して、スレッドの実
行を切り替える。次にデバイス制御スレッド2cが、ポ
ートaへのメッセージ送信命令をメッセージ管理部13
に発行する。次にメッセージ管理部13が、メッセージ
テーブル12のポートa用の受信キューにスレッド管理
ブロック3aがキューイングされているので、受信キュ
ーからスレッド管理ブロック3aを外し、スレッド管理
ブロック3cをレディキュー5にキューイングした後、
スケジューラ8を起動する。次にスケジューラ8が、レ
ディキュー5の先頭に接続されているスレッド管理ブロ
ック3aをレディキュー5から外し、ディスパッチャ9
に渡す。次にディスパッチャ9が、現在実行中のデバイ
ス制御スレッド2cのスタックポインタおよび汎用レジ
スタ値をスレッド管理ブロック3cに退避した後、スレ
ッド管理ブロック3aに保持されているスタックポイン
タおよび汎用レジスタ値を復帰して、スレッドの実行を
切り替える。次にメインスレッド1aが、ポートdへの
メッセージ送信命令をメッセージ管理部13に発行す
る。次にメッセージ管理部13が、メッセージテーブル
12のポートd用の受信キューにスレッド管理ブロック
3dがキューイングされているので、受信キューからス
レッド管理ブロック3dを外した後、スレッド管理ブロ
ック3dをレディキュー5にキューイングした後、スケ
ジューラ8を起動する。次にスケジューラ8が、レディ
キュー5の先頭に接続されているスレッド管理ブロック
3cをキューから外し、ディスパッチャ9に渡す。次に
ディスパッチャ9が、現在実行中のデバイス制御スレッ
ド1aのスタックポインタおよび汎用レジスタ値をスレ
ッド管理ブロック3aに退避した後、スレッド管理ブロ
ック3cに保持されているスタックポインタおよび汎用
レジスタ値を復帰して、スレッドの実行を切り替える。
次にデバイス制御スレッド2cが、ポートcからのメッ
セージ受信待ち命令をメッセージ管理部13に発行す
る。次にメッセージ管理部13が、メッセージテーブル
12のポートc用の受信キューへスレッド管理ブロック
3cをキューイングし、スケジューラ8を呼び出す。次
にスケジューラ8が、レディキュー5の先頭に接続され
ているスレッド管理ブロック3dをキューから外し、デ
ィスパッチャ9に渡す。次にディスパッチャ9が、現在
実行中のデバイス制御スレッド2cのスタックポインタ
および汎用レジスタ値をスレッド管理ブロック3cに退
避した後、スレッド管理ブロック3dに保持されている
スタックポインタおよび汎用レジスタ値を復帰して、ス
レッドの実行を切り替える。次にデバイス制御スレッド
2dが、第3のバッファ領域の画像データをVRAMへ
転送する命令をデバイス管理部11に発行する。次にデ
バイス管理部11が、伸長命令の要求により、OS依存
部10へDMAコントローラ用のデバイスドライバ9k
の起動を依頼する。次にOS依存部10が、上記の伸長
命令をマルチタスクOSに対するI/O命令のためのシ
ステムコールに変換した後、このシステムコールを発行
する。次にマルチタスクOSが、DMAコントローラ用
のデバイスドライバ9kを起動する。次にデバイスドラ
イバ9kが、DMAコントローラに対して実際のI/O
命令を発行し、デバイス管理部11に復帰する。次にデ
バイス管理部11が、スレッド管理ブロック3dをI/
Oキュー4にキューイングした後、スケジューラ8を起
動する。次にスケジューラ8が、フラグテーブル6を順
次参照し、I/O完了フラグをチェックし、全てオフな
ので、レディキュー5の先頭に接続されているスレッド
管理ブロック3aをレディキュー5から外し、ディスパ
ッチャ9を起動する。次にディスパッチャ9が、現在実
行中のデバイス制御スレッド2dのスタックポインタお
よび汎用レジスタ値をスレッド管理ブロック3dに退避
した後、スレッド管理ブロック3aに保持されているス
タックポインタおよび汎用レジスタ値を復帰して、スレ
ッドの実行を切り替える。次にメインスレッド1aが、
ポートaからのメッセージ受信待ち命令をメッセージ管
理部13に発行する。次にメッセージ管理部13が、メ
ッセージテーブル12のポートa用の受信キューへスレ
ッド管理ブロック3aをキューイングし、スケジューラ
8を呼び出す。次にスケジューラ8が、レディキュー5
に接続されているスレッド管理ブロックがないので、フ
ラグテーブル6を順次参照し、I/O完了フラグのチェ
ックを繰り返す。次にデバイスドライバ9kが、DMA
コントローラに対するI/O命令が完了すると、フラグ
テーブル6中のI/O完了フラグ6kをオンとし、I/
O命令の完了を通知する。次にスケジューラ8が、フラ
グテーブル6を順次参照し、I/O完了フラグのチェッ
クを繰り返すが、フラグテーブル6中のI/O完了フラ
グ6kがオンであるので、これをオフとし、I/O完了
フラグ6kに対応するデバイス制御スレッド1dのスレ
ッド管理ブロック3dをレディキュー5にキューイング
した後、レディキュー5の先頭に接続されているスレッ
ド管理ブロック3dをレディキュー5から外し、ディス
パッチャ9を起動する。次にディスパッチャ9が、現在
実行中のメインスレッド1aのスタックポインタおよび
汎用レジスタ値をスレッド管理ブロック3aに退避した
後、スレッド管理ブロック3dに保持されているスタッ
クポインタおよび汎用レジスタ値を復帰して、スレッド
の実行を切り替える。次にデバイス制御スレッド2d
が、ポートaへのメッセージ送信命令をメッセージ管理
部13に発行する。次にメッセージ管理部13が、メッ
セージテーブル12のポートa用の受信キューにスレッ
ド管理ブロック3aがキューイングされているので、受
信キューからスレッド管理ブロック3aを外した後、ス
レッド管理ブロック3aをレディキュー5にキューイン
グし、スケジューラ8を起動する。次にスケジューラ8
が、レディキュー5の先頭に接続されているスレッド管
理ブロック3aをレディキュー5から外し、ディスパッ
チャ9に渡す。次にディスパッチャ9が、現在実行中の
デバイス制御スレッド2dのスタックポインタおよび汎
用レジスタ値をスレッド管理ブロック3dに退避した
後、スレッド管理ブロック3aに保持されているスタッ
クポインタおよび汎用レジスタ値を復帰して、スレッド
の実行を切り替える。次にメインスレッド1aが、ポー
トaからのメッセージ受信待ち命令をメッセージ管理部
13に発行する。次にメッセージ管理部13が、メッセ
ージテーブル12のポートa用の受信キューへスレッド
管理ブロック3aをキューイングし、スケジューラ8を
呼び出す。次にスケジューラ8が、レディキュー5の先
頭に接続されているスレッド管理ブロック3dをキュー
から外し、ディスパッチャ9に渡す。次にディスパッチ
ャ9が、現在実行中のメインスレッド1aのスタックポ
インタおよび汎用レジスタ値をスレッド管理ブロック3
aに退避した後、スレッド管理ブロック3dに保持され
ているスタックポインタおよび汎用レジスタ値を復帰し
て、スレッドの実行を切り替える。次にデバイス制御ス
レッド2dが、ポートdからのメッセージ受信待ち命令
をメッセージ管理部13に発行する。次にメッセージ管
理部13が、メッセージテーブル12のポートd用の受
信キューへスレッド管理ブロック3dをキューイング
し、スケジューラ8を呼び出す。次にスケジューラ8
が、レディキュー5に接続されているスレッド管理ブロ
ックがないので、フラグテーブル6を順次参照し、I/
O完了フラグのチェックを繰り返す。次にデバイスドラ
イバ9iが、光磁気ディスク装置に対するI/O命令が
完了すると、フラグテーブル6中のI/O完了フラグ6
iをオンとし、I/O命令の完了を通知する。次にスケ
ジューラ8が、フラグテーブル6を順次参照し、I/O
完了フラグのチェックを繰り返しているが、フラグテー
ブル6中のI/O完了フラグ6iがオンであるので、こ
れをオフとし、I/O完了フラグ6iに対応するデバイ
ス制御スレッド1bのスレッド管理ブロック3bをレデ
ィキュー5にキューイングした後、レディキュー5の先
頭に接続されているスレッド管理ブロック3bをキュー
から外し、ディスパッチャ9を起動する。次にディスパ
ッチャ9が、現在実行中のデバイス制御スレッド2dの
スタックポインタおよび汎用レジスタ値をスレッド管理
ブロック3dに退避した後、スレッド管理ブロック3b
に保持されているスタックポインタおよび汎用レジスタ
値を復帰して、スレッドの実行を切り替える。次にデバ
イス制御スレッド2dが、ポートaへのメッセージ送信
命令をメッセージ管理部13に発行する。次にメッセー
ジ管理部13が、メッセージテーブル12のポートa用
の受信キューにスレッド管理ブロック3aがキューイン
グされているので、受信キューからスレッド管理ブロッ
ク3aを外した後、スレッド管理ブロック3aをレディ
キュー5にキューイングし、スケジューラ8を起動す
る。次にスケジューラ8が、レディキュー5の先頭に接
続されているスレッド管理ブロック3aをキューから外
し、ディスパッチャ9に渡す。次にディスパッチャ9
が、現在実行中のデバイス制御スレッド2bのスタック
ポインタおよび汎用レジスタ値をスレッド管理ブロック
3bに退避した後、スレッド管理ブロック3aに保持さ
れているスタックポインタおよび汎用レジスタ値を復帰
して、スレッドの実行を切り替える。以下、上記の動作
を繰り返すことにより、光磁気ディスクに格納されてい
る圧縮画像データが伸長されて、VRAMに接続された
表示装置の表示画面に次々と表示されていく。
【0020】なお上記実施例1では、OS としてマル
チタスクOSを使用したが、OS依存部10が発行する
システムコールをシングルタスク用に切り替え、デバイ
スドライバ7が各OSとのインタフェース規約を遵守す
るよう変更を行なえば、各スレッドに全く変更を加えず
にシングルタスクOS上でも同様の動作を実現できるこ
とは明らかである。
チタスクOSを使用したが、OS依存部10が発行する
システムコールをシングルタスク用に切り替え、デバイ
スドライバ7が各OSとのインタフェース規約を遵守す
るよう変更を行なえば、各スレッドに全く変更を加えず
にシングルタスクOS上でも同様の動作を実現できるこ
とは明らかである。
【0021】また上記実施例では、I/Oキュー4、レ
ディキュー5、メッセージテーブル12中の送信キュー
および受信キューを、最後尾に接続し、先頭から外して
いく方法を採用したが、各デバイス制御スレッドに優先
度を設けてキューイングの方法を設定するように構成し
てもよい。 (実施例2)図2は本発明の実施例2における情報処理
装置の構成図で、この情報処理装置は、スレッド21
と、デバイス制御スレッド22と、スレッド管理テーブ
ル23と、I/Oキュー24と、レディキュー25と、
フラグテーブル26と、デバイスドライバ27と、スケ
ジューラ28と、ディスパッチャ29と、OS依存部3
0と、デバイス管理部31と、メッセージテーブル32
と、メッセージ管理部33とを備えている。複数のスレ
ッド21は、マルチタスクOSの1タスク上またはシン
グルタスクOS上に、スタックポインタや汎用レジスタ
値などのコンテキスト情報を保持するスレッド管理ブロ
ックを退避、復帰しながら各種処理を行なう。スレッド
21に含まれる複数のデバイス制御スレッド22は、各
デバイスに1対1に対応してI/O命令を発行し、その
デバイスの制御を行なう。スレッド管理テーブル23
は、スレッド管理ブロックを全スレッドについて保持す
る。I/Oキュー24は、I/O待ち状態にあるスレッ
ド管理ブロックをキューイングする。レディキュー25
は、実行可能状態にあるスレッド管理ブロックをキュー
イングする。フラグテーブル26は、I/Oの完了を通
知する領域であるI/O完了フラグを各デバイス毎に保
持する。複数のデバイスドライバ27は、各デバイスに
対して非同期I/Oを行ない、I/O完了時にフラグテ
ーブル26内の対応するI/O完了フラグをオンとす
る。スケジューラ28は、I/Oキュー24を検索して
スレッド管理ブロックの保持するI/O完了フラグへの
ポインタを参照し、いずれかのI/O完了フラグがオン
となっているならば対応するスレッド管理ブロックをI
/Oキューから外してレディキュー25にキューイング
した後、レディキュー25の中から次実行のスレッド管
理ブロックを決定し、そのスレッド管理ブロックをレデ
ィキュー25から外す。ディスパッチャ29は、現在実
行中のスレッドのコンテキスト情報をそのスレッドに対
応するスレッド管理ブロックに退避した後、スケジュー
ラ8で決定されたスレッド管理ブロックに保持されてい
るコンテキスト情報をスタックポインタや汎用レジスタ
などに復帰して、スレッドの実行を切り替える。OS依
存部30は、デバイス制御スレッド22が発行するデバ
イスドライバ27に対するI/O命令をマルチタスクO
SまたはシングルタスクOSに依存したI/O命令に変
換して、それをマルチタスクOSまたはシングルタスク
OSに対して発行する。デバイス管理部31は、デバイ
ス制御スレッド22からのI/O要求を受理して対応す
るフラグテーブル26内のI/O完了フラグをオフと
し、要求を受理したデバイス制御スレッド22のスレッ
ド管理ブロックをI/Oキュー24にキューイングした
後、OS依存部30に対してデバイス制御スレッド22
からのI/O命令を発行し、スケジューラ28を起動す
る。メッセージテーブル32は、各ポート毎に送信ブロ
ックをキューイングする送信キューと受信を要求したス
レッドのスレッド管理ブロックをキューイングする受信
キューとの組を保持する。メッセージ管理部33は、ス
レッド21からの受信要求時に指定ポートのメッセージ
テーブル32内の送信キューに送信ブロックがキューイ
ングされているならば、送信キューから送信ブロックを
1つ外した後、その受信要求スレッドのスレッド管理ブ
ロックをレディキュー25にキューイングし、指定ポー
トのメッセージテーブル32内の送信キューに送信ブロ
ックがキューイングされていないならば、指定ポートの
メッセージテーブル32内の受信キューにスレッド管理
ブロックをキューイングし、スレッド21からの送信要
求時に指定ポートのメッセージテーブル32内の受信キ
ューにスレッド管理ブロックがキューイングされている
ならば、受信キューからスレッド管理ブロックを1つ外
した後、その受信要求スレッドのスレッド管理ブロック
をレディキュー25にキューイングし、指定ポートのメ
ッセージテーブル32内の受信キューにスレッド管理ブ
ロックがキューイングされていないならば、指定ポート
のメッセージテーブル32内の送信キューに送信ブロッ
クをキューイングし、その後、スケジューラ28を起動
する。
ディキュー5、メッセージテーブル12中の送信キュー
および受信キューを、最後尾に接続し、先頭から外して
いく方法を採用したが、各デバイス制御スレッドに優先
度を設けてキューイングの方法を設定するように構成し
てもよい。 (実施例2)図2は本発明の実施例2における情報処理
装置の構成図で、この情報処理装置は、スレッド21
と、デバイス制御スレッド22と、スレッド管理テーブ
ル23と、I/Oキュー24と、レディキュー25と、
フラグテーブル26と、デバイスドライバ27と、スケ
ジューラ28と、ディスパッチャ29と、OS依存部3
0と、デバイス管理部31と、メッセージテーブル32
と、メッセージ管理部33とを備えている。複数のスレ
ッド21は、マルチタスクOSの1タスク上またはシン
グルタスクOS上に、スタックポインタや汎用レジスタ
値などのコンテキスト情報を保持するスレッド管理ブロ
ックを退避、復帰しながら各種処理を行なう。スレッド
21に含まれる複数のデバイス制御スレッド22は、各
デバイスに1対1に対応してI/O命令を発行し、その
デバイスの制御を行なう。スレッド管理テーブル23
は、スレッド管理ブロックを全スレッドについて保持す
る。I/Oキュー24は、I/O待ち状態にあるスレッ
ド管理ブロックをキューイングする。レディキュー25
は、実行可能状態にあるスレッド管理ブロックをキュー
イングする。フラグテーブル26は、I/Oの完了を通
知する領域であるI/O完了フラグを各デバイス毎に保
持する。複数のデバイスドライバ27は、各デバイスに
対して非同期I/Oを行ない、I/O完了時にフラグテ
ーブル26内の対応するI/O完了フラグをオンとす
る。スケジューラ28は、I/Oキュー24を検索して
スレッド管理ブロックの保持するI/O完了フラグへの
ポインタを参照し、いずれかのI/O完了フラグがオン
となっているならば対応するスレッド管理ブロックをI
/Oキューから外してレディキュー25にキューイング
した後、レディキュー25の中から次実行のスレッド管
理ブロックを決定し、そのスレッド管理ブロックをレデ
ィキュー25から外す。ディスパッチャ29は、現在実
行中のスレッドのコンテキスト情報をそのスレッドに対
応するスレッド管理ブロックに退避した後、スケジュー
ラ8で決定されたスレッド管理ブロックに保持されてい
るコンテキスト情報をスタックポインタや汎用レジスタ
などに復帰して、スレッドの実行を切り替える。OS依
存部30は、デバイス制御スレッド22が発行するデバ
イスドライバ27に対するI/O命令をマルチタスクO
SまたはシングルタスクOSに依存したI/O命令に変
換して、それをマルチタスクOSまたはシングルタスク
OSに対して発行する。デバイス管理部31は、デバイ
ス制御スレッド22からのI/O要求を受理して対応す
るフラグテーブル26内のI/O完了フラグをオフと
し、要求を受理したデバイス制御スレッド22のスレッ
ド管理ブロックをI/Oキュー24にキューイングした
後、OS依存部30に対してデバイス制御スレッド22
からのI/O命令を発行し、スケジューラ28を起動す
る。メッセージテーブル32は、各ポート毎に送信ブロ
ックをキューイングする送信キューと受信を要求したス
レッドのスレッド管理ブロックをキューイングする受信
キューとの組を保持する。メッセージ管理部33は、ス
レッド21からの受信要求時に指定ポートのメッセージ
テーブル32内の送信キューに送信ブロックがキューイ
ングされているならば、送信キューから送信ブロックを
1つ外した後、その受信要求スレッドのスレッド管理ブ
ロックをレディキュー25にキューイングし、指定ポー
トのメッセージテーブル32内の送信キューに送信ブロ
ックがキューイングされていないならば、指定ポートの
メッセージテーブル32内の受信キューにスレッド管理
ブロックをキューイングし、スレッド21からの送信要
求時に指定ポートのメッセージテーブル32内の受信キ
ューにスレッド管理ブロックがキューイングされている
ならば、受信キューからスレッド管理ブロックを1つ外
した後、その受信要求スレッドのスレッド管理ブロック
をレディキュー25にキューイングし、指定ポートのメ
ッセージテーブル32内の受信キューにスレッド管理ブ
ロックがキューイングされていないならば、指定ポート
のメッセージテーブル32内の送信キューに送信ブロッ
クをキューイングし、その後、スケジューラ28を起動
する。
【0022】図3は本発明の実施例2における情報処理
装置におけるスレッド管理テーブル23内の1スレッド
管理ブロックの構造図である。図4は本発明の実施例2
における情報処理装置におけるスレッド管理テーブル2
3とフラグテーブル26、I/Oキュー24、レディキ
ュー25との関係を表す摸式図である。
装置におけるスレッド管理テーブル23内の1スレッド
管理ブロックの構造図である。図4は本発明の実施例2
における情報処理装置におけるスレッド管理テーブル2
3とフラグテーブル26、I/Oキュー24、レディキ
ュー25との関係を表す摸式図である。
【0023】なお図示していないが、メッセージテーブ
ル32にはポートa,b,cの3つのポート用の領域が
確保されているものとする。また、スレッド21は1つ
のメインスレッド21aを含んでおり、このメインスレ
ッド21aは、2つのデバイス制御スレッド22b,2
2cとメッセージ通信を行ないながら全体の制御を行な
うものとする。また、デバイス制御スレッド22は2つ
のデバイス制御スレッド22b,22cを含んでおり、
デバイス制御スレッド22bは光磁気ディスク装置を制
御し、デバイス制御スレッド22cは圧縮画像の伸長ボ
ードとDMAコントローラとを制御するものとする。ま
た、スレッド管理ブロックにはコンテキスト情報として
スタックポインタおよび汎用レジスタ値が格納されてい
るものとする。また、メインスレッド21aおよびデバ
イス制御スレッド22b,22cはスレッド管理ブロッ
ク23a,23b,23cに対応するものとする。ま
た、デバイスドライバ27は3つの非同期型のデバイス
ドライバ27i,27j,27kを含んでおり、デバイ
スドライバ27iは光磁気ディスク装置に対して実際の
I/O命令を行ない、デバイスドライバ27jは圧縮画
像の伸長ボードに対して実際のI/O命令を行ない、デ
バイスドライバ27kはDMAコントローラに対して実
際のI/O命令を行なう。また、各デバイスドライバ2
7i,27j,27kのフラグテーブル26中のI/O
完了フラグをそれぞれI/O完了フラグ26i,26
j,26kとする。また、光磁気ディスク装置の光磁気
ディスクには圧縮された画像データが格納されているも
のとする。また、伸長ボードはメインメモリ上の圧縮画
像をメインメモリ上の別の領域へ伸長するものとする。
また、DMAコントローラはメインメモリからVRAM
へのメモリ間転送を行なうものとする。また、伸長ボー
ドとDMAコントローラとの処理速度は合計しても光磁
気ディスク装置の処理速度に比べ速いものとする。ま
た、メインメモリ上には、圧縮画像データ読み込み用の
第1および第2のバッファ領域と、伸長ボードにより第
1または第2のバッファ領域の圧縮画像データを伸長し
たデータを格納する第3のバッファ領域とが設定されて
いるものとする。また、初期状態では第1のバッファ領
域には既に圧縮画像データが読み込まれているものとす
る。また、初期状態として、デバイス制御スレッド22
bが実行状態であり、レディキュー25には先頭からス
レッド管理ブロック23c,23aがこの順に接続され
ており、I/Oキュー24には何も接続されていないも
のとする。また、本実施例2における情報処理装置はマ
ルチタスクOSの1タスク上に構成されているものとす
る。
ル32にはポートa,b,cの3つのポート用の領域が
確保されているものとする。また、スレッド21は1つ
のメインスレッド21aを含んでおり、このメインスレ
ッド21aは、2つのデバイス制御スレッド22b,2
2cとメッセージ通信を行ないながら全体の制御を行な
うものとする。また、デバイス制御スレッド22は2つ
のデバイス制御スレッド22b,22cを含んでおり、
デバイス制御スレッド22bは光磁気ディスク装置を制
御し、デバイス制御スレッド22cは圧縮画像の伸長ボ
ードとDMAコントローラとを制御するものとする。ま
た、スレッド管理ブロックにはコンテキスト情報として
スタックポインタおよび汎用レジスタ値が格納されてい
るものとする。また、メインスレッド21aおよびデバ
イス制御スレッド22b,22cはスレッド管理ブロッ
ク23a,23b,23cに対応するものとする。ま
た、デバイスドライバ27は3つの非同期型のデバイス
ドライバ27i,27j,27kを含んでおり、デバイ
スドライバ27iは光磁気ディスク装置に対して実際の
I/O命令を行ない、デバイスドライバ27jは圧縮画
像の伸長ボードに対して実際のI/O命令を行ない、デ
バイスドライバ27kはDMAコントローラに対して実
際のI/O命令を行なう。また、各デバイスドライバ2
7i,27j,27kのフラグテーブル26中のI/O
完了フラグをそれぞれI/O完了フラグ26i,26
j,26kとする。また、光磁気ディスク装置の光磁気
ディスクには圧縮された画像データが格納されているも
のとする。また、伸長ボードはメインメモリ上の圧縮画
像をメインメモリ上の別の領域へ伸長するものとする。
また、DMAコントローラはメインメモリからVRAM
へのメモリ間転送を行なうものとする。また、伸長ボー
ドとDMAコントローラとの処理速度は合計しても光磁
気ディスク装置の処理速度に比べ速いものとする。ま
た、メインメモリ上には、圧縮画像データ読み込み用の
第1および第2のバッファ領域と、伸長ボードにより第
1または第2のバッファ領域の圧縮画像データを伸長し
たデータを格納する第3のバッファ領域とが設定されて
いるものとする。また、初期状態では第1のバッファ領
域には既に圧縮画像データが読み込まれているものとす
る。また、初期状態として、デバイス制御スレッド22
bが実行状態であり、レディキュー25には先頭からス
レッド管理ブロック23c,23aがこの順に接続され
ており、I/Oキュー24には何も接続されていないも
のとする。また、本実施例2における情報処理装置はマ
ルチタスクOSの1タスク上に構成されているものとす
る。
【0024】次に動作を説明する。先ず、メインスレッ
ド21aおよびデバイス制御スレッド22b,22cの
動作の流れについて述べる。各スレッドが以下の動作を
行なうことにより、光磁気ディスクに格納されている圧
縮画像データが伸長されて、VRAMに接続された表示
装置の表示画面に次々と表示されていく。すなわちメイ
ンスレッド21aは、ポートbへのメッセージ送信命令
をメッセージ管理部33に発行する。またポートcへの
メッセージ送信命令をメッセージ管理部33に発行す
る。またポートaからのメッセージ受信待ち命令をメッ
セージ管理部33に発行する。またメッセージを受信す
ると、再び、ポートaからのメッセージ受信待ち命令を
メッセージ管理部33に発行する。このようにメインス
レッド21aは上記の動作を繰り返す。そしてデバイス
制御スレッド22bは、ポートbからのメッセージ受信
待ち命令をメッセージ管理部33に発行する。またメッ
セージを受信すると、光磁気ディスク装置から第1また
は第2のバッファ領域へのリード命令をデバイス管理部
31に発行する。また上記I/Oが完了すると、ポート
aへのメッセージ送信命令をメッセージ管理部33に発
行する。このようにデバイス制御スレッド22bは上記
動作を繰り返す。そしてデバイス制御スレッド22c
は、ポートcからのメッセージ受信待ち命令をメッセー
ジ管理部33に発行する。またメッセージを受信する
と、第2または第1のバッファ領域の圧縮画像を第3の
バッファ領域へ伸長する命令をメッセージ管理部33に
発行する。また上記I/Oが完了すると、DMAコント
ローラを用いて第3のバッファ領域からVRAMへのメ
モリ間転送を行なう命令をデバイス管理部31に発行す
る。また上記I/Oが完了すると、ポートaへのメッセ
ージ送信命令をメッセージ管理部33に発行する。この
ようにデバイス制御スレッド22cは上記の動作を繰り
返す。
ド21aおよびデバイス制御スレッド22b,22cの
動作の流れについて述べる。各スレッドが以下の動作を
行なうことにより、光磁気ディスクに格納されている圧
縮画像データが伸長されて、VRAMに接続された表示
装置の表示画面に次々と表示されていく。すなわちメイ
ンスレッド21aは、ポートbへのメッセージ送信命令
をメッセージ管理部33に発行する。またポートcへの
メッセージ送信命令をメッセージ管理部33に発行す
る。またポートaからのメッセージ受信待ち命令をメッ
セージ管理部33に発行する。またメッセージを受信す
ると、再び、ポートaからのメッセージ受信待ち命令を
メッセージ管理部33に発行する。このようにメインス
レッド21aは上記の動作を繰り返す。そしてデバイス
制御スレッド22bは、ポートbからのメッセージ受信
待ち命令をメッセージ管理部33に発行する。またメッ
セージを受信すると、光磁気ディスク装置から第1また
は第2のバッファ領域へのリード命令をデバイス管理部
31に発行する。また上記I/Oが完了すると、ポート
aへのメッセージ送信命令をメッセージ管理部33に発
行する。このようにデバイス制御スレッド22bは上記
動作を繰り返す。そしてデバイス制御スレッド22c
は、ポートcからのメッセージ受信待ち命令をメッセー
ジ管理部33に発行する。またメッセージを受信する
と、第2または第1のバッファ領域の圧縮画像を第3の
バッファ領域へ伸長する命令をメッセージ管理部33に
発行する。また上記I/Oが完了すると、DMAコント
ローラを用いて第3のバッファ領域からVRAMへのメ
モリ間転送を行なう命令をデバイス管理部31に発行す
る。また上記I/Oが完了すると、ポートaへのメッセ
ージ送信命令をメッセージ管理部33に発行する。この
ようにデバイス制御スレッド22cは上記の動作を繰り
返す。
【0025】すなわち、実施例1の情報処理装置におい
ては、デバイス制御スレッド2b,2c,2dとフラグ
テーブル6中のI/O完了フラグ6i,6j,6kとデ
バイスドライバ7i,7j,7kとの関係は1対1で固
定されていた。このため、実際にはデバイスドライバ7
jとデバイスドライバ7kとは同時に動作することはな
いが、この2つのデバイスドライバ7j,7kを制御す
るためにデバイス制御スレッド2c,2dの2つを使用
せねばならなかった。しかし、この実施例2の情報処理
装置においては、メインスレッド21aおよびデバイス
制御スレッド22b,22cを上記のような構造とする
ことにより、デバイス制御スレッド22cがデバイスド
ライバ27jに対してI/O命令を実行中であれば、ス
ケジューラ28の起動時にI/Oキュー24に接続され
たスレッド管理ブロック23c内にあるI/O完了フラ
グ26jへのポインタを参照し、デバイス制御スレッド
22cがデバイスドライバ27kに対してI/O命令を
実行中であれば、スケジューラ28の起動時にI/Oキ
ュー24に接続されたスレッド管理ブロック23c内に
あるI/O完了フラグ26kへのポインタを参照するこ
とにより、デバイス制御スレッドの個数を実施例1に比
べて3から2へ削減し、また、メッセージ通信の回数を
6回から4回へ削減することができる。 (実施例3)図5は本発明の実施例3における情報処理
装置の構成図で、この情報処理装置は、スレッド41
と、デバイス制御スレッド42と、スレッド管理テーブ
ル43と、I/Oキュー44と、レディキュー45と、
フラグテーブル46と、デバイスドライバ47と、スケ
ジューラ48と、ディスパッチャ49と、OS依存部5
0と、デバイス管理部51と、メッセージテーブル52
と、メッセージ管理部53と、イベントドライバ54
と、イベント管理部55とを備えている。複数のスレッ
ド41は、マルチタスクOSの1タスク上またはシング
ルタスクOS上に、スタックポインタや汎用レジスタ値
などのコンテキスト情報を保持するスレッド管理ブロッ
クを退避、復帰しながら各種処理を行なう。複数のデバ
イス制御スレッド42は、スレッド41に含まれてお
り、各デバイスに1対1に対応してI/O命令を発行す
ることにより各デバイスの制御を行なう。スレッド管理
テーブル43は、スレッド管理ブロックを全スレッドに
ついて保持する。I/Oキュー44は、I/O待ち状態
にあるスレッド管理ブロックをキューイングする。レデ
ィキュー45は、実行可能状態にあるスレッド管理ブロ
ックをキューイングする。フラグテーブル46は、I/
Oの完了を通知する領域であるI/O完了フラグを各デ
バイス毎に保持する。複数のデバイスドライバ47は、
各デバイスに対して非同期I/Oを行ない、I/O完了
時にフラグテーブル46内の対応するI/O完了フラグ
をオンとする。スケジューラ48は、フラグテーブル4
6を検索して、いずれかのI/O完了フラグがオンとな
っているならば対応するデバイス制御スレッド42のス
レッド管理ブロックをI/Oキュー44から外してレデ
ィキュー45にキューイングした後、レディキュー45
の中から次実行のスレッド管理ブロックを決定し、その
スレッド管理ブロックをレディキュー45から外す。デ
ィスパッチャ49は、現在実行中のスレッドのコンテキ
スト情報をそのスレッドに対応するスレッド管理ブロッ
クに退避した後、スケジューラ48で決定されたスレッ
ド管理ブロックに保持されているコンテキスト情報をス
タックポインタや汎用レジスタなどに復帰して、スレッ
ドの実行を切り替える。OS依存部50は、デバイス制
御スレッド42が発行するデバイスドライバ47に対す
るI/O命令をマルチタスクOSまたはシングルタスク
OSに依存したI/O命令に変換して、それをマルチタ
スクOSまたはシングルタスクOSに対して発行する。
デバイス管理部51は、デバイス制御スレッド42から
のI/O要求を受理して対応するフラグテーブル46内
のI/O完了フラグをオフとし、要求を受理したデバイ
ス制御スレッド42のスレッド管理ブロックをI/Oキ
ュー44にキューイングした後、OS依存部50に対し
てデバイス制御スレッド42からのI/O命令を発行
し、スケジューラ48を起動する。メッセージテーブル
52は、各ポート毎に送信ブロックをキューイングする
送信キューと受信を要求したスレッドのスレッド管理ブ
ロックをキューイングする受信キューとの組を保持す
る。メッセージ管理部53は、スレッド41からの受信
要求時に指定ポートのメッセージテーブル52内の送信
キューに送信ブロックがキューイングされているなら
ば、送信キューから送信ブロックを1つ外した後、その
受信要求スレッドのスレッド管理ブロックをレディキュ
ー45にキューイングし、指定ポートのメッセージテー
ブル52内の送信キューに送信ブロックがキューイング
されていないならば、指定ポートのメッセージテーブル
52内の受信キューにスレッド管理ブロックをキューイ
ングし、スレッド41からの送信要求時に指定ポートの
メッセージテーブル52内の受信キューにスレッド管理
ブロックがキューイングされているならば、受信キュー
からスレッド管理ブロックを1つ外した後、その受信要
求スレッドのスレッド管理ブロックをレディキュー45
にキューイングし、指定ポートのメッセージテーブル5
2内の受信キューにスレッド管理ブロックがキューイン
グされていないならば、指定ポートのメッセージテーブ
ル52内の送信キューに送信ブロックをキューイング
し、その後、スケジューラ48を起動する。イベントド
ライバ54は、イベント入力を扱い、イベントを保持し
ていれば、フラグテーブル46内の対応するI/O完了
フラグをオンとし、イベントを保持していなければオフ
とする。イベント管理部55は、スレッド41からのイ
ベント獲得要求を受理し、フラグテーブル46内の対応
するI/O完了フラグがオンであればOS依存部50を
介してイベントドライバ54を起動してイベントを獲得
した後、スレッド41をレディキュー45にキューイン
グし、オフであれば、そのスレッドのスレッド管理ブロ
ックをI/Oキュー44にキューイングした後、スケジ
ューラ48を起動し、再び実行状態となったときにOS
依存部50を介してイベントドライバ54を起動してイ
ベントを獲得する。
ては、デバイス制御スレッド2b,2c,2dとフラグ
テーブル6中のI/O完了フラグ6i,6j,6kとデ
バイスドライバ7i,7j,7kとの関係は1対1で固
定されていた。このため、実際にはデバイスドライバ7
jとデバイスドライバ7kとは同時に動作することはな
いが、この2つのデバイスドライバ7j,7kを制御す
るためにデバイス制御スレッド2c,2dの2つを使用
せねばならなかった。しかし、この実施例2の情報処理
装置においては、メインスレッド21aおよびデバイス
制御スレッド22b,22cを上記のような構造とする
ことにより、デバイス制御スレッド22cがデバイスド
ライバ27jに対してI/O命令を実行中であれば、ス
ケジューラ28の起動時にI/Oキュー24に接続され
たスレッド管理ブロック23c内にあるI/O完了フラ
グ26jへのポインタを参照し、デバイス制御スレッド
22cがデバイスドライバ27kに対してI/O命令を
実行中であれば、スケジューラ28の起動時にI/Oキ
ュー24に接続されたスレッド管理ブロック23c内に
あるI/O完了フラグ26kへのポインタを参照するこ
とにより、デバイス制御スレッドの個数を実施例1に比
べて3から2へ削減し、また、メッセージ通信の回数を
6回から4回へ削減することができる。 (実施例3)図5は本発明の実施例3における情報処理
装置の構成図で、この情報処理装置は、スレッド41
と、デバイス制御スレッド42と、スレッド管理テーブ
ル43と、I/Oキュー44と、レディキュー45と、
フラグテーブル46と、デバイスドライバ47と、スケ
ジューラ48と、ディスパッチャ49と、OS依存部5
0と、デバイス管理部51と、メッセージテーブル52
と、メッセージ管理部53と、イベントドライバ54
と、イベント管理部55とを備えている。複数のスレッ
ド41は、マルチタスクOSの1タスク上またはシング
ルタスクOS上に、スタックポインタや汎用レジスタ値
などのコンテキスト情報を保持するスレッド管理ブロッ
クを退避、復帰しながら各種処理を行なう。複数のデバ
イス制御スレッド42は、スレッド41に含まれてお
り、各デバイスに1対1に対応してI/O命令を発行す
ることにより各デバイスの制御を行なう。スレッド管理
テーブル43は、スレッド管理ブロックを全スレッドに
ついて保持する。I/Oキュー44は、I/O待ち状態
にあるスレッド管理ブロックをキューイングする。レデ
ィキュー45は、実行可能状態にあるスレッド管理ブロ
ックをキューイングする。フラグテーブル46は、I/
Oの完了を通知する領域であるI/O完了フラグを各デ
バイス毎に保持する。複数のデバイスドライバ47は、
各デバイスに対して非同期I/Oを行ない、I/O完了
時にフラグテーブル46内の対応するI/O完了フラグ
をオンとする。スケジューラ48は、フラグテーブル4
6を検索して、いずれかのI/O完了フラグがオンとな
っているならば対応するデバイス制御スレッド42のス
レッド管理ブロックをI/Oキュー44から外してレデ
ィキュー45にキューイングした後、レディキュー45
の中から次実行のスレッド管理ブロックを決定し、その
スレッド管理ブロックをレディキュー45から外す。デ
ィスパッチャ49は、現在実行中のスレッドのコンテキ
スト情報をそのスレッドに対応するスレッド管理ブロッ
クに退避した後、スケジューラ48で決定されたスレッ
ド管理ブロックに保持されているコンテキスト情報をス
タックポインタや汎用レジスタなどに復帰して、スレッ
ドの実行を切り替える。OS依存部50は、デバイス制
御スレッド42が発行するデバイスドライバ47に対す
るI/O命令をマルチタスクOSまたはシングルタスク
OSに依存したI/O命令に変換して、それをマルチタ
スクOSまたはシングルタスクOSに対して発行する。
デバイス管理部51は、デバイス制御スレッド42から
のI/O要求を受理して対応するフラグテーブル46内
のI/O完了フラグをオフとし、要求を受理したデバイ
ス制御スレッド42のスレッド管理ブロックをI/Oキ
ュー44にキューイングした後、OS依存部50に対し
てデバイス制御スレッド42からのI/O命令を発行
し、スケジューラ48を起動する。メッセージテーブル
52は、各ポート毎に送信ブロックをキューイングする
送信キューと受信を要求したスレッドのスレッド管理ブ
ロックをキューイングする受信キューとの組を保持す
る。メッセージ管理部53は、スレッド41からの受信
要求時に指定ポートのメッセージテーブル52内の送信
キューに送信ブロックがキューイングされているなら
ば、送信キューから送信ブロックを1つ外した後、その
受信要求スレッドのスレッド管理ブロックをレディキュ
ー45にキューイングし、指定ポートのメッセージテー
ブル52内の送信キューに送信ブロックがキューイング
されていないならば、指定ポートのメッセージテーブル
52内の受信キューにスレッド管理ブロックをキューイ
ングし、スレッド41からの送信要求時に指定ポートの
メッセージテーブル52内の受信キューにスレッド管理
ブロックがキューイングされているならば、受信キュー
からスレッド管理ブロックを1つ外した後、その受信要
求スレッドのスレッド管理ブロックをレディキュー45
にキューイングし、指定ポートのメッセージテーブル5
2内の受信キューにスレッド管理ブロックがキューイン
グされていないならば、指定ポートのメッセージテーブ
ル52内の送信キューに送信ブロックをキューイング
し、その後、スケジューラ48を起動する。イベントド
ライバ54は、イベント入力を扱い、イベントを保持し
ていれば、フラグテーブル46内の対応するI/O完了
フラグをオンとし、イベントを保持していなければオフ
とする。イベント管理部55は、スレッド41からのイ
ベント獲得要求を受理し、フラグテーブル46内の対応
するI/O完了フラグがオンであればOS依存部50を
介してイベントドライバ54を起動してイベントを獲得
した後、スレッド41をレディキュー45にキューイン
グし、オフであれば、そのスレッドのスレッド管理ブロ
ックをI/Oキュー44にキューイングした後、スケジ
ューラ48を起動し、再び実行状態となったときにOS
依存部50を介してイベントドライバ54を起動してイ
ベントを獲得する。
【0026】なお図示していないが、スレッド管理テー
ブル43はデバイス制御スレッド42aを含んでおり、
このデバイス制御スレッド42aはタブレットからのペ
ン入力をメインメモリ上の第1のバッファ領域へ格納す
るものとする。また、デバイス制御スレッド42aはス
レッド管理ブロックを43aに対応しているものとす
る。またイベントドライバ54はイベントドライバ54
iを含んでおり、このイベントドライバ54iは、タブ
レットからのペン入力発生割り込みを受け付け、割り込
み発生時にタブレットのハードウェアからドライバ内の
バッファである第2のバッファ領域へデータを転送、保
持するものとする。またイベントドライバ54iのフラ
グテーブル46中のI/O完了フラグを46iとする。
また初期状態では、第2のバッファ領域にはデータはな
いものとする。
ブル43はデバイス制御スレッド42aを含んでおり、
このデバイス制御スレッド42aはタブレットからのペ
ン入力をメインメモリ上の第1のバッファ領域へ格納す
るものとする。また、デバイス制御スレッド42aはス
レッド管理ブロックを43aに対応しているものとす
る。またイベントドライバ54はイベントドライバ54
iを含んでおり、このイベントドライバ54iは、タブ
レットからのペン入力発生割り込みを受け付け、割り込
み発生時にタブレットのハードウェアからドライバ内の
バッファである第2のバッファ領域へデータを転送、保
持するものとする。またイベントドライバ54iのフラ
グテーブル46中のI/O完了フラグを46iとする。
また初期状態では、第2のバッファ領域にはデータはな
いものとする。
【0027】次に動作を説明する。先ずデバイス制御ス
レッド42aが、イベント管理部55へペン入力データ
の読み込みを依頼する。次にイベント管理部55が、フ
ラグテーブル46内のI/O完了フラグ46iを参照
し、I/O完了フラグ46iはオフなので、スレッド管
理ブロック43aをI/Oキュー44にキューイングし
た後、スケジューラ48を起動する。次にスケジューラ
48が、レディキュー45が空なので、フラグテーブル
46を参照し、I/O完了フラグ46iのチェックを繰
り返し行なう。次にイベントドライバ54iが、ペン入
力が発生すると、タブレットのハードウェアからドライ
バ内のバッファである第2のバッファ領域へのデータ転
送、保持を行なった後、I/O完了フラグ46iをオン
にする。次にスケジューラ48が、I/O完了フラグ4
6iがオンなので、デバイス制御スレッド52aをI/
Oキュー44から外し、レディキュー45にキューイン
グした後、レディキュー45の先頭に接続されているス
レッド管理ブロック43aを渡して、ディスパッチャ4
9を起動する。次にディスパッチャ49が、デバイス制
御スレッド42aの実行を再開する。次にデバイス制御
スレッド42aが、デバイス管理部51中でI/O待ち
状態となっているため、実行復帰時にイベント管理部5
5内に復帰する。次にイベント管理部55が、OS依存
部50にイベントの獲得を依頼する。次にOS依存部5
0が、上記のイベント獲得命令をマルチタスクOSに対
するI/O命令のためのシステムコールに変換した後、
このシステムコールを発行する。次にマルチタスクOS
が、タブレット用のイベントドライバ54iを起動す
る。次にデバイス制御スレッド42aが、イベントを第
2のバッファ領域から第1のバッファ領域へ格納する。
レッド42aが、イベント管理部55へペン入力データ
の読み込みを依頼する。次にイベント管理部55が、フ
ラグテーブル46内のI/O完了フラグ46iを参照
し、I/O完了フラグ46iはオフなので、スレッド管
理ブロック43aをI/Oキュー44にキューイングし
た後、スケジューラ48を起動する。次にスケジューラ
48が、レディキュー45が空なので、フラグテーブル
46を参照し、I/O完了フラグ46iのチェックを繰
り返し行なう。次にイベントドライバ54iが、ペン入
力が発生すると、タブレットのハードウェアからドライ
バ内のバッファである第2のバッファ領域へのデータ転
送、保持を行なった後、I/O完了フラグ46iをオン
にする。次にスケジューラ48が、I/O完了フラグ4
6iがオンなので、デバイス制御スレッド52aをI/
Oキュー44から外し、レディキュー45にキューイン
グした後、レディキュー45の先頭に接続されているス
レッド管理ブロック43aを渡して、ディスパッチャ4
9を起動する。次にディスパッチャ49が、デバイス制
御スレッド42aの実行を再開する。次にデバイス制御
スレッド42aが、デバイス管理部51中でI/O待ち
状態となっているため、実行復帰時にイベント管理部5
5内に復帰する。次にイベント管理部55が、OS依存
部50にイベントの獲得を依頼する。次にOS依存部5
0が、上記のイベント獲得命令をマルチタスクOSに対
するI/O命令のためのシステムコールに変換した後、
このシステムコールを発行する。次にマルチタスクOS
が、タブレット用のイベントドライバ54iを起動す
る。次にデバイス制御スレッド42aが、イベントを第
2のバッファ領域から第1のバッファ領域へ格納する。
【0028】すなわち従来は、イベントドライバ内のデ
ータの有無を調べるためにはOSに依存したシステムコ
ールを発行しなければならなかった。しかし、その場
合、スケジューラがI/O完了フラグを調べるタイミン
グで毎回OSを介してシステムコールが発生することに
なりオーバヘッドが大きい。そこで本実施例3では、イ
ベントドライバ54iが直接I/O完了フラグへデータ
の有無を通知し、イベント制御スレッド42aがイベン
ト管理部55へイベントの獲得要求を行なった時に、イ
ベント管理部55が、まずフラグテーブル46内の対応
するI/O完了フラグ46iを参照し、オンであればO
S依存部50を介してイベントドライバ54iを起動し
てイベントを獲得した後、スレッド管理ブロック43a
をレディキュー45に接続し、オフであれば、スレッド
管理ブロック43aをI/Oキュー44に接続した後、
スケジューラ48を起動しておき、スケジューラ48が
他のデバイスドライバと同様にI/Oキュー44に接続
されたスレッド管理ブロックの参照するI/O完了フラ
グを検索し、I/O完了フラグ46iがオンになり、イ
ベント管理部55に実行が戻ってきたときにOS依存部
50を介してイベントドライバ54iを起動してイベン
トを獲得するようにすることにより、イベントドライバ
54i内にデータが存在する場合にのみOS依存部50
を介してイベントドライバ54iを起動してイベントを
獲得することができ、OSのオーバヘッドを減少するこ
とができる。
ータの有無を調べるためにはOSに依存したシステムコ
ールを発行しなければならなかった。しかし、その場
合、スケジューラがI/O完了フラグを調べるタイミン
グで毎回OSを介してシステムコールが発生することに
なりオーバヘッドが大きい。そこで本実施例3では、イ
ベントドライバ54iが直接I/O完了フラグへデータ
の有無を通知し、イベント制御スレッド42aがイベン
ト管理部55へイベントの獲得要求を行なった時に、イ
ベント管理部55が、まずフラグテーブル46内の対応
するI/O完了フラグ46iを参照し、オンであればO
S依存部50を介してイベントドライバ54iを起動し
てイベントを獲得した後、スレッド管理ブロック43a
をレディキュー45に接続し、オフであれば、スレッド
管理ブロック43aをI/Oキュー44に接続した後、
スケジューラ48を起動しておき、スケジューラ48が
他のデバイスドライバと同様にI/Oキュー44に接続
されたスレッド管理ブロックの参照するI/O完了フラ
グを検索し、I/O完了フラグ46iがオンになり、イ
ベント管理部55に実行が戻ってきたときにOS依存部
50を介してイベントドライバ54iを起動してイベン
トを獲得するようにすることにより、イベントドライバ
54i内にデータが存在する場合にのみOS依存部50
を介してイベントドライバ54iを起動してイベントを
獲得することができ、OSのオーバヘッドを減少するこ
とができる。
【0029】
【発明の効果】以上説明したように本発明によれば、マ
ルチタスクOSの1タスク上またはシングルタスクOS
上に、スタックポインタや汎用レジスタ値などのコンテ
キスト情報を保持するスレッド管理ブロックを退避およ
び復帰しながら各種処理を行なう複数のスレッドと、ス
レッドに含まれて、各デバイスに1対1に対応してI/
O命令を発行することにより各デバイスの制御を行なう
複数のデバイス制御スレッドと、スレッド管理ブロック
を全スレッドについて保持するスレッド管理テーブル
と、I/O待ち状態にあるスレッド管理ブロックをキュ
ーイングするI/Oキューと、実行可能状態にあるスレ
ッド管理ブロックをキューイングするレディーキュー
と、I/Oの完了を通知する領域であるI/O完了フラ
グを各デバイス毎に保持するフラグテーブルと、各デバ
イスに対して非同期I/Oを行ない、I/O完了時にフ
ラグテーブル内の対応するI/O完了フラグをオンとす
る複数のデバイスドライバと、フラグテーブルを検索し
て、いずれかのI/O完了フラグがオンとなっているな
らば対応するデバイス制御スレッドのスレッド管理ブロ
ックをI/Oキューから外してレディキューにキューイ
ングした後、レディキューの中から次実行のスレッド管
理ブロックを決定し、そのスレッド管理ブロックをレデ
ィキューから外すスケジューラと、現在実行中のスレッ
ドのコンテキスト情報をそのスレッドに対応するスレッ
ド管理ブロックに退避した後、スケジューラで決定され
たスレッド管理ブロックに保持されているコンテキスト
情報をスタックポインタや汎用レジスタなどに復帰し
て、スレッドの実行を切り替えるディスパッチャと、デ
バイス制御スレッドにより発行されたデバイスドライバ
に対するI/O命令をマルチタスクOSまたはシングル
タスクOSに依存したI/O命令に変換して、それをマ
ルチタスクOSかまたはシングルタスクOSに対して発
行するOS依存部と、デバイス制御スレッドからのI/
O要求を受理して対応するフラグテーブル内のI/O完
了フラグをオフとし、要求を受理したデバイス制御スレ
ッドのスレッド管理ブロックをI/Oキューにキューイ
ングした後、OS依存部に対してデバイス制御スレッド
からのI/O命令を発行し、スケジューラを起動するデ
バイス管理部と、各スレッドがポートを指定して送信す
る送信メッセージ情報を保持する送信ブロックを各ポー
ト毎にキューイングする送信キューと、受信を要求した
スレッドのスレッド管理ブロックをキューイングする受
信キューとの組を保持するメッセージテーブルと、スレ
ッドからの受信要求時に指定ポートのメッセージテーブ
ル内の送信キューに送信ブロックがキューイングされて
いるならば、送信キューから送信ブロックを1つ外した
後、受信要求スレッドのスレッド管理ブロックをレディ
キューにキューイングし、指定ポートのメッセージテー
ブル内の送信キューに送信ブロックがキューイングされ
ていないならば、指定ポートのメッセージテーブル内の
受信キューにスレッド管理ブロックをキューイングし、
スレッドからの送信要求時に指定ポートのメッセージテ
ーブル内の受信キューにスレッド管理ブロックがキュー
イングされているならば、受信キューからスレッド管理
ブロックを1つ外した後、受信要求スレッドのスレッド
管理ブロックをレディキューにキューイングし、指定ポ
ートのメッセージテーブル内の受信キューにスレッド管
理ブロックがキューイングされていないならば、指定ポ
ートのメッセージテーブル内の送信キューに送信ブロッ
クをキューイングし、その後、スケジューラを起動する
メッセージ管理部と、を備えたので、マルチタスクOS
の1タスク上またはシングルタスクOS上に複数のスレ
ッドを作り、各スレッドがそれぞれデバイスの制御を同
期的に行なうことから、並列なデバイス制御を容易と
し、OS依存部を切り替えるだけでマルチタスクOSの
1タスク上からシングルタスクのOSへ容易に移行する
ことができる。
ルチタスクOSの1タスク上またはシングルタスクOS
上に、スタックポインタや汎用レジスタ値などのコンテ
キスト情報を保持するスレッド管理ブロックを退避およ
び復帰しながら各種処理を行なう複数のスレッドと、ス
レッドに含まれて、各デバイスに1対1に対応してI/
O命令を発行することにより各デバイスの制御を行なう
複数のデバイス制御スレッドと、スレッド管理ブロック
を全スレッドについて保持するスレッド管理テーブル
と、I/O待ち状態にあるスレッド管理ブロックをキュ
ーイングするI/Oキューと、実行可能状態にあるスレ
ッド管理ブロックをキューイングするレディーキュー
と、I/Oの完了を通知する領域であるI/O完了フラ
グを各デバイス毎に保持するフラグテーブルと、各デバ
イスに対して非同期I/Oを行ない、I/O完了時にフ
ラグテーブル内の対応するI/O完了フラグをオンとす
る複数のデバイスドライバと、フラグテーブルを検索し
て、いずれかのI/O完了フラグがオンとなっているな
らば対応するデバイス制御スレッドのスレッド管理ブロ
ックをI/Oキューから外してレディキューにキューイ
ングした後、レディキューの中から次実行のスレッド管
理ブロックを決定し、そのスレッド管理ブロックをレデ
ィキューから外すスケジューラと、現在実行中のスレッ
ドのコンテキスト情報をそのスレッドに対応するスレッ
ド管理ブロックに退避した後、スケジューラで決定され
たスレッド管理ブロックに保持されているコンテキスト
情報をスタックポインタや汎用レジスタなどに復帰し
て、スレッドの実行を切り替えるディスパッチャと、デ
バイス制御スレッドにより発行されたデバイスドライバ
に対するI/O命令をマルチタスクOSまたはシングル
タスクOSに依存したI/O命令に変換して、それをマ
ルチタスクOSかまたはシングルタスクOSに対して発
行するOS依存部と、デバイス制御スレッドからのI/
O要求を受理して対応するフラグテーブル内のI/O完
了フラグをオフとし、要求を受理したデバイス制御スレ
ッドのスレッド管理ブロックをI/Oキューにキューイ
ングした後、OS依存部に対してデバイス制御スレッド
からのI/O命令を発行し、スケジューラを起動するデ
バイス管理部と、各スレッドがポートを指定して送信す
る送信メッセージ情報を保持する送信ブロックを各ポー
ト毎にキューイングする送信キューと、受信を要求した
スレッドのスレッド管理ブロックをキューイングする受
信キューとの組を保持するメッセージテーブルと、スレ
ッドからの受信要求時に指定ポートのメッセージテーブ
ル内の送信キューに送信ブロックがキューイングされて
いるならば、送信キューから送信ブロックを1つ外した
後、受信要求スレッドのスレッド管理ブロックをレディ
キューにキューイングし、指定ポートのメッセージテー
ブル内の送信キューに送信ブロックがキューイングされ
ていないならば、指定ポートのメッセージテーブル内の
受信キューにスレッド管理ブロックをキューイングし、
スレッドからの送信要求時に指定ポートのメッセージテ
ーブル内の受信キューにスレッド管理ブロックがキュー
イングされているならば、受信キューからスレッド管理
ブロックを1つ外した後、受信要求スレッドのスレッド
管理ブロックをレディキューにキューイングし、指定ポ
ートのメッセージテーブル内の受信キューにスレッド管
理ブロックがキューイングされていないならば、指定ポ
ートのメッセージテーブル内の送信キューに送信ブロッ
クをキューイングし、その後、スケジューラを起動する
メッセージ管理部と、を備えたので、マルチタスクOS
の1タスク上またはシングルタスクOS上に複数のスレ
ッドを作り、各スレッドがそれぞれデバイスの制御を同
期的に行なうことから、並列なデバイス制御を容易と
し、OS依存部を切り替えるだけでマルチタスクOSの
1タスク上からシングルタスクのOSへ容易に移行する
ことができる。
【0030】また、スレッド管理ブロックが、スレッド
管理情報に加えてスレッド毎に現在I/O待ち状態にあ
るデバイスに対応するI/O完了フラグへのポインタを
保持し、スケジューラが、I/Oキューを検索してスレ
ッド管理ブロックの保持するI/O完了フラグへのポイ
ンタを参照し、いずれかのI/O完了フラグがオンとな
っているならば対応するスレッド管理ブロックをI/O
キューから外してレディキューにキューイングした後、
レディキューの中から次実行のスレッド管理ブロックを
決定し、そのスレッド管理ブロックをレディキューから
外す構成とすれば、デバイス制御スレッドとデバイスド
ライバとの関係を固定せずに、どのデバイス制御スレッ
ドも動的に複数のデバイスドライバに対してI/O要求
を出すことができることから、不要なデバイス制御スレ
ッドの作成を行う必要がない。
管理情報に加えてスレッド毎に現在I/O待ち状態にあ
るデバイスに対応するI/O完了フラグへのポインタを
保持し、スケジューラが、I/Oキューを検索してスレ
ッド管理ブロックの保持するI/O完了フラグへのポイ
ンタを参照し、いずれかのI/O完了フラグがオンとな
っているならば対応するスレッド管理ブロックをI/O
キューから外してレディキューにキューイングした後、
レディキューの中から次実行のスレッド管理ブロックを
決定し、そのスレッド管理ブロックをレディキューから
外す構成とすれば、デバイス制御スレッドとデバイスド
ライバとの関係を固定せずに、どのデバイス制御スレッ
ドも動的に複数のデバイスドライバに対してI/O要求
を出すことができることから、不要なデバイス制御スレ
ッドの作成を行う必要がない。
【0031】また、イベント入力を扱い、イベントを保
持していれば、フラグテーブル内の対応するI/O完了
フラグをオンとし、イベントを保持していなければオフ
とするイベントドライバと、スレッドからのイベント獲
得要求を受理し、フラグテーブル内の対応するI/O完
了フラグがオンであればOS依存部を介してイベントド
ライバを起動してイベントを獲得した後、スレッドをレ
ディキューにキューイングし、オフであれば、スレッド
のスレッド管理ブロックをI/Oキューにキューイング
した後、スケジューラを起動し、再び実行状態となった
ときにOS依存部を介してイベントドライバを起動して
イベントを獲得するイベント管理部とを備えれば、OS
を介さずにペン入力などのイベント入力の有無の状況を
得ることから、オーバヘッドを軽減し、スループットを
向上することができる。
持していれば、フラグテーブル内の対応するI/O完了
フラグをオンとし、イベントを保持していなければオフ
とするイベントドライバと、スレッドからのイベント獲
得要求を受理し、フラグテーブル内の対応するI/O完
了フラグがオンであればOS依存部を介してイベントド
ライバを起動してイベントを獲得した後、スレッドをレ
ディキューにキューイングし、オフであれば、スレッド
のスレッド管理ブロックをI/Oキューにキューイング
した後、スケジューラを起動し、再び実行状態となった
ときにOS依存部を介してイベントドライバを起動して
イベントを獲得するイベント管理部とを備えれば、OS
を介さずにペン入力などのイベント入力の有無の状況を
得ることから、オーバヘッドを軽減し、スループットを
向上することができる。
【図1】本発明の実施例1における情報処理装置の構成
図である。
図である。
【図2】本発明の実施例2における情報処理装置の構成
図である。
図である。
【図3】本発明の実施例2における情報処理装置に用い
られるスレッド管理ブロックの構造図である。
られるスレッド管理ブロックの構造図である。
【図4】本発明の実施例2における情報処理装置に用い
られるI/Oキューおよびレディーキューの構造図であ
る。
られるI/Oキューおよびレディーキューの構造図であ
る。
【図5】本発明の実施例3における情報処理装置の構成
図である。
図である。
【図6】従来の情報処理装置の構成図である。
【図7】従来の情報処理装置を用いた場合のデバイス制
御のようすを表す摸式図である。
御のようすを表す摸式図である。
1 スレッド 2 デバイス制御スレッド 3 スレッド管理テーブル 4 I/Oキュー 5 レディキュー 6 フラグテーブル 7 デバイスドライバ 8 スケジューラ 9 ディスパッチャ 10 OS依存部 11 デバイス管理部 12 メッセージテーブル 13 メッセージ管理部 21 スレッド 22 デバイス制御スレッド 23 スレッド管理テーブル 24 I/Oキュー 25 レディキュー 26 フラグテーブル 27 デバイスドライバ 28 スケジューラ 29 ディスパッチャ 30 OS依存部 31 デバイス管理部 32 メッセージテーブル 33 メッセージ管理部 41 スレッド 42 デバイス制御スレッド 43 スレッド管理テーブル 44 I/Oキュー 45 レディキュー 46 フラグテーブル 47 デバイスドライバ 48 スケジューラ 49 ディスパッチャ 50 OS依存部 51 デバイス管理部 52 メッセージテーブル 53 メッセージ管理部 54 イベントドライバ 55 イベント管理部
Claims (3)
- 【請求項1】 マルチタスクOSの1タスク上またはシ
ングルタスクOS上に、 スタックポインタや汎用レジスタ値などのコンテキスト
情報を保持するスレッド管理ブロックを退避および復帰
しながら各種処理を行なう複数のスレッドと、 前記スレッドに含まれて、各デバイスに1対1に対応し
てI/O命令を発行することにより各デバイスの制御を
行なう複数のデバイス制御スレッドと、 前記スレッド管理ブロックを全スレッドについて保持す
るスレッド管理テーブルと、 I/O待ち状態にあるスレッド管理ブロックをキューイ
ングするI/Oキューと、 実行可能状態にあるスレッド管理ブロックをキューイン
グするレディーキューと、 I/Oの完了を通知する領域であるI/O完了フラグを
各デバイス毎に保持するフラグテーブルと、 各デバイスに対して非同期I/Oを行ない、I/O完了
時に前記フラグテーブル内の対応するI/O完了フラグ
をオンとする複数のデバイスドライバと、 前記フラグテーブルを検索して、いずれかのI/O完了
フラグがオンとなっているならば対応するデバイス制御
スレッドのスレッド管理ブロックを前記I/Oキューか
ら外して前記レディキューにキューイングした後、前記
レディキューの中から次実行のスレッド管理ブロックを
決定し、そのスレッド管理ブロックを前記レディキュー
から外すスケジューラと、 現在実行中のスレッドのコンテキスト情報をそのスレッ
ドに対応するスレッド管理ブロックに退避した後、前記
スケジューラで決定されたスレッド管理ブロックに保持
されているコンテキスト情報をスタックポインタや汎用
レジスタなどに復帰して、スレッドの実行を切り替える
ディスパッチャと、 前記デバイス制御スレッドにより発行された前記デバイ
スドライバに対するI/O命令を前記マルチタスクOS
またはシングルタスクOSに依存したI/O命令に変換
して、それを前記マルチタスクOSかまたはシングルタ
スクOSに対して発行するOS依存部と、 前記デバイス制御スレッドからのI/O要求を受理して
対応する前記フラグテーブル内のI/O完了フラグをオ
フとし、要求を受理したデバイス制御スレッドのスレッ
ド管理ブロックを前記I/Oキューにキューイングした
後、前記OS依存部に対して前記デバイス制御スレッド
からのI/O命令を発行し、前記スケジューラを起動す
るデバイス管理部と、 前記各スレッドがポートを指定して送信する送信メッセ
ージ情報を保持する送信ブロックを各ポート毎にキュー
イングする送信キューと、受信を要求したスレッドのス
レッド管理ブロックをキューイングする受信キューとの
組を保持するメッセージテーブルと、 前記スレッドからの受信要求時に指定ポートの前記メッ
セージテーブル内の送信キューに送信ブロックがキュー
イングされているならば、送信キューから送信ブロック
を1つ外した後、受信要求スレッドのスレッド管理ブロ
ックを前記レディキューにキューイングし、指定ポート
の前記メッセージテーブル内の送信キューに送信ブロッ
クがキューイングされていないならば、指定ポートの前
記メッセージテーブル内の受信キューにスレッド管理ブ
ロックをキューイングし、前記スレッドからの送信要求
時に指定ポートの前記メッセージテーブル内の受信キュ
ーにスレッド管理ブロックがキューイングされているな
らば、受信キューからスレッド管理ブロックを1つ外し
た後、受信要求スレッドの前記スレッド管理ブロックを
前記レディキューにキューイングし、指定ポートの前記
メッセージテーブル内の受信キューにスレッド管理ブロ
ックがキューイングされていないならば、指定ポートの
前記メッセージテーブル内の送信キューに送信ブロック
をキューイングし、その後、前記スケジューラを起動す
るメッセージ管理部と、 を備えたことを特徴とする情報処理装置。 - 【請求項2】 スレッド管理ブロックは、スレッド管理
情報に加えてスレッド毎に現在I/O待ち状態にあるデ
バイスに対応するI/O完了フラグへのポインタを保持
し、スケジューラは、I/Oキューを検索してスレッド
管理ブロックの保持するI/O完了フラグへのポインタ
を参照し、いずれかのI/O完了フラグがオンとなって
いるならば対応するスレッド管理ブロックをI/Oキュ
ーから外してレディキューにキューイングした後、前記
レディキューの中から次実行のスレッド管理ブロックを
決定し、そのスレッド管理ブロックを前記レディキュー
から外す構成としたことを特徴とする請求項1に記載の
情報処理装置。 - 【請求項3】 イベント入力を扱い、イベントを保持し
ていれば、フラグテーブル内の対応するI/O完了フラ
グをオンとし、イベントを保持していなければオフとす
るイベントドライバと、 スレッドからのイベント獲得要求を受理し、フラグテー
ブル内の対応するI/O完了フラグがオンであればOS
依存部を介して前記イベントドライバを起動してイベン
トを獲得した後、前記スレッドをレディキューにキュー
イングし、オフであれば、前記スレッドのスレッド管理
ブロックをI/Oキューにキューイングした後、スケジ
ューラを起動し、再び実行状態となったときに前記OS
依存部を介して前記イベントドライバを起動してイベン
トを獲得するイベント管理部と、 を備えたことを特徴とする請求項1または請求項2に記
載の情報処理装置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP5022647A JPH06236287A (ja) | 1993-02-10 | 1993-02-10 | 情報処理装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP5022647A JPH06236287A (ja) | 1993-02-10 | 1993-02-10 | 情報処理装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH06236287A true JPH06236287A (ja) | 1994-08-23 |
Family
ID=12088645
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP5022647A Pending JPH06236287A (ja) | 1993-02-10 | 1993-02-10 | 情報処理装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH06236287A (ja) |
-
1993
- 1993-02-10 JP JP5022647A patent/JPH06236287A/ja active Pending
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| KR100733852B1 (ko) | 계산기 시스템 | |
| JP3253303B2 (ja) | コンテキスト切り換え装置及び方法 | |
| JP3271125B2 (ja) | データを転送する方法と装置及びデータ転送をインタリーブする装置 | |
| EP0093835B1 (en) | Resource switching in a multi-tasking environment | |
| JP3273202B2 (ja) | 複数のデータチャネルを介してデータを転送する方法及びその回路アーキテクチャ | |
| US5381347A (en) | Method and system for displaying images on a display device using an offscreen video memory | |
| JPH02297632A (ja) | 画像表示装置 | |
| JPH0594317A (ja) | 仮想計算機の入出力割り込み処理方式 | |
| KR100370637B1 (ko) | 컴퓨터구조 | |
| US20250173198A1 (en) | Data processing system | |
| US5265251A (en) | Mechanism for allowing a single operation to shift the focus between user applications having direct hardware level access to multiple displays in a virtual terminal environment | |
| JPH064314A (ja) | タスク間同期通信装置 | |
| EP2798455B1 (en) | Direct ring 3 submission of processing jobs to adjunct processors | |
| CN115826857B (zh) | 一种NVMe指令处理方法、装置、设备及介质 | |
| JPH06187312A (ja) | マルチcpuシステムにおける処理方法および装置 | |
| JPH10289196A (ja) | コンピュータおよびコンピュータにおける周辺デバイス制御データの転送方法 | |
| JPH08212090A (ja) | サーバシステム | |
| JPH10260850A (ja) | 仮想計算機システム | |
| JPH03241442A (ja) | ストアバッファ制御方式 | |
| JP2024545660A (ja) | 加速処理ユニットのインライン中断 | |
| JPH08110894A (ja) | 並列計算機システム | |
| JPH07175670A (ja) | タスク制御装置 | |
| JP2941293B2 (ja) | 高速静止画転送方式 | |
| JPH04274524A (ja) | プロセス間通信制御方式 | |
| JPH05225108A (ja) | 複数端末入出力制御システム及びその入出力制御方式 |