IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

7640847情報処理装置、情報処理プログラム、及び情報処理方法
<>
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図1
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図2
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図3
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図4
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図5
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図6
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図7
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図8
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図9
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図10
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図11
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図12
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図13
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図14
  • -情報処理装置、情報処理プログラム、及び情報処理方法 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-02-26
(45)【発行日】2025-03-06
(54)【発明の名称】情報処理装置、情報処理プログラム、及び情報処理方法
(51)【国際特許分類】
   G06F 11/07 20060101AFI20250227BHJP
【FI】
G06F11/07 193
G06F11/07 178
【請求項の数】 7
(21)【出願番号】P 2021080755
(22)【出願日】2021-05-12
(65)【公開番号】P2022174793
(43)【公開日】2022-11-25
【審査請求日】2024-02-08
(73)【特許権者】
【識別番号】598057291
【氏名又は名称】エフサステクノロジーズ株式会社
(74)【代理人】
【識別番号】110004370
【氏名又は名称】弁理士法人片山特許事務所
(72)【発明者】
【氏名】石中 貴
(72)【発明者】
【氏名】松山 佳彦
【審査官】松平 英
(56)【参考文献】
【文献】特開平03-257641(JP,A)
【文献】国際公開第2011/004441(WO,A1)
【文献】特開平10-333944(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F11/07
11/28-11/36
(57)【特許請求の範囲】
【請求項1】
カーネルパニックを実行したカーネルを再起動するカーネル起動部と、
前記カーネルパニックの実行時に前記カーネルが使用していたメモリの第1の領域の内容を取得して、前記内容を含むダンプファイルを生成する生成部と、
前記メモリにおいて前記第1の領域とは異なる第2の領域に、前記カーネルとは異なるプログラムを割り当てて、再起動した前記カーネルの上で前記プログラムを起動するプログラム起動部と、
を有し、
前記生成部は、前記内容を取得した後に前記第1の領域を解放し、
前記プログラム起動部は、前記プログラムを起動するのに前記第2の領域のサイズが足りない場合には、前記生成部が前記第1の領域を解放するのを待つことを特徴とする情報処理装置。
【請求項2】
前記プログラム起動部は、前記ダンプファイルの生成と並行して、前記プログラムを起動することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記カーネルを再起動するのに必要なサイズを有する第3の領域が前記メモリに存在しない場合は、前記生成部が前記ダンプファイルを生成して前記第1の領域を解放し、
前記カーネル起動部は、前記第1の領域を解放した後に前記カーネルを再起動することを特徴とする請求項1に記載の情報処理装置。
【請求項4】
前記第1の領域及び前記第2の領域の各々と異なる前記メモリの第4の領域に、前記第1の領域のサイズと先頭アドレスとを格納する格納部と、
前記第4の領域に格納された前記サイズと前記先頭アドレスとに基づいて前記第3の領域が前記メモリに存在するかを判断する判断部とを更に有することを特徴とする請求項に記載の情報処理装置。
【請求項5】
前記第1の領域を読み取り専用にするメモリ管理部を更に有することを特徴とする請求項1に記載の情報処理装置。
【請求項6】
カーネルパニックを実行したカーネルを再起動し、
前記カーネルパニックの実行時に前記カーネルが使用していたメモリの第1の領域の内容を取得して、前記内容を含むダンプファイルを生成し、
前記メモリにおいて前記第1の領域とは異なる第2の領域に、前記カーネルとは異なるプログラムを割り当てて、再起動した前記カーネルの上で前記プログラムを起動し、
前記内容を取得した後に前記第1の領域を解放し、
前記プログラムを起動するのに前記第2の領域のサイズが足りない場合には、前記第1の領域を解放するのを待つ
処理をコンピュータに実行させるための情報処理プログラム。
【請求項7】
コンピュータが、
カーネルパニックを実行したカーネルを再起動し、
前記カーネルパニックの実行時に前記カーネルが使用していたメモリの第1の領域の内容を取得して、前記内容を含むダンプファイルを生成し、
前記メモリにおいて前記第1の領域とは異なる第2の領域に、前記カーネルとは異なるプログラムを割り当てて、再起動した前記カーネルの上で前記プログラムを起動し、
前記内容を取得した後に前記第1の領域を解放し、
前記プログラムを起動するのに前記第2の領域のサイズが足りない場合には、前記第1の領域を解放するのを待つ
処理を実行することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理プログラム、及び情報処理方法に関する。
【背景技術】
【0002】
コンピュータのOS(Operating System)のカーネルが致命的なエラーを検出すると、コンピュータを保護するためにカーネルがカーネルパニックと呼ばれる処理を実行する。例えば、物理的に壊れたメモリ領域をアプリケーションプログラムが参照した場合にカーネルパニックが実行される。
【0003】
カーネルパニックが実行されると、OSに含まれるダンプ採取カーネルがメモリのダンプファイルを生成してそれをディスク等の記憶装置に書き込む処理を行う。ダンプファイルは、カーネルパニックの実行直前にカーネルが参照していたメモリの内容と、CPU(Central Processing Unit)のレジスタの内容とを含む情報である。管理者がそのダンプファイルを解析することにより、コンピュータに発生した障害の原因を特定することができる。
【0004】
しかし、コンピュータのハードウェア資源に障害がない場合であっても、ダンプ採取カーネルがダンプファイルの生成を行っているときはコンピュータを復旧できず、コンピュータのハードウェア資源を有効活用できない。
【0005】
また、ダンプファイルの大部分は、カーネルが参照していたメモリの内容で占められている。そのため、カーネルの高機能化に伴ってカーネルが参照するメモリの領域が大きくなると、ダンプファイルの生成に長時間を要してコンピュータの復旧に長時間を要してしまう。
【先行技術文献】
【特許文献】
【0006】
【文献】特開2001-290678号公報
【文献】特開平10-333944号公報
【文献】特開2008-242999号公報
【文献】特開2001-290677号公報
【文献】特開平8-95834号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
一側面によれば、情報処理装置をカーネルパニックから速やかに復旧させることを目的とする。
【課題を解決するための手段】
【0008】
一側面によれば、カーネルパニックを実行したカーネルを再起動するカーネル起動部と、前記カーネルパニックの実行時に前記カーネルが使用していたメモリの第1の領域の内容を取得して、前記内容を含むダンプファイルを生成する生成部と、前記メモリにおいて前記第1の領域とは異なる第2の領域に、前記カーネルとは異なるプログラムを割り当てて、再起動した前記カーネルの上で前記プログラムを起動するプログラム起動部と、を有し、前記生成部は、前記内容を取得した後に前記第1の領域を解放し、前記プログラム起動部は、前記プログラムを起動するのに前記第2の領域のサイズが足りない場合には、前記生成部が前記第1の領域を解放するのを待つ情報処理装置が提供される。
【発明の効果】
【0009】
一側面によれば、情報処理装置をカーネルパニックから速やかに復旧させることができる。
【図面の簡単な説明】
【0010】
図1図1は、カーネルパニックを実行したカーネルを再起動する処理を示す模式図である。
図2図2は、本実施形態に係る情報処理装置のハードウェア構成図である。
図3図3は、本実施形態に係るOSに含まれる各プログラムの模式図である。
図4図4は、本実施形態に係るメモリの模式図である。
図5図5は、本実施形態に係る情報処理装置の機能構成図である。
図6図6は、本実施形態においてOSを起動するときのフローチャートである。
図7図7は、カーネルがカーネルパニックを実行したときの本実施形態に係る情報処理方法のフローチャートである。
図8図8は、本実施形態に係る情報処理方法の模式図である。
図9図9は、本実施形態に係るダンプ情報の模式図である。
図10図10は、本実施形態に係るELFヘッダの模式図である。
図11図11は、本実施形態に係るファームウェアの処理のフローチャートである。
図12図12は、本実施形態においてチャンクを読み取り専用に設定するときの模式図である。
図13図13は、本実施形態においてカーネルが再起動した後の処理のフローチャートである。
図14図14は、本実施形態に係るダンプファイルの模式図である。
図15図15は、本実施形態に係る管理テーブルの模式図である。
【発明を実施するための形態】
【0011】
本実施形態の説明に先立ち、基礎となる事項について説明する。
【0012】
図1は、カーネルパニックを実行したカーネルを再起動する処理を示す模式図である。
【0013】
この例では、あるシステムが複数のコンピュータで実現されており、そのうちの一台においてカーネルパニックが実行された場合を想定する。
【0014】
この場合、まず、カーネルパニックを実行したカーネルがダンプ採取カーネルを起動させる(ステップP1)。
【0015】
次に、ダンプ採取カーネルが、CPUコアレジスタ情報とメモリ情報とを含むダンプファイルを生成する(ステップP2)。CPUコアレジスタ情報は、カーネルパニックを実行する直前にカーネルが参照していたレジスタの内容である。また、メモリ情報は、カーネルパニックを実行する直前にカーネルが参照していたメモリの領域の内容である。
【0016】
ダンプファイルの生成が終了するとファームウェアが起動し(ステップP3)、当該ファームウェアがカーネルを再起動する(ステップP4)。
【0017】
その後に、再起動したカーネルが、種々のサービスプログラムを起動する(P5)。そのようなサービスプログラムとしてはDHCP(Dynamic Host Configuration Protocol)のクライアントデーモンである「dhcpd」等がある。
【0018】
これらのサービスプログラムが起動するとコンピュータにおいて種々のアプリケーションプログラムを実行できるようになり、当該コンピュータを含むシステムを運用することができるようになる。
【0019】
しかしながら、この方法ではステップP2においてダンプファイルを生成するまでステップP4でカーネルを再起動することができず、システムの運用が再開できるまで時間を要してしまう。
【0020】
特に、カーネルの高機能化に伴って採取対象のメモリの領域が多くなると、ステップP2におけるダンプファイルの生成に長時間を要してしまい、システムの運用再開に更に長時間を要してしまう。
【0021】
(本実施形態)
図2は、本実施形態に係る情報処理装置のハードウェア構成図である。
【0022】
情報処理装置10は、物理マシンや仮想マシン等のコンピュータであって、記憶装置10a、メモリ10b、CPU10c、通信インターフェース10d、及び媒体読取装置10eを備える。これらの各部は、バス10gにより相互に接続される。
【0023】
このうち、記憶装置10aは、HDD(Hard Disk Drive)やSSD(Solid State Drive)等の不揮発性のストレージであって、本実施形態に係る情報処理プログラム11を記憶する。情報処理プログラム11は、ファームウェア12とOS13とを含むプログラムである。
【0024】
なお、情報処理プログラム11コンピュータが読み取り可能な記録媒体10fに記録し、媒体読取装置10eを介してCPU10cにその情報処理プログラム11を読み取らせるようにしてもよい。
【0025】
そのような記録媒体10fとしては、例えばCD-ROM (Compact Disc - Read Only Memory)、DVD (Digital Versatile Disc)、及びUSB (Universal Serial Bus)メモリ等の物理的な可搬型記録媒体がある。また、フラッシュメモリ等の半導体メモリやハードディスクドライブを記録媒体10fとして使用してもよい。これらの記録媒体10fは、物理的な形態を持たない搬送波のような一時的な媒体ではない。
【0026】
更に、公衆回線、インターネット、及びLAN(Local Area Network)等に接続された装置に情報処理プログラム11を記憶させてもよい。その場合は、CPU10cがその情報処理プログラム11を読み出して実行すればよい。
【0027】
一方、メモリ10bは、DRAM(Dynamic Random Access Memory)等のようにデータを一時的に記憶するハードウェアである。
【0028】
CPU10cは、情報処理装置10の各部を制御するプロセッサである。なお、CPU10cに代えてGPU(Graphical Processing Unit)を採用してもよい。また、CPU10cは、メモリ10bと協働して情報処理プログラム11を実行する。
【0029】
更に、通信インターフェース10dは、情報処理装置10をインターネットやLAN等のネットワークに接続するためのNIC(Network Interface Card)等のハードウェアである。
【0030】
媒体読取装置10eは、記録媒体10fを読み取るためのCDドライブ、DVDドライブ、及びUSBインターフェース等のハードウェアである。
【0031】
図3は、OS13に含まれる各プログラムの模式図である。OS13は、例えばLinux(登録商標)であって、カーネル15、ダンプ採取カーネル16、サービスプログラム17、及び管理プログラム18の各プログラムを備える。
【0032】
このうち、カーネル15は、プロセス管理機能、メモリ管理機能、及びデバイス管理機能等を備えたOS13の中核的なプログラムである。ダンプ採取カーネル16は、カーネル15がカーネルパニックを実行したときにダンプ情報の採取を行うプログラムである。
【0033】
また、サービスプログラム17は、カーネル15とは異なるプログラムであって、バックグラウンドで動作する「dhcpd」等のデーモンプログラムである。そして、管理プログラム18は、これらのサービスプログラム17を起動するための「systemd」等のプログラムである。
【0034】
図4は、メモリ10bの模式図である。図4に示すように、メモリ10bには、ファームウェア領域21、共通領域22、カーネル領域23、及びダンプ採取カーネル領域24の各領域が割り当てられる。
【0035】
このうち、ファームウェア領域21は、ファームウェア12に割り当てられた領域である。また、共通領域22は、第4の領域の一例であって、ファームウェア12とカーネル15の各々から書き込みと読み込みが可能な領域である。
【0036】
カーネル領域23は、カーネル15に割り当てられた領域である。そして、ダンプ採取カーネル領域24は、ダンプ採取カーネル16に割り当てられた領域である。
【0037】
図5は、情報処理装置10の機能構成図である。図5に示すように、情報処理装置10は、前述の記憶装置10aとメモリ10bの他に制御部31を備える。制御部31は、メモリ10bとCPU10cとが協働して情報処理プログラム11を実行することにより実現される処理部であって、情報処理装置10の各部を制御する。
【0038】
一例として、制御部31は、カーネル起動部32、生成部33、サービスプログラム起動部34、割当部35、格納部36、取得部37、メモリ管理部38、及び判断部39を備える。
【0039】
このうち、カーネル起動部32は、ファームウェア12によって実現される処理部であり、カーネルパニックを実行したカーネル15を再起動させる。
【0040】
生成部33は、ダンプ採取カーネル16によって実現される処理部であり、カーネル15がカーネルパニックを実行したときにダンプファイル40を生成してそれを記憶装置10aに格納する。
【0041】
サービスプログラム起動部34は、管理プログラム18によって実現される処理部であり、再起動したカーネル15の上で各サービスプログラム17を起動する。
【0042】
また、割当部35は、ファームウェア12によって実現される処理部であり、メモリ10bに共通領域22を割り当てる。
【0043】
格納部36は、ダンプ採取カーネル16によって実現される処理部であって、カーネルパニックを実行した時点におけるメモリ10bのチャンクのアドレスとサイズとを含むダンプ一次情報ファイルを共通領域22に格納する。なお、チャンクは、カーネルパニックを実行した時点でカーネル15が使用していたメモリ10bの領域である。例えば、カーネル15は、カーネルパニックを実行する前に、malloc等の関数によってメモリ10bに個々のチャンクを確保する。
【0044】
取得部37は、ファームウェア12によって実現される処理部であって、共通領域22に格納された後述のダンプ一次情報ファイルからチャンクのアドレスとサイズとを取得する。
【0045】
メモリ管理部38は、ファームウェア12によって実現される処理部であって、メモリ10bのチャンクを読み取り専用に設定する。
【0046】
判断部39は、ダンプ採取カーネル16によって実現される処理部であり、カーネルパニックを実行した後にカーネル15を再起動するのに要する空き領域がメモリ10bに存在するかを判定する。
【0047】
次に、本実施形態に係る情報処理方法について説明する。
【0048】
図6は、OS13を起動するときのフローチャートである。まず、割当部35が、メモリ10bに共通領域22を割り当てる(ステップS11)。
【0049】
次いで、ファームウェア12が、共通領域22の先頭アドレスをEFI(Extensible Firmware Interface)変数に格納する(ステップS12)。EFI変数は、ファームウェア12とダンプ採取カーネル16との間で受け渡しが行われる変数である。
【0050】
次に、カーネル起動部32がカーネル15を起動する(ステップS13)。この後は、サービスプログラム起動部34が各サービスプログラム17を起動し、OS13の起動が完了することになる。
【0051】
次に、このようにOS13を起動した後に、カーネル15がカーネルパニックを実行したときの処理の流れについて説明する。
【0052】
図7は、カーネル15がカーネルパニックを実行したときの本実施形態に係る情報処理方法のフローチャートである。
【0053】
まず、カーネルパニックを実行したカーネル15がダンプ採取カーネル16を起動する(ステップS21)。
【0054】
次に、ダンプ採取カーネル16が、ファームウェア12が保持しているEFI変数を参照することにより、共通領域22の先頭アドレスを取得する(ステップS22)。
【0055】
次のステップS23、S24について図8を参照して説明する。図8は、本実施形態に係る情報処理方法の模式図である。
【0056】
まず、ステップS23において、ダンプ採取カーネル16が、カーネルパニックを実行したカーネル15の仮想メモリ42にあるVMCORE43の内容を読み取る。VMCORE43は、ELF (Executable and Linkable Format) Core形式のファイルとして読み取り可能な疑似ファイルであり、ダンプ情報45を格納した疑似ファイルである。
【0057】
図9は、ダンプ情報45の模式図である。図9に示すように、ダンプ情報45は、ELFヘッダ45a、第1のヘッダ45b、及び第2のヘッダ45cを備えた情報である。
【0058】
このうち、ELFヘッダ45aは、CPU10cのアーキテクチャを特定する変数等を含む構造体である。また、第1のヘッダ45bは、CPU10cに含まれる複数のコアの各々のレジスタを指すポインタである。以下では、i番目のコアのレジスタに格納されている情報をcore[i]レジスタ情報と呼ぶ。
【0059】
そして、第2のヘッダ45cは、カーネルパニックを実行した時点でカーネル15が使用していたメモリ10b内のチャンクの先頭アドレスを指すポインタである。
【0060】
図10は、ELFヘッダ45aの模式図である。図10に示すように、ELFヘッダ45aは、プログラムヘッダテーブル45eの先頭アドレスを格納した変数「e_phoff」と、プログラムヘッダ45fの個数を示す変数「e_phnum」とを有する構造体である。
【0061】
プログラムヘッダテーブル45eは、変数「p_paddr」と変数「p_memsz」とを含む複数のプログラムヘッダ45fのテーブルである。このうち、変数「p_paddr」は、カーネルパニックを実行した時点でカーネル15に割り当てられていたチャンク10yの先頭アドレスを示す変数である。また、変数「p_memsz」は、そのチャンク10yのサイズ(byte)を示す変数である。なお、チャンク10yは第1の領域の一例である。
【0062】
ステップS23においては、ダンプ採取カーネル16が、各変数「p_paddr」、「p_memsz」を参照することにより、各チャンク10yの先頭アドレスとそのサイズとを取得する。更に、ダンプ採取カーネル16は、前述の第1のヘッダ45bと第2のヘッダ45cの各々も取得する。
【0063】
再び図8を参照する。次に、ステップS24に移り、格納部36が、ステップS23で取得した各情報を含むダンプ一次情報ファイル47を共通領域22に格納する。そのダンプ一次情報ファイル47には、第1のヘッダ45b、プログラムヘッダテーブル45e、及びELFヘッダ45aが含まれる。
【0064】
なお、図8に示すように、チャンク10yは仮想メモリ42におけるページに対応しており、仮想メモリ42の全領域は全てのチャンク10yを合わせた領域に等しい。そして、カーネル領域23においてチャンク10yに属さない領域は、カーネル15が使用していない空き領域10xである。
【0065】
再び図7を参照する。次に、判断部39が、カーネル15を再起動するのに必要な連続した空き領域10xがメモリ10bに存在するかを判断する(ステップS25)。
【0066】
図8の例では、複数の空き領域10xのうちで最大のサイズを有する領域が、カーネル15を再起動するのに足りるかを判断部39が判断する。一例として、判断部39は、共通領域22にあるダンプ一次情報ファイル47の各変数「p_paddr」、「p_memsz」に基づいて各チャンク10yの先頭アドレスと大きさとを特定し、どのチャンク10yにも属さない各空き領域10xの大きさを特定する。そして、判断部39は、特定した各空き領域10xのサイズのうちの最大値が、カーネル15を再起動するのに要するサイズよりも大きいかを判断する。なお、カーネル15を再起動するのに要するサイズは、例えばユーザが予め調べておき、記憶装置10aに格納しておけばよい。
【0067】
また、個々の空き領域10xは第2の領域の一例であり、そのうちで最大のサイズを有する空き領域10xは第3の領域の一例である。
【0068】
この判断が肯定された場合にはファームウェア12の処理に移る(ステップS26)。一方、ステップS25の判断が否定された場合には、各チャンク10yの内容を含むダンプファイル40を生成して各チャンク10yを解放した後でないとカーネル15を再起動できない。
【0069】
よって、ステップS25の判断が否定された場合には、ステップS27に移り、生成部33がダンプファイル40を生成した後にカーネル起動部32がカーネル15を再起動して処理を終える。
【0070】
これによれば、ステップS24において格納部36がダンプ一次情報ファイル47を共通領域22に格納する。そのため、ステップS25において、判断部39が、ダンプ一次情報ファイル47の各変数「p_paddr」、「p_memsz」に基づいて最大のサイズを有する空き領域10xを特定し、当該サイズがカーネル15を再起動するのに足りるかを判断できる。
【0071】
次に、ステップS26のファームウェア12の処理について説明する。
【0072】
図11は、ステップS26のファームウェア12の処理のフローチャートである。
【0073】
まず、メモリ管理部38が、全てのチャンク10yを読み取り専用に設定する(ステップS31)。
【0074】
図12は、本ステップの模式図である。この例では、メモリ管理部38は、共通領域22に格納されているダンプ一次情報ファイル47から各チャンク10yの先頭アドレスとサイズを特定する。そして、メモリ管理部38は、EFIのメモリマップにおいて当該チャンク10yに対応した属性に「EFI_MEMORY_RO」を設定することにより、当該チャンク10yを読み取り専用にする。
【0075】
これにより、ダンプファイル40を生成する前にチャンク10yが上書きされるのを防止することができるため、チャンク10yの内容を含むダンプファイル40を生成することができる。
【0076】
再び図11を参照する。次に、カーネル起動部32が、情報処理装置10の電源をオフせずに、パニックを実行したカーネル15を再起動させる(ステップS32)。以上により、ファームウェア12が実行する基本的な処理を終える。
【0077】
次に、ステップS32でカーネル15が再起動した後の処理について説明する。
【0078】
図13は、カーネル15が再起動した後の処理のフローチャートである。まず、再起動したカーネル15が、メモリ10bを管理する構造体に含まれるReversedビットのうち、各チャンク10yに対応したReversedビットをオンにする。Reversedビットは、チャンク10yを読み取り専用にするかを決めるビットであり、それをオンにすることによりチャンク10yが読み取り専用となる。
【0079】
この後は、ダンプ採取処理Q1とサービスプログラム17の起動処理Q2とが並行して行われる。
【0080】
最初にダンプ採取処理Q1について説明する。まず、再起動したカーネル15が、ダンプ採取カーネル16を起動させる(ステップS42)。
【0081】
次に、生成部33が、内容をまだ取得していないチャンク10yがメモリ10bに存在するかを判断する(ステップS43)。
【0082】
この判断が肯定された場合にはステップS44に移る。ステップS44においては、生成部33がチャンク10yの内容を取得する。一例として、生成部33は、共通領域22にあるダンプ一次情報ファイル47に含まれる各変数「p_paddr」、「p_memsz」からチャンク10yの先頭アドレスとそのサイズとを特定する。そして、生成部33は、メモリ10bにおいて特定した先頭アドレスにアクセスし、その先頭アドレスから特定したサイズにある領域に格納されている内容を取得する。
【0083】
次に、生成部33が、ステップS44で内容を取得したチャンク10yに対応したReversedビットをオフにする(ステップS45)。これにより、チャンク10yが解放されて書き込み可能となる。その後、ステップS43に戻る。
【0084】
一方、ステップS43の判断が否定された場合にはステップS46に移る。ステップS46においては、生成部33が、複数のチャンク10yの各々の内容とダンプ一次情報ファイル47に含まれる内容とを含むダンプファイル40を生成する。これによりダンプ採取処理Q1を終える。
【0085】
図14は、ステップS46で生成されるダンプファイル40の模式図である。
【0086】
図14に示すように、ダンプファイル40には、ダンプ一次情報ファイル47におけるELFヘッダ45a、第1のヘッダ45b、及び第2のヘッダ45cの他に、ステップS44で取得したチャンク10yの内容52が含まれる。
【0087】
更に、生成部33は、第1のヘッダ45bが指す各レジスタを参照することにより、これらのレジスタに格納されている情報であるCPUコアレジスタ情報51もダンプファイル40に格納する。
【0088】
再び図13を参照する。次に、サービスプログラム17の起動処理Q2について説明する。
【0089】
まず、カーネル15が管理プログラム18を起動した後、サービスプログラム起動部34が未起動のサービスプログラム17があるかを判定する(ステップS47)。Linux(登録商標)においてはカーネル15の起動後に起動すべきサービスプログラム17とその起動順序が定められており、これらのサービスプログラム17が起動済かを本ステップでサービスプログラム起動部34が判断することになる。
【0090】
この判断が肯定された場合にはステップS48に移る。ステップS48においては、サービスプログラム起動部34が、サービスプログラム17を起動するのに必要なサイズを備えた空き領域10xがメモリ10bに存在するかを判断する。
【0091】
図15は、ステップS48の判断においてサービスプログラム起動部34が使用する管理テーブル53の模式図である。
【0092】
管理テーブル53は、サービスプログラム17の起動順序、プログラム名、及び起動に要するメモリ量を対応付けたテーブルである。起動順序とプログラム名はLinux(登録商標)において予め定められているが、メモリ量については例えばユーザが予め調査しておく。そして、ユーザが管理テーブル53を作成し、例えば予め記憶装置10aに格納しておく。
【0093】
サービスプログラム起動部34は、この管理テーブル53を参照することにより、起動対象のサービスプログラム17のメモリ量よりもサイズが大きい空き領域10xが存在するかをステップS48で判断する。
【0094】
例えば、サービスプログラム起動部34は、共通領域22にあるダンプ一次情報ファイル47に含まれる各変数「p_paddr」、「p_memsz」からチャンク10yの先頭アドレスとそのサイズとを取得する。そして、サービスプログラム起動部34は、これらの先頭アドレスとサイズに基づいて複数のチャンク10yのいずれにも属さない領域である空き領域10xのサイズを特定し、そのサイズと管理テーブル53のメモリ量との大小を比較する。
【0095】
再び図13を参照する。ステップS48の判断が否定された場合にはステップS50に移る。ステップS50においては、サービスプログラム起動部34は、生成部33がステップS45においてチャンク10yを解放するのを待つ。その後、ステップS48に戻る。
【0096】
一方、ステップS48の判断が肯定された場合は、サービスプログラム起動部34がサービスプログラム17に空き領域10xを割り当てることにより当該サービスプログラム17を起動し(ステップS49)、ステップS47に戻る。
【0097】
そして、全てのサービスプログラム17が起動してステップS47の判断が否定された場合に起動処理Q2を終える。
【0098】
以上により、ダンプ採取処理Q1とサービスプログラムの起動処理Q2の各々の基本的な処理を終える。
【0099】
上記した本実施形態によれば、ステップS49において、サービスプログラム起動部34が、カーネル15が使用していたチャンク10yとは異なる空き領域10xにサービスプログラム17を割り当てて起動する。
【0100】
そのため、チャンク10yの内容を取得するダンプ採取処理Q1と、サービスプログラム17の起動処理Q2とを並行して行うことができる。これにより、ダンプ採取処理Q1が終了した後に起動処理Q2を実行する場合と比較して、カーネル15がカーネルパニックを実行してから全てのサービスプログラム17が起動するまでの時間を短くすることができる。その結果、カーネル15がカーネルパニックを実行した場合でも情報処理装置10を速やかに復旧することができ、情報処理装置10を含むシステムを利用者がすぐさま使用することが可能となる。
【0101】
また、この例では、チャンク10yが解放されるのをサービスプログラム起動部34がステップS50において待つ。そのため、チャンク10yが解放されたことで生じた空き領域10xをサービスプログラム起動部34がサービスプログラム17に割り当てることで、ステップS49において各サービスプログラム17を順次起動できる。
【0102】
また、カーネル15を再起動するのに要する連続した空き領域10xがメモリ10bにない場合には、ダンプ採取処理Q1と起動処理Q2とを並行して実行せず、ダンプファイル40の生成後にカーネル15を再起動する(ステップS27)。これにより、カーネル15を再起動するのに要する連続した空き領域10xがメモリ10bにあるか否かを問わずにダンプファイル40を生成することができる。
【符号の説明】
【0103】
10…情報処理装置、10a…記憶装置、10b…メモリ、10d…通信インターフェース、10e…媒体読取装置、10f…記録媒体、10g…バス、10x…空き領域、10y…チャンク、11…情報処理プログラム、12…ファームウェア、15…カーネル、16…ダンプ採取カーネル、17…サービスプログラム、18…管理プログラム、21…ファームウェア領域、22…共通領域、23…カーネル領域、24…ダンプ採取カーネル領域、31…制御部、32…カーネル起動部、33…生成部、34…サービスプログラム起動部、35…割当部、36…格納部、37…取得部、38…メモリ管理部、39…判断部、40…ダンプファイル、42…仮想メモリ、45…ダンプ情報、45a…ELFヘッダ、45b…第1のヘッダ、45c…第2のヘッダ、45e…プログラムヘッダテーブル、45f…プログラムヘッダ、47…ダンプ一次情報ファイル、51…CPUコアレジスタ情報、53…管理テーブル。

図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15