Читайте также: |
|
Примечание: исключения, в отличие от прерываний, есть следствия выполнения какой-либо программы.
В Windows вводят понятие структурной обработки исключений, которая называется Structured Exception Handling (SEH). Его задача: передача управления приложению для того, чтобы обработать или исправить исключение. Это позволяет строить обработку исключений таким образом, что она не зависит от конкретного языка программирования, т.е. строить на основе системного механизма.
Все исключения, как и прерывания, имеют предопределенные номера прерываний, которым соответствуют записи в IDT. Записи в IDT ссылаются на обработчики ловушек конкретных исключений.
В таблице на слайде 32 представлены номера прерываний, соответствующий некоторым исключениям. Все исключения, так же как и прерывания, обслуживаются диспетчером исключений (Exception Dispatcher). Задача его – подключить обработчик, который может справиться с данным исключением, например, исправить неправильный доступ к памяти, деление на ноль и др.
Следует помнить, что ядро обрабатывает почти все исключения прозрачно, т.е. невидимо для пользовательского приложения. Если исключение невозможно устранить, приложению возвращается код возврата, свидетельствующий об ошибке. Например, команда ассемблера при возврате из процедуры ret имеет возможность указать код завершения, например ret 4. Это значит, что при возврате в вызываемый модуль в регистре eax, например, будет находится 4.
Определенные исключения могут передаваться пользовательским приложением на обработку. Для обработки этих исключений подсистема окружения может устанавливать обработчики исключений на основе SEH-фрейма. При его активизации, т.е. когда происходит исключение, начинает работать ядро, передается управление ловушке по обработке данного исключения. Ловушка создает фрейм (см. аналог прерывания). Созданный фрейм, отработав, позволяет вернуться в то место приложения, где было создано исключение. Если исключение было создано в режиме ядра, то выполняется подходящий для него имеющийся фрейм.
Диспетчеризация исключений представлена на слайде 3. Если исключение возникает в пользовательском режиме, диспетчер исключений предпринимает следующие действия: сначала анализируется, существует ли порт отладки (слайд 33) и порт исключений. Они нужны для приема и выдачи сообщений исключений на экран. Примером исключений являются точки трассировки при отладке какой-либо программы. Если исключение произошло при работе отладчика, это один тип обработки исключений. Если процесс не работает при отладке, т.е. отладчик не может отработать исключение, некому, то диспетчер исключений вызывает процедуру поиска соответствующего фрейма. Все это дает как бы два предупреждения об исключении. Если вдруг отладчик не запущен и фреймы подходящие не найдены, просто ядро посылает соответствующее сообщение.
Дата добавления: 2015-07-07; просмотров: 137 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Программные прерывания | | | Необработанные исключения |