SIGSEGV

SIGSEGV
Beskrivning Undantag för minnesåtkomst
Standard avsluta med en minnesdump
SA_SIGINFO- koder
SEGV_MAPERR Hänvisar till en ledig sida
SEGV_ACCERR Sidåtkomstöverträdelse

SIGSEGV  (från engelska  signal and segmentation violation ) - signalanvänds i POSIX - system, skickas till processen för segmenteringsfel  - sidfel och andra försök att komma åt ett icke-existerande minnesområde eller åtkomstöverträdelser .

Definierat som en heltalskonstant i rubrikfilen signal.h. De symboliska namnen på signalerna används istället för siffrorna, eftersom numren på signalerna kan skilja sig åt i olika implementeringar.

De flesta system använder personsökningstekniken , där minnet mappas till processens adressutrymme på 4 KB - 1 GB sidor (beroende på hårdvaruplattformen och aktuellt processorläge), efter behov - allt eftersom processen allokerar minne. Sidor som ännu inte har mappats till, de som har "förflyttats" genom virtuellt minnesbyte eller länkade till delar av en mappad fil som ännu inte har laddats ner) orsakar ett sidfel. Genom att hantera en sidöverträdelse för en "förskjuten" minnessida eller en urladdad del av en fil, säkerställer operativsystemet att den felande sidan är tillgänglig (till exempel genom att ladda den från lagringen) när processen återgår till exekvering (och " raderar" en annan sida om det behövs). Om inget tidigare har visats på adressutrymmessidan, skickar operativsystemet SIGSEGV-signalen till processen för att stoppa dess exekvering.

Dessutom har varje sida i adressutrymmet attribut som gör att processen kan läsa och skriva (och nyare processorer låter dig också förhindra programexekvering från sidminnet, till exempel för att förhindra att kod körs på ett buffertspillstacken ) . Om du försöker skriva, läsa eller köra ett program på en sida som inte tillåter det, inträffar en säkerhetsöverträdelse, som hanterar vilket operativsystemet skickar SIGSEGV-signalen till processen för att stoppa dess exekvering.

Operativsystemet kan ge ytterligare information om felet med hjälp av signalstacken  , vilket kan hjälpa utvecklaren att felsöka felet.

Som standard kraschar processen med en minnesdump (eller annan plattformsspecifik operation) som kan användas för att få information om de förhållanden under vilka undantaget inträffade.

SIGSEGV kan fångas upp eller ignoreras. Att ignorera SIGSEGV kan dock i vissa fall leda till oförutsägbara resultat [1] .

Ett exempel på ett program som fångar upp SIGSEGV är en debugger som kan analysera stacken och informera utvecklaren i vilket skede felet inträffade.

Anteckningar

  1. 2.4.1 Signalgenerering och -leverans Arkiverad 3 mars 2009 på Wayback Machine // The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition