Obecná chyba ochrany - General protection fault

Chybová zpráva v bílém dialogovém okně s nápisem „NEODMĚNITELNÁ CHYBA APLIKACE: Ukončení aktuální aplikace“.
Obecná chybová zpráva pro obecnou chybu ochrany (Chyba neobnovitelné aplikace) v systému Windows 3.0
Chybová zpráva o obecné chybě ochrany v systému Windows 3.1x
Příklad chybové zprávy o obecné chybě ochrany v systému Windows 3.1x

Chybě obecné ochrany ( GPF ) v x86 instrukční sady architektury (ISA) je porucha (druh přerušení ) iniciuje ISA definovanými ochranných mechanismů v reakci na narušení přístupu způsobené nějakým systémem kódu, a to buď v jádře nebo A uživatelský program. Mechanismus je poprvé popsán v manuálech a listech Intel pro procesor Intel 80286 , který byl představen v roce 1983; je také popsán v oddíle 9.8.13 v referenční příručce programátora Intel 80386 z roku 1986. Obecná chyba ochrany je implementována jako přerušení ( číslo vektoru 13 (0Dh)). Některé operační systémy mohou také klasifikovat některé výjimky, které nesouvisejí s narušením přístupu, jako jsou výjimky z nelegálních operačních kódů , jako obecné chyby ochrany, přestože nemají nic společného s ochranou paměti. Pokud CPU detekuje narušení ochrany, zastaví provádění kódu a odešle přerušení GPF. Ve většině případů operační systém odebere selhávající proces z fronty spuštění, signalizuje uživateli a pokračuje ve provádění dalších procesů. Pokud se však operačnímu systému nepodaří zachytit obecnou chybu ochrany, tj. K jinému porušení ochrany dojde dříve, než se operační systém vrátí z předchozího přerušení GPF, CPU signalizuje dvojitou chybu a zastaví operační systém. Pokud dojde k další chybě ( trojitá chyba ), procesor se nemůže obnovit; od 80286 přejde CPU do zvláštního stavu zastavení zvaného „Shutdown“, který lze opustit pouze hardwarovým resetem . IBM PC AT , první PC kompatibilní systém obsahoval 80286, má hardware, který detekuje stav vypnutí a automaticky vynuluje CPU, když k ní dojde. Všichni potomci PC AT dělají totéž, takže v PC způsobí trojitá chyba okamžitý reset systému.

Specifické chování

V systému Microsoft Windows se obecná chyba ochrany projevuje různými jazyky v závislosti na verzi produktu:

Operační systém Chybové hlášení Poznámky
Windows 3.0 Neodstranitelná chyba aplikace (SAE)
Windows 3.1x [Název programu] způsobil obecnou poruchu ochrany v modulu [název modulu] na [adresa paměti].
Windows 95
Windows 98
Windows NT 4.0
Tento program provedl neplatnou operaci a bude ukončen.
Windows 2000 [Název programu] vygeneroval chyby a bude zavřen systémem Windows.
Windows Me [Název programu] způsobil chybu v [Název modulu]. [Název programu] se nyní zavře.
Windows XP
Windows Server 2003
Windows Server 2003 R2
[Program Name] zaznamenal problém a musí být ukončen. Omlouváme se za způsobené nepříjemnosti.

Pokud jste byli uprostřed něčeho, informace, na kterých jste pracovali, by se mohly ztratit.

[...]

Další informace o této chybě získáte kliknutím sem .

Chybová zpráva také nabízí možnost odeslat podrobnosti o chybě společnosti Microsoft k analýze.
Windows Vista a novější, kromě Windows 10
Windows Server 2008 a novějších
[Název programu] přestal fungovat.

Problém způsobil, že program přestal správně fungovat. Windows zavře program a upozorní vás, pokud je k dispozici řešení.

Ve výchozím nastavení systém Windows odešle podrobnosti o chybě společnosti Microsoft k analýze, ale systém lze nakonfigurovat tak, aby buď neodesílal, nebo se uživatele vždy zeptal, co má dělat.
Windows 10 Windows odešle podrobnosti o chybě společnosti Microsoft k analýze. Uživatelé s obchodní licencí mohou konfigurovat, kolik informací je odesíláno.

V Unixu a Linuxu jsou chyby hlášeny samostatně (např. Chyba segmentace u chyb paměti).

Chyby paměti

V případě chyb paměti přistupuje chybující program k paměti , ke které by neměl přistupovat. Mezi příklady patří:

  • Pokus o zápis do části paměti jen pro čtení
  • Pokus o spuštění bajtů v paměti, které nejsou označeny jako instrukce
  • Pokus o čtení jako datové bajty v paměti, které jsou označeny jako instrukce
  • Jiné různé konflikty mezi určením části paměti a jejím použitím

Mnoho moderních operačních systémů však implementuje svá schémata řízení přístupu k paměti prostřednictvím stránkování místo segmentace, takže se často stává, že odkazy na neplatné paměti v operačních systémech, jako je Windows, jsou hlášeny prostřednictvím chyb stránek namísto obecných chyb ochrany. Operační systémy obvykle poskytují vrstvu abstrakce (například zpracování výjimek nebo signály), která skrývá jakýkoli mechanismus vnitřního procesoru, který byl použit k vyvolání chyby přístupu k paměti z programu, za účelem poskytnutí standardního rozhraní pro zpracování mnoha různých typů procesorem generovaných chybové podmínky.

Pokud jde o architekturu x86, obecné chyby ochrany jsou specifické pro ochranu na základě segmentace, pokud jde o přístupy do paměti. Obecné chyby ochrany se však stále používají k hlášení jiných porušení ochrany (kromě narušení přístupu do paměti) při použití stránkování, jako je například použití pokynů, které nejsou přístupné z aktuální úrovně oprávnění (CPL).

I když je teoreticky možné, aby operační systém využíval stránkování i segmentaci, z větší části běžné operační systémy obvykle spoléhají na stránkování pro většinu svých potřeb řízení přístupu k paměti.

Chyby oprávnění

Na počítači jsou některé věci, které jsou vyhrazeny pro výhradní použití operačního systému . Pokud se program, který není součástí operačního systému, pokusí použít jednu z těchto funkcí, může to způsobit obecnou chybu ochrany.

Kromě toho existují úložiště, která jsou vyhrazena jak pro operační systém, tak pro samotný procesor. V důsledku jejich rezervace jsou pouze pro čtení a pokus o zápis dat do nich neprivilegovaným programem je chybou.

Technické příčiny poruch

Obecné chyby ochrany vyvolává procesor, když dojde k chráněné instrukci, která překračuje úroveň oprávnění aktuálně prováděného úkolu, buď proto, že se program v uživatelském režimu pokouší o chráněnou instrukci, nebo proto, že operační systém vydal požadavek, který by procesor do nedefinovaného stavu.

Obecné chyby ochrany jsou zachyceny a řešeny moderními operačními systémy. Obecně platí, že pokud chyba vznikla v programu v uživatelském režimu, program v uživatelském režimu je ukončen. Pokud však chyba pochází z ovladače hlavního systému nebo samotného operačního systému, operační systém obvykle uloží diagnostické informace buď do souboru nebo na obrazovku a přestane fungovat. Restartuje počítač nebo se zobrazí chybová obrazovka , například modrá obrazovka smrti nebo panika jádra .

Překročeny limity segmentů

Limity segmentů lze překročit:

Porušení oprávnění segmentu

Oprávnění k segmentům lze narušit:

  • přeskakování na nespustitelné segmenty
  • zápis do segmentů kódu nebo segmenty pouze pro čtení
  • čtení segmentů pouze pro spouštění

Nelegálně načtené segmenty

K tomu může dojít, když:

  • segment zásobníku (SS) je načten selektorem segmentu pouze pro čtení, spustitelný, nulový segment nebo segment s oprávněním deskriptoru, který neodpovídá aktuálnímu oprávnění v CS
  • segment kódu (CS) načtený selektorem segmentu pro datový, systémový nebo nulový segment
  • SS, DS, ES, FS nebo GS jsou segmenty nabité voličem segmentů pro systémový segment
  • SS, DS, ES, FS nebo GS jsou segmenty načtené selektorem segmentu pro segment spouštění pouze pro kód
  • přístup k paměti pomocí registrů DS, ES, FS nebo GS, pokud obsahují nulový volič

Přepínání

K poruchám může dojít ve struktuře segmentu stavu úloh (TSS), když:

  • přepnutí na obsazený úkol během hovoru nebo instrukce skoku
  • přepnutí na dostupný úkol během instrukce IRET (přerušení návratu)
  • pomocí voliče segmentů na přepínači směřujícím k deskriptoru TSS v LDT

Smíšený

Dalšími příčinami obecných poruch ochrany jsou:

  • pokus o přístup k obsluze přerušení/výjimky z virtuálního režimu 8086, když je úroveň oprávnění popisovače segmentu kódu obsluhy (DPL) vyšší než nula
  • pokus o zápis jedničky do vyhrazených bitů CR4
  • pokus o spuštění privilegovaných pokynů, když aktuální úroveň oprávnění (CPL) není nulová
  • zápis na vyhrazený bit v instrukci MSR
  • přístup k bráně obsahující nulový segmentový volič
  • provedení softwarového přerušení, když je CPL větší než DPL nastavený pro bránu přerušení
  • volič segmentů v bráně volání, přerušení nebo pasti neodkazuje na segment kódu
  • porušování pravidel oprávnění
  • povolení stránkování při deaktivaci ochrany
  • odkazování na tabulku deskriptoru přerušení po přerušení nebo výjimce, která není přerušením, pastí nebo bránou úkolu
  • Legacy SSE : Operand paměti není zarovnán na 16 bajtů.

Reference

Další čtení

  • Příručka vývojáře softwaru Intel Architecture Software - svazek 3: Programování systému