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.
POSIX signály | |||
---|---|---|---|
| |||
|