(57)【要約】【課題】  マルチタスクシステムにおいてデータの入出力を効率的に行う技術を提供する。【解決手段】プロセッサ２００はアプリケーションを実行しＨＤＤに対して入出力すべきデータを生成するタスクＡと、ＨＤＤコントローラ６５０へのデータ入出力要求を制御するタスクＢとを順次処理する。タスクＡの処理時に、タスク処理部２０２はタスクの処理途上にＨＤＤへの入出力の必要が生じた際、要求フォーマット生成部２０４およびアクセス要求発行部２０８へ通知する。要求フォーマット生成部２０４はタスクＢの保持する貸し出しコードをマッピングによって参照し、要求フォーマットを生成する。データ整形部２０６は貸し出しコードを参照し、データの分割または接続を行う。アクセス要求発行部２０８はタスクＢのアクセス情報送受部２１２に対しアクセス要求を発行する。タスクＢの処理時に、ＨＤＤコントローラ制御部２１０は複数のアクセス要求を調停し、ＨＤＤコントローラ６５０へ順次要求を設定する。【選択図】  図３
2007018195.tif 000002
【特許請求の範囲】
【請求項１】
第一のタスクに割り当てられたメモリ空間に、第二のタスクに割り当てられたメモリ空間の少なくとも一部をマッピングするステップと、
前記第一のタスクに割り当てられたメモリ空間にマッピングされた、前記第二のタスクに割り当てられたメモリ空間に格納された貸し出しコードに基づき、前記第一のタスクの処理の一部を行うステップと、
を含むことを特徴とする情報処理方法。
【請求項２】
前記第一のタスクの処理において所定の演算処理の必要が生じた際、前記第一のタスクの処理の一部を行うステップは、前記貸し出しコードに含まれる処理コードに基づき、前記演算処理を行うステップを含むことを特徴とする請求項１に記載の情報処理方法。
【請求項３】
前記第一のタスクの処理において、入出力ユニットへ入出力をすべきデータが発生した際、前記第一のタスクの処理の一部を行うステップは、前記貸し出しコードに含まれる処理コードに基づき、前記入出力ユニットが認識できる形式で入出力要求情報を生成するステップを含み、
前記入出力要求情報に基づき、前記第二のタスクの処理において、前記入出力ユニットへ入出力要求を発行するステップをさらに含むことを特徴とする請求項１に記載の情報処理方法。
【請求項４】
前記入出力要求情報を生成するステップは、
前記貸し出しコードに含まれる処理コードに基づき、出力すべきデータを前記入出力ユニットの処理体系に対応した形式に整形するステップと、
整形されたデータを前記第一のタスクと前記第二のタスクとの共有メモリ空間に格納するステップと、
を含み、
前記入出力ユニットへ入出力要求を発行するステップは、前記整形されたデータを前記共有メモリ空間より読み出し、前記入出力ユニット内のバッファへ書き込むステップを含むことを特徴とする請求項３に記載の情報処理方法。
【請求項５】
前記入出力要求に従い前記入出力ユニットから入力されたデータを、前記第二のタスクの処理において前記第一のタスクに割り当てられたメモリ空間へ転送するステップと、
前記第一のタスクの処理において、前記転送されたデータを前記貸し出しコードに含まれる処理コードに基づき前記第一のタスクの処理体系に対応した形式に整形するステップと、
をさらに含むことを特徴とする請求項３または４に記載の情報処理方法。
【請求項６】
前記マッピングするステップの後、前記第一のタスクの処理において、あらかじめ定められた処理内容の名称と、前記マッピングされたメモリ空間における前記処理内容に対応する処理コードの位置を示すエントリポイントとを関連づけたテーブルを生成するステップをさらに含み、
前記第一のタスクの処理において、必要な処理内容の名称に基づき対応する処理コードのエントリポイントへ処理を分岐することを特徴とする請求項１に記載の情報処理方法。
【請求項７】
複数のタスクを処理する一以上のプロセッサと、
各タスクに割り当てられた領域を含むメモリと、を備え、
前記プロセッサは、
第一のタスクに割り当てられたメモリ領域に、第二のタスクに割り当てられたメモリ領域の少なくとも一部をマッピングするマッピング処理部を備え、
前記第一のタスクに割り当てられたメモリ領域にマッピングされた、前記第二のタスクに割り当てられたメモリ領域に格納された貸し出しコードに基づき、前記第一のタスクの処理の一部を行うことを特徴とする情報処理装置。
【請求項８】
前記プロセッサは、前記第一のタスクの処理において所定の演算処理の必要が生じた際、前記貸し出しコードに含まれる処理コードに基づき、前記演算処理を行うことを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記プロセッサは、
前記第一のタスクの処理において入出力ユニットへ入出力をすべきデータが発生した際、前記貸し出しコードに含まれる処理コードに基づき、前記入出力ユニットが認識できる形式で入出力要求情報を生成する入出力要求情報生成部と、
前記入出力要求情報に基づき、前記第二のタスクの処理時に前記入出力ユニットへ入出力要求を発行する要求発行部と、
をさらに備えることを特徴とする請求項７に記載の情報処理装置。
【請求項１０】
前記プロセッサは、前記第一のタスクの処理時に、前記貸し出しコードに含まれる処理コードに基づき、出力すべきデータを前記入出力ユニットの処理体系に対応した形式に整形し、前記第一のタスクと前記第二のタスクとの共有メモリに格納するデータ整形部をさらに備え、
前記要求発行部は、前記整形されたデータを前記共有メモリより読み出し、前記入出力ユニット内のバッファへ転送することを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
前記プロセッサは、前記入出力要求に従い前記入出力ユニットから入力されたデータを、前記第二のタスクの処理時に前記第一のタスクに割り当てられたメモリ領域へ転送するＤＭＡ(Direct Memory Access)コントローラと、
前記第一のタスクの処理時に、前記転送されたデータを前記貸し出しコードに含まれる処理コードに基づき前記第一のタスクの処理体系に対応した形式に整形するデータ整形部と、
をさらに備えることを特徴とする請求項９または１０に記載の情報処理装置。
【請求項１２】
入出力装置を利用して入出力すべきデータを生成するデータ生成部と、
前記入出力装置を制御する装置制御部と、
処理コードを格納するメモリと、を備え、
前記データ生成部は、前記装置制御部に割り当てられた前記メモリ内の領域に格納された処理コードの少なくとも一部をマッピングにより参照し、前記入出力装置を制御するための処理の少なくとも一部を行うことを特徴とする情報処理装置。
【請求項１３】
第一のタスクの処理において入出力をすべきデータを発生させる機能と、
入出力ニットへの入出力要求を制御する第二のタスクに割り当てられたメモリ空間の少なくとも一部を、前記第一のタスクに割り当てられたメモリ空間にマッピングする機能と、
前記第一のタスクの処理において、前記第一のタスクに割り当てられたメモリ空間にマッピングされた、前記第二のタスクに割り当てられたメモリ空間に格納された貸し出しコードに基づき、前記入出力ユニットが認識できる形式で入出力要求情報を生成する機能と、
前記第二のタスクの処理において、前記入出力要求情報に基づき前記入出力ユニットへ入出力要求を発行する機能と、
をコンピュータに実現させることを特徴とするコンピュータプログラム。
【請求項１４】
第一のタスクの処理において入出力をすべきデータを発生させる機能と、
入出力ユニットへの入出力要求を制御する第二のタスクに割り当てられたメモリ空間の少なくとも一部を、前記第一のタスクに割り当てられたメモリ空間にマッピングする機能と、
前記第一のタスクの処理において、前記第一のタスクに割り当てられたメモリ空間にマッピングされた、前記第二のタスクに割り当てられたメモリ空間に格納された貸し出しコードに基づき、前記入出力ユニットが認識できる形式で入出力要求情報を生成する機能と、
前記第二のタスクの処理において、前記入出力要求情報に基づき前記入出力ユニットへ入出力要求を発行する機能と、
をコンピュータに実現させることを特徴とするコンピュータプログラムを記憶した記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理技術に関し、特に複数のタスクを並列処理する情報処理方法、およびそれを利用した情報処理装置に関する。
【背景技術】
【０００２】
近年、情報処理装置の分野では、複数のプログラムを同時にメモリに読み込み、それに対応する複数のタスクを切り替えながら同時進行で処理するマルチタスクの機能が、一般的に用いられるようになってきた。複数のタスクは、情報処理装置の基礎的制御を行うＯＳ（Operation System）によって各タイムスライスに対してスケジューリングされ、それに基づいてプロセッサが処理を行う。
【０００３】
プロセッサによる処理中に、ＨＤＤ（Hard Disk Drive）などの入出力装置へのアクセスの必要が生じたタスクはプロセッサを開放し、スケジューリングされた別のタスクの処理が開始される。タスクに割り当てられたタイムスライスが満了した場合も、当該タスクから次のタスクへと切り替わる。
【０００４】
一方、ＨＤＤへのデータの書き込みや読み出し処理、ネットワークを介したデータの伝送など、外部の入出力装置などとデータのやり取りを行う場合には、入出力装置のそれぞれに適したデータ形式に整形して書き込んだり、そのデータ形式によって読み出されたデータを一般的な形式に戻したりする場合が多い。このようなデータ整形は一般的には入出力装置とともに提供される装置のドライバソフトウェアや、通信プロトコルによって実行される。これにより一般的なアプリケーションソフトウェアのタスクの処理によって、ドライバソフトウェアなどの起動要求がなされ、ドライバソフトウェアはそれに応じてデータの整形などを行い入出力の制御を行う、というように処理の分業が行われていた。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述のマルチタスク処理において、複数のタスクが同一の入出力装置へのアクセス要求を次々に発生させると、ドライバソフトウェアはそれらに対応したデータ整形処理などを順次行う必要があるため、後にアクセス要求を発生させたタスクはそれ以前のタスクのアクセスが完了するまで待つ必要がある。上述のとおり、入出力装置へのアクセス期間中のタスクはプロセッサによる処理が行われないため、別のタスクのアクセスにかかる時間も含めた期間、動作が停止してしまうことになる。この現象は一度に処理するタスクの数が多いほど顕著となるため、今後の技術的進歩によって同時に処理することのできるタスクの数が増加するほど、顕在化する問題となり得ることを本発明者は認識した。
【０００６】
本発明はこのような課題に鑑みてなされたものであり、その目的はマルチタスクシステムにおいて、効率のよい入出力処理を行うことのできる技術を提供することにある。
【課題を解決するための手段】
【０００７】
本発明のある態様は情報処理方法に関する。この方法は、第一のタスクに割り当てられたメモリ空間に、第二のタスクに割り当てられたメモリ空間の少なくとも一部をマッピングするステップと、第一のタスクに割り当てられたメモリ空間にマッピングされた、第二のタスクに割り当てられたメモリ空間に格納された貸し出しコードに基づき、第一のタスク処理の一部を行うステップと、を含むことを特徴とする。
【０００８】
この方法は、第一のタスク処理時に所定の演算処理の必要が生じた際、または、入出力ユニットへ入出力をすべきデータが発生した際、第一のタスク処理の一部を行うステップが、貸し出しコードに含まれる処理コードに基づき、演算処理を行ったり、入出力ユニットが認識できる形式で入出力要求情報を生成したりしてよい。
【０００９】
「タスク」とは、情報処理装置の制御を行うＯＳや、アプリケーションソフトウェアなど自体、またはそれらに含まれる、ある単位の機能を達成するための情報処理の内容をいう。「第一のタスク処理」と「第二のタスク処理」は同一のタイムスライスにおいて実行してもよいし、異なるタイムスライスにおいて実行してもよい。またこれらのタスクは一のプロセッサに含まれるサブプロセッサにおいて処理されてもよいし、異なる２以上のプロセッサにおいて処理されてもよい。前述の「入出力ユニット」はＨＤＤやプリンタなどの入出力装置や、ネットワークプロトコルなど、内部で固有のデータ処理体系を有し、実際のデータの入出力を行う装置やユニット、ソフトウェアなどの機能ブロックのいずれでもよい。
【００１０】
本発明の別の態様は情報処理装置に関する。この装置は、複数のタスクを処理する一以上のプロセッサと、各タスクに割り当てられた領域を含むメモリと、を備え、プロセッサは、第一のタスクに割り当てられたメモリ領域に、第二のタスクに割り当てられたメモリ領域の少なくとも一部をマッピングするマッピング処理部を備え、第一のタスクに割り当てられたメモリ領域にマッピングされた、第二のタスクに割り当てられたメモリ領域に格納された貸し出しコードに基づき、第一のタスク処理の一部を行うことを特徴とする。
【００１１】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１２】
本発明によれば、情報処理において発生したデータの入出力を効率的に行うことができる。
【発明を実施するための最良の形態】
【００１３】
実施の形態１
図１は、本実施の形態における情報処理装置１０００の構成を示すブロック図である。情報処理装置１０００は、プロセッサ２００、メインメモリ５０、ＨＤＤコントローラ６５０、およびＨＤＤ６００を含み、それらがバス４０によって接続されている。図１などにおいて、様々な処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、ＣＰＵ、メモリ、その他のＬＳＩで構成することができ、ソフトウェア的には、メモリにロードされた予約管理機能のあるプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
【００１４】
この情報処理装置１０００では、情報処理装置１０００を効率よく使用するための機能、環境を提供し、装置全体を統括的に制御するＯＳが実行される。そのＯＳ上で複数のアプリケーションソフトウェア（以下、単にアプリケーションという）が実行される。
【００１５】
プロセッサ２００は、複数のサブプロセッサ３０、管理プロセッサ３２およびＤＭＡコントローラ３４を含む。管理プロセッサ３２は、複数のアプリケーションや入出力制御プログラムに対応するタスクを時分割し、タイムスライスごとにサブプロセッサ３０に割り当てて実行させることにより、並列処理を行っている。プロセッサ２００が処理するタスクのひとつが、ＨＤＤ６００へのデータの書き込みおよび読み出しのためのＨＤＤコントローラ６５０の制御である。ＤＭＡコントローラ３４は例えばメインメモリ５０とＨＤＤコントローラ６５０内のバッファとの間のデータのＤＭＡ転送を制御する。
【００１６】
メインメモリ５０は、ＤＲＡＭ(Dynamic Random Access Memory)などで構成され、実行されるアプリケーションなどに対応するマシンコードやデータを格納する記憶領域である。プロセッサ２００が処理を行う複数のタスクには、それぞれが使用するメインメモリ５０内の領域が割り当てられる。本実施の形態では、ＨＤＤコントローラ６５０の制御を行うタスクに割り当てられた領域に格納されたコードの一部を、ＨＤＤ６００へのアクセス要求元であるタスクが参照し、当該タスクがアクセスに係る処理の一部を担うことにより、ＨＤＤ６００へのアクセスを効率的に行う。さらにメインメモリ５０には、それらのタスク相互にデータの送受を行うための共有領域、すなわち共有メモリが設けられる。
【００１７】
ＨＤＤコントローラ６５０はアプリケーションに対応するタスク処理において発生した、ＨＤＤ６００に対するデータ入出力要求を受け付け、それに基づきＨＤＤ６００を動作させる。具体的にはプロセッサ２００が処理するタスクから読み出しまたは書き込みのモード、セクタ番号などを含む要求フォーマットを受け付け、ＨＤＤ６００へヘッド選択信号などの信号を適宜送信することにより、適切なセクタにアクセスを行う。
【００１８】
図２は情報処理装置１０００において複数のタスクを処理した場合の、メインメモリ５０の割り当てについて模式的に示している。情報処理装置１０００ではプロセッサ２００は時分割、メインメモリ５０は空間分割され、複数のタスク、例えばタスクＡおよびタスクＢが使用できる処理時間、記憶領域が、タスクの発生時などに割り当てられる。メインメモリ５０の容量には制約があるため、情報処理装置１０００のようなマルチタスク構成の装置においては、全てのタスクの処理に用いるコードやデータをメインメモリ５０に格納することができない場合がある。
【００１９】
そこで通常、参照頻度の少ないデータなどをＨＤＤ６００へ退避させ、参照の必要が生じたときにのみメインメモリ５０へ読み出すページングなどの処理が行われる。この際、メインメモリ５０を参照するタスクＡやタスクＢが、そのような動作を意識することなくメインメモリ５０へアクセスできるようにするため、ＨＤＤ６００へ退避させたデータなどを含めたデータ全体を格納できる見かけ上のメモリとして、仮想メモリの概念を導入する。タスクＡやタスクＢがそれぞれに割り当てられた仮想メモリ内のアドレスに対しアクセスを要求すると、メインメモリ５０の実態である物理メモリ内に格納されたページテーブルなど、仮想メモリと物理メモリのアドレスを関連付けたテーブルを参照することにより、物理メモリ内のデータへのアクセスが可能となる。この際、タスクが参照したいデータが物理メモリにない場合は、ＨＤＤ６００より読み出しを行う。
【００２０】
今、ユーザが起動させたアプリケーションに対応するタスクをタスクＡとする。タスクＡがＨＤＤ６００への書き込みまたは読み出しを必要とする場合、情報処理装置１０００は、ＨＤＤコントローラ６５０を制御するタスクを発生させる。これをタスクＢとする。タスクＢは、従来ＨＤＤコントローラ６５０が担っていたＡＰＩ（Application Program Interface）の仕様をＨＤＤコントローラ６５０から分離し、ＨＤＤ６００を含むハードウェアを抽象化するためのタスクである。タスクＢは、抽象化されたＨＤＤ６００への書き込みおよび読み出しサービスをタスクＡへ提供する。具体的には、図２において斜線で示された、タスクＢに割り当てられた物理メモリ内に格納されたサービスコードのアドレスと、タスクＡに割り当てられた仮想メモリ内のアドレスとを、一点鎖線で示すように関連付けてページテーブルに記録する。これにより、通常のページングなどの処理を利用して、タスクＢの保有するサービスコードがタスクＡによって参照される。
【００２１】
タスクＢを発生させず、タスクＡが直接ＨＤＤコントローラ６５０へアクセス要求を行う構成とした場合、ＨＤＤコントローラ６５０およびＨＤＤ６００からなるハードウェアをバージョンアップした場合などに、タスクＡに対応するアプリケーションのプログラム自体を、新たなハードウェアに対応するように変更しなければならない。本実施の形態ではＨＤＤ６００を含むハードウェアを抽象化し、タスクＡが抽象化されたＨＤＤ６００への書き込みおよび読み出しサービスを利用することにより、ハードウェアが変更してもアプリケーションプログラムの変更を行う必要がなくなる。さらに、サービスコードをタスクＡが参照できるようにし、アクセス要求の発行以前に、必要な要求フォーマットの生成やデータの整形処理をタスクＡの処理に含ませることにより、アクセスを効率化できる。
【００２２】
タスクＢはその他に、タスクＡ以外に処理されているタスクが存在し、複数のタスクが同時期にＨＤＤ６００へのアクセスを要求している場合に、それらの要求を管理し、排他制御を行う。これによりアクセスの競合が防止できる。
【００２３】
図３は情報処理装置１０００においてタスクＡおよびタスクＢを処理するプロセッサ２００の構成を示すブロック図である。タスクＡの処理においてプロセッサ２００は、アプリケーションに対応する処理を行い、ＨＤＤ６００に対するアクセス要求を発生させるタスク処理部２０２、ＨＤＤコントローラ６５０へのアクセス要求フォーマットを作成する要求フォーマット生成部２０４、ＨＤＤ６００に対して書き込みを行うデータや、ＨＤＤ６００から読み出されたデータの整形を行うデータ整形部２０６、およびＨＤＤ６００へのアクセス要求をタスクＢに対して発行したり、タスクＢから各種情報を受け付けたりするアクセス要求発行部２０８を含む。
【００２４】
タスクＢの処理においてプロセッサ２００は、タスクＡからのアクセス要求を受け付けたり、タスクＡに対し各種情報を発信したりするアクセス情報送受部２１２、および複数のアクセス要求の調停を行い、タスクＡが生成したアクセス要求フォーマットをＨＤＤコントローラ６５０に順次送信してＨＤＤコントローラ６５０を制御するＨＤＤコントローラ制御部２１０を含む。タスクＡとタスクＢは実際にはプロセッサ２００によって異なるタイムスライスで処理が行われるため、その間のデータや通知の授受はメインメモリ５０を介して行われる。
【００２５】
タスクＡにおけるタスク処理部２０２は、メインメモリ５０に格納されたマシンコードなどに基づいて、アプリケーションの実行のための処理を行い、その途上でＨＤＤ６００へのデータの書き込み、または読み出しの必要が生じた場合に、要求フォーマット生成部２０４およびアクセス要求発行部２０８へ、その旨の情報を渡す。要求フォーマット生成部２０４は、タスク処理部２０２から受け付けたアクセス要求の情報から、ＨＤＤコントローラ６５０が認識できる要求フォーマットを生成し、メインメモリ５０へ格納する。要求フォーマットの生成に用いられるコードは、タスクＢが属するプロセスが保有しているため、タスクＡに割り振られたメインメモリ５０の記憶領域には実際には格納されない。しかしながら上述のように、マッピングによってタスクＡに割り振られた仮想メモリ内の領域に格納されるようにすることで、タスクＡによる当該コードの参照を可能にする。タスクＢのプロセスが受け持つマシンコードに含まれ、タスクＡによって参照されるコードを、以降、「貸し出しコード」と呼ぶ。貸し出しコードには、データ書き込みや読み出しのための要求フォーマットの生成に用いられるコードや、データの整形に用いられるコードが含まれる。
【００２６】
データ整形部２０６は、ＨＤＤ６００の各セクタに格納できるデータサイズに対応させて、書き込みを行うデータの切り分けを行う。一方、セクタごとに読み出されたデータを接続し、一のデータへと整形する。アクセス要求発行部２０８は、タスクＢが認識できる形で、ＨＤＤ６００へのアクセス要求を発行する。例えば生成した要求フォーマットが格納されているメインメモリ５０内の領域のアドレス情報を、タスクＡおよびタスクBの共有メモリ領域に書き込むことにより、タスクＢがそれを認識できるようにする。
【００２７】
タスクＢにおけるアクセス情報送受部２１２はタスクＡのＨＤＤ６００に対するアクセス要求を認識し、タスクＡに対して書き込みや読み出しなどに必要なサービスを提供するために、サービスの初期化を行う。例えばタスクBは、共有メモリの所定の領域を読み出し、要求フォーマットのアドレス情報がタスクＡによって書き込まれているかどうかを確認する。書き込まれていれば、適宜サービスの初期化を行う。アクセス情報送受部２１２はその他に、サービスの終了処理やメインメモリ５０のタスクＡとの共有化処理なども行う。
【００２８】
ＨＤＤコントローラ制御部２１０はＨＤＤコントローラ６５０の初期化を行う。また、タスクＡなどアクセスの要求元であるタスクが使用できるＨＤＤ６００内のセクタの範囲をタスクごとに管理する。要求元のタスクは全て、一意に識別される識別情報を有するため、ＨＤＤコントローラ制御部２１０はそれを用いて、ＨＤＤ６００を使用することのできるタスクとその使用可能セクタ範囲を管理する。アクセス情報送受部２１２において受け付けたアクセス要求が、使用可能範囲外のセクタに対するものであった場合は、アクセスを不許可とする。許可されたアクセス要求は、ＨＤＤコントローラ制御部２１０によってＨＤＤコントローラ６５０へ設定される。ＨＤＤコントローラ制御部２１０はさらに、ＨＤＤコントローラ６５０の動作開始制御、ＨＤＤコントローラ６５０からの割り込み受け付けを行う。
【００２９】
要求フォーマット生成部２０４において生成される要求フォーマットは、例えばそれぞれ３２ビットの第１から第５までの５つの領域を含む。第１の領域には書き込みおよび読み出しのモード識別情報および、ＨＤＤコントローラ６５０の処理結果が、第２の領域にはＨＤＤ６００内のセクタ番号が、第３の領域にはメインメモリ５０内の書き込みデータの格納アドレスまたは読み出しデータの格納先アドレスが、第４の領域には書き込みまたは読み出しデータのサイズが、第５の領域には次の要求フォーマットのメインメモリ５０内のアドレスがそれぞれ登録される。
【００３０】
ＨＤＤコントローラ制御部２１０は、アクセスを許可した要求フォーマットのメインメモリ５０内の先頭アドレスをＨＤＤコントローラ６５０に含まれる要求フォーマットアドレスレジスタに書き込むことにより、ＨＤＤコントローラ６５０の動作を開始させる。この際、ＨＤＤコントローラ６５０に含まれる動作レジスタのスタートビットを"１"にセットする。ＨＤＤコントローラ６５０は処理が完了するまで、自らが有する状態レジスタの動作中ビットを"１"にセットし、認識した要求フォーマットについての処理が完了した際、動作レジスタのスタートビットと、状態レジスタの動作中ビットをともに"０"にセットする。その後、プロセッサ２００に対して割り込み信号を発生させる。
【００３１】
次に、上記の構成によってＨＤＤ６００に書き込みを行う処理手順について説明する。図４はタスクＢの起動処理、およびタスクＢからタスクＡへ提供されるサービスの初期化処理の手順を、図５はそれに引き続きタスクＡがサービスを利用する手順を示している。
【００３２】
タスクＡのタスク処理部２０２によってＨＤＤ６００に対するデータの書き込みの必要が生じた場合、プロセッサ２００に含まれる管理プロセッサ３２によってタスクＢがスケジューリングされ、サブプロセッサ３０によってタスクＢの処理が実行される。図４に示すように、まずタスクＢの起動に際し、ＨＤＤコントローラ制御部２１０は、ＨＤＤコントローラ制御プログラムの初期化、ＨＤＤコントローラ６５０の初期化、およびＨＤＤ６００の初期化を含む初期動作を行う（Ｓ１０）。ＨＤＤコントローラ制御プログラムの初期化には、ＨＤＤ６００を使用することのできるタスクとその使用可能セクタ範囲とを対応づけたテーブルの初期化が含まれる。初期動作は、タスクＢを新たに起動したときのみ行われ、既に起動しているタスクＢに対してサービスの提供を要求する場合は、以下に述べる処理から行うことができる。
【００３３】
次に、タスクＢが提供するサービスをタスクＡが利用するための初期化処理を行う。まず、タスクＡにおけるアクセス要求発行部２０８は、タスクＢに対してサービスの初期化要求を発行する（Ｓ１２）。この要求には、タスクＡを識別するための識別情報が含まれる。発行された初期化要求はメインメモリ５０内の共有メモリ領域に格納されるなどし、プロセッサ２００における次のタスクＢの処理時に認識できるようにする。初期化要求を認識したタスクＢは、識別情報に基づき、要求元であるタスクＡのＨＤＤ６００に対する使用権の有無を確認する（Ｓ１４）。タスクＡに使用権がなければ（Ｓ１４のＮ）、エラーメッセージをタスクＡに対して発行し（Ｓ１６）、全シーケンスを終了する。発行されたエラーメッセージはメインメモリ５０内の共有メモリ領域に格納されるなどし、プロセッサ２００における次のタスクＡの処理時に認識できるようにする。
【００３４】
タスクＡにＨＤＤ６００の使用権があれば（Ｓ１４のＹ）、タスクＢに割り当てられたメインメモリ５０内の記憶領域における初期化処理を行う（Ｓ２０）。具体的には、書き込み要求を受け付けるための領域の確保と、その領域の初期化、およびサービスの提供に用いる変数の初期化などが行われる。
【００３５】
次にＨＤＤコントローラ制御部２１０は、タスクＡが要求フォーマットを生成するために使用する貸し出しコードが格納されたメインメモリ５０内の記憶領域を、タスクＡの処理時にも参照できるように、当該記憶領域の共有化のための設定変更を行う（Ｓ２２）。以上の処理により、タスクＢ側でのサービスの初期化が完了すると、アクセス情報送受部２１２はタスクＡに対してサービス初期化成功メッセージを発行する（Ｓ２４）。初期化成功メッセージには、貸し出しコードのメインメモリ５０におけるアドレス、貸し出しコードを用いてタスクＡが要求フォーマットを生成する際などに必要となるメインメモリ５０内の記憶領域のサイズ、必要となるスタックのサイズなどの情報が含まれる。
【００３６】
プロセッサ２００において次にタスクＡの処理が開始されたら、要求フォーマット生成部２０４は、タスクＢが発行したサービス初期化成功メッセージに含まれる情報に基づき、タスクＡ側でのサービスの初期化を次のとおり行う。まずメインメモリ５０において貸し出しコードの格納された記憶領域を、タスクＡに割り当てられたメインメモリ５０内の記憶領域にマッピングする（Ｓ２６）。次に貸し出しコードによる処理に際して必要となる記憶領域を、タスクＡに割り当てられたメインメモリ５０内の記憶領域に確保し、その領域をタスクＢがアクセスできるように、共有化のための設定変更を行い、初期化する（Ｓ２８）。以降、この記憶領域を「グローバル領域」と呼ぶ。
【００３７】
そしてタスクＡがＨＤＤ６００に対する書き込みや、読み出しなど各種サービスを利用できるようにするため、貸し出しコードにおけるそれらのサービスコードのエントリポイントを示すＴＯＣ（Table of Contents）の生成処理を行う（Ｓ３０）。次にＳ２８において確保したグローバル領域のメインメモリ５０内のアドレスを、タスクＢに対して通知する（Ｓ３２）。この場合もメインメモリ５０内の共有メモリ領域にアドレス情報を格納するなどの処理を行う。必要であれば、タスクＢはグローバル領域の初期化を行ってもよい。
【００３８】
次に図５に示すとおり、タスクＡはＨＤＤ６００への書き込みサービスを利用する。まず、貸し出しコードに含まれる書き込みのための関数のエントリポイントをＴＯＣより取得する（Ｓ３４）。ＴＯＣを参照する際のキーとなる各種関数の名称は、例えば、書き込みであれば"ＤＩＳＫ−Ｗ"、読み出しであれば"ＤＩＳＫ−Ｒ"などというように一般的なわかりやすいものをあらかじめ定めておき、タスクＡに対応したアプリケーションのプログラムを作成する際にはその名称を使用するようにする。これにより、ＨＤＤ６００の仕様を意識することなく、汎用的なアプリケーションプログラムの作成が可能となる。次にタスクＡの処理を、取得したエントリポイントへ分岐する（Ｓ３６）。タスクＡの分岐後の処理において使用される記憶領域は、グローバル領域内となるようにあらかじめ設定しておく。
【００３９】
次に要求フォーマット生成部２０４およびデータ整形部２０６は、分岐先の書き込みのための関数を用いて、要求フォーマットの生成および書き込みデータの整形をそれぞれ行う（Ｓ３８、Ｓ４０）。要求フォーマットは上述のとおり５つの領域に格納された５種類の情報を含み、それぞれの要求フォーマットは、５１２バイトなど、１セクタが格納できるデータサイズの書き込みデータと対応づけられる。書き込みデータが、ひとつのセクタが格納できるデータサイズより大きい場合に、データ整形部２０６は当該データをそのデータサイズごとに分割し、要求フォーマット生成部２０４はそれぞれのデータに対して要求フォーマットを生成する。生成された要求フォーマットおよび整形された書き込みデータは、メインメモリ５０内のグローバル領域に格納される。
【００４０】
要求フォーマットの生成およびデータの整形が完了したら、アクセス要求発行部２０８は、共有メモリ領域内にその旨の情報を書き込み、タスクＢが書き込み要求を認識できるようにする（Ｓ４２）。例えば要求フォーマットの先頭アドレスを所定の領域に書き込む。タスクＡはＨＤＤ６００への書き込み、および読み出しを含む複数のアクセス要求の要求フォーマットの生成およびデータの整形を、タスクＢの当該要求の認識の有無に関わらず、必要に応じて順次行っていく。タスクＢがそれらの要求を認識し適宜処理を開始するまで、複数の要求がグローバル領域に蓄積される。蓄積した要求は、上述のとおり、直前に生成された要求フォーマットの第５領域に記録されるアドレスによって次の要求フォーマットが特定される、といった具合につなげられ、一連のアクセス要求を構成する。
【００４１】
タスクＢのアクセス情報送受部２１２が、タスクＢに割り当てられた処理時間ごとに共有メモリを確認するなどして、タスクＡからの書き込み要求を認識する（Ｓ４４）。同時にタスクＡを含む複数のタスクからのアクセス要求を認識した場合は、ＨＤＤコントローラ制御部２１０は、優先度その他の一般的な基準に基づきＨＤＤ６００へアクセスを行う順序を調停し、スケジューリングを行う（Ｓ４６）。そして、その結果に基づき、グローバル領域に格納された要求フォーマットの先頭アドレスをＨＤＤコントローラ６５０に与えることにより、ＨＤＤコントローラ６５０の動作を開始させ、ＨＤＤ６００への書き込みを実現する（Ｓ４８）。ＨＤＤ６００への書き込み処理が完了したら、ＨＤＤコントローラ６５０は上述のとおりプロセッサ２００に対して割り込み信号を発生し、タスクBはそれを受け付ける（Ｓ５０）。
【００４２】
Ｓ３４からＳ５０の処理を、タスクＡにおいて発生した書き込むべきデータが全てＨＤＤ６００へ書き込まれるまで繰り返す。そしてアクセス要求発行部２０８は、書き込みデータが存在しなくなったとき、またはタスクＡの処理時間終了直前などに必要に応じて、タスクＢに対しサービス利用終了の信号を送信し、要求フォーマット生成部２０４は、Ｓ３０において生成したＴＯＣおよび、Ｓ２６において形成した貸し出しコードのマッピング領域を破棄するなどのサービス利用終了処理を行う（Ｓ５２）。この際、要求済みの書き込みデータが全てＨＤＤ６００へ書き込まれていることを確認してから、グローバル領域のタスクＢによるアクセスを不許可とするように、メインメモリ５０の設定も変更する。以上の処理によって、タスクＡで発生したＨＤＤ６００へのデータ書き込み処理が完了する。
【００４３】
次に、同様の構成によってＨＤＤ６００からデータを読み出す処理手順について、書き込みを行う場合と異なる点に主眼を置き説明する。タスクＢの起動、およびタスクＢからタスクＡへ提供されるサービスの初期化処理手順は、図４と同様に行われる。図６はタスクＡが読み出しサービスを利用する際の処理手順を示している。まず書き込みサービスの利用と同様、タスクＡの要求フォーマット生成部２０４は、ＴＯＣより読み出しを行う関数のエントリポイントを取得し、当該エントリポイントへ処理を分岐する（Ｓ６０、Ｓ６２）。次に要求フォーマットを生成するが（Ｓ６４）、この際に指定する読み出しデータのグローバル領域内のアドレスは、ＨＤＤ６００より読み出されたデータを格納するための空の領域である。１セクタが格納できるデータサイズを超えたサイズのデータを読み出す場合は、そのサイズごとに要求フォーマットを生成する。
【００４４】
要求フォーマットの生成が完了したら、アクセス要求発行部２０８は、書き込み処理同様、タスクＢが読み出し要求を認識できるようにする（Ｓ６６）。タスクＢのアクセス情報送受部２１２は、タスクＡからの読み出し要求を認識し、ＨＤＤコントローラ制御部２１０はＨＤＤ６００へのアクセスについてスケジューリングを行う（Ｓ６８）。そしてその結果に基づき、グローバル領域内の読み出し要求フォーマットの先頭アドレスをＨＤＤコントローラ６５０に与えることにより、ＨＤＤコントローラ６５０の動作を開始させ、ＨＤＤ６００からの読み出しを実現させる（Ｓ７０）。ＨＤＤコントローラ６５０はＨＤＤ６００より読み出したデータを、ＨＤＤコントローラ６５０に含まれるバッファに格納する。データの読み出し処理が終了したら、ＨＤＤコントローラ６５０はプロセッサ２００に対して割り込み信号を発生し、タスクＢはそれを受け付ける（Ｓ７２）。
【００４５】
次にタスクＢのアクセス情報送受部２１２は、ＨＤＤコントローラ６５０のバッファから、読み出し要求フォーマットにてグローバル領域内に設定されたアドレスへ、読み出したデータの転送処理を行うとともに、ＨＤＤ６００からの読み出し処理が終了した旨の通知を、共有メモリに書き込むなどしてタスクＡが認識できるようにする（Ｓ７４）。読み出したデータの転送は、プロセッサ２００に備えられたＤＭＡコントローラ３４を用いて行うことができる。転送されたデータは、ＨＤＤ６００の１セクタに格納できるサイズごとにグローバル領域に格納されるため、タスクＡのデータ整形部２０６はそれをつなげて一のデータとする（Ｓ７６）。このときも、タスクＡは貸し出しコードのうち、データ整形のための関数へと処理を分岐することにより、データ整形の処理を行う。Ｓ６０からＳ７６の処理を、読み出すべきデータを全て読み出すまで繰り返す。そして書き込み処理の場合と同様、タスクＡによって必要に応じてサービス利用終了処理が行われる。
【００４６】
以上述べた本実施の形態によれば、ＨＤＤドライバを使用するためのＡＰＩの仕様をＨＤＤコントローラのハードウェアから切り離し、ハードウェアを抽象化する。このとき、アプリケーションとＨＤＤとの仲裁を行うためのタスクは、アプリケーションとは別のプロセスに属し、アプリケーションはそのプロセスが提供するサービスを利用する。これにより、ＨＤＤを含むハードウェアに変更が生じても、それに対応してアプリケーションを更新する必要がなくなる。またアプリケーションプログラムの作成において、装置に接続されるＨＤＤの仕様を考慮する必要がなく、比較的容易な設定で、様々な仕様のＨＤＤへ対応した汎用的なプログラミングが可能となる。また仲裁を行うためのタスクは、アプリケーションのタスクに対してサービスを提供するために一時的にコードを貸し出し、アプリケーションのタスクはそれを利用して、要求フォーマットの生成やデータの整形処理を自らのタイムスライスにおいてあらかじめ行う。これにより、複数のタスクが同時期にアクセス要求を発行した場合、それらのアクセス要求を受け付けてから、要求フォーマットの生成、データの整形、スケジューリングなどの一連の入出力処理を一のタスクが行うのに比べ、効率よくアクセスを行うことが可能となり、入出力待ちによるアプリケーションのタスクの停止時間を削減することができる。このことは、ゲームなどリアルタイム性が重要となるアプリケーションでは特に有効である。また、本実施の形態は従来用いられてきたのと同様のハードウェア構成で実現されるため、導入障壁が低く、低コストでの導入が可能である。
【００４７】
実施の形態２
図７は本実施の形態における情報処理装置１０００を含むシステム２０００の全体構成を示すブロック図である。本実施の形態では複数の情報処理装置、１０００Ａおよび１０００Ｂが、異なるＬＡＮ(Local Area Network)、８００Ａおよび８００Ｂに接続され、それぞれのルータ１５００Ａおよび１５００Ｂによってインターネットなどのネットワークに接続される構成を有する。このようなシステム構成において例えば情報処理装置１０００Ａから情報処理装置１０００Ｂへデータを転送する場合、２つの情報処理装置１０００Ａおよび１０００Ｂに共通のプロトコルによってデータ転送のための処理が行われる。プロトコルの物理層において一度に伝送することのできるデータサイズは決まっているため、そのサイズを超える転送データはトランスポート層やネットワーク層などにおい分割され、それぞれのデータに対してシーケンス番号やＩＰアドレスなどの転送情報を含むヘッダを付加したパケット単位で転送される。本実施の形態ではこのようなデータの整形を、情報処理装置１０００Ａの転送要求元のタスクが行う。
【００４８】
基本的な動作は実施の形態１で説明したのと同様であるため、ここでは実施の形態１と異なる点にのみ言及する。実施の形態１では、タスクＢはＨＤＤコントローラ６５０の処理の一部を抽象化し、ＨＤＤ６００へのアクセス要求元であるタスクＡがその処理を行えるようにタスクＢがサービスを提供した。本実施の形態ではタスクＢは例えばプロトコルのトランスポート層におけるＴＣＰ(Transmission Control Protocol)の一部の処理をタスクＡが行えるようにタスクＢがサービスを提供する。したがってタスクＢは、ＴＣＰの処理コードの一部を抽象化して、タスクＡが参照することのできる関数としたサービスコードをメインメモリ５０に保持する。
【００４９】
実施の形態１の図４で示したのと同様、タスクＡはサービスの初期化要求をタスクＢに対して行い、タスクＢは各種の初期化処理を行う。タスクＡは転送データからセグメントを生成するための関数を含むタスクＢのサービスコードを、メインメモリ５０内の割り当てられた領域にマッピングする。その後は実施の形態１と同様、ＴＯＣの生成および、タスクＢへのグローバル領域のアドレス通知を行う。さらに図５と同様、タスクＡの処理をサービスコードのエントリポイントへ分岐することにより、転送データの分割、および必要なヘッダの付加処理を行い、セグメントを生成する。セグメントが形成されたら、タスクＢはその旨の通知を受け取り、アプリケーション層における転送用のアプリケーションを適宜起動させる。その後は通常のプロトコル処理により情報処理装置１０００Ａから情報処理装置１０００Ｂへのデータ転送が行われるが、すでにセグメントが形成されているため、情報処理装置１０００ＡのＴＣＰでは、コネクションの確立など、セグメント生成以外の処理のみ行えばよい。また、情報処理装置１０００ＢにおけるＴＣＰは、受け取ったセグメントをそのまま、データを受信すべきアプリケーションに対応するタスクに割り当てられたメインメモリ５０内の領域にＤＭＡコントローラ３４によってＤＭＡ転送し、当該タスクがＴＣＰの処理の一部を抽象化したサービスを利用して、一のデータに接続する。
【００５０】
以上述べた本実施の形態によれば、実施の形態１と同様、ネットワーク通信を行うプロトコルの処理の一部を切り離して抽象化し、転送要求元であるアプリケーションのタスクがそのコードを一時借りることによって、データの伝送に即したデータ整形を自らのタイムスライスで行う。これにより、ＴＣＰなどのプロトコル処理の負荷が軽減され、一度に複数のタスクからのデータ転送要求が発生した場合などに、効率よくコネクションを確率しデータ転送制御を行うことができる。さらに送信側情報処理装置１０００Ａでは、一のデータを構成する複数のセグメントをあらかじめ形成してから転送要求を発行するため、それらのセグメントを連続して転送できる。そのため受信側情報処理装置１０００Ｂはそれらの連続したセグメントの転送完了に対して一度だけ応答確認信号であるＡＣＫ(Acknowledgment)セグメントを送信すればよく、情報処理装置１０００間の通信回数を削減することができる。これによりネットワーク通信のための処理による待ち時間が短縮され、ネットワークを介して行うゲームなどリアルタイム性が重要となるアプリケーションでは特に、顕著な効果をもたらす。さらに従来用いられてきたハードウェア構成で実現できるため、低コストでの導入が可能である。
【００５１】
以上、本発明を実施の形態をもとに説明した。上記実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００５２】
例えば、上述の例ではプロセッサを時分割し、サービスを提供するタスクと、サービスを利用するアプリケーション側のタスクとがそれぞれのタイムスライスにおいて順番に処理されたが、それらのタスクを複数のプロセッサが独立に処理するようにしてもよい。この場合も、アプリケーション側の複数のタスクが同時期にＨＤＤへアクセス要求を行ったり、データ転送要求を行ったりした場合に、それぞれのタスクであらかじめ必要なデータを生成しておくことにより、アクセスや転送を制御するタスクの処理にかかる負荷が軽減され、アクセスや転送が効率的に行われるようになる。
【００５３】
また上述の実施の形態では、サービスの授受を行うタスクＡおよびタスクＢとして、アプリケーションに対応するタスクおよびデータの入出力を制御するタスクの例を示したが、そのどちらも、ＯＳが提供する機能を実現させるためのタスクなど、プロセッサが処理するいずれのタスクであってもよい。例えばタスクＢは、アプリケーションにファイルシステムを提供するタスク、またはアプリケーションにネットワーク環境を提供するタスクなどでもよい。この場合も、あるタスクに含まれる処理の一部を別のタスクのタイムスライスにおいて、または別のタスクを処理するプロセッサによって処理することにより、全体的な処理の効率が向上し、場合によっては実施の形態１で示したのと同様に、接続するハードウェアなどの仕様に変更が生じても汎用的な処理が可能となる。
【図面の簡単な説明】
【００５４】
【図１】実施の形態１における情報処理装置の構成を示すブロック図である。
【図２】実施の形態１における情報処理装置において複数のタスクを処理した場合の、メインメモリの割り当てについて模式的に示す図である。
【図３】実施の形態１における情報処理装置のプロセッサの構成を示すブロック図である。
【図４】実施の形態１においてデータ書き込みのためのサービスを提供するタスクの起動処理、および当該サービスの初期化処理の手順を示すフローチャートである。
【図５】実施の形態１においてタスクがデータ書き込みのためのサービスを利用する手順を示している。
【図６】実施の形態１においてタスクがデータ読み出しのためのサービスを利用する手順を示している。
【図７】実施の形態２における情報処理装置を含むシステムの全体構成を示すブロック図である。
【符号の説明】
【００５５】
５０  メインメモリ、  ２００  プロセッサ、  ２０２  タスク処理部、  ２０４  要求フォーマット生成部、  ２０６  データ整形部、  ２０８  アクセス要求発行部、  ２１０  ＨＤＤコントローラ制御部、  ２１２  アクセス情報送受部、  ６００  ＨＤＤ、  ６５０  ＨＤＤコントローラ、  １０００  情報処理装置。
【図１】
2007018195.tif 000003
【図２】
2007018195.tif 000004
【図３】
2007018195.tif 000005
【図４】
2007018195.tif 000006
【図５】
2007018195.tif 000007
【図６】
2007018195.tif 000008
【図７】
2007018195.tif 000009