JP4795378B2 - コンピュータおよびブート方法 - Google Patents

コンピュータおよびブート方法 Download PDF

Info

Publication number
JP4795378B2
JP4795378B2 JP2008094502A JP2008094502A JP4795378B2 JP 4795378 B2 JP4795378 B2 JP 4795378B2 JP 2008094502 A JP2008094502 A JP 2008094502A JP 2008094502 A JP2008094502 A JP 2008094502A JP 4795378 B2 JP4795378 B2 JP 4795378B2
Authority
JP
Japan
Prior art keywords
boot
file
task
cache
boot file
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.)
Active
Application number
JP2008094502A
Other languages
English (en)
Other versions
JP2009245405A (ja
Inventor
浩 伊藤
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.)
Lenovo Singapore Pte Ltd
Original Assignee
Lenovo Singapore Pte 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 Lenovo Singapore Pte Ltd filed Critical Lenovo Singapore Pte Ltd
Priority to JP2008094502A priority Critical patent/JP4795378B2/ja
Priority to US12/412,758 priority patent/US8151102B2/en
Publication of JP2009245405A publication Critical patent/JP2009245405A/ja
Application granted granted Critical
Publication of JP4795378B2 publication Critical patent/JP4795378B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping

Description

本発明は、コンピュータのブート時間を短縮する技術に関する。
コンピュータは電源が投入されると、起動プロセス(ブート・ストラップまたはブートともいう。)を開始する。最初にBIOS_ROMに格納されているBIOSのPOST(Power On Self Test)といわれる初期化プログラムがメイン・メモリに読み出されて実行される。初期化プログラムは、ブート・デバイスを診断したり初期化したりする。
つぎにBIOSはブート・ファイルが格納されているブート・デバイスを探す。ブート・ファイルはオペレーティング・システム、デバイス・ドライバ、およびアプリケーション・プログラムなどを含む。ブート・デバイスとしては通常ハード・ディスク・ドライブ(HDD)が使用される。BIOSは、HDDの先頭セクタに格納されているMBR(Master Boot Record)をメイン・メモリにロードしてそれに制御を移す。MBRはディスクからブート可能なパーティションを探してその先頭セクタ(ブート・セクタ)にあるブート・ストラップ・ローダをメイン・メモリにロードしてそれに制御を移す。その後ブート・ストラップ・ローダにつづいてブート・ファイルが順番にメイン・メモリに読み出される。
プリエンプティブなマルチタスキングを行うオペレーティング・システム(OS)は、ブート時もプリエンプティブなタスク・スイッチを行うようになっている。OSはブート時にHDDからブート・ファイルを読み出すために複数のプロセスやスレッドを生成する。OSは、各プロセスを所定のアルゴリズムでプロセッサにディスパッチする。ディスパッチされたプロセスは、プロセッサにおいて所定のタイム・スライスの間だけ実行されたのちにプリエンプトされて後続のプロセスがディスパッチされる。ブートの後半になると同時に存在するプロセスの数が増大してHDDに多くのシーク時間が発生し、ブートの実行効率が低下してブート時間の遅延を招く。
余分なシークが発生しないようにHDDに単一のブート・イメージを格納して短時間でブートを完了する方法もあるが特殊なOSに限定されている。また、SSD(Solid State Drive)をブート・デバイスとして利用する方法もあるが、容量およびコストに限界がある。さらに、HDDに記憶されたブート・ファイルに対してデフラグを実行してシークが発生しにくいように並べ替える方法もある。Windows(登録商標)では、無駄なページ・フォルトやシークを省略して起動時間を短縮するためにプリフェッチという機能を導入している。
これは前回までのブート時に、ブート中のプログラムの動作をトレースして、HDD上のファイルのアクセス状況を調べておき、その結果に基づいて次回以降のブート時に所定のファイルを先読みしておくという機能である。アクセス・ログはファイルごとに記録されて所定のディレクトリに格納される。各ファイルには、それぞれのプログラムごとのHDDに対するアクセス・パターンのデータが記録されており、ブート時にはこのアクセス・ログに基づいてファイルがメイン・メモリに先読みされる。
特許文献1は、ブート時間を短縮するために、起動時にHDDから読み出されたプリフェッチ・テーブルでブート関連プログラムをプリフェッチする技術を開示する。プリフェッチ・テーブルには、プログラムの格納位置とサイズが記憶され、さらに、フラグでプリフェッチを設定できるようになっている。特許文献2および特許文献3は、ホストからのリード要求のサイズが所定値以上の場合には、リード要求に続くデータも含めて先読みする技術を開示する。特許文献4は、統計処理に基づいてキャッシュするデータ量を決める技術を開示する。特許文献5は、ホストからの要求転送レートと光ディスクからのデータ読み取りレートを比較して先読み量を設定する技術を開示する。
米国特許6073232号明細書 特開2007−241927号公報 特開昭64−76314号公報 特開2001−350669号公報 特開2002−207635号公報
上記のWindowsの機能では、2回目以降のブートでは起動時間の短縮が図れるがアクセス・ログを収集するための1回目のブートでは起動時間を短縮することができない。また、一連のブート・ファイルは、デバイス・ドライバが更新されたり、パッチ・プログラムが追加されたり、さらにはアプリケーションが追加されたりして、その種類や起動順序などの構成が頻繁に変更される。ブート・ファイルの構成が変更された場合には以前に生成されたブート・ログでは十分に対応できない。ブート・ファイルのアクセス・ログを生成しないでファイルの先読みによりブート時間を短縮するには、先読み対象ファイルを選定する新たな方法が必要となる。
そこで、本発明の目的は、ブート時間を短縮するブート方法を提供することにある。さらに本発明の目的は、ブート・ファイルの構成が変更されても対応が可能なブート方法を提供することにある。さらに本発明の目的は、そのようなブート方法を実現するコンピュータおよびコンピュータ・プログラムを提供することにある。
本発明は、マルチタスクのオペレーティング・システムを搭載するコンピュータにおいてハード・ディスク・ドライブからブートする方法を提供する。ハード・ディスク・ドライブはコンピュータと一体になっていても、分離されていてもよい。ブート・ドライバは、当該ブートにおいて、ハード・ディスク・ドライブからメイン・メモリに読み出すために生成されて順番に実行される複数のタスクを観測する。つづいて、ブート・ドライバは、観測した複数のタスクの中から先読みブート・ファイルを選択する。
ブート・ドライバは、選択した先読みブート・ファイルをメイン・メモリ上のブート・キャッシュにフィルし、フィルしたあとに読み出されるブート・ファイルをブート・キャッシュからロードする。その結果、ブート・ファイルを読み出す際のリソースの競合を排除してブート時間を短縮することができる。ブート・ファイルは全体をフィルしてもよく、あるいは、ブート・キャッシュの容量が不足する場合は一部をフィルしてもよい。一部をフィルした場合はブート段階が進行して当該ブート・ファイルが再度先読みブート・ファイルとして選択されたときに、残りのファイルをブート・キャッシュにフィルすることもできる。
先読みブート・ファイルは、所定数のタスクに占める同一のブート・ファイルを読み出すタスクの数の割合を計算して選択することができる。先読みブート・ファイルは、観測した所定数のタスクにおいて1つのブート・ファイルのサイズと残りの複数のブート・ファイルのサイズを合計したサイズを比較して選択することができる。ブート・キャッシュの容量には限界があるので、このような方法によりリソースの競合を排除するために効果的な先読みブート・ファイルを選択することができる。先読みブート・ファイルは、上記の比較結果に基づいて残りの複数のブート・ファイルとして選択することができる。
先読みブート・ファイルは、さらに所定のサイズ以上のブート・ファイルとして選択することができる。サイズの大きいブート・ファイルは、読み出しを実行するタスクの数が増える可能性が高く、結果として他のタスクとの間でリソースの競合が発生する可能性も高いため、ブート・キャッシュにフィルしておくとブート時間の短縮に効果的である。リソースの競合は、順番に実行されるタスクの中で前後のタスク間で起こることが多い。したがって先読みブート・ファイルは、順番に実行される複数のタスクの中から1つおきに選択したタスクで読み出される複数のブート・ファイルとして選択することができる。ブートの進行に伴ってブート・ファイル間におけるリソースの競合の状態は変化するので、先読みブート・ファイルを選択するための観測は、ブート中の一定の時間ごとまたは読み出したブート・ファイルのサイズごとに実行することで対応することができる。このときブート・キャッシュはLRUやFIFOなどのアルゴリズムで更新してブートの進行に対応できるようにする。
ロードしたブート・ファイルの単位時間あたりの平均読み取りサイズを所定の経過時間ごとに計算した結果に基づいて先読みブート・ファイルを選択してもよい。このとき、平均読み取りサイズの長期移動平均と短期移動平均を計算し、先読みのタイミングは、短期移動平均が長期移動平均を下回ったタイミングに設定することができる。短期移動平均が長期移動平均を上回ったときに長期移動平均と短期移動平均に基づくブート・ファイルの先読みを停止することができる。
ブート・キャッシュは、メイン・メモリの一部にブート・キャッシュ領域として構成し、ブート・ドライバがブートを完了した後にブート・キャッシュ領域を開放するようにしてもよい。ブート・ドライバは、実行可能キューに登録された連続するタスクの中から同一ファイルを読み出す2つのタスクの間に存在するすべてのタスクが読み出すブート・ファイルをブート・キャッシュにフィルするようにしてもよい。ブート・ドライバは、実行可能キューに登録された複数のタスクの中に所定数以上存在する同一のタスクが読み出すブート・ファイルをブート・キャッシュにフィルするようにしてもよい。
本発明により、ブート時間を短縮するブート方法を提供することができた。さらに本発明により、ブート・ファイルの構成が変更されても対応が可能なブート方法を提供することができた。さらに本発明により、そのようなブート方法を実現するコンピュータおよびコンピュータ・プログラムを提供することができた。
[コンピュータの構成]
図1は、コンピュータ10の概略のハードウエア構成を示すブロック図である。CPU11は、コンピュータ10の中枢機能を担う演算処理装置で、OS、BIOS、デバイス・ドライバ、あるいはアプリケーション・プログラムなどを実行する。CPU11は、ノース・ブリッジ13およびノース・ブリッジ13にさまざまなバスを経由して接続された各デバイスを制御する。ノース・ブリッジ13は、メイン・メモリ15へのアクセス動作を制御するためのメモリ・コントローラ機能や、CPU11と他のデバイスとの間のデータ転送速度の差を吸収するためのデータ・バッファ機能などを含む。
メイン・メモリ15は、CPU11が実行するプログラムの読み込み領域、処理データを書き込む作業領域として利用される揮発性のRAMである。メイン・メモリ15には、図4に示すようにOSのキャッシュ機能を実現するOSキャッシュ領域85、本発明のキャッシュ機能を提供するブート・キャッシュ領域83、およびロード領域81を備える。なお、ブート・キャッシュ領域83は、メイン・メモリ15の一部としてではなく専用のメモリで構成してもよい。ブート・キャッシュ領域83はOSのカーネル領域にあり、その容量は制約を受ける。ブート時には、CPU11は各ブート・ファイルをメイン・メモリ15上での実行領域であるロード領域81に読み出す。ブート・ファイルをHDD19からメイン・メモリ15の実行可能な領域のアドレスに読み出すことをロードという。
サウス・ブリッジ17は、ノース・ブリッジ13に接続され、さまざまな周辺入出力デバイスのインターフェースやPCIバス、PCI−Expressバスのポートを備えている。サウス・ブリッジ17にはHDD19が接続される。HDD19には、OS、デバイス・ドライバ、アプリケーションなどの周知のプログラムの他に、本実施の形態にかかるソフトウエア・プログラムであるブート・ドライバ119(図4参照)を格納する。HDD19に格納されたOSはプリエンプティブなマルチタスキングを行う。
さらにサウス・ブリッジ17は、PCIバスまたはLPCバス23を介して、従来からノートPC10に使用されているレガシー・デバイス、あるいは高速なデータ転送を要求しないデバイスに接続される。LPCバス23には、BIOS_ROM25が接続されている。BIOS_ROM25は、不揮発性で記憶内容の電気的な書き替えが可能なメモリである。BIOS_ROM25は、ハードウエアの試験および初期化を行うPOST(Power-On Self Test)、BIOSの制御下でブート・デバイスにアクセスするための入出力を制御する周辺機器制御コード、電源および筐体内の温度などを管理するユーティリティ、パスワードの認証を行うパスワード認証コードなどを格納する。
[タスクの状態遷移]
図2(A)は、マルチタスクOSがタスクを管理するときの状態を示す状態遷移図で、図2(B)は、実行可能キューにタスク制御ブロック(TCB)が登録されている状態を示す図である。なお、本明細書ではタスクという用語をプロセスおよびスレッドまたはそのいずれかを示すものとして使用する。ブートが開始されるとブート・ファイルをロードするためのタスクが生成される。
OSのタスク管理はブート・ファイルの読み出しのために、必要なリソースを割り付けてタスクを生成する。リソースには、ブート・ファイルが格納されているHDD19も含まれる。プリエンプティブなマルチタスキングのもとでは、OSは特定のブート・ファイルをロードする際に一度に全体を読み出すのではなくて、当該ブート・ファイルの読み出しを複数のタスクに分割して他のブート・ファイルの読み出しのためのタスクと平行して実行しながら読み出す。1つのタスクが実行されるとブート・ファイルの一部がメイン・メモリのロード領域81に書き込まれ、同一のブート・ファイルを読み出す複数のタスクが実行されてブート・ファイルの全体がロード領域81に書き込まれる。プリエンプティブなマルチタスキングは、ブートが完了したあとではリソースの競合が少ないのでユーザに並行作業という快適なコンピュータの使用環境を提供するが、ブート時は後に説明するようにむしろブート時間の遅延をもたらす。
タスクは基本的にOSにより、タスクの生成(Created)31、実行可能状態(Ready state)33、実行状態(Running)35、実行待ち状態(Waiting State)37、およびタスクの消滅(Terminated)39のいずれかの状態で管理される。タスクは、実行中のプログラムとCPU11の状態を示す情報などで構成されており、OSはタスクをTCBというデータ構造で管理する。TCBは、プロセッサ状態、タスクの優先度、タイム・スライス情報、タスク識別子、およびデバイス情報などで構成される。プロセッサ状態は、CPU11がタスクを中断したときのレジスタ、スタック、およびプログラム・カウンタなどの状態に関する情報でコンテキストともいう。タスクの優先度は、タスク間におけるコンテキスト・スイッチの優先順位を示す情報である。タイム・スライス情報は、タイム・スライスの初期値や残り時間に関する情報である。
タイム・スライスとはタスクがCPU11に対する一度の実行権を獲得したときに許される最大実行時間をいう。タスク識別子は、各タスクに割り当てられた一意の番号である。デバイス情報は、当該タスクに割り当てられたデバイスの識別情報である。なお、TCBには、OSにより異なるその他のさまざまな情報が含まれる。OSにより生成されたTCBはOSのデータ領域に確保された図2(B)の実行可能キュー40にラウンド・ロビン方式または優先度方式などのさまざまな方式で実行の順番に登録されて実行可能状態33になる(遷移1)。
ここでは実行可能キュー40に、タスクA、タスクB、タスクC、タスクD、およびタスクEの5個のタスクが登録されてCPU11による実行を待っている。OSのスケジューラは、各タスクを実行状態35と実行可能状態33の間で遷移させてコンテキスト・スイッチを行う(遷移2、遷移3)。実行可能状態33から実行状態35に遷移させることをディスパッチといい、実行状態35から実行可能状態33に遷移させることをプリエンプト(横取り)という。プリエンプティブなマルチタスクを行うスケジューラは、たとえば実行中のタスクAに与えられたタイム・スライスが経過すると、タスクAに対するCPU11の実行権を強制的にプリエンプトして実行可能キュー40の最後の位置に戻し、つぎのタスクBを実行状態35に移行させるといったように制御してタスクA〜タスクEを順番に実行する。
実行状態35に入ったタスクが、自らの実行に必要なデバイスが取り外されたり故障したりして使用できない状態になっていることが判明したときは、実行待ち状態37に移行し(遷移4)、OSはTCBをOSのデータ領域に確保された実行待ちキューに登録する。実行待ちキューに登録されたタスクに割り付けられていたデバイスが使用可能になると、そのデバイスはOS経由でCPU11に割り込みをかけてタスク管理に通知し、タスク管理は当該タスクを実行待ち状態37から実行可能状態33に移行させTCBを実行可能キュー40に登録する。その後タスクは、スケジューラのアルゴリズムに基づいて実行状態35に移行してCPU11により実行される。特定のブート・ファイルのロードが完了すると当該ブート・ファイルのロードのために生成されたタスクが終了して、タスク管理は、当該タスクをタスクの消滅39に移行させる(遷移6)。
[ブート時間が遅延する原因の説明]
図3は、プリエンプティブなマルチタスキングのもとでブート時間が遅延する原因を説明する図である。図3(A)は、HDD19のディスク50にブート・ファイル51、53、55が異なるトラックに記録されている様子を示している。ブート・ファイル51、53、55をロードする際には、HDD19のヘッドが各トラックに移動してブート・ファイルを読み取る必要がある。1つのブート・ファイルは、通常は1つのトラックに連続して格納され、さらに必要に応じて隣接するトラックに格納されている。したがって、1つのブート・ファイルを連続して読み出すことができれば、無駄なシークは抑えられブート時間が遅延することはない。
しかし、実際には、ブート・ファイル51、53、55を読み出すタスクが同時に存在して実行可能キュー40に登録されると、これらの、トラック間をヘッドが移動するための無駄なシーク時間が発生して、ブート時間を遅延させる原因をつくることになる。さらにブート・ファイル51、53、55が実行されるとさらに他のブート・ファイルを読み出すタスクを生成して、一層無駄なシーク時間が発生する。プリエンプティブなマルチタスキングでは、最初にブート・ファイル51を読み出すためのタスクが実行されたときに、ブート・ファイル51の全体の読み出しが完了する前に他のブート・ファイル53、55を読み出すタスクが実行されるため、無駄なシーク時間は必然的に発生する。
ここで、ブート・ファイル51、ブート・ファイル55、ブート・ファイル53の順番にタスクが実行されて読み取られる場合と、ブート・ファイル51、ブート・ファイル53、ブート・ファイル55の順番にタスクが実行されて読み取られる場合とを考えた場合、移動距離に関係するシーク時間は前者の方が長くなる。このように同じブート・ファイルをロードする場合でもその読み出しにかかるタスクの実行順序でシーク時間に差がでる。OSのスケジューラはシーク時間を考慮してタスクの実行順序を決めることはできない。シーク時間に着目してブート時間を遅延させるブート・ファイルを選択する場合は、タスクの実行順序およびトラック上でのブート・ファイルの格納位置を調べる必要があり実際にブートさせてログを収集しない限り困難である。また、一度ブート時間を遅延させるブート・ファイルを探すことができたとしても、一連のブート・ファイルの構成が変更されるとそのログは利用できなくなる。
したがって従来はブート時間を短縮させるためには、実際にブートさせた段階でブート時間を遅延させるブート・ファイルを特定して、次回以降のブートでそのブート・ファイルをキャッシュに先読みしておくしか方法がなかった。本発明では後に説明するように、ブート時間の遅延がシーク時間だけでなく、HDD19という1つのブート・デバイスに関するリソースの競合が起因しているという視点に着眼して先読みするブート・ファイルを特定し、限られた容量のブート・キャッシュに効率よくキャッシングしてブート時間を短縮することができる。
ブートが進行すると、多くのプログラムが実行されて新しいタスクを生成してファイルを読み出し、そのファイルがさらに新しいタスクを生成して別のファイルを読み出すというようになり、同時に実行可能キュー40に登録されるタスクの数が増える。通常は1台のHDD19からブートすることになっており、かつ、HDD19は同時に1つの入力または出力しか処理できないので、マルチタスキング上で複数のタスクが実行待ちキュー40に登録されて同時にHDD19に対する出力要求をするような場合は、いずれか1つのタスクを除いて出力待ちの状態になりいわゆるリソースの競合が発生する。
図3(B)は、HDD19のアクセスに関するリソースの競合が発生する様子を説明する図である。ブート・ファイルa、b、c、d、eをロードするためのタスクA、B、C、D、Eが同時に存在して実行可能キュー40に登録され、タイム・スライス61、62、63、64、65、66で順番に実行される。タスクAはタイム・スライス61、66で実行される。各タイム・スライスは一定の時間として設定されており、各タスクでは与えられたタイム・スライスを消費すると処理状況とは無関係につぎのタスクにCPU11の実行権が渡される。
各タスクでは、ブート・ファイルの読み取り要求をするために、API(Application Program Interface)関数を呼び出す。タスクAが時刻t01でHDD19に対するブート・ファイルaの一部の読み出し要求71をしたときに、タイム・スライス61の終了時刻t1までロードが完了してHDD19がタスクAから解放されればリソースの競合は発生しない。よって、タスクBが時刻t11でHDD19に対するブート・ファイルbの一部の読み出し要求73をしてもHDD19にアクセスできるためタスクBは待つことなく実行される。しかし、タスクAによるHDD19のディスク・ドライバ127に対する読み出し要求が時刻t1までに完了している場合は、時刻t1までデバイス・ドライバ127から出力完了の通知を受け取らなくても、その読み出し要求はキャンセルされず、しかも時刻t1でタスクBにタスク・スイッチが行われる。
そして、タスクAの読み出し要求71で読み出されたブート・ファイルaの一部は、タスクBによりタスクAで指定した場所にロードされるので、読み出し要求71はタイム・スライス62の時刻t12で、デバイス・ドライバ127から出力完了の通知77で完了する。したがって、時刻t11でタスクBがHDD19からブート・ファイルbの一部の読み出し要求73をしても、HDD19がタスクAのために読み出し要求71を処理しているのでタスクBの処理は待たされる。そして、タスクBが時刻t13でブート・ファイルbの一部の読み出し要求75を行ったときに、その読み出し要求75が時刻t2で完了していない場合は、読み出し要求75はキャンセルされ、つぎにタスクBがディスパッチされたときに再度読み出し要求75が処理される。
このように、タスクBのタイム・スライス62にはリソースの競合に基づく無駄な時間が発生しブート時間の遅延につながる。このようなリソースの競合はシーク時間とは異なるブート時間遅延の原因であり、この場合、ブート・ファイルb、c、d、eをブート・キャッシュ領域83に先読みしておけば、競合によるブート時間の遅延を解消することができる。リソースの競合は、タイム・スライスにおける入出力待ちの時間から判断すると、通常は前後して実行されるタスクの間で発生するので、前後して実行されタスクの一方がブート・キャッシュ領域83からブート・ファイルを読み出すようにしても解消することができる。
[ブートを実行する構成]
図4は、ブートを実現する構成を説明するためのブロック図である。図4のブロック図では、Windows(登録商標)の関数を例示してブートに関連する主要なソフトウエアとハードウエアだけを示している。ただし、本発明はOSがWindowsの場合だけに限定されるものではなく、本発明の思想の範囲内で他の周知のOSに適用することもできる。
図4では、ブート・ドライバ119、およびブート・キャッシュ領域83以外は周知の要素である。ライン102より上側に記載されたソフトウエアはプロセッサ11のユーザ・モードで動作し、下側に記載されたソフトウエアはカーネル・モードで動作する。ブート・システム・コード101は、BIOSからOSに制御が移ったときに最初に実行され、つぎのブート・ファイルをロードする役割を果たす。ブート・ストラップ手法では、先に読み出されたブート・ファイルがつぎのブート・ファイルを読み出すといったように順番にブート・ファイルをメイン・メモリにロードしていく。
Kernel32.dllは、WindowsのサブシステムDLL(Dynamic Link Library)の一部であり、公開されているWindowsAPI関数を非公開のカーネル・モード・システム・サービスへの呼び出しに変換する。たとえば、先にロードされたブート・ファイルがつぎのブート・ファイルをHDD19からメイン・メモリ15に読み出すために、ReadFile APIというアプリケーションに公開されている関数を呼び出すと、それに応じて非公開のNtoskrnl.exeに実装されているNtReadFileという内部関数が呼び出されてHDD19からデータがロードされる。
Ntdll.dllは、サブシステムDLLを使用するための関数を提供するサポート・ライブラリである。Ntdll.dllは、ユーザ・モードから呼び出すことができるインターフェース機能(System Service Dispatch Stub)と、サブシステムDLLが使用するNtReadFile関数などの内部サポート関数で構成されている。タスク管理109は、実行可能キュー40および実行待ちキューを含み、図2で説明したようにタスクを管理する。タスク管理109は、ブート・ファイルのロードのために呼び出されたReadFile APIという関数に対して生成されたタスクのTCBの情報を保持している。
割り込みディスパッチ・テーブル(IDT)111は、OSによりメイン・メモリ15に展開され、ブート・システム・コード101およびブート・ファイルがソフトウエア割り込みを行って所定のシステム・サービスに移行するためのアドレスを各エントリーに格納する。たとえば、CPU11のEAXレジスタにシステム・サービス番号を設定してエントリーのインデックスをINT 0x2e(16進数)と指定すれば、そのエントリーに格納されたアドレスのシステム・サービスであるシステム・サービス・ディスパッチャ(SSD)115を実行して、プロセッサ11の制御をユーザ・モードからカーネル・モードに移行させることができる。
SSD115は、Ntoskrnl.exeの一部であり、スレッドのユーザ・モード・スタックからカーネル・モード・スタックに呼び出し元コードの引数(パラメータともいう。)をコピーする。SSD115はシステム・サービス・ディスパッチ・テーブル(SSDT)113のエントリーを参照して呼び出されたシステム・サービスを実行する。SSDT113には、システム・サービスのIDと対応するシステム・サービスを記述するコードの先頭アドレスが格納されている。
たとえば、あるエントリーにはIDとしてNtReadFile関数を示す情報が格納され、アドレスとしてNtReadFile関数117の実際のコードを記憶しているメイン・メモリ15上のアドレスが格納されている。NtReadFile関数117は、Ntoskrnl.exeの一部である。ブート・ドライバ119の構成については図5を参照して後に説明する。ファイル・システム123は、HDD19に格納されているデータを管理するためにOSが提供するソフトウエアである。ファイル・システム123は、FAT(File Allocation Table)およびディレクトリを作成してHDD19に関するファイルの記録、読み取り、削除、または移動などを管理する。
OSキャッシュ・マネージャ121はHDD19に対するアクセスのパフォーマンスを向上させるためにOSが提供するソフトウエアである。OSキャッシュ・マネージャ121は、HDD19に対して、ReadFile API関数やWriteFile API関数が呼び出されたときに毎回HDD19にアクセスしないでも処理できるように、OSキャッシュ領域85にデータをプリフェッチしてフィルする。OSキャッシュ・マネージャ121は、コンピュータ10で実行されるすべてのソフトウエアからのHDD19に対するアクセスを対象にして、独自のアルゴリズムに基づいてOSキャッシュ領域85に対するファイルのフィルおよびフラッシュを管理する。なお、新たなデータをブート・キャッシュ領域83やOSキャッシュ領域85にフィルしたり、その際に古いデータをフラッシュしたりすることをキャッシングという。ディスク・ドライバ127は、HDD19の動作およびデータ転送を制御するためのソフトウエアである。
[ブート・ドライバの構成]
図5は、ブート・ドライバ119の主要な構成を示す機能ブロック図である。I/O制御部151は、外部と内部の各要素とのインターフェース機能を果たす。先読みファイル選定部153は、ブート・システム・コード101またはそれに続いて読み出されたブート・ファイルからReadFile API関数が呼び出されたときに以下に説明する第1の方法ないし第3の方法に応じて複数の制御をすることができる。
第1の方法では、先読みファイル選定部153は、NtReadFile関数をフックして得られるリード要求のプリフェッチキューxxxを管理して、読み出すブート・ファイルを選択し、同時にそれぞれのリード要求を行っているタスクをタスク管理109に問い合わせて関係するタスクを識別する。第2の方法では、タスク管理109に現在実行可能キュー40に登録されているタスクの情報を問い合わせ、ファイル・システム123にそれらのタスクが読み出すブート・ファイルのサイズを問い合わせる。そして、所定のサイズより大きいブート・ファイルをブート・キャッシュ領域83に先読みするブート・ファイルとして選択する。
第3の方法では、周知のリアル・タイム・クロック(RTC)からブート開始からの時間情報を取得し、さらに、ファイル読み取り部155がその時刻までロードが完了したブート・ファイルの合計サイズを蓄積して、単位時間あたりにロードが完了したブート・ファイルの平均読み取りサイズを計算し、さらに平均読み取りサイズの長期移動平均および短期移動平均を計算して、ブート・キャッシュ領域83への先読みを開始するタイミングとそれを停止するタイミングを決定して先読みファイルを選択する。
ファイル読み取り部155は、フックしたすべてのReadFile API関数に対応するNtReadFile関数を実行する。ファイル読み取り部155は、先読みファイル選定部153が選定した先読みブート・ファイルに対して生成した特別なシステム・タスクにより、引数を修正したNtReadFile関数を実行し、先読みファイル選定部153が選定した先読みブート・ファイル以外のブート・ファイルに対してはすでに生成されたタスクにより設定された引数を修正しないでNtReadFile関数を実行する。そのシステム・タスクはユーザ・モードのタスクとは異なりカーネル・モードだけで動作する特殊なタスクである。
ファイル読み取り部155は、特別なシステム・タスクを実行して選定された先読みブート・ファイルの全体または大部分をブート・キャッシュ領域83に短時間に読み出すことができる。ブート・キャッシュ制御部157は、ファイル読み取り部155がHDD19から読みとったブート・ファイルをLRU(Least Recently Used)方式でブート・キャッシュ領域83にキャッシングする。SSDT書き換え部159は、ブート・ドライバ119がOSと一緒にメイン・メモリ15にロードされるときに、SSDT113におけるNtReadFile関数というIDに対応するアドレスをNtReadFile関数117のアドレスからブート・ドライバ119のアドレスに書き換える。
このようにSSDT113のアドレスをOSがあらかじめ設定した関数のアドレスから別のコードのアドレスに書き換えることを、関数をフックするという。データ転送部161は、先行するブート・ファイルが後続のブート・ファイルをメイン・メモリ15にロードするために呼び出したReadFile API関数に対応してタスク管理109により生成されたタスクのブート・ファイルがブート・キャッシュ領域83にフィルされているか否かを判断する。データ転送部161はフィルされていると判断した場合は当該ブート・ファイルをメイン・メモリ15のロード領域81に転送する。データ転送部161はフィルされていないと判断したときは処理をファイル読み取り部155に渡し、ファイル読み取り部155は、NtReadFile関数を実行してHDD19からブート・ファイルを読み出す。なお、図3に示したブート・ドライバ119の構成は一例であり、当業者にとって明らかな範囲で同等の機能を実現できる他のいかなる構成を採用することもできる。
[第1の方法]
つぎに図1ないし図5で説明したコンピュータ10において、ブート時間を短縮する第1の方法を説明する。図3(B)で説明したように、あるブート・ファイルの読み出しを実行する2つのタスクと、その間に挟まれている別のブート・ファイルを読み出すタスクが実行順に並んでいるときに、挟まれているブート・ファイルをブート・キャッシュ領域83に先読みしておけば、それらの一連のブート・ファイルの読み出しにおいてリソースの競合が発生しないために、ブート時間を短縮することができる。挟まれているブート・ファイルを検出して先読みするブート・ファイルを決定する方法を以下に説明する。
図6は、実行可能キュー40に複数のタスクが登録されている様子を示している。タスク番号はタスクが生成された順番に割り当てられ、また、各タスクは並んでいる順番に上から実行されるものとする。ただし、実行可能キュー40には、タスクが生成された順番とは異なる順番でタスクが登録される場合もある。登録の順番はOSのスケジューラのアルゴリズムに依存する。またタスクが完了して消滅するタイミングとタスクが生成された順番とは関係がない。対象ファイルは当該タスクがHDD19からメイン・メモリ15のロード領域81に読み出すブート・ファイルの名称とHDD19における格納場所を示す。タスク名称は、対象ファイルを読み出すタスクの名称で、データ・サイズは当該タスクで読み出すブート・ファイルの一部のサイズを示す。
先読みファイル選定部153は、ブートを開始してから所定のタイミングでタスク管理109に問い合わせて、20個程度の連続するタスクを抽出し同一の名称のタスクがたとえば全体の2/3程度以上存在するか否かを調べる。図6では、ブート・ファイルとしてa、b、c、d、eが読み出されている様子が示されている。図6ではブート・ファイルaを読み出すタスクAが全体の2/3以上存在しているものとする。同一名称のタスクAの数が多い場合は、タスクAの間に挟まれたその他のタスクとの間でリソースの競合が発生してブート時間が遅延する可能性が高いことを意味する。
そして20個のタスクの中で、ファイルaのサイズがその他のファイルb、c、d、eの合計サイズよりも大きく、かつ、ブート・キャッシュ領域83のサイズより小さい場合は、ファイルaをブート・キャッシュ領域83に先読みする。そしてブート・ファイルa、b、c、d、eの読み出しを行うタスクが実行待ちキュー40に同時に存在する場合には、ブート・ファイルaをブート・キャッシュ領域83からロード領域81に書き込む。その結果、タスクAとこれに前後するタスクとの間のリソースの競合が解消されブート時間を短縮することができる。タスクAは、サイズが大きいのでタスクの存続時間が長くなってディスパッチされる頻度が高く、あらかじめブート・キャッシュ領域83にフィルしておけば、ブートが進行したときにこれに前後するタスクとの間でリソースの競合を排除できる頻度が高い。
逆に、ファイルaのサイズがその他のファイルb、c、d、eの合計サイズよりも小さく、かつ、その他のファイルb、c、d、eの合計サイズがブート・キャッシュ領域83のサイズより小さい場合は、ファイルb、c、d、eをブート・キャッシュ領域83に先読みする。そしてブート・ファイルa、b、c、d、eの読み出しを行うタスクが同時に実行待ちキュー40に存在する場合には、ブート・ファイルb、c、d、eをブート・キャッシュ領域83からロード領域81に書き込む。その結果、タスクA、B、C、D、Eの間のリソースの競合がすべて解消されブート時間を短縮することができる。ブート・ファイルb、c、d、eは、比較的ファイル・サイズが小さいため、タスクB、C、D、Eの存続時間は短いが、存続する間はリソースの競合を排除する頻度が高い。
このように、複数存在する同一名称のタスクが読み取るブート・ファイルのサイズと、その間に挟まれることになるその他のタスクが読み取るブート・ファイルのサイズの合計サイズとを比較して、大きい方がブート・キャッシュ領域83のサイズ以内であることを条件にして先読みブート・ファイルを選定する。そして、タスクが実行される前にそれらをブート・キャッシュ領域83に先読みしてHDD19に対するアクセスの競合を排除することができる。
なお、順番に実行される複数のタスクの中でタスクを1つおきに選択し、選択したタスクが読み出すブート・ファイルを先読みブート・ファイルとしてブート・キャッシュ領域83にフィルしてもよい。たとえば図6では偶数番号または奇数番号のタスクが読み出すブート・ファイルをブート・キャッシュ領域83にフィルすれば、タスク番号111からタスク番号130までのタスクをほとんどリソースの競合を排除して実行することができる。
図7はこのような方法でブート時間を短縮する手順を記載したフローチャートである。ブロック201では、コンピュータ10に電源が投入されBIOS_ROMのPOSTが実行される。その後、HDD19に格納されたMBRおよびブート・セクタのコードに制御が移る。従来通りの手順でブート・システム・コード101が最初に実行されて後続のブート・ファイルをロードするタスクが生成される。つづいて、後続のブート・ファイルが実行されてさらに後続のブート・ファイルをロードするタスクが生成され、以後順番にブートが完了するまで繰り返される。各ブート・ファイルはCreateFile API関数およびReadFile API関数を呼び出してHDD19に対する後続ファイルの読み出し要求を行っている。
図4に示すソフトウエアがすべてロードされた段階から、ブート・ドライバ119が動作を開始して、図7の手順が開始される。いま、ある瞬間に、図6の20個のタスクが観測され、上側のタスクから順番に実行されてブート・ファイルがメイン・メモリ15にロードされているものとする。各タスクにおいてReadFile API関数が呼び出され、そのTCBが実行可能キュー40に登録されてスケジューラによりCPU11にディスパッチされるのを待っている。ブート・ドライバ119はブートの初期段階でOSと一緒にメイン・メモリ15にロードされ、SSDT書き換え部159によりSSDT113のNtReadFileというIDのメイン・メモリ15上でのアドレスが、NtReadFile関数117の先頭アドレスからブート・ドライバ119の先頭アドレスに書き換えられてフックされている。
OSキャッシュ・マネージャ121は、ブート・ドライバ119によるブート・キャッシュ領域83のキャッシングとは独立してOSキャッシュ領域85に対するキャッシングを管理している。OSキャッシュ領域85にはブート時のリソースの競合の存否とは無関係にブート・ファイルの断片がフィルされているが、ブート時間の短縮に対する効果は低い。SSDT113のアドレスは書き換えられているため、各タスクから呼び出されたReadFile API関数はすべてブート・ドライバ119で処理される。
ブロック203では、先読みファイル選定部153がNtReadFile関数をフックして得られるリード要求のプリフェッチキューxxxを管理して、図6で説明した方法で読み出すブート・ファイルを選択して、同時にそれぞれのリード要求を行っているタスクをタスク管理109に問い合わせて関係するタスクを識別する。ブート・ファイルがロードされて実行されると、そのブート・ファイルが下位のブート・ファイルを読み出すためのタスクを生成し、その下位のブート・ファイルがさらに下位のブート・ファイルを読み出すためのタスクを生成する。その結果、ブートが進行するに伴って多数のタスクが実行可能キュー40に登録されるようになり、リソースの競合が多数発生してブート時間の遅延が激しくなる。ブロック203の判断を行う最初のタイミングは遅延が激しくなる全ブート時間の中間位に設定することができる。
ブロック203で観測したリード要求のプリフェッチキューxxxの中には先読みの対象となるブート・ファイルは存在しないと先読みファイル選定部153が判断したときは、ブロック209に移行する。先読みファイル選定部153が先読みの対象となる先読みブート・ファイルがリード要求のプリフェッチキューxxxの中に存在すると判断したときは、ブロック205に移行する。ブロック205では、ファイル読み取り部155が、先読みブート・ファイルがブート・キャッシュ領域83にフィルされているか否かを判断する。フィルされている場合はブロック209に移行する。
フィルされていない場合は、ブロック207に移行する。ブロック205で、先読みの対象となるブート・ファイルとしてファイルb、c、d、eが存在すると判断した場合は、ファイル読み取り部155がファイルb、c、d、eをブート・キャッシュ領域83に読み出す特別なシステム・タスクを複数生成してNtReadFile関数を順番に実行する。NtReadFile関数の引数にはブート・キャッシュ領域83のアドレスが指定される。このシステム・タスクは、ブートするために生成されたユーザ・モードのタスクからは独立して実行される。
システム・タスクは優先度を上げてあり、NtReadFile関数を実行することにより、最初にブート・ファイルbの全体を読み出し、つぎにブート・ファイルcの全体を読み出し、以後順番にブート・ファイルeまで読み出す。ブート・ファイルb、c、d、eのブート・キャッシュ領域83への書き込みの際には、HDD19にシークが発生する可能性はあるが、特別なシステム・スレッドで読み出されるため、後続のタスクとの間でリソースが競合する可能性はブート・ファイルbからブート・ファイルcといったように異なるタスクにスイッチするときだけであり比較的短時間でフィルは完了する。
ブロック205で、先読みの対象となるブート・ファイルとしてファイルaが選択された場合は、同様の手順でファイル読み取り部155がファイルaの全体または一部だけをブート・キャッシュ領域83に読み出す。ブロック209ではやがて、タスク番号111のタスクAがディスパッチされて実行される。この時点では、リソースの競合が発生するとして選択されたブート・ファイルb、c、d、e、はブート・キャッシュ領域83にフィルされている。ブロック211では、タスクAで実行されるNtReadFile関数をチェックしたデータ転送部161は、ファイルaがブート・キャッシュ領域83に存在するか否かを判断する。
ブロック207でブート・ファイルaは、ブート・キャッシュ領域83にフィルされていないので、ブロック217に移行し、ファイル読み取り部155は引数を修正しないでNtReadFile関数を実行して、HDD19からタスクAで読み出されるブート・ファイルaの一部(サイズ250)をロード領域81に書き込む。ブロック203で先読み対象ファイルが選択されない場合のタスクもブロック217で処理される。ロード領域81への書き込みが完了するとブロック215でディスク・ドライバ127からタスク管理109に読み出し完了の通知が行われブロック209に戻る。
ブロック209ではつづいて実行可能キュー40に登録されたタスク番号112のタスクBがCPU11にディスパッチされて実行される。タスクBのNtReadFile関数がフックされてブート・ドライバ119のデータ転送部161が、読み出しにかかるブート・ファイルbがブート・キャッシュ領域83に存在するか否かを判断する。ブロック207でブート・ファイルbはブート・キャッシュ領域83にフィルされているので、データ転送部161はそこからNtReadFile関数で指定されたロード領域81の所定のアドレスに、ブロック213でタスク番号112のタスクBで実行されるブート・ファイルbの一部(サイズ110)を書き込む。タスク番号112のタスクBが実行されるときに、タスクAがHDD19の出力待ちの状態であったとしてもブート・ファイルbはブート・キャッシュ領域83から読み出されるのでリソースの競合は発生しない。
ブート・ドライバ119は、ブート・ファイルbをロード領域81に書き込むにあたり、ディスク・ドライバ127にHDD19への読み出し要求をしないため、つづいて実行されるタスク番号113のタスクCがリソース待ちの状態になることはなく、タスクCもブート・ファイルcの一部をブート・キャッシュ領域83から読み出す。ブート・ファイルb、c、d、eまでブート・キャッシュ領域83に格納されているので、タスク番号112のタスクBからタスク番号130のタスクAまではまったく競合が発生しないためブート時間は短縮する。
ブートが進行するに伴い、新たなブート・ファイルをロードするためのタスクが順番に生成される。本実施の形態では、ブロック203の判断を、時間周期または読み出したブート・ファイルのサイズなどを契機にしてブートが終了するまで複数回行うことで、ブートがいかなる段階に入っても競合を排除することができる。また、ブート・ファイルのサイズやブートの順番などの構成が変更されても、以前のブート・プロセスのログを生成することなくブート時間を短縮することができる。
ブート・キャッシュ領域83に蓄積されるブート・ファイルが多くなるほどロード領域81には、ブート・キャッシュ領域83から読み出されるのでブート時間は短縮する。ブート・キャッシュ領域83は、ブート中はブート・キャッシュ制御部157によりLRUでキャッシングされる。ブートが進行するにしたがって、競合するブート・ファイルは変化し、ブート・キャッシュ領域83はそれに応じて新たなブート・ファイルをキャッシングする。ブート・キャッシュ領域83はブートが完了すると通常のメモリ領域として開放される。
[第2の方法]
つぎに、ブート時間を短縮する第2の方法を説明する。第2の方法は、第1の方法に代えてまたは第1の方法に加えて実施することができる。第2の方法は、図7のブロック203を変更する。図3(B)に示したように、ブート・ファイルaの全体のサイズが大きい場合は、ブート・ファイルaをロードするためのタスクAが完了して消滅するまでの間に、実行待ちキュー40とCPU11との間でディスパッチとプリエンプトが複数回繰り返される。したがってブート・ファイルaがHDD19から読み出される限り、ディスパッチごとに後続のタスクとの間でHDD19に対するリソースの競合が発生する。
リソースの競合の頻度は、当該タスクに割り当てられるタイム・スライスの数が多いほど高くなり、ブート・ファイルに割り当てられるタイム・スライスの数はファイル・サイズが大きいほど多くなる。第2の方法では、ブロック203で、あるタスクで実行されるNtReadFile関数に設定された引数をブート・ドライバ119の先読みファイル選定部153が検査して、読み出されるブート・ファイルのサイズが所定値以上であるか否かを判断する。
ブート・ファイルaのファイル・サイズが所定値以上であると判断したときは、ブート・ファイルaの全体または一部を特別なシステム・タスクを生成してブロック207でブート・キャッシュ領域83に書き込む。それ以降ブート・ファイルaを読み出すタスクが実行されるときはブート・キャッシュ領域83からロード領域81に転送されるため、ブート・ファイルaに前後して実行されるタスクとの間でHDD19に対するリソースの競合が発生することはなくなる。
[第3の方法]
つぎに、ブート時間を短縮する第3の方法を説明する。第3の方法は、第1の方法および第2の方法またはそのいずれかに加えて実施することができる。図8は、ブート中の経過時間と単位時間あたりにロードされたブート・ファイルのサイズ(Mbps)の一例を示すグラフである。ライン301はブート・ファイルの単位時間ごとの平均読み出しサイズで、ライン303はライン301に対する所定期間ごとの短期移動平均で、ライン305はライン301に対する所定期間ごとの長期移動平均を示す。
ブート中は読み出されるブート・ファイルの種類およびタスクが実行される順番で時間あたりの平均読み出しサイズは複雑に変化する。第3の方法では、クロス・ポイント307で短期移動平均303が長期移動平均305よりも下回ったときにブートが停滞していると判断してそれ移行に読み出されるブート・ファイルのブート・キャッシュ領域83への先読みを行う。図7のブロック203においてブート・ドライバ119の先読みファイル選定部153が、短期移動平均303が長期移動平均35よりも下回ったと判断したときに、ファイル読み取り部155がそれ以降に実行されるタスクが読み出すブート・ファイルを、システム・タスクを生成してブート・キャッシュ領域83の容量が許す範囲でフィルする。なお、ブート・キャッシュ領域83にフィルするファイルには、クロス・ポイント307で実行されたタスクよりも少し前に実行されたタスクのファイルを含めてもよい。
なお、第3の方法を実行している間は、第1の方法および第2の方法は停止する。ブート・ファイルがブート・キャッシュ領域83から読み出されるにしたがって、単位時間あたりの平均読み出しサイズは上昇する。図7のブロック203においてブート・ドライバ119の先読みファイル選定部153が、クロス・ポイント309で短期移動平均303が長期移動平均35よりも上回ったと判断したときにブート・キャッシュ領域83への先読みを中止する。それ以後はブート・キャッシュ領域83を利用して第1の方法または第2の方法を実行することができる。
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
コンピュータに実装されたハードウエアの概略構成を示すブロック図である。 タスクの状態を説明する図である。 ブートが遅延する原因を説明する図である ブートを実現する構成を説明するためのブロック図である。 ブート・ドライバの主要な構成を示す機能ブロック図である。 実行可能キューに複数のタスクが登録されている様子を示す図である。 ブート時間を短縮する手順を記載したフローチャートである。 ブート中の経過時間と単位時間あたりにロードされたブート・ファイルのサイズの一例を示すグラフである。
符号の説明
81…ロード領域
83…ブート・キャッシュ領域
85…OSキャッシュ領域

Claims (17)

  1. マルチタスクのオペレーティング・システムを搭載するコンピュータにおいてハード・ディスク・ドライブからブートする方法であって、
    前記コンピュータが、前記ハード・ディスク・ドライブからブート・ファイルをロードするために生成されて順番に実行される複数のタスクの名称と前記ブート・ファイルのサイズを今回のブート時に観測するステップと、
    前記コンピュータが、前記観測した複数のタスクの中で同一名称のタスクがロードするブート・ファイルのサイズと実行順序が前記同一名称のタスクの間に存在する複数のタスクがそれぞれロードする複数のブート・ファイルの合計サイズを比較してサイズの大きい方の前記ブート・ファイルまたは前記複数のブート・ファイルを先読みブート・ファイルとして選択するステップと、
    前記コンピュータが、ブートするために生成したタスクから独立した、前記ブート・ファイルをロードするために生成したタスクよりも優先度の高いシステム・タスクを生成して前記選択した先読みブート・ファイルをブート・キャッシュにフィルするステップと、
    前記コンピュータが、フィルしたあとに読み出されるブート・ファイルが前記ブート・キャッシュにフィルされている場合に前記ブート・ファイルを前記ブート・キャッシュからロードするステップと
    を有するブート方法。
  2. 前記選択するステップが、前記観測した複数のタスクの中に同一名称のタスクが所定数以上ある場合に実行される請求項1に記載のブート方法。
  3. 前記フィルするステップが、前記同一名称のタスクがロードするブート・ファイルの全体または前記同一名称のタスクの間に存在する複数のタスクがそれぞれロードする複数のブート・ファイルの全体をフィルするステップを含む請求項1または請求項2に記載のブート方法。
  4. マルチタスクのオペレーティング・システムを搭載するコンピュータにおいてハード・ディスク・ドライブからブートする方法であって、
    前記コンピュータが、順番に実行される複数のタスクが前記ハード・ディスク・ドライブからそれぞれロードする複数のブート・ファイルのサイズを今回のブート時に観測するステップと、
    前記コンピュータが、前記観測した複数のブート・ファイルの中でサイズが所定値以上のブート・ファイルを先読みブート・ファイルとして選択するステップと、
    前記コンピュータが、ブートするために生成したタスクから独立した、前記ブート・ファイルをロードするために生成したタスクよりも優先度の高いシステム・タスクを生成して前記選択した先読みブート・ファイルをブート・キャッシュにフィルするステップと、
    前記コンピュータが、フィルしたあとに読み出されるブート・ファイルが前記ブート・キャッシュにフィルされている場合に前記ブート・ファイルを前記ブート・キャッシュからロードするステップと
    を有するブート方法。
  5. マルチタスクのオペレーティング・システムを搭載するコンピュータにおいてハード・ディスク・ドライブからブートする方法であって、
    前記コンピュータが、前記ハード・ディスク・ドライブから複数のブート・ファイルをロードするために順番に実行される複数のタスクを今回のブート時に観測するステップと、
    前記コンピュータが、前記ハード・ディスク・ドライブからブート・ファイルをロードするために生成されて順番に実行される複数のタスクから1つおきの順番に選択したタスクが読み出すブート・ファイルを先読みブート・ファイルとして選択するステップと、
    前記コンピュータが、ブートするために生成したタスクから独立した、前記ブート・ファイルをロードするために生成したタスクよりも優先度の高いシステム・タスクを生成して前記選択した先読みブート・ファイルをブート・キャッシュにフィルするステップと、
    前記コンピュータが、フィルしたあとに読み出されるブート・ファイルが前記ブート・キャッシュにフィルされている場合に前記ブート・ファイルを前記ブート・キャッシュからロードするステップと
    を有するブート方法。
  6. 前記選択するステップを、ブート中の一定の時間ごとに実行する請求項1から請求項5のいずれかに記載のブート方法。
  7. 前記コンピュータが、前記ハード・ディスク・ドライブから単位時間当たりにロードされるブート・ファイルのサイズに関する短期移動平均と長期移動平均を計算するステップと、
    前記コンピュータが、前記短期移動平均が前記長期移動平均よりも下回ったタイミングに基づいてそれ以降に読み出すブート・ファイルを先読みブート・ファイルとして選択するステップと
    を有する請求項1から請求項6のいずれかに記載のブート方法。
  8. 前記短期移動平均が前記長期移動平均を上回ったことに応答して前記ブート・ファイルの前記ブート・キャッシュに対するフィルを停止する請求項7に記載のブート方法。
  9. マルチタスクのオペレーティング・システムが搭載され複数のブート・ファイルを格納するハード・ディスク・ドライブからブートするコンピュータであって、
    プロセッサと、
    前記プロセッサが実行するデータを記憶するメイン・メモリと、
    ブート・キャッシュと、
    ブート・ドライバを格納する不揮発性メモリとを有し、
    前記ブート・ドライバは前記オペレーティング・システムと協働して前記コンピュータに、
    前記ハード・ディスク・ドライブからブート・ファイルをロードするために生成されて順番に実行される複数のタスクの名称と前記ブート・ファイルのサイズを今回のブート時に観測する機能と、
    前記観測した複数のタスクの中で同一名称のタスクがロードするブート・ファイルのサイズと実行順序が前記同一名称のタスクの間に存在する複数のタスクがそれぞれロードする複数のブート・ファイルの合計サイズを比較してサイズの大きい方の前記ブート・ファイルまたは前記複数のブート・ファイルを先読みブート・ファイルとして選択する機能と、
    ブートするために生成したタスクから独立した、前記ブート・ファイルをロードするために生成したタスクよりも優先度の高いシステム・タスクを生成して前記選択した先読みブート・ファイルを前記ブート・キャッシュにフィルする機能と、
    フィルしたあとに読み出されるブート・ファイルが前記ブート・キャッシュにフィルされている場合に前記ブート・キャッシュからロードする機能と
    を実現させるコンピュータ。
  10. マルチタスクのオペレーティング・システムが搭載され複数のブート・ファイルを格納するハード・ディスク・ドライブからブートするコンピュータであって、
    プロセッサと、
    前記プロセッサが実行するデータを記憶するメイン・メモリと、
    ブート・キャッシュと、
    ブート・ドライバを格納する不揮発性メモリとを有し、
    前記ブート・ドライバは前記オペレーティング・システムと協働して前記コンピュータに、
    順番に実行される複数のタスクが前記ハード・ディスク・ドライブからそれぞれロードする複数のブート・ファイルのサイズを今回のブート時に観測する機能と、
    前記観測した複数のブート・ファイルの中でサイズが所定値以上のブート・ファイルを先読みブート・ファイルとして選択する機能と、
    ブートするために生成したタスクから独立した、前記ブート・ファイルをロードするために生成したタスクよりも優先度の高いシステム・タスクを生成して前記選択した先読みブート・ファイルをキャッシュにフィルする機能と、
    フィルしたあとに読み出されるブート・ファイルが前記ブート・キャッシュにフィルされている場合に前記ブート・ファイルを前記ブート・キャッシュからロードする機能と
    を実現させるコンピュータ。
  11. マルチタスクのオペレーティング・システムが搭載され複数のブート・ファイルを格納するハード・ディスク・ドライブからブートするコンピュータであって、
    プロセッサと、
    前記プロセッサが実行するデータを記憶するメイン・メモリと、
    ブート・キャッシュと、
    ブート・ドライバを格納する不揮発性メモリとを有し、
    前記ブート・ドライバは前記オペレーティング・システムと協働して前記コンピュータに、
    前記ハード・ディスク・ドライブから複数のブート・ファイルをロードするために順番に実行される複数のタスクを観測する機能と、
    前記ハード・ディスク・ドライブからブート・ファイルをロードするために生成されて順番に実行される複数のタスクから1つおきの順番に選択したタスクが読み出すブート・ファイルを先読みブート・ファイルとして選択する機能と、
    ブートするために生成したタスクから独立した、前記ブート・ファイルをロードするために生成したタスクよりも優先度の高いシステム・タスクを生成して前記選択した先読みブート・ファイルをブート・キャッシュにフィルする機能と、
    フィルしたあとに読み出されるブート・ファイルが前記ブート・キャッシュにフィルされている場合に前記ブート・ファイルを前記ブート・キャッシュからロードする機能と
    を実現させるコンピュータ。
  12. 前記ブート・ドライバは前記オペレーティング・システムと協働して前記コンピュータに、
    前記ハード・ディスク・ドライブから単位時間当たりにロードされるブート・ファイルのサイズに関する短期移動平均と長期移動平均を計算する機能と、
    前記短期移動平均が前記長期移動平均よりも下回ったタイミングに基づいてそれ以降に読み出すブート・ファイルを先読みブート・ファイルとして選択する機能と
    を実現させる請求項9から請求項11のいずれかに記載のコンピュータ。
  13. 前記ブート・キャッシュが前記メイン・メモリの一部にブート・キャッシュ領域として構成されており、前記ブート・ドライバはブートを完了した後に前記ブート・キャッシュ領域を開放する請求項9から請求項12のいずれかに記載のコンピュータ。
  14. 複数のブート・ファイルを格納するハード・ディスク・ドライブからブートするコンピュータに、マルチタスクのオペレーティング・システムと協働して、
    前記ハード・ディスク・ドライブからブート・ファイルをロードするために生成されて順番に実行される複数のタスクの名称と前記ブート・ファイルのサイズを今回のブート時に観測する機能と、
    前記観測した複数のタスクの中で同一名称のタスクがロードするブート・ファイルのサイズと実行順序が前記同一名称のタスクの間に存在する複数のタスクがそれぞれロードする複数のブート・ファイルの合計サイズを比較してサイズの大きい方の前記ブート・ファイルまたは前記複数のブート・ファイルを先読みブート・ファイルとして選択する機能と、
    ブートするために生成したタスクから独立した、前記ブート・ファイルをロードするために生成したタスクよりも優先度の高いシステム・タスクを生成して前記選択した先読みブート・ファイルをブート・キャッシュにフィルする機能と、
    フィルしたあとに読み出されるブート・ファイルが前記ブート・キャッシュにフィルされている場合に前記ブート・ファイルを前記ブート・キャッシュからロードする機能と
    を実現させるコンピュータ・プログラム。
  15. 複数のブート・ファイルを格納するハード・ディスク・ドライブからブートするコンピュータに、マルチタスクのオペレーティング・システムと協働して、
    順番に実行される複数のタスクが前記ハード・ディスク・ドライブからそれぞれロードする複数のブート・ファイルのサイズを今回のブート時に観測する機能と、
    前記観測した複数のブート・ファイルの中でサイズが所定値以上のブート・ファイルを先読みブート・ファイルとして選択する機能と、
    ブートするために生成したタスクから独立した、前記ブート・ファイルをロードするために生成したタスクよりも優先度の高いシステム・タスクを生成して前記選択した先読みブート・ファイルをブート・キャッシュにフィルする機能と、
    フィルしたあとに読み出されるブート・ファイルが前記ブート・キャッシュにフィルされている場合に前記ブート・ファイルを前記ブート・キャッシュからロードする機能と
    を実現させるコンピュータ・プログラム。
  16. 複数のブート・ファイルを格納するハード・ディスク・ドライブからブートするコンピュータに、マルチタスクのオペレーティング・システムと協働して、
    前記ハード・ディスク・ドライブから複数のブート・ファイルをロードするために順番に実行される複数のタスクを今回のブート時に観測する機能と、
    前記ハード・ディスク・ドライブからブート・ファイルをロードするために生成されて順番に実行される複数のタスクから1つおきの順番に選択したタスクが読み出すブート・ファイルを先読みブート・ファイルとして選択する機能と、
    ブートするために生成したタスクから独立した、前記ブート・ファイルをロードするために生成したタスクよりも優先度の高いシステム・タスクを生成して前記選択した先読みブート・ファイルをブート・キャッシュにフィルする機能と、
    フィルしたあとに読み出されるブート・ファイルが前記ブート・キャッシュにフィルされている場合に前記ブート・ファイルを前記ブート・キャッシュからロードする機能と
    を実現させるコンピュータ・プログラム。
  17. さらに、
    前記ハード・ディスク・ドライブから単位時間当たりにロードされるブート・ファイルのサイズに関する短期移動平均と長期移動平均を計算する機能と、
    前記短期移動平均が前記長期移動平均よりも下回ったタイミングに基づいてそれ以降に読み出すブート・ファイルを先読みブート・ファイルとして選択する機能と
    を実現させる請求項14から請求項16のいずれかに記載のコンピュータ・プログラム。
JP2008094502A 2008-04-01 2008-04-01 コンピュータおよびブート方法 Active JP4795378B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008094502A JP4795378B2 (ja) 2008-04-01 2008-04-01 コンピュータおよびブート方法
US12/412,758 US8151102B2 (en) 2008-04-01 2009-03-27 System and methods for booting electronic devices

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008094502A JP4795378B2 (ja) 2008-04-01 2008-04-01 コンピュータおよびブート方法

Publications (2)

Publication Number Publication Date
JP2009245405A JP2009245405A (ja) 2009-10-22
JP4795378B2 true JP4795378B2 (ja) 2011-10-19

Family

ID=41118930

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008094502A Active JP4795378B2 (ja) 2008-04-01 2008-04-01 コンピュータおよびブート方法

Country Status (2)

Country Link
US (1) US8151102B2 (ja)
JP (1) JP4795378B2 (ja)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009146061A (ja) * 2007-12-12 2009-07-02 Canon Inc 情報処理装置及び前記装置の起動方法
US8230208B2 (en) * 2009-04-20 2012-07-24 Intel Corporation Booting an operating system of a system using a read ahead technique
US8463873B2 (en) * 2010-03-30 2013-06-11 Lenovo (Singapore) Pte. Ltd. Streaming client system base images
US9003175B2 (en) 2011-04-29 2015-04-07 Lenovo (Singapore) Pte. Ltd. System and method for accelerated boot performance
US20130139176A1 (en) * 2011-11-28 2013-05-30 Samsung Electronics Co., Ltd. Scheduling for real-time and quality of service support on multicore systems
US9110595B2 (en) 2012-02-28 2015-08-18 AVG Netherlands B.V. Systems and methods for enhancing performance of software applications
TWI464583B (zh) * 2012-03-02 2014-12-11 Wistron Corp 取得觸發功能之指令的方法
WO2014019117A1 (en) * 2012-07-30 2014-02-06 Hewlett-Packard Development Company, L. P. Booting printer
CN102968324B (zh) * 2012-11-30 2015-11-25 北京奇虎科技有限公司 计算机系统开机文件的整理方法和装置
US9110677B2 (en) 2013-03-14 2015-08-18 Sandisk Technologies Inc. System and method for predicting and improving boot-up sequence
US9632803B2 (en) * 2013-12-05 2017-04-25 Red Hat, Inc. Managing configuration states in an application server
US10936369B2 (en) * 2014-11-18 2021-03-02 International Business Machines Corporation Maintenance of local and global lists of task control blocks in a processor-specific manner for allocation to tasks
US10095589B2 (en) * 2015-06-09 2018-10-09 Acronis International Gmbh System and method for optimization of operating system restore
US10055236B2 (en) * 2015-07-02 2018-08-21 Sandisk Technologies Llc Runtime data storage and/or retrieval
US10289421B2 (en) * 2017-02-17 2019-05-14 Dell Products, L.P. Booting of IHS from SSD using PCIe
US10732848B2 (en) * 2018-06-29 2020-08-04 Western Digital Technologies, Inc. System and method for predictive read of random data
US11416263B1 (en) 2021-02-12 2022-08-16 Western Digital Technologies, Inc. Boosted boot procedure by background re-arrangement of read patterns
US20230205547A1 (en) * 2021-12-29 2023-06-29 Ati Technologies Ulc Multiple module bootup operation

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6476314A (en) 1987-09-18 1989-03-22 Fujitsu Ltd Disk control system
JPH0736784A (ja) * 1993-07-23 1995-02-07 Ricoh Co Ltd 外部記憶装置
US6073232A (en) * 1997-02-25 2000-06-06 International Business Machines Corporation Method for minimizing a computer's initial program load time after a system reset or a power-on using non-volatile storage
US20010047473A1 (en) * 2000-02-03 2001-11-29 Realtime Data, Llc Systems and methods for computer initialization
JP2001350669A (ja) 2000-06-07 2001-12-21 Hitachi Ltd 先読み予測装置
JP2002207635A (ja) 2001-01-11 2002-07-26 Toshiba Corp 光ディスク装置及びリードキャッシュ方法
US6920533B2 (en) * 2001-06-27 2005-07-19 Intel Corporation System boot time reduction method
JP2004030184A (ja) * 2002-06-25 2004-01-29 Romwin:Kk コンピュータ起動装置
EP1709532A1 (en) * 2004-01-21 2006-10-11 Koninklijke Philips Electronics N.V. Method of increasing boot-up speed
JP2007179089A (ja) * 2005-12-26 2007-07-12 Toshiba Corp 情報処理装置、アクセス制御方法、及びプログラム
JP2007241927A (ja) * 2006-03-13 2007-09-20 Toshiba Corp データ記憶装置及び方法
US20080209198A1 (en) * 2007-02-26 2008-08-28 Majni Timothy W Boot Acceleration For Computer Systems
US8010776B2 (en) * 2007-12-17 2011-08-30 Spansion Llc Adaptive system boot accelerator for computing systems

Also Published As

Publication number Publication date
US20090249055A1 (en) 2009-10-01
US8151102B2 (en) 2012-04-03
JP2009245405A (ja) 2009-10-22

Similar Documents

Publication Publication Date Title
JP4795378B2 (ja) コンピュータおよびブート方法
US10437727B2 (en) Transparent host-side caching of virtual disks located on shared storage
JP5385347B2 (ja) メイン・メモリのフリー・メモリ量を拡大する方法およびコンピュータ
JP6221086B2 (ja) 先読み技術を利用して行われる、システムのオペレーティングシステムのブート、プリフェッチコントローラ、ストレージデバイス、方法、プログラム、及び、コンピュータ可読記録媒体
JP6050262B2 (ja) 仮想ディスクストレージ技術
US7206931B2 (en) Aggressive content pre-fetching during pre-boot runtime to support speedy OS booting
US7689802B2 (en) Controlling memory access in a multi-booting system
US20080209198A1 (en) Boot Acceleration For Computer Systems
JP4886866B2 (ja) 主記憶装置へのアクセスを高速化する方法および記憶装置システム
JP5026494B2 (ja) 高速で起動するコンピュータ
JP2006079628A (ja) ユーザデータをパーティションファイルに記憶する、又はユーザデータを含むパーティションファイルを使用するシステム及び方法
US20110010532A1 (en) Booting method and computer system using the booting method
EP2851792A1 (en) Solid state drives that cache boot data
US9361124B2 (en) Computer system and startup method
JP2006313531A (ja) ファイル管理システム
JP5335625B2 (ja) ブート時間を短縮するコンピュータ・プログラム
JP4597032B2 (ja) コンピュータシステム、それにおける基本プログラムの起動方法、及びローダプログラム
KR20140018134A (ko) 오프 상태로부터의 운영 체제의 고속 부팅이 가능한 임베디드 시스템 및 임베디드 시스템에서의 부팅 방법
JP5699665B2 (ja) サーバ装置、処理実行方法およびプログラム
JP2003131893A (ja) 演算処理システム、コンピュータ・システム上でのタスク制御方法、並びに記憶媒体
JP5949330B2 (ja) 情報処理装置、情報処理方法
JP2009217589A (ja) 実行用メモリ領域割当装置及び実行用メモリ領域割当プログラム及び記録媒体

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091222

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110308

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110419

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110527

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110726

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110727

R150 Certificate of patent or registration of utility model

Ref document number: 4795378

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140805

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140805

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250