(57)【特許請求の範囲】
【請求項１】
オペレーティングシステムの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初期化処理開始後の、スレッドが利用不可能な第１の状態において、前記I/O初期化処理に含まれる初期化処理であり、前記第１の状態において実行可能な第１の処理群を、予め定められた所定の順序で直列実行する第１の初期化ステップと、
前記第１の初期化処理ステップの処理実行後に前記スレッドが初期化され、前記スレッドが利用可能な第２の状態になってから、前記I/O初期化処理に含まれ、かつ、前記第１の処理群を構成する処理と異なる処理であり、前記第２の状態において実行可能な第２の処理群を、初期化するデバイスの依存関係に応じた順序で、前記スレッドを利用して実行する第２の初期化処理ステップと、
前記第２の初期化処理ステップの処理実行後にファイルのマウント処理が行われ、ユーザプロセスが利用可能な第３の状態になってから、前記I/O初期化処理に含まれ、かつ、前記第１の処理群および前記第２の処理群を構成する処理と異なる処理で構成される第３の処理群を、前記スレッドを利用して実行する第３の初期化処理ステップと
を含むことを特徴とするプログラム。
【請求項１４】
前記第１の処理群を構成する処理、前記第２の処理群を構成する処理、および前記第３の処理群を構成する処理は、予め定められており、
前記I/O初期化処理に含まれる全ての処理は、前記第１の処理群、前記第２の処理群、または前記第３の処理群のうち、いずれかに含まれる
ことを特徴とする請求項１３に記載のプログラム。
【請求項１５】
前記第１の処理群は、前記第２の処理群および前記第３の処理群を構成する処理と比較して、処理が単純であり、かつ、次の処理が実行可能になるまでの待機時間が長い処理で構成される
ことを特徴とする請求項１３に記載のプログラム。
【請求項１６】
前記第２の初期化処理ステップの処理は、前記デバイスの依存関係に応じて複数の段階に分けられた前記第２の処理群を、各段階ごとに並列実行する
ことを特徴とする請求項１３に記載のプログラム。
【請求項１７】
前記第２の初期化処理ステップの処理は、前記段階ごとにバリア同期をとり、前記段階において並列実行される全ての処理が完了するまで待機し、前記処理が全て完了した後、次の前記段階に含まれる処理を並列実行する
ことを特徴とする請求項１６に記載のプログラム。
【請求項１８】
前記第３の初期化処理ステップの処理は、必要に応じて、同期オブジェクトを用いてユーザプログラムと同期をとりながら、前記処理を実行する
ことを特徴とする請求項１３に記載のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は情報処理装置および方法、並びにプログラムに関し、特に、オペレーティングシステムの起動時間を短縮することができるようにした情報処理装置および方法、並びにプログラムに関する。
【０００２】
【従来の技術】
従来、オペレーティングシステム（以下、OS（Operating System）と称する）のカーネル起動時において実行されるI/O（Input/Output）の初期化処理は、例えばUNIX（登録商標）系OS等のように、デバイスドライバのフレームワークを明確に持つOSの場合、初期化関数が予め依存関係順等で登録されたテーブルが参照され、少数のスレッドを用いることにより、それらの初期化関数が順次実行されるという構成で行われていた。
【０００３】
例えば、図１に示されるように、従来の初期化処理１においては、まず、LOCK処理２によって、スレッドがロックされ、スレッド利用のための初期化処理３が行われる。それから、個々のI/Oの初期化処理を順番に呼び出して実行するI/O初期化処理４が行われる。I/O初期化処理４においては、I/O毎の初期化方法が登録された所定のテーブル５が参照され、登録順に個別初期化処理６が実行される。
【０００４】
I/O初期化処理４が終了すると、UNLOCK処理７によって、スレッドのロックが解除され、続けて、ファイルシステムのマウント処理８、およびinitファイルの実行処理（Exec /sbin/init）９が行われる。
【０００５】
また、例えば、起動処理が進み、複数スレッドが使用可能になり、並列処理が可能になってから、I/Oの初期化処理を行う方法もある。
【０００６】
図２の場合の、従来の初期化処理１１においては、まず、LOCK処理１２によって、スレッドがロックされ、スレッド利用のための初期化処理１３が行われた後、UNLOCK処理１４により、ロックが解除される。
【０００７】
そして、複数スレッドが使用可能になると、init関数呼び出し処理（Call init function of each driver parallel）１５により、初期化処理の互いの依存関係に基づいたテーブルが参照され、並列処理が可能なinitファイルの関数であるデバイスドライバを実行するために、複数のカーネルスレッド（new kernel threads）１５Ａが新規に生成され、それぞれ実行される。
【０００８】
なお、これらの処理は、バリア（barrier）１６によって、同期がとられており、カーネルスレッド１５Ａの全スレッドの処理が終了するまで、次の処理には進まないようになっている。
【０００９】
全スレッドの処理が終了すると、同様にして、init関数呼び出し処理（Call init function of each driver parallel）１７によって、複数のカーネルスレッド（new kernel threads）１７Ａが新規に生成され、それぞれ実行され、バリア１８によって同期がとられ、全スレッドの処理が完了すると、init関数呼び出し処理（Call init function of each driver parallel）１９によって、複数のカーネルスレッド（new kernel threads）１９Ａが新規に生成され、それぞれ実行され、バリア２０によって同期がとられる。
【００１０】
以上のようにして、初期化処理を行う全てのI/Oの初期化処理が完了すると、I/O初期化後に実行可能である各種の初期化処理２１が実行され、続けて、ファイルシステムのマウント処理２２、およびinitファイルの実行処理（Exec /sbin/init）９が行われる。
【００１１】
また、ファイルシステムのマウント処理、およびinitファイルの実行処理が終了し、ユーザプロセスが使用可能な状態になってから、通常の並列処理を用いて、I/Oの初期化処理を並列的に行う方法も考えられる。
【００１２】
例えば、複数の計算機を起動する場合、起動処理を行う計算機は、既に起動処理が完了した計算機と通信することによりOSをロードし、主記憶上の所定の位置に展開した後、制御をOSに渡す。制御を渡されたOSは、必要なページテーブルとスタックを主記憶上に用意し、起動処理を完了する。このようにすることで、起動処理が完了した１つの計算機を用いて複数の計算機を並行して起動させることができ、全体の起動時間を短縮することができる（例えば、特許文献１参照）。
【００１３】
また、他の例として、複数のプロセッサを有するシステムにおいて、親プロセッサが起動された後、親プロセッサが、複数存在する他の子プロセッサを並列に起動する方法もある。このようにすることで、起動処理が完了した１つのプロセッサを用いて複数のプロセッサを並行して起動させることができ、全体の起動時間を短縮することができる（例えば、特許文献２参照）。
【００１４】
【特許文献１】
特開平６−２９５２８９号公報（第４−５ページ、図６）
【００１５】
【特許文献２】
特開平１０−９７４６５号公報（第８−１０ページ、図３、図４）
【００１６】
【発明が解決しようとする課題】
以上のような方法においては、図３の表３１に示されるように、システムの状態が特定の段階になった時点でI/O初期化処理が行われる。
【００１７】
すなわち、従来の方法において、I/O初期化処理は、表３１の「シーケンシャル」のように、スレッドが利用できない状態（カーネルＢ実行時）において、直列的に実行されるようにするか、「並列実行」のように、スレッドが利用できる状態（カーネルＣ実行時）において、依存関係に応じて数段階に分割され、各段毎に並列実行されるようにするか、「Lazy Mode」のように、すべてのカーネルが起動され、ユーザプロセスが実行可能な状態になるまで待機してから実行されるようにしなければならなかった。
【００１８】
以上のように、起動処理の初期段階でI/O初期化処理を行う「シーケンシャル」の場合、各デバイスの初期化処理が直列的に実行されるため、デバイスの初期化処理における待ち時間を有効利用することができず、OSの起動時間を短縮することができないという課題があった。
【００１９】
また、起動処理の中間の段階でI/O初期化処理を行う「並列実行」の場合、初期化処理の並列化は、デバイスの依存関係により初期化順序に制約があるため、各段階においてバリア同期を設ける必要があり、粒度が制限されている。従って、デバイスの初期化処理における待ち時間を十分に有効利用することができず、OSの起動時間を短縮することができないという課題があった。また、この場合、スレッドが使用可能になるまで、I/Oの初期化処理が行われず、その間デバイスを使用することができないという課題もあった。
【００２０】
さらに、ユーザプロセスが実行可能になってからI/Oの初期化処理を行う「Lazy Mode」の場合、デバイスが使用不能な時間が長くなってしまい、１個のプロセッサにより制御される通常のシステムの起動処理には不向きであるという課題があった。
【００２１】
本発明はこのような状況に鑑みてなされたものであり、オペレーティングシステムの起動時間を短縮することができるようにしたものである。
【００２２】
【課題を解決するための手段】
本発明の情報処理装置は、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初期化処理に含まれ、かつ、第１の処理群および第２の処理群を構成する処理と異なる処理で構成される第３の処理群を、スレッドを利用して実行する第３の初期化処理ステップとをコンピュータに実現させることを特徴とする。
【００３５】
前記第１の処理群を構成する処理、第２の処理群を構成する処理、および第３の処理群を構成する処理は、予め定められており、I/O初期化処理に含まれる全ての処理は、第１の処理群、第２の処理群、または第３の処理群のうち、いずれかに含まれるようにすることができる。
【００３６】
前記第１の処理群は、第２の処理群および第３の処理群を構成する処理と比較して、処理が単純であり、かつ、次の処理が実行可能になるまでの待機時間が長い処理で構成されるようにすることができる。
【００３７】
前記第２の初期化処理ステップの処理は、デバイスの依存関係に応じて複数の段階に分けられた第２の処理群を、各段階ごとに並列実行するようにすることができる。
【００３８】
前記第２の初期化処理ステップの処理は、段階ごとにバリア同期をとり、段階において並列実行される全ての処理が完了するまで待機し、処理が全て完了した後、次の段階に含まれる処理を並列実行するようにすることができる。
【００３９】
前記第３の初期化処理ステップの処理は、必要に応じて、同期オブジェクトを用いてユーザプログラムと同期をとりながら、処理を実行するようにすることができる。
【００４０】
本発明の情報処理装置および方法、並びにプログラムにおいては、I/O初期化処理開始後の、スレッドが利用不可能な第１の状態において、I/O初期化処理に含まれる初期化処理であり、第１の状態において実行可能な第１の処理群が、予め定められた所定の順序で直列実行され、第１の処理群の各処理実行後にスレッドが初期化され、スレッドが利用可能な第２の状態になってから、I/O初期化処理に含まれ、かつ、第１の処理群を構成する処理と異なる処理であり、第２の状態において実行可能な第２の処理群が、初期化するデバイスの依存関係に応じた順序で、スレッドを利用して実行され、第２の処理群の各処理実行後にファイルのマウント処理が行われ、ユーザプロセスが利用可能な第３の状態になってから、I/O初期化処理に含まれ、かつ、第１の処理群および第２の処理群を構成する処理と異なる処理で構成される第３の処理群が、スレッドを利用して実行される。
【００４１】
【発明の実施の形態】
図４は、本発明を適用したハードディスクレコーダを用いた画像信号受信システムの構成例を表すブロック図である。
【００４２】
図４において、この画像信号受信システムは、チューナ５２が、アンテナ５１を介して、衛星を介して送信されてくる電波、または地上のアンテナを介して送信されてくる電波を受信する。どのチャンネルの電波を受信するかは、ハードディスク（HDD）レコーダ５３からの選局制御情報に対応して制御される。
【００４３】
リモートコントローラ５５は、ユーザにより操作され、その操作に対応する赤外線信号をハードディスクレコーダ５３に出力する。
【００４４】
すなわち、ユーザが、リモートコントローラ５５を操作して、所定の放送局の電波の受信を指令すると、ハードディスクレコーダ５３は、チューナ５２に対して、指定されたチャンネルを受信させるための選局制御信号を出力する。チューナ５２は、この選局制御信号に対応して、アンテナ５１を介して指定されたチャンネルの電波を受信し、その受信した信号をハードディスクレコーダ５３に出力する。ハードディスクレコーダ５３は、チューナ５２からの入力信号を、内蔵するハードディスクに記録する。
【００４５】
ハードディスクレコーダ５３はまた、リモートコントローラ５５を介して指令が入力されたとき、内蔵するハードディスクに記録されている画像データとオーディオデータを再生し、モニタ５４に出力する。
【００４６】
ハードディスクレコーダ５３は、例えば、図５に示すように構成されている。受信部６１は、リモートコントローラ５５からの赤外線信号を受信し、電気信号に変換してレコーダ制御部６６に出力する。レコーダ制御部６６は、CPU（Central Processing Unit）１０１、ROM（Read Only Memory）１０２、RAM（Random Access Memory）１０３により構成され、CPU１０１が、予めROM１０２、プログラムメモリ６８、またはワークメモリ６９に記憶されているプログラムやデータをRAM１０３にロードし、各種の処理を実行することによって、ハードディスクレコーダ５３の各部を制御する。
【００４７】
RAM１０３にはまた、CPU１０１が各種の処理を実行する上において必要なデータなども適宜記憶される。また、レコーダ制御部６６は、通信部７５を制御し、チューナ５２に対して選局制御信号を出力させる。
【００４８】
復調部６２は、チューナ５２より供給された信号を、復調し、デマルチプレクサ６３に出力する。デマルチプレクサ６３は、復調部６２より供給されたデータを、オーディオデータ、ビデオデータ、およびEPG（Electronic Program Guide）データに分離し、それぞれ、オーディオデコーダ６４、ビデオデコーダ６５、またはレコーダ制御部６６のCPU１０１に出力する。
【００４９】
オーディオデコーダ６４は、入力されたオーディオデータを、例えばMPEG方式でデコードし、記録再生部７３に出力する。ビデオデコーダ６５は、入力されたビデオデータを、例えばMPEG方式でデコードし、ディスプレイコンバータ７０に出力する。レコーダ制御部６６のCPU１０１は、入力されたEPGデータをEPGデータメモリ６７に供給し、記憶させる。
【００５０】
ディスプレイコンバータ７０は、ビデオデコーダ６５より供給されたビデオデータを、例えばNTSC方式のビデオデータにエンコードし、記録再生部７３に出力するとともに、ビデオデコーダ６５より供給されたビデオデータの画面のサイズを、モニタ５４のサイズに対応するサイズに変換し、NTSC方式のビデオデータに変換した後、アナログ信号に変換し、ディスプレイ制御部７２に出力する。
【００５１】
ディスプレイ制御部７２は、レコーダ制御部６６の制御のもと、OSD（On Screen Display）制御部７１が出力したOSD信号を、ディスプレイコンバータ７０より入力されたビデオ信号に重畳し、モニタ５４のディスプレイに出力し、表示させる。
【００５２】
モニタ５４にはまた、オーディオデコーダ６４が出力したオーディオデータが、D/Aコンバータ７４によりアナログ信号に変換されて供給されている。モニタ５４は、このオーディオ信号を内蔵するスピーカから出力する。
【００５３】
記録再生部７３は、ハードディスク（HDD）１０４を内蔵しており、オーディオデータおよびビデオデータを、例えばMPEG方式でエンコードしてから合成し、チャネルコーディングを行った後、ハードディスク１０４に記録する。
【００５４】
また、記録再生部７３は、ハードディスク１０４に記録されているデータを再生し、オーディオデータとビデオデータに分離する。そして、記録再生部７３は、オーディオデータをMPEG方式でデコードし、D/A変換し、モニタ５４のスピーカに出力するとともに、ビデオデータをMPEG方式でデコードし、D/A変換し、モニタ５４のディスプレイに出力する。
【００５５】
入力部７６は、ユーザからの各種の操作を受け付ける操作ボタン群、タッチパネル、キーボード、またはマウス等の入力デバイスにより構成され、上述したリモートコントローラ５５同様に、ユーザからの指示を受け付け、レコーダ制御部６６のCPU１０１にその指示を供給する。
【００５６】
また、ドライブ７７は、CPU１０１に制御され、適宜装着された、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア１０５に記憶されているコンピュータプログラムやデータを読み出し、CPU１０１に供給する。CPU１０１は、読み出したコンピュータプログラムやデータを、必要に応じて、RAM１０３にロードしたり、プログラムメモリ６８若しくはワークメモリ６９に記憶させたりする。
【００５７】
図６は、リモートコントローラ５５の構成例を表している。送信部１１１は、ユーザが、各種のボタンを操作したとき、その操作されたボタンに対応する赤外線信号を送信する。上述したように、この送信部１１１より送信された赤外線信号は、ハードディスクレコーダ５３の受信部６１により受信される。
【００５８】
電源ボタン１１２は、ハードディスクレコーダ５３の電源をオンまたはオフさせるとき操作される。この場合の電源のオフは、ハードディスクレコーダ５３の各部のうち、不必要な部分を休止させ、消費電力を下げる休止状態であり、主電源はオンのままである。従って、この状態においても、ハードディスク５３は、リモートコントローラ５５から送信された制御信号を受信することができる。休止状態（リモートコントローラ５５からの指示により電源がオフされた状態）において、ユーザがリモートコントローラ５５の電源ボタン１１２を操作して、電源オンを指示すると、レコーダ制御部６６のCPU１０１は、各部を制御して、ハードディスクレコーダ５３を、動作可能な状態（電源オンの状態）に移行させる。なお、完全に電源がオフの状態（主電源がオフの状態）にする場合、ユーザは、ハードディスクレコーダ５３の入力部７６の電源ボタン（図示せず）を操作する。
【００５９】
図６の切り替えボタン１１３の各ボタンは、モニタ５４に出力する画像や音声を切り替えさせたり、モニタ５４にされる各種の情報の表示を切り替えさせたりするときに操作される。
【００６０】
モニタ操作ボタン１１４の各ボタンは、モニタ５４の電源をオンまたはオフさせたり、出力される音量を調整したり、表示するチャンネルを切り替えたりさせる場合に操作される。Ｇガイドボタン１１５は、EPGの画像を表示させるとき、また、各番組のより詳細な内容を表す番組ガイドを表示させるとき操作される。
【００６１】
録画設定ボタン１１６は、録画開始指示や録画予約指示等の録画動作に関する指示を行うとき操作される。操作ボタン１１７は、ハードディスク１０４に記録されている番組を再生する際の、再生指示や停止指示等の各種の操作を指示するときに操作される。
【００６２】
設定ボタン１１８は、ハードディスクレコーダ５３の設定を行うメニュー画面を表示させる場合等、設定に関する操作を行うときに操作される。簡易操作ボタン１１９は、十字キー等により構成され、モニタ５４に表示されたGUI（Graphical User Interface）のアンカーを操作したり、上述した各種の操作を簡易的に操作したりするときに操作される。
【００６３】
以上のようなハードディスクレコーダ５３において、主電源がオフの状態から、ユーザが入力部７６を操作することにより電源が投入されると、レコーダ制御部６６のCPU１０１は、最初に、ROM１０２に記憶されている、ハードディスクレコーダ５３専用のOSのカーネルを実行し、起動処理を行う。
【００６４】
その際、CPU１０１は、各部を制御できるように、I/Oの初期化処理を、図７に示されるように行う。
【００６５】
図７において、最初にCPU１０１は、初期化処理の手順が記録されたテーブル（init()）１３１を読み込み、そのテーブルに従って、初期化処理を開始する。そして、CPU１０１は、まだスレッドが使用できない状態の、比較的早い段階で実行されるカーネルにおいて、第１のI/O初期化処理（Early init）１３２を直列的に行う。この第１のI/O初期化処理１３２においては、機械機構部分の電源オン処理等のように高度な処理が不要で、かつ、次の処理を実行できるようになるまでの待機時間の長い処理が行われる。
【００６６】
例えば、ハードディスク１０４の初期化処理の場合、CPU１０１の制御により、電源がオンされると、ハードディスク１０４は、内蔵するモータを始動してディスクを回転させ、モータの駆動を安定させるので、CPU１０１は、その間待機しなければならない。従って、このような場合、CPU１０１は、第１のI/O初期化処理１３２において、ハードディスク１０４の電源をオンし、モータの駆動が安定するまでの間に、後述するように、他の初期化処理を行う。
【００６７】
この第１のI/O初期化処理１３２においては、上述したようにスレッドを利用することができないので、初期化処理は、予め定められた順番で直列的に行われる。この順番は、このときCPU１０１において実行されているカーネル内に記述されていてもよいし、カーネルが参照する所定のテーブル等に記述されるようにしてもよい。
【００６８】
以上のようにして、第１のI/O初期化処理１３２を実行すると、CPU１０１は、次に、スレッドを初期化するために、スレッドをロックするロック処理（LOCK）１３３を行い、スレッド利用のための初期化処理１３４を実行してから、アンロック処理（UNLOCK）１３５によってスレッドをアンロックし、スレッドの利用が可能な状態にする。
【００６９】
そして、この段階において、CPU１０１は、第２のI/O初期化処理１３６を実行する。第２のI/O初期化処理１３６において、CPU１０１は、初期化するデバイスの依存関係に応じて、初期化処理を複数の段階に分割する。そして、各段階において、CPU１０１は、利用可能なスレッドを用いて処理を並列化し、実行する。このときCPU１０１は、各段階の間にバリア同期を設け、初期化処理の順序をデバイスの依存関係に対応させる。
【００７０】
以上のようにして、全段階の処理を終了させると、CPU１０１は、第２のI/O初期化処理を完了し、ユーザプロセスが実行できるように、ロック処理（LOCK）１３７を行ってから、ファイルシステムのマウント処理１３８を行い、アンロック処理（UNLOCK）１３９を実行する。
【００７１】
ユーザプロセスが実行可能になると、CPU１０１は、第３のI/O初期化処理（Lazy init）１４０を実行し、スレッドを用いて残りの初期化処理を、ユーザプロセスと同等に並列的に実行する。この第３の初期化処理１４０においては、上述したように、起動処理が開始されてから、その処理が実行できるようになるまでの時間が長く、かつ、使用不可能な状態である期間が長くても不都合のないデバイスに関する処理が行われる。なお、第３の初期化処理１４０において、並列処理される各初期化処理は、必要に応じて、他の初期化処理と通常の同期オブジェクトを用いて、同期をとりながら実行される。
【００７２】
以上のような第３の初期化処理１４０の実行を開始すると、CPU１０１は、さらに、initファイルの実行処理（Exec /sbin/init）１４１を行い、各種の設定を行い、起動を完了させる。
【００７３】
以上のような一連の初期化処理においてCPU１０１によって実行されるI/O初期化処理について、図８乃至図１０のフローチャートを参照して説明する。また、必要に応じて、図１１乃至図１３を参照して説明する。
【００７４】
最初に、CPU１０１は、図８のステップＳ１において、Earlyレジストリよりエントリ数を読み込む。
【００７５】
図１１は、CPU１０１が実行するI/O初期化処理のプログラムの構成例を示す図である。図１１のI/O初期化処理プログラム１５０の上から１行目の記述１５１「early_init_entry_number=N」を実行することにより、CPU１０１は、図８のステップＳ１において、図１２に示されるEarlyレジストリに登録されているエントリ数Nを読み込む。
【００７６】
図１２は、CPU１０１がOSの起動時に読み込むレジストリの構成例を示す模式図である。図１２において、レジストリ１６１のEarlyレジストリには１つのエントリが登録されている。従って、この場合、エントリ数N＝１である。
【００７７】
図８に戻り、ステップＳ２において、CPU１０１は、変数ｉに値「１」を代入する。そして、CPU１０１は、ステップＳ３において、Earlyレジストリのエントリのうち、未処理のエントリが存在するか否かを判定し、存在すると判定した場合、ステップＳ４に処理を進め、ドライバを制御し、ｉ番目のエントリを実行する。ｉ番目のエントリの実行が完了すると、CPU１０１は、ステップＳ５において、変数ｉの値に値「１」を加算し、ステップＳ３に処理を戻し、それ以降の処理を繰り返す。
【００７８】
ステップＳ３において、Earlyレジストリに登録されているエントリを全て実行し、未処理のエントリが存在しないと判定した場合、CPU１０１は、処理をステップＳ６に進める。
【００７９】
すなわち、CPU１０１は、第１のI/O初期化処理として、図１１の上から第２行目乃至第４行目の記述１５２の処理を実行し、Earlyレジストリに登録されているエントリを登録順に読み込み実行する。図１２の場合、Earlyレジストリには、実行initとして「hdd_early_init」が登録されており、CPU１０１は、このエントリに従って、ハードディスク１０４のドライバを制御し、「hdd_early_init」を実行する。
【００８０】
図１３は、ハードディスク１０４のドライバプログラムの構成例を示す図である。図１３に示されるように、ドライバ１７０には、第１のI/O初期化処理において実行される処理に関する記述１７１が含まれている。図１３の場合、CPU１０１は、記述１７１に基づいて、「power_register」の値を「１」にし、ハードディスク１０４の電源をオンさせる。
【００８１】
以上のようにして、CPU１０１は、図８のステップＳ３乃至Ｓ５を繰り返し、Earlyレジストリの全てのエントリについて処理を実行する。
【００８２】
ステップＳ６に処理を進めたCPU１０１は、並行処理が可能か否かを判定し、まだ、スレッドが使用可能になっておらず、並行処理ができないと判定した場合、ステップＳ７において、待機処理を行ってから処理をステップＳ６に戻し、それ以降の処理を繰り返す。すなわち、CPU１０１は、Earlyレジストリに登録されている処理が完了すると、スレッドが使用可能になるまで、ステップＳ６およびＳ７の処理を繰り返して待機する。
【００８３】
そして、図１１に示されるように、その他の処理により、スレッドが初期化され、スケジューラが初期化され、並行処理の初期化が行われる等して、スレッドが使用可能になり、ステップＳ６において、並行処理が可能であると判定した場合、CPU１０１は、処理を図９のステップＳ８に進める。
【００８４】
図９のステップＳ８において、CPU１０１は、第２のI/O初期化処理において実行される初期化処理の段階の数であるフェーズ数を読み込む。
【００８５】
CPU１０１は、図１１の中央付近の記述１５３の「phase_number=M」を実行し、フェーズレジストリの数をカウントし、フェーズ数を読み込む。図１２のレジストリの場合、「phase０」レジストリ乃至「phase３」レジストリが存在するので、フェーズ数M＝４となる。
【００８６】
フェーズ数を読み込んだCPU１０１は、図９のステップＳ９において、変数ｉに値「０」を代入し、処理をステップＳ１０に進め、各フェーズレジストリに登録されているエントリについての処理を開始する。
【００８７】
ステップＳ１０においてCPU１０１は、未処理のフェーズが存在するか否かを判定し、存在すると判定した場合、ステップＳ１１に処理を進め、ｉ番目のフェーズレジストリよりエントリ数を読み込む。
【００８８】
CPU１０１は、図１１の下から１０行目の記述１５４の「phase[i]_number=P」を実行し、ｉ番目のフェーズレジストリのエントリ数Pをカウントし、読み込む。図１２のレジストリにおいて、「phase０」レジストリのエントリ数を読み込んだ場合、エントリ数P=２となり、「phase１」レジストリのエントリ数を読み込んだ場合、エントリ数P=２となり、「phase２」レジストリのエントリ数を読み込んだ場合、エントリ数P=４となり、「phase３」レジストリのエントリ数を読み込んだ場合、エントリ数P=１となる。
【００８９】
エントリ数を読み込んだCPU１０１は、図９のステップＳ１２において、変数ｊに値「１」を代入し、処理をステップＳ１３に進め、各エントリについての処理を行う。
【００９０】
すなわち、CPU１０１は、ステップＳ１３において、未処理のエントリが存在するか否かを判定し、存在すると判定した場合、ステップＳ１４において、ｊ番目のエントリのスレッドを生成し、ステップＳ１５において、変数ｊの値に値「１」を加算し、ステップＳ１３に処理を戻し、それ以降の処理を繰り返す。
【００９１】
ステップＳ１３において、ｉ番目のフェーズレジストリに登録されている全てのエントリについて、スレッドを生成し、未処理のエントリが存在しないと判定した場合、CPU１０１は、処理をステップＳ１６に進める。
【００９２】
すなわち、CPU１０１は、第２のI/O初期化処理のｉ番目のフェーズとして、図１１の下から第９行目乃至第７行目の記述１５５の処理を実行し、フェーズ［ｉ］レジストリに登録されているエントリを登録順に読み込んでスレッドを生成し、各スレッドを並列的に実行させる。図１２の場合、フェーズ［ｉ］レジストリには、実行initとして「SCSI_CHIP_init」と「USB_CHIP_init」が登録されており、CPU１０１は、このエントリに従って、SCSI（Small Computer System Interface）コントローラとUSB（Universal Serial Bus）コントローラのドライバを実行させる。
【００９３】
以上のようにして、CPU１０１は、図９のステップＳ１３乃至Ｓ１５を繰り返し、フェーズ［ｉ］レジストリの全てのエントリについて処理を実行する。
【００９４】
そして、ステップＳ１６において、CPU１０１は、バリア同期を行い、ｉ番目のフェーズ内の全てのスレッドが終了したか否かを判定し、終了していないと判定した場合、ステップＳ１７において待機処理を行ってからステップＳ１６に処理を戻し、それ以降の処理を繰り返す。すなわち、CPU１０１は、フェーズ［ｉ］レジストリに登録されている各処理についてスレッドを生成すると、それらのスレッドの処理が完了するまで、ステップＳ１６およびＳ１７の処理を繰り返して待機する。
【００９５】
そして、ステップＳ１６において、フェーズ内の全てのスレッドが終了したと判定した場合、CPU１０１は、ステップＳ１８において、変数ｉの値に値「１」を加算した後、処理をステップＳ１０に戻し、それ以降の処理を繰り返す。
【００９６】
ステップＳ１０において、全てのフェーズレジストリについて全てのエントリを実行し、未処理のフェーズが存在しないと判定した場合、CPU１０１は、処理を図１０のステップＳ１９に進める。
【００９７】
すなわち、CPU１０１は、第２のI/O初期化処理として、図１１の下から第１１行目乃至第５行目の処理を実行し、各フェーズレジストリに登録されているエントリをフェーズ番号順に読み込み、複数のスレッドをたて、それらのスレッドに対して各フェーズにおいてバリア同期をとりながら、処理を実行する。
【００９８】
図１０のステップＳ１９において、CPU１０１は、上述した、Earlyレジストリやフェーズレジストリの場合と同様に、Lazyレジストリよりエントリ数を読み込む。
【００９９】
図１１の下から４行目の記述１５７「Lazy_number=Q」を実行することにより、CPU１０１は、図１０のステップＳ１９において、図１２に示されるLazyレジストリに登録されているエントリ数Qを読み込む。図１２において、Lazyレジストリには１つのエントリが登録されている。従って、この場合、エントリ数Q＝１である。
【０１００】
図１０に戻り、ステップＳ２０において、CPU１０１は、変数ｉに値「１」を代入する。そして、CPU１０１は、ステップＳ２１において、Lazyレジストリのエントリのうち、未処理のエントリが存在するか否かを判定し、存在すると判定した場合、ステップＳ２２に処理を進め、ドライバを制御し、ｉ番目のエントリのスレッドを生成し、ステップＳ２３において、変数ｉの値に値「１」を加算し、ステップＳ２１に処理を戻し、それ以降の処理を繰り返す。
【０１０１】
ステップＳ２１において、Lazyレジストリについて全てのエントリを実行し、未処理のエントリが存在しないと判定した場合、CPU１０１は、I/O初期化処理を終了する。
【０１０２】
すなわち、CPU１０１は、第３のI/O初期化処理として、図１１の下から第３行目乃至第１行目の処理を実行し、Lazyレジストリに登録されているエントリを登録順に読み込み、複数のスレッドをたて、それらのスレッドを用いて、初期化処理を実行する。なお、各スレッドは、必要に応じて、通常の同期処理が行われ、他のスレッドと同期をとることも可能である。
【０１０３】
図１２の場合、Lazyレジストリには、実行initとして「hdd_lazy_init」が登録されており、CPU１０１は、このエントリに従って、ハードディスク１０４のドライバを制御し、図１３のドライバ１７０の「hdd_lazy_init」を実行する。
【０１０４】
図１３に示されるように、ドライバ１７０には、第３のI/O初期化処理において実行される処理に関する記述１７１が含まれている。図１３の場合、CPU１０１は、記述１７２に基づいて、モータの動作が安定しておらず、次の処理の準備ができていない場合（if(!ready)）、待機し（sleep（sync））、次の処理が行える場合、プローブの初期化処理（issue prove cmd）を実行する等、それ以降に記述されている通りに実行する。
【０１０５】
以上のように、I/O初期化処理が実行されることにより、起動時の様々な段階において、初期化処理を行うことができるとともに、待機中に他の初期化処理を実行することができるので、起動処理時間を短縮することができる。
【０１０６】
例えば、図１４に示されるように、CPU１０１は、スレッドが使用できないEarlyモード時に、ハードディスクの電源をONする処理（HDDモータON）１８１を行う。そして、モータの駆動が安定するまでの間に、CPU１０１は、フェーズ０乃至フェーズ３モード時において、USBやSCSIに関連する初期化処理を行う。
【０１０７】
すなわち、CPU１０１は、フェーズ０において、SCSIコントローラに関する初期化処理であるSCSIチップ（SCSI_CHIP）１９１、および、USBコントローラに関する初期化処理であるUSBチップ（USB_CHIP）１９２のスレッドをたてて、実行させ、それらの処理が完了すると、フェーズ１に移行し、USB接続機器をリムーバブルメディアとして利用するためのドライバを初期化する処理であるUSBマスストレージ（USB Mass Storage）１９３、および、USB接続機器を制御するためのドライバを初期化する処理であるUSBシリアル（USB Serial）１９４のスレッドをたてて、実行させ、それらの処理が完了すると、フェーズ２に移行する。
【０１０８】
フェーズ２において、CPU１０１は、SCSIのバスのコントローラを初期化する処理であるSCSI BUS１９５、入力部７６のキーボードを初期化する処理であるキーボード１９６、入力部７６のマウスを初期化する処理であるマウス１９７、並びに、受信部６１において赤外線通信をするための初期化処理である赤外線１９８のスレッドをたてて、各スレッドを実行させ、それらの処理が完了すると、フェーズ３に移行し、ドライブ２９０を制御するためのコントローラを初期化する処理であるSCSIディスク（SCSI DISK）１９９のスレッドをたてて実行させ、処理が完了すると、Lazyモードに移行する。
【０１０９】
そして、モータの駆動が安定すると、CPU１０１は、Lazyモード（ユーザプロセス）において、ハードディスク１０４の初期化処理の続きを行う。
【０１１０】
例えば、CPU１０１は、Lazyモードにおいて、次の処理を開始できる状態になるまで待機処理１８２を行い、準備が完了したら、プローブの初期化処理１８３、パーティションのチェック処理１８４、および、ファイルシステムのマウント処理１８５等の処理を実行する。
【０１１１】
なお、Lazyモードにおいて、CPU１０１は、ユーザプロセスの使用が可能であるので、例えば、図１４に示されるように、ファイルシステムのマウント処理１８５に同期させ、録画スタート処理を実行させるようにしてもよい。
【０１１２】
以上に示されるように、CPU１０１は、図１５に示される表２１１の「新初期化方法」のように、システムの状態が変化する起動処理のどの段階においても、I/Oの初期化処理を実行することができる。従って、各種のI/O初期化処理を最適な段階で実行し、起動処理時間を短縮させることができる。
【０１１３】
なお、以上においては、CPU１０１は、図１２に示されるような構造のレジストリ１６１に基づいたスケジュールで、I/O初期化処理を実行するように説明したが、これに限らず、例えば、起動されるOSのカーネルと別に、図１６に示されるようなテーブル２３１を用意しておき、CPU１０１がこのテーブル２３１を参照して、I/O初期化処理を実行するようにしてもよい。その場合、参照先がレジストリ１６１からテーブル２３１に変化するだけで、CPU１０１が実行するI/O初期化処理の基本的な部分は図８乃至図１０を参照して説明した場合と同じであるので、その説明を省略する。
【０１１４】
以上においては、本発明を適用したI/O初期化処理をハードディスクレコーダに適用する場合について説明したが、本発明は、これに限らず、例えば、家庭用電化製品等に組み込まれる組み込み型OSのI/O初期化処理に適用してもよい。
【０１１５】
また、上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもでき、さらに、本発明のI/O初期化処理は、例えば、図１７に示されるように、パーソナルコンピュータ２５１においても適用することができる。
【０１１６】
図１７において、CPU２６１は、ROM２６２に記憶されているプログラム、または、記憶部２８６のハードディスク（HDD）２８７からRAM２６３にロードされたプログラムに従って各種の処理を実行する。RAM２６３にはまた、CPU２６１が各種の処理を実行する上において必要なデータなどが適宜記憶される。
【０１１７】
I/O初期化処理部２６４は、CPU２６１に制御され、ROM２６２に記憶されているプログラム等に基づいて、パーソナルコンピュータ２５１の起動時等に、上述したI/O初期化処理と同様のI/O初期化処理を行う。この初期化処理により、パーソナルコンピュータ２５１にOSが起動し、CPU２６１は、パーソナルコンピュータの各部を制御できるようになる。
【０１１８】
CPU２６１、ROM２６２、RAM２６３、およびI/O初期化処理部２６４は、バス２６５を介して相互に接続されている。このバス２６５にはまた、入出力インタフェース２７０も接続されている。
【０１１９】
入出力インタフェース２７０には、キーボード２８２、マウス２８３、およびUSBカメラ２８４などよりなる入力部２８１、CRT(Cathode Ray Tube)，LCD（Liquid Crystal Display）などよりなるディスプレイ、並びにスピーカなどよりなる出力部２８５、ＨＤＤ２８７などよりなる記憶部２８６、ブルートゥースモジュール２８９、または、モデムやターミナルアダプタなどより構成される通信部２８８が接続されている。
【０１２０】
入出力インタフェース２７０にはまた、必要に応じてドライブ２９０が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどにより構成されるリムーバブルメディア２９１が適宜装着され、それから読み出されたコンピュータプログラムが、必要に応じて記憶部２８６のHDD２８７等にインストールされる。
【０１２１】
このような、パーソナルコンピュータ２５１において、I/O初期化処理部２６４は、CPU２６１に制御され、図５に示されるハードディスクレコーダ５３のCPU１０１のように、図８乃至図１０に示されるI/O初期化処理と同様のI/O初期化処理を実行する。
【０１２２】
すなわち、I/O初期化処理部２６４は、図１８に示されるように、スレッドが使用不可能な状態（Early）において、記憶部２８６のハードディスク２８７の電源をオンする処理（HDDモータON）３０１を実行する。
【０１２３】
そして、モータの駆動が安定するまでの間にスレッドが利用可能になると、I/O初期化処理部２６４は、レジストリ等の情報に基づいたスケジュールに従い、フェーズ０において、SCSIコントローラに関する初期化処理であるSCSIチップ（SCSI_CHIP）３１１、および、USBコントローラに関する初期化処理であるUSBチップ（USB_CHIP）３１２のスレッドをたてて、実行させる。
【０１２４】
そして、I/O初期化処理部２６４は、それらの処理が完了すると、フェーズ１に移行し、USB接続機器をリムーバブルメディアとして利用するためのドライバを初期化する処理であるUSBマスストレージ（USB Mass Storage）３１３、USB接続機器を制御するためのドライバを初期化する処理であるUSBシリアル（USB Serial）３１４、および入力部２８１のUSBカメラ２８４を初期化する処理であるUSBカメラ３１５のスレッドをたてて、実行させ、それらの処理が完了すると、フェーズ２に移行する。
【０１２５】
フェーズ２において、I/O初期化処理部２６４は、SCSIのバスのコントローラを初期化する処理であるSCSI BUS３１６、入力部２８１のキーボード２８２を初期化する処理であるキーボード３１７、入力部２８１のマウス２８３を初期化する処理であるマウス３１８、並びに、通信部２８８のブルートゥースモジュール２８９を初期化する処理であるブルートゥース３１９のスレッドをたてて、各スレッドを実行させ、それらの処理が完了すると、フェーズ３に移行し、ドライブ２９０を初期化する処理であるSCSIディスク（SCSI DISK）３２０のスレッドをたてて実行させ、処理が完了すると、Lazyモードに移行する。
【０１２６】
そして、モータの駆動が安定すると、I/O初期化処理２６４は、Lazyモード（ユーザプロセス）において、ハードディスク２８７の初期化処理の続きを行う。
【０１２７】
例えば、I/O初期化処理部２６４は、Lazyモードにおいて、次の処理を開始できる状態になるまで待機処理３０２を行い、準備が完了したら、プローブの初期化処理３０３、パーティションのチェック処理３０４、および、ファイルシステムのマウント処理３０５等の処理を実行する。
【０１２８】
以上のようにI/O初期化処理部２６４がOSを起動することにより、パーソナルコンピュータ２５１のオペレーティングシステムの起動時間を短縮することができる。
【０１２９】
なお、Lazyモードにおいて、I/O初期化処理部２６４は、ユーザプロセスの使用が可能であるので、例えば、図１８に示されるように、ファイルシステムのマウント処理３０５に同期させ、ユーザプロセスによるアプリケーションスタート処理を実行させるようにしてもよい。
【０１３０】
なお、以上においても、図１６を参照して説明したように、I/O初期化処理のスケジュールをテーブル化しておき、I/O初期化処理部２６４がそれを参照するようにしてももちろんよい。
【０１３１】
また、図１７において、I/O初期化処理部２６４は、CPU２６１と別体で構成されるように説明したが、これに限らず、その機能の一部または全部がCPU２６１に含まれるようにしてもよい。
【０１３２】
一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば、汎用のパーソナルコンピュータなどに、ネットワークや記録媒体からインストールされる。
【０１３３】
この記録媒体は、図５または図１７に示されるように、装置本体とは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク（フレキシブルディスクを含む）、光ディスク（CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む）、光磁気ディスク（ＭＤ（Mini-Disk）を含む）、もしくは半導体メモリなどよりなるリムーバブルメディア１０５または２９１により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM１０２、または２６２や、ハードディスク１０４または２８７などで構成される。
【０１３４】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０１３５】
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【０１３６】
【発明の効果】
以上のように、本発明によれば、オペレーティングシステムのI/O初期化処理を実行することができる。特に、オペレーティングシステムの起動時間を短縮することができる。
【図面の簡単な説明】
【図１】従来のI/O初期化処理の方法の例を説明する図である。
【図２】従来のI/O初期化処理の方法の他の例を説明する図である。
【図３】  OS起動時におけるシステムの状態と、従来のI/O初期化処理を行うタイミングを示す図である。
【図４】本発明を適用したハードディスクレコーダを用いた画像信号受信システムの構成例を表すブロック図である。
【図５】図４のハードディスクレコーダの構成例を示すブロック図である。
【図６】図４のリモートコントローラのボタンの構成例を示す外観図である。
【図７】本発明を適用したI/O初期化処理の方法の例を説明する図である。
【図８】図４のハードディスクレコーダにおいて実行されるI/O初期化処理を説明するフローチャートである。
【図９】図４のハードディスクレコーダにおいて実行されるI/O初期化処理を説明する、図８に続くフローチャートである。
【図１０】図４のハードディスクレコーダにおいて実行されるI/O初期化処理を説明する、図９に続くフローチャートである。
【図１１】図４のCPUが実行するI/O初期化処理のプログラムの構成例を示す図である。
【図１２】図４のCPUがOSの起動時に読み込むレジストリの構成例を示す模式図である。
【図１３】図４のハードディスクのドライバプログラムの構成例を示す図である。
【図１４】図４のハードディスクレコーダにおいて実行されるI/O初期化処理の処理手順の例を説明する模式図である。
【図１５】図４のハードディスクレコーダのOS起動時におけるシステムの状態と、I/O初期化処理が実行されるタイミングの関係を表す図である。
【図１６】  I/O初期化処理のスケジュールを管理するテーブルの例を示す図である。
【図１７】本発明を適用したパーソナルコンピュータの構成例を示す図である。
【図１８】図１７のパーソナルコンピュータのOS起動時におけるシステムの状態と、I/O初期化処理が実行されるタイミングの関係を表す図である。
【符号の説明】
５３  ハードディスクレコーダ，  ６１  受信部，  ６６  レコーダ制御部，７６  入力部，  ７７  ドライブ，  １０１  CPU，  １０４  ハードディスク，  １３２  第１のI/O初期化処理，  １３６  第２のI/O初期化処理，  １４０  第３のI/O初期化処理，  １５０  I/O初期化処理プログラム，  １６１  レジストリ，  １７０  ドライバ，  ２３１  テーブル，  ２５１  パーソナルコンピュータ，  ２６１  CPU，  ２６４  I/O初期化処理部，  ２８２  キーボード，  ２８３  マウス，  ２８４  USBカメラ，  ２８７  ハードディスク，  ２８９  ブルートゥースモジュール，  ２９０  ドライブ
【図１】
0004187151.tif 000002
【図２】
0004187151.tif 000003
【図３】
0004187151.tif 000004
【図４】
0004187151.tif 000005
【図５】
0004187151.tif 000006
【図６】
0004187151.tif 000007
【図７】
0004187151.tif 000008
【図８】
0004187151.tif 000009
【図９】
0004187151.tif 000010
【図１０】
0004187151.tif 000011
【図１１】
0004187151.tif 000012
【図１２】
0004187151.tif 000013
【図１３】
0004187151.tif 000014
【図１４】
0004187151.tif 000015
【図１５】
0004187151.tif 000016
【図１６】
0004187151.tif 000017
【図１７】
0004187151.tif 000018
【図１８】
0004187151.tif 000019