Популярные статьи
Новости
|
11/5 Графический пользовательский интерфейс |
11/5 Графический адаптер |
|
11/5 Шрифты |
11/5 Растровые изображения |
| Точные и неточные прерывания |
|
Еще одна проблема вызвана тем, что на многих современных центральных процессорах широко используется конвейеризация и часто используется суперскалярность (внутреннее распараллеливание). В прежних системах после завершения выполнения каждой команды на микропрограммном или на аппаратном уровне велась проверка на наличие отложенного прерывания. Если такое прерывание было, то счетчик команд и слово состояния процессора (PSW) помешались в стек, и начиналась обработка прерывания. После обработки прерывания совершался обратный процесс, при котором прежнее слово состояния процессора и счетчик команд извлекались из стека и возобновлялась работа предыдущего процесса.
В этой модели делается явный расчет на то, что к моменту возникновения прерывания, которому предшествовало несколько команд, все команды, которые были до него, включая ту команду, которая выполнялась в момент его возникновения, были полностью выполнены, а после его возникновения уже не выполнялась ни одна команда. Для прежних машин такое предположение абсолютно соответствовало действительности, чего нельзя сказать об их современных собратьях. Прерывание, при обработке которого машина остается во вполне определенном состоянии, называется точным прерыванием (Уолкер (Walker) и Крэгон (Cragon), 1995). У такого прерывания имеются четыре свойства: 1. Счетчик команд сохранен в определенном месте. 2. Все команды, предшествующие той, на которую указывает счетчик команд, были полностью выполнены. 3. Ни одна из команд, следующих за той, на которую указывает счетчик команд, не была выполнена. 4. Известно состояние выполнения той команды, на которую указывает счетчик команд. Заметьте, что здесь не наложен запрет на запуск на выполнение тех команд, которые следуют за командой, на которую указывает счетчик команд. Должны быть лишь отменены все изменения, внесенные ими в регистры или в память еще до возникновения прерывания. Разрешается, чтобы команда, на которую указывает счетчик команд, уже была выполнена. Также разрешается, чтобы она еще не была выполнена. Но при этом должно быть понятно, какой именно случай имеет место. Зачастую, когда прерывание исходит от устройства ввода-вывода, бывает так, что эта команда еще и не запускалась на выполнение. Но если прерывание является системным или связанным с ошибкой из-за отсутствия страницы, то счетчик команд, как правило, указывает на ту команду, которая вызвала ошибку, и позже ее можно будет перезапустить. Некоторые компьютеры сконструированы таким образом, что одни типы обычных и системных прерываний являются точными, а другие нет. Например, неплохо будет иметь точные прерывания ввода-вывода и неточные системные прерывания, вызванные фатальными ошибками программирования, поскольку после попытки деления на нуль перезапускать работавший процесс не имеет смысла. У некоторых машин есть бит, который может быть установлен, чтобы заставить все прерывания быть точными. Недостатком такого устанавливаемого бита является то, что он вынуждает центральный процессор тщательно регистрировать все его действия и поддерживать теневые копии регистров, чтобы он мог вызывать точные прерывания в любой момент времени. Все эти издержки существенно влияют на производительность системы. Некоторые суперскалярные машины, например семейства Pentium, поддерживают точные прерывания для корректной работы старого программного обеспечения. Цена, которую они платят за точные прерывания, — это очень сложная логика прерываний, реализуемая внутри центрального процессора. Она гарантирует, что по прибытии сигнала прерывания от контроллера прерываний всем командам до определенной позиции разрешается завершить свою работу и ни одной команде после нее не разрешается оказывать какое-либо существенное воздействие на состояние машины. Эта цена выражается не в увеличении времени обработки прерывания, а в увеличении площади кристалла процессора и сложности его конструкции. Если бы для обеспечения обратной совместимости не нужны были точные прерывания, то на освободившейся площади можно было бы разместить более объемную встроенную кэш-память, подняв тем самым быстродействие центрального процессора. С другой стороны, неточные прерывания существенно усложняют операционную систему и замедляют ее работу, поэтому трудно сказать, какой из подходов действительно лучше.
|