JP5195997B2 - カーネルソースコード最適化方法、カーネルソースコード最適化装置及びプログラム - Google Patents

カーネルソースコード最適化方法、カーネルソースコード最適化装置及びプログラム Download PDF

Info

Publication number
JP5195997B2
JP5195997B2 JP2011243400A JP2011243400A JP5195997B2 JP 5195997 B2 JP5195997 B2 JP 5195997B2 JP 2011243400 A JP2011243400 A JP 2011243400A JP 2011243400 A JP2011243400 A JP 2011243400A JP 5195997 B2 JP5195997 B2 JP 5195997B2
Authority
JP
Japan
Prior art keywords
code
partitioning
storage unit
source code
kernel source
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
JP2011243400A
Other languages
English (en)
Other versions
JP2012038341A (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 JP2011243400A priority Critical patent/JP5195997B2/ja
Publication of JP2012038341A publication Critical patent/JP2012038341A/ja
Application granted granted Critical
Publication of JP5195997B2 publication Critical patent/JP5195997B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、カーネル起動処理を高速化するカーネル起動技術およびカーネルソースコード最適化技術に関し、特に、デバイスを起動してからデバイスの起動が完了するまでの時間であるデバイス起動待ち時間を有効利用することにより、カーネル起動処理を高速化するカーネル起動技術およびカーネルソースコード最適化技術に関する。
先ず、図19を参照して従来一般的に行われているカーネル起動方法について説明する。同図に示すようにカーネル起動処理100においては、ドライバ初期化処理102と、その他の初期化処理101(メモリの初期化処理など)とが実行される。
ドライバ初期化処理102では、デバイスを起動するためのデバイス起動処理102−1と、上記デバイスに対応するデバイスドライバを初期化するためのデバイスドライバ初期化処理102−2とが実行される。デバイスドライバ初期化処理102−2は、デバイスの起動が完了した後に行うことが必要であるため、デバイス起動処理102−1を実行してからデバイスドライバ初期化処理102−2が実行可能となるまでには、ある程度の時間(デバイス起動待ち時間103)が必要になる。このデバイス起動待ち時間103は、CPUが何も実行しない無駄な時間であり、デバイスの種類によってはかなり長い時間となる。また、図19では、1つのデバイス、デバイスドライバに対するデバイス起動処理102−1、デバイス初期化処理102−2しか示していないが、複数のデバイス、デバイスドライバを有する実際のシステムでは、デバイス、デバイスドライバの数だけデバイス起動処理102−1、デバイスドライバ初期化処理102−2がシーケンシャルに実行され、デバイスの数だけデバイス起動待ち時間103が発生する。このため、カーネル起動処理100において、ドライバ初期化処理102が最も時間のかかる処理となる。
上述したように、従来の一般的なカーネル起動方法では、デバイスの数だけCPUが何も実行しないデバイス起動待ち時間103が発生するため、カーネル起動処理100を高速化することができないという問題があった。
一方、コンピュータが備えている複数のデバイスを初期化する技術として、図20に示すように、各デバイスA、B、C、…に対して初期化のためのコマンドを順次発行し、その後、コマンド実行終了割り込み信号を発生したデバイスから順に次のコマンドを発行する技術が従来から知られている(例えば、特許文献1参照)。
特開平10−307649号公報
特許文献1に記載されている従来の技術では、或るデバイスのデバイス起動待ち時間において、他のデバイスを起動し、複数のデバイスの初期化を並行して行うようにしているので、初期化処理に必要となる時間を短縮化することができる。しかし、特許文献1には、複数のデバイスをどのような順番で起動されるかは全く記載されていない。このため、デバイス起動待ち時間が短いデバイスから順に起動される場合があり、このような場合、CPUが何も実行しない無駄な時間が多くなり、十分な高速化が見込めないという問題がある。
〔発明の目的〕
そこで、本発明の目的は、デバイス起動待ち時間を考慮した順番で各デバイスを起動することにより、CPUが何も実行しない無駄な時間を極力少なくし、カーネル初期化処理に要する時間を短縮させることにある。
本発明にかかる第1のカーネルソースコード最適化方法は、
複数のデバイスと、該複数のデバイス毎のデバイスドライバと、カーネルソースコードが格納されたカーネルソースコード記憶部と、前記複数のデバイス毎のデバイス起動待ち時間が格納された起動待ち時間記憶部と、区画化コード記憶部と、最適化コード記憶部とを備えたコンピュータによって前記カーネルソースコードを最適化するカーネルソースコード最適化方法であって、
前記コンピュータが、前記カーネルソースコード記憶部から前記カーネルソースコードを入力し、該入力したカーネルソースコードを、デバイスに対する起動処理を行うデバイス毎の区画化コードと、デバイスドライバに対する初期化処理を行うデバイスドライバ毎の区画化コードと、他の処理を行う区画化コードとに区画化して前記区画化コード記憶部に格納する区画化分析ステップと、
前記コンピュータが、前記区画化コード記憶部から各区画化コードを入力し、該入力した区画化コードの内のデバイスに対する起動処理を行う区画化コードをデバイス起動待ち時間が長い順に配置し、その後ろに、前記複数のデバイス毎に起動が完了したか否かを判定し、起動が完了したと判定したデバイスに対応するデバイスドライバの初期化処理を開始させるコードを配置し、その後ろに、前記入力した区画化コードの内のデバイスドライバに対する初期化を行う区画化コードを配置した最適化コードを生成し、該生成した最適化コードを前記最適化コード記憶部に格納する再配置ステップとを含むことを特徴とする。
本発明にかかる第2のカーネルソースコード最適化方法は、第1のカーネルソースコード最適化方法において、
前記区画化分析ステップでは、前記カーネルソースコード記憶部から入力したカーネルソースコードを関数呼び出し単位で区画化することにより、区画化コードを生成することを特徴とする。
本発明にかかる第3のカーネルソースコード最適化方法は、第1または第2のカーネルソースコード最適化方法において、
前記コンピュータが、前記複数のデバイスそれぞれのデバイス起動待ち時間を測定し、測定したデバイス起動待ち時間を前記起動待ち時間記憶部に格納する情報採取ステップを含むことを特徴とする。
本発明にかかる第1のカーネルソースコード最適化装置は、
複数のデバイスと、
該複数のデバイス毎のデバイスドライバと、
カーネルソースコードが格納されたカーネルソースコード記憶部と、
前記複数のデバイス毎のデバイス起動待ち時間が格納された起動待ち時間記憶部と、
区画化コード記憶部と、
最適化コード記憶部と、
前記カーネルソースコード記憶部から前記カーネルソースコードを入力し、該入力したカーネルソースコードを、デバイスに対する起動処理を行うデバイス毎の区画化コードと、デバイスドライバに対する初期化処理を行うデバイスドライバ毎の区画化コードと、他の処理を行う区画化コードとに区画化して前記区画化コード記憶部に格納する区画化分析手段と、
前記区画化コード記憶部から各区画化コードを入力し、該入力した区画化コードの内のデバイスに対する起動処理を行う区画化コードをデバイス起動待ち時間が長い順に配置し、その後ろに、前記複数のデバイス毎に起動が完了したか否かを判定し、起動が完了したと判定したデバイスに対応するデバイスドライバの初期化処理を開始させるコードを配置し、その後ろに、前記入力した区画化コードの内のデバイスドライバに対する初期化を行う区画化コードを配置した最適化コードを生成し、生成した最適化コードを前記最適化コード記憶部に格納する再配置手段とを備えたことを特徴とする。
本発明にかかる第2のカーネルソースコード最適化装置は、第1のカーネルソースコード最適化装置において、
前記区画化分析手段が、前記カーネルソースコード記憶部から入力したカーネルソースコードを関数呼び出し単位で区画化することにより、区画化コードを生成することを特徴とする。
本発明にかかる第3のカーネルソースコード最適化装置は、第1または第2のカーネルソースコード最適化装置において、
前記複数のデバイスそれぞれのデバイス起動待ち時間を測定し、測定したデバイス起動待ち時間を前記起動待ち時間記憶部に格納する情報採取手段を備えたことを特徴とする。
本発明にかかるプログラムは、
複数のデバイスと、該複数のデバイス毎のデバイスドライバと、カーネルソースコードが格納されたカーネルソースコード記憶部と、前記複数のデバイス毎のデバイス起動待ち時間が格納された起動待ち時間記憶部と、区画化コード記憶部と、最適化コード記憶部とを備えたコンピュータを、
前記カーネルソースコード記憶部から前記カーネルソースコードを入力し、該入力したカーネルソースコードを、デバイスに対する起動処理を行うデバイス毎の区画化コードと、デバイスドライバに対する初期化処理を行うデバイスドライバ毎の区画化コードと、他の処理を行う区画化コードとに区画化して前記区画化コード記憶部に格納する区画化分析手段、
前記区画化コード記憶部から各区画化コードを入力し、該入力した区画化コードの内のデバイスに対する起動処理を行う区画化コードをデバイス起動待ち時間が長い順に配置し、その後ろに、前記複数のデバイス毎に起動が完了したか否かを判定し、起動が完了したと判定したデバイスに対応するデバイスドライバの初期化処理を開始させるコードを配置し、その後ろに、前記入力した区画化コードの内のデバイスドライバに対する初期化を行う区画化コードを配置した最適化コードを生成し、生成した最適化コードを前記最適化コード記憶部に格納する再配置手段として機能させる。
〔作用〕
カーネル起動処理において、コンピュータは、先ず、複数のデバイスをデバイス起動待ち時間が長いものから順に起動し、その後、起動が完了したデバイスに対応するデバイスドライバから順に初期化する。
また、既存のカーネルソースコードから上記したようなカーネル起動処理を行う最適化コードを自動的に生成するため、区画化分析手段が、カーネルソースコードを、デバイスに対する起動処理を行うデバイス毎の区画化コードと、デバイスドライバに対する初期化処理を行うデバイスドライバ毎の区画化コードと、他の処理を行う区画化コードとに区画化し、再配置手段が、区画化コードの内の、デバイスに対する起動処理を行う区画化コードをデバイス起動待ち時間が長い順に配置し、その後ろに、起動が完了したか否かを判定し、起動が完了したと判定したデバイスに対応するデバイスドライバの初期化処理を開始させるコードを配置し、その後ろに、デバイスドライバに対する初期化処理を行う区画化コードを配置した最適化コードを生成する。
本発明によれば、カーネル起動処理においてCPUが何も実行しない無駄な時間を極力少なくすることができ、その結果、カーネル起動処理に要する時間を短縮化することが可能になる。その理由は、コンピュータがカーネル起動処理を行う際、先ず、複数のデバイスをデバイス起動待ち時間が長いものから順に起動し、その後、起動が完了したデバイスに対応するデバイスドライバから順に初期化するようにしているからである。
また、本発明によれば、既存のカーネルソースコードから上記したようなカーネル起動処理を行う最適化コードを生成することが可能になる。その理由は、カーネルソースコードを、デバイスに対する起動処理を行うデバイス毎の区画化コードと、デバイスドライバに対する初期化処理を行うデバイスドライバ毎の区画化コードと、他の処理を行う区画化コードとに区画化する区画化分析手段と、区画化コードの内の、デバイスに対する起動処理を行う区画化コードをデバイス起動待ち時間が長い順に配置し、その後ろに、起動が完了したか否かを判定し、起動が完了したと判定したデバイスに対応するデバイスドライバの初期化処理を開始させるコードを配置し、その後ろに、デバイスドライバに対する初期化処理を行う区画化コードを配置した最適化コードを生成する再配置手段とを備えているからである。
本発明の第1の実施の形態の構成例を示すブロック図である。 分類情報記憶部44の内容例を示す図である。 分析結果記憶部45の内容例を示す図である。 最適化コード400の一例を示す図である。 第1の実施の形態の処理の概要を示すフローチャートである。 区画化手段21の処理例を示すフローチャートである。 区画化コード記憶部42の内容例を示す図である。 情報採取モジュール11の処理例を示すフローチャートである。 分析手段22の処理例を示すフローチャートである。 再配置手段30の処理例を示すフローチャートである。 第1の実施の形態におけるカーネル起動方法を説明するための図である。 区画化手段21が行う他の処理例を示すフローチャートである。 分析手段22が行う他の処理例を示すフローチャートである。 区画化コード記憶部42の内容例を示す図である。 本発明の第2の実施の形態にかかるカーネル起動方法を説明するための図である。 本発明の第3の実施の形態にかかるカーネル起動方法を説明するための図である。 本発明の第4の実施の形態にかかるカーネル起動方法を説明するための図である。 本発明の第5の実施の形態にかかるカーネル起動方法を説明するための図である。 従来の一般的なカーネル起動方法を説明するための図である。 特許文献1に記載されている従来の技術を説明するための図である。
次に、本発明を実施するための最良の形態について図面を参照して詳細に説明する。
〔本発明の第1の実施の形態の構成の説明〕
本実施の形態は、カーネル初期化処理が高速化されるように、カーネルソースコードを最適化するものである。図1を参照すると、本実施の形態を適用したコンピュータ1は、カーネル10と、区画化分析手段20と、再配置手段30と、記憶装置40と、複数のデバイス50とを備えている。
記憶装置40には、カーネルソースコード記憶部41と、区画化コード記憶部42と、起動待ち時間記憶部43と、分類情報記憶部44と、分析結果記憶部45と、最適化コード記憶部46と、オブジェクトコード記憶部47とが設けられている。カーネルソースコード記憶部41には、カーネル10のカーネルソースコード(最適化を行う前のカーネルソースコード)が格納されている。
カーネル10は、デバイス50毎のデバイスドライバ12を備えている。更に、カーネル10には、各デバイス50のデバイス起動待ち時間を測定し、起動待ち時間記憶部43に格納する情報採取モジュール11が組み込まれている。
区画化分析手段20は、区画化手段21と、分析手段22とを含んでいる。
区画化手段21は、カーネルソースコード記憶部41から入力したカーネルソースコードを関数呼び出し単位で区画化することにより、区画化コードを生成し、生成した区画化コードを区画化コード記憶部42に格納する機能を有する。なお、区画化手段21は、カーネルソースコードを関数呼び出し単位で区画化する際、関数呼び出しで使用する引数への操作部分も同じ区画に入れる。また、区画化手段21は、区画化コードを区画化コード記憶部42に格納する際、各区画化コードを一意に識別する区画化コード名を付与する。区画化コードに付与する区画化コード名は、各区画化コードを一意に識別できるものならどのようなものでも構わないが、例えば、区画化時に抽出された呼び出し関数名に“REBLOCKING”などのPrefixを付けたものを、区画化コード名とすることができる。
分析手段22は、分類情報記憶部44に格納されている分類情報に基づいて、区画化コード記憶部42に格納されている各区画化コードが、次の3つのフェーズのどのフェーズに属するものであるかを判定する機能を有する。
・第1フェーズ(フェーズ1)…起動コマンドの発行処理などのデバイス起動処理を行うフェーズである。
・第2フェーズ(フェーズ2)…ドライバ構造体作成処理などのデバイスドライバ初期化処理を行うフェーズである。
・第3フェーズ(フェーズ3)…デバイス起動処理、デバイスドライバ初期化処理以外の初期化処理を行うフェーズである。
分類情報記憶部44には、第1フェーズおよび第2フェーズで使用される関数と、その関数の処理内容(第1フェーズで使用されるものなのか、第2フェーズで使用されるものなのかを示す)とが対応付けて登録されている。図2は、分類情報記憶部44の内容例を示す図である。同図の例は、関数「io_device_init()」は、第1フェーズ(デバイス起動処理)で使用され、関数「io_device_driver_init()」は、第2フェーズ(デバイスドライバ初期化処理)で使用されることを示している。
即ち、分析手段22は、区画化コード記憶部42に格納されている各区画化コードの内、分類情報記憶部44において処理内容が「デバイス起動処理(第1フェーズ)」となっている関数を含んでいるものは第1フェーズに属すると判定し、分類情報記憶部44において処理内容が「デバイスドライバ初期化処理(第2フェーズ)」となっている関数を含んでいるものは第2フェーズに属すると判定し、分類情報記憶部44に登録されている関数を含んでいないものは第3フェーズに属すると判定する。
更に、分析手段22は、第1フェーズに属すると判定した区画化コードについては、起動待ち時間記憶部43を参照して、その区画化コードが起動処理を担当しているデバイスのデバイス起動時間を求める機能や、分析結果記憶部45に分析結果情報を格納する機能を有する。分析結果情報には、各区画化コードの区画化コード名と、その区画化コード名の区画化コードが属するフェーズのフェーズ識別子と、デバイス起動待ち時間(第1フェーズに属する区画化コードについてのみ)とが含まれる。なお、第1フェーズに属する各区画化コードが、どのデバイスの起動処理を担当しているかは、各区画化コード内の引数から調べることができる。
図3は、分析結果記憶部45の内容例を示す図である。同図の例は、区画化コード名「K1」「K2」「K3」の区画化コードは、それぞれ第1、第2、第3フェーズに属し、区画化コード名「K1」の区画化コードによって初期化されるデバイスは、デバイス起動待ち時間が「t1」であることを示している。
再配置手段30は、区画化コード記憶部42に格納されている各区画化コードと、分析結果記憶部45の内容とに基づいて、図4に示すような最適化コード400を生成し、それを最適化コード記憶部46に格納する機能を有する。
図4を参照すると、最適化コード400の先頭部分には、第1フェーズに属する各区画化コード401(各デバイス50を起動させる区画化コード)が、デバイス起動待ち時間が長いものから順に配置されている。その後ろには、各デバイス50毎に起動が完了したか否かを判定し、起動が完了したと判定したデバイスに対応するデバイスドライバの初期化処理を開始させる第1フェーズ完了判定コード402が配置されている。その後ろには、第2、第3フェーズに属する各区画化コード403、404が配置されている。
なお、区画化分析手段20および再配置手段30は、CPU(コンピュータ)によって実現可能であり、コンピュータによって実現する場合は、例えば、次のようにする。コンピュータを、区画化分析手段20、再配置手段30として機能させるためのプログラムを記録したデバイス、半導体メモリ、その他の記録媒体を用意し、コンピュータに上記プログラムを読み取らせる。コンピュータは、読み取ったプログラムに従って自身の動作を制御することにより、自コンピュータ上に、区画化分析手段20および再配置手段30を実現する。
〔第1の実施の形態の動作の説明〕
次に、本実施の形態の動作について詳細に説明する。
本実施の形態では、図5のフローチャートに示すように、先ず、区画化手段21による区画化処理(ステップS51)が行われ、次いで、情報採取モジュール11による情報採取処理(ステップS52)が行われ、その後、分析手段22による分析処理(ステップS53)が行われ、最後に、再配置手段30による再配置処理(ステップS54)が行われる。以下では、各手段が各ステップで行う処理を詳しく説明する。
区画化手段21は、図6のフローチャートに示すように、カーネルソースコード記憶部41からカーネルソースコードを入力し(ステップS61)、入力したカーネルソースコードを関数呼び出し単位で区画化することにより、区画化コードを生成する(ステップS62)。その際、区画化手段21は、関数呼び出しで使用する引数への操作部分も同じ区画に入れる。その後、区画化手段21は、各区画化コードにそれぞれユニークな区画化コード名を付加して区画化コード記憶部42に格納する(ステップS63)。
図7に区画化コード記憶部42の内容例を示す。同図の例は、n個の区画化コード42−1〜42−nがそれぞれ区画化コード名「K1」〜「Kn」を付加されて区画化コード記憶部42に登録されていることを示している。
区画化手段21による区画化処理(図5のステップS51)が完了すると、情報採取モジュール11による情報採取処理(ステップS52)が行われる。
この情報採取処理では、まだ最適化が実施されていないカーネル10に対し、情報採取モジュール11を組み込んだ上でテストランという形で一度カーネル起動処理を実施する。情報採取モジュール11では、テストランの間に、各デバイス50のデバイス起動待ち時間を測定し(図8のステップS81)、各デバイスのデバイスIDと測定したデバイス起動待ち時間とを対応付けて起動待ち時間記憶部43に格納する(ステップS82)。
情報採取モジュール11による情報採取処理(図5のステップS52)が完了すると、分析手段22による分析処理(ステップS53)が実行される。
分析手段22は、図9のフローチャートに示すように、先ず、区画化コード記憶部42(図7参照)から各区画化コード42−1〜42−nを入力し(ステップS91)、次いで、分類情報記憶部44(図2参照)から関数と処理内容との対からなる分類情報を入力する(ステップS92)。
次いで、分析手段22は、分類情報記憶部44から入力した分類情報に基づいて、各区画化コード42−1〜42−nが属するフェーズを判定する(ステップS93)。具体的には、区画化コード42−1〜42−nの内、入力した分類情報において処理内容が「デバイス起動処理(第1フェーズ)」「デバイスドライバ初期化処理(第2フェーズ)」となっている関数を含んでいる区画化コードは、それぞれ第1フェーズ、第2フェーズに属すると判定し、分類情報中の関数を含んでいない区画化コードは、第3フェーズに属すると判定する。
その後、分析手段22は、起動待ち時間記憶部43から各デバイス50のデバイス起動待ち時間を入力し(ステップS94)、第1フェーズに属する各区画化コード毎に、その区画化コードが起動処理を受け持っているデバイスのデバイス起動時間を求める(ステップS95)。
そして、最後に、分析手段22は、各区画化コード42−1〜42−nの区画化コード名「K1」〜「Kn」と、その区画化コード名の区画化コードが属するフェーズのフェーズ識別子と、デバイス起動待ち時間(第1フェーズに属する区画化コードのみ)とからなる分析結果情報を、分析結果記憶部45に格納する(ステップS96)。
分析手段22による分析処理(図5のステップS53)が完了すると、再配置手段30による再配置処理(ステップS54)が実行される。
再配置手段30は、図10のフローチャートに示すように、先ず、分析結果情報記憶部45(図3参照)から分析結果情報を入力し(ステップS101)、次いで、区画化コード記憶部(図7参照)から区画化コード名が付加された区画化コード42−1〜42−nを入力する(ステップS102)。
次いで、再配置手段30は、入力した分析結果情報と、区画化コード42−1〜42−nとに基づいて、図4に示すような最適化コード400を生成する(ステップS103)。
即ち、再配置手段30は、デバイス起動待ち時間が長いデバイスから順にデバイス起動処理が行われるように、第1フェーズに属する各区画化コード401(各デバイス50の起動処理を行う区画化コード)をデバイス起動待ち時間が長いものから順に配置する。デバイス起動待ち時間が長いデバイスから順にデバイス起動処理を行うようにするのは、CPUが何もしない無駄な時間を極力少なくし、カーネル起動処理に要する時間を短縮化するためである。
この次に、デバイス50の起動が完了した後に、対応するデバイスドライバ12の初期化処理が行われるようにするために、各デバイス50毎に起動が完了したか否かを判定し、起動が完了したと判定したデバイス50に対応するデバイスドライバ12の初期化処理を開始させる第1フェーズ完了判定コード402を配置する。
第1フェーズ完了判定コード402の次には、第2フェーズに属する区画化コード(デバイスドライバ12の初期化処理を行う区画化コード)403を配置する。更に、第2フェーズの処理が完了した後、第3フェーズの処理が行われるように、第3フェーズに属する区画化コードを配置する。
この再配置を行った結果として最適化コード400が生成される。ここでの最適化コード400は、カーネルソースコード記憶部41に格納されているカーネルソースコードと同等のソースコードであるので最適化コード400を用いてカーネルのビルドが可能である。最適化コード400を使用してカーネルのビルドを行えば、カーネル起動処理全体について高速化が図れるように処理の再配置が行われたカーネルが作成可能となり、カーネル起動処理の高速化としての目的が達成される。
そして、最後に、再配置手段30は、生成した最適化コード400を最適化コード記憶部46に格納する(ステップS104)。
〔本実施の形態のカーネル起動処理の説明〕
次に、図11を参照して、最適化コード400を利用したカーネル起動処理100について説明する。なお、カーネル起動処理100は、CPU(図示せず)が、最適化コード400をコンパイルしたオブジェクトコードを実行することにより行われるものであり、上記オブジェクトコードは、オブジェクトコード記憶部47に格納されている。
カーネル起動処理100においては、先ず、第1フェーズ(フェーズ1)201が実行される。第1フェーズ201においては、各デバイス50が、デバイス起動待ち時間が長い順に起動される。
第1フェーズ201が完了すると、第1フェーズ完了判定処理203により、各デバイス50毎に、デバイスの起動が完了したか否かを判定する。この判定は、デバイス50に対しての「ポーリング」によるデバイス起動判定や、デバイス起動完了後に割り込みが発生するデバイス50に関しては「デバイスからの割り込み発生」による判定などを指す。そして、起動完了が確認できたデバイス50については、そのデバイス50に対応するデバイスドライバ12の初期化処理(第2フェーズ)を開始させる。
第2フェーズ(フェーズ2)204において、全てのデバイスドライバ12に対する初期化処理(ドライバ構造体作成処理など)が完了すると、第3フェーズ(メモリ初期化処理などのその他の初期化処理)205が実行される。
なお、上述した説明では、図5の区画化処理(ステップS51)、分析処理(ステップS53)において、区画化手段21、分析手段22がそれぞれ図6、図9のフローチャートに示す処理を行うようにしたが、区画化手段21、分析手段22がそれぞれ図12、図13のフローチャートに示す処理を行うようにしても良い。
区画化手段21は、図12のフローチャートに示すように、カーネルソースコード記憶部41からカーネルソースコードを入力し(ステップS121)、入力したカーネルソースコードを関数呼び出し単位で区画化することにより、区画化コードを生成する(ステップS122)。その際、区画化手段21は、関数呼び出しで使用する引数への操作部分も同じ区画に入れる。
その後、区画化手段21は、分類情報記憶部44(図2参照)から分類情報を入力し、この分類情報に基づいて、各区画化コードが第1フェーズ〜第3フェーズのどのフェーズに属するか判定する(ステップS123、S124)。その後、区画化手段21は、各区画化コードに、その区画化コードが属するフェーズのフェーズ識別子と、ユニークな区画化コード名とを付加して区画化コード記憶部42に格納する(ステップS125)。
図14に区画化コード記憶部42の内容例を示す。同図の例は、n個の区画化コード42−1〜42−nがそれぞれ区画化コード名「K1」〜「Kn」を付加されて区画化コード記憶部42に登録されていることを示すと共に、区画化コード42−1、42−2、42−nがそれぞれ第1フェーズ(F1)、第2フェーズ(F2)、第3フェーズ(F3)に属していることを示している。
一方、分析手段22は、図13のフローチャートに示すように、先ず、区画化コード記憶部42(図14参照)から、区画化コード名およびフェーズ識別子が付加された区画化コード42−1〜42−nを入力し(ステップS131)、次いで、起動待ち時間記憶部43から各デバイス50のデバイス起動待ち時間を入力する(ステップS132)。その後、分析手段22は、第1フェーズに属する各区画化コード毎に、その区画化コードが起動処理を受け持っているデバイスのデバイス起動待ち時間を求める(ステップS133)。そして、最後に、分析手段22は、各区画化コード42−1〜42−nの区画化コード名「K1」〜「Kn」と、その区画化コード名の区画化コードが属するフェーズのフェーズ識別子と、デバイス起動待ち時間(第1フェーズに属する区画化コードのみ)とからなる分析結果情報を、分析結果記憶部45に格納する(ステップS134)。
〔第1の実施の形態の効果〕
本実施の形態によれば、カーネル起動処理においてCPUが何も実行しない無駄な時間を極力少なくすることができ、その結果、カーネル起動処理に要する時間を短縮化することが可能になる。その理由は、コンピュータ1がカーネル起動処理100を行う際、先ず、複数のデバイスをデバイス起動待ち時間が長いものから順に起動し、その後、起動が完了したデバイスに対応するデバイスドライバから順に初期化するようにしているからである。
また、本実施の形態によれば、既存のカーネルソースコードから上記したようなカーネル起動処理を行う最適化コードを生成することが可能になる。その理由は、カーネルソースコードを、デバイスに対する起動処理を行うデバイス毎の区画化コードと、デバイスドライバに対する初期化処理を行うデバイスドライバ毎の区画化コードと、他の処理を行う区画化コードとに区画化する区画化分析手段20と、区画化コードの内の、デバイスに対する起動処理を行う区画化コードをデバイス起動待ち時間が長い順に配置し、その後ろに、起動が完了したか否かを判定し、起動が完了したと判定したデバイスに対応するデバイスドライバの初期化処理を開始させるコードを配置し、その後ろに、デバイスドライバに対する初期化を行う区画化コードを配置し、その後ろに、他の処理を行う区画化コードを配置した最適化コードを生成する再配置手段30とを備えているからである。
〔本発明の第2の実施の形態〕
次に、本発明の第2の実施の形態について説明する。図15は本実施の形態にかかるカーネル起動方法を説明するための図であり、本実施の形態のカーネル起動処理100においては、第1フェーズ201、デバイスに非依存な初期化処理202、第1フェーズ完了判定処理203a、第2フェーズ204、デバイスに依存する初期化処理206が順次実行される。
第1フェーズ201においては、各デバイス50に対するデバイス起動処理を、デバイス起動待ち時間が長いものから順に実行する。
第1フェーズ201の完了後、デバイスに非依存な初期化処理202を実行する。デバイスに非依存な初期化処理202においては、デバイス起動処理およびデバイスドライバ初期化処理を除いた初期化処理(図19におけるその他の初期化処理101)の内の、デバイスの状態によらずカーネル起動処理100内の任意のタイミングで実行可能な初期化処理を実行する。即ち、カーネル起動処理100の任意のタイミングで初期化処理を行うことができるモジュールに対する初期化処理を行う。
ここで、第1フェーズ201において、デバイス起動待ち時間が長いデバイスから順に起動するようにした理由は、最も長いデバイスの起動待ち時間103の間に他のデバイスのデバイス起動処理を行うことで、待ち時間の相殺を行うことが可能となるからであり、逆に、デバイス起動待ち時間が短いデバイスから起動を行う場合で、最も長いデバイスの起動待ち時間103よりデバイスに非依存な初期化処理202にかかる時間が短かった場合には、CPUとしては何も処理しない無駄な待ち合わせ時間が発生するからである。
デバイスに非依存な初期化処理202の完了後、第1フェーズ完了判定処理203aを実行する。第1フェーズ完了判定処理203aでは、全てのデバイス50の起動が完了したか否かを判定する。即ち、第1フェーズ完了判定処理203aでは、第2フェーズ204へ移行するための必要条件の判定を行う。
第1フェーズ完了判定処理203aにおいて、全てのデバイス50の起動完了が確認できた場合、第2フェーズ204を実行する。第2フェーズ204では、各デバイスドライバ12に対する初期化処理(ドライバ構造体作成処理など)を実行する。
そして、最後に、デバイスドライバの初期化完了後に実行可能となるデバイスに依存する初期化処理206を行う。即ち、デバイスドライバの初期化処理が完了しなければ初期化処理を行うことができないモジュールに対する初期化処理を行う。
なお、上記した処理は、カーネルソースコードをコンパイルしたオブジェクトコードを実行するCPUによって行われる。
〔第2の実施の形態の効果〕
本実施の形態によれば、カーネル起動処理においてCPUが何も実行しない無駄な時間を極めて少なくすることができ、その結果、カーネル起動処理に要する時間を短縮化することが可能になる。その理由は、各デバイス50をデバイス起動待ち時間が長いものから順に起動する第1フェーズ201の次に、デバイスに非依存な初期化処理202を行うようにしているからである。
〔本発明の第3の実施の形態〕
本実施の形態は、カーネル起動処理において初期化の必要性が無いデバイスに関しては、カーネル起動処理の完了後に初期化を実施することにより、カーネル起動処理に要する時間を短縮化したことを特徴とする。
コンピュータが備えているデバイスは、カーネル起動直後に必要となるデバイスと、必要では無いデバイスとの2種類に分類することができる。本実施の形態では、カーネル起動直後に必要となるデバイスについては、カーネル起動処理におけるドライバ初期化処理内で実行し、カーネル起動完了直後に必要では無いデバイスに対しての初期化処理は、カーネル起動完了後に行うようにする。
今、コンピュータが第1デバイス(デバイス1)〜第3デバイス(デバイス3)の3台のデバイスを備え、且つ第3デバイスがカーネル起動直後に必要でないデバイスであったとする。また、第1デバイスのデバイス起動待ち時間よりも、第2デバイスのデバイス起動待ち時間の方が長いとする。
本実施の形態では、図16に示すように、カーネル起動処理100のドライバ初期化処理102において、先ず、第2デバイスに対するデバイス起動処理102−1が行われ、第2デバイスのデバイス起動待ち時間103の間に、第1デバイスに対するデバイス起動処理102−2、第1デバイスに対応するデバイスドライバに対する初期化処理102−3が順次行われる。そして、第2デバイスの起動が完了すると、第2デバイスに対応するデバイスドライバに対する初期化処理102−4が行われる。
カーネル起動完了直後に必要のない第3デバイスに対するデバイス起動処理102−5、および第3デバイスに対応するデバイスドライバに対するデバイスドライバ初期化処理102−6は、カーネル起動処理100が完了した後に行う。なお、図15に示した第2の実施の形態に本実施の形態を適用する様にしても良い。
〔第3の実施の形態の効果〕
本実施の形態によれば、カーネル起動完了直後に使用しないデバイス、デバイスドライバに対する起動処理102−5、初期化処理102−6は、カーネル起動処理100の完了後に行うようにしているので、カーネル起動処理100に要する時間を短くすることができる。
〔本発明の第4の実施の形態〕
本実施の形態は、CPUを複数有するコンピュータにおいて、各CPUが処理を並行して行うことにより、カーネル起動処理に要する時間を短縮化させることを特徴とする。
図17は、CPU1〜CPU4の4台のCPUを有するコンピュータにおけるカーネル起動処理100を示した図である。
先ず、各CPU1〜CPU4が、それぞれ、自CPUに割り当てられているデバイスに対するデバイス起動処理「フェーズ1−1〜フェーズ1−4」201を並行して行う。その際、各CPU1〜CPU4は、デバイス起動待ち時間が長いものから順にデバイス起動処理を行う。
次いで、各CPU1〜CPU4が、自CPUに割り当てられているモジュールの内の、デバイスに非依存なモジュールに対する初期化処理202を行う。
その後、各CPU1〜CPU4が、自CPUに割り当てられている全てのデバイスの起動が完了したか否かを判定するフェーズ1完了判定処理203を行う。
そして、自CPUに割り当てられている全てのデバイスの起動が完了していると判定したCPUから順に、自CPUに割り当てられているデバイスに対応するデバイスドライバのデバイスドライバ初期化処理「フェーズ2−1〜2−4」204を行う。
最後に、デバイスドライバの初期化処理が完了したCPUから順に、自CPUに割り当てられているモジュールの内の、デバイスに依存するモジュールの初期化処理205を行う。
〔第4の実施の形態の効果〕
本実施の形態によれば、複数のCPUが並行してカーネル起動処理100を行うので、カーネル起動処理100に要する時間を短縮化することができる。
〔第5の実施の形態〕
次に、本発明の第5の実施の形態について説明する。本実施の形態は、コンピュータが、ブートローダの実行時に、デバイスに対するデバイス起動処理を行うことにより、カーネル起動処理に要する時間を短縮化したことを特徴とする。
本実施の形態では、図18に示すように、コンピュータがブートローダの実行時、第1デバイス〜第3デバイスに対するデバイス起動処理102−1〜102−3を実行する。なお、各デバイスのデバイス起動待ち時間は、第1デバイスが最も長く、第3デバイスが最も短いとする。その後、ブートローダの本来の処理であるカーネル起動処理100を開始させる処理を行う。このブートローダ実行中というタイミングにおいてデバイスのデバイス起動処理102−1〜102−3の実行を前倒しすることにより、デバイスの起動待ちという時間の間、他の処理101を行うことで、無駄な待ち時間を相殺する。その後、カーネル起動処理100のドライバ初期化処理102において、各デバイスドライバの初期化処理102−4〜102−6を実行する。
〔第5の実施の形態の効果〕
本実施の形態によれば、コンピュータがブートローダの実行時に、デバイスに対するデバイス起動処理102−1〜102−3を行うようにしているので、カーネル起動処理100に要する時間を短くすることができる。
本発明によりカーネル起動の高速化が可能となるため、即応性が必要な組み込み機器を用いたシステムに適用出来る。また、組み込み以外でも、オペレーティングシステムが存在し、起動時にカーネルによりデバイスの初期化を実施するシステム全般に適用可能である。
1…コンピュータ
10…カーネル
11…情報採取モジュール
12…デバイスドライバ
20…区画化分析手段
21…区画化手段
22…分析手段
30…再配置手段
40…記憶装置
41…カーネルソースコード記憶部
42…区画化コード記憶部
43…起動待ち時間記憶部
44…分類情報記憶部
45…分析結果記憶部
46…最適化コード記憶部
47…オブジェクトコード記憶部

Claims (7)

  1. 複数のデバイスと、該複数のデバイス毎のデバイスドライバと、カーネルソースコードが格納されたカーネルソースコード記憶部と、前記複数のデバイス毎のデバイス起動待ち時間が格納された起動待ち時間記憶部と、区画化コード記憶部と、最適化コード記憶部とを備えたコンピュータによって前記カーネルソースコードを最適化するカーネルソースコード最適化方法であって、
    前記コンピュータが、前記カーネルソースコード記憶部から前記カーネルソースコードを入力し、該入力したカーネルソースコードを、デバイスに対する起動処理を行うデバイス毎の区画化コードと、デバイスドライバに対する初期化処理を行うデバイスドライバ毎の区画化コードと、他の処理を行う区画化コードとに区画化して前記区画化コード記憶部に格納する区画化分析ステップと、
    前記コンピュータが、前記区画化コード記憶部から各区画化コードを入力し、該入力した区画化コードの内のデバイスに対する起動処理を行う区画化コードをデバイス起動待ち時間が長い順に配置し、その後ろに、前記複数のデバイス毎に起動が完了したか否かを判定し起動が完了したと判定したデバイスに対応するデバイスドライバの初期化処理を開始させるコードを配置し、その後ろに、前記入力した区画化コードの内のデバイスドライバに対する初期化を行う区画化コードを配置した最適化コードを生成し、該生成した最適化コードを前記最適化コード記憶部に格納する再配置ステップとを含むことを特徴とするカーネルソースコード最適化方法。
  2. 請求項1記載のカーネルソースコード最適化方法において、
    前記区画化分析ステップでは、前記カーネルソースコード記憶部から入力したカーネルソースコードを関数呼び出し単位で区画化することにより、区画化コードを生成することを特徴とするカーネルソースコード最適化方法。
  3. 請求項1または2記載のカーネルソースコード最適化方法において、
    前記コンピュータが、前記複数のデバイスそれぞれのデバイス起動待ち時間を測定し、測定したデバイス起動待ち時間を前記起動待ち時間記憶部に格納する情報採取ステップを含むことを特徴とするカーネルソースコード最適化方法。
  4. 複数のデバイスと、
    該複数のデバイス毎のデバイスドライバと、
    カーネルソースコードが格納されたカーネルソースコード記憶部と、
    前記複数のデバイス毎のデバイス起動待ち時間が格納された起動待ち時間記憶部と、
    区画化コード記憶部と、
    最適化コード記憶部と、
    前記カーネルソースコード記憶部から前記カーネルソースコードを入力し、該入力したカーネルソースコードを、デバイスに対する起動処理を行うデバイス毎の区画化コードと、デバイスドライバに対する初期化処理を行うデバイスドライバ毎の区画化コードと、他の処理を行う区画化コードとに区画化して前記区画化コード記憶部に格納する区画化分析手段と、
    前記区画化コード記憶部から各区画化コードを入力し、該入力した区画化コードの内のデバイスに対する起動処理を行う区画化コードをデバイス起動待ち時間が長い順に配置し、その後ろに、前記複数のデバイス毎に起動が完了したか否かを判定し、起動が完了したと判定したデバイスに対応するデバイスドライバの初期化処理を開始させるコードを配置し、その後ろに、前記入力した区画化コードの内のデバイスドライバに対する初期化を行う区画化コードを配置した最適化コードを生成し、生成した最適化コードを前記最適化コード記憶部に格納する再配置手段とを備えたことを特徴とするカーネルソースコード最適化装置。
  5. 請求項4記載のカーネルソースコード最適化装置において、
    前記区画化分析手段が、前記カーネルソースコード記憶部から入力したカーネルソースコードを関数呼び出し単位で区画化することにより、区画化コードを生成することを特徴とするカーネルソースコード最適化装置。
  6. 請求項4または5記載のカーネルソースコード最適化装置において、
    前記複数のデバイスそれぞれのデバイス起動待ち時間を測定し、測定したデバイス起動待ち時間を前記起動待ち時間記憶部に格納する情報採取手段を備えたことを特徴とするカーネルソースコード最適化装置。
  7. 複数のデバイスと、該複数のデバイス毎のデバイスドライバと、カーネルソースコードが格納されたカーネルソースコード記憶部と、前記複数のデバイス毎のデバイス起動待ち時間が格納された起動待ち時間記憶部と、区画化コード記憶部と、最適化コード記憶部とを備えたコンピュータを、
    前記カーネルソースコード記憶部から前記カーネルソースコードを入力し、該入力したカーネルソースコードを、デバイスに対する起動処理を行うデバイス毎の区画化コードと、デバイスドライバに対する初期化処理を行うデバイスドライバ毎の区画化コードと、他の処理を行う区画化コードとに区画化して前記区画化コード記憶部に格納する区画化分析手段、
    前記区画化コード記憶部から各区画化コードを入力し、該入力した区画化コードの内のデバイスに対する起動処理を行う区画化コードをデバイス起動待ち時間が長い順に配置し、その後ろに、前記複数のデバイス毎に起動が完了したか否かを判定し、起動が完了したと判定したデバイスに対応するデバイスドライバの初期化処理を開始させるコードを配置し、その後ろに、前記入力した区画化コードの内のデバイスドライバに対する初期化を行う区画化コードを配置した最適化コードを生成し、生成した最適化コードを前記最適化コード記憶部に格納する再配置手段として機能させるためのプログラム。
JP2011243400A 2011-11-07 2011-11-07 カーネルソースコード最適化方法、カーネルソースコード最適化装置及びプログラム Expired - Fee Related JP5195997B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011243400A JP5195997B2 (ja) 2011-11-07 2011-11-07 カーネルソースコード最適化方法、カーネルソースコード最適化装置及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011243400A JP5195997B2 (ja) 2011-11-07 2011-11-07 カーネルソースコード最適化方法、カーネルソースコード最適化装置及びプログラム

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2007061279A Division JP5029076B2 (ja) 2007-03-12 2007-03-12 カーネル起動方法、カーネルソースコード最適化方法、カーネルソースコード最適化装置及びプログラム

Publications (2)

Publication Number Publication Date
JP2012038341A JP2012038341A (ja) 2012-02-23
JP5195997B2 true JP5195997B2 (ja) 2013-05-15

Family

ID=45850194

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011243400A Expired - Fee Related JP5195997B2 (ja) 2011-11-07 2011-11-07 カーネルソースコード最適化方法、カーネルソースコード最適化装置及びプログラム

Country Status (1)

Country Link
JP (1) JP5195997B2 (ja)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08159078A (ja) * 1994-12-05 1996-06-18 Bridgestone Corp 少水量停止機能付回転数制御給水システム
JPH11328823A (ja) * 1998-05-15 1999-11-30 Nec Eng Ltd ディスクアレイ装置及びその起動方法並びにその制御プログラムを記録した記録媒体
JP4132623B2 (ja) * 2000-09-29 2008-08-13 株式会社リコー 電源投入後に立上制御を行う装置及びその立上制御方法並びにその立上制御プログラムを書き込んだ記憶媒体
JP2006093950A (ja) * 2004-09-22 2006-04-06 Canon Inc システムの起動制御方法

Also Published As

Publication number Publication date
JP2012038341A (ja) 2012-02-23

Similar Documents

Publication Publication Date Title
US10338956B2 (en) Application profiling job management system, program, and method
US9417935B2 (en) Many-core process scheduling to maximize cache usage
US8046692B2 (en) User interface mapping modules to deployment targets
US8271707B2 (en) Method and system for PCI hybrid function
US20130231912A1 (en) Method, system, and scheduler for simulating multiple processors in parallel
WO2013165459A1 (en) Control flow graph operating system configuration
WO2014014532A1 (en) Pattern matching process scheduler with upstream optimization
WO2014014487A1 (en) Pattern extraction from executable code in message passing environments
JP2017117450A (ja) 様々なケーパビリティを有するコアに関するスレッド及び/又は仮想マシンのスケジューリング
CN106445576A (zh) 主机板及其计算机实现方法及非暂态计算机可读储存装置
JP2007328782A (ja) カーネル間でカーネル・サービスを共用するための方法、装置、およびコンピュータ・プログラム
EP2847669A1 (en) Hybrid operating system
US9990216B2 (en) Providing hypercall interface for virtual machines
RU2010149889A (ru) Конфигурируемое разделение для параллельных данных
US20190303172A1 (en) Information processing apparatus, device assignment method, and computer readable medium
US20130036249A1 (en) Preemptive guest merging for virtualization hypervisors
CN112965895A (zh) 桌面应用程序自动化测试方法、装置、设备及存储介质
Mao et al. GreenPipe: a Hadoop based workflow system on energy-efficient clouds
JP5029076B2 (ja) カーネル起動方法、カーネルソースコード最適化方法、カーネルソースコード最適化装置及びプログラム
JP5195997B2 (ja) カーネルソースコード最適化方法、カーネルソースコード最適化装置及びプログラム
JP2009245409A (ja) リソース自動構築システム及び自動構築方法並びにそのための管理用端末
US9262184B2 (en) Virtual computer system and I/O implementing method in virtual computer
CN115840617A (zh) 一种调试方法、系统及相关装置
JP5382624B2 (ja) マルチプロセッサ制御装置、その方法及びそのプログラム
CN103870313A (zh) 一种虚拟机任务调度方法及系统

Legal Events

Date Code Title Description
RD07 Notification of extinguishment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7427

Effective date: 20120711

TRDD Decision of grant or rejection written
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121228

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130108

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130121

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

Free format text: PAYMENT UNTIL: 20160215

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5195997

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees