(57)【特許請求の範囲】
【請求項１】
カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎にメモリにロードし、該メモリにロードされたカーネルイメージを、ロードされた区画から順次実行することによりＯＳを起動するＯＳの起動方法であって、
前記カーネルイメージのＯＳ起動処理の内容を解析し、該解析結果に基づく処理順序によってカーネルイメージを再配置することにより、カーネルイメージを複数の区画に分割するＯＳの起動方法。
【請求項２】
請求項１に記載のＯＳの起動方法において、
前記複数の区画における処理内容が、前記複数の区画を跨るものである場合、次の処理の区画が前記メモリ上にロードされるまで当該処理の実行を待機することを特徴とするＯＳの起動方法。
【請求項３】
請求項１に記載のＯＳの起動方法において、
カーネルイメージをＯＳ起動処理の処理順序に区画化する際に、前記メモリへのロード処理時間と区画内におけるＯＳ起動処理時間とに基づいて区画化サイズを調整するＯＳの起動方法。
【請求項４】
カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎にメモリにロードし、該メモリにロードされたカーネルイメージを、ロードされた区画から順次実行することによりＯＳを起動するＯＳの起動方法であって、
カーネルイメージをメモリにロードする際にロードされるブートセクタに含まれる情報に応じて、カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎に前記メモリにロードし、ロードされた区画から順次実行する処理と、カーネルイメージを一括して前記メモリにロードして実行する処理とを選択的に行うＯＳの起動方法。
【請求項５】
カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎にメモリにロードし、該メモリにロードされたカーネルイメージを、ロードされた区画から順次実行することによりＯＳを起動するためのプログラムであって、
コンピュータに、
前記カーネルイメージのＯＳ起動処理の内容を解析し、該解析結果に基づく処理順序によってカーネルイメージを再配置することにより、カーネルイメージを複数の区画に分割する手順を実行させるためのプログラム。
【請求項６】
請求項５に記載のプログラムにおいて、
コンピュータに、
前記複数の区画における処理内容が、前記複数の区画を跨るものである場合、次の処理の区画が前記メモリ上にロードされるまで当該処理の実行を待機する手順を実行させるためのプログラム。
【請求項７】
請求項５に記載のプログラムにおいて、
コンピュータに、
カーネルイメージをＯＳ起動処理の処理順序に区画化する際に、前記メモリへのロード処理時間と区画内におけるＯＳ起動処理時間とに基づいて区画化サイズを調整する手順を実行させるためのプログラム。
【請求項８】
カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎にメモリにロードし、該メモリにロードされたカーネルイメージを、ロードされた区画から順次実行することによりＯＳを起動するためのプログラムであって、
コンピュータに、
カーネルイメージをメモリにロードする際にロードされるブートセクタに含まれる情報に応じて、カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎に前記メモリにロードし、ロードされた区画から順次実行する処理と、カーネルイメージを一括して前記メモリにロードして実行する処理とを選択的に行う手順を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＯＳの起動方法に関し、特に、その高速化技術に関する。
【背景技術】
【０００２】
図１０は、一般的なコンピュータシステムの一例を示す図であり、図１１は、図１０に示したコンピュータシステムの起動方法を説明するための図である。
【０００３】
図１０に示したコンピュータシステムにおいては、電源が投入されると、ＯＳ起動処理が実行される。このＯＳ起動処理は、ブートローダ１０５によってハードディスク１０２やＲＯＭ１０３等の外部記憶装置またはネットワークから、カーネルイメージをメモリ１０１へロードするカーネルイメージのロード処理と、メモリ１０１にロードされたカーネルイメージを実行して初期化を行うカーネル初期化処理とからなる。
【０００４】
ブートローダ１０５によって、ハードディスク１０２やＲＯＭ１０３等の外部記憶装置またはネットワークから、カーネルイメージがメモリ１０１へロードされ、その後、メモリ１０１にロードされたカーネルイメージを実行して初期化が行われることになる。なお、メモリ１０１へのカーネルイメージのロード処理は、カーネルイメージ全体をブートローダ１０５が一括してメモリ１０１へロードしている。
【０００５】
このように、カーネル初期化処理の開始は、カーネルイメージの全てがメモリ１０１にロードされてから行われることになる。
【０００６】
このようなＯＳの起動方法については、様々なものが考えられており、ＯＳのメモリイメージを分割することによりメモリへのロードを早める技術も考えられている（例えば、特許文献１参照。）。
【特許文献１】特開２００７−６５７５３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、最近ではＯＳの高機能化が進み、カーネルイメージのサイズが増加してきている。このカーネルイメージのサイズ増加は、カーネルイメージのロード処理に掛かる時間を増加させてしまう。カーネルイメージのロード処理に掛かる時間の増加は、ＯＳ起動の完了までの時間増加にもつながっており、システムの電源を投入してから、システムを使用するユーザに対して、ＯＳの機能を提供することが可能となるまでの時間が増加してしまうことで、近年問題となっていた。
【０００８】
また、システムに搭載されているＣＰＵの数や、ＣＰＵのコア数も増加してきているが、上述したようなものにおいては、ブートローダによるカーネルイメージのメモリへのロード処理の完了後にカーネル初期化処理が実行されていたため、ロード処理とカーネル初期化処理との実行並列性がなく、システムに搭載されている複数のＣＰＵが十分に活用されていない。これは、複数のＣＰＵを使用する場合には各ＣＰＵ間での排他制御を行う必要があるが、この排他制御を実施するのは従来ではＯＳが行っており、ＯＳ起動処理、つまりＯＳを起動する処理においてはそのＯＳの機能を使用することができないため、各ＣＰＵ間での排他制御を行えなかったからである。すなわち、ロード処理を行うブートローダとカーネル初期化処理を行うカーネルイメージとが異なる実行モジュールであり、両者の間には共有できる排他機構がないために、ロード処理とカーネル初期化処理との並列実行を制御することができなかったためである。
【０００９】
本発明は、上述したような従来の技術が有する問題点に鑑みてなされたものであって、ＯＳ起動処理の高速化を図ることができるＯＳの起動方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために本発明は、
カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎にメモリにロードし、該メモリにロードされたカーネルイメージを、ロードされた区画から順次実行することによりＯＳを起動するＯＳの起動方法であって、
前記カーネルイメージのＯＳ起動処理の内容を解析し、該解析結果に基づく処理順序によってカーネルイメージを再配置することにより、カーネルイメージを複数の区画に分割する。
【発明の効果】
【００１１】
以上説明したように本発明においては、メモリにロードされて実行されるカーネルイメージを複数の区画に分割し、分割された該カーネルイメージを複数の区画毎にメモリにロードし、ロードされた区画から順次実行する構成としたため、カーネルイメージのメモリへのロードと実行とが、複数の区画毎に並列して行われることとなり、それにより、ＯＳ起動処理の高速化を図ることができる。
【発明を実施するための最良の形態】
【００１２】
以下に、本発明の実施の形態について図面を参照して説明する。
【００１３】
図１は、本発明のＯＳの起動方法が用いられるシステムの一例を示す図である。
【００１４】
本例は、図１に示すように、２つのＣＰＵ１００−１，１００−２を有するマルチＣＰＵ環境のシステムである。
【００１５】
本形態においては、図１に示したようなシステムにおいて、ＯＳ起動処理の解析と、カーネルイメージの再配置と、カーネルイメージのロード／カーネル初期化の並列処理と、マルチＣＰＵ／マルチコア環境での並列実行処理とを実現するために必要なストッパーを用いることで、マルチＣＰＵ／マルチコア環境におけるＯＳ起動処理の高速化を実現する。マルチコア環境においては、後述する内容について各コアをＣＰＵ１００−１，１００−２として扱えば、マルチＣＰＵ環境とマルチコア環境での差分は無く、本発明を適用することが可能である。
【００１６】
本発明では、まず、ＯＳ起動処理の解析を一度実行し、カーネル初期化処理の処理順序を解析した後に、処理順序に沿った形で一定サイズに分けるカーネルイメージの区画化を実行する。
【００１７】
ＣＰＵ１００−１で実行されているブートローダは、区画化したカーネルイメージの最初の区画をメモリ１０１にロードし、完了したことをＣＰＵ１００−２に通知する。
【００１８】
その後、ＣＰＵ１００−１で実行されているブートローダは、ＣＰＵ１００−２に通知すること無く各区画をそれぞれメモリ１０１へロードする。
【００１９】
最初の区画のロード完了が通知されたＣＰＵ１００−２は、カーネル初期化処理の実行を開始する。
【００２０】
その後、ＣＰＵ１００−１でのカーネルイメージのロード処理とＣＰＵ１００−２でのカーネル初期化処理とをそれぞれ並列に実行することで、従来での単一ＣＰＵでのＯＳ起動処理の実行と比較して、より早くＯＳ起動処理を完了させることが可能となる。
【００２１】
本形態においては、このＣＰＵ１００−１でのカーネルイメージのロード処理とＣＰＵ１００−２でのカーネル初期化の並列処理にはストッパーというモジュールを用いる。
【００２２】
ストッパーは、ＣＰＵ１００−１でロードされた区画分のカーネル初期化処理を終え、次の区画分のカーネル初期化処理を実行する際に、次の区画がメモリにロードされていることを保証するまで、ＣＰＵ１００−２で行うカーネル初期化処理の実行を待機するモジュールである。
【００２３】
つまり、メモリ１０１にロードされていない区画についてのカーネル初期化処理の実行をストッパーが抑制することで、ＣＰＵ１００−１とＣＰＵ１００−２との排他制御、つまりＣＰＵ１００−１がまだメモリ１０１にロードしていない区画についてのＣＰＵ１００−２におけるカーネル初期化処理の実行を防ぎ、並列処理の実現を可能とする。
【００２４】
以下に、上述した各処理の詳細について説明する。
【００２５】
まず、ＯＳ起動処理の解析について説明する。
【００２６】
図２は、図１に示したシステムにてメモリ１０１にロードされるカーネルの構造を示す図である。また、図３は、ＯＳ起動処理の内容の解析結果を示す図である。
【００２７】
図２に示すように、情報採取モジュール３００が組み込まれたカーネル１１０にて、ＯＳ起動処理を１度実行する。その際、ブートローダからブートセクタに含まれるブートパラメータが渡されるが、このブートパラメータをメモリ１０１内のヘッダに保存する。
【００２８】
次に、カーネル初期化処理において、図３に示すように、実行された順番に、関数名４００、関数アドレス４０１及び関数サイズ４０２を採取し、実行した順にソートを実施する。なお、複数実行される関数が存在する場合には、最初の実行時のみを記録しておく。
【００２９】
また、ブートローダと競合するデバイス初期化処理、またはカーネル初期化処理内でのマルチＣＰＵ化開始までを並列化可能な区間として検出し、並列化可能な区間として定義する。この並列化可能な区間を定義する理由としては、複数のＣＰＵを有するシステムにおいては、単一ＣＰＵにて実行していたカーネル初期化処理の途中から複数のＣＰＵを使用してカーネル初期化処理を行うため、ブートローダによるカーネルイメージの分割ロードとカーネル初期化処理とを複数のＣＰＵで並列実行を行うことができなくなってしまい、この時点までは並列化可能な区間として判断し定義しておく必要があるからである。つまり、並列化可能な区間を定義しておくことで、この区間においてはブートローダによるカーネルイメージの分割ロードと、カーネル初期化処理とを複数のＣＰＵで並列実行することが可能であると判断できる。並列化可能な区間を把握する方法としては、カーネル初期化処理の途中から複数のＣＰＵを使用してカーネル初期化処理を行う際に、別のＣＰＵに対しての起動要求を出すことになるが、この別のＣＰＵに対しての起動処理を実行するまでを並列化可能な区間として把握する。
【００３０】
このようにして、カーネルイメージのＯＳ起動処理の内容を解析し、図３に示したような解析結果を作成する。
【００３１】
次に、カーネルソースコードの再配置について説明する。
【００３２】
図４は、カーネルソースコードの再配置処理を説明するための図である。
【００３３】
上述したようなＯＳ起動処理の解析結果とカーネルソースコードとを用いて、図４に示すように、複数の区画に分割されて実行順序に並び替えられたカーネルイメージ３０２を作成し、複数の区画毎に区画情報をヘッダに格納する。なお、区画情報とは、区画化されたカーネルイメージ３０２の各区画のサイズと、区画化されたカーネルイメージ３０２における、区画の数からなる。
【００３４】
ある区画内のカーネル初期化処理の実行が終わり、次に実行する関数の実体が別の区画のカーネルイメージ内にある、つまり処理の実行が複数の区画を跨る場合、その遷移先を後述するストッパーへと変更する。ストッパーは、次の区画のカーネルイメージのロード処理が完了するまで待機し、次の区画のロードが完了したことを確認した上で、区画内に実体を持つ関数の呼び出しを再開するモジュールである。
【００３５】
ブートパラメータによって、カーネル初期化処理の内容が変わることに対応するため、ＯＳ起動処理の解析処理で保存されたブートパラメータをメモリ１０１のヘッダに記録する。これは、ブートパラメータの内容によって、ＯＳとして提供する機能を変更することが可能であり、提供する機能の変更はカーネル初期化処理の内容が変更することにつながる。つまり、ＯＳ起動処理の解析の際に実行されたカーネル初期化処理と異なるのであれば、ＯＳ起動処理の解析結果を使用して区画化されたカーネルイメージでは、実行順序が違う可能性があり、分割ロードを実行しても、カーネル初期化処理を並行して実行することができない可能性がある。よって、ＯＳ起動処理の解析処理で保存されたブートパラメータと違うブートパラメータが渡された場合、従来通りカーネルイメージの一括ロードを実行するという判断をブートローダが行う必要があるためにブートパラメータをヘッダに記録する。
【００３６】
そして、各区画の最後に、区画化されてメモリ１０１にロードされたカーネルイメージのロードが完了した旨を示す予め決められたロード済み値を格納する領域を作成する。
【００３７】
次に、カーネルイメージのロード／カーネル初期化の並列処理について説明する。
【００３８】
図５は、カーネルイメージのロード／カーネル初期化の並列処理を説明するための図である。
【００３９】
まず、カーネルソースコードの再配置にて作成した区画情報を読み込む（ステップＳ１）。
【００４０】
そして、メモリ１０１のヘッダに保存されているブートパラメータと、渡されたブートパラメータとを比較し（ステップＳ２）、同じであれば、本発明によるＣＰＵ１００−１でのカーネルイメージのロード処理とＣＰＵ１でのカーネル初期化処理との並列実行が可能と判定した上で、ブートローダは、区画化されたカーネルイメージの分割ロードを実行する（ステップＳ３〜Ｓ９）。
【００４１】
一方、メモリ１０１のヘッダに保存されているブートパラメータと、渡されたブートパラメータとが異なる場合は、従来通り、区画化されたカーネルイメージを一括してブートローダがメモリへロードする処理を実行する（ステップＳ１０，Ｓ１１）。
【００４２】
ブートローダは、最初の区画についてカーネルイメージのロード処理を実行し、完了した際に、区画の最後にロード済み値を格納する。そして別のＣＰＵ１００−２に対して並列処理開始要求を発行した後に、次の区画のロードを開始する。これ以降、ブートローダは、各区画を順次メモリ１０１へロードし、区画の最後にロード済み値を格納する処理を実行する。
【００４３】
並列処理開始要求を受けたＣＰＵ１００−２において、ロードされた区画分の処理内容だけカーネル初期化処理を実行し、ストッパーにて次の処理開始可能な時点、つまり実行する予定の区画についてメモリ１０１へのロードが完了するまで待機する。
【００４４】
このように、カーネルイメージをメモリ１０１にロードする際にロードされるブートセクタに含まれるブートパラメータに応じて、カーネルイメージを複数の区画に分割し、そのカーネルイメージを複数の区画毎にメモリ１０１にロードし、ロードされた区画から順次実行する処理と、カーネルイメージを一括してメモリ１０１にロードして実行する処理とを選択的に行うことになる。
【００４５】
次に、ストッパーについて説明する。
【００４６】
図６は、ストッパーを説明するためのカーネルイメージを示す図である。
【００４７】
カーネル初期化処理を実行する際には、メモリ１０１上に実行する部分のカーネルイメージの区画が存在しなければ実行できない。
【００４８】
ストッパーは図６に示すように、メモリ１０１上に実行する予定のカーネルイメージがロードされるまで、カーネル初期化処理を継続しないようにするモジュールであり、カーネルソースコードの再配置処理において、区画化されたカーネルイメージ３０２の各区画に組み込まれる。
【００４９】
ＣＰＵ１００−１にて、区画化されたカーネルイメージ３０２の最初の区画がメモリ１０１にロードされ、完了したことがＣＰＵ１００−２に通知されるが、ＣＰＵ１００−２は、区画化された最初のカーネルイメージ３０２がメモリ１０１上に存在するので、この区画化単位でのカーネル初期化処理を実行することが可能である。
【００５０】
しかし、次の区画については、ブートローダによってメモリ１０１へのロードを行っている最中である可能性があり、該当区画がメモリ１０１へのロードが完了しているという保証は無いため、区画がメモリ１０１に完全にロードされるまで、ストッパー２０３にて次の区画化されたカーネルイメージ３０２でのカーネル初期化処理の実行を待機しなければならない。
【００５１】
この処理実行の保留解除は、次の区画化されたカーネルイメージ３０２がメモリ１０１にロードされた時点で解除し、カーネル初期化処理を継続する。
【００５２】
ここで、次の区画化されたカーネルイメージがメモリ１０１にロードされたことを判定する方法について説明する。
【００５３】
ストッパー２０３は、カーネルソースコードの再配置にて各区画の最後に埋め込まれているロード済み値が存在する区画の最後尾を参照し、期待しているロード済み値であるかどうかを判定することにより、区画化されたカーネルイメージがメモリ１０１にロードされたことを判断する。
【００５４】
つまり、ストッパー２０３は、メモリ１０１への区画化されたカーネルイメージのロード処理と、区画単位で実行するカーネル初期化処理の同期を取るためのモジュールであり、メモリ１０１上にまだロードされていない区画についてのカーネル初期化処理を実行することが無いように、メモリ１０１上の該当場所にロード済み値が存在するかどうかを判定して、カーネル初期化処理の継続実行を行うかどうかの制御を行う。
【００５５】
このストッパー２０３のモジュールにより、ブートローダにおいては、区画化されたカーネルイメージを順にメモリ１０１にロードするだけで良く、ブートローダが排他を意識した処理を行う必要が無い。
【００５６】
このように、ＯＳ起動時に、一括してメモリにロードしていたカーネルイメージを、一定サイズに分割し、分割した単位ごとにメモリへロードする処理とＯＳの起動処理とを並列して実行することでＯＳ起動の完了を高速化する。
【００５７】
以下に、さらなる具体例について説明する。
【００５８】
図７は、本発明のＯＳの起動方法が用いられるシステムの一実施例を示す図である。
【００５９】
本実施例におけるシステムは図７に示すように、情報採取モジュール３００をカーネル１１０に組み込んだ上で実行するＯＳ起動処理の解析モジュール２００と、この解析モジュール２００における解析結果３０１とカーネルソースコード１０６を用いて区画化されたカーネルイメージを作成するカーネルソースコードの再配置モジュール２０１と、メモリ１０１と、カーネルソースコードの再配置モジュール２０１で作成される、区画化されたカーネルイメージ３０２をメモリ１０１にロードするブートローダ１０５と、複数のＣＰＵ１００−１，１００−２もしくは複数のコアを持ったＣＰＵ１００−１，１００−２とを有する。
【００６０】
まず、図７に示すようなシステムにおいて、予め情報採取モジュール３００をカーネル１１０組み込んだ上で、解析モジュール２００において、ＯＳ起動処理の解析を実行する。
【００６１】
ここで、解析モジュール２００におけるＯＳ起動処理の解析の詳細について説明する。
【００６２】
まず、ＯＳ起動処理を一度実行することで、ブートローダから渡されるブートパラメータを記録する。
【００６３】
ＯＳ起動処理においてカーネル初期化処理は、ブートパラメータの内容により処理内容が変更になるため、この段階でブートパラメータを記録する必要がある。
【００６４】
つまり、本発明は、実際のＯＳ起動処理においてＯＳ起動処理の解析を行った時と同じブートパラメータを渡された場合にのみ動作する。
【００６５】
記録したブートパラメータは、ヘッダに保存を行う。
【００６６】
次に、カーネル初期化処理における処理の実行順序を関数レベルでトレースする。トレースする内容の詳細は、図３に示したように関数名４００、関数アドレス４０１及び関数のサイズ４０２である。もし、ある関数が複数実行される場合には、最初に実行されたものだけをトレース結果から抽出する。これは、複数実行される関数が最初に実行される時点で、その関数が含まれているカーネルイメージの区画がメモリ１０１上に存在すれば良いため、最初に実行される処理順序だけを把握する。
【００６７】
このトレースした結果をＯＳ起動処理の解析モジュール２００における解析結果３０１として作成する。
【００６８】
ＯＳ起動処理の解析モジュール２００にて確認したブートパラメータと、ＯＳ起動処理の解析結果３０１と、カーネルソースコード１０６とを用いて再配置モジュール２０１にてカーネルソースコードの再配置を実行する。
【００６９】
カーネルソースコードの再配置での処理は大きく分けて、再配置処理と、ストッパー２０３の埋め込み処理と、ロード済み値領域の埋め込み処理という３つの処理が存在する。
【００７０】
まず、再配置処理について説明する。
【００７１】
再配置処理とは、区画化された上に実行順序に並び替えられた区画化されたカーネルイメージ３０２を作成することである。
【００７２】
具体的には、解析モジュール２００におけるＯＳ起動処理の解析で保存されたブートパラメータが記録されているヘッダをカーネルソースコード１０６に組み込んだ上で、ＯＳ起動処理の解析で把握した関数の処理順序に従って、カーネルイメージを区画単位に分割することである。つまり、区画化されたカーネルイメージ３０２を区画ごとの順番に実行すれば、カーネル初期化処理の関数の処理順序と同じになるように、カーネルイメージの区画化を実行することである。なお、この再配置処理後の区画化されたカーネルイメージ３０２については図４に示した通りである。
【００７３】
次に、ストッパー２０３の埋め込み処理について説明する。
【００７４】
ストッパー２０３の埋め込み処理とは、区画化されたカーネルイメージ３０２の区画での処理から別の区画へ処理が移る場合に、遷移先をストッパー２０３に差し替えることである。つまり、次の区画を実行するためには、次の区画がメモリ１０１にロードされている必要があるが、このメモリ１０１へのロードを待ち合わせる手段としてストッパー２０３を使用する。
【００７５】
待ち合わせ手段の詳細は、遷移先を一旦ストッパー２０３へ差し替えておき、ストッパー２０３にて次に実行する区画がメモリ１０１へロードされることを待ち合わせる処理を行うことで、メモリ１０１にロードされていない区画へ遷移しカーネル初期化処理が失敗してしまうことを防止する。なお、このストッパー２０３の埋め込み処理については図６に示した通りである。
【００７６】
次に、ロード済み値領域の埋め込み処理について説明する。
【００７７】
ロード済み値の領域の埋め込みとは、各区画の最後にロード処理が完了したことを示す予め決められた一定の値を埋め込む領域を作成しておくことを指す。
【００７８】
ストッパー２０３は、メモリ１０１上に存在する区画の最後尾のアドレスからこの値を参照することで、メモリ１０１へのロードが完了したことを把握することが可能となる。この値は、ストッパー２０３がメモリ１０１上に該当区画がロードされたことを把握するための値であるため、一定の値である必要がある。いわゆるマジックナンバーでも構わない。
【００７９】
上述したＯＳ起動処理の解析処理と、カーネルソースコードの再配置処理とを実行したことで、カーネルイメージの分割ロードと、カーネル初期化処理の分割実行が可能となる、区画化されたカーネルイメージ３０２の作成が完了する。
【００８０】
ここで、分割実行が可能となった区画化されたカーネルイメージ３０２を使用して、ＯＳ起動処理を実行する、カーネルイメージのロード／カーネル初期化の並列処理について説明する。
【００８１】
区画化されたカーネルイメージ３０２をメモリ１０１にロードする処理を実行するのは、ブートローダ１０５である。ブートローダ１０５は、システムの電源ＯＮ時にブートパラメータを受け取るが、この受け取ったブートパラメータと、解析モジュール２００におけるＯＳ起動処理の解析処理、並びにカーネルソースコードの再配置モジュール２０１における再配置処理で作成されたブートパラメータが記録されているヘッダとを比較し、同じであるかどうかを判定する。
【００８２】
両者が同一であれば、ブートローダ１０５は区画単位でメモリ１０１へロードする処理を行う。
【００８３】
一方、両者が異なる場合は、ＯＳ起動処理の解析モジュール２００におけるＯＳ起動処理の解析処理、再配置モジュール２０１におけるカーネルソースコードの再配置処理で区画化されたカーネルイメージ３０２の処理順序と異なるカーネル初期化処理を実行する必要があるため、従来通りカーネルイメージを一括してメモリ１０１へロードする。
【００８４】
ここで、ＯＳ起動処理の解析モジュール２００におけるＯＳ起動処理の解析処理、再配置モジュール２０１におけるカーネルソースコードの再配置処理を実行した際のブートパラメータと電源ＯＮ時にブートローダ１０５が受け取ったブートパラメータが一致する場合についての処理の詳細を説明する。
【００８５】
図８は、カーネルイメージのロード／カーネル初期化の並列処理を示す図である。
【００８６】
本システムでは複数のＣＰＵ１００−１，１００−２もしくは、ＣＰＵコアを有しているが、まず、ＣＰＵ１００−１にて実行されるブートローダは、まず区画化されたカーネルイメージ３０２の最初の区画をメモリ１０１にロードし、ロード済み値を格納する処理を実行する。
【００８７】
最初の区画についてメモリ１０１へのロードが完了し、ロード済み値を格納した際に、ブートローダ１０５は、別のＣＰＵであるＣＰＵ１００−２に対して並列処理開始要求を発行した上で、次の区画のロード処理を継続する。
【００８８】
その後、ブートローダ１０５は、ＣＰＵ１００−２の処理に関係無く、各区画のロードと、ロード完了した際にロード済み値の格納する処理を継続して実行する。
【００８９】
並列処理開始要求を受けたＣＰＵ１００−２では、最初の区画内におけるカーネル初期化処理の実行を開始する。
【００９０】
メモリ１０１にロードされている区画についてのカーネル初期化処理が完了し、次の区画へ遷移する際、カーネルソースコードの再配置にて実行されたストッパー２０３埋め込み処理のため、ストッパー２０３へ処理が遷移する。
【００９１】
ストッパー２０３は、次の区画がメモリ１０１にロードされたかどうかを判定しながら、次のカーネル初期化処理への遷移を待ち合わせる。メモリ１０１へのロードが完了したかどうかの判定は、区画の最後にあたる部分までオフセットをずらして参照することでロード済み値を参照し判定する。
【００９２】
次の区画がメモリ１０１にロードされたことを把握した際には、ストッパー２０３は、次の区画へ遷移を許可し、ＣＰＵ１００−２は次の区画内のカーネル初期化処理を実行する。
【００９３】
このようなストッパー２０３による待ち合わせ機構により、カーネルイメージのロード処理と、カーネル初期化処理との並列実行が可能となり、従来全てのカーネルイメージをメモリ１０１にロードした後にカーネル初期化処理を実行していた場合と比べて、より高速にＯＳ起動処理を完了することが可能となる。
【００９４】
本実施例における第１の効果は、ＯＳ起動処理の完了を早めることができる点である。
【００９５】
従来では、メモリ１０１へのカーネルイメージのロード処理が完了した後にカーネル初期化処理を開始するため、ＯＳの高機能化に伴うカーネルイメージのサイズ増加に伴いカーネル初期化処理の完了までの時間が増えていた。また、マルチＣＰＵ／マルチコア環境においても、カーネルイメージのロード処理とカーネル初期化処理の途中までは単一ＣＰＵ／コアにて実行しており、マルチＣＰＵ／マルチコア環境を活用できていなかった。
【００９６】
本発明を適用することでメモリ１０１へのカーネルイメージのロード処理と、カーネル初期化処理とを区画単位で複数のＣＰＵ／コアにて並列に実行することが可能となり、ＯＳ起動処理の完了を従来よりも早めることができる。
【００９７】
第２の効果は、ＯＳ機能を使用する事無く、複数ＣＰＵでのメモリ１０１へのカーネルイメージのロード処理とカーネル初期化処理との並列処理を実現できることである。
【００９８】
複数ＣＰＵが存在する場合、各ＣＰＵ間での並列処理を実行するには複数ＣＰＵ／コア間の排他制御が必要であり、従来では、この複数ＣＰＵ／コア間の排他制御はＯＳの役割、つまりＯＳの機能を必要としておりＯＳが起動していない状態ではＣＰＵ／コア間の排他を実現することができなかった。
【００９９】
本発明では、ストッパー２０３を用いることで、ＯＳ起動処理が完了する以前、つまりＯＳの機能を使用する事無く、各ＣＰＵでのメモリ１０１へのカーネルイメージのロード処理とカーネル初期化処理との並列処理の実行を実現することが可能となる。
【０１００】
このように、従来の技術には存在しないカーネルイメージの分割、メモリへのカーネルの分割ロード、メモリへのカーネルイメージのロードと並行しながらカーネル初期化処理の分割実行、カーネルを介さない複数ＣＰＵ／複数コア間の排他制御を実現することで、ＯＳ起動処理の高速化を実現することが可能となる。
【０１０１】
（他の実施の形態）
（１）メモリバックアップ機能が存在するシステムにおいての本発明の実施例
本発明は、メモリバックアップ機能が存在するシステムにおいても適用可能である。
【０１０２】
メモリバックアップ機能とは、システムの電源がＯＦＦになっても、メモリ１０１に対しては電源が供給されることで、メモリ１０１内のデータが保持される機能を指す。
【０１０３】
以下に、メモリバックアップ機能を有するシステムに対して本発明を適用する場合について説明する。
【０１０４】
図９は、メモリバックアップ機能を有するシステムに対して本発明を適用する場合におけるカーネルイメージの構造を示す図である。
【０１０５】
メモリバックアップ機能を有するシステムに対して本発明を適用する場合、ブートローダ１０５に、メモリ１０１上に存在するデータのチェック処理を追加する。
【０１０６】
具体的には、区画化されたカーネルイメージ３０２のロードが完了した際に各区画に対して、ブートローダ１０５がロード済み値５０１を格納していたが、保持されているメモリ内容のチェック処理が完了した際にもロード済み値５０１を格納する機能を追加する。また、各区画についてのデータチェック用のチェックサム５０２も新たに格納しておく。
【０１０７】
本発明では、ストッパー２０３は、メモリ１０１に対して区画化されたカーネルイメージ３０２のロードが完了するまでを待ち合わせる機構を有していたが、メモリバックアップを有するシステムにおいては、ストッパー２０３が待ち合わせる必要があるのは、保持されているメモリ内容のチェック処理が完了し、メモリ１０１上のデータを使用することが可能となるまでである。しかし、ストッパー２０３は、メモリバックアップ機能がシステムに存在する／しないにかかわらず、各区画のロード済み値５０１を参照し、次の区画内の関数を実行しＯＳ起動処理を継続することが可能であるかどうかを判定するだけで良い。
【０１０８】
メモリバックアップ機能を有したシステムにおけるＯＳ起動処理では、メモリ１０１に保持されているデータを利用することでブートローダ１０５によるカーネルイメージのメモリへのロード処理を省略することが可能である。しかし、メモリ１０１内に保持されているデータ内容が本当に正しいかどうかについては、予めメモリ１０１内に保持されているデータのチェックを実行する必要がある。これは、メモリ１０１に保持されている内容でＯＳ起動処理を正しく行うことが可能かどうかを判定する必要があることを指す。
【０１０９】
よって、メモリバックアップ機能を有したシステムにおけるメモリ１０１内にデータが保持されている状態でのＯＳ起動処理においては、ブートローダ１０５が、カーネルイメージのロード処理を行うのでは無く、メモリ１０１に保持されているデータのチェックを行う。
【０１１０】
メモリバックアップ機能を有するシステムにおいても本発明であるＯＳ起動処理の解析処理、カーネルソースコードの再配置処理、カーネルイメージのロード／カーネル初期化の並列処理を使用して、最初のＯＳ起動処理を行う。
【０１１１】
カーネルソースコードの再配置処理においては、各区画にストッパー２０３を埋め込んだ上に、区画にロード済み値５０１を格納する領域も埋め込むが、それだけでは無く、図９に示すように各区画についてのデータチェック用のチェックサム５０２も埋め込んでおく。
【０１１２】
このようにして最初のＯＳ起動処理を行うことで、メモリ１０１上には区画化されたカーネルのイメージ３０２が存在することになる。この際にストッパー２０３が参照するのは、ブートローダ１０５によって格納されたロード済み値５０１であり、メモリ１０１へ該当区画がロードされたことを判定する。
【０１１３】
ここで、メモリ１０１内のデータがバックアップされている状態でのＯＳ起動処理の実施例について説明する。
【０１１４】
メモリバックアップ機能が存在する場合、カーネル初期化処理の実行が可能となるのは、バックアップされているメモリ１０１内の該当区画部分のチェックが完了し、再利用しても問題無いことが確認できた場合である。
【０１１５】
この該当区画部分のメモリチェックは、ブートローダ１０５にて実施する。
【０１１６】
ブートローダ１０５は、メモリ１０１上の区画についてメモリチェックを実行し、チェックサム５０２と同じであれば、ロード済み値５０１を該当区画に書き込む。
【０１１７】
一方、チェックサム５０２と違うのであれば、再度この区画分だけ外部記憶装置からのロード処理を実行し、ロードが完了した際にロード済み値５０１を該当区画に書き込む。
【０１１８】
ストッパー２０３は、メモリ１０１上に存在する次の区画についてのメモリチェックが完了したか、もしくは次の区画が再度メモリ１０１にロードされたか、という違いにより処理を変更する必要が無く、ロード済み値５０１を参照することで、次の区画に遷移してカーネル初期化処理を継続することが可能かどうかを判定するだけで良い。
【０１１９】
つまり、システムとして最初の起動時におけるＯＳ起動処理においては、本発明を適用することで、区画化されたカーネルイメージ３０２についてのメモリ１０１への分割ロードと、カーネル起動処理とを複数ＣＰＵで並列実行することで、最初のＯＳ起動処理の完了時間を早め高速化が図れる。
【０１２０】
その上、メモリバックアップ機能つまり、メモリ１０１内のデータがバックアップされている状態でのＯＳ起動処理においても、ブートローダ１０５による区画ごとのメモリチェック処理もしくはメモリ１０１へのロード処理と、カーネル初期化処理とを並列実行することが可能となり、ＯＳ起動処理の高速化も実現することが可能である。
【０１２１】
（２）区画サイズの調整
本発明では、区画のサイズは一定であることを前提としていた。しかし、区画のサイズが一定であれば、１区画のロード時間が１区画内でのカーネル初期化処理実行時間よりも著しく長くなる可能性があり、カーネル初期化処理において余分な待ちが発生することで、必ずしも効果としてあげたＯＳ起動処理の完了時間の短縮が達成できるとは限らない場合が生じてしまう。よって、本実施例では区画サイズの最適化を実行することで、本発明がより良く効果を発揮することを可能とする。
【０１２２】
本実施例では、本発明に加え。ＯＳ起動処理の解析モジュール２００におけるＯＳ起動処理の解析処理にて、処理順序に沿って関数の情報採取に加え各関数の処理時間についても計測するだけで良い。
【０１２３】
この各関数の処理時間を使用して、再配置モジュール２０１におけるカーネルソースコードの再配置処理において、区画内のカーネル初期化処理時間と区画のロード時間とを比較し、カーネルイメージのロード処理とカーネル初期化処理とが並列に実行するように、区画化されたカーネルイメージ３０２における、区画サイズを調整する。
【図面の簡単な説明】
【０１２４】
【図１】本発明のＯＳの起動方法が用いられるシステムの一例を示す図である。
【図２】図１に示したシステムにてメモリにロードされるカーネルの構造を示す図である。
【図３】ＯＳ起動処理の内容の解析結果を示す図である。
【図４】カーネルソースコードの再配置処理を説明するための図である。
【図５】カーネルイメージのロード／カーネル初期化の並列処理を説明するための図である。
【図６】ストッパーを説明するためのカーネルイメージを示す図である。
【図７】本発明のＯＳの起動方法が用いられるシステムの一実施例を示す図である。
【図８】カーネルイメージのロード／カーネル初期化の並列処理を示す図である。
【図９】メモリバックアップ機能を有するシステムに対して本発明を適用する場合におけるカーネルイメージの構造を示す図である。
【図１０】一般的なコンピュータシステムの一例を示す図である。
【図１１】図１０に示したコンピュータシステムの起動方法を説明するための図である。
【符号の説明】
【０１２５】
１００−１，１００−２    ＣＰＵ
１０１    メモリ
１０２    ＨＤＤ
１０３    ＲＯＭ
１０５    ブートローダ
１０６    カーネルソースコード
１０８    デバイスドライバ
１０９    デバイス
１１０    カーネル
２００    解析モジュール
２０１    再配置モジュール
２０３    ストッパー
３００    情報採取モジュール
３０１    解析結果
３０２    カーネルイメージ
４００    関数名
４０１    関数アドレス
４０２    関数サイズ
５０１    ロード済み値
５０２    チェックサム
【図１】
0004840605.tif 000002
【図２】
0004840605.tif 000003
【図３】
0004840605.tif 000004
【図４】
0004840605.tif 000005
【図５】
0004840605.tif 000006
【図６】
0004840605.tif 000007
【図７】
0004840605.tif 000008
【図８】
0004840605.tif 000009
【図９】
0004840605.tif 000010
【図１０】
0004840605.tif 000011
【図１１】
0004840605.tif 000012