6.4.1 Прерывания и особые ситуации
6.4.1 Прерывания и особые ситуации
Система отвечает за обработку всех прерываний, поступили ли они от аппаратуры (например, от таймера или от периферийных устройств), от программ (в связи с выполнением инструкций, вызывающих возникновение «программных прерываний») или явились результатом особых ситуаций (таких как обращение к отсутствующей странице). Если центральный процессор ведет обработку на более низком уровне по сравнению с уровнем поступившего прерывания, то перед выполнением следующей инструкции его работа прерывается, а уровень прерывания процессора повышается, чтобы другие прерывания с тем же (или более низким) уровнем не могли иметь места до тех пор, пока ядро не обработает текущее прерывание, благодаря чему обеспечивается сохранение целостности структур данных ядра. В процессе обработки прерывания ядро выполняет следующую последовательность действий:
1. Сохраняет текущий регистровый контекст выполняющегося процесса и создает в стеке (помещает в стек) новый контекстный уровень.
2. Устанавливает «источник» прерывания, идентифицируя тип прерывания (например, прерывание по таймеру или от диска) и номер устройства, вызвавшего прерывание (например, если прерывание вызвано дисковым запоминающим устройством). При возникновении прерывания система получает от машины число, которое использует в качестве смещения в таблице векторов прерывания. Содержимое векторов прерывания в разных машинах различно, но, как правило, в них хранится адрес программы обработки прерывания, соответствующей источнику прерывания, и указывается путь поиска параметра для программы. В качестве примера рассмотрим таблицу векторов прерывания, приведенную на Рисунке 6.9. Если источником прерывания явился терминал, ядро получает от аппаратуры номер прерывания, равный 2, и вызывает программу обработки прерываний от терминала, именуемую ttyintr.
Номер прерывания Программа обработки прерывания 0 clockintr 1 diskintr 2 ttyintr 3 devintr 4 softintr 5 otherintr
Рисунок 6.9. Пример векторов прерывания
3. Вызов программы обработки прерывания. Стек ядра для нового контекстного уровня, если рассуждать логически, должен отличаться от стека ядра предыдущего контекстного уровня. В некоторых разработках стек ядра текущего процесса используется для хранения элементов, соответствующих программам обработки прерываний, в других разработках эти элементы хранятся в глобальном стеке прерываний, благодаря чему обеспечивается возврат из программы без переключения контекста.
4. Программа завершает свою работу и возвращает управление ядру. Ядро исполняет набор машинных команд по сохранению регистрового контекста и стека ядра предыдущего контекстного уровня в том виде, который они имели в момент прерывания, после чего возобновляет выполнение восстановленного контекстного уровня. Программа обработки прерываний может повлиять на поведение процесса, поскольку она может внести изменения в глобальные структуры данных ядра и возобновить выполнение приостановленных процессов. Однако, обычно процесс продолжает выполняться так, как если бы прерывание никогда не происходило.
алгоритм inthand /* обработка прерываний */
входная информация: отсутствует
выходная информация: отсутствует
{
сохранить (поместить в стек) текущий контекстный уровень;
установить источник прерывания;
найти вектор прерывания;
вызвать программу обработки прерывания;
восстановить (извлечь из стека) предыдущий контекстный уровень;
}
Рисунок 6.10. Алгоритм обработки прерываний
На Рисунке 6.10 кратко изложено, каким образом ядро обрабатывает прерывания. С помощью использования в отдельных случаях последовательности машинных операций или микрокоманд на некоторых машинах достигается больший эффект по сравнению с тем, когда все операции выполняются программным обеспечением, однако имеются узкие места, связанные с числом сохраняемых контекстных уровней и скоростью выполнения машинных команд, реализующих сохранение контекста. По этой причине определенные операции, выполнения которых требует реализация системы UNIX, являются машинно-зависимыми.
На Рисунке 6.11 показан пример, в котором процесс запрашивает выполнение системной функции (см. следующий раздел) и получает прерывание от диска при ее выполнении. Запустив программу обработки прерывания от диска, система получает прерывание по таймеру и вызывает уже программу обработки прерывания по таймеру. Каждый раз, когда система получает прерывание (или вызывает системную функцию), она создает в стеке новый контекстный уровень и сохраняет регистровый контекст предыдущего уровня.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Особые варианты загрузки Windows
Особые варианты загрузки Windows Если после установки нового драйвера или программы произошел сбой в системе и Windows функционирует нестабильно или вовсе не запускается, следует попытаться запустить Windows с параметрами последней удачной конфигурации. Под последней удачной
6.4.1 Прерывания и особые ситуации
6.4.1 Прерывания и особые ситуации Система отвечает за обработку всех прерываний, поступили ли они от аппаратуры (например, от таймера или от периферийных устройств), от программ (в связи с выполнением инструкций, вызывающих возникновение «программных прерываний») или
5.6. Особые возможности рабочего стола
5.6. Особые возможности рабочего стола 5.6.1. Подключение двух мониторов в Fedora Возможно, у вас, как и у меня, завалялся еще один монитор и появилось желание подключить к компьютеру два монитора Fedora поддерживает работу с двумя мониторами, поэтому никаких сложностей быть не
Особые варианты загрузки Windows
Особые варианты загрузки Windows Иногда после установки нового драйвера или программы может произойти сбой в системе, и Windows начинает «глючить» (работать нестабильно) или вовсе не запускается. Вы перегружаете компьютер и видите на экране странное меню, в котором
R.15.2 Запуск особой ситуации
0
R.15.4 Обработка особой ситуации
R.15.4 Обработка особой ситуации Обработчик типа T, const T, T& или const& сопоставим с выражением-запуска, имеющим операнд типа E, если:[1] T и E являются одним типом;[2] T является доступным (§R.4.6) базовым классом E в точке запуска;[3] T является типом указателя, а E является таким типом
R.15.7 Особые ситуации и правила доступа
R.15.7 Особые ситуации и правила доступа Для формального параметра операции catch действуют такие же правила доступа, как и для формального параметра функции, в которой задана операция catch.При запуске особой ситуации можно указывать такой объект, который можно копировать и
1.1.10. Особые сообщения
1.1.10. Особые сообщения Отправка и обработка некоторых сообщений производится не по общим правилам, а с различными исключениями. Приведенный далее список таких сообщений не претендует на полноту, но все-таки может дать представление о таких исключениях.Сообщение WM_COPYDATA
Бизнес-ситуации
Бизнес-ситуации Многие книги, посвященные компьютерному обеспечению, состоят из длинных списков программных средств с кратким описанием особенностей их работы. Если вам повезет, вы найдете описание того, как данный продукт связан с реальным миром.Цель настоящей книги –
4.3. Особые комбинации клавиш при работе с GNOME
4.3. Особые комбинации клавиш при работе с GNOME В табл. 4.1 приведены некоторые полезные комбинации клавиш при работе с
7.16.3 Особые Операции
7.16.3 Особые Операции Вызов функции первичное_выражение ( список_выражений opt )и индексированиепервичное_выражение [ выражение ]считаются бинарными операциями. Именами определяющей функции являются соответсвенно operator() и operator[]. Обрщение x(arg) интерпретируется как x.operator()(arg)
46 Полезные ситуации
46 Полезные ситуации Сегодня чуть ли не каждый системный аналитик или разработчик программного обеспечения превращается в сценариста, словно в каждом из них спрятан талант голливудского кинодраматурга. Как только скучающие теоретики придумывают очередную статью, а
Ситуации отказа
Ситуации отказа Рассматривая список возможных исключений, полезно определить, когда может встретиться отказ (причина исключения у вызывающей программы):Определение: случаи отказаВызов программы приводит к отказу, если и только если встретилось исключение в процессе
Особо критические ситуации
Особо критические ситуации Один короткий сигнал при запуске компьютера свидетельствует о том, что каких-либо критических неисправностей не обнаружено. Но если сигналов несколько – значит, программа самодиагностики компьютера обнаружила критическую ошибку, не