SIGSEGV

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

Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное


Смотреть что такое "SIGSEGV" в других словарях:

  • SIGSEGV — Infobox Computing signal description = Invalid memory reference action = Abnormal termination of the process SEGV MAPERR | Address not mapped to object SEGV ACCERR | Invalid permissions for mapped objectOn POSIX compliant platforms, SIGSEGV is… …   Wikipedia

  • SIGSEGV — Bei Computern tritt eine Schutzverletzung (v. engl. segmentation fault oder segmentation violation, kurz auch segfault) auf, wenn ein Computerprogramm auf eine Ressource (insbesondere auf Speicher) zuzugreifen versucht, die vor einem solchen… …   Deutsch Wikipedia

  • SIGSEGV — En informatique, SIGSEGV est un signal sur les systèmes de type UNIX, et Linux en particulier. Il signifie « signal de violation de segmentation » (Signal Segmentation Violation). C est un signal envoyé à un processus lorsque celui ci… …   Wikipédia en Français

  • SIGSEGV — Segmentation Violation Signal (Signal Nr. 11) unter X/Open UNIX erzeugt normalerweise ein Core Dump ( >xedit /usr/include/signal.h) …   Acronyms

  • SIGSEGV — Segmentation Violation Signal (Signal Nr. 11) unter X/Open UNIX erzeugt normalerweise ein Core Dump ( >xedit /usr/include/signal.h) …   Acronyms von A bis Z

  • Signal (computing) — A signal is a limited form of inter process communication used in Unix, Unix like, and other POSIX compliant operating systems. Essentially it is an asynchronous notification sent to a process in order to notify it of an event that occurred. When …   Wikipedia

  • signal.h — Стандартная библиотека языка программирования С assert.h complex.h ctype.h errno.h fenv.h float.h inttypes.h iso646.h limits.h locale.h math.h setjmp.h signal.h stdarg.h stdbool.h stddef.h …   Википедия

  • Segmentation fault — A segmentation fault (often shortened to segfault) is a particular error condition that can occur during the operation of computer software. A segmentation fault occurs when a program attempts to access a memory location that it is not allowed to …   Wikipedia

  • Ошибка сегментации — (англ. Segmentation fault или сокращённо segfault)  ошибка программного обеспечения, возникающая при попытке обращения к недоступным для записи участкам памяти либо при попытке изменения памяти запрещённым способом. В системах на основе …   Википедия

  • Cyclone (programming language) — Cyclone Appeared in 2006 (2006) Designed by AT T Labs Stable release 1.0 (May 8, 2006; 5 years ago (2006 05 08)) Influenced by …   Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»