Составители:
Рубрика:
Глава 8. ОБРАБОТКА ИСКЛЮЧЕНИЙ В ОС WINDOWS
8.1. Исключения и прерывания в ОС Windows
По мере выполнения программы ее нормальная работа по различным
причинам может нарушаться. В частности, это может быть связано с тем, что
центральный процессор наталкивается на недопустимый адрес памяти, поль-
зователь прерывает выполнение программы комбинацией «горячих» клавиш
[Ctrl + C], отладчик произвольным образом останавливает программу и запус-
кает ее вновь. Ошибка может быть связана и с вводом неправильного значения
при выполнении операции с плавающей запятой. Эти и другие исключитель-
ные ситуации способны возникать как на пользовательском уровне, так и на
уровне ядра операционной системы, как в RISC-процессорах, так и в процес-
сорах Intel. О возникновении подобных ситуаций может сигнализировать и аппа-
ратное, и программное обеспечения. Любой язык программирования должен со-
держать средства обработки исключений для унификации процесса обработки,
выполняемой в различных ситуациях. Windows включает встроенные низко-
уровневые механизмы структурированной обработки исключений [2].
Исключения в значительной степени аналогичны прерываниям.
В первую очередь тем, что оба сигнала заставляют центральный процессор пере-
дать управление специальной части операционной системы. Однако исключения и
прерывания – это не одно и то же. Прерывания происходят асинхронно, часто в ре-
зультате определенных аппаратных событий (например, нажатия клавиш или по-
ступления данных через последовательный порт). Программа не имеет возможно-
сти контролировать такие прерывания, и они могут происходить в любой момент.
С другой стороны, исключения возникают синхронно как результат выполнения
определенных операторов программы. Исключения часто служат сигналом, свиде-
тельствующим о наличии ошибочных условий. Обычно они воспроизводятся пу-
тем повторного запуска программы с тем же контекстом.
Обладая способностью переключаться от одного потока выполнения
к другому, ядро операционной системы должно к тому же реагировать на пре-
рывания (interrupts) и исключения (exceptions). Речь идет о сигналах, которые
возникают в системе и заставляют процессор прерывать свою работу и пере-
ключаться на обработку возникшей ситуации. Когда ядро обнаруживает пре-
рывание или исключение, оно приостанавливает текущий поток выполнения и
передает управление другой части операционной системы, которая отвечает за
обработку ситуации, соответствующей поступившему сигналу. Перехватчик
(trap handler) представляет собой часть ядра, которая вызывается в ответ на
прерывания и исключения. Эта подпрограмма интерпретирует поступивший
сигнал и передает управление определенным процедурам, предназначенным
для обработки тех или иных ситуаций.
Исключения часто генерируются в том случае, если какая-то часть про-
105
Глава 8. ОБРАБОТКА ИСКЛЮЧЕНИЙ В ОС WINDOWS
8.1. Исключения и прерывания в ОС Windows
По мере выполнения программы ее нормальная работа по различным
причинам может нарушаться. В частности, это может быть связано с тем, что
центральный процессор наталкивается на недопустимый адрес памяти, поль-
зователь прерывает выполнение программы комбинацией «горячих» клавиш
[Ctrl + C], отладчик произвольным образом останавливает программу и запус-
кает ее вновь. Ошибка может быть связана и с вводом неправильного значения
при выполнении операции с плавающей запятой. Эти и другие исключитель-
ные ситуации способны возникать как на пользовательском уровне, так и на
уровне ядра операционной системы, как в RISC-процессорах, так и в процес-
сорах Intel. О возникновении подобных ситуаций может сигнализировать и аппа-
ратное, и программное обеспечения. Любой язык программирования должен со-
держать средства обработки исключений для унификации процесса обработки,
выполняемой в различных ситуациях. Windows включает встроенные низко-
уровневые механизмы структурированной обработки исключений [2].
Исключения в значительной степени аналогичны прерываниям.
В первую очередь тем, что оба сигнала заставляют центральный процессор пере-
дать управление специальной части операционной системы. Однако исключения и
прерывания – это не одно и то же. Прерывания происходят асинхронно, часто в ре-
зультате определенных аппаратных событий (например, нажатия клавиш или по-
ступления данных через последовательный порт). Программа не имеет возможно-
сти контролировать такие прерывания, и они могут происходить в любой момент.
С другой стороны, исключения возникают синхронно как результат выполнения
определенных операторов программы. Исключения часто служат сигналом, свиде-
тельствующим о наличии ошибочных условий. Обычно они воспроизводятся пу-
тем повторного запуска программы с тем же контекстом.
Обладая способностью переключаться от одного потока выполнения
к другому, ядро операционной системы должно к тому же реагировать на пре-
рывания (interrupts) и исключения (exceptions). Речь идет о сигналах, которые
возникают в системе и заставляют процессор прерывать свою работу и пере-
ключаться на обработку возникшей ситуации. Когда ядро обнаруживает пре-
рывание или исключение, оно приостанавливает текущий поток выполнения и
передает управление другой части операционной системы, которая отвечает за
обработку ситуации, соответствующей поступившему сигналу. Перехватчик
(trap handler) представляет собой часть ядра, которая вызывается в ответ на
прерывания и исключения. Эта подпрограмма интерпретирует поступивший
сигнал и передает управление определенным процедурам, предназначенным
для обработки тех или иных ситуаций.
Исключения часто генерируются в том случае, если какая-то часть про-
105
Страницы
- « первая
- ‹ предыдущая
- …
- 103
- 104
- 105
- 106
- 107
- …
- следующая ›
- последняя »
