JP4840605B2 - Osの起動方法 - Google Patents

Osの起動方法 Download PDF

Info

Publication number
JP4840605B2
JP4840605B2 JP2007276143A JP2007276143A JP4840605B2 JP 4840605 B2 JP4840605 B2 JP 4840605B2 JP 2007276143 A JP2007276143 A JP 2007276143A JP 2007276143 A JP2007276143 A JP 2007276143A JP 4840605 B2 JP4840605 B2 JP 4840605B2
Authority
JP
Japan
Prior art keywords
memory
kernel
partitions
kernel image
processing
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.)
Expired - Fee Related
Application number
JP2007276143A
Other languages
English (en)
Other versions
JP2009104443A (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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2007276143A priority Critical patent/JP4840605B2/ja
Publication of JP2009104443A publication Critical patent/JP2009104443A/ja
Application granted granted Critical
Publication of JP4840605B2 publication Critical patent/JP4840605B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、OSの起動方法に関し、特に、その高速化技術に関する。
図10は、一般的なコンピュータシステムの一例を示す図であり、図11は、図10に示したコンピュータシステムの起動方法を説明するための図である。
図10に示したコンピュータシステムにおいては、電源が投入されると、OS起動処理が実行される。このOS起動処理は、ブートローダ105によってハードディスク102やROM103等の外部記憶装置またはネットワークから、カーネルイメージをメモリ101へロードするカーネルイメージのロード処理と、メモリ101にロードされたカーネルイメージを実行して初期化を行うカーネル初期化処理とからなる。
ブートローダ105によって、ハードディスク102やROM103等の外部記憶装置またはネットワークから、カーネルイメージがメモリ101へロードされ、その後、メモリ101にロードされたカーネルイメージを実行して初期化が行われることになる。なお、メモリ101へのカーネルイメージのロード処理は、カーネルイメージ全体をブートローダ105が一括してメモリ101へロードしている。
このように、カーネル初期化処理の開始は、カーネルイメージの全てがメモリ101にロードされてから行われることになる。
このようなOSの起動方法については、様々なものが考えられており、OSのメモリイメージを分割することによりメモリへのロードを早める技術も考えられている(例えば、特許文献1参照。)。
特開2007−65753号公報
しかしながら、最近ではOSの高機能化が進み、カーネルイメージのサイズが増加してきている。このカーネルイメージのサイズ増加は、カーネルイメージのロード処理に掛かる時間を増加させてしまう。カーネルイメージのロード処理に掛かる時間の増加は、OS起動の完了までの時間増加にもつながっており、システムの電源を投入してから、システムを使用するユーザに対して、OSの機能を提供することが可能となるまでの時間が増加してしまうことで、近年問題となっていた。
また、システムに搭載されているCPUの数や、CPUのコア数も増加してきているが、上述したようなものにおいては、ブートローダによるカーネルイメージのメモリへのロード処理の完了後にカーネル初期化処理が実行されていたため、ロード処理とカーネル初期化処理との実行並列性がなく、システムに搭載されている複数のCPUが十分に活用されていない。これは、複数のCPUを使用する場合には各CPU間での排他制御を行う必要があるが、この排他制御を実施するのは従来ではOSが行っており、OS起動処理、つまりOSを起動する処理においてはそのOSの機能を使用することができないため、各CPU間での排他制御を行えなかったからである。すなわち、ロード処理を行うブートローダとカーネル初期化処理を行うカーネルイメージとが異なる実行モジュールであり、両者の間には共有できる排他機構がないために、ロード処理とカーネル初期化処理との並列実行を制御することができなかったためである。
本発明は、上述したような従来の技術が有する問題点に鑑みてなされたものであって、OS起動処理の高速化を図ることができるOSの起動方法を提供することを目的とする。
上記目的を達成するために本発明は、
カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎にメモリにロードし、該メモリにロードされたカーネルイメージを、ロードされた区画から順次実行することによりOSを起動するOSの起動方法であって、
前記カーネルイメージのOS起動処理の内容を解析し、該解析結果に基づく処理順序によってカーネルイメージを再配置することにより、カーネルイメージを複数の区画に分割する
以上説明したように本発明においては、メモリにロードされて実行されるカーネルイメージを複数の区画に分割し、分割された該カーネルイメージを複数の区画毎にメモリにロードし、ロードされた区画から順次実行する構成としたため、カーネルイメージのメモリへのロードと実行とが、複数の区画毎に並列して行われることとなり、それにより、OS起動処理の高速化を図ることができる。
以下に、本発明の実施の形態について図面を参照して説明する。
図1は、本発明のOSの起動方法が用いられるシステムの一例を示す図である。
本例は、図1に示すように、2つのCPU100−1,100−2を有するマルチCPU環境のシステムである。
本形態においては、図1に示したようなシステムにおいて、OS起動処理の解析と、カーネルイメージの再配置と、カーネルイメージのロード/カーネル初期化の並列処理と、マルチCPU/マルチコア環境での並列実行処理とを実現するために必要なストッパーを用いることで、マルチCPU/マルチコア環境におけるOS起動処理の高速化を実現する。マルチコア環境においては、後述する内容について各コアをCPU100−1,100−2として扱えば、マルチCPU環境とマルチコア環境での差分は無く、本発明を適用することが可能である。
本発明では、まず、OS起動処理の解析を一度実行し、カーネル初期化処理の処理順序を解析した後に、処理順序に沿った形で一定サイズに分けるカーネルイメージの区画化を実行する。
CPU100−1で実行されているブートローダは、区画化したカーネルイメージの最初の区画をメモリ101にロードし、完了したことをCPU100−2に通知する。
その後、CPU100−1で実行されているブートローダは、CPU100−2に通知すること無く各区画をそれぞれメモリ101へロードする。
最初の区画のロード完了が通知されたCPU100−2は、カーネル初期化処理の実行を開始する。
その後、CPU100−1でのカーネルイメージのロード処理とCPU100−2でのカーネル初期化処理とをそれぞれ並列に実行することで、従来での単一CPUでのOS起動処理の実行と比較して、より早くOS起動処理を完了させることが可能となる。
本形態においては、このCPU100−1でのカーネルイメージのロード処理とCPU100−2でのカーネル初期化の並列処理にはストッパーというモジュールを用いる。
ストッパーは、CPU100−1でロードされた区画分のカーネル初期化処理を終え、次の区画分のカーネル初期化処理を実行する際に、次の区画がメモリにロードされていることを保証するまで、CPU100−2で行うカーネル初期化処理の実行を待機するモジュールである。
つまり、メモリ101にロードされていない区画についてのカーネル初期化処理の実行をストッパーが抑制することで、CPU100−1とCPU100−2との排他制御、つまりCPU100−1がまだメモリ101にロードしていない区画についてのCPU100−2におけるカーネル初期化処理の実行を防ぎ、並列処理の実現を可能とする。
以下に、上述した各処理の詳細について説明する。
まず、OS起動処理の解析について説明する。
図2は、図1に示したシステムにてメモリ101にロードされるカーネルの構造を示す図である。また、図3は、OS起動処理の内容の解析結果を示す図である。
図2に示すように、情報採取モジュール300が組み込まれたカーネル110にて、OS起動処理を1度実行する。その際、ブートローダからブートセクタに含まれるブートパラメータが渡されるが、このブートパラメータをメモリ101内のヘッダに保存する。
次に、カーネル初期化処理において、図3に示すように、実行された順番に、関数名400、関数アドレス401及び関数サイズ402を採取し、実行した順にソートを実施する。なお、複数実行される関数が存在する場合には、最初の実行時のみを記録しておく。
また、ブートローダと競合するデバイス初期化処理、またはカーネル初期化処理内でのマルチCPU化開始までを並列化可能な区間として検出し、並列化可能な区間として定義する。この並列化可能な区間を定義する理由としては、複数のCPUを有するシステムにおいては、単一CPUにて実行していたカーネル初期化処理の途中から複数のCPUを使用してカーネル初期化処理を行うため、ブートローダによるカーネルイメージの分割ロードとカーネル初期化処理とを複数のCPUで並列実行を行うことができなくなってしまい、この時点までは並列化可能な区間として判断し定義しておく必要があるからである。つまり、並列化可能な区間を定義しておくことで、この区間においてはブートローダによるカーネルイメージの分割ロードと、カーネル初期化処理とを複数のCPUで並列実行することが可能であると判断できる。並列化可能な区間を把握する方法としては、カーネル初期化処理の途中から複数のCPUを使用してカーネル初期化処理を行う際に、別のCPUに対しての起動要求を出すことになるが、この別のCPUに対しての起動処理を実行するまでを並列化可能な区間として把握する。
このようにして、カーネルイメージのOS起動処理の内容を解析し、図3に示したような解析結果を作成する。
次に、カーネルソースコードの再配置について説明する。
図4は、カーネルソースコードの再配置処理を説明するための図である。
上述したようなOS起動処理の解析結果とカーネルソースコードとを用いて、図4に示すように、複数の区画に分割されて実行順序に並び替えられたカーネルイメージ302を作成し、複数の区画毎に区画情報をヘッダに格納する。なお、区画情報とは、区画化されたカーネルイメージ302の各区画のサイズと、区画化されたカーネルイメージ302における、区画の数からなる。
ある区画内のカーネル初期化処理の実行が終わり、次に実行する関数の実体が別の区画のカーネルイメージ内にある、つまり処理の実行が複数の区画を跨る場合、その遷移先を後述するストッパーへと変更する。ストッパーは、次の区画のカーネルイメージのロード処理が完了するまで待機し、次の区画のロードが完了したことを確認した上で、区画内に実体を持つ関数の呼び出しを再開するモジュールである。
ブートパラメータによって、カーネル初期化処理の内容が変わることに対応するため、OS起動処理の解析処理で保存されたブートパラメータをメモリ101のヘッダに記録する。これは、ブートパラメータの内容によって、OSとして提供する機能を変更することが可能であり、提供する機能の変更はカーネル初期化処理の内容が変更することにつながる。つまり、OS起動処理の解析の際に実行されたカーネル初期化処理と異なるのであれば、OS起動処理の解析結果を使用して区画化されたカーネルイメージでは、実行順序が違う可能性があり、分割ロードを実行しても、カーネル初期化処理を並行して実行することができない可能性がある。よって、OS起動処理の解析処理で保存されたブートパラメータと違うブートパラメータが渡された場合、従来通りカーネルイメージの一括ロードを実行するという判断をブートローダが行う必要があるためにブートパラメータをヘッダに記録する。
そして、各区画の最後に、区画化されてメモリ101にロードされたカーネルイメージのロードが完了した旨を示す予め決められたロード済み値を格納する領域を作成する。
次に、カーネルイメージのロード/カーネル初期化の並列処理について説明する。
図5は、カーネルイメージのロード/カーネル初期化の並列処理を説明するための図である。
まず、カーネルソースコードの再配置にて作成した区画情報を読み込む(ステップS1)。
そして、メモリ101のヘッダに保存されているブートパラメータと、渡されたブートパラメータとを比較し(ステップS2)、同じであれば、本発明によるCPU100−1でのカーネルイメージのロード処理とCPU1でのカーネル初期化処理との並列実行が可能と判定した上で、ブートローダは、区画化されたカーネルイメージの分割ロードを実行する(ステップS3〜S9)。
一方、メモリ101のヘッダに保存されているブートパラメータと、渡されたブートパラメータとが異なる場合は、従来通り、区画化されたカーネルイメージを一括してブートローダがメモリへロードする処理を実行する(ステップS10,S11)。
ブートローダは、最初の区画についてカーネルイメージのロード処理を実行し、完了した際に、区画の最後にロード済み値を格納する。そして別のCPU100−2に対して並列処理開始要求を発行した後に、次の区画のロードを開始する。これ以降、ブートローダは、各区画を順次メモリ101へロードし、区画の最後にロード済み値を格納する処理を実行する。
並列処理開始要求を受けたCPU100−2において、ロードされた区画分の処理内容だけカーネル初期化処理を実行し、ストッパーにて次の処理開始可能な時点、つまり実行する予定の区画についてメモリ101へのロードが完了するまで待機する。
このように、カーネルイメージをメモリ101にロードする際にロードされるブートセクタに含まれるブートパラメータに応じて、カーネルイメージを複数の区画に分割し、そのカーネルイメージを複数の区画毎にメモリ101にロードし、ロードされた区画から順次実行する処理と、カーネルイメージを一括してメモリ101にロードして実行する処理とを選択的に行うことになる。
次に、ストッパーについて説明する。
図6は、ストッパーを説明するためのカーネルイメージを示す図である。
カーネル初期化処理を実行する際には、メモリ101上に実行する部分のカーネルイメージの区画が存在しなければ実行できない。
ストッパーは図6に示すように、メモリ101上に実行する予定のカーネルイメージがロードされるまで、カーネル初期化処理を継続しないようにするモジュールであり、カーネルソースコードの再配置処理において、区画化されたカーネルイメージ302の各区画に組み込まれる。
CPU100−1にて、区画化されたカーネルイメージ302の最初の区画がメモリ101にロードされ、完了したことがCPU100−2に通知されるが、CPU100−2は、区画化された最初のカーネルイメージ302がメモリ101上に存在するので、この区画化単位でのカーネル初期化処理を実行することが可能である。
しかし、次の区画については、ブートローダによってメモリ101へのロードを行っている最中である可能性があり、該当区画がメモリ101へのロードが完了しているという保証は無いため、区画がメモリ101に完全にロードされるまで、ストッパー203にて次の区画化されたカーネルイメージ302でのカーネル初期化処理の実行を待機しなければならない。
この処理実行の保留解除は、次の区画化されたカーネルイメージ302がメモリ101にロードされた時点で解除し、カーネル初期化処理を継続する。
ここで、次の区画化されたカーネルイメージがメモリ101にロードされたことを判定する方法について説明する。
ストッパー203は、カーネルソースコードの再配置にて各区画の最後に埋め込まれているロード済み値が存在する区画の最後尾を参照し、期待しているロード済み値であるかどうかを判定することにより、区画化されたカーネルイメージがメモリ101にロードされたことを判断する。
つまり、ストッパー203は、メモリ101への区画化されたカーネルイメージのロード処理と、区画単位で実行するカーネル初期化処理の同期を取るためのモジュールであり、メモリ101上にまだロードされていない区画についてのカーネル初期化処理を実行することが無いように、メモリ101上の該当場所にロード済み値が存在するかどうかを判定して、カーネル初期化処理の継続実行を行うかどうかの制御を行う。
このストッパー203のモジュールにより、ブートローダにおいては、区画化されたカーネルイメージを順にメモリ101にロードするだけで良く、ブートローダが排他を意識した処理を行う必要が無い。
このように、OS起動時に、一括してメモリにロードしていたカーネルイメージを、一定サイズに分割し、分割した単位ごとにメモリへロードする処理とOSの起動処理とを並列して実行することでOS起動の完了を高速化する。
以下に、さらなる具体例について説明する。
図7は、本発明のOSの起動方法が用いられるシステムの一実施例を示す図である。
本実施例におけるシステムは図7に示すように、情報採取モジュール300をカーネル110に組み込んだ上で実行するOS起動処理の解析モジュール200と、この解析モジュール200における解析結果301とカーネルソースコード106を用いて区画化されたカーネルイメージを作成するカーネルソースコードの再配置モジュール201と、メモリ101と、カーネルソースコードの再配置モジュール201で作成される、区画化されたカーネルイメージ302をメモリ101にロードするブートローダ105と、複数のCPU100−1,100−2もしくは複数のコアを持ったCPU100−1,100−2とを有する。
まず、図7に示すようなシステムにおいて、予め情報採取モジュール300をカーネル110組み込んだ上で、解析モジュール200において、OS起動処理の解析を実行する。
ここで、解析モジュール200におけるOS起動処理の解析の詳細について説明する。
まず、OS起動処理を一度実行することで、ブートローダから渡されるブートパラメータを記録する。
OS起動処理においてカーネル初期化処理は、ブートパラメータの内容により処理内容が変更になるため、この段階でブートパラメータを記録する必要がある。
つまり、本発明は、実際のOS起動処理においてOS起動処理の解析を行った時と同じブートパラメータを渡された場合にのみ動作する。
記録したブートパラメータは、ヘッダに保存を行う。
次に、カーネル初期化処理における処理の実行順序を関数レベルでトレースする。トレースする内容の詳細は、図3に示したように関数名400、関数アドレス401及び関数のサイズ402である。もし、ある関数が複数実行される場合には、最初に実行されたものだけをトレース結果から抽出する。これは、複数実行される関数が最初に実行される時点で、その関数が含まれているカーネルイメージの区画がメモリ101上に存在すれば良いため、最初に実行される処理順序だけを把握する。
このトレースした結果をOS起動処理の解析モジュール200における解析結果301として作成する。
OS起動処理の解析モジュール200にて確認したブートパラメータと、OS起動処理の解析結果301と、カーネルソースコード106とを用いて再配置モジュール201にてカーネルソースコードの再配置を実行する。
カーネルソースコードの再配置での処理は大きく分けて、再配置処理と、ストッパー203の埋め込み処理と、ロード済み値領域の埋め込み処理という3つの処理が存在する。
まず、再配置処理について説明する。
再配置処理とは、区画化された上に実行順序に並び替えられた区画化されたカーネルイメージ302を作成することである。
具体的には、解析モジュール200におけるOS起動処理の解析で保存されたブートパラメータが記録されているヘッダをカーネルソースコード106に組み込んだ上で、OS起動処理の解析で把握した関数の処理順序に従って、カーネルイメージを区画単位に分割することである。つまり、区画化されたカーネルイメージ302を区画ごとの順番に実行すれば、カーネル初期化処理の関数の処理順序と同じになるように、カーネルイメージの区画化を実行することである。なお、この再配置処理後の区画化されたカーネルイメージ302については図4に示した通りである。
次に、ストッパー203の埋め込み処理について説明する。
ストッパー203の埋め込み処理とは、区画化されたカーネルイメージ302の区画での処理から別の区画へ処理が移る場合に、遷移先をストッパー203に差し替えることである。つまり、次の区画を実行するためには、次の区画がメモリ101にロードされている必要があるが、このメモリ101へのロードを待ち合わせる手段としてストッパー203を使用する。
待ち合わせ手段の詳細は、遷移先を一旦ストッパー203へ差し替えておき、ストッパー203にて次に実行する区画がメモリ101へロードされることを待ち合わせる処理を行うことで、メモリ101にロードされていない区画へ遷移しカーネル初期化処理が失敗してしまうことを防止する。なお、このストッパー203の埋め込み処理については図6に示した通りである。
次に、ロード済み値領域の埋め込み処理について説明する。
ロード済み値の領域の埋め込みとは、各区画の最後にロード処理が完了したことを示す予め決められた一定の値を埋め込む領域を作成しておくことを指す。
ストッパー203は、メモリ101上に存在する区画の最後尾のアドレスからこの値を参照することで、メモリ101へのロードが完了したことを把握することが可能となる。この値は、ストッパー203がメモリ101上に該当区画がロードされたことを把握するための値であるため、一定の値である必要がある。いわゆるマジックナンバーでも構わない。
上述したOS起動処理の解析処理と、カーネルソースコードの再配置処理とを実行したことで、カーネルイメージの分割ロードと、カーネル初期化処理の分割実行が可能となる、区画化されたカーネルイメージ302の作成が完了する。
ここで、分割実行が可能となった区画化されたカーネルイメージ302を使用して、OS起動処理を実行する、カーネルイメージのロード/カーネル初期化の並列処理について説明する。
区画化されたカーネルイメージ302をメモリ101にロードする処理を実行するのは、ブートローダ105である。ブートローダ105は、システムの電源ON時にブートパラメータを受け取るが、この受け取ったブートパラメータと、解析モジュール200におけるOS起動処理の解析処理、並びにカーネルソースコードの再配置モジュール201における再配置処理で作成されたブートパラメータが記録されているヘッダとを比較し、同じであるかどうかを判定する。
両者が同一であれば、ブートローダ105は区画単位でメモリ101へロードする処理を行う。
一方、両者が異なる場合は、OS起動処理の解析モジュール200におけるOS起動処理の解析処理、再配置モジュール201におけるカーネルソースコードの再配置処理で区画化されたカーネルイメージ302の処理順序と異なるカーネル初期化処理を実行する必要があるため、従来通りカーネルイメージを一括してメモリ101へロードする。
ここで、OS起動処理の解析モジュール200におけるOS起動処理の解析処理、再配置モジュール201におけるカーネルソースコードの再配置処理を実行した際のブートパラメータと電源ON時にブートローダ105が受け取ったブートパラメータが一致する場合についての処理の詳細を説明する。
図8は、カーネルイメージのロード/カーネル初期化の並列処理を示す図である。
本システムでは複数のCPU100−1,100−2もしくは、CPUコアを有しているが、まず、CPU100−1にて実行されるブートローダは、まず区画化されたカーネルイメージ302の最初の区画をメモリ101にロードし、ロード済み値を格納する処理を実行する。
最初の区画についてメモリ101へのロードが完了し、ロード済み値を格納した際に、ブートローダ105は、別のCPUであるCPU100−2に対して並列処理開始要求を発行した上で、次の区画のロード処理を継続する。
その後、ブートローダ105は、CPU100−2の処理に関係無く、各区画のロードと、ロード完了した際にロード済み値の格納する処理を継続して実行する。
並列処理開始要求を受けたCPU100−2では、最初の区画内におけるカーネル初期化処理の実行を開始する。
メモリ101にロードされている区画についてのカーネル初期化処理が完了し、次の区画へ遷移する際、カーネルソースコードの再配置にて実行されたストッパー203埋め込み処理のため、ストッパー203へ処理が遷移する。
ストッパー203は、次の区画がメモリ101にロードされたかどうかを判定しながら、次のカーネル初期化処理への遷移を待ち合わせる。メモリ101へのロードが完了したかどうかの判定は、区画の最後にあたる部分までオフセットをずらして参照することでロード済み値を参照し判定する。
次の区画がメモリ101にロードされたことを把握した際には、ストッパー203は、次の区画へ遷移を許可し、CPU100−2は次の区画内のカーネル初期化処理を実行する。
このようなストッパー203による待ち合わせ機構により、カーネルイメージのロード処理と、カーネル初期化処理との並列実行が可能となり、従来全てのカーネルイメージをメモリ101にロードした後にカーネル初期化処理を実行していた場合と比べて、より高速にOS起動処理を完了することが可能となる。
本実施例における第1の効果は、OS起動処理の完了を早めることができる点である。
従来では、メモリ101へのカーネルイメージのロード処理が完了した後にカーネル初期化処理を開始するため、OSの高機能化に伴うカーネルイメージのサイズ増加に伴いカーネル初期化処理の完了までの時間が増えていた。また、マルチCPU/マルチコア環境においても、カーネルイメージのロード処理とカーネル初期化処理の途中までは単一CPU/コアにて実行しており、マルチCPU/マルチコア環境を活用できていなかった。
本発明を適用することでメモリ101へのカーネルイメージのロード処理と、カーネル初期化処理とを区画単位で複数のCPU/コアにて並列に実行することが可能となり、OS起動処理の完了を従来よりも早めることができる。
第2の効果は、OS機能を使用する事無く、複数CPUでのメモリ101へのカーネルイメージのロード処理とカーネル初期化処理との並列処理を実現できることである。
複数CPUが存在する場合、各CPU間での並列処理を実行するには複数CPU/コア間の排他制御が必要であり、従来では、この複数CPU/コア間の排他制御はOSの役割、つまりOSの機能を必要としておりOSが起動していない状態ではCPU/コア間の排他を実現することができなかった。
本発明では、ストッパー203を用いることで、OS起動処理が完了する以前、つまりOSの機能を使用する事無く、各CPUでのメモリ101へのカーネルイメージのロード処理とカーネル初期化処理との並列処理の実行を実現することが可能となる。
このように、従来の技術には存在しないカーネルイメージの分割、メモリへのカーネルの分割ロード、メモリへのカーネルイメージのロードと並行しながらカーネル初期化処理の分割実行、カーネルを介さない複数CPU/複数コア間の排他制御を実現することで、OS起動処理の高速化を実現することが可能となる。
(他の実施の形態)
(1)メモリバックアップ機能が存在するシステムにおいての本発明の実施例
本発明は、メモリバックアップ機能が存在するシステムにおいても適用可能である。
メモリバックアップ機能とは、システムの電源がOFFになっても、メモリ101に対しては電源が供給されることで、メモリ101内のデータが保持される機能を指す。
以下に、メモリバックアップ機能を有するシステムに対して本発明を適用する場合について説明する。
図9は、メモリバックアップ機能を有するシステムに対して本発明を適用する場合におけるカーネルイメージの構造を示す図である。
メモリバックアップ機能を有するシステムに対して本発明を適用する場合、ブートローダ105に、メモリ101上に存在するデータのチェック処理を追加する。
具体的には、区画化されたカーネルイメージ302のロードが完了した際に各区画に対して、ブートローダ105がロード済み値501を格納していたが、保持されているメモリ内容のチェック処理が完了した際にもロード済み値501を格納する機能を追加する。また、各区画についてのデータチェック用のチェックサム502も新たに格納しておく。
本発明では、ストッパー203は、メモリ101に対して区画化されたカーネルイメージ302のロードが完了するまでを待ち合わせる機構を有していたが、メモリバックアップを有するシステムにおいては、ストッパー203が待ち合わせる必要があるのは、保持されているメモリ内容のチェック処理が完了し、メモリ101上のデータを使用することが可能となるまでである。しかし、ストッパー203は、メモリバックアップ機能がシステムに存在する/しないにかかわらず、各区画のロード済み値501を参照し、次の区画内の関数を実行しOS起動処理を継続することが可能であるかどうかを判定するだけで良い。
メモリバックアップ機能を有したシステムにおけるOS起動処理では、メモリ101に保持されているデータを利用することでブートローダ105によるカーネルイメージのメモリへのロード処理を省略することが可能である。しかし、メモリ101内に保持されているデータ内容が本当に正しいかどうかについては、予めメモリ101内に保持されているデータのチェックを実行する必要がある。これは、メモリ101に保持されている内容でOS起動処理を正しく行うことが可能かどうかを判定する必要があることを指す。
よって、メモリバックアップ機能を有したシステムにおけるメモリ101内にデータが保持されている状態でのOS起動処理においては、ブートローダ105が、カーネルイメージのロード処理を行うのでは無く、メモリ101に保持されているデータのチェックを行う。
メモリバックアップ機能を有するシステムにおいても本発明であるOS起動処理の解析処理、カーネルソースコードの再配置処理、カーネルイメージのロード/カーネル初期化の並列処理を使用して、最初のOS起動処理を行う。
カーネルソースコードの再配置処理においては、各区画にストッパー203を埋め込んだ上に、区画にロード済み値501を格納する領域も埋め込むが、それだけでは無く、図9に示すように各区画についてのデータチェック用のチェックサム502も埋め込んでおく。
このようにして最初のOS起動処理を行うことで、メモリ101上には区画化されたカーネルのイメージ302が存在することになる。この際にストッパー203が参照するのは、ブートローダ105によって格納されたロード済み値501であり、メモリ101へ該当区画がロードされたことを判定する。
ここで、メモリ101内のデータがバックアップされている状態でのOS起動処理の実施例について説明する。
メモリバックアップ機能が存在する場合、カーネル初期化処理の実行が可能となるのは、バックアップされているメモリ101内の該当区画部分のチェックが完了し、再利用しても問題無いことが確認できた場合である。
この該当区画部分のメモリチェックは、ブートローダ105にて実施する。
ブートローダ105は、メモリ101上の区画についてメモリチェックを実行し、チェックサム502と同じであれば、ロード済み値501を該当区画に書き込む。
一方、チェックサム502と違うのであれば、再度この区画分だけ外部記憶装置からのロード処理を実行し、ロードが完了した際にロード済み値501を該当区画に書き込む。
ストッパー203は、メモリ101上に存在する次の区画についてのメモリチェックが完了したか、もしくは次の区画が再度メモリ101にロードされたか、という違いにより処理を変更する必要が無く、ロード済み値501を参照することで、次の区画に遷移してカーネル初期化処理を継続することが可能かどうかを判定するだけで良い。
つまり、システムとして最初の起動時におけるOS起動処理においては、本発明を適用することで、区画化されたカーネルイメージ302についてのメモリ101への分割ロードと、カーネル起動処理とを複数CPUで並列実行することで、最初のOS起動処理の完了時間を早め高速化が図れる。
その上、メモリバックアップ機能つまり、メモリ101内のデータがバックアップされている状態でのOS起動処理においても、ブートローダ105による区画ごとのメモリチェック処理もしくはメモリ101へのロード処理と、カーネル初期化処理とを並列実行することが可能となり、OS起動処理の高速化も実現することが可能である。
(2)区画サイズの調整
本発明では、区画のサイズは一定であることを前提としていた。しかし、区画のサイズが一定であれば、1区画のロード時間が1区画内でのカーネル初期化処理実行時間よりも著しく長くなる可能性があり、カーネル初期化処理において余分な待ちが発生することで、必ずしも効果としてあげたOS起動処理の完了時間の短縮が達成できるとは限らない場合が生じてしまう。よって、本実施例では区画サイズの最適化を実行することで、本発明がより良く効果を発揮することを可能とする。
本実施例では、本発明に加え。OS起動処理の解析モジュール200におけるOS起動処理の解析処理にて、処理順序に沿って関数の情報採取に加え各関数の処理時間についても計測するだけで良い。
この各関数の処理時間を使用して、再配置モジュール201におけるカーネルソースコードの再配置処理において、区画内のカーネル初期化処理時間と区画のロード時間とを比較し、カーネルイメージのロード処理とカーネル初期化処理とが並列に実行するように、区画化されたカーネルイメージ302における、区画サイズを調整する。
本発明のOSの起動方法が用いられるシステムの一例を示す図である。 図1に示したシステムにてメモリにロードされるカーネルの構造を示す図である。 OS起動処理の内容の解析結果を示す図である。 カーネルソースコードの再配置処理を説明するための図である。 カーネルイメージのロード/カーネル初期化の並列処理を説明するための図である。 ストッパーを説明するためのカーネルイメージを示す図である。 本発明のOSの起動方法が用いられるシステムの一実施例を示す図である。 カーネルイメージのロード/カーネル初期化の並列処理を示す図である。 メモリバックアップ機能を有するシステムに対して本発明を適用する場合におけるカーネルイメージの構造を示す図である。 一般的なコンピュータシステムの一例を示す図である。 図10に示したコンピュータシステムの起動方法を説明するための図である。
符号の説明
100−1,100−2 CPU
101 メモリ
102 HDD
103 ROM
105 ブートローダ
106 カーネルソースコード
108 デバイスドライバ
109 デバイス
110 カーネル
200 解析モジュール
201 再配置モジュール
203 ストッパー
300 情報採取モジュール
301 解析結果
302 カーネルイメージ
400 関数名
401 関数アドレス
402 関数サイズ
501 ロード済み値
502 チェックサム

Claims (8)

  1. カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎にメモリにロードし、該メモリにロードされたカーネルイメージを、ロードされた区画から順次実行することによりOSを起動するOSの起動方法であって、
    前記カーネルイメージのOS起動処理の内容を解析し、該解析結果に基づく処理順序によってカーネルイメージを再配置することにより、カーネルイメージを複数の区画に分割するOSの起動方法。
  2. 請求項に記載のOSの起動方法において、
    前記複数の区画における処理内容が、前記複数の区画を跨るものである場合、次の処理の区画が前記メモリ上にロードされるまで当該処理の実行を待機することを特徴とするOSの起動方法。
  3. 請求項に記載のOSの起動方法において、
    カーネルイメージをOS起動処理の処理順序に区画化する際に、前記メモリへのロード処理時間と区画内におけるOS起動処理時間とに基づいて区画化サイズを調整するOSの起動方法。
  4. カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎にメモリにロードし、該メモリにロードされたカーネルイメージを、ロードされた区画から順次実行することによりOSを起動するOSの起動方法であって、
    カーネルイメージをメモリにロードする際にロードされるブートセクタに含まれる情報に応じて、カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎に前記メモリにロードし、ロードされた区画から順次実行する処理と、カーネルイメージを一括して前記メモリにロードして実行する処理とを選択的に行うOSの起動方法。
  5. カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎にメモリにロードし、該メモリにロードされたカーネルイメージを、ロードされた区画から順次実行することによりOSを起動するためのプログラムであって、
    コンピュータに、
    前記カーネルイメージのOS起動処理の内容を解析し、該解析結果に基づく処理順序によってカーネルイメージを再配置することにより、カーネルイメージを複数の区画に分割する手順を実行させるためのプログラム。
  6. 請求項に記載のプログラムにおいて、
    コンピュータに、
    前記複数の区画における処理内容が、前記複数の区画を跨るものである場合、次の処理の区画が前記メモリ上にロードされるまで当該処理の実行を待機する手順を実行させるためのプログラム。
  7. 請求項に記載のプログラムにおいて、
    コンピュータに、
    カーネルイメージをOS起動処理の処理順序に区画化する際に、前記メモリへのロード処理時間と区画内におけるOS起動処理時間とに基づいて区画化サイズを調整する手順を実行させるためのプログラム。
  8. カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎にメモリにロードし、該メモリにロードされたカーネルイメージを、ロードされた区画から順次実行することによりOSを起動するためのプログラムであって、
    コンピュータに、
    カーネルイメージをメモリにロードする際にロードされるブートセクタに含まれる情報に応じて、カーネルイメージを複数の区画に分割し、当該カーネルイメージを前記複数の区画毎に前記メモリにロードし、ロードされた区画から順次実行する処理と、カーネルイメージを一括して前記メモリにロードして実行する処理とを選択的に行う手順を実行させるためのプログラム。
JP2007276143A 2007-10-24 2007-10-24 Osの起動方法 Expired - Fee Related JP4840605B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007276143A JP4840605B2 (ja) 2007-10-24 2007-10-24 Osの起動方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007276143A JP4840605B2 (ja) 2007-10-24 2007-10-24 Osの起動方法

Publications (2)

Publication Number Publication Date
JP2009104443A JP2009104443A (ja) 2009-05-14
JP4840605B2 true JP4840605B2 (ja) 2011-12-21

Family

ID=40706043

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007276143A Expired - Fee Related JP4840605B2 (ja) 2007-10-24 2007-10-24 Osの起動方法

Country Status (1)

Country Link
JP (1) JP4840605B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8732527B2 (en) 2011-08-16 2014-05-20 Google Inc. Secure recovery apparatus and method
KR101766695B1 (ko) * 2013-03-15 2017-08-09 후아웨이 테크놀러지 컴퍼니 리미티드 복수의 중앙 처리 장치를 구비한 컴퓨터 시스템을 위한 부팅 방법
JP6263981B2 (ja) 2013-11-20 2018-01-24 株式会社リコー 情報処理装置、情報処理装置の起動方法、及び、プログラム
CN107688474B (zh) * 2016-08-04 2021-05-07 斑马智行网络(香港)有限公司 启动方法、生成内核镜像的方法及装置
JP6615302B1 (ja) * 2018-11-06 2019-12-04 三菱電機株式会社 電子制御装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5061438B2 (ja) * 2005-08-29 2012-10-31 富士通株式会社 情報処理装置、起動方法及び起動プログラム
JP2007206933A (ja) * 2006-02-01 2007-08-16 Matsushita Electric Ind Co Ltd 情報処理装置、情報処理装置におけるブートローダ生成方法およびプログラム転送方法

Also Published As

Publication number Publication date
JP2009104443A (ja) 2009-05-14

Similar Documents

Publication Publication Date Title
US11137911B2 (en) Fast restart of applications using shared memory
US7689809B2 (en) Transparent return to parallel mode by rampoline instruction subsequent to interrupt processing to accommodate slave processor not supported by operating system
US8499289B2 (en) Method, device and system for realizing kernel online patching
US7774636B2 (en) Method and system for kernel panic recovery
JP4840605B2 (ja) Osの起動方法
US9009122B2 (en) Optimized resizing for RCU-protected hash tables
US8296402B2 (en) Determining and downloading portions of a software application in a computer system
US11347494B2 (en) Installing patches during upgrades
US20100257521A1 (en) Simultaneous Installation of Multiple Portions of a Software Application on a Computer System
US20120059997A1 (en) Apparatus and method for detecting data race
CN104520811A (zh) 优化具有多个中央处理器的计算机的启动时间的系统及方法
US9158550B2 (en) Caching based operating system installation
CN113051071A (zh) 命令提交方法和装置、命令读取方法和装置、电子设备
US8782378B2 (en) Dynamic instruction splitting
US10324751B2 (en) Information processing apparatus, information processing method, and non-transitory computer-readable recording medium recording information processing program
US8095784B2 (en) Computer system and method for activating basic program therein
US9619277B2 (en) Computer with plurality of processors sharing process queue, and process dispatch processing method
JP2009238176A (ja) 情報処理装置およびプログラムの検証方法
JP2006350489A (ja) プログラム制御方法
JP2019179412A (ja) デッドロック回避方法、デッドロック回避装置
US20160266960A1 (en) Information processing apparatus and kernel dump method
KR102021777B1 (ko) 병렬 처리를 위한 재구성형 프로세서 및 재구성형 프로세서의 동작 방법
US11934819B2 (en) Bare-metal deployment
JP2009251681A (ja) スタック領域の拡張方法及びプログラム
JP6690570B2 (ja) 並列化方法、並列化ツール、車載制御装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110720

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110727

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110818

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: 20110907

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: 20110920

R150 Certificate of patent or registration of utility model

Ref document number: 4840605

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: 20141014

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees