SIGSEGV

SIGSEGV
Popis Výjimka přístupu do paměti
Výchozí končí výpisem paměti
SA_SIGINFO kódy
SEGV_MAPERR Odkazující na nečinnou stránku
SEGV_ACCERR Porušení přístupu ke stránce

SIGSEGV  (z angličtiny  signal and segmentation failure ) - signál používaný v systémech POSIX , zasílaný do procesu pro chyby segmentace  - chyby stránky a jiné pokusy o přístup do neexistující oblasti paměti nebo narušení přístupu .

Definováno jako celočíselná konstanta v záhlaví souboru signal.h. Místo čísel se používají symbolické názvy signálů, protože čísla signálů se mohou v různých implementacích lišit.

Většina systémů používá techniku ​​stránkování , kdy je paměť mapována do adresového prostoru procesu na stránkách o velikosti 4 KB - 1 GB (v závislosti na hardwarové platformě a aktuálním režimu procesoru), podle potřeby - jak proces alokuje paměť. Stránky, na které ještě nebyly namapovány, stránky, které byly „přemístěny“ výměnou virtuální paměti nebo napojené na části mapovaného souboru, které ještě nebyly staženy) způsobují chybu stránky. Operační systém tím, že zpracuje narušení stránky pro „vymístěnou“ stránku paměti nebo nenačtenou část souboru, zajistí, že problematická stránka bude dostupná (například jejím načtením z úložiště), když se proces vrátí ke spuštění (a „ v případě potřeby vymazání" další stránky). Pokud se předtím na stránce adresního prostoru nic nezobrazilo, pak operační systém odešle do procesu signál SIGSEGV, aby zastavil jeho provádění.

Kromě toho má každá stránka adresního prostoru atributy, které umožňují procesu číst a zapisovat (a novější procesory také umožňují zabránit spuštění programu z paměti stránky, například, aby se zabránilo spuštění kódu při přetečení vyrovnávací paměti na zásobníku ) . Pokud se pokusíte zapsat, číst nebo spustit program na stránce, která to neumožňuje, dojde k narušení bezpečnosti a operační systém vyšle do procesu signál SIGSEGV, aby zastavil jeho provádění.

Operační systém může poskytnout další informace o chybě pomocí zásobníku signálů  , což může vývojáři pomoci chybu odladit.

Ve výchozím nastavení se proces zhroutí s výpisem paměti (nebo jinou operací specifickou pro platformu), kterou lze použít k získání informací o podmínkách, za kterých k výjimce došlo.

SIGSEGV může být zachycen nebo ignorován. Ignorování SIGSEGV však může v některých případech vést k nepředvídatelným výsledkům [1] .

Příkladem programu, který zachycuje SIGSEGV, je debugger , který je schopen analyzovat zásobník a informovat vývojáře, v jaké fázi k chybě došlo.

Poznámky

  1. 2.4.1 Generování a doručení signálu Archivováno 3. března 2009 na Wayback Machine // The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition