コンピューティングにおいて、コア ダンプ、[a] メモリ ダンプ、クラッシュ ダンプ、ストレージ ダンプ、システム ダンプ、またはABEND ダンプ[1]は、特定の時間、一般的にはプログラムがクラッシュしたり異常終了したりしたときのコンピュータ プログラムの作業メモリの記録された状態で構成されます。[2] 実際には、プログラム カウンタやスタック ポインタを含むプロセッサ レジスタ、メモリ管理情報、その他のプロセッサおよびオペレーティング システムのフラグと情報など、プログラム状態のその他の重要な部分も通常同時にダンプされます。スナップショット ダンプ(またはスナップ ダンプ) は、コンピュータ オペレータまたは実行中のプログラムによって要求されたメモリ ダンプであり、その後プログラムは続行できます。コア ダンプは、コンピュータ プログラムのエラーの 診断とデバッグを支援するためによく使用されます。
多くのオペレーティング システムでは、プログラム内の致命的な例外は自動的にコア ダンプをトリガーします。拡張により、「コアをダンプする」というフレーズは、多くの場合、プログラム メモリの記録が存在するかどうかに関係なく、あらゆる致命的なエラーを意味するようになりました。「コア ダンプ」、「メモリ ダンプ」、または単に「ダンプ」という用語は、さらなる調査やその他の目的のために大量の生データを出力することを示す専門用語にもなっています。[3] [4]
背景
この名前は、1950年代から1970年代にかけての ランダムアクセスメモリの主流であった磁気コアメモリ[5]に由来しています。この名前は、磁気コア技術が廃れてからも長く残っています。
最も初期のコアダンプは、 メモリの内容を紙にプリントアウトしたもの[6]で、通常は8進数または16進数の列に並べられ(「16進ダンプ」)、機械語命令、テキスト文字列、10進数または浮動小数点数(逆アセンブラを参照 )として解釈されたものが添付されることもありました。
メモリ サイズが大きくなり、事後分析ユーティリティが開発されるにつれて、ダンプはテープやディスクなどの磁気メディアに書き込まれるようになりました。
最新のオペレーティングシステムでは、該当するメモリの内容を表示するだけでなく、クラッシュしたプロセスに属するメモリのイメージ、またはそのプロセスに関連するアドレス空間の一部のメモリイメージ、およびプロセッサレジスタの値、プログラムカウンタ、システムフラグ、クラッシュの根本原因の特定に役立つその他の情報を含むファイルを生成するのが一般的です。これらのファイルは、テキストとして表示したり、印刷したり、UnixおよびUnix系システムのelfdump、Linuxのobjdumpとkdump 、IBM z/OSのIPCS(Interactive Problem Control System)、[7] IBM z/VMのDVF(Dump Viewing Facility)、[8] Microsoft WindowsのWinDbg 、 Valgrind、その他のデバッガなどの専用ツールで分析したりできます。
一部のオペレーティングシステム[b]では、アプリケーションまたはオペレーターは、アプリケーションまたはオペレーティングシステムによって使用されるすべてのストレージではなく、選択したストレージブロックのスナップショットを要求する場合があります。
用途
コア ダンプは、さまざまな状況でデバッグの補助として役立ちます。初期のスタンドアロン システムやバッチ処理システムでは、コア ダンプを使用すると、デバッグのために (非常に高価な) コンピューティング設備を独占することなく、プログラムをデバッグできました。また、フロント パネルのスイッチやライトを使用してデバッグするよりも、プリントアウトの方が便利な場合もありました。
共有コンピュータでは、タイムシェアリング、バッチ処理、サーバー システムのいずれの場合でも、コア ダンプを使用するとオペレーティング システムをオフラインでデバッグできるため、システムをすぐに稼働状態に戻すことができます。
コア ダンプを使用すると、クラッシュを保存して後で分析したり、オフサイトで分析したり、他のクラッシュと比較したりできます。組み込みコンピューターの場合、コンピューター自体でデバッグをサポートするのは現実的ではないため、ダンプの分析は別のコンピューターで行われることがあります。初期のバージョンのUnixなど、一部のオペレーティング システムでは、実行中のプロセスにデバッガーをアタッチすることがサポートされていなかったため、プロセスのメモリ内容に対してデバッガーを実行するにはコア ダンプが必要でした。
コア ダンプは、動的なメモリ割り当て中に解放されたデータをキャプチャするために使用でき、実行されなくなったプログラムから情報を取得するために使用できます。対話型デバッガーがない場合、熱心なプログラマーはコア ダンプを使用して、直接調査してエラーを判別できます。
スナップ ダンプは、アプリケーションが簡単なデバッグ出力を記録するのに便利な方法となる場合があります。
分析
コア ダンプは、通常、ダンプされたプロセスのアドレス空間のダンプされた領域の完全な内容を表します。オペレーティング システムによっては、ダンプにはメモリ領域の解釈に役立つデータ構造がほとんど含まれていないか、まったく含まれていない場合があります。これらのシステムでは、ダンプを解釈しようとするプログラムまたはユーザーが、プログラムのメモリ使用の構造を理解していることが、解釈を成功させる条件となります。
デバッガーは、シンボル テーブル(存在する場合) を使用して、プログラマーがダンプを解釈し、変数を記号的に識別してソース コードを表示できるようにします。シンボル テーブルが利用できない場合は、ダンプの解釈は限定されますが、それでも問題の原因を特定するには十分な可能性があります。ダンプを分析するためのダンプ アナライザーと呼ばれる専用ツールもあります。多くのオペレーティング システムで使用できる人気のツールの 1 つに、GNU binutils のobjdumpがあります。
最近のUnix 系オペレーティング システムでは、管理者やプログラマーは、GNU Binutilsバイナリ ファイル記述子ライブラリ(BFD)、およびこのライブラリを使用するGNU デバッガー(gdb) と objdump を使用して、コア ダンプ ファイルを読み取ることができます。このライブラリは、コア ダンプからメモリ領域内の特定のアドレスの生データを提供します。このライブラリは、そのメモリ領域内の変数やデータ構造については何も知らないため、ライブラリを使用してコア ダンプを読み取るアプリケーションは、たとえばデバッグ中のプログラムのシンボル テーブルを使用して、変数のアドレスを決定し、データ構造のレイアウトを自分で決定する必要があります。
Linuxシステムのクラッシュダンプを分析するには、kdumpまたはLinuxカーネルクラッシュダンプ(LKCD)を使用できます。[9]
コア ダンプは、特定の状態におけるプロセスのコンテキスト (状態) を保存し、後でその状態に戻ることができます。コア ダンプ ファイル自体を介してプロセッサ間でコアを転送することにより、システムの可用性を高めることができます。
コアはネットワーク経由でリモートホストにダンプされる可能性もあります(セキュリティ上のリスクがあります)。[10]
z/OSを実行している IBM メインフレームのユーザーは、対話型問題制御システム (IPCS) を使用して SVC およびトランザクション ダンプを参照できます。IPCS は、もともとOS/VS2 (MVS)で導入されたフル スクリーン ダンプ リーダーであり、 REXXでユーザーが作成したスクリプトをサポートし、ダンプのポイント アンド シュート参照[c]をサポートします。
コアダンプファイル
形式
より古くて単純なオペレーティング システムでは、各プロセスは連続したアドレス空間を持っていたため、ダンプ ファイルは、バイト、数字、[d]文字[d]または単語のシーケンスを含む単なるファイルである場合がありました。他の初期のマシンでは、ダンプ ファイルには個別のレコードが含まれており、各レコードにはストレージ アドレスと関連するコンテンツが含まれていました。初期のマシンでは、ダンプはアプリケーションやオペレーティング システムではなく、スタンドアロンのダンプ プログラムによって書き込まれることが多かったです。
IBM 7090用のIBSYSモニターには、ポストモーテムダンプとスナップダンプをサポートするシステムコアストレージダンププログラム[11]が含まれていました。
IBM System/360では、標準のオペレーティング システムがフォーマットされた ABEND ダンプと SNAP ダンプを書き込み、アドレス、レジスタ、ストレージの内容などをすべて印刷可能な形式に変換していました。その後のリリースでは、当時はコア イメージ ダンプ (SVC ダンプとも呼ばれる) と呼ばれていた、 フォーマットされていない[e]ダンプを書き込む機能が追加されました。
最近のオペレーティング システムでは、プロセス アドレス空間にギャップが含まれる場合があり、他のプロセスやファイルとページを共有する場合もあるため、より複雑な表現が使用されます。また、ダンプ時のプログラムの状態に関するその他の情報も含まれる場合があります。
Unix 系システムでは、コア ダンプは通常、標準の実行可能イメージ形式を使用します。
ネーミング
OS/360 および後継機種
- OS/360 および後継製品では、ジョブは、フォーマットされた ABEND ダンプの ddname および SNAP ダンプの任意の ddname に任意のデータ セット名 (DSN) を割り当てたり
SYSABEND、SYSUDUMPそれらの ddname を SYSOUT として定義したりすることができます。[f] - 損害評価および修復(DAR)機能により、障害発生時に、オペレータが要求したコンソール ダンプだけでなく、データセット[i]に自動の未フォーマット[h]ストレージ ダンプも追加されました。
SYS1.DUMP - 新しいトランザクション ダンプは、古い SVC ダンプと非常によく似ています。
- 対話型問題制御システム( IPCS)は、選択可能ユニット(SU)57 [13] [14]によってOS/VS2に追加され、その後のすべてのMVSリリースの一部であり、 DASD上のストレージダンプを対話的に分析するために使用できます。IPCSは、システム制御ブロックの形式と関係を理解し、分析用にフォーマットされた表示を生成できます。現在のバージョンのIPCSでは、最初にストレージダンプを取らなくても、アクティブなアドレス空間を検査できます[15] [j]。
Unixライク
- Solaris 8 以降では、システム ユーティリティを使用して
coreadm、コア ファイルの名前と場所を設定できます。 - ユーザープロセスのダンプは、伝統的に として作成されます。Linux( Linuxカーネルメインライン
coreのバージョン2.4.21および2.6以降)では、設定ファイルを使用してprocfs経由で別の名前を指定できます。指定された名前は、実行ファイル名、プロセスID、ダンプの理由などで置き換えられたタグを含むテンプレートにすることもできます。[16]/proc/sys/kernel/core_pattern - 最近の Unix 系システムでは、システム全体のダンプは
vmcoreまたはとして表示されることが多いですvmcore.incomplete。
その他
- ファイル名拡張子を使用するMicrosoft Windowsなどのシステムでは、拡張子 が使用される場合があります。たとえば、コア ダンプはまたは という名前になる場合があります。
.dmpmemory.dmp\Minidump\Mini051509-01.dmp
Windows メモリダンプ
Microsoft Windows は、以下に説明する 2 つのメモリ ダンプ形式をサポートしています。
カーネルモードダンプ
カーネルモードダンプには5つの種類があります。[17]
- 完全なメモリ ダンプ - ターゲット システムの完全な物理メモリが含まれます。
- カーネル メモリ ダンプ - クラッシュ時にカーネルが使用していたすべてのメモリが含まれます。
- 小さなメモリ ダンプ - 停止コード、パラメーター、ロードされたデバイス ドライバーのリストなど、さまざまな情報が含まれています。
- 自動メモリダンプ(Windows 8以降) – カーネルメモリダンプと同じですが、ページングファイルがシステム管理されており、カーネルメモリダンプをキャプチャするには小さすぎる場合は、ページングファイルを少なくとも4週間RAMのサイズまで自動的に拡大し、その後小さいサイズに縮小します。[18]
- アクティブ メモリ ダンプ (Windows 10 以降) - カーネルおよびユーザー モード アプリケーションによって使用されているメモリの大部分が含まれます。
Windowsカーネルモードダンプを分析するには、Windows用デバッグツールが使用されます。[19]
ユーザーモードのメモリダンプ
ユーザーモードメモリダンプはミニダンプとも呼ばれ、[20]単一プロセスのメモリダンプです。これには、完全または部分的な(フィルタリングされた)プロセスメモリ、スレッドのリストとそのコールスタックと状態(レジスタやTEBなど)、カーネルオブジェクトのハンドルに関する情報、ロードおよびアンロードされたライブラリのリストなど、選択されたデータレコードが含まれます。enumで使用可能なオプションの完全なリストMINIDUMP_TYPE。[21]
宇宙ミッション
NASAの ボイジャー計画は、おそらくディープ スペース セグメントでコア ダンプ機能を日常的に使用した最初の宇宙船です。コア ダンプ機能は、システム診断コストを最小限に抑えることが証明されているため、ディープ スペース セグメントでは必須のテレメトリ機能です。[要出典]ボイジャー宇宙船は、定期的なコア ダンプを使用して、宇宙線イベントによるメモリの損傷を検出します。
宇宙ミッションのコア ダンプ システムは、主に、ターゲット CPU またはサブシステムの既存のツールキットに基づいています。ただし、ミッションの期間中、コア ダンプ サブシステムは、ミッションの特定のニーズに合わせて大幅に変更または拡張されることがあります。
参照
参考文献
- ^ 「AIX 7.1 情報」。[永久リンク切れ]
- ^ : プロセス コア ファイル – Solaris 11.4ファイル形式リファレンスマニュアル
- ^ Cory Janssen (2012 年 10 月 25 日). 「What is a Database Dump? - Definition from Techopedia」. Techopedia.com . 2015 年 8 月 20 日時点のオリジナルよりアーカイブ。2015年6 月 29 日閲覧。
- ^ 「完全なメモリダンプをキャプチャするようにコンピュータを構成する方法」。sophos.com 2010年7月12日。2015年7月1日時点のオリジナルよりアーカイブ。2015年6月29日閲覧。
- ^ オックスフォード英語辞典、sv 'core'
- ^ 「ストレージダンプ定義」。2013年5月11日時点のオリジナルよりアーカイブ。2013年4月3日閲覧。
- ^ Rogers, Paul; Carey, David (2005 年 8 月)。z/OS 診断データの収集と分析(PDF)。IBM Corporation。pp. 77–93。ISBN 0738493996. 2018年12月21日時点のオリジナルよりアーカイブ(PDF) . 2021年1月29日閲覧。
- ^ IBM Corporation (2008 年 10 月). z/OS システム プログラマーのための z/VM および Linux の操作(PDF) p. 24 . 2022 年1 月 25 日閲覧。
- ^ Venkateswaran, Sreekrishnan (2008). 必須 Linux デバイス ドライバー。Prentice Hall オープン ソース ソフトウェア開発シリーズ。Prentice Hall。p. 623。ISBN 978-0-13-239655-4. 2014-06-26 にオリジナルからアーカイブされました。2010-07-15に取得。
kdump が登場するまでは、Linux カーネル クラッシュ ダンプ(LKCD) がダンプを取得して分析するための一般的なメカニズムでした。
- ^ Fedora ドキュメンテーション プロジェクト (2010)。Fedora 13 セキュリティ ガイド。Fultus Corporation。p. 63。ISBN 978-1-59682-214-6. 2014 年 6 月 26 日にオリジナルからアーカイブされました。2010 年 9 月 29 日に取得。
などのリモート メモリ ダンプ サービスは、
netdumpメモリの内容を暗号化せずにネットワーク経由で送信します。 - ^ 「システム コア ストレージ ダンプ プログラム」(PDF)。IBM 7090/7094 IBSYS オペレーティング システム - バージョン 13 - システム モニター (IBSYS) ( PDF)。システム リファレンス ライブラリ (第 8 版)。IBM。1966年 12 月 30 日。pp. 18–20。C28-6248-7。2024年5 月 10 日に閲覧。
- ^ 「ダンプ データ セットの名前パターンの設定」(PDF)。z/OS 2.5 MVS システム コマンド(PDF)。2022 年 3 月 25 日。pp. 474–475。SA38-0666-50 。2022年4 月 6 日に取得。
- ^ OS/VS2 MVS 対話式問題制御システム (IPCS) システム情報 - SUID 5752-857 (PDF) (初版)。IBM。1978年3 月。GC34-2004-0。2023年6 月 29 日閲覧。
- ^ OS/VS2 MVS 対話式問題管理システム ユーザーズ・ガイドおよび解説書 - SUID 5752-857 (PDF) (第 2 版)。IBM。1979年10 月。GC34-2006-1。2023年6 月 29 日閲覧。
- ^ 「SETDEF サブコマンド - デフォルトの設定」(PDF) . z/OS 2.5 - MVS 対話式問題制御システム (IPCS) コマンド(PDF) . IBM . 2023-05-12. p. 239. SA23-1382-50 . 2022 年4 月 6 日取得.
ACTIVE、MAIN、または STORAGE は、IPCS が現在実行されているアドレス スペースの中央ストレージを指定し、そのアクティブ ストレージにダンプ ソースとしてアクセスできるようにします。許可されていないプログラムによってアクセス可能な専用ストレージおよび共通ストレージにアクセスできます。
- ^ "core(5) – Linuxマニュアルページ". man7.org . 2015-12-05. 2013-09-20時点のオリジナルよりアーカイブ。2016-04-17に取得。
- ^ 「カーネルモード ダンプ ファイルの種類」。Microsoft。2018 年 2 月 22 日時点のオリジナルよりアーカイブ。2018 年2 月 22 日閲覧。
- ^ 「自動メモリ ダンプ」。Microsoft。2017 年 11 月 28 日。2018 年 3 月 17 日時点のオリジナルよりアーカイブ。2018 年3 月 16 日閲覧。
- ^ 「WinDbg (カーネルモード) を使い始める」。2016年3月14日時点のオリジナルよりアーカイブ。2014年9月30日閲覧。
- ^ 「Minidump Files」。2014年10月27日時点のオリジナルよりアーカイブ。 2014年9月30日閲覧。
- ^ 「MINIDUMP_TYPE 列挙」。2015年1月11日時点のオリジナルよりアーカイブ。 2014年9月30日閲覧。
注記
- ^ コアという用語は現代のハードウェアでは廃止されていますが、歴史的な理由から多くのシステムで使用されています。
- ^ 例: z/OS
- ^ つまり、アドレスを含むワードまたはダブルワードにカーソルを置き、そのアドレスのストレージの表示を要求することができます。
- ^ ab 古いマシンの中には10 進数だったものもありました。
- ^ レコードが印刷用にフォーマットされているのではなく、バイナリ形式であるという意味です。
- ^ SYStem OUTput ファイル (SYSOUT) は、SPOOLソフトウェアが所有する一時ファイルです。
- ^ 当初はバッチ ユーティリティ IMDPRDMP でしたが、現在は対話型問題制御システム (IPCS) 用のTSO コマンドおよびISPFパネル レパートリーです。
- ^ IBM は、フォーマットされていないダンプからデータを抽出してフォーマットするためのツールを提供しました。これらのツール[g]により、フォーマットされたダンプよりもフォーマットされていないダンプの方が扱いやすくなることがよくありました。
- ^ その後、IBMは最大100個のダンプデータセットに名前を付ける機能を追加しました
SYS1.DUMPnn(nnは00から99)。z /OSはインストールとオペレーター[12]の制御下で、任意のdsnameパターンを持つ複数のシステムダンプデータセットをサポートします。 - ^ 機能クラス BLSACTV.ADDRSPAC への読み取り権限があれば、IPCS は任意のアドレス空間を表示できます。
外部リンク
ファイル形式の説明
- – Linuxプログラマーズマニュアル– ファイル形式
- – Solaris 11.4ファイル形式リファレンスマニュアル
- – HP-UX 11iファイル形式マニュアル
- – FreeBSDファイルフォーマットマニュアル
- – OpenBSDファイル形式マニュアル
- – NetBSDファイルフォーマットマニュアル
- – DarwinとmacOSファイル形式マニュアル
- ミニダンプファイル
カーネルコアダンプ:
- – Solaris 11.4 リファレンスマニュアル
- Apple テクニカルノート TN2118: カーネル コア ダンプ
