Core dump

uložený obsah paměti při nečekaném pádu programu v Unixu

Core dump (výpis paměti) je v informatice záznam stavu pracovní paměti běžícího programu (tj. procesu) v daném čase, zpravidla při abnormálním ukončení programu. Je často používán k diagnostice nebo ladění chyb v počítačových programech. Na mnoha operačních systémech vyvolá fatální chyba v programu automatický zápis core do souboru.

Core dump (výpis paměti) dostal svoje jméno podle staré technologie paměti využívající drobná magnetická jádra.

Při vytvoření záznamu paměti jsou ve stejný okamžik uloženy do souboru různé klíčové údaje definující stav programu – registry procesoru, které mohou obsahovat programový čítač a ukazatele na vrchol zásobníku, informace o nastavení správy paměti a další informace o operačním systému a procesu (viz PCB).

Původ editovat

Název core dump pochází z původního označení základní feritové paměti v počítači, přičemž později se stal žargonem k označení jakéhokoli ukládání velkého množství neupravených dat.

Původně byl výpis paměti chápán jako papírový výtisk, který byl uspořádán ve sloupcích v osmičkovém nebo hexadecimálním tvaru. Doplňující sloupce mohly obsahovat odpovídající instrukce strojového kódu, odpovídající textové řetězce, decimální čísla nebo čísla s plovoucí desetinnou čárkou.

Ve starších dobách byl strojový čas počítače velmi drahý, takže na nich nebylo možné interaktivně pracovat, jako je to možné v současné době, kdy má každý svůj vlastní počítač (více viz Dějiny počítačů, 2. a 3. generace počítačů). Na sálových počítačích (mainframe) byly úlohy zpracovávány v dávkách a programátoři často pracovali na jednoúčelových strojích. Proto programátor dostal výpis na papíře, který mohl studovat bez potřeby pracovat přímo s drahým a obtížně dostupným počítačem.

V současné době je na novějších operačních systémech výpis paměti (core dump) označením pro soubor obsahující obraz paměti (nebo její části) konkrétního procesu společně s dalšími informacemi jako jsou hodnoty registrů procesoru a údaje o stavu procesu (tzv. PCB). Soubor lze zobrazit v čitelném textovém formátu podobném původnímu papírovému výtisku pomocí nástrojů jako je objdump, GDB atp.

Využití výpisu paměti editovat

Výpis paměti je typicky využíván jako podpora při ladění i v mnoha jiných situacích. Na počátku samostatného nebo dávkového zpracování umožňuje uživateli ladit program bez nutnosti vlastnit velmi drahé výpočetní zařízení pro ladění. Na sdílených počítačích (serverové systémy, časově sdílené apod.) umožňuje výpis paměti ladění v offline módu, takže takový systém může být okamžitě zpět v provozu. Výpis paměti umožňuje uživateli uložit havárii programu pro pozdější analýzu nebo porovnání s jinými pády. Pro vestavěné systémy může být nepraktické podporovat ladění, proto je možné využít výpis paměti při ladění na jiném počítači. Některé operační systémy (např. první verze Unixu) neumožňovaly spuštění debugeru na běžícím procesu, takže coru dump byly nezbytné k běhu debugeru na obsahu paměti procesu. Výpis paměti může být také využit pro uložení dat při uvolňování dynamicky alokované paměti a je tedy možné využít data z programu, který ukončil svojí činnost. Při absenci interaktivního debugeru může být výpis paměti využit k přímému zjištění chyby programátorem.

Core dump soubory editovat

Formát souboru s výpisem paměti editovat

Ve starších operačních systémech měl každý proces souvislý adresní prostor, takže soubor s výpisem paměti byl binární soubor se sekvencí bytů či slov o velikosti adresního prostoru. V moderních operačních systémech, nemusí být adresní prostor procesu souvislý a může mít neobsazené mezery nebo sdílet stránky s jinými procesy či soubory, a proto jsou používány propracovanější formáty souboru, které mohou zahrnovat i další informace o stavu programu v okamžiku vzniku souboru s výpisem paměti (jako např. formát ELF)

 
Hexdump favikony Wikipedie

V UN*X systémech, se pro výpis paměti používá standardní spustitelný formát:

Pojmenování editovat

  • Výpis paměti uživatelských procesů se uloží standardně jako "core".
  • V moderních Unix systémech se tyto výpisy často objevují jako "vmcore" nebo jako "vmcore.incomplete".
  • Systémy, zejména Microsoft Windows, které používají přípony souborů mohou pooužívat příponu např.".dmp", či "memory.dmp" nebo "\Minidump\Mini051509-01.dmp".

Výpis pamětí Windows editovat

Windows podporuje mnoho různých formátů paměťových výpisů:[1]

  • Kernel režim výpisů
    • Kompletní výpis paměti - obsahuje všechny dostupné fyzické paměti v cílovém systému
    • Výpis paměti jádra - obsahuje výpis všech pamětí, které používalo jádro v době svého pádu
    • Malý výpis paměti - obsahuje různé informace o např. kódu zastavení, parametrů, seznam ovladačů načtených zařízení atd.
  • Uživatelský režim výpisů
    • Plné uživatelské výpisy - zahrnuje výpis celého paměťového prostoru procesu
    • Mini výpis - obsahuje pouze vybrané části paměti, které jsou spojeny s procesorem

Vesmírné mise editovat

Program Voyager byl pravděpodobně první, který obsahoval družici využívající core dump. Výpis paměti je povinný pro telemetrické funkce, protože bylo prokázáno možné snížení nákladů za systémovou diagnostiku. Vesmírné plavidlo Voyager používal výpisy v paměti pro zjištění, které části paměti byly poškozeny kosmickým zářením. Vesmírné mise jsou založeny na využití existujících nástrojů pro konkrétní procesor, avšak během konání mise mohla být funkčnost výpisu paměti pozměněna dle aktuálních potřeb.

Hex dump editovat

Podrobnější informace naleznete v článku Hexadecimální výpis.

Hex dump nebo hexdump je zobrazení počítačových dat v šestnáctkové soustavě (hexadecimální). Každý bajt (8 bitů) je reprezentován jako dvoumístné hexadecimální číslo (0 - 9, A - F). Výpis může být uspořádán do řádků z osmi nebo šestnácti bajtů, jednotlivé bajty nebo jejich dvojice oddělené mezerami, na začátku řádku může být adresa paměti a na konci kontrolní součet a často další sloupec obsahuje odpovídající překlad v ASCII textu. Některý software může zobrazovat i v osmičkové nebo desítkové soustavě.

Příklad hexdumpu s ASCII překladem:

0000: FF D8 FF E0 00 10 4A 46-49 46 00 01 02 01 00 48  ......JFIF.....H
0010: 00 48 00 00 FF ED 0A 96-50 68 6F 74 6F 73 68 6F  .H......Photosho
0020: 70 20 33 2E 30 00 38 42-49 4D 04 04 07 43 61 70  p 3.0.8BIM...Cap

Databázový dump editovat

Databázový dump obsahuje záznam se strukturou databázové tabulky, může obsahovat samotná data většinou ve formě SQL příkazů. Nejčastěji se využívá pro zálohování databáze pro případ ztráty dat. Databázový dump většinou bývá uvolňován jako svobodný software se svobodným obsahem, což umožňuje jeho další větvení.

Příklad editovat

-- Vytvoření databáze s názvem `example`
CREATE DATABASE `example`;
USE `example`;

-- Struktura tabulky s názvem `users`
CREATE TABLE `users` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(16) NOT NULL,
  `password` varchar(16) NOT NULL,
  PRIMARY KEY (`id`)
);

-- Data tabulky `users`
INSERT INTO `users` VALUES (1,'alice','tajne_heslo'),(2,'bob','tajne_heslo');


Reference editovat

V tomto článku byl použit překlad textu z článku Core dump na anglické Wikipedii.

Související články editovat

Externí odkazy editovat

přípony souborů