Интернет магазин китайских планшетных компьютеров



Компьютеры - SIGSEGV

10 июня 2011





В POSIX-системах, сигнал, посылаемый процессу при попытке обращения к несуществующей памяти или обращения с нарушением прав доступа.

SIGSEGV — целочисленная константа, определённая в заголовочном файле signal.h. Символьные имена сигналов используются вместо номеров, так как в разных реализациях номера сигналов могут различаться.

Этимология

SIG — общий префикс сигналов, SEGV — англ. segmentation violation — нарушение сегментации.

На самом деле, современные Unix-подобные операционные системы используют для управления памятью технологию страничного преобразования, вызывающую «страничные нарушения» и «нарушения защиты». Сегментация же не используется, или используется в специфических трюках.

Использование

Система отображает память в адресное пространство процесса страницами размером 4—8 КБ, по мере необходимости — по мере выделения памяти процессом. Также, в адресное пространство могут быть отображены:

  • файлы — подгрузка соответствующих частей файла при обращении к области пространства, куда он отображён
  • разделяемая память — страницы памяти, одновременно отображаемые в несколько процессов
  • другие системные объекты

Страницы, в которые ещё ничего не отображено, вызывают страничное нарушение. Обрабатывая страничное нарушение для «вытесненной» страницы памяти или незагруженной части файла, операционная система обеспечивает наличие страницы, вызывавшей нарушение, при возврате к выполнению процесса. Если же в странице адресного пространства ранее ничего отображено не было, то операционная система посылает процессу сигнал SIGSEGV, чтобы прекратить его выполнение.

Кроме этого, каждая страница адресного пространства имеет атрибуты, разрешающие процессу чтение и запись. При попытке записи, чтения или выполнения программы в странице, в которой это запрещено, возникает нарушение защиты, обрабатывая которое, операционная система посылает процессу сигнал SIGSEGV, чтобы прекратить его выполнение.

Операционная система может предоставить дополнительные данные о возникшей ошибке, используя стек сигнала, который может помочь разработчику в отладке данной ошибки.

По умолчанию, процесс аварийно завершается с генерацией дампа памяти, который можно использовать для получения информации об условиях возникновения исключения.

SIGSEGV может быть перехвачен или проигнорирован. Однако игнорирование SIGSEGV, в некоторых случаях, может привести к непредсказуемым результатам .

Примером программы, перехватывающей SIGSEGV, может служить отладчик, который способен проанализировать стек и информировать разработчика, на каком этапе произошла ошибка.



Просмотров: 636


<<< SIGRTMIN и SIGRTMAX
SIGSTKFLT >>>