- SIGSEGV
-
SIGSEGV Описание: Исключение при обращении в память По умолчанию: завершение с дампом памяти коды SA_SIGINFO SEGV_MAPERR
Обращение к незадействованной странице SEGV_ACCERR
Нарушение прав доступа к странице В POSIX-системах, SIGSEGV — сигнал, посылаемый процессу при попытке обращения к несуществующей памяти или обращения с нарушением прав доступа.
SIGSEGV — целочисленная константа, определённая в заголовочном файле
signal.h
. Символьные имена сигналов используются вместо номеров, так как в разных реализациях номера сигналов могут различаться.Этимология
SIG — общий префикс сигналов (от англ. signal), SEGV — англ. segmentation violation — нарушение сегментации.
На самом деле, современные Unix-подобные операционные системы (во всяком случае, на платформе i386) используют для управления памятью технологию страничного преобразования, вызывающую «страничные нарушения» и «нарушения защиты». Сегментация же (и порождаемые ею «нарушения сегментации») не используется, или используется в специфических трюках.
Использование
Система отображает память в адресное пространство процесса страницами размером 4—8 КБ (размер страницы зависит от аппаратной платформы, например в i386 это 4 КБ), по мере необходимости — по мере выделения памяти процессом. Также, в адресное пространство могут быть отображены:
- файлы — подгрузка соответствующих частей файла (во временных страницах памяти) при обращении к области пространства, куда он отображён
- разделяемая память — страницы памяти, одновременно отображаемые в несколько процессов
- другие системные объекты
Страницы, в которые ещё ничего не отображено (а также «вытесненные» в процессе свопинга виртуальной памяти, или связанные с ещё незагруженными частями отображённого файла), вызывают страничное нарушение. Обрабатывая страничное нарушение для «вытесненной» страницы памяти или незагруженной части файла, операционная система обеспечивает наличие страницы, вызывавшей нарушение (например, подгружая ее с диска), при возврате к выполнению процесса (и с «вытеснением» другой страницы, если это необходимо). Если же в странице адресного пространства ранее ничего отображено не было, то операционная система посылает процессу сигнал SIGSEGV, чтобы прекратить его выполнение.
Кроме этого, каждая страница адресного пространства имеет атрибуты, разрешающие процессу чтение и запись (а новые процессоры также позволяют запретить выполнение программы из памяти страницы, например, для предотвращения выполнения кода при переполнении буфера в стеке). При попытке записи, чтения или выполнения программы в странице, в которой это запрещено, возникает нарушение защиты, обрабатывая которое, операционная система посылает процессу сигнал SIGSEGV, чтобы прекратить его выполнение.
Операционная система может предоставить дополнительные данные о возникшей ошибке, используя стек сигнала (англ. signal stack), который может помочь разработчику в отладке данной ошибки.
По умолчанию, процесс аварийно завершается с генерацией дампа памяти (и/или другой операции зависящей от платформы), который можно использовать для получения информации об условиях возникновения исключения.
SIGSEGV может быть перехвачен или проигнорирован. Однако игнорирование SIGSEGV, в некоторых случаях, может привести к непредсказуемым результатам [1] (англ.).
Примером программы, перехватывающей SIGSEGV, может служить отладчик, который способен проанализировать стек и информировать разработчика, на каком этапе произошла ошибка.
См. также
Сигналы POSIX SIGABRT | SIGALRM | SIGFPE | SIGHUP | SIGILL | SIGINT | SIGKILL | SIGPIPE | SIGQUIT | SIGSEGV | SIGTERM | SIGUSR1 | SIGUSR2 | SIGCHLD | SIGCONT | SIGSTOP | SIGTSTP | SIGTTIN | SIGTTOU | SIGBUS | SIGPOLL | SIGPROF | SIGSYS | SIGTRAP | SIGURG | SIGVTALRM | SIGXCPU | SIGXFSZ | Сигналы реального времени (определяемые пользователем) — SIGRTMIN — SIGRTMAX.
Некоторые сигналы не включенные в POSIX и синонимы SIGIOT | SIGEMT | SIGSTKFLT | SIGIO | SIGCLD | SIGPWR (SIGINFO) | SIGLOST | SIGWINCH | SIGUNUSED Категория:- Сигналы POSIX
Wikimedia Foundation. 2010.