(57)【要約】【課題】オペレーティングシステムの起動時間を短縮する。【解決手段】ＣＰＵは、まだスレッドが使用できない状態において、高度な処理が不要で、かつ、次の処理を実行できるようになるまでの待機時間の長い初期化処理を実行する第１のＩ／Ｏ初期化処理（Ｅａｒｌｙ  ｉｎｉｔ）１３２を直列的に行う。次に、ＣＰＵは、スレッドの利用が可能な状態において、初期化するデバイスの依存関係に応じて、利用可能なスレッドを用いて処理が並列化された複数の段階で構成され、各段階の間にバリア同期が設けられている第２のＩ／Ｏ初期化処理１３６を実行する。そして、ユーザプロセスが実行可能になると、ＣＰＵは、ユーザプロセスと同等に、スレッドを用いて残りの初期化処理を並列的に実行する、第３のＩ／Ｏ初期化処理（Ｌａｚｙ  ｉｎｉｔ）１４０を実行する。本発明は、家庭用電化製品に適用することができる。【選択図】      図７
2004213530.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステムのＩ／Ｏ初期化処理を実行する情報処理装置において、
スレッドが利用不可能な第１の状態において、前記Ｉ／Ｏ初期化処理に含まれる初期化処理であり、前記第１の状態において実行可能な第１の処理群を、予め定められた所定の順序で直列実行する第１の初期化手段と、
前記スレッドが利用可能な第２の状態において、前記Ｉ／Ｏ初期化処理に含まれ、かつ、前記第１の処理群を構成する処理と異なる処理であり、前記第２の状態において実行可能な第２の処理群を、初期化するデバイスの依存関係に応じた順序で、前記スレッドを利用して実行する第２の初期化処理手段と、
ユーザプロセスが利用可能な第３の状態において、前記Ｉ／Ｏ初期化処理に含まれ、かつ、前記第１の処理群および前記第２の処理群を構成する処理と異なる処理で構成される第３の処理群を、前記スレッドを利用して実行する第３の初期化処理手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記第１の処理群を構成する処理、前記第２の処理群を構成する処理、および前記第３の処理群を構成する処理は、予め定められており、
前記Ｉ／Ｏ初期化処理に含まれる全ての処理は、前記第１の処理群、前記第２の処理群、または前記第３の処理群のうち、いずれかに含まれる
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１の処理群は、前記第２の処理群および前記第３の処理群を構成する処理と比較して、処理が単純であり、かつ、次の処理が実行可能になるまでの待機時間が長い処理で構成される
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記第２の初期化処理手段は、前記デバイスの依存関係に応じて複数の段階に分けられた前記第２の処理群を、各段階ごとに並列実行する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記第２の初期化処理手段は、前記段階ごとにバリア同期をとり、前記段階において並列実行される全ての処理が完了するまで待機し、前記処理が全て完了した後、次の前記段階に含まれる処理を並列実行する
ことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記第３の初期化処理手段は、必要に応じて、同期オブジェクトを用いてユーザプログラムと同期をとりながら、前記処理を実行する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項７】
オペレーティングシステムのＩ／Ｏ初期化処理を実行する情報処理装置の情報処理方法において、
スレッドが利用不可能な第１の状態において、前記Ｉ／Ｏ初期化処理に含まれる初期化処理であり、前記第１の状態において実行可能な第１の処理群を、予め定められた所定の順序で直列実行する第１の初期化ステップと、
前記スレッドが利用可能な第２の状態において、前記Ｉ／Ｏ初期化処理に含まれ、かつ、前記第１の処理群を構成する処理と異なる処理であり、前記第２の状態において実行可能な第２の処理群を、初期化するデバイスの依存関係に応じた順序で、前記スレッドを利用して実行する第２の初期化処理ステップと、
ユーザプロセスが利用可能な第３の状態において、前記Ｉ／Ｏ初期化処理に含まれ、かつ、前記第１の処理群および前記第２の処理群を構成する処理と異なる処理で構成される第３の処理群を、前記スレッドを利用して実行する第３の初期化処理ステップと
を含むことを特徴とする情報処理方法。
【請求項８】
前記第１の処理群を構成する処理、前記第２の処理群を構成する処理、および前記第３の処理群を構成する処理は、予め定められており、
前記Ｉ／Ｏ初期化処理に含まれる全ての処理は、前記第１の処理群、前記第２の処理群、または前記第３の処理群のうち、いずれかに含まれる
ことを特徴とする請求項７に記載の情報処理方法。
【請求項９】
前記第１の処理群は、前記第２の処理群および前記第３の処理群を構成する処理と比較して、処理が単純であり、かつ、次の処理が実行可能になるまでの待機時間が長い処理で構成される
ことを特徴とする請求項７に記載の情報処理方法。
【請求項１０】
前記第２の初期化処理ステップの処理は、前記デバイスの依存関係に応じて複数の段階に分けられた前記第２の処理群を、各段階ごとに並列実行する
ことを特徴とする請求項７に記載の情報処理方法。
【請求項１１】
前記第２の初期化処理ステップの処理は、前記段階ごとにバリア同期をとり、前記段階において並列実行される全ての処理が完了するまで待機し、前記処理が全て完了した後、次の前記段階に含まれる処理を並列実行する
ことを特徴とする請求項１０に記載の情報処理方法。
【請求項１２】
前記第３の初期化処理ステップの処理は、必要に応じて、同期オブジェクトを用いてユーザプログラムと同期をとりながら、前記処理を実行する
ことを特徴とする請求項７に記載の情報処理方法。
【請求項１３】
オペレーティングシステムのＩ／Ｏ初期化処理をコンピュータに行わせるプログラムにおいて、
スレッドが利用不可能な第１の状態において、前記Ｉ／Ｏ初期化処理に含まれる初期化処理であり、前記第１の状態において実行可能な第１の処理群を、予め定められた所定の順序で直列実行する第１の初期化ステップと、
前記スレッドが利用可能な第２の状態において、前記Ｉ／Ｏ初期化処理に含まれ、かつ、前記第１の処理群を構成する処理と異なる処理であり、前記第２の状態において実行可能な第２の処理群を、初期化するデバイスの依存関係に応じた順序で、前記スレッドを利用して実行する第２の初期化処理ステップと、
ユーザプロセスが利用可能な第３の状態において、前記Ｉ／Ｏ初期化処理に含まれ、かつ、前記第１の処理群および前記第２の処理群を構成する処理と異なる処理で構成される第３の処理群を、前記スレッドを利用して実行する第３の初期化処理ステップと
を含むことを特徴とするプログラム。
【請求項１４】
前記第１の処理群を構成する処理、前記第２の処理群を構成する処理、および前記第３の処理群を構成する処理は、予め定められており、
前記Ｉ／Ｏ初期化処理に含まれる全ての処理は、前記第１の処理群、前記第２の処理群、または前記第３の処理群のうち、いずれかに含まれる
ことを特徴とする請求項１３に記載のプログラム。
【請求項１５】
前記第１の処理群は、前記第２の処理群および前記第３の処理群を構成する処理と比較して、処理が単純であり、かつ、次の処理が実行可能になるまでの待機時間が長い処理で構成される
ことを特徴とする請求項１３に記載のプログラム。
【請求項１６】
前記第２の初期化処理ステップの処理は、前記デバイスの依存関係に応じて複数の段階に分けられた前記第２の処理群を、各段階ごとに並列実行する
ことを特徴とする請求項１３に記載のプログラム。
【請求項１７】
前記第２の初期化処理ステップの処理は、前記段階ごとにバリア同期をとり、前記段階において並列実行される全ての処理が完了するまで待機し、前記処理が全て完了した後、次の前記段階に含まれる処理を並列実行する
ことを特徴とする請求項１６に記載のプログラム。
【請求項１８】
前記第３の初期化処理ステップの処理は、必要に応じて、同期オブジェクトを用いてユーザプログラムと同期をとりながら、前記処理を実行する
ことを特徴とする請求項１３に記載のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は情報処理装置および方法、並びにプログラムに関し、特に、オペレーティングシステムの起動時間を短縮することができるようにした情報処理装置および方法、並びにプログラムに関する。
【０００２】
【従来の技術】
従来、オペレーティングシステム（以下、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と称する）のカーネル起動時において実行されるＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）の初期化処理は、例えばＵＮＩＸ（登録商標）系ＯＳ等のように、デバイスドライバのフレームワークを明確に持つＯＳの場合、初期化関数が予め依存関係順等で登録されたテーブルが参照され、少数のスレッドを用いることにより、それらの初期化関数が順次実行されるという構成で行われていた。
【０００３】
例えば、図１に示されるように、従来の初期化処理１においては、まず、ＬＯＣＫ処理２によって、スレッドがロックされ、スレッド利用のための初期化処理３が行われる。それから、個々のＩ／Ｏの初期化処理を順番に呼び出して実行するＩ／Ｏ初期化処理４が行われる。Ｉ／Ｏ初期化処理４においては、Ｉ／Ｏ毎の初期化方法が登録された所定のテーブル５が参照され、登録順に個別初期化処理６が実行される。
【０００４】
Ｉ／Ｏ初期化処理４が終了すると、ＵＮＬＯＣＫ処理７によって、スレッドのロックが解除され、続けて、ファイルシステムのマウント処理８、およびｉｎｉｔファイルの実行処理（Ｅｘｅｃ  ／ｓｂｉｎ／ｉｎｉｔ）９が行われる。
【０００５】
また、例えば、起動処理が進み、複数スレッドが使用可能になり、並列処理が可能になってから、Ｉ／Ｏの初期化処理を行う方法もある。
【０００６】
図２の場合の、従来の初期化処理１１においては、まず、ＬＯＣＫ処理１２によって、スレッドがロックされ、スレッド利用のための初期化処理１３が行われた後、ＵＮＬＯＣＫ処理１４により、ロックが解除される。
【０００７】
そして、複数スレッドが使用可能になると、ｉｎｉｔ関数呼び出し処理（Ｃａｌｌ  ｉｎｉｔ  ｆｕｎｃｔｉｏｎ  ｏｆ  ｅａｃｈ  ｄｒｉｖｅｒ  ｐａｒａｌｌｅｌ）１５により、初期化処理の互いの依存関係に基づいたテーブルが参照され、並列処理が可能なｉｎｉｔファイルの関数であるデバイスドライバを実行するために、複数のカーネルスレッド（ｎｅｗ  ｋｅｒｎｅｌ  ｔｈｒｅａｄｓ）１５Ａが新規に生成され、それぞれ実行される。
【０００８】
なお、これらの処理は、バリア（ｂａｒｒｉｅｒ）１６によって、同期がとられており、カーネルスレッド１５Ａの全スレッドの処理が終了するまで、次の処理には進まないようになっている。
【０００９】
全スレッドの処理が終了すると、同様にして、ｉｎｉｔ関数呼び出し処理（Ｃａｌｌ  ｉｎｉｔ  ｆｕｎｃｔｉｏｎ  ｏｆ  ｅａｃｈ  ｄｒｉｖｅｒ  ｐａｒａｌｌｅｌ）１７によって、複数のカーネルスレッド（ｎｅｗ  ｋｅｒｎｅｌ  ｔｈｒｅａｄｓ）１７Ａが新規に生成され、それぞれ実行され、バリア１８によって同期がとられ、全スレッドの処理が完了すると、ｉｎｉｔ関数呼び出し処理（Ｃａｌｌ  ｉｎｉｔ  ｆｕｎｃｔｉｏｎ  ｏｆ  ｅａｃｈ  ｄｒｉｖｅｒ  ｐａｒａｌｌｅｌ）１９によって、複数のカーネルスレッド（ｎｅｗ  ｋｅｒｎｅｌ  ｔｈｒｅａｄｓ）１９Ａが新規に生成され、それぞれ実行され、バリア２０によって同期がとられる。
【００１０】
以上のようにして、初期化処理を行う全てのＩ／Ｏの初期化処理が完了すると、Ｉ／Ｏ初期化後に実行可能である各種の初期化処理２１が実行され、続けて、ファイルシステムのマウント処理２２、およびｉｎｉｔファイルの実行処理（Ｅｘｅｃ  ／ｓｂｉｎ／ｉｎｉｔ）９が行われる。
【００１１】
また、ファイルシステムのマウント処理、およびｉｎｉｔファイルの実行処理が終了し、ユーザプロセスが使用可能な状態になってから、通常の並列処理を用いて、Ｉ／Ｏの初期化処理を並列的に行う方法も考えられる。
【００１２】
例えば、複数の計算機を起動する場合、起動処理を行う計算機は、既に起動処理が完了した計算機と通信することによりＯＳをロードし、主記憶上の所定の位置に展開した後、制御をＯＳに渡す。制御を渡されたＯＳは、必要なページテーブルとスタックを主記憶上に用意し、起動処理を完了する。このようにすることで、起動処理が完了した１つの計算機を用いて複数の計算機を並行して起動させることができ、全体の起動時間を短縮することができる（例えば、特許文献１参照）。
【００１３】
また、他の例として、複数のプロセッサを有するシステムにおいて、親プロセッサが起動された後、親プロセッサが、複数存在する他の子プロセッサを並列に起動する方法もある。このようにすることで、起動処理が完了した１つのプロセッサを用いて複数のプロセッサを並行して起動させることができ、全体の起動時間を短縮することができる（例えば、特許文献２参照）。
【００１４】
【特許文献１】
特開平６−２９５２８９号公報（第４−５ページ、図６）
【００１５】
【特許文献２】
特開平１０−９７４６５号公報（第８−１０ページ、図３、図４）
【００１６】
【発明が解決しようとする課題】
以上のような方法においては、図３の表３１に示されるように、システムの状態が特定の段階になった時点でＩ／Ｏ初期化処理が行われる。
【００１７】
すなわち、従来の方法において、Ｉ／Ｏ初期化処理は、表３１の「シーケンシャル」のように、スレッドが利用できない状態（カーネルＢ実行時）において、直列的に実行されるようにするか、「並列実行」のように、スレッドが利用できる状態（カーネルＣ実行時）において、依存関係に応じて数段階に分割され、各段毎に並列実行されるようにするか、「Ｌａｚｙ  Ｍｏｄｅ」のように、すべてのカーネルが起動され、ユーザプロセスが実行可能な状態になるまで待機してから実行されるようにしなければならなかった。
【００１８】
以上のように、起動処理の初期段階でＩ／Ｏ初期化処理を行う「シーケンシャル」の場合、各デバイスの初期化処理が直列的に実行されるため、デバイスの初期化処理における待ち時間を有効利用することができず、ＯＳの起動時間を短縮することができないという課題があった。
【００１９】
また、起動処理の中間の段階でＩ／Ｏ初期化処理を行う「並列実行」の場合、初期化処理の並列化は、デバイスの依存関係により初期化順序に制約があるため、各段階においてバリア同期を設ける必要があり、粒度が制限されている。従って、デバイスの初期化処理における待ち時間を十分に有効利用することができず、ＯＳの起動時間を短縮することができないという課題があった。また、この場合、スレッドが使用可能になるまで、Ｉ／Ｏの初期化処理が行われず、その間デバイスを使用することができないという課題もあった。
【００２０】
さらに、ユーザプロセスが実行可能になってからＩ／Ｏの初期化処理を行う「Ｌａｚｙ  Ｍｏｄｅ」の場合、デバイスが使用不能な時間が長くなってしまい、１個のプロセッサにより制御される通常のシステムの起動処理には不向きであるという課題があった。
【００２１】
本発明はこのような状況に鑑みてなされたものであり、オペレーティングシステムの起動時間を短縮することができるようにしたものである。
【００２２】
【課題を解決するための手段】
本発明の情報処理装置は、スレッドが利用不可能な第１の状態において、Ｉ／Ｏ初期化処理に含まれる初期化処理であり、第１の状態において実行可能な第１の処理群を、予め定められた所定の順序で直列実行する第１の初期化手段と、スレッドが利用可能な第２の状態において、Ｉ／Ｏ初期化処理に含まれ、かつ、第１の処理群を構成する処理と異なる処理であり、第２の状態において実行可能な第２の処理群を、初期化するデバイスの依存関係に応じた順序で、スレッドを利用して実行する第２の初期化処理手段と、ユーザプロセスが利用可能な第３の状態において、Ｉ／Ｏ初期化処理に含まれ、かつ、第１の処理群および第２の処理群を構成する処理と異なる処理で構成される第３の処理群を、スレッドを利用して実行する第３の初期化処理手段とを備えることを特徴とする。
【００２３】
前記第１の処理群を構成する処理、第２の処理群を構成する処理、および第３の処理群を構成する処理は、予め定められており、Ｉ／Ｏ初期化処理に含まれる全ての処理は、第１の処理群、第２の処理群、または第３の処理群のうち、いずれかに含まれるようにすることができる。
【００２４】
前記第１の処理群は、第２の処理群および第３の処理群を構成する処理と比較して、処理が単純であり、かつ、次の処理が実行可能になるまでの待機時間が長い処理で構成されるようにすることができる。
【００２５】
前記第２の初期化処理手段は、デバイスの依存関係に応じて複数の段階に分けられた第２の処理群を、各段階ごとに並列実行するようにすることができる。
【００２６】
前記第２の初期化処理手段は、段階ごとにバリア同期をとり、段階において並列実行される全ての処理が完了するまで待機し、処理が全て完了した後、次の段階に含まれる処理を並列実行するようにすることができる。
【００２７】
前記第３の初期化処理手段は、必要に応じて、同期オブジェクトを用いてユーザプログラムと同期をとりながら、処理を実行するようにすることができる。
【００２８】
本発明の情報処理方法は、スレッドが利用不可能な第１の状態において、Ｉ／Ｏ初期化処理に含まれる初期化処理であり、第１の状態において実行可能な第１の処理群を、予め定められた所定の順序で直列実行する第１の初期化ステップと、スレッドが利用可能な第２の状態において、Ｉ／Ｏ初期化処理に含まれ、かつ、第１の処理群を構成する処理と異なる処理であり、第２の状態において実行可能な第２の処理群を、初期化するデバイスの依存関係に応じた順序で、スレッドを利用して実行する第２の初期化処理ステップと、ユーザプロセスが利用可能な第３の状態において、Ｉ／Ｏ初期化処理に含まれ、かつ、第１の処理群および第２の処理群を構成する処理と異なる処理で構成される第３の処理群を、スレッドを利用して実行する第３の初期化処理ステップとを含むことを特徴とする。
【００２９】
前記第１の処理群を構成する処理、第２の処理群を構成する処理、および第３の処理群を構成する処理は、予め定められており、Ｉ／Ｏ初期化処理に含まれる全ての処理は、第１の処理群、第２の処理群、または第３の処理群のうち、いずれかに含まれるようにすることができる。
【００３０】
前記第１の処理群は、第２の処理群および第３の処理群を構成する処理と比較して、処理が単純であり、かつ、次の処理が実行可能になるまでの待機時間が長い処理で構成されるようにすることができる。
【００３１】
前記第２の初期化処理ステップの処理は、デバイスの依存関係に応じて複数の段階に分けられた第２の処理群を、各段階ごとに並列実行するようにすることができる。
【００３２】
前記第２の初期化処理ステップの処理は、段階ごとにバリア同期をとり、段階において並列実行される全ての処理が完了するまで待機し、処理が全て完了した後、次の段階に含まれる処理を並列実行するようにすることができる。
【００３３】
前記第３の初期化処理ステップの処理は、必要に応じて、同期オブジェクトを用いてユーザプログラムと同期をとりながら、処理を実行するようにすることができる。
【００３４】
本発明のプログラムは、スレッドが利用不可能な第１の状態において、Ｉ／Ｏ初期化処理に含まれる初期化処理であり、第１の状態において実行可能な第１の処理群を、予め定められた所定の順序で直列実行する第１の初期化ステップと、スレッドが利用可能な第２の状態において、Ｉ／Ｏ初期化処理に含まれ、かつ、第１の処理群を構成する処理と異なる処理であり、第２の状態において実行可能な第２の処理群を、初期化するデバイスの依存関係に応じた順序で、スレッドを利用して実行する第２の初期化処理ステップと、ユーザプロセスが利用可能な第３の状態において、Ｉ／Ｏ初期化処理に含まれ、かつ、第１の処理群および第２の処理群を構成する処理と異なる処理で構成される第３の処理群を、スレッドを利用して実行する第３の初期化処理ステップとをコンピュータに実現させることを特徴とする。
【００３５】
前記第１の処理群を構成する処理、第２の処理群を構成する処理、および第３の処理群を構成する処理は、予め定められており、Ｉ／Ｏ初期化処理に含まれる全ての処理は、第１の処理群、第２の処理群、または第３の処理群のうち、いずれかに含まれるようにすることができる。
【００３６】
前記第１の処理群は、第２の処理群および第３の処理群を構成する処理と比較して、処理が単純であり、かつ、次の処理が実行可能になるまでの待機時間が長い処理で構成されるようにすることができる。
【００３７】
前記第２の初期化処理ステップの処理は、デバイスの依存関係に応じて複数の段階に分けられた第２の処理群を、各段階ごとに並列実行するようにすることができる。
【００３８】
前記第２の初期化処理ステップの処理は、段階ごとにバリア同期をとり、段階において並列実行される全ての処理が完了するまで待機し、処理が全て完了した後、次の段階に含まれる処理を並列実行するようにすることができる。
【００３９】
前記第３の初期化処理ステップの処理は、必要に応じて、同期オブジェクトを用いてユーザプログラムと同期をとりながら、処理を実行するようにすることができる。
【００４０】
本発明の情報処理装置および方法、並びにプログラムにおいては、スレッドが利用不可能な第１の状態において、Ｉ／Ｏ初期化処理に含まれる初期化処理であり、第１の状態において実行可能な第１の処理群が、予め定められた所定の順序で直列実行され、スレッドが利用可能な第２の状態において、Ｉ／Ｏ初期化処理に含まれ、かつ、第１の処理群を構成する処理と異なる処理であり、第２の状態において実行可能な第２の処理群が、初期化するデバイスの依存関係に応じた順序で、スレッドを利用して実行され、ユーザプロセスが利用可能な第３の状態において、Ｉ／Ｏ初期化処理に含まれ、かつ、第１の処理群および第２の処理群を構成する処理と異なる処理で構成される第３の処理群が、スレッドを利用して実行される。
【００４１】
【発明の実施の形態】
図４は、本発明を適用したハードディスクレコーダを用いた画像信号受信システムの構成例を表すブロック図である。
【００４２】
図４において、この画像信号受信システムは、チューナ５２が、アンテナ５１を介して、衛星を介して送信されてくる電波、または地上のアンテナを介して送信されてくる電波を受信する。どのチャンネルの電波を受信するかは、ハードディスク（ＨＤＤ）レコーダ５３からの選局制御情報に対応して制御される。
【００４３】
リモートコントローラ５５は、ユーザにより操作され、その操作に対応する赤外線信号をハードディスクレコーダ５３に出力する。
【００４４】
すなわち、ユーザが、リモートコントローラ５５を操作して、所定の放送局の電波の受信を指令すると、ハードディスクレコーダ５３は、チューナ５２に対して、指定されたチャンネルを受信させるための選局制御信号を出力する。チューナ５２は、この選局制御信号に対応して、アンテナ５１を介して指定されたチャンネルの電波を受信し、その受信した信号をハードディスクレコーダ５３に出力する。ハードディスクレコーダ５３は、チューナ５２からの入力信号を、内蔵するハードディスクに記録する。
【００４５】
ハードディスクレコーダ５３はまた、リモートコントローラ５５を介して指令が入力されたとき、内蔵するハードディスクに記録されている画像データとオーディオデータを再生し、モニタ５４に出力する。
【００４６】
ハードディスクレコーダ５３は、例えば、図５に示すように構成されている。受信部６１は、リモートコントローラ５５からの赤外線信号を受信し、電気信号に変換してレコーダ制御部６６に出力する。レコーダ制御部６６は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３により構成され、ＣＰＵ１０１が、予めＲＯＭ１０２、プログラムメモリ６８、またはワークメモリ６９に記憶されているプログラムやデータをＲＡＭ１０３にロードし、各種の処理を実行することによって、ハードディスクレコーダ５３の各部を制御する。
【００４７】
ＲＡＭ１０３にはまた、ＣＰＵ１０１が各種の処理を実行する上において必要なデータなども適宜記憶される。また、レコーダ制御部６６は、通信部７５を制御し、チューナ５２に対して選局制御信号を出力させる。
【００４８】
復調部６２は、チューナ５２より供給された信号を、復調し、デマルチプレクサ６３に出力する。デマルチプレクサ６３は、復調部６２より供給されたデータを、オーディオデータ、ビデオデータ、およびＥＰＧ（Ｅｌｅｃｔｒｏｎｉｃ  Ｐｒｏｇｒａｍ  Ｇｕｉｄｅ）データに分離し、それぞれ、オーディオデコーダ６４、ビデオデコーダ６５、またはレコーダ制御部６６のＣＰＵ１０１に出力する。
【００４９】
オーディオデコーダ６４は、入力されたオーディオデータを、例えばＭＰＥＧ方式でデコードし、記録再生部７３に出力する。ビデオデコーダ６５は、入力されたビデオデータを、例えばＭＰＥＧ方式でデコードし、ディスプレイコンバータ７０に出力する。レコーダ制御部６６のＣＰＵ１０１は、入力されたＥＰＧデータをＥＰＧデータメモリ６７に供給し、記憶させる。
【００５０】
ディスプレイコンバータ７０は、ビデオデコーダ６５より供給されたビデオデータを、例えばＮＴＳＣ方式のビデオデータにエンコードし、記録再生部７３に出力するとともに、ビデオデコーダ６５より供給されたビデオデータの画面のサイズを、モニタ５４のサイズに対応するサイズに変換し、ＮＴＳＣ方式のビデオデータに変換した後、アナログ信号に変換し、ディスプレイ制御部７２に出力する。
【００５１】
ディスプレイ制御部７２は、レコーダ制御部６６の制御のもと、ＯＳＤ（Ｏｎ  Ｓｃｒｅｅｎ  Ｄｉｓｐｌａｙ）制御部７１が出力したＯＳＤ信号を、ディスプレイコンバータ７０より入力されたビデオ信号に重畳し、モニタ５４のディスプレイに出力し、表示させる。
【００５２】
モニタ５４にはまた、オーディオデコーダ６４が出力したオーディオデータが、Ｄ／Ａコンバータ７４によりアナログ信号に変換されて供給されている。モニタ５４は、このオーディオ信号を内蔵するスピーカから出力する。
【００５３】
記録再生部７３は、ハードディスク（ＨＤＤ）１０４を内蔵しており、オーディオデータおよびビデオデータを、例えばＭＰＥＧ方式でエンコードしてから合成し、チャネルコーディングを行った後、ハードディスク１０４に記録する。
【００５４】
また、記録再生部７３は、ハードディスク１０４に記録されているデータを再生し、オーディオデータとビデオデータに分離する。そして、記録再生部７３は、オーディオデータをＭＰＥＧ方式でデコードし、Ｄ／Ａ変換し、モニタ５４のスピーカに出力するとともに、ビデオデータをＭＰＥＧ方式でデコードし、Ｄ／Ａ変換し、モニタ５４のディスプレイに出力する。
【００５５】
入力部７６は、ユーザからの各種の操作を受け付ける操作ボタン群、タッチパネル、キーボード、またはマウス等の入力デバイスにより構成され、上述したリモートコントローラ５５同様に、ユーザからの指示を受け付け、レコーダ制御部６６のＣＰＵ１０１にその指示を供給する。
【００５６】
また、ドライブ７７は、ＣＰＵ１０１に制御され、適宜装着された、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア１０５に記憶されているコンピュータプログラムやデータを読み出し、ＣＰＵ１０１に供給する。ＣＰＵ１０１は、読み出したコンピュータプログラムやデータを、必要に応じて、ＲＡＭ１０３にロードしたり、プログラムメモリ６８若しくはワークメモリ６９に記憶させたりする。
【００５７】
図６は、リモートコントローラ５５の構成例を表している。送信部１１１は、ユーザが、各種のボタンを操作したとき、その操作されたボタンに対応する赤外線信号を送信する。上述したように、この送信部１１１より送信された赤外線信号は、ハードディスクレコーダ５３の受信部６１により受信される。
【００５８】
電源ボタン１１２は、ハードディスクレコーダ５３の電源をオンまたはオフさせるとき操作される。この場合の電源のオフは、ハードディスクレコーダ５３の各部のうち、不必要な部分を休止させ、消費電力を下げる休止状態であり、主電源はオンのままである。従って、この状態においても、ハードディスク５３は、リモートコントローラ５５から送信された制御信号を受信することができる。休止状態（リモートコントローラ５５からの指示により電源がオフされた状態）において、ユーザがリモートコントローラ５５の電源ボタン１１２を操作して、電源オンを指示すると、レコーダ制御部６６のＣＰＵ１０１は、各部を制御して、ハードディスクレコーダ５３を、動作可能な状態（電源オンの状態）に移行させる。なお、完全に電源がオフの状態（主電源がオフの状態）にする場合、ユーザは、ハードディスクレコーダ５３の入力部７６の電源ボタン（図示せず）を操作する。
【００５９】
図６の切り替えボタン１１３の各ボタンは、モニタ５４に出力する画像や音声を切り替えさせたり、モニタ５４にされる各種の情報の表示を切り替えさせたりするときに操作される。
【００６０】
モニタ操作ボタン１１４の各ボタンは、モニタ５４の電源をオンまたはオフさせたり、出力される音量を調整したり、表示するチャンネルを切り替えたりさせる場合に操作される。Ｇガイドボタン１１５は、ＥＰＧの画像を表示させるとき、また、各番組のより詳細な内容を表す番組ガイドを表示させるとき操作される。
【００６１】
録画設定ボタン１１６は、録画開始指示や録画予約指示等の録画動作に関する指示を行うとき操作される。操作ボタン１１７は、ハードディスク１０４に記録されている番組を再生する際の、再生指示や停止指示等の各種の操作を指示するときに操作される。
【００６２】
設定ボタン１１８は、ハードディスクレコーダ５３の設定を行うメニュー画面を表示させる場合等、設定に関する操作を行うときに操作される。簡易操作ボタン１１９は、十字キー等により構成され、モニタ５４に表示されたＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）のアンカーを操作したり、上述した各種の操作を簡易的に操作したりするときに操作される。
【００６３】
以上のようなハードディスクレコーダ５３において、主電源がオフの状態から、ユーザが入力部７６を操作することにより電源が投入されると、レコーダ制御部６６のＣＰＵ１０１は、最初に、ＲＯＭ１０２に記憶されている、ハードディスクレコーダ５３専用のＯＳのカーネルを実行し、起動処理を行う。
【００６４】
その際、ＣＰＵ１０１は、各部を制御できるように、Ｉ／Ｏの初期化処理を、図７に示されるように行う。
【００６５】
図７において、最初にＣＰＵ１０１は、初期化処理の手順が記録されたテーブル（ｉｎｉｔ（））１３１を読み込み、そのテーブルに従って、初期化処理を開始する。そして、ＣＰＵ１０１は、まだスレッドが使用できない状態の、比較的早い段階で実行されるカーネルにおいて、第１のＩ／Ｏ初期化処理（Ｅａｒｌｙ  ｉｎｉｔ）１３２を直列的に行う。この第１のＩ／Ｏ初期化処理１３２においては、機械機構部分の電源オン処理等のように高度な処理が不要で、かつ、次の処理を実行できるようになるまでの待機時間の長い処理が行われる。
【００６６】
例えば、ハードディスク１０４の初期化処理の場合、ＣＰＵ１０１の制御により、電源がオンされると、ハードディスク１０４は、内蔵するモータを始動してディスクを回転させ、モータの駆動を安定させるので、ＣＰＵ１０１は、その間待機しなければならない。従って、このような場合、ＣＰＵ１０１は、第１のＩ／Ｏ初期化処理１３２において、ハードディスク１０４の電源をオンし、モータの駆動が安定するまでの間に、後述するように、他の初期化処理を行う。
【００６７】
この第１のＩ／Ｏ初期化処理１３２においては、上述したようにスレッドを利用することができないので、初期化処理は、予め定められた順番で直列的に行われる。この順番は、このときＣＰＵ１０１において実行されているカーネル内に記述されていてもよいし、カーネルが参照する所定のテーブル等に記述されるようにしてもよい。
【００６８】
以上のようにして、第１のＩ／Ｏ初期化処理１３２を実行すると、ＣＰＵ１０１は、次に、スレッドを初期化するために、スレッドをロックするロック処理（ＬＯＣＫ）１３３を行い、スレッド利用のための初期化処理１３４を実行してから、アンロック処理（ＵＮＬＯＣＫ）１３５によってスレッドをアンロックし、スレッドの利用が可能な状態にする。
【００６９】
そして、この段階において、ＣＰＵ１０１は、第２のＩ／Ｏ初期化処理１３６を実行する。第２のＩ／Ｏ初期化処理１３６において、ＣＰＵ１０１は、初期化するデバイスの依存関係に応じて、初期化処理を複数の段階に分割する。そして、各段階において、ＣＰＵ１０１は、利用可能なスレッドを用いて処理を並列化し、実行する。このときＣＰＵ１０１は、各段階の間にバリア同期を設け、初期化処理の順序をデバイスの依存関係に対応させる。
【００７０】
以上のようにして、全段階の処理を終了させると、ＣＰＵ１０１は、第２のＩ／Ｏ初期化処理を完了し、ユーザプロセスが実行できるように、ロック処理（ＬＯＣＫ）１３７を行ってから、ファイルシステムのマウント処理１３８を行い、アンロック処理（ＵＮＬＯＣＫ）１３９を実行する。
【００７１】
ユーザプロセスが実行可能になると、ＣＰＵ１０１は、第３のＩ／Ｏ初期化処理（Ｌａｚｙ  ｉｎｉｔ）１４０を実行し、スレッドを用いて残りの初期化処理を、ユーザプロセスと同等に並列的に実行する。この第３の初期化処理１４０においては、上述したように、起動処理が開始されてから、その処理が実行できるようになるまでの時間が長く、かつ、使用不可能な状態である期間が長くても不都合のないデバイスに関する処理が行われる。なお、第３の初期化処理１４０において、並列処理される各初期化処理は、必要に応じて、他の初期化処理と通常の同期オブジェクトを用いて、同期をとりながら実行される。
【００７２】
以上のような第３の初期化処理１４０の実行を開始すると、ＣＰＵ１０１は、さらに、ｉｎｉｔファイルの実行処理（Ｅｘｅｃ  ／ｓｂｉｎ／ｉｎｉｔ）１４１を行い、各種の設定を行い、起動を完了させる。
【００７３】
以上のような一連の初期化処理においてＣＰＵ１０１によって実行されるＩ／Ｏ初期化処理について、図８乃至図１０のフローチャートを参照して説明する。また、必要に応じて、図１１乃至図１３を参照して説明する。
【００７４】
最初に、ＣＰＵ１０１は、図８のステップＳ１において、Ｅａｒｌｙレジストリよりエントリ数を読み込む。
【００７５】
図１１は、ＣＰＵ１０１が実行するＩ／Ｏ初期化処理のプログラムの構成例を示す図である。図１１のＩ／Ｏ初期化処理プログラム１５０の上から１行目の記述１５１「ｅａｒｌｙ＿ｉｎｉｔ＿ｅｎｔｒｙ＿ｎｕｍｂｅｒ＝Ｎ」を実行することにより、ＣＰＵ１０１は、図８のステップＳ１において、図１２に示されるＥａｒｌｙレジストリに登録されているエントリ数Ｎを読み込む。
【００７６】
図１２は、ＣＰＵ１０１がＯＳの起動時に読み込むレジストリの構成例を示す模式図である。図１２において、レジストリ１６１のＥａｒｌｙレジストリには１つのエントリが登録されている。従って、この場合、エントリ数Ｎ＝１である。
【００７７】
図８に戻り、ステップＳ２において、ＣＰＵ１０１は、変数ｉに値「１」を代入する。そして、ＣＰＵ１０１は、ステップＳ３において、Ｅａｒｌｙレジストリのエントリのうち、未処理のエントリが存在するか否かを判定し、存在すると判定した場合、ステップＳ４に処理を進め、ドライバを制御し、ｉ番目のエントリを実行する。ｉ番目のエントリの実行が完了すると、ＣＰＵ１０１は、ステップＳ５において、変数ｉの値に値「１」を加算し、ステップＳ３に処理を戻し、それ以降の処理を繰り返す。
【００７８】
ステップＳ３において、Ｅａｒｌｙレジストリに登録されているエントリを全て実行し、未処理のエントリが存在しないと判定した場合、ＣＰＵ１０１は、処理をステップＳ６に進める。
【００７９】
すなわち、ＣＰＵ１０１は、第１のＩ／Ｏ初期化処理として、図１１の上から第２行目乃至第４行目の記述１５２の処理を実行し、Ｅａｒｌｙレジストリに登録されているエントリを登録順に読み込み実行する。図１２の場合、Ｅａｒｌｙレジストリには、実行ｉｎｉｔとして「ｈｄｄ＿ｅａｒｌｙ＿ｉｎｉｔ」が登録されており、ＣＰＵ１０１は、このエントリに従って、ハードディスク１０４のドライバを制御し、「ｈｄｄ＿ｅａｒｌｙ＿ｉｎｉｔ」を実行する。
【００８０】
図１３は、ハードディスク１０４のドライバプログラムの構成例を示す図である。図１３に示されるように、ドライバ１７０には、第１のＩ／Ｏ初期化処理において実行される処理に関する記述１７１が含まれている。図１３の場合、ＣＰＵ１０１は、記述１７１に基づいて、「ｐｏｗｅｒ＿ｒｅｇｉｓｔｅｒ」の値を「１」にし、ハードディスク１０４の電源をオンさせる。
【００８１】
以上のようにして、ＣＰＵ１０１は、図８のステップＳ３乃至Ｓ５を繰り返し、Ｅａｒｌｙレジストリの全てのエントリについて処理を実行する。
【００８２】
ステップＳ６に処理を進めたＣＰＵ１０１は、並行処理が可能か否かを判定し、まだ、スレッドが使用可能になっておらず、並行処理ができないと判定した場合、ステップＳ７において、待機処理を行ってから処理をステップＳ６に戻し、それ以降の処理を繰り返す。すなわち、ＣＰＵ１０１は、Ｅａｒｌｙレジストリに登録されている処理が完了すると、スレッドが使用可能になるまで、ステップＳ６およびＳ７の処理を繰り返して待機する。
【００８３】
そして、図１１に示されるように、その他の処理により、スレッドが初期化され、スケジューラが初期化され、並行処理の初期化が行われる等して、スレッドが使用可能になり、ステップＳ６において、並行処理が可能であると判定した場合、ＣＰＵ１０１は、処理を図９のステップＳ８に進める。
【００８４】
図９のステップＳ８において、ＣＰＵ１０１は、第２のＩ／Ｏ初期化処理において実行される初期化処理の段階の数であるフェーズ数を読み込む。
【００８５】
ＣＰＵ１０１は、図１１の中央付近の記述１５３の「ｐｈａｓｅ＿ｎｕｍｂｅｒ＝Ｍ」を実行し、フェーズレジストリの数をカウントし、フェーズ数を読み込む。図１２のレジストリの場合、「ｐｈａｓｅ０」レジストリ乃至「ｐｈａｓｅ３」レジストリが存在するので、フェーズ数Ｍ＝４となる。
【００８６】
フェーズ数を読み込んだＣＰＵ１０１は、図９のステップＳ９において、変数ｉに値「０」を代入し、処理をステップＳ１０に進め、各フェーズレジストリに登録されているエントリについての処理を開始する。
【００８７】
ステップＳ１０においてＣＰＵ１０１は、未処理のフェーズが存在するか否かを判定し、存在すると判定した場合、ステップＳ１１に処理を進め、ｉ番目のフェーズレジストリよりエントリ数を読み込む。
【００８８】
ＣＰＵ１０１は、図１１の下から１０行目の記述１５４の「ｐｈａｓｅ［ｉ］＿ｎｕｍｂｅｒ＝Ｐ」を実行し、ｉ番目のフェーズレジストリのエントリ数Ｐをカウントし、読み込む。図１２のレジストリにおいて、「ｐｈａｓｅ０」レジストリのエントリ数を読み込んだ場合、エントリ数Ｐ＝２となり、「ｐｈａｓｅ１」レジストリのエントリ数を読み込んだ場合、エントリ数Ｐ＝２となり、「ｐｈａｓｅ２」レジストリのエントリ数を読み込んだ場合、エントリ数Ｐ＝４となり、「ｐｈａｓｅ３」レジストリのエントリ数を読み込んだ場合、エントリ数Ｐ＝１となる。
【００８９】
エントリ数を読み込んだＣＰＵ１０１は、図９のステップＳ１２において、変数ｊに値「１」を代入し、処理をステップＳ１３に進め、各エントリについての処理を行う。
【００９０】
すなわち、ＣＰＵ１０１は、ステップＳ１３において、未処理のエントリが存在するか否かを判定し、存在すると判定した場合、ステップＳ１４において、ｊ番目のエントリのスレッドを生成し、ステップＳ１５において、変数ｊの値に値「１」を加算し、ステップＳ１３に処理を戻し、それ以降の処理を繰り返す。
【００９１】
ステップＳ１３において、ｉ番目のフェーズレジストリに登録されている全てのエントリについて、スレッドを生成し、未処理のエントリが存在しないと判定した場合、ＣＰＵ１０１は、処理をステップＳ１６に進める。
【００９２】
すなわち、ＣＰＵ１０１は、第２のＩ／Ｏ初期化処理のｉ番目のフェーズとして、図１１の下から第９行目乃至第７行目の記述１５５の処理を実行し、フェーズ［ｉ］レジストリに登録されているエントリを登録順に読み込んでスレッドを生成し、各スレッドを並列的に実行させる。図１２の場合、フェーズ［ｉ］レジストリには、実行ｉｎｉｔとして「ＳＣＳＩ＿ＣＨＩＰ＿ｉｎｉｔ」と「ＵＳＢ＿ＣＨＩＰ＿ｉｎｉｔ」が登録されており、ＣＰＵ１０１は、このエントリに従って、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）コントローラとＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）コントローラのドライバを実行させる。
【００９３】
以上のようにして、ＣＰＵ１０１は、図９のステップＳ１３乃至Ｓ１５を繰り返し、フェーズ［ｉ］レジストリの全てのエントリについて処理を実行する。
【００９４】
そして、ステップＳ１６において、ＣＰＵ１０１は、バリア同期を行い、ｉ番目のフェーズ内の全てのスレッドが終了したか否かを判定し、終了していないと判定した場合、ステップＳ１７において待機処理を行ってからステップＳ１６に処理を戻し、それ以降の処理を繰り返す。すなわち、ＣＰＵ１０１は、フェーズ［ｉ］レジストリに登録されている各処理についてスレッドを生成すると、それらのスレッドの処理が完了するまで、ステップＳ１６およびＳ１７の処理を繰り返して待機する。
【００９５】
そして、ステップＳ１６において、フェーズ内の全てのスレッドが終了したと判定した場合、ＣＰＵ１０１は、ステップＳ１８において、変数ｉの値に値「１」を加算した後、処理をステップＳ１０に戻し、それ以降の処理を繰り返す。
【００９６】
ステップＳ１０において、全てのフェーズレジストリについて全てのエントリを実行し、未処理のフェーズが存在しないと判定した場合、ＣＰＵ１０１は、処理を図１０のステップＳ１９に進める。
【００９７】
すなわち、ＣＰＵ１０１は、第２のＩ／Ｏ初期化処理として、図１１の下から第１１行目乃至第５行目の処理を実行し、各フェーズレジストリに登録されているエントリをフェーズ番号順に読み込み、複数のスレッドをたて、それらのスレッドに対して各フェーズにおいてバリア同期をとりながら、処理を実行する。
【００９８】
図１０のステップＳ１９において、ＣＰＵ１０１は、上述した、Ｅａｒｌｙレジストリやフェーズレジストリの場合と同様に、Ｌａｚｙレジストリよりエントリ数を読み込む。
【００９９】
図１１の下から４行目の記述１５７「Ｌａｚｙ＿ｎｕｍｂｅｒ＝Ｑ」を実行することにより、ＣＰＵ１０１は、図１０のステップＳ１９において、図１２に示されるＬａｚｙレジストリに登録されているエントリ数Ｑを読み込む。図１２において、Ｌａｚｙレジストリには１つのエントリが登録されている。従って、この場合、エントリ数Ｑ＝１である。
【０１００】
図１０に戻り、ステップＳ２０において、ＣＰＵ１０１は、変数ｉに値「１」を代入する。そして、ＣＰＵ１０１は、ステップＳ２１において、Ｌａｚｙレジストリのエントリのうち、未処理のエントリが存在するか否かを判定し、存在すると判定した場合、ステップＳ２２に処理を進め、ドライバを制御し、ｉ番目のエントリのスレッドを生成し、ステップＳ２３において、変数ｉの値に値「１」を加算し、ステップＳ２１に処理を戻し、それ以降の処理を繰り返す。
【０１０１】
ステップＳ２１において、Ｌａｚｙレジストリについて全てのエントリを実行し、未処理のエントリが存在しないと判定した場合、ＣＰＵ１０１は、Ｉ／Ｏ初期化処理を終了する。
【０１０２】
すなわち、ＣＰＵ１０１は、第３のＩ／Ｏ初期化処理として、図１１の下から第３行目乃至第１行目の処理を実行し、Ｌａｚｙレジストリに登録されているエントリを登録順に読み込み、複数のスレッドをたて、それらのスレッドを用いて、初期化処理を実行する。なお、各スレッドは、必要に応じて、通常の同期処理が行われ、他のスレッドと同期をとることも可能である。
【０１０３】
図１２の場合、Ｌａｚｙレジストリには、実行ｉｎｉｔとして「ｈｄｄ＿ｌａｚｙ＿ｉｎｉｔ」が登録されており、ＣＰＵ１０１は、このエントリに従って、ハードディスク１０４のドライバを制御し、図１３のドライバ１７０の「ｈｄｄ＿ｌａｚｙ＿ｉｎｉｔ」を実行する。
【０１０４】
図１３に示されるように、ドライバ１７０には、第３のＩ／Ｏ初期化処理において実行される処理に関する記述１７１が含まれている。図１３の場合、ＣＰＵ１０１は、記述１７２に基づいて、モータの動作が安定しておらず、次の処理の準備ができていない場合（ｉｆ（！ｒｅａｄｙ））、待機し（ｓｌｅｅｐ（ｓｙｎｃ））、次の処理が行える場合、プローブの初期化処理（ｉｓｓｕｅ  ｐｒｏｖｅ  ｃｍｄ）を実行する等、それ以降に記述されている通りに実行する。
【０１０５】
以上のように、Ｉ／Ｏ初期化処理が実行されることにより、起動時の様々な段階において、初期化処理を行うことができるとともに、待機中に他の初期化処理を実行することができるので、起動処理時間を短縮することができる。
【０１０６】
例えば、図１４に示されるように、ＣＰＵ１０１は、スレッドが使用できないＥａｒｌｙモード時に、ハードディスクの電源をＯＮする処理（ＨＤＤモータＯＮ）１８１を行う。そして、モータの駆動が安定するまでの間に、ＣＰＵ１０１は、フェーズ０乃至フェーズ３モード時において、ＵＳＢやＳＣＳＩに関連する初期化処理を行う。
【０１０７】
すなわち、ＣＰＵ１０１は、フェーズ０において、ＳＣＳＩコントローラに関する初期化処理であるＳＣＳＩチップ（ＳＣＳＩ＿ＣＨＩＰ）１９１、および、ＵＳＢコントローラに関する初期化処理であるＵＳＢチップ（ＵＳＢ＿ＣＨＩＰ）１９２のスレッドをたてて、実行させ、それらの処理が完了すると、フェーズ１に移行し、ＵＳＢ接続機器をリムーバブルメディアとして利用するためのドライバを初期化する処理であるＵＳＢマスストレージ（ＵＳＢ  Ｍａｓｓ  Ｓｔｏｒａｇｅ）１９３、および、ＵＳＢ接続機器を制御するためのドライバを初期化する処理であるＵＳＢシリアル（ＵＳＢ  Ｓｅｒｉａｌ）１９４のスレッドをたてて、実行させ、それらの処理が完了すると、フェーズ２に移行する。
【０１０８】
フェーズ２において、ＣＰＵ１０１は、ＳＣＳＩのバスのコントローラを初期化する処理であるＳＣＳＩ  ＢＵＳ１９５、入力部７６のキーボードを初期化する処理であるキーボード１９６、入力部７６のマウスを初期化する処理であるマウス１９７、並びに、受信部６１において赤外線通信をするための初期化処理である赤外線１９８のスレッドをたてて、各スレッドを実行させ、それらの処理が完了すると、フェーズ３に移行し、ドライブ２９０を制御するためのコントローラを初期化する処理であるＳＣＳＩディスク（ＳＣＳＩ  ＤＩＳＫ）１９９のスレッドをたてて実行させ、処理が完了すると、Ｌａｚｙモードに移行する。
【０１０９】
そして、モータの駆動が安定すると、ＣＰＵ１０１は、Ｌａｚｙモード（ユーザプロセス）において、ハードディスク１０４の初期化処理の続きを行う。
【０１１０】
例えば、ＣＰＵ１０１は、Ｌａｚｙモードにおいて、次の処理を開始できる状態になるまで待機処理１８２を行い、準備が完了したら、プローブの初期化処理１８３、パーティションのチェック処理１８４、および、ファイルシステムのマウント処理１８５等の処理を実行する。
【０１１１】
なお、Ｌａｚｙモードにおいて、ＣＰＵ１０１は、ユーザプロセスの使用が可能であるので、例えば、図１４に示されるように、ファイルシステムのマウント処理１８５に同期させ、録画スタート処理を実行させるようにしてもよい。
【０１１２】
以上に示されるように、ＣＰＵ１０１は、図１５に示される表２１１の「新初期化方法」のように、システムの状態が変化する起動処理のどの段階においても、Ｉ／Ｏの初期化処理を実行することができる。従って、各種のＩ／Ｏ初期化処理を最適な段階で実行し、起動処理時間を短縮させることができる。
【０１１３】
なお、以上においては、ＣＰＵ１０１は、図１２に示されるような構造のレジストリ１６１に基づいたスケジュールで、Ｉ／Ｏ初期化処理を実行するように説明したが、これに限らず、例えば、起動されるＯＳのカーネルと別に、図１６に示されるようなテーブル２３１を用意しておき、ＣＰＵ１０１がこのテーブル２３１を参照して、Ｉ／Ｏ初期化処理を実行するようにしてもよい。その場合、参照先がレジストリ１６１からテーブル２３１に変化するだけで、ＣＰＵ１０１が実行するＩ／Ｏ初期化処理の基本的な部分は図８乃至図１０を参照して説明した場合と同じであるので、その説明を省略する。
【０１１４】
以上においては、本発明を適用したＩ／Ｏ初期化処理をハードディスクレコーダに適用する場合について説明したが、本発明は、これに限らず、例えば、家庭用電化製品等に組み込まれる組み込み型ＯＳのＩ／Ｏ初期化処理に適用してもよい。
【０１１５】
また、上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもでき、さらに、本発明のＩ／Ｏ初期化処理は、例えば、図１７に示されるように、パーソナルコンピュータ２５１においても適用することができる。
【０１１６】
図１７において、ＣＰＵ２６１は、ＲＯＭ２６２に記憶されているプログラム、または、記憶部２８６のハードディスク（ＨＤＤ）２８７からＲＡＭ２６３にロードされたプログラムに従って各種の処理を実行する。ＲＡＭ２６３にはまた、ＣＰＵ２６１が各種の処理を実行する上において必要なデータなどが適宜記憶される。
【０１１７】
Ｉ／Ｏ初期化処理部２６４は、ＣＰＵ２６１に制御され、ＲＯＭ２６２に記憶されているプログラム等に基づいて、パーソナルコンピュータ２５１の起動時等に、上述したＩ／Ｏ初期化処理と同様のＩ／Ｏ初期化処理を行う。この初期化処理により、パーソナルコンピュータ２５１にＯＳが起動し、ＣＰＵ２６１は、パーソナルコンピュータの各部を制御できるようになる。
【０１１８】
ＣＰＵ２６１、ＲＯＭ２６２、ＲＡＭ２６３、およびＩ／Ｏ初期化処理部２６４は、バス２６５を介して相互に接続されている。このバス２６５にはまた、入出力インタフェース２７０も接続されている。
【０１１９】
入出力インタフェース２７０には、キーボード２８２、マウス２８３、およびＵＳＢカメラ２８４などよりなる入力部２８１、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ），ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）などよりなるディスプレイ、並びにスピーカなどよりなる出力部２８５、ＨＤＤ２８７などよりなる記憶部２８６、ブルートゥースモジュール２８９、または、モデムやターミナルアダプタなどより構成される通信部２８８が接続されている。
【０１２０】
入出力インタフェース２７０にはまた、必要に応じてドライブ２９０が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどにより構成されるリムーバブルメディア２９１が適宜装着され、それから読み出されたコンピュータプログラムが、必要に応じて記憶部２８６のＨＤＤ２８７等にインストールされる。
【０１２１】
このような、パーソナルコンピュータ２５１において、Ｉ／Ｏ初期化処理部２６４は、ＣＰＵ２６１に制御され、図５に示されるハードディスクレコーダ５３のＣＰＵ１０１のように、図８乃至図１０に示されるＩ／Ｏ初期化処理と同様のＩ／Ｏ初期化処理を実行する。
【０１２２】
すなわち、Ｉ／Ｏ初期化処理部２６４は、図１８に示されるように、スレッドが使用不可能な状態（Ｅａｒｌｙ）において、記憶部２８６のハードディスク２８７の電源をオンする処理（ＨＤＤモータＯＮ）３０１を実行する。
【０１２３】
そして、モータの駆動が安定するまでの間にスレッドが利用可能になると、Ｉ／Ｏ初期化処理部２６４は、レジストリ等の情報に基づいたスケジュールに従い、フェーズ０において、ＳＣＳＩコントローラに関する初期化処理であるＳＣＳＩチップ（ＳＣＳＩ＿ＣＨＩＰ）３１１、および、ＵＳＢコントローラに関する初期化処理であるＵＳＢチップ（ＵＳＢ＿ＣＨＩＰ）３１２のスレッドをたてて、実行させる。
【０１２４】
そして、Ｉ／Ｏ初期化処理部２６４は、それらの処理が完了すると、フェーズ１に移行し、ＵＳＢ接続機器をリムーバブルメディアとして利用するためのドライバを初期化する処理であるＵＳＢマスストレージ（ＵＳＢ  Ｍａｓｓ  Ｓｔｏｒａｇｅ）３１３、ＵＳＢ接続機器を制御するためのドライバを初期化する処理であるＵＳＢシリアル（ＵＳＢ  Ｓｅｒｉａｌ）３１４、および入力部２８１のＵＳＢカメラ２８４を初期化する処理であるＵＳＢカメラ３１５のスレッドをたてて、実行させ、それらの処理が完了すると、フェーズ２に移行する。
【０１２５】
フェーズ２において、Ｉ／Ｏ初期化処理部２６４は、ＳＣＳＩのバスのコントローラを初期化する処理であるＳＣＳＩ  ＢＵＳ３１６、入力部２８１のキーボード２８２を初期化する処理であるキーボード３１７、入力部２８１のマウス２８３を初期化する処理であるマウス３１８、並びに、通信部２８８のブルートゥースモジュール２８９を初期化する処理であるブルートゥース３１９のスレッドをたてて、各スレッドを実行させ、それらの処理が完了すると、フェーズ３に移行し、ドライブ２９０を初期化する処理であるＳＣＳＩディスク（ＳＣＳＩ  ＤＩＳＫ）３２０のスレッドをたてて実行させ、処理が完了すると、Ｌａｚｙモードに移行する。
【０１２６】
そして、モータの駆動が安定すると、Ｉ／Ｏ初期化処理２６４は、Ｌａｚｙモード（ユーザプロセス）において、ハードディスク２８７の初期化処理の続きを行う。
【０１２７】
例えば、Ｉ／Ｏ初期化処理部２６４は、Ｌａｚｙモードにおいて、次の処理を開始できる状態になるまで待機処理３０２を行い、準備が完了したら、プローブの初期化処理３０３、パーティションのチェック処理３０４、および、ファイルシステムのマウント処理３０５等の処理を実行する。
【０１２８】
以上のようにＩ／Ｏ初期化処理部２６４がＯＳを起動することにより、パーソナルコンピュータ２５１のオペレーティングシステムの起動時間を短縮することができる。
【０１２９】
なお、Ｌａｚｙモードにおいて、Ｉ／Ｏ初期化処理部２６４は、ユーザプロセスの使用が可能であるので、例えば、図１８に示されるように、ファイルシステムのマウント処理３０５に同期させ、ユーザプロセスによるアプリケーションスタート処理を実行させるようにしてもよい。
【０１３０】
なお、以上においても、図１６を参照して説明したように、Ｉ／Ｏ初期化処理のスケジュールをテーブル化しておき、Ｉ／Ｏ初期化処理部２６４がそれを参照するようにしてももちろんよい。
【０１３１】
また、図１７において、Ｉ／Ｏ初期化処理部２６４は、ＣＰＵ２６１と別体で構成されるように説明したが、これに限らず、その機能の一部または全部がＣＰＵ２６１に含まれるようにしてもよい。
【０１３２】
一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば、汎用のパーソナルコンピュータなどに、ネットワークや記録媒体からインストールされる。
【０１３３】
この記録媒体は、図５または図１７に示されるように、装置本体とは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク（フレキシブルディスクを含む）、光ディスク（ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ），ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）を含む）、光磁気ディスク（ＭＤ（Ｍｉｎｉ−Ｄｉｓｋ）を含む）、もしくは半導体メモリなどよりなるリムーバブルメディア１０５または２９１により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される、プログラムが記録されているＲＯＭ１０２、または２６２や、ハードディスク１０４または２８７などで構成される。
【０１３４】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０１３５】
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【０１３６】
【発明の効果】
以上のように、本発明によれば、オペレーティングシステムのＩ／Ｏ初期化処理を実行することができる。特に、オペレーティングシステムの起動時間を短縮することができる。
【図面の簡単な説明】
【図１】従来のＩ／Ｏ初期化処理の方法の例を説明する図である。
【図２】従来のＩ／Ｏ初期化処理の方法の他の例を説明する図である。
【図３】ＯＳ起動時におけるシステムの状態と、従来のＩ／Ｏ初期化処理を行うタイミングを示す図である。
【図４】本発明を適用したハードディスクレコーダを用いた画像信号受信システムの構成例を表すブロック図である。
【図５】図４のハードディスクレコーダの構成例を示すブロック図である。
【図６】図４のリモートコントローラのボタンの構成例を示す外観図である。
【図７】本発明を適用したＩ／Ｏ初期化処理の方法の例を説明する図である。
【図８】図４のハードディスクレコーダにおいて実行されるＩ／Ｏ初期化処理を説明するフローチャートである。
【図９】図４のハードディスクレコーダにおいて実行されるＩ／Ｏ初期化処理を説明する、図８に続くフローチャートである。
【図１０】図４のハードディスクレコーダにおいて実行されるＩ／Ｏ初期化処理を説明する、図９に続くフローチャートである。
【図１１】図４のＣＰＵが実行するＩ／Ｏ初期化処理のプログラムの構成例を示す図である。
【図１２】図４のＣＰＵがＯＳの起動時に読み込むレジストリの構成例を示す模式図である。
【図１３】図４のハードディスクのドライバプログラムの構成例を示す図である。
【図１４】図４のハードディスクレコーダにおいて実行されるＩ／Ｏ初期化処理の処理手順の例を説明する模式図である。
【図１５】図４のハードディスクレコーダのＯＳ起動時におけるシステムの状態と、Ｉ／Ｏ初期化処理が実行されるタイミングの関係を表す図である。
【図１６】Ｉ／Ｏ初期化処理のスケジュールを管理するテーブルの例を示す図である。
【図１７】本発明を適用したパーソナルコンピュータの構成例を示す図である。
【図１８】図１７のパーソナルコンピュータのＯＳ起動時におけるシステムの状態と、Ｉ／Ｏ初期化処理が実行されるタイミングの関係を表す図である。
【符号の説明】
５３  ハードディスクレコーダ，  ６１  受信部，  ６６  レコーダ制御部，７６  入力部，  ７７  ドライブ，  １０１  ＣＰＵ，  １０４  ハードディスク，  １３２  第１のＩ／Ｏ初期化処理，  １３６  第２のＩ／Ｏ初期化処理，  １４０  第３のＩ／Ｏ初期化処理，  １５０  Ｉ／Ｏ初期化処理プログラム，  １６１  レジストリ，  １７０  ドライバ，  ２３１  テーブル，  ２５１  パーソナルコンピュータ，  ２６１  ＣＰＵ，  ２６４  Ｉ／Ｏ初期化処理部，  ２８２  キーボード，  ２８３  マウス，  ２８４  ＵＳＢカメラ，  ２８７  ハードディスク，  ２８９  ブルートゥースモジュール，  ２９０  ドライブ
【図１】
2004213530.tif 000003
【図２】
2004213530.tif 000004
【図３】
2004213530.tif 000005
【図４】
2004213530.tif 000006
【図５】
2004213530.tif 000007
【図６】
2004213530.tif 000008
【図７】
2004213530.tif 000009
【図８】
2004213530.tif 000010
【図９】
2004213530.tif 000011
【図１０】
2004213530.tif 000012
【図１１】
2004213530.tif 000013
【図１２】
2004213530.tif 000014
【図１３】
2004213530.tif 000015
【図１４】
2004213530.tif 000016
【図１５】
2004213530.tif 000017
【図１６】
2004213530.tif 000018
【図１７】
2004213530.tif 000019
【図１８】
2004213530.tif 000020