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.
POSIX jelek | |||
---|---|---|---|
| |||
|