코어 덤프

Core dump

컴퓨팅에서 코어 [a]덤프, 메모리 덤프, 크래시 덤프, 스토리지 덤프, 시스템 덤프 또는 ABEND[1] 덤프는 일반적으로 프로그램이 크래시되거나 비정상적으로 [2]종료되었을 때 컴퓨터 프로그램작업 메모리의 기록된 상태로 구성됩니다.실제로는 프로그램카운터스택포인터, 메모리 관리 정보 및 기타 프로세서와 운영체제플래그와 정보를 포함할 수 있는 프로세서레지스터를 포함한 다른 주요 프로그램 상태가 동시에 덤프됩니다.스냅샷 덤프(또는 스냅 덤프)는 컴퓨터 오퍼레이터 또는 실행 중인 프로그램에 의해 요청된 메모리 덤프이며, 그 후 프로그램을 계속할 수 있습니다.코어 덤프는 컴퓨터 프로그램의 오류를 진단하고 디버깅하는 데 자주 사용됩니다.

많은 운영 체제에서 프로그램에서 치명적인 예외가 발생하면 코어 덤프가 자동으로 트리거됩니다.확장으로, "to dump core"라는 문구는 많은 경우에 프로그램 메모리의 레코드가 존재하는지 여부에 관계없이 치명적인 오류를 의미합니다."코어 덤프", "메모리 덤프" 또는 "덤프"라는 용어는 추가 검사 또는 기타 [3][4]목적으로 대량의 원시 데이터를 출력하는 것을 나타내는 전문 용어가 되었습니다.

배경

이 이름은 1950년대부터 1970년대까지 랜덤 액세스 메모리의 [5]주요 형태인 자기 코어 메모리에서 유래했습니다.이 이름은 마그네틱 코어 기술이 구식이 된 후에도 오래도록 남아 있다.

최초의 코어 덤프는 메모리 내용의 종이 인쇄로[6], 일반적으로 8진수 또는 16진수 열('16진수 덤프')로 배열되어 있으며, 때로는 기계어 명령어, 텍스트 문자열 또는 10진수 또는 부동소수점 숫자(disassembler 참조)로 해석되기도 합니다.

메모리 크기가 증가하고 사후 분석 유틸리티가 개발됨에 따라 테이프나 디스크와 같은 자기 미디어에 덤프가 기록되었습니다.

적용 가능한 메모리의 내용만을 표시하는 것이 아니라, 현대의 운영체제는 일반적으로 크래시된 프로세스에 속하는 메모리의 이미지 또는 그 프로세스에 관련된 주소 공간의 일부의 메모리 이미지를 포함한 파일을 프로세서 레지스터의 값, 프로그램 카운터 등의 다른 정보와 함께 생성합니다.시스템 플래그 및 기타 크래시의 근본 원인을 특정하는 데 도움이 되는 정보.이러한 파일은 Unix 및 Unix 유사 시스템의 elfdump, Linuxobjdumpkdump, IBM z/[7]OS의 IPCS(Interactive Problem Control System), IBM z/VM[8]DVF(Dump Viewing Facility), Windows의 Windows의 dbg와 같은 특수 도구를 사용하여 텍스트로 보거나 인쇄하거나 분석할 수 있습니다.

일부 운영[b] 체제에서는 애플리케이션 또는 운영 체제가 사용하는 모든 스토리지가 아닌 선택한 스토리지 블록의 스냅샷을 요구할 수 있습니다.

사용하다

코어 덤프는 여러 상황에서 유용한 디버깅에 도움이 될 수 있습니다.초기 스탠드아론 시스템 또는 배치 처리 시스템에서는 코어 덤프를 사용하여 사용자가 디버깅을 위해 (매우 비싼) 컴퓨팅 기능을 독점하지 않고 프로그램을 디버깅할 수 있었습니다., 프린트 아웃이 프론트 패널 스위치나 라이트를 사용한 디버깅보다 편리할 수도 있습니다.

공유 컴퓨터에서는 시분할, 배치 처리, 서버 시스템 중 어느 쪽이든 코어 덤프를 사용하여 운영 체제의 오프라인 디버깅을 수행할 수 있으므로 시스템이 즉시 다시 작동할 수 있습니다.

코어 덤프를 사용하면 크래시를 저장하여 나중에 분석하거나 다른 크래시와의 비교를 할 수 있습니다.임베디드 컴퓨터의 경우 컴퓨터 자체의 디버깅을 지원하는 것이 비현실적일 수 있으므로 덤프 분석은 다른 컴퓨터에서 수행될 수 있습니다.Unix의 초기 버전과 같은 일부 운영 체제에서는 실행 중인 프로세스에 디버거를 연결할 수 없었기 때문에 프로세스의 메모리 콘텐츠에서 디버거를 실행하기 위해 코어 덤프가 필요했습니다.

코어 덤프는 동적 메모리 할당 중에 해방된 데이터를 캡처하기 위해 사용할 수 있으며, 따라서 더 이상 실행되지 않는 프로그램에서 정보를 가져오는 데 사용할 수 있습니다.인터랙티브 디버거가 없는 경우 코어 덤프는 부지런한 프로그래머에 의해 직접 검사에서 오류를 판정하기 위해 사용될 수 있다.

스냅 덤프는 응용 프로그램에서 빠르고 더러운 디버깅 출력을 기록하는 편리한 방법입니다.

분석.

코어 덤프는 일반적으로 덤프된 프로세스의 주소 공간의 덤프된 영역의 전체 내용을 나타냅니다.operating system에 따라서는, 메모리 영역의 해석을 용이하게 하기 위한 데이터 구조가 거의 또는 전혀 포함되지 않는 경우가 있습니다.이러한 시스템에서 해석에 성공하려면 프로그램 또는 덤프를 해석하려는 사용자가 프로그램의 메모리 사용 구조를 이해해야 합니다.

디버거는 심볼 테이블이 존재하는 경우 프로그래머가 덤프를 해석하여 변수를 심볼로 식별하고 소스 코드를 표시할 수 있도록 도울 수 있습니다.심볼 테이블을 사용할 수 없는 경우 덤프를 해석할 수 있는 횟수는 줄어들지만 문제의 원인을 파악할 수 있는 충분한 시간이 있을 수 있습니다.덤프를 분석하기 위한 덤프 분석기라고 불리는 특수 목적 도구도 있습니다.많은 운영 체제에서 사용할 수 있는 인기 있는 도구 중 하나는 GNU binutils의 objdump입니다.

현대의 Unix와 같은 운영체제에서는 관리자와 프로그래머는 GNU Binutils Binary File Descriptor Library(BFD)와 이 라이브러리를 사용하는 GNU Debugger(gdb)와 objdump를 사용하여 코어 덤프 파일을 읽을 수 있습니다.이 라이브러리는 코어 덤프에서 메모리 영역의 특정 주소에 대한 원시 데이터를 제공합니다.이 라이브러리는 해당 메모리 영역의 변수 또는 데이터 구조에 대해 전혀 알지 못합니다.따라서 코어 덤프를 읽기 위해 라이브러리를 사용하는 애플리케이션은 검사를 위해 변수의 주소를 결정하고 데이터 구조 자체의 레이아웃을 결정해야 합니다.디버깅이 진행 중인 프로그램의 기호 테이블을 사용하여 ple을 클릭합니다.

Linux 시스템의 크래시 덤프 분석가는 kdump 또는 Linux Kernel Crash Dump(LKCD)[9]를 사용할 수 있습니다.

코어 덤프는 프로세스의 컨텍스트(상태)를 특정 상태로 저장하여 나중에 프로세스로 되돌릴 수 있습니다.프로세서 간에 코어를 전송함으로써, 경우에 따라서는 코어 덤프 파일 자체를 통해 시스템의 고가용성을 실현할 수 있습니다.

Core를 네트워크를 통해 리모트호스트에 덤프 할 수도 있습니다(이것은 보안상의 [10]리스크입니다).

코어 덤프 파일

포맷

더 오래되고 단순한 운영 체제에서는 각 프로세스가 연속된 주소 공간을 가지고 있었기 때문에 덤프 파일은 단순히 바이트,[c] 숫자[c], 문자 또는 단어의 시퀀스를 가진 파일일 수 있습니다.다른 초기 시스템의 덤프 파일에는 각각 스토리지 주소와 관련 내용이 포함된 개별 레코드가 포함되어 있었습니다.초기 머신에서는 덤프는 애플리케이션이나 운영체제가 아닌 독립형 덤프 프로그램으로 작성되는 경우가 많았습니다.

IBM System/360에서 표준 운영 체제는 주소, 레지스터, 스토리지 컨텐츠 등을 인쇄 가능한 형태로 변환하여 포맷된 ABEND 및 SNAP 덤프를 작성했습니다.이후 릴리스에서는 포맷되지[d] 않은 덤프를 쓰는 기능이 추가되어 당시 코어 이미지 덤프라고 불렸습니다.

최신 운영 체제에서는 프로세스 주소 공간에 공백이 있을 수 있으며 다른 프로세스 또는 파일과 페이지를 공유할 수 있으므로 보다 정교한 표현이 사용됩니다. 덤프 시점의 프로그램 상태에 대한 다른 정보도 포함될 수 있습니다.

Unix와 유사한 시스템에서 코어 덤프는 일반적으로 다음과 같은 표준 실행 이미지 형식을 사용합니다.

명명

OS/360 이후

  • OS/360 이후에서는 작업에 의해 ddnames에 임의의 데이터 세트명(DSN)이 할당될 수 있습니다.SYSABEND그리고.SYSUDUMP포맷된 ABEND 덤프의 경우 및 SNAP 덤프의 경우 임의의 ddnames로 지정하거나 이러한 ddnames를 [e]SYSOUT로 정의합니다.
  • DAR(Damage Assessment and Repair) 기능이 데이터 세트에 포맷되지[g] 않은 자동 덤프를 추가했습니다.SYS1.DUMP[h] 장애 발생 시 및 오퍼레이터가 요청한 콘솔 덤프.
  • 새로운 트랜잭션 덤프는 오래된 형식의 덤프와 매우 유사합니다.

Unix와 같은

  • Solaris 8 이후 시스템 유틸리티coreadm그럼, 코어 파일의 이름과 장소를 설정할 수 있습니다.
  • 사용자 프로세스의 덤프는 기존에는 다음과 같이 작성되었습니다.core. Linux 에서는 (Linux 커널 메인라인 버전 2.4.21 및 2.6 이후)를 사용하여 procfs를 통해 다른 이름을 지정할 수 있습니다./proc/sys/kernel/core_pattern컨피규레이션파일명을 지정합니다.예를 들어 실행 파일명, 프로세스 ID, [12]덤프 이유 등으로 치환된 태그를 포함하는 템플릿도 지정할 수 있습니다.
  • 최신 Unix 유사 시스템의 시스템 전체 덤프는 다음과 같이 나타납니다.vmcore또는vmcore.incomplete.

다른이들

  • 파일 이름 확장자를 사용하는 Microsoft Windows 등의 시스템에서는 확장자를 사용할 수 있습니다..dmp; 예를 들어 코어 덤프에는memory.dmp또는\Minidump\Mini051509-01.dmp.

Windows 메모리 덤프

Microsoft Windows 에서는, 다음의 2개의 메모리 덤프 형식이 서포트되고 있습니다.

커널 모드 덤프

커널 모드 [13]덤프에는 5가지 유형이 있습니다.

  • 완전한 메모리 덤프– 타깃 시스템의 풀 물리 메모리가 포함되어 있습니다.
  • 커널 메모리 덤프– 크래시 시 커널에서 사용 중인 모든 메모리가 포함됩니다.
  • 소형 메모리 덤프– 정지 코드, 파라미터, 로드된 디바이스 드라이버 목록 등 다양한 정보가 포함되어 있습니다.
  • 자동 메모리 덤프 (Windows 8 이후)– 커널 메모리 덤프와 동일하지만 페이징 파일이 시스템 관리 대상이며 커널 메모리 덤프를 캡처하기에는 너무 작을 경우 페이징 파일은 자동으로 RAM 크기로 4주 이상 증가하며 이후 더 작은 [14]크기로 감소합니다.
  • 액티브 메모리 덤프(Windows 10 이후)– 커널 및 사용자 모드 응용 프로그램에서 사용 중인 대부분의 메모리가 포함되어 있습니다.

윈도우즈 커널 모드 덤프를 분석하려면 윈도우즈용 디버깅 도구를 사용합니다.[15]

사용자 모드 메모리 덤프

사용자 모드 메모리 덤프는 미니 [16]덤프라고도 하며 단일 프로세스의 메모리 덤프입니다.여기에는 선택된 데이터 레코드(전체 또는 부분(필터링된) 프로세스 메모리, 콜스택상태를 포함한 스레드 목록(레지스터 또는 TEB ), 커널 객체에 대한 핸들에 대한 정보, 로드된 라이브러리와 언로드된 라이브러리 목록)이 포함됩니다.에서 사용할 수 있는 모든 옵션 목록MINIDUMP_TYPE열거.[17]

우주 임무

NASA 보이저 프로그램은 아마도 딥 스페이스 세그먼트에서 코어 덤프 기능을 일상적으로 이용한 최초의 우주선이었을 것이다.코어 덤프 기능은 시스템 진단 비용을[citation needed] 최소화하는 것으로 증명되었기 때문에 딥 스페이스 세그먼트의 필수 텔레메트리 기능입니다.보이저호는 우주광선 사건으로 인한 기억 손상을 발견하기 위해 일상적인 코어 덤프를 사용합니다.

Space Mission 코어 덤프 시스템은 대부분 타깃 CPU 또는 서브시스템의 기존 툴킷을 기반으로 합니다.단, 미션 기간 동안 코어 덤프 서브시스템은 미션의 특정 요구에 따라 대폭 변경 또는 강화될 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "AIX 7.1 information".[영구 데드링크]
  2. ^ core(4): 프로세스 코어 파일– Solaris 10 파일 형식 레퍼런스 매뉴얼
  3. ^ Cory Janssen. "What is a Database Dump? - Definition from Techopedia". Techopedia.com. Archived from the original on 20 August 2015. Retrieved 29 June 2015.
  4. ^ "How to configure a computer to capture a complete memory dump". sophos.com. 12 July 2010. Archived from the original on 1 July 2015. Retrieved 29 June 2015.
  5. ^ 옥스퍼드 영어사전, s.v. 'core'
  6. ^ "storage dump definition". Archived from the original on 2013-05-11. Retrieved 2013-04-03.
  7. ^ Rogers, Paul; Carey, David (August 2005). z/OS Diagnostic Data Collection and Analysis (PDF). IBM Corporation. pp. 77–93. ISBN 0738493996. Archived (PDF) from the original on December 21, 2018. Retrieved Jan 29, 2021.
  8. ^ IBM Corporation (October 2008). z/VM and Linux Operations for z/OS System Programmers (PDF). p. 24. Retrieved Jan 25, 2022.
  9. ^ Venkateswaran, Sreekrishnan (2008). Essential Linux device drivers. Prentice Hall open source software development series. Prentice Hall. p. 623. ISBN 978-0-13-239655-4. Archived from the original on 2014-06-26. Retrieved 2010-07-15. Until the advent of kdump, Linux Kernel Crash Dump (LKCD) was the popular mechanism to obtain and analyze dumps.
  10. ^ Fedora Documentation Project (2010). Fedora 13 Security Guide. Fultus Corporation. p. 63. ISBN 978-1-59682-214-6. Archived from the original on 2014-06-26. Retrieved 2010-09-29. Remote memory dump services, like netdump, transmit the contents of memory over the network unencrypted.
  11. ^ "Setting the name-pattern for dump data sets" (PDF). z/OS 2.5 MVS System Commands (PDF). March 25, 2022. pp. 474–475. SA38-0666-50. Retrieved April 6, 2022.
  12. ^ "core(5) – Linux manual page". man7.org. 2015-12-05. Archived from the original on 2013-09-20. Retrieved 2016-04-17.
  13. ^ "Varieties of Kernel-Mode Dump Files". Microsoft. Archived from the original on 22 February 2018. Retrieved 22 February 2018.
  14. ^ "Automatic Memory Dump". Microsoft. 28 November 2017. Archived from the original on 17 March 2018. Retrieved 16 March 2018.
  15. ^ "Getting Started with WinDbg (Kernel-Mode)". Archived from the original on 14 March 2016. Retrieved 30 September 2014.
  16. ^ "Minidump Files". Archived from the original on 27 October 2014. Retrieved 30 September 2014.
  17. ^ "MINIDUMP_TYPE enumeration". Archived from the original on 11 January 2015. Retrieved 30 September 2014.

메모들

  1. ^ core라는 용어는 현대의 하드웨어에서는 사용되지 않지만, 많은 시스템에서는 역사적 이유로 사용되고 있습니다.
  2. ^ 예: z/OS
  3. ^ a b 몇몇 오래된 기계들은 십진법이었다.
  4. ^ 인쇄용 포맷이 아닌 바이너리 형식의 레코드라는 의미입니다.
  5. ^ SYStem OUTput 파일(SYSOUT) 파일은 SPOL 소프트웨어가 소유한 임시 파일입니다.
  6. ^ 처음에는 배치 유틸리티 IMDPRDMP. 현재는 Interactive Problem Control System(IPCS; 대화식 문제 제어 시스템)의 TSO 명령 및 ISPF 패널레퍼토리를 사용하고 있습니다.
  7. ^ IBM은 포맷되지 않은 덤프에서 데이터를 추출하고 포맷하기 위한 도구를 제공했습니다. 이러한 도구는[f] 종종 포맷되지 않은 덤프를 작은 포맷된 덤프보다 쉽게 처리할 수 있도록 했습니다.
  8. ^ 그 이후로 IBM은 최대 100개의 덤프 데이터셋을 다음과 같이 지정할 수 있는 기능을 추가했습니다.SYS1.DUMPnn(n 00부터 99까지). z/OS는 설치 및[11] 운영자 제어 하에 임의의 dsname 패턴을 가진 여러 시스템 덤프 데이터 세트를 지원합니다.

외부 링크

파일 형식 설명

커널 코어 덤프: