SIGSEGV

SIGSEGV
Leírás Memória hozzáférési kivétel
Alapértelmezett memóriakiíratással fejezzük be
SA_SIGINFO kódok
SEGV_MAPERR Tétlen oldalra hivatkozva
SEGV_ACCERR Oldalhozzáférés megsértése

SIGSEGV  (az angol  jel és szegmentálási megsértés szóból ) - POSIX rendszerekben használatos jelzés , szegmentálási hibák esetén elküldve a folyamatnak  - laphibák és egyéb kísérletek egy nem létező memóriaterület elérésére vagy hozzáférési megsértésekre .

A fejlécfájlban egész szám konstansként van megadva signal.h. A számok helyett a jelek szimbolikus neveit használjuk, mivel a jelek száma a különböző megvalósításokban eltérő lehet.

A legtöbb rendszer a lapozási technikát használja , amikor is a memória a folyamat címterébe kerül 4 KB - 1 GB-os oldalakon (a hardverplatformtól és az aktuális processzormódtól függően), szükség szerint - ahogy a folyamat lefoglalja a memóriát. Azok az oldalak, amelyekhez még nem lettek leképezve, amelyek „kiszorultak” a virtuális memória cseréje miatt, vagy amelyek egy leképezett fájl még nem letöltött részeihez kapcsolódnak) oldalhibát okoznak. Azáltal, hogy a memória "elhelyezett" lapja vagy egy fájl betöltetlen része esetén kezeli az oldalsértést, az operációs rendszer biztosítja, hogy a sértő oldal elérhető legyen (például betöltve azt a tárhelyről), amikor a folyamat visszatér a végrehajtáshoz (és " szükség esetén egy másik oldal törlése). Ha korábban semmi sem jelent meg a címtér oldalon, akkor az operációs rendszer SIGSEGV jelet küld a folyamatnak, hogy leállítsa a végrehajtását.

Ezenkívül a címtér minden oldala rendelkezik olyan attribútumokkal, amelyek lehetővé teszik a folyamat olvasását és írását (és az újabb processzorok azt is lehetővé teszik, hogy megakadályozzák a program végrehajtását az oldalmemóriából, például, hogy megakadályozzák a kód végrehajtását a verem puffertúlcsordulása esetén ) . Ha olyan oldalon próbál írni, olvasni vagy végrehajtani egy programot, amely ezt nem teszi lehetővé, akkor biztonsági megsértés történik, amelyet kezelve az operációs rendszer SIGSEGV jelet küld a folyamatnak, hogy leállítsa a végrehajtását.

Az operációs rendszer a jelverem  segítségével további információkat nyújthat a hibáról , ami segíthet a fejlesztőnek a hiba elhárításában .

Alapértelmezés szerint a folyamat memóriakiíratással (vagy más platformspecifikus művelettel) összeomlik, amely felhasználható a kivétel előfordulásának körülményeire vonatkozó információk megszerzésére.

A SIGSEGV elkapható vagy figyelmen kívül hagyható. A SIGSEGV figyelmen kívül hagyása azonban bizonyos esetekben előre nem látható eredményekhez vezethet [1] .

A SIGSEGV-t elfogó programra példa egy hibakereső , amely képes elemezni a veremet, és tájékoztatni a fejlesztőt arról, hogy a hiba melyik szakaszában történt.

Jegyzetek

  1. 2.4.1 Jelgenerálás és -továbbítás archiválva 2009. március 3-án a Wayback Machine -nél // The Open Group Base Specifications 6. kiadás IEEE Std 1003.1, 2004 Edition