JPH086819A - デバイスドライバプログラムのテスト装置およびその方法 - Google Patents

デバイスドライバプログラムのテスト装置およびその方法

Info

Publication number
JPH086819A
JPH086819A JP6159495A JP15949594A JPH086819A JP H086819 A JPH086819 A JP H086819A JP 6159495 A JP6159495 A JP 6159495A JP 15949594 A JP15949594 A JP 15949594A JP H086819 A JPH086819 A JP H086819A
Authority
JP
Japan
Prior art keywords
pseudo
program
interrupt
kernel
input
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP6159495A
Other languages
English (en)
Inventor
Kenya Nishiki
健哉 西木
Toshiaki Hirata
平田  俊明
Kazuo Matsunaga
和男 松永
Yuji Nomura
祐治 野村
Satoshi Miyazaki
聡 宮崎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP6159495A priority Critical patent/JPH086819A/ja
Publication of JPH086819A publication Critical patent/JPH086819A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【目的】実システムではカーネルモードで動作するデバ
イスドライバプログラムを、利用者モードのプロセスの
みを利用して、模擬実行することのできるテスト装置お
よび方法を提供することを目的とする。 【構成】利用者モードで被テストプログラムを呼び出す
部分を、独立したプロセスとして実行するとともに、本
来はカーネルモードで動作すべき被テストプログラムを
1つのプロセス(擬似カーネルプロセス)に割り当て、
このプロセス内にシステムコール処理をスレッドという
実行単位で実行するようにする。さらに、複数の入出力
装置をそれぞれ独立したプロセス(擬似入出力プロセ
ス)として実行するようにする。 【効果】任意の時点でプログラムを停止させて内部状態
を検査するという通常のデバッグ方法を適用できる。ま
た、不当なマシン命令を実行しても本テスト装置で補足
でき、計算機システム全体が停止することはない。さら
にデバイスドライバプログラムのテストを1つの計算機
上で複数個同時に行なうことができる。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、デバイスドライバプロ
グラムのテスト装置および方法に関し、特に本来はカー
ネルモードで動作するデバイスドライバプログラムを利
用者モードで模擬実行するのに好適なテスト装置および
方法に関する。
【0002】
【従来の技術】図2は、従来より知られており、かつ本
発明で前提となる計算機システムの構成を示す。
【0003】この図の計算機システムは、まずソフトウ
ェアレベルとハードウェアレベルに分かれ、ソフトウェ
アレベルは利用者レベルとカーネルレベルに分かれる。
利用者レベルとは、計算機システムの利用者が作成した
プログラムが動作するレベルであり、このレベルには利
用者プログラム8やシステムコールライブラリ9があ
る。利用者レベルでは、プログラムは独立した動作空間
(これを利用者空間と呼ぶ)を持つプロセスという実行
単位で動作する。
【0004】カーネルレベルとは、オペレーティングシ
ステム等のシステム全体の動きを制御するプログラムが
動作するレベルであり、1つの独立した動作空間(これ
をカーネル空間と呼ぶ)を持つ。カーネルレベルには、
次のいくつかのモジュールが存在する。
【0005】システムコールインターフェース10は、
利用者プログラム8がカーネルの機能を利用するための
モジュールである。ファイルサブシステム11は、デバ
イスドライバ12と作用し合い、ハードウエア装置やデ
バイスドライバプログラムの管理、識別を行なう。デバ
イスドライバ12は、ディスク、テープ、端末、プリン
タ、通信回線等の入出力装置の動作を制御するモジュー
ルであり、本発明がテスト対象とする部分である。プロ
セス制御サブシステム14は、プロセスの生成実行、ス
ケジューリング、メモリ管理等を行う。ハードウェア制
御機構13は、ハードウェア15との通信や割込み処理
を実行する。
【0006】従来より知られているように、プログラム
の実行単位であるプロセスの動作モードとして、利用者
モード(前記利用者レベルに対応)及びカーネルモード
(前記カーネルレベルに対応)の2つのモードが存在す
る。本発明では、これら2つのモードが存在することを
前提とする。
【0007】利用者モードでは、プロセス単位に存在す
る利用者空間のデータにのみアクセスでき、他のプロセ
スと時分割による並行動作が可能である。カーネルモー
ドでは、カーネル及び利用者両方の空間にアクセス可能
であり、他の利用者モードおよびカーネルモードのプロ
セスと並行に動作することはなく、実行待ち要求を発行
するまで走りきる。
【0008】次に、図2のような計算機システムでデバ
イスドライバが入出力要求を処理する流れを図3に従っ
て説明する。なお、図3中の(1)、(2)、…の記載
は、以下の説明の(1)、(2)、…に対応している。
【0009】(1)利用者プロセスが、カーネルに入出
力を要求するためのシステムコールを発行する。
【0010】(2)利用者モードからカーネルモードに
切り替わり、対応するデバイスドライバのエントリを呼
び出す。このとき、デバイスドライバは、システムコー
ルを発行した利用者プロセスのプロセスとして動作す
る。
【0011】(3)デバイスドライバは、入出力装置に
入出力要求を渡すためのメッセージ形式作成等の処理を
行なった後、入出力装置の動作を開始させ、その後、入
出力動作の完了を待つため、当該プロセスは中断する
(wait)。このとき、制御は他のプロセスに渡る。
【0012】(4)入出力動作が完了すると、入出力装
置はソフトウエアに対して割込みを発行する。この割込
みを契機に、デバイスドライバの割込みルーチンを呼び
出す。
【0013】(5)割込みルーチンは、呼出しプロセス
を起動し再開させる(post)。
【0014】(6)カーネルモードから利用者モードに
切り換え、入出力結果を伴って制御を利用者プロセスに
戻す。
【0015】以上のようにデバイスドライバは、利用者
プロセスのプロセスとして動作する部分とプロセスに属
さず入出力装置からの割込みを契機に動作する割込みル
ーチン(割込みドライバ)とから構成されている。
【0016】従来、上述したように動作するデバイスド
ライバのテスト方法としては、例えば特開平4−318
630に記載の方法などがあった。これは、入出力装置
を模擬する擬似入出力プロセスと被テストプログラム
(デバイスドライバ)を取り込んで模擬するシミュレー
タを独立に備え、外部から与えた擬似入出力呼出し条件
に合致したことを検出したときに擬似入出力プロセスを
呼出し、入出力処理を模擬実行する方法であった。
【0017】
【発明が解決しようとする課題】本来デバイスドライバ
はカーネルモードで動作させる必要があるため、これを
テストする場合に次のような問題があった。
【0018】(1)カーネルモードで実行中の被テスト
プログラムには、他のプロセスから割込みがかけられな
いため、任意の時点でプログラムを停止させて内部状態
を検査するという通常のデバッグ方法が適用できない。
【0019】(2)カーネルモードで実行中の被テスト
プログラムが不当なマシン命令を実行した場合、計算機
システム全体が停止することがありうる。
【0020】(3)カーネルモードで実行中の被テスト
プログラムは計算機のCPUを占有するため、他のカー
ネルモードで動作すべきプログラムの実行が妨げられ、
1つの計算機を共有してこれらのプログラムのテストを
複数個同時に行なうことができない。
【0021】前記の従来方法(特開平4−31863
0)は、利用者モードで入出力動作の模擬実行のみを行
なうもので、被テストプログラムを利用者モードとカー
ネルモードの2つの実行モードを切り替えて模擬実行す
ることが考慮されていない。また、1つもしくは複数の
プロセスから擬似入出力プロセスに出された複数非同期
の入出力要求を模擬実行する手段を提供していない。さ
らに、この従来方法では、擬似入出力プロセスを呼び出
す条件をシミュレータ独自に入力する必要がある。
【0022】本発明の目的は、上記課題を解決するた
め、デバイスドライバプログラムを利用者モードのプロ
セスのみ利用して模擬実行することのできるテスト装置
および方法を提供することであり、特に以下の機能を模
擬実行することのできるテスト装置および方法を提供す
ることである。
【0023】(1)カーネルモードにおけるプロセスの
スケジューリング機能。
【0024】(2)カーネルモード動作中の他の利用者
モードプロセスの排他制御機能。
【0025】(3)システムコールの発行によるデバイ
スドライバのエントリ呼出し機能。
【0026】(4)入出力装置からの割込みによるデバ
イスドライバのエントリ呼出し機能。
【0027】(5)タイマー割込みによるデバイスドラ
イバのエントリ呼出し機能。
【0028】(6)割込みレベルによるデバイスドライ
バのエントリ呼出し保留機能(優先制御機能)。
【0029】(7)直接メモリアクセスによる主記憶と
入出力装置間のデータ転送機能。
【0030】
【課題を解決するための手段】本発明は、利用者モード
およびカーネルモードの2つのプロセス実行モードを提
供する計算機オペレーティングシステムを搭載した情報
処理装置において、利用者モードの処理から呼び出され
実際にはカーネルモードで動作する被テストプログラム
を利用者モードのみを利用して模擬実行するデバイスド
ライバプログラムのテスト装置および方法であって、利
用者モードで前記被テストプログラムを呼び出す処理を
含む利用者プログラムを独立した動作空間を持つプログ
ラム単位に割り当てたプロセスとして実行し、さらに実
際にはカーネルモードで動作すべき被テストプログラム
を擬似カーネルプロセスと呼ぶ1つのプロセスに割り当
てるとともに、前記被テストプログラムの呼び出しに対
応して前記擬似カーネルプロセス内で独立に動作する実
行単位であるスレッドを割当て、該スレッドにより前記
被テストプログラムを利用者モードで模擬実行すること
と特徴とする。
【0031】また、上記テスト装置および方法におい
て、入出力装置の動作を、装置単位に独立に割り当てた
プロセス(擬似入出力プロセス)として模擬実行する。
【0032】さらに、利用者モードで動作するプログラ
ムから発行されたシステムコールを擬似カーネルプロセ
スに対する割込み(擬似システムコール)に置き換えて
実行し、擬似カーネルプロセスから返却された結果を利
用者プログラムに戻すようにする。また、擬似カーネル
プロセスでは、擬似システムコールを割込みとして受信
して、被テストプログラムをスレッドとして実行し、そ
の結果をシステムコール発行元のプロセスに対し返却す
るようにし、また被テストプログラムで発行された入出
力装置に対する命令動作を擬似入出力プロセスに対する
割込みに置き換えて実行し、擬似入出力プロセスからの
割込みを受付けて被テストプログラムを呼び出すように
する。
【0033】特に、前記(1)カーネルモードにおける
プロセスのスケジューリング機能は、擬似カーネルプロ
セスにおいて被テストプログラムがプロセス起動要求を
発行したとき、起動を要求されたプログラムを実行する
スレッドの識別子をスケジュール用のキューに登録し、
その後、前記実行中のプログラムがプロセス実行待ち要
求を発行したとき、スケジュール用のキューに登録され
たスレッドをスケジュールし、プロセス実行待ち要求を
発行したプログラムを実行するスレッドはシグナル待ち
状態で休眠することにより達成される。
【0034】また、前記(2)カーネルモード動作中の
他の利用者モードプロセスの排他制御機能は、擬似シス
テムコール発行処理手段において、プロセス制御用のセ
マフォを取得できるまでシステムコールの発行を保留
し、また擬似カーネルプロセス制御手段において、スケ
ジュール用のキューが空状態になった時点でプロセス制
御用のセマフォを解放することにより達成される。
【0035】また、前記(3)システムコールの発行に
よるデバイスドライバのエントリ呼出し機能は、擬似カ
ーネルシステムコール処理手段において、システムコー
ルの発行時に引き渡される情報から、装置識別子と被テ
ストプログラムのエントリ識別子の対応表を参照して当
該エントリ識別子を求め、当該エントリを呼びだすこと
により達成される。
【0036】また、前記(4)入出力装置からの割込み
によるデバイスドライバのエントリ呼出し機能は、擬似
カーネルハードウェア制御手段において、擬似入出力プ
ロセスからの割込み時に引き渡される情報から、割込み
種別、装置識別子、及び被テストプログラムのエントリ
識別子の対応表を参照して当該エントリ識別子を求め、
当該エントリを呼びだすことにより達成される。
【0037】また、前記(5)タイマ割込みによるデバ
イスドライバのエントリ呼出し機能は、擬似カーネルプ
ロセス制御手段において、被テストプログラムがタイマ
要求を発行したとき、計算機システムの提供するインタ
ーバルタイマを起動後タイマ用のキューに登録し、イン
ターバルタイマからの割込み時に例えば当該要求のタイ
ムアウト値からインターバル値だけ減算し、タイムアウ
ト値がゼロに達した要求についてはタイマ用のキューか
ら取り出して、タイマ要求時に指定された被テストプロ
グラムを呼びだすことにより達成される。
【0038】また、前記(6)割込みレベルによるデバ
イスドライバのエントリ呼出し保留機能は、擬似カーネ
ルハードウェア制御手段において、擬似入出力プロセス
からの割込みレベルが実行中のプログラムレベルより低
い場合には当該割込み要求を割込み保留用のキューに登
録し、割込み要求レベルが実行中のプログラムレベルよ
り高くなった時点で割込み保留用のキューから割込み要
求を取り出して実行することにより達成される。
【0039】また、前記(7)直接メモリアクセスによ
る主記憶と入出力装置間のデータ転送機能は、擬似カー
ネルハードウェア制御手段において、擬似カーネルプロ
セスと擬似入出力プロセス間で共有可能な記憶領域を予
め作成し、擬似入出力プロセスからの割込み時に、割込
み要求が「主記憶から入出力装置へのデータ転送」の場
合は割込み時に指定された擬似カーネルプロセス内部の
メモリとして模擬している主記憶エリアのデータを共有
の記憶領域に複写し、これを擬似入出力プロセスが自プ
ロセス内部のメモリに複写し、また割込み要求が「入出
力装置から主記憶へのデータ転送」の場合は擬似入出力
プロセスが設定した共有の記憶領域のデータを割込み時
に指定された主記憶エリアに複写することにより達成さ
れる。
【0040】
【作用】前記テスト装置および方法によれば、利用者モ
ードで動作する部分、カーネルモードで動作する部分、
入出力装置をそれぞれ独立したプロセスに対応させ、カ
ーネルモードで動作する部分に対応するプロセス内は利
用者プロセスに対応する実行単位をスレッドにて実現し
ているため、実装置と同様の動作単位、空間構成をすべ
て利用者モードで模擬できる。
【0041】また、前記テスト装置および方法における
入出力動作は各プロセス間の情報の受渡しを割込みを用
いて実現することにより、非同期処理を利用者モードで
模擬できる。
【0042】また、前記テスト装置および方法におい
て、スレッドの識別子をスケジュール用のキューに登録
し管理することにより、カーネルモードにおけるプロセ
スのスケジューリング機能を模擬できる。
【0043】また、前記テスト装置および方法におい
て、プロセス制御用のセマフォを用いることによりカー
ネルモード動作中の他の利用者モードプロセスの排他制
御機能を模擬できる。
【0044】また、前記テスト装置および方法におい
て、装置識別子と被テストプログラムのエントリ識別子
の対応表を持つことにより、システムコールの発行によ
るデバイスドライバのエントリ呼出し機能を模擬でき
る。
【0045】また、前記テスト装置および方法におい
て、割込み種別、装置識別子、及び被テストプログラム
のエントリ識別子の対応表を持つことにより、入出力装
置からの割込みによるデバイスドライバのエントリ呼出
し機能を模擬できる。
【0046】また、前記テスト装置および方法におい
て、タイマ要求を専用のキューを用いて管理し、インタ
ーバルタイマ機能を用いて時間の制御を行なうことによ
り、タイマ割込みによるデバイスドライバのエントリ呼
出し機能を模擬できる。
【0047】また、前記テスト装置および方法におい
て、割込み保留キューを用いてプログラムの実行レベル
による実行順序を制御することにより、割込みレベルに
よるデバイスドライバのエントリ呼出し保留機能を模擬
できる。
【0048】また、前記テスト装置および方法におい
て、擬似カーネルプロセスと擬似入出力プロセス間で共
有可能な記憶領域を予め作成し、この領域を介して擬似
カーネルプロセスと擬似入出力プロセス間でのデータを
受け渡すことにより、直接メモリアクセスによる主記憶
と入出力装置間のデータ転送機能を模擬できる。
【0049】以上より、前記テスト装置および方法によ
れば、本来カーネルモードで実行すべきデバイスドライ
バプログラムを利用者モードのプロセスのみを利用して
模擬実行することができるため、任意の時点でプログラ
ムを停止させて内部状態を検査するという通常のデバッ
グ方法を適用できる。また、不当なマシン命令を実行し
ても本テスト装置で補足でき、計算機システム全体が停
止することはない。さらにデバイスドライバのテストを
1つの計算機上で複数個同時に行なうことができる。
【0050】
【実施例】以下、図面を用いて本発明の実施例を説明す
る。
【0051】システム構成:
【0052】図1に、本発明の一実施例に係るテスト装
置のシステム構成を示す。
【0053】利用者プログラム(1−1)は、擬似シス
テムコール発行処理部(1−2)をライブラリとして取
り込み、1つの動作単位(独立した動作空間を持ち、こ
れをプロセスと呼ぶ)とする。これは、利用者プログラ
ムをライブラリのみ本テスト装置用に入れ替えて実環境
と同様に1つのプロセスにマッピングしたものである。
利用者プログラムには、コマンド制御プログラムや保守
情報の出力等を制御する被テストプログラムやデバイス
ドライバプログラム(カーネルモード側の被テストプロ
グラム)を起動するためのアプリケーションシミュレー
タプログラムが含まれる。
【0054】擬似カーネルプログラム(2)は、擬似カ
ーネルシステムコール処理部(2−1)、擬似カーネル
共通制御部(2−2)、擬似カーネル初期化部(2−
3)、被テストプログラム(2−4)(カーネルモード
で動作すべき部分)、および擬似カーネルハードウエア
制御部(2−5)から構成されている。
【0055】カーネルモードで動作すべき被テストプロ
グラム(2−4)以外の擬似カーネルプログラム(2)
は、被テストプログラム(2−4)に対して擬似的にカ
ーネルモードにおける実行環境を提供する。
【0056】また、擬似カーネルプログラム(2)は、
1つのプロセスとする(擬似カーネルプロセスとよ
ぶ)。これは、実環境ではカーネル空間は1つの独立し
た空間でありカーネルモードで動作するプログラムは基
本的にどこでもアクセスできるためで、これを模擬する
ため1つの独立した空間を持つように1プロセスとして
いる。擬似カーネルプログラム(2)は、カーネルモー
ドの実行環境を擬似的に実現するものであり、実際には
利用者モードで動作する1つのプロセスである。
【0057】擬似入出力装置(3)は、ディスク、磁気
テープ、端末、プリンタ、通信回線等の入出力装置をシ
ミュレートするもので、装置単位に1つのプロセスとす
る。装置単位に1つのプロセスとすることにより、装置
間の並行動作、および装置とプログラム処理の並行動作
を模擬できる。擬似入出力装置(3)は、入出力装置を
擬似的に実現するものであり、実際には利用者モードで
動作する1つのプロセスである。
【0058】シミュレータ構成情報ファイル(4)は、
入出力装置の構成等の動作環境を定義し、本テスト装置
の起動時に読み込み、初期設定を行なう。テスト装置に
おける入出力処理の流れ:
【0059】次に、図4を用いて、図1に示した本テス
ト装置の入出力処理の流れを説明する。
【0060】利用者プログラム(図1の1−1)を実行
する利用者プロセス(5−1〜5−3)は、入出力処理
をカーネルに対して要求するため、システムコールを発
行する。本装置では、擬似システムコール発行処理部
(図1の1−2)が、システムコールを擬似カーネルプ
ロセス(6)に対する割込み(擬似システムコール)に
置き換えて実行する。その後、システムコールを発行し
た利用者プロセス(5)を待ち状態とする。
【0061】擬似カーネルプロセス(6)が前記システ
ムコールを割込みとして受信すると、まず擬似カーネル
システムコール処理部(図1の2−1)が、被テストプ
ログラム(図1の2−4)をプロセス内の動作単位であ
るスレッド(6−1〜6−3)として実行させる。
【0062】なお本発明では、1つのプロセスに所属す
る実行可能な実体(CPUの割当て単位)としてスレッ
ドの使用を前提とする。スレッドは、プログラムカウン
タ、利用者モードのスタック、カーネルモードのスタッ
ク、1組のレジスタ値で構成される。あるプロセス中の
すべてのスレッドは、そのプロセスのアドレス空間等の
資源に対して平等にアクセスできる。
【0063】上述したように、システムコールを受けた
擬似カーネルシステムコール処理部(2−1)は被テス
トプログラム(2−4)をカーネルプロセス内の1つの
スレッドで動作させるが、これは実際のカーネルモード
の処理では入出力装置からの割込み処理以外は必ずシス
テムコールを発行したプロセスとして動作(例えば、図
3においてカーネルモードで動作するデバイスドライバ
はシステムコールを発行した利用者プロセスのプロセス
として動作)するためであり、利用者プロセスに対応す
るカーネルモード側のプロセスをスレッドという形態で
模擬したものである。
【0064】被テストプログラム(図1の2−4)は、
入出力装置に対して入出力の要求を行なう。本テスト装
置では、擬似カーネルハードウエア制御部(図1の2−
5)が、被テストプログラムからの入出力要求を擬似入
出力プロセス(7)に対する割込みに置き換えて実行す
る。
【0065】その後、入出力の完了を待つため、一般に
プロセス(被テストプログラム、スレッドで模擬)は実
行待ち状態となる。このとき、擬似カーネル共通制御部
(図1の2−2)は、他に起動要求が発行されたプロセ
スがあれば、これを実行させる。
【0066】入出力処理(擬似入出力プロセス(7)で
模擬した入出力処理)が完了すると、擬似カーネルプロ
セス(6)は、擬似入出力プロセス(7)から割込みを
受ける。割込みを受けると、擬似カーネルハードウエア
制御部(図1の2−5)は被テストプログラム(図1の
2−4)の入出力割込みルーチン(6−4)を呼び出
す。
【0067】入出力割込みルーチン(6−4)は割込み
要因を解析後、一般に当該入出力の完了待ちで待ち状態
となっているプロセス(被テストプログラム、スレッド
で模擬)に対して起動要求を発行する。このとき、擬似
カーネル共通制御部(図1の2−2)は、他に実行して
いるプロセスがなければ、前記プロセスが即座に動作を
開始するように制御する。
【0068】必要な処理が完了すると、結果をシステム
コールを発行した利用者プロセス(5)に割込みにより
通知する。これにより、結果待ち状態となっている利用
者プロセスは動作を開始し、システムコールは利用者プ
ログラムへリターンし、完了する。
【0069】詳細処理手順(擬似システムコール発行処
理手順):
【0070】図5および図6に従って、擬似システムコ
ール発行処理手順を説明する。利用者プロセスが本テス
ト装置の擬似システムコールを発行すると、擬似システ
ムコール発行処理部(1−2)に制御が渡り以下の処理
を行なう。
【0071】まず、利用者プロセスと擬似カーネルプロ
セスとの間のパラメータの受け渡しに用いる共有メモリ
(双方のプロセスのアドレス空間の一部に位置づけられ
るメモリ)が未割り当てであるかを検査する(10
1)。この結果、未割当てのときは、これを割り当てる
(102)。以降、この共有メモリ領域をAPパラメー
タ領域と呼ぶ。APパラメータ領域は、テストシステム
全体で1つ存在する。
【0072】次に、システムコールで指定された装置フ
ァイル名称(入出力装置の識別に使用する名称)または
fd#(ファイル記述子:openシステムコールの発行時
に装置ファイル名称に対して利用者プログラムによる入
出力操作用の番号を割り当てたもの)が、本テスト装置
でテストの対象とするデバイスドライバに対応するもの
かどうかを判断する(103)。なお、テスト対象の装
置ファイル名称やファイル記述子fd#は、所定のテー
ブルを参照すると分かるようになっている。
【0073】システムコールで指定された装置ファイル
名称またはファイル記述子がテスト対象のものでない場
合は(103)、実装置が提供する本当のシステムコー
ルを呼出しそのリターン値を返して(104)、処理を
終了する。テスト対象のものであった場合は(10
3)、本テスト装置用の疑似システムコールと判断し
て、以下の疑似カーネルプロセス(6)の呼出し処理を
行なう。
【0074】まず、プロセス制御用のセマフォを取得す
る(105)。これは、カーネルモードのプログラムの
実行中は別の利用者モードのプログラムからシステムコ
ールが発行されることはないという実装置の動作を模擬
するために行なうものである。
【0075】次に、システムコールの引数を前記APパ
ラメータ領域に設定し(106)、疑似カーネルプロセ
ス(6)に割込みを送信し(107)、疑似カーネルプ
ロセス(6)からシステムコールに対する処理の完了に
伴う割込みの受信を待つ(108)。
【0076】擬似カーネルプロセス(6)側の処理が終
了し疑似カーネルプロセス(6)から割込みを受信する
と、擬似システムコール発行処理部(1−2)の疑似シ
ステムコールの割込みハンドラが呼ばれる(109)。
【0077】図6に従って、この疑似システムコール割
込みハンドラ処理の手順を説明する。まず、割込み種別
を判別する(201)。この場合、疑似システムコール
からの完了割込みであるから、ステップ202に進む。
【0078】そして、疑似カーネルプロセス(6)が前
記APパラメータ領域に設定したリターン情報を取得す
る(202)。なお、ステップ203,204について
は後述する。ステップ202の後、疑似カーネルプロセ
ス(6)にリターン情報を取得したことを通知するた
め、前記APパラメータ領域に完了コードを設定する
(205)。その後、取得したリターン情報をもって利
用者プログラムの擬似システムコール発行処理へリター
ンする。
【0079】再び図5を参照して、疑似システムコール
割込みハンドラ処理(109)の後、通常リターンで戻
ったかどうか判別する(110)。割込みが通常リター
ンであったときは処理を終了し、そうでないときはステ
ップ108に戻る。詳細処理手順(疑似カーネルプロセ
スの初期化処理):
【0080】図7および図9に従って、擬似カーネルプ
ロセス(6)の初期化処理を説明する。擬似カーネルプ
ロセス(6)は、本テスト装置のメインプログラムによ
り生成され、擬似カーネル初期化部(2−3)が実行を
開始する。
【0081】まず、前記APパラメータ領域およびI/
Oパラメータ領域(疑似入出力プロセス(7)と擬似カ
ーネルプロセス(6)との間のパラメータの受け渡しに
用いる領域でテスト装置全体で1つ存在する)を共有メ
モリとして割り付ける(共有メモリはメモリを共有する
全てのプロセスで割付けを行なう必要がある)(30
1)。
【0082】次に、前記シミュレータ構成情報ファイル
(4)を読み込み、入出力装置等の動作環境の設定、お
よびスペシャルファイルテーブルの作成を行なう(30
2)。
【0083】図19に、スペシャルファイルテーブルの
構造を示す。スペシャルファイルテーブルは、本テスト
装置でテストの対象とするデバイスドライバの装置ファ
イル名称とそれに対応する装置番号のエントリを連ねた
ものである。シミュレータ構成情報ファイル(4)に
は、テスト対象のデバイスドライバの装置ファイルの定
義情報が記載されており、これを参照してスペシャルフ
ァイルテーブルを作成する。スペシャルファイルテーブ
ル中の装置番号は、装置の種別(例えば、プリンタ、S
CSI装置などの種別)を表すメジャー番号と、その種
別中のどの装置かを表すマイナ番号から構成されてい
る。
【0084】次に、被テストプログラムの初期化処理
(電源投入に伴う初期化処理であり、ここでは疑似ip
l処理と呼ぶ)を呼び出す(303)。
【0085】図9に従って、疑似ipl処理の手順を説
明する。まず、被テストプログラムの初期化ルーチンを
呼び出す(501)。この初期化ルーチンは、自プログ
ラム(被テストプログラム)内の初期化を行なうととも
に、当該プログラムに関連するシステムコールごとの呼
出しエントリアドレスや割込みルーチン(割込みドライ
バ)に関する情報などを返す。初期化ルーチンを呼び出
した結果得られた情報に基づき、デバイススイッチテー
ブルを作成する(502)。
【0086】図20に、デバイススイッチテーブルの構
造を示す。デバイススイッチテーブルは、システムコー
ルごとに被テストプログラムの呼出しエントリアドレス
を格納した表であり、装置のメジャー番号単位にエント
リが設けてある。なお、装置の種類が同じであれば、同
じルーチンを呼び出すことになるので、メジャー番号単
位に設けてある。
【0087】次に、初期化ルーチンを呼び出した結果得
られた情報に基づき、割込みルーチンテーブルを作成す
る(503)。
【0088】図23に、割込みルーチンテーブルの構造
を示す。割込みルーチンテーブルは、入出力装置(本テ
スト装置では、図4の擬似入出力プロセス(7))から
の割込みに対して呼び出すべき被テストプログラムのル
ーチンのエントリアドレスを格納した表であり、入出力
装置の種別または割込みの種別ごとに設けてある。
【0089】その後、必要ならばカーネル常駐プロセス
をスレッドとして生成し(504)、疑似ipl処理を
終了する。
【0090】再び図7に戻って、疑似ipl処理(30
3)の後、割込みの受信待ちとなり(304)、割込み
を受信するごとにその種別を判定する(305)。そし
て、割込みの種別に応じた処理(疑似システムコールハ
ンドラ処理または疑似カーネル入出力割込みハンドラ処
理)を行なう(306および307)。その後、ステッ
プ304に戻る。
【0091】詳細処理手順(疑似カーネルプロセス側の
疑似システムコールハンドラ処理):
【0092】まず、図8に従って、疑似カーネルプロセ
ス(6)側の疑似システムコールハンドラ処理(図7の
ステップ306)を説明する。
【0093】疑似カーネルプロセス(6)は、疑似シス
テムコール処理を指定した割込み(この割込みは、図5
のステップ107で発行されたもの)を受信すると擬似
カーネルシステムコール処理部(2−1)に制御を渡
し、APパラメータ領域から引数情報を取得する(40
1)。次に、システムコール処理をスレッドとして実行
させるため、実行スレッド管理テーブルを生成し、実行
するスレッドに対応する新たなエントリを追加する(4
02)。
【0094】図24に、実行スレッド管理テーブルの構
造を示す。実行スレッド管理テーブルは、実行するスレ
ッドに関する各種の情報を保持するテーブルである。
【0095】次に、スレッドを生成し、システムコール
に対応する処理(図20のデバイススイッチテーブルに
格納したエントリ)を実行する(403)。
【0096】次に、図10および図11に従って、シス
テムコールの種別ごとに疑似カーネルプロセス(6)側
の処理を詳細に説明する。
【0097】まず、openシステムコールを説明す
る。openシステムコールは、装置ファイル名称に対
して利用者プログラムによる入出力操作用の番号(f
d:ファイル記述子)を割り当て、入出力操作の準備を
行なう。
【0098】まず、ファイル記述子管理テーブルに当該
利用者プロセスに対応するエントリが作成済みかどうか
判別し(601)、未作成のときは、これを作成する
(602)。
【0099】図21に、ファイル記述子管理テーブルの
構造を示す。ファイル記述子管理テーブルは、図22に
示すファイルパス名称とファイル記述子との対応テーブ
ルを管理するための管理テーブルである。ファイル記述
子管理テーブルの1つのエントリは、具体的には、シス
テムコールを発行した利用者プロセスのプロセスID、
そのプロセスで使っている最新のファイル記述子番号、
図22のパス名とファイル記述子対応テーブルへのポイ
ンタ、および次エントリへのポインタからなる。ステッ
プ602のファイル記述子管理テーブルのエントリ作成
は、当該利用者プロセス生成後の最初の疑似システムコ
ール発行時に実行されることになる。
【0100】次に、openシステムコールの引数で指
定された装置ファイル名称に対して図19のスペシャル
ファイルテーブルから装置番号を求め(603)、この
装置番号に含まれるメジャー番号に対して図20のデバ
イススイッチテーブルからopenシステムコールのエ
ントリを求める(604)。そして、このエントリの被
テストプログラムを呼び出す(605)。
【0101】被テストプログラムからリターンしたら、
正常終了であったかどうかを判別する(606)。被テ
ストプログラムから正常リターンしたときは(60
6)、ファイル記述子fd#を割り当て、ファイル記述
子管理テーブルに登録する(607)。具体的には、当
該利用者プロセスに対応する図21のファイル記述子管
理テーブルのエントリを参照し、そのエントリ中のポイ
ンタから図22のパス名とファイル記述子対応テーブル
を見つけ、このテーブルに新たなエントリ(ファイルパ
ス名称は指定された装置ファイル名称を含むファイルパ
ス名、ファイル記述子番号は割当てたファイル記述子、
ファイルフラグは初期値とする)を作成する。また、フ
ァイル記述子管理テーブルのエントリの最新のファイル
記述子番号は更新しておく。
【0102】被テストプログラムから異常リターンした
ときは(606)、エラー情報をAPパラメータ領域に
設定する(608)。
【0103】ステップ607,608の後、リターン情
報をAPパラメータ領域に設定し(609)、システム
コール発行元の利用者プロセスに割込みを送信する(6
10)。最後に、スケジュール待ちとなっているスレッ
ドがあれば、これをスケジュールする(611)。この
スレッドスケジューリング処理(図12を参照して後に
説明する)は、擬似カーネル共通制御部(2−2)によ
り実行される。そして、図24の実行スレッド管理テー
ブルから自スレッドに対応するエントリを削除して(6
12)、処理を終了する。
【0104】次に、図11に従って、ioctlシステ
ムコールを説明する。ioctlシステムコールは、o
penシステムコールで割り当てられたファイル記述子
を指定して入出力装置との入出力を要求するシステムコ
ールである。
【0105】まず、図21のファイル記述子管理テーブ
ルから図22のパス名とファイル記述子対応テーブルを
探索し、指定されたファイル記述子に対応するファイル
パス名称に含まれる装置ファイル名を求める(70
1)。次に、この装置ファイル名に対する装置番号を図
19のスペシャルファイルテーブルから求める(70
2)。
【0106】次に、この装置番号に対する被テストプロ
グラムのシステムコールのエントリアドレスを図20の
デバイススイッチテーブルから求め(703)、これを
呼び出す(704)。被テストプログラムからリターン
したら、リターン情報およびエラー情報(異常リターン
時のみ)をAPパラメータ領域に設定し(705)、シ
ステムコール発行元の利用者プロセスに割込みを送信す
る(706)。
【0107】最後に、スケジュール待ちとなっているス
レッドがあればこれをスケジュールし(707)、図2
4の実行スレッド管理テーブルから自スレッドに対応す
るエントリを削除して(708)、処理を終了する。
【0108】詳細処理手順(スレッドのスケジューリン
グ処理):
【0109】次に、図12に従って、スレッドのスケジ
ューリング処理を説明する。スレッドは、カーネルモー
ドで動作するプロセスを模擬する形態である。また、実
システムにおけるカーネルモードではプロセスは並行動
作することはなく、順次実行される。このような実シス
テムの環境を擬似カーネル共通制御部(2−2)は次の
ように模擬する。スレッドのスケジューリングは、疑似
カーネルプロセス内の実行スレッドが終了または待ち状
態になったとき(図10のステップ611、図11のス
テップ707)に行なう。
【0110】まず、イベントスケジュールキューを検査
し(801)、空でないときは、キューの先頭を取り出
し(802)、これをスケジュールして(803)、処
理を終了する。イベントスケジュールキューが空のとき
は(801)、利用者プロセスの排他制御用のセマフォ
を解除し(804)、他の利用者プロセスからの疑似シ
ステムコールを受け付けるようにした後、処理を終了す
る。詳細処理手順(擬似カーネル入出力割込みハンドラ
ー処理):
【0111】図13に従って、擬似カーネル入出力割込
みハンドラー処理(図7のステップ307)を説明す
る。疑似入出力プロセス(7)からの割込みを疑似カー
ネルプロセス(6)が受信すると、擬似カーネルハード
ウエア制御部(2−5)は、前記I/Oパラメータ領域
から割込み情報を取得する(901)。次に、要求種別
を判別する(902)。
【0112】要求種別がI/O割込みのときは(90
2)、取得した割込み情報(入出力装置種別、割込み種
別、装置番号)に対して、図23の割込みルーチンテー
ブルから被テストプログラムの割込みルーチンのエント
リアドレスおよび割込みレベルを求める(903)。こ
のとき、疑似カーネルプロセス(6)内で実行中のルー
チンがなければ(904)、前記被テストプログラムの
割込みルーチンを実行する(905)。
【0113】実行中のルーチンがあるときは(90
4)、前記割込みレベルと実行中のルーチンのレベルと
を比較する(906)。そして、前記割込みレベルの方
が大きければ前記被テストプログラムの割込みルーチン
を実行し(907)。そうでないときは図27の割込み
要求保留キューに当該要求を追加する(908)。保留
した割込みは、実行中のプログラムレベルが保留した割
込みのレベルより小さくなったとき、または擬似カーネ
ルプロセス内でプロセスの待ち要求が発行されたときに
呼び出す。
【0114】詳細処理手順(入出力装置とメインメモリ
間のDMA転送のシミュレート方式):
【0115】次に、図13に従って、擬似カーネル入出
力割込みハンドラー処理のうち入出力装置とメインメモ
リ間のDMA転送のシミュレート方式を説明する。疑似
入出力プロセス(7)からの割込みを疑似カーネルプロ
セス(6)が受信すると、擬似カーネルハードウエア制
御部(2−5)は、前記I/Oパラメータ領域から割込
み情報を取得する(901)。次に、要求種別を判別す
る(902)。
【0116】要求種別がDMA転送のときは(90
2)、取得した割込み情報を検査して転送の方向を判別
する(909)。その結果、入出力装置からメインメモ
リへのデータ転送のときは、入出力装置が設定したI/
Oパラメータ領域内のDMA領域内の値を疑似カーネル
プロセス内の指定アドレス(疑似入出力プロセスが指
定)へ複写する(910)。逆に、メインメモリから入
出力装置へのデータ転送のときは、疑似カーネルプロセ
ス内の指定アドレス(疑似入出力プロセスが指定)のデ
ータをDMA領域へ複写する(このデータは疑似入出力
プロセスが取り込む)(911)。
【0117】詳細処理手順(プロセスのスケジュール処
理):
【0118】次に、図14に従って、疑似カーネルプロ
セス(6)内の被テストプログラム(2−4)が発行す
るプロセスのスケジュール要求(本テスト装置では、ス
レッドに対するスケジュール要求として模擬する)の処
理を説明する。プロセスのスケジュール要求は、起動す
べきプロセスが待ち状態となるときに指定した待ち要因
識別子を指定して行なう。
【0119】まず、擬似カーネル共通制御部(2−2)
は、待ち要因識別子に対応する実行スレッド管理テーブ
ル(図24)のエントリを求める(1001)。次に、
当該エントリを、図25に示すイベントスケジュールキ
ューに追加する(1002)。
【0120】次に、図15に従って、疑似カーネルプロ
セス(6)内の被テストプログラム(2−4)が発行す
るプロセスの待ち要求(本テスト装置では、スレッドの
待ち要求として模擬する)の処理を説明する。プロセス
の待ち要求は、当該プロセスの待ち要因識別子を指定し
て行なう。
【0121】まず、擬似カーネル共通制御部(2−2)
は、指定された待ち要因識別子と実行スレッド管理テー
ブル(図24)のエントリとの対応が、図26の待ち状
態プロセステーブルに登録済みであるかどうかを検査す
る(1101)。登録済みでなければ、待ち状態プロセ
ス対応テーブルに追加する(1102)。
【0122】次に、図27に示す割込み要求保留キュー
を検査し(1103)、空でなければ、割込みレベルの
高い順に割込みルーチンのエントリを呼び出す(110
4)。
【0123】次に、イベントスケジュールキューを検査
し(1105)、空でなければ、イベントスケジュール
キューの先頭を取り出し(1106)、当該スレッドを
スケジュールする(1107)。イベントスケジュール
キューが空のときは、利用者プロセス間の排他制御用の
セマフォを解除し(1108)、利用者プロセスまたは
擬似入出力プロセスからの割込み受信待ちとなる(11
09)。
【0124】詳細処理手順(カーネル空間と利用者空間
間のデータ複写のシミュレート方式):
【0125】次に、図16および図6に従って、カーネ
ル空間と利用者空間との間のデータ複写のシミュレート
方式を説明する。擬似カーネルプロセス(6)内でカー
ネル空間と利用者空間との間のデータ複写要求が行なわ
れたときは、まず移動方向を検査する(1201)。
【0126】カーネル空間から利用者空間へのデータ複
写の場合、擬似カーネルプロセス(6)は、APパラメ
ータ領域にカーネル内(擬似カーネルプロセス内の空
間)のデータを複写し(1202)、複写すべき利用者
プロセス(データ複写要求を発行したプロセスに対応す
る利用者プロセス)に割込みを送信する(1203)。
その後、APパラメータ領域に完了コードが設定される
までループ処理で待つ(1204)。
【0127】ステップ1203で送信されたシグナル
は、利用者プロセスで受信される。具体的には、図5の
擬似システムコール発行処理のステップ108で受信さ
れ、図6の擬似システムコール割込みハンドラ処理が実
行される。
【0128】図6を参照して、この場合の擬似システム
コール割込みハンドラ処理について説明する。まず、カ
ーネル空間から利用者空間へのデータ複写であることを
確認して(201)、APパラメータ領域のデータを利
用者空間の指定されたアドレスへ複写し(203)、複
写処理が完了したことをAPパラメータ領域に完了コー
ドとして設定して(205)、処理を終了する。
【0129】再び図16を参照して、擬似カーネルプロ
セス(6)では、完了コードを確認すると(120
4)、データ複写処理を終了する。
【0130】一方、利用者空間からカーネル空間へのデ
ータ複写の場合(1201)、擬似カーネルプロセス
(6)は、複写すべき利用者プロセスに割込みを送信し
(1205)、APパラメータ領域に完了コードが設定
されるまでループ処理で待つ(1206)。
【0131】ステップ1205で送信されたシグナル
は、利用者プロセスで受信される。具体的には、図5の
擬似システムコール発行処理のステップ108で受信さ
れ、図6の擬似システムコール割込みハンドラ処理が実
行される。
【0132】図6を参照して、この場合の擬似システム
コール割込みハンドラ処理について説明する。まず、利
用者空間からカーネル空間へのデータ複写であることを
確認して(201)、指定されたアドレスの利用者デー
タをAPパラメータ領域に複写し(204)、複写処理
が完了したことをAPパラメータ領域に完了コードとし
て設定して(205))、処理を終了する。
【0133】再び図16を参照して、擬似カーネルプロ
セス(6)では、完了コードを確認した(1206)
後、APパラメータ領域のデータをカーネル空間(擬似
カーネルプロセス内の空間)に複写して(1207)、
処理を終了する。詳細処理手順(タイマ処理のシミュレ
ート方式):
【0134】次に、図17および図18に従い、カーネ
ルモードにおけるタイマ処理のシミュレート方式を説明
する。カーネルモードにおけるタイマ機能の一例とし
て、タイマを起動し、指定した時間が経過すると指定さ
れたエントリを呼び出す機能と、起動中のタイマをキャ
ンセルする機能を考え、これらを模擬する方式を説明す
る。
【0135】タイマ機能は、実システムが提供するイン
ターバルタイマ機能を用いて実現する。インターバルタ
イマは、アラームシグナル用のハンドラ(割込み時の呼
出しルーチン)を設定して起動することで、指定された
時間間隔で割込みが発生する機能である。
【0136】タイマ機能が呼びだされると、まず、擬似
カーネル共通制御部(2−2)は、要求種別を検査する
(1301)。要求種別が「起動」であるときは、図2
8に示すタイマ要求キューに登録する(1302)。次
に、アラームシグナル用のハンドラを設定し(130
3)、インターバルタイマが未起動ならば(130
4)、これを起動する(1305)。一方、要求種別が
「停止」でタイマ機能が呼び出されたときは、当該エン
トリをタイマ要求キューから削除する(1306)。
【0137】インターバルタイマの割込み発生時には、
図18の擬似カーネルアラームシグナル割込み処理が実
行される。
【0138】まず、タイマ要求キューの各エントリのタ
イマ値を更新する(1401)。タイマ値を更新した結
果、指定されたタイムアウト値に達した要求があるかど
うかを検査する(1402)。タイムアウト値に達した
要求があれば、当該エントリをキューから取り出す(1
403)。次に、タイマ要求キューが空であるかを検査
し(1404)、空であればインターバルタイマを停止
し(1405)、そうでなければアラームシグナル用の
ハンドラを再設定する(1406)。
【0139】さらに、タイマ割込みのプログラムレベル
(予め決めておく)が、実行中のプログラムレベルより
も大きいかどうかを検査する(1407)。大きいとき
は当該タイマ要求のタイムアウトルーチンを呼び出し
(1408)、そうでなければ当該割込みを割込み保留
キューに登録する(1409)。一方、タイムアウト値
に達した要求がなければ(1402)、アラームシグナ
ル用のハンドラを再設定し(1410)、終了する。
【0140】詳細処理手順(入出力装置のシミュレート
方式):
【0141】次に、入出力装置のシミュレート方式につ
いて説明する。ここでは、入出力装置の一例として、図
29に示すように、CPU(16)で処理したデータの
通信回線(20)との入出力を制御する装置を考える。
【0142】図29において、入出力制御部(19−
1)は、メインメモリ(17)と入出力装置(19)間
でシステムバス(18)を介して、データの受渡しを行
なう部分である。回線制御部(19−2)は、通信回線
(20)とのデータの受渡しを行なう部分である。
【0143】図30は、上記の入出力装置を模擬した擬
似入出力装置(図1の3、図4の7に対応)の構成を示
す。擬似入出力装置(21)は、入出力制御部(19−
1)をシミュレートする入出力制御シミュレート部(2
1−1)、回線制御部(19−2)をシミュレートする
回線制御シミュレート部(21−2)、および回線折り
返しシミュレート部(21−3)から構成する。
【0144】回線折り返しシミュレート部(21−3)
は、通信回線のペア(ここでは回線1と回線2)を予め
指定しておいて(例えば、ファイルに記述しておいて初
期化時に読み込む等)、一方の回線への送信データを他
方の回線の受信データとして折り返すようにしている。
これにより、1つのテストシステムだけでデータ送受信
のテストを行なうことができる。
【0145】以下、図30の擬似入出力装置(21)に
おけるデータ送受信処理の流れを説明する。入出力制御
シミュレート部(21−1)は、擬似カーネルプログラ
ム(2)から入出力要求の割込みをうけると、メインメ
モリ上に格納された入出力用のコマンドやデータを前記
DMA転送のシミュレート方式により擬似入出力装置
(21)側に取り込み、回線制御シミュレート部(21
−2)に引き渡す。
【0146】回線制御シミュレート部(21−2)は、
送信データを回線上に送出する形式に整え、回線折り返
しシミュレート部(21−3)に制御を渡す。回線折り
返しシミュレート部(21−3)は、このデータを送信
すべき回線から指定された受信すべき回線に擬似的に折
り返す。
【0147】受信データは回線制御シミュレート部(2
1−2)から入出力制御シミュレート部(21−1)に
引渡す。入出力制御シミュレート部(21−1)は、必
要な完了情報の設定、および受信データの擬似カーネル
プログラム(2)への転送を行ない、擬似カーネルプロ
グラム割込みを発行する。
【0148】
【発明の効果】本発明によれば、本来カーネルモードで
実行すべきデバイスドライバプログラムを利用者モード
のプロセスのみを利用して模擬実行することができるた
め、任意の時点でプログラムを停止させて内部状態を検
査するという通常のデバッグ方法を適用できる。また、
不当なマシン命令を実行しても本テストシステムで補足
でき、計算機システム全体が停止することはない。さら
に、デバイスドライバのテストを1つの計算機上で複数
個同時に行なうことができる。
【0149】特に、カーネルモードにおけるプロセスの
スケジューリング機能、カーネルモード動作中の他の利
用者モードプロセスの排他制御機能、システムコールの
発行によるデバイスドライバのエントリ呼出し機能、入
出力装置からの割込みによるデバイスドライバのエント
リ呼出し機能、タイマー割込みによるデバイスドライバ
のエントリ呼出し機能、割込みレベルによるデバイスド
ライバのエントリ呼出し保留機能(優先制御機能)、お
よび直接メモリアクセスによる主記憶と入出力装置間の
データ転送機能を模擬実行することのできるテスト装置
および方法が提供される。
【図面の簡単な説明】
【図1】本発明の一実施例に係るテスト装置の構成を表
す図
【図2】本テスト装置が対象とする実装置の構成を表す
【図3】本テスト装置が対象とする実装置の入出力処理
の流れ図
【図4】本テスト装置の入出力処理の流れ図
【図5】本テスト装置における擬似システムコール発行
処理手順を表す図
【図6】本テスト装置における擬似システムコール割込
みハンドラ処理手順を表す図
【図7】本テスト装置における擬似カーネルプロセスの
初期化処理手順を表す図
【図8】本テスト装置における擬似カーネルプロセスの
擬似システムコールハンドラ処理手順を表す図
【図9】本テスト装置における擬似カーネルプロセスの
擬似ipl処理手順を表す図
【図10】本テスト装置における擬似openシステム
コール処理手順を表す図
【図11】本テスト装置における擬似ioctlシステ
ムコール処理手順を表す図
【図12】本テスト装置における擬似カーネルプロセス
内のスレッドスケジューリング処理手順を表す図
【図13】本テスト装置における擬似カーネルプロセス
の擬似カーネル入出力割込みハンドラ処理手順を表す図
【図14】本テスト装置における擬似カーネルプロセス
内のスレッドの起動要求処理手順を表す図
【図15】本テスト装置における擬似カーネルプロセス
内のスレッドの待ち要求処理手順を表す図
【図16】本テスト装置における擬似カーネルプロセス
と利用者プロセス間のデータ複写処理手順を表す図
【図17】本テスト装置における擬似カーネルプロセス
内のタイマ設定処理手順を表す図
【図18】本テスト装置における擬似カーネルプロセス
内のアラームシグナル割込み処理手順を表す図
【図19】スペシャルファイルテーブルの構成を表す図
【図20】デバイススイッチテーブルの構成を表す図
【図21】ファイル記述子管理テーブルの構成を表す図
【図22】パス名とファイル記述子対応テーブルの構成
を表す図
【図23】割込みルーチンテーブルの構成を表す図
【図24】実行スレッド管理テーブルの構成を表す図
【図25】イベントスケジュールキューの構成を表す図
【図26】待ち状態プロセステーブルの構成を表す図
【図27】割込み保留キューの構成を表す図
【図28】タイマ要求キューの構成を表す図
【図29】入出力装置を含む計算機システムの構成例を
表す図
【図30】擬似入出力装置の構成例を表す図
【符号の説明】 1…利用者プログラム、2…擬似カーネルプログラム、
3…擬似入出力装置、4…シミュレータ構成情報ファイ
ル、5…利用者プロセス、6…擬似カーネルプロセス、
7…擬似入出力プロセス、8…利用者プログラム、9…
システムコールライブラリ、10…システムコールイン
タフェース、11…ファイルサブシステム、12…デバ
イスドライバ、13…ハードウエア制御機構、14…プ
ロセス制御サブシステム、15…ハードウエア、16…
CPU、17…メインメモリ、18…システムバス、1
9…入出力装置、20…回線、21…擬似入出力装置。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 野村 祐治 神奈川県横浜市戸塚区戸塚町5030番地 株 式会社日立製作所ソフトウェア開発本部内 (72)発明者 宮崎 聡 神奈川県川崎市麻生区王禅寺1099番地 株 式会社日立製作所システム開発研究所内

Claims (21)

    【特許請求の範囲】
  1. 【請求項1】利用者モードおよびカーネルモードの2つ
    のプロセス実行モードを提供する計算機システムにおい
    て利用者モードの処理から呼び出され実際にはカーネル
    モードで動作する被テストプログラムを、利用者モード
    のみを利用して模擬実行するデバイスドライバプログラ
    ムのテスト装置であって、 利用者モードで前記被テストプログラムを呼び出す処理
    を含む利用者プログラムを、独立した動作空間を持つプ
    ログラム単位に割り当てたプロセスとして、実行する第
    1の手段と、 実際にはカーネルモードで動作すべき被テストプログラ
    ムを擬似カーネルプロセスと呼ぶ1つのプロセスに割り
    当てるとともに、前記被テストプログラムの呼び出しに
    対応して前記擬似カーネルプロセス内で独立に動作する
    実行単位であるスレッドを割当て、該スレッドにより前
    記被テストプログラムを利用者モードで模擬実行する第
    2の手段とを備えたことを特徴とするデバイスドライバ
    プログラムのテスト装置。
  2. 【請求項2】実際の入出力装置の動作を、装置単位に独
    立に割り当てたプロセスである擬似入出力プロセスによ
    り模擬実行する手段をさらに備えた請求項1に記載のデ
    バイスドライバプログラムのテスト装置。
  3. 【請求項3】前記第1の手段は、利用者モードで前記被
    テストプログラムを呼び出すシステムコールを発行する
    手段と、該システムコールを前記擬似カーネルプロセス
    に対する割込みに置き換えて擬似システムコールとして
    発行し、前記擬似カーネルプロセスから返却された結果
    を前記システムコールの発行元に戻す擬似システムコー
    ル発行処理手段とを含み、 前記第2の手段は、前記擬似システムコールの割込みを
    受信して、前記被テストプログラムをスレッドとして実
    行し、その結果を前記システムコールの発行元のプロセ
    スに対し返却する擬似カーネルシステムコール処理手段
    と、スレッドとして実行される被テストプログラムから
    発行された入出力装置に対する命令動作を前記擬似入出
    力プロセスに対する割込みに置き換えて実行するととも
    に、前記擬似入出力プロセスからの割込みを受付けて前
    記被テストプログラムの割込みルーチンを呼び出す擬似
    カーネルハードウェア制御手段とを含む請求項2に記載
    のデバイスドライバプログラムのテスト装置。
  4. 【請求項4】前記擬似カーネルプロセスにおいてスレッ
    ドとして実行される被テストプログラムがプロセス起動
    要求を発行したとき、該プロセス起動要求されたプログ
    ラムを実行するために割当てたスレッドの識別子をスケ
    ジュール用のキューに登録し、その後、前記実行中の被
    テストプログラムがプロセス実行待ち要求を発行したと
    き、前記スケジュール用のキューに登録されたスレッド
    をスケジュールし、プロセス実行待ち要求を発行した被
    テストプログラムを実行するスレッドはシグナル待ち状
    態で休眠することにより、カーネルモードにおけるプロ
    セスのスケジューリングを模擬実行する擬似カーネル共
    通制御手段をさらに備えた請求項3に記載のデバイスド
    ライバプログラムのテスト装置。
  5. 【請求項5】前記擬似システムコール発行処理手段にお
    いて、プロセス制御用のセマフォを取得できるまで前記
    擬似システムコールの発行を保留し、また前記擬似カー
    ネル共通制御手段は、前記スケジュール用のキューが空
    状態になった時点でプロセス制御用のセマフォを解放す
    ることにより、利用者モードでの動作とカーネルモード
    での動作の排他実行を模擬する請求項4に記載のデバイ
    スドライバプログラムのテスト装置。
  6. 【請求項6】前記擬似カーネルシステムコール処理手段
    において、受信した前記擬似システムコールにより指定
    された装置識別子に基づき、装置識別子と被テストプロ
    グラムのエントリ識別子との対応表を参照して、受信し
    た擬似システムコールに応じて実行すべき被テストプロ
    グラムのエントリ識別子を求め、当該エントリを呼び出
    すことにより被テストプログラムを模擬実行する請求項
    3に記載のデバイスドライバプログラムのテスト装置。
  7. 【請求項7】前記擬似カーネルハードウェア制御手段に
    おいて、前記擬似入出力プロセスからの割込み時に引き
    渡される情報から、割込み種別、装置識別子、及び被テ
    ストプログラムの割込みルーチンのエントリ識別子の対
    応表を参照して、前記割込みに応じて実行すべき被テス
    トプログラムの割込みルーチンのエントリ識別子を求
    め、当該エントリを呼びだすことにより被テストプログ
    ラムを模擬実行する請求項3記載のデバイスドライバプ
    ログラムのテスト装置。
  8. 【請求項8】前記擬似カーネル共通制御手段において、
    前記被テストプログラムがタイマ要求を発行したとき、
    計算機システムの提供するインターバルタイマを起動す
    るとともに、該タイマ要求のタイムアウト値と指定され
    たタイマ割込みルーチンエントリ識別子とをタイマ用の
    キューに登録し、インターバルタイマからの割込み時に
    は前記タイマ用のキューに登録されている各タイマ要求
    に対してタイムアウトに至ったかどうかを判別し、タイ
    ムアウトに至ったタイマ要求については前記タイマ用の
    キューから取り出して、そのタイマ要求のときに指定さ
    れたタイマ割込みルーチンを呼びだすことにより、タイ
    マ機構を模擬実行する請求項4に記載のデバイスドライ
    バプログラムのテスト装置。
  9. 【請求項9】前記擬似カーネル共通制御手段において、
    前記インターバルタイマからの割込み時に、前記タイマ
    用のキューに登録されているタイマ要求のタイムアウト
    値からインターバル値だけ減算し、タイムアウト値がゼ
    ロに達したタイマ要求をタイムアウトに至ったタイマ要
    求と判断する請求項8に記載のデバイスドライバプログ
    ラムのテスト装置。
  10. 【請求項10】前記擬似カーネルハードウェア制御手段
    において、前記擬似入出力プロセスからの割込みレベル
    が実行中のプログラムレベルより低い場合には、当該割
    込み要求を割込み保留用のキューに登録し、割込み要求
    レベルが実行中のプログラムレベルより高くなった時点
    で該割込み保留用のキューから割込み要求を取り出して
    実行することにより、割込みの優先制御を模擬する請求
    項3に記載のデバイスドライバプログラムのテスト装
    置。
  11. 【請求項11】前記擬似カーネルハードウェア制御手段
    において、前記擬似カーネルプロセスと前記擬似入出力
    プロセスとの間で共有可能な共有記憶領域を予め作成
    し、前記擬似入出力プロセスからの割込み時に、割込み
    要求が「主記憶領域から入出力装置へのデータ転送」の
    場合は割込み時に指定された擬似カーネルプロセス内部
    の記憶領域として模擬している主記憶領域のデータを前
    記共有記憶領域に複写し、さらにこれを擬似入出力プロ
    セスが自プロセス内部の記憶領域に複写し、また割込み
    要求が「入出力装置から主記憶領域へのデータ転送」の
    場合は擬似入出力プロセスが設定した前記共有記憶領域
    のデータを割込み時に指定された主記憶領域に複写する
    ことにより、直接メモリアクセスによるデータ転送機構
    を模擬実行する請求項3に記載のデバイスドライバプロ
    グラムのテスト装置。
  12. 【請求項12】前記入出力装置の動作を擬似入出力プロ
    セスで模擬実行する手段において、模擬する入出力装置
    が通信回線との入出力を制御する装置のとき、通信回線
    への送信データを別の通信回線からの入力として折り返
    し、通信回線からの受信データとして取り扱う請求項2
    に記載のデバイスドライバプログラムのテスト装置。
  13. 【請求項13】利用者モードおよびカーネルモードの2
    つのプロセス実行モードを提供する計算機システムにお
    いて利用者モードの処理から呼び出され実際にはカーネ
    ルモードで動作する被テストプログラムを、利用者モー
    ドのみを利用して模擬実行するデバイスドライバプログ
    ラムのテスト方法であって、 利用者モードで前記被テストプログラムを呼び出す処理
    を含む利用者プログラムを、独立した動作空間を持つプ
    ログラム単位に割り当てたプロセスとして、実行する第
    1のステップと、 実際にはカーネルモードで動作すべき被テストプログラ
    ムを擬似カーネルプロセスと呼ぶ1つのプロセスに割り
    当てるとともに、前記被テストプログラムの呼び出しに
    対応して前記擬似カーネルプロセス内で独立に動作する
    実行単位であるスレッドを割当て、該スレッドにより前
    記被テストプログラムを利用者モードで模擬実行する第
    2のステップとを備えたことを特徴とするデバイスドラ
    イバプログラムのテスト方法。
  14. 【請求項14】実際の入出力装置の動作を、装置単位に
    独立に割り当てたプロセスである擬似入出力プロセスに
    より模擬実行するステップをさらに備えた請求項13に
    記載のデバイスドライバプログラムのテスト方法。
  15. 【請求項15】利用者モードおよびカーネルモードの2
    つのプロセス実行モードを提供する計算機システムにお
    いて利用者モードの処理から呼び出され実際にはカーネ
    ルモードで動作する被テストプログラムを、利用者モー
    ドのみを利用して模擬実行するデバイスドライバプログ
    ラムのテスト方法であって、 実際にはカーネルモードで動作させるべき被テストプロ
    グラムであるデバイスドライバを動作させるための1つ
    のプロセスである擬似カーネルプロセスをあらかじめ動
    作させるとともに、被テストプログラムを初期化し、被
    テストプログラムが制御する入出力装置の装置識別子と
    被テストプログラムのエントリアドレスとの対応表を作
    成し、被テストプログラムが制御する入出力装置の装置
    識別子と入出力装置からの割込みに応じて実行すべき被
    テストプログラムの割込みルーチンのエントリアドレス
    との対応表を作成するステップと、 前記擬似カーネルプロセスにおいて、割込みの受信を待
    つステップと、 利用者モードで前記被テストプログラムを呼び出すシス
    テムコールを発行するステップと、 該システムコールを前記擬似カーネルプロセスに対する
    割込みに置き換えて擬似システムコールとして発行する
    ステップと、 該擬似システムコールの割込みを受信した前記擬似カー
    ネルプロセスにおいて、前記被テストプログラムが制御
    する入出力装置の装置識別子と被テストプログラムのエ
    ントリアドレスとの対応表を参照して、受信した擬似シ
    ステムコールに応じて実行すべき被テストプログラムの
    エントリアドレスを取得し、スレッドとして該エントリ
    の被テストプログラムの処理を実行するステップと、 模擬すべき装置単位に独立に割り当てたプロセスである
    擬似入出力プロセスをあらかじめ動作させ、これにより
    実際の入出力装置の動作を模擬実行するステップと、 前記スレッドとして実行される被テストプログラムから
    発行された入出力装置に対する命令動作を前記擬似入出
    力プロセスに対する割込みに置き換えて実行するステッ
    プと、 実際の入出力装置から発行される割込みを模擬した前記
    擬似入出力プロセスからの割込みを受信した前記擬似カ
    ーネルプロセスにおいて、前記入出力装置の装置識別子
    と被テストプログラムの割込みルーチンのエントリアド
    レスとの対応表を参照して、受信した前記擬似入出力プ
    ロセスからの割込みに応じて実行すべき被テストプログ
    ラムの割込みルーチンのエントリアドレスを取得し、該
    エントリの被テストプログラムの処理を実行するステッ
    プとを備えたことを特徴とするデバイスドライバプログ
    ラムのテスト方法。
  16. 【請求項16】前記擬似カーネルプロセスにおいてスレ
    ッドとして実行される被テストプログラムがプロセス起
    動要求を発行したとき、該プロセス起動要求されたプロ
    グラムを実行するために割当てたスレッドの識別子をス
    ケジュール用のキューに登録するステップと、その後、
    前記スレッドとして実行中の被テストプログラムがプロ
    セス実行待ち要求を発行したとき、前記スケジュール用
    のキューに登録されたスレッドをスケジュールするステ
    ップと、前記プロセス実行待ち要求を発行した被テスト
    プログラムを実行するスレッドはシグナル待ち状態で休
    眠するステップとを、さらに備えることにより、カーネ
    ルモードにおけるプロセスのスケジューリングを模擬実
    行する請求項15に記載のデバイスドライバプログラム
    のテスト方法。
  17. 【請求項17】前記擬似システムコールの割込みを発行
    するステップは、プロセス制御用のセマフォを取得でき
    るまで前記擬似システムコールの発行を保留し、前記ス
    ケジュール用のキューに登録されたスレッドをスケジュ
    ールするステップは、前記スケジュール用のキューが空
    状態になった時点でプロセス制御用のセマフォを解放す
    ることにより、利用者モードでの動作とカーネルモード
    での動作の排他実行を模擬する請求項16に記載のデバ
    イスドライバプログラムのテスト方法。
  18. 【請求項18】前記擬似カーネルプロセスにおいてスレ
    ッドとして実行される被テストプログラムがタイマ要求
    を発行したとき、計算機システムの提供するインターバ
    ルタイマを起動するとともに、該タイマ要求のタイムア
    ウト値と指定されたタイマ割込みルーチンエントリアド
    レスとをタイマ用のキューに登録するステップと、前記
    インターバルタイマからの割込み時には前記タイマ用の
    キューに登録されている各タイマ要求に対してタイムア
    ウトに至ったかどうかを判別し、タイムアウトに至った
    タイマ要求については前記タイマ用のキューから取り出
    して、そのタイマ要求のときに指定されたタイマ割込み
    ルーチンを呼びだすステップとを、さらに備えることに
    より、タイマ機構を模擬実行する請求項15に記載のデ
    バイスドライバプログラムのテスト方法。
  19. 【請求項19】前記擬似カーネルプロセスにおいて、前
    記擬似入出力プロセスからの割込みを受けて対応する被
    テストプログラムの割込みルーチンを実行するステップ
    は、前記擬似入出力プロセスからの割込みレベルが、実
    行中のプログラムレベルより低い場合には、当該割込み
    要求を割込み保留用のキューに登録し、その割込みレベ
    ルが実行中のプログラムレベルより高くなった時点で該
    割込み保留用のキューから割込み要求を取り出して実行
    することにより、割込みの優先制御を模擬する請求項1
    5に記載のデバイスドライバプログラムのテスト方法。
  20. 【請求項20】前記擬似カーネルプロセスと前記擬似入
    出力プロセスとの間で共有可能な共有記憶領域を予め作
    成しておくステップと、前記擬似入出力プロセスからの
    割込み時に割込み要求が「主記憶領域から入出力装置へ
    のデータ転送」の場合は、割込み時に指定された前記擬
    似カーネルプロセス内部の記憶領域として模擬している
    主記憶領域のデータを前記共有記憶領域に複写し、さら
    にこれを前記擬似入出力プロセスが自プロセス内部の記
    憶領域に複写するステップと、前記擬似入出力プロセス
    からの割込み時に割込み要求が「入出力装置から主記憶
    領域へのデータ転送」の場合は、前記擬似入出力プロセ
    スが設定した前記共有記憶領域のデータを割込み時に指
    定された主記憶領域に複写するステップとを、さらに備
    えることにより、直接メモリアクセスによるデータ転送
    機構を模擬実行する請求項15に記載のデバイスドライ
    バプログラムのテスト方法。
  21. 【請求項21】前記擬似入出力プロセスで模擬する入出
    力装置が通信回線との入出力を制御する装置のとき、通
    信回線への出力データを別の通信回線からの入力として
    折り返し、受信データとして取り扱う請求項14または
    15に記載のデバイスドライバプログラムのテスト方
    法。
JP6159495A 1994-06-17 1994-06-17 デバイスドライバプログラムのテスト装置およびその方法 Pending JPH086819A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP6159495A JPH086819A (ja) 1994-06-17 1994-06-17 デバイスドライバプログラムのテスト装置およびその方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6159495A JPH086819A (ja) 1994-06-17 1994-06-17 デバイスドライバプログラムのテスト装置およびその方法

Publications (1)

Publication Number Publication Date
JPH086819A true JPH086819A (ja) 1996-01-12

Family

ID=15695023

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6159495A Pending JPH086819A (ja) 1994-06-17 1994-06-17 デバイスドライバプログラムのテスト装置およびその方法

Country Status (1)

Country Link
JP (1) JPH086819A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006012170A (ja) * 2004-06-24 2006-01-12 Internatl Business Mach Corp <Ibm> ユーザ・モード・プロセスが特権実行モードで動作することを可能にする方法
JP2008282237A (ja) * 2007-05-11 2008-11-20 Toshiba Corp インターフェイスボード、シミュレータ、同期方法、同期プログラム
JP2014041480A (ja) * 2012-08-22 2014-03-06 Oki Electric Ind Co Ltd データ処理装置及びプログラム
CN110347484A (zh) * 2019-06-27 2019-10-18 上海麦克风文化传媒有限公司 一种软件编译部署过程中进行高效测试的工作方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006012170A (ja) * 2004-06-24 2006-01-12 Internatl Business Mach Corp <Ibm> ユーザ・モード・プロセスが特権実行モードで動作することを可能にする方法
JP2008282237A (ja) * 2007-05-11 2008-11-20 Toshiba Corp インターフェイスボード、シミュレータ、同期方法、同期プログラム
JP2014041480A (ja) * 2012-08-22 2014-03-06 Oki Electric Ind Co Ltd データ処理装置及びプログラム
CN110347484A (zh) * 2019-06-27 2019-10-18 上海麦克风文化传媒有限公司 一种软件编译部署过程中进行高效测试的工作方法
CN110347484B (zh) * 2019-06-27 2024-02-02 上海麦克风文化传媒有限公司 一种软件编译部署过程中进行高效测试的工作方法

Similar Documents

Publication Publication Date Title
US5630049A (en) Method and apparatus for testing software on a computer network
US6772419B1 (en) Multi OS configuration system having an interrupt process program executes independently of operation of the multi OS
US7200776B2 (en) System and method for generating trace data in a computing system
US6117181A (en) Synchronization mechanism for distributed hardware simulation
JP3659062B2 (ja) 計算機システム
US6996828B1 (en) Multi-OS configuration method
JPH03501784A (ja) コンピュータのインタフェース・アーキテクチャ
EP0942372B1 (en) Processor with breakpoint circuit
JP3936737B2 (ja) 設計確認用疑似ランダム命令を生成するためのシステム、及びその方法
US4660144A (en) Adjunct machine
JPH0792761B2 (ja) 仮想計算機システムの入出力制御方法
JPH04256034A (ja) コンピユータシステム
JPH11505653A (ja) 単一アドレス空間で保護ドメインと共に用いるためのオペレーティングシステム
Lycklama et al. UNIX Time‐Sharing System: The MERT Operating System
JPH06242987A (ja) コンピュータ装置においてマイクロプロセッサの正常な処理の引継ぎをホストプロセッサが実行する方法および装置
EP0942374A1 (en) Method and device to simulate interruptions for the emulation of a processor
JPH1021094A (ja) リアルタイム制御方式
JPH086819A (ja) デバイスドライバプログラムのテスト装置およびその方法
EP0942371B1 (en) Debugging method for a microcomputer
JP2001236237A (ja) マルチos構成方法
JP3503504B2 (ja) デバッグ処理システムと計算機およびデバッグ処理方法
JPH0736713A (ja) プログラム実行管理装置
JPH08297585A (ja) オペレーティングシステムによるデータ転送方法
JPH10260850A (ja) 仮想計算機システム
JPH052500A (ja) マルチプロセツサシステムのソフトウエアテスタ

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20040301

A131 Notification of reasons for refusal

Effective date: 20040309

Free format text: JAPANESE INTERMEDIATE CODE: A131

A02 Decision of refusal

Effective date: 20040817

Free format text: JAPANESE INTERMEDIATE CODE: A02