A Общая ошибка защиты (GPF ) в x86 архитектуры набора команд (ISA) - это ошибка (тип прерывания ), инициированная определенными ISA механизмами защиты в ответ на нарушение доступа, вызванное каким-либо выполняющимся кодом, либо в ядре, либо в пользовательской программе. Механизм впервые описан в руководствах и технических данных Intel для ЦП Intel 80286, который был представлен в 1983 году; он также описан в разделе 9.8.13 справочного руководства программиста Intel 80386 от 1986 года. Общая ошибка защиты реализована как прерывание (вектор номер 13 (0Dh)). Некоторые операционные системы могут также классифицировать некоторые исключения, не связанные с нарушениями доступа, такие как недопустимые исключения opcode, как общие ошибки защиты, даже если они не имеют ничего общего с защитой памяти. Если ЦП обнаруживает нарушение защиты, он прекращает выполнение кода и отправляет прерывание GPF. В большинстве случаев операционная система удаляет отказавший процесс из очереди выполнения, сигнализирует пользователю и продолжает выполнение других процессов. Если, однако, операционная система не может уловить общий сбой защиты, то есть другое нарушение защиты происходит до того, как операционная система вернется из предыдущего прерывания GPF, ЦП сигнализирует двойной сбой, останавливая операционную систему. Если произойдет еще один сбой (тройной сбой ), ЦП не сможет восстановить; начиная с 80286, ЦП переходит в особое состояние остановки, называемое «Завершение работы», из которого можно выйти только с помощью аппаратного сброса. IBM PC AT, первая PC-совместимая система, содержащая 80286, имеет оборудование, которое определяет состояние выключения и автоматически сбрасывает CPU при его возникновении. Все потомки PC AT делают то же самое, поэтому в PC тройная ошибка вызывает немедленный сброс системы.
В Microsoft Windows общая ошибка защиты представлена различными язык, в зависимости от версии продукта:
Операционная система | Сообщение об ошибке | Примечания |
---|---|---|
Windows 3.0 | Неустранимая ошибка приложения (UAE) | |
Windows 3.1x | [Имя программы] вызвало общую ошибку защиты в модуле [имя модуля] в [адрес памяти]. | |
Windows 95. Windows 98. Windows NT 4.0 | Эта программа выполнила недопустимую операцию и будет закрыта. | |
Windows 2000 | [Название программы] вызвала ошибку и будет закрыта Windows. | |
Windows Me | [Имя программы] вызвала ошибку в [Имя модуля]. [Название программы] закроется. | |
Windows XP. Windows Server 2003. Windows Server 2003 R2 | [Название программы] столкнулся с проблемой и должен быть закрыт. Приносим свои извинения за неудобства. Если вы были в процессе чего-то, информация, над которой вы работали, могла быть потеряна. [...] Для получения дополнительных сведений об этой ошибке щелкните здесь. | В сообщении об ошибке также предлагается возможность отправить сведения об ошибке в Microsoft для анализа. |
Windows Vista и более поздние версии, за исключением Windows 10. Windows Server 2008 и более поздние версии | [Название программы] перестали работать. Проблема привела к тому, что программа перестала правильно работать. Windows закроет программу и сообщит вам, если решение доступно. | По умолчанию Windows отправляет сведения об ошибках в Microsoft для анализа, но систему можно настроить так, чтобы она либо не отправляла, либо спрашивала пользователя, что делать каждый раз. |
Windows 10 | Windows отправит сведения об ошибке в Microsoft для анализа. Пользователи с бизнес-лицензией могут настроить объем отправляемой информации. |
В Unix и Linux ошибки сообщаются отдельно (например, segmentation fault для ошибок памяти).
При ошибках памяти вызывающая сбой программа обращается к памяти, к которой она не должна обращаться. Примеры включают:
Однако многие современные операционные системы реализуют свои схемы управления доступом к памяти через подкачку вместо сегментация, поэтому часто бывает, что недопустимые ссылки на память в операционных системах, таких как Windows, сообщаются через ошибки страницы вместо общих ошибок защиты. Операционные системы обычно предоставляют уровень абстракции (такой как обработка исключений или сигналы), который скрывает любой внутренний механизм процессора, который использовался для вызова ошибки доступа к памяти из программы, с целью предоставления стандартного интерфейса для обработки множества различных типов генерируемых процессором условия ошибки.
С точки зрения архитектуры x86, общие сбои защиты относятся к защите на основе сегментации, когда дело касается доступа к памяти. Однако общие сбои защиты по-прежнему используются для сообщения о других нарушениях защиты (помимо нарушений доступа к памяти) при использовании подкачки, например, об использовании инструкций, недоступных с текущего уровня привилегий (CPL).
Хотя для операционной системы теоретически возможно использовать как разбиение на страницы, так и сегментацию, по большей части обычные операционные системы обычно полагаются на разбиение на страницы для большей части своих потребностей в управлении доступом к памяти.
На компьютере есть некоторые вещи, которые зарезервированы для исключительного использования операционной системы. Если программа, не являющаяся частью операционной системы, пытается использовать одну из этих функций, это может вызвать общий сбой защиты.
Кроме того, есть места хранения, которые зарезервированы как для операционной системы, так и для самого процессора. Вследствие их резервирования они доступны только для чтения, и попытка записать в них данные непривилегированной программой является ошибкой.
Сбои общей защиты вызываются процессором при обнаружении защищенной инструкции, превышающей уровень разрешений текущей выполняемой задачи, либо из-за попытки программы пользовательского режима защищенная инструкция, или потому что операционная система выдала запрос, который переводит процессор в неопределенное состояние.
Общие сбои защиты обнаруживаются и обрабатываются современными операционными системами. Обычно, если неисправность возникла в программе пользовательского режима, программа пользовательского режима завершается. Однако, если неисправность возникла в основном драйвере системы или в самой операционной системе, операционная система обычно сохраняет диагностическую информацию либо в файл, либо на экран и прекращает работу. Он либо перезагружает компьютер, либо отображает экран ошибки, например синий экран смерти или паника ядра.
ограничения сегмента может быть превышено:
Разрешения для сегментов могут быть нарушены:
Это может произойти, когда:
Неисправности могут возникать в структуре сегмента состояния задачи (TSS), когда:
Другие причины из общих ошибок защиты: