C/signal.h/SIGBUS — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «В POSIX-системах, SIGBUS — сигнал, сигнализирующий об ошибке шины, при обращении к физической па…») |
Admin (обсуждение | вклад) |
||
Строка 8: | Строка 8: | ||
Процесс может получить SIGBUS при неправильном обращении к памяти: | Процесс может получить SIGBUS при неправильном обращении к памяти: | ||
− | Неправильное выравнивание данных | + | '''Неправильное выравнивание данных''' |
− | При попытке обращения не удовлетворяющей правилам выравнивания принятым на применяемом процессоре. | + | ; При попытке обращения не удовлетворяющей правилам выравнивания принятым на применяемом процессоре. |
− | Обращение к несуществующей физической памяти | + | '''Обращение к несуществующей физической памяти''' |
− | Обращение к адресам, для которых на компьютере не установлено памяти. Исключение аналогично ошибке сегментации, но в применении к физическим, а не виртуальным адресам. | + | ; Обращение к адресам, для которых на компьютере не установлено памяти. Исключение аналогично ошибке сегментации, но в применении к физическим, а не виртуальным адресам. |
− | Аппаратная ошибка специфичная объекту | + | '''Аппаратная ошибка специфичная объекту''' |
− | Более редкий случай, например в Solaris такой сигнал возникает, когда страницы виртуальной памяти перестают быть доступны, из-за проблем доступа к объекту, который на них отображён (например, когда отображённый с помощью mmap() файл был впоследствии урезан | + | ; Более редкий случай, например в Solaris такой сигнал возникает, когда страницы виртуальной памяти перестают быть доступны, из-за проблем доступа к объекту, который на них отображён (например, когда отображённый с помощью mmap() файл был впоследствии урезан (англ.)). |
Операционная система может предоставить дополнительные данные о возникшей ошибке, используя стек сигнала (англ. signal stack), который может помочь разработчику в отладке данной ошибки. | Операционная система может предоставить дополнительные данные о возникшей ошибке, используя стек сигнала (англ. signal stack), который может помочь разработчику в отладке данной ошибки. | ||
Версия 19:06, 21 июня 2010
В POSIX-системах, SIGBUS — сигнал, сигнализирующий об ошибке шины, при обращении к физической памяти.
SIGBUS — целочисленная константа, определённая в заголовочном файле signal.h. Символьные имена сигналов используются вместо номеров, так как в разных реализациях номера сигналов могут различаться.
SIG — общий префикс сигналов (от англ. signal), BUS — англ. bus — шина данных (или адресная шина).
Использование
Процесс может получить SIGBUS при неправильном обращении к памяти:
Неправильное выравнивание данных
- При попытке обращения не удовлетворяющей правилам выравнивания принятым на применяемом процессоре.
Обращение к несуществующей физической памяти
- Обращение к адресам, для которых на компьютере не установлено памяти. Исключение аналогично ошибке сегментации, но в применении к физическим, а не виртуальным адресам.
Аппаратная ошибка специфичная объекту
- Более редкий случай, например в Solaris такой сигнал возникает, когда страницы виртуальной памяти перестают быть доступны, из-за проблем доступа к объекту, который на них отображён (например, когда отображённый с помощью mmap() файл был впоследствии урезан (англ.)).
Операционная система может предоставить дополнительные данные о возникшей ошибке, используя стек сигнала (англ. signal stack), который может помочь разработчику в отладке данной ошибки.
По умолчанию, процесс аварийно завершается с генерацией дампа памяти (и/или другой операции зависящей от платформы), который можно использовать для получения информации об условиях возникновения исключения.
SIGBUS может быть перехвачен или проигнорирован. Однако игнорирование SIGBUS, в некоторых случаях, может привести к непредсказуемым результатам. Примером программы, перехватывающей SIGBUS, может служить отладчик, который способен проанализировать стек и информировать разработчика на каком этапе произошла ошибка.