ТЕЛЕ 2

Системные прерывания – что это? Описание, причины и методы устранения. «Системные прерывания» — что это, как отключить в Windows

Во всех компьютерах предусмотрен механизм, с помощью которого различные устройства (ввода-вывода, памяти) могут прервать нормальную работу процессора. Основные общепринятые классы прерываний перечислены в табл. 1.1.

Таблица 1.1. Классы прерываний

Прерывания в основном предназначены для повышения эффективности работы. Например, большинство устройств ввода-вывода работают намного медленнее, чем процессор. Предположим, что процессор передает данные на принтер по схеме, показанной рис. 1.2. После каждой операции процессор вынужден делать паузу и ждать, пока принтер не примет данные. Длительность этой паузы может быть в сотни и даже тысячи раз больше длительности цикла команды, в которой участвуют обращения к памяти. Ясно, что подобное использование процессора является неэффективным.

Такое положение дел проиллюстрировано на рис. 1.5,а. Программа пользователя содержит ряд вызовов процедуры записи WRITE, в промежутках между которыми расположены другие команды. В отрезках 1, 2 и 3 находятся последовательности команд кода, в которых не используется ввод-вывод. При вызове процедуры WRITE управление передается системной утилите ввода-вывода, которая выполняет соответствующие операции. Программа ввода-вывода состоит из трех частей.

Последовательность команд, обозначенных на рисунке цифрой 4, которые служат для подготовки к собственно операциям ввода-вывода. В эту последовательность могут входить копирование выводимых данных в специальный буфер и подготовка набора параметров, необходимых для управления устройством.

Собственно команды ввода-вывода. Если программа не использует прерываний, ей следует ждать, пока устройство ввода-вывода не выполнит требуемые операции (или периодически проверять его состояние путем опроса). При этом программе не остается ничего другого, как просто ждать, постоянно проверяя, завершилась ли операция ввода-вывода.

Последовательность команд, обозначенных на рисунке цифрой 5, которые служат для завершения операции. Эта последовательность может содержать в себе установку флагов, свидетельствующих об успешном или неудачном завершении операции.

Рис. 1.5. Ход выполнения программы без прерываний и с их использованием

Из-за того что для выполнения операции ввода-вывода может потребоваться сравнительно длительный промежуток времени, программа замедляет работу, ожидая завершения операции. Таким образом, там, где встречается вызов WRITE, производительность программы существенно уменьшается.

Прерывания и цикл команды

Благодаря прерываниям во время выполнения операций ввода-вывода процессор может быть занят обработкой других команд. Рассмотрим ход процесса, показанный на рис. 1.5,6. Как и в предыдущем случае (без использования прерываний), вызвав процедуру WRITE, программа обращается к системе. При этом активизируется программа ввода-вывода, которая состоит из подготовительного кода и собственно команд ввода-вывода. После исполнения этих команд управление передается программе пользователя. Тем временем внешнее устройство занято приемом данных из памяти компьютера и их обработкой (например, если этим устройством является принтер, то под обработкой подразумевается распечатка). Ввод-вывод происходит одновременно с выполнением команд программы пользователя.

В тот момент, когда внешнее устройство освобождается и готово для дальнейшей работы, т.е. оно готово принять от процессора новую порцию данных, контроллер ввода-вывода этого устройства посылает процессору сигнал запроса прерывания. В ответ процессор приостанавливает выполнение текущей программы, переключаясь на работу с программой, обслуживающей данное устройство ввода-вывода (эту программу называют обработчиком прерываний). Обслужив внешнее устройство, процессор снова возобновляет прерванную работу. На рис. 1.5,6 места программы, в которых происходит прерывание, обозначены крестиком.

С точки зрения программы пользователя, прерывания - это не что иное, как нарушение обычной последовательности исполнения. После завершения обработки прерывания работа возобновляется (рис. 1.6). Таким образом, программа пользователя не должна включать в себя какой-нибудь специальный код, чтобы приспосабливаться к прерываниям. За приостановку программы пользователя и возобновление ее работы с того самого места, в котором она была прервана, отвечают процессор и операционная система.


Рис. 1.6. Передача управления через прерывание

Чтобы согласовать прерывание с программой, в цикл команды добавляется цикл прерывания (см. рис. 1.7, сравните с рис. 1.2). В цикле прерывания процессор проверяет наличие сигналов прерываний, свидетельствующих о происшедших прерываниях. При поступлении прерывания процессор приостанавливает работу с текущей программой и выполняет обработчик прерываний .

Обработчики прерываний обычно входят в состав операционной системы. Как правило, эти программы определяют природу прерывания и выполняют необходимые действия. Например, в используемом примере обработчик должен определить, какой из контроллеров ввода-вывода сгенерировал прерывание; кроме того, он может передавать управление программе, которая должна вывести данные на устройство ввода-вывода. Когда обработчик прерываний завершает свою работу, процессор возобновляет выполнение программы пользователя с того места, где она была прервана.

Ясно, что этот процесс включает в себя некоторые непроизводительные затраты. Для определения природы прерывания и принятия решения о последующих действиях обработчик прерываний должен выполнить дополнительные команды. Тем не менее, ввиду того что для ожидания завершения операций ввода-вывода потребовался бы сравнительно большой отрезок времени, с помощью прерываний процессор можно использовать намного эффективнее.


Рис. 1.7. Цикл команды с прерываниями

Чтобы оценить выигрыш в эффективности, рассмотрим временную диаграмму (рис. 1.8), иллюстрирующую ход процессов, показанных на рис. 1.5,а и б. В ситуации, показанной на рис. 1.5,6 и 1.8, предполагается, что для выполнения операций ввода-вывода требуется сравнительно короткое время, т.е. меньшее, чем время обработки команд, которые расположены в программе пользователя между операциями записи. Более типичным, особенно для таких медленных устройств, как принтер, является случай, когда операции ввода-вывода занимают намного больше времени, чем требуется для выполнения последовательности команд пользователя. Такая ситуация показана на рис. 1.5,в. В этом случае программа пользователя дойдет до следующего вызова WRITE еще до завершения операции ввода-вывода, порожденной предыдущим вызовом. В результате в этом месте программа пользователя будет приостановлена. После завершения обработки предыдущей операции ввода-вывода придет очередь обработать новое обращение к процедуре WRITE, и будут запущены новые операции ввода-вывода. На рис. 1.9 представлена диаграмма выполнения программы в среде без прерываний и с прерываниями для описанного случая. Как видно, в такой ситуации выигрыш в эффективности все равно существует, так как часть времени, в течение которого выполняются операции ввода-вывода, перекрывается выполнением команд пользователя.


Рис. 1.8. Временная диаграмма программы: быстрый ввод-вывод

Обработка прерываний

Прерывание вызывает ряд событий, которые происходят как в аппаратном, так и в программном обеспечении. На рис. 1.10 показана типичная последовательность этих событий. После завершения работы устройства ввода-вывода происходит следующее.

Устройство посылает процессору сигнал прерывания.

  • Перед тем как ответить на прерывание, процессор должен завершить исполнение текущей команды (см. рис. 1.7).
  • Процессор производит проверку наличия прерывания, обнаруживает его и посылает устройству, приславшему это прерывание, уведомляющий сигнал об успешном приеме. Этот сигнал позволяет устройству снять свой сигнал прерывания.


а) без прерываний
Рис. 1.9. Временная диаграмма программы: медленный ввод-вывод

  • Теперь процессору нужно подготовиться к передаче управления обработчику прерываний. Сначала необходимо сохранить всю важную информацию, чтобы в дальнейшем можно было вернуться к тому месту текущей программы, где она была приостановлена. Минимальная требуемая информация - это слово состояния программы и адрес очередной выполняемой команды, который находится в программном счетчике. Эти данные заносятся в системный управляющий стек.


Рис. 1.10. Обработка простого прерывания

  • Далее в программный счетчик процессора загружается адрес входа программы обработки прерываний, которая отвечает за обработку данного прерывания. В зависимости от архитектуры компьютера и устройства операционной системы может существовать как одна программа для обработки всех прерываний, так может быть и своя программа обработки для каждого устройства и каждого типа прерываний. Если для обработки прерываний имеется несколько программ, то процессор должен определить, к какой из них следует обратиться. Эта информация может содержаться в первоначальном сигнале прерывания; в противном случае для получения необходимой информации процессор должен по очереди опросить все устройства, чтобы определить, какое из них отправило прерывание.

Как только в программный счетчик загружается новое значение, процессор переходит к следующему циклу команды, приступая к ее извлечению из памяти. Так как команда извлекается из ячейки, номер которой задается содержимым программного счетчика, управление переходит к программе обработки прерываний. Исполнение этой программы влечет за собой следующие операции.

  • Содержимое программного счетчика и слово состояния прерываемой программы уже хранятся в системном стеке. Однако это еще не вся информация, имеющая отношение к состоянию исполняемой программы. Например, нужно сохранить содержимое регистров процессора, так как эти регистры могут понадобиться обработчику прерываний. Поэтому необходимо сохранить всю информацию о состоянии программы. Обычно обработчик прерываний начинает свою работу с записи в стек содержимого всех регистров. Другая информация, которая должна быть сохранена, обсуждается в главе 3, "Описание процессов и управление ими". На рис. 1.11,а показан простой пример, в котором программа пользователя прерывается после выполнения команды из ячейки N. Содержимое всех регистров, а также адрес следующей команды (N+1), в сумме составляющие М слов, заносятся в стек. Указатель стека при этом обновляется, указывая на новую вершину стека. Обновляется и программный счетчик, указывая на начало программы обработки прерывания.
  • Теперь обработчик прерываний может начать свою работу. В процесс обработки прерывания входит проверка информации состояния, имеющая отношение к операциям ввода-вывода или другим событиям, вызвавшим прерывание. Сюда может также входить пересылка устройствам ввода-вывода дополнительных инструкций или уведомляющих сообщений.
  • После завершения обработки прерываний из стека извлекаются сохраненные ранее значения, которые вновь заносятся в регистры, возобновляя таким образом то состояние, в котором они пребывали до прерывания (см., например, рис. 1.11,6).
  • Последний этап - восстановление из стека слова состояния программы и содержимого программного счетчика. В результате следующей будет выполняться команда прерванной программы.

Из-за того, что прерывание не является подпрограммой, вызываемой из программы, для полного восстановления важно сохранить всю информацию состояния прерываемой программы. Однако прерывание может произойти в любой момент и в любом месте программы пользователя. Это событие непредсказуемо.

Множественные прерывания

До сих пор нами рассматривался случай возникновения одного прерывания. Представим себе ситуацию, когда может произойти несколько прерываний. Например, программа получает данные по коммуникационной линии и сразу же распечатывает результат. Принтер будет генерировать прерывание при каждом завершении операции печати, а контроллер коммуникационной линии - при каждом поступлении новой порции данных. Эта порция может состоять из одного символа или из целого блока, в зависимости от установленного порядка обслуживания. В любом случае возможна ситуация, когда коммуникационное прерывание произойдет во время обработки прерывания принтера.


Рис. 1.11. Изменение памяти и регистров при обработке прерывания

В такой ситуации возможны два подхода. Первый - это запретить новые прерывания до тех пор, пока обрабатывается предыдущее. Запрет прерываний означает, что процессор может и должен игнорировать любой новый сигнал прерывания. Если в это время происходит прерывание, оно обычно остается в состоянии ожидания, и до него дойдет очередь, когда процессору вновь будет можно обрабатывать прерывания. Таким образом, если во время работы программы пользователя происходит прерывание, на другие прерывания тут же накладывается запрет. После завершения работы программы обработки прерывания запрет снимается, и перед возвратом к исполнению прерванной программы процессор проверяет наличие других прерываний. Это удачный и простой подход, при котором прерывания обрабатываются в строго последовательном порядке (рис. 1.12,а).


б) Вложенная обработка прерываний
Рис. 1.12. Передача управления при множественных прерываниях

Однако недостатком такого подхода является то, что он не учитывает приоритет прерываний и те ситуации, в которых время является критическим параметром. Например, когда по коммуникационной линии приходит какая-то информация, может понадобиться быстро ее принять, чтобы освободить место для других входных данных. Если не обработать первый пакет входных данных перед получением второго пакета, данные могут потеряться вследствие загруженности и переполнения буфера устройства ввода-вывода.

При втором подходе учитывается приоритет прерывания, что позволяет приостановить обработку прерывания с более низким приоритетом в пользу прерывания с более высоким приоритетом (рис. 1.12,6). Как пример применения этого подхода рассмотрим систему с тремя устройствами ввода-вывода: принтером, диском и коммуникационной линией, которым присвоены приоритеты в возрастающей последовательности - 2, 4 и 5, соответственно. На рис. 1.13 показана очередность обработки прерываний, поступивших от этих устройств. Программа пользователя запускается в момент времени t = 0. В момент t = 10 происходит прерывание принтера. Информация о программе пользователя заносится в системный стек, и в действие вступает стандартная программа обслуживания прерывания (interrupt service routine - ISR). Во время ее работы в момент t = 15 происходит коммуникационное прерывание. Из-за того что его приоритет выше, чем приоритет прерывания принтера, процессор приступает к его обработке. ISR принтера прерывается, информация о ее состоянии заносится в стек, а управление передается коммуникационной ISR. Далее, пока эта программа выполняется, происходит прерывание диска (в момент времени t = 20). Так как его приоритет ниже, коммуникационная ISR продолжает свою работу, пока не закончит ее.


Рис. 1.13. Пример последовательности обработки множественных прерываний

После выполнения ISR коммуникационной линии (t = 25) восстанавливается предыдущее состояние процессора, т.е. работа с ISR принтера. Однако прежде чем успеет выполниться хоть одна команда этой программы, процессор приступает к обработке прерывания диска, которое обладает более высоким приоритетом, и управление передается ISR диска. Только после завершения этой программы (t = 35) возобновляет работу ISR принтера. И, наконец, после завершения обработки этого прерывания управление передается программе пользователя.

Рядовой пользователь обычно точно не может сказать, что представляют собой системные прерывания процессора, поскольку считается, что это что-то из области фантастики. Но вот когда в «Диспетчере задач» появляется одноименный процесс, нагружающий системные ресурсы, приходит время задуматься над тем, как устранить проблему. Но для начала немного о том, что это такое. Предлагается объяснение всех этих процессов и методов исправления ситуации максимально доступным языком для неподготовленного юзера.

Что такое системные прерывания?

Их можно трактовать не как какой-то определенный системный процесс, а как некий индикатор в виде своеобразной лакмусовой бумажки, который свидетельствует только о том, что какое-то «железное» устройство работает неправильно или не работает вообще.

Иными словами, системные прерывания в том же «Диспетчере задач» - процесс проверки компонентов компьютера. Обычно загрузка процессора для этого процесса (в нормальном состоянии компьютера) не превышает пяти процентов. Если же нагрузка повышается, можно считать это первым звоночком, свидетельствующим о том, что какое-то устройство вышло из строя (посыпался винчестер, не работают планки оперативной памяти и т. д.). Иногда системные прерывания Windows 10 или версий системы более ранних поколений связывают с устареванием, некорректной установкой или отсутствием драйверов устройств. Но это в большинстве случаев относится к повышению нагрузки на ресурсы косвенно.

Почему системные прерывания Windows 10 грузят процессор?

Теперь несколько слов о причинах повышения нагрузки. Говоря простым языком, можно отметить, что в Windows 10 системные прерывания процессор грузят только по той причине, что при выявлении функциональных сбоев в работоспособности какого-то компонента процессор берет на себя выполнение команд, адресованных сбойным устройствам, поскольку те их попросту игнорируют или пропускают.

Соответственно, если устройство не работает, ЦП и ОЗУ, что называется, тащат все это на собственном горбу. Однако избавиться от такой напасти можно. И не всегда целесообразно производить замену оборудования, хотя в большинстве случаев именно это является первопричиной повышенных нагрузок.

Первоначальные действия по проверке оборудования

Для того чтобы точно выяснить, с чем именно связаны сбои, рекомендуется использовать не системные инструменты Windows, а сторонние утилиты.

Однако сначала можно воспользоваться и этим инструментарием. В этой ситуации необходимо войти в «Диспетчер устройств» (devmgmt.msc в консоли «Выполнить») и отключить все устройства в списке за исключением компьютера, процессора и системных компонентов, после чего посмотреть на уровень загруженности ЦП (отключать эти три компонента нельзя ни при каких обстоятельствах, поскольку это может привести к аварийному завершению работы и проблемам при повторной загрузке системы). Далее нужно просто включать устройства по одному, выясняя, какое из них и влияет на степень загрузки.

Программа проверки прерываний

Отследить системные прерывания намного проще, если использовать небольшую портативную утилиту DPC Latency Checker (установки она не требует).

Для начала просто задайте старт сканирования. Результаты будут показаны в поле, расположенном внизу главного окна. Советы по устранению тут тоже есть, но они направляют в тот самый «Диспетчер устройств» для произведения диагностики там. Вот только если это связано с самим процессором или системными устройствами, для быстрого решения проблемы можно попытаться просто переустановить или обновить драйверы соответствующих компонентов.

Можно воспользоваться программами вроде Driver Booster, которые производят поиск и установку апдейтов в автоматическом режиме (от пользователя требуется только активация сканирования и согласие на установку обновлений).

Что может быть еще?

Иногда нагрузку прерываний связывают еще и с некоторыми дополнительными настройками системы. В частности, считается, что использование звуковых эффектов для старых или интегрированных саундкарт может вызывать чрезмерную нагрузку. Действительно, такое тоже может быть.

Поэтому в настройке звука Windows на вкладке улучшений отключите использование всех эффектов.

Наконец, некоторые специалисты увеличение нагрузки прерываний объясняют устаревшей прошивкой первичных систем ввода/вывода BIOS/UEFI. Выход - обновление прошивки. С UEFI сделать это достаточно просто, поскольку файл апдейта можно запустить непосредственно в среде операционной системы, после чего при перезагрузке обновление будет установлено. В BIOS эта процедура выглядит несколько более сложной. Если там есть настройки обновления, можно использовать и их, но в большинстве систем придется изначально скачивать нужный файл, а только потом запускать апдейт, причем именно из первичной, а не операционной системы. Процедура, надо сказать, достаточно хлопотная, и без специальных навыков такими вещами лучше не заниматься, а то ведь всю компьютерную систему можно попросту привести в полную негодность.

Заключение

Напоследок остается отметить, что в случае нарушения работы ОЗУ для диагностики можно использовать программу Memtest86+ или проверить вышедшие из строя планки путем их изымания из слотов на материнской плате. Как только сбойная планка будет обнаружена и система загрузится нормально, нагрузка на процессор в виде процесса прерываний моментально и существенно снизится.

А вообще каждый пользователь должен четко усвоить, что в случае возникновения такой ситуации проблема, скорее всего, в «железе», а не в драйверах. Хотя… мало ли что может случиться. И это были только основные причины возникновения сбоев и методы диагностики. Вполне вероятно, что для нестандартных компьютерных конфигураций, собранных вручную, потребуется загрузка и использование программ диагностики для каждого отдельно взятого устройства. Но скачивать такие приложения рекомендуется исключительно с сайтов производителей оборудования или соответствующих разработчиков в виде служб поддержки. В случае с ноутбуками можно воспользоваться стандартными средствами онлайн-диагностики, которые присутствуют на любом интернет-ресурсе уважающего себя производителя.

Управление приоритетами IRQ

Управление запросами на аппаратное прерывание

Большинству компонентов, непосредственно присоединенных к системной плате, включая PCI-слоты, IDE-контроллеры, последовательные порты, порт клавиатуры даже CMOS системной платы, присвоены отдельные IRQ. Запрос на аппаратное прерывание, или IRQ, прерывает нормальный ход работы процессора, позволяя устройству функционировать. Windows 7 позволяет расположить по приоритету один или более IRQ (которые преобразовываются в одно или более устройств), потенциально улучшая произво­дительность этих устройств.

Действия для изменения приоритета IRQ

  1. Начните с запуска утилиты информации о системе (msinfo32.exe) и откройте ветвь Сведения о системе Аппаратные ресурсы Прерывания (IRQ), чтобы про­смотреть, какие IRQ и для каких устройств используются.
  2. Затем откройте редактор реестра (см. главу 3) и перейдите к ветви HKEY_LOCAL_ MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl.
  3. Создайте новое значение DWORD в этом разделе и назовите параметр IRQ#Priority, где # - номер IRQ-устройства, для которого вы хотите задать приоритет (напри­мер, IRQ13Priority соответствует IRQ 13, то есть арифметическому сопроцес­сору).
  4. Дважды щелкните на новом значении и укажите номер приоритета. Введите 1 для высшего приоритета, 2 для второго и т. д. Удостоверьтесь, что не ввели одно и то же число для двух записей, и не пытайтесь сделать все сразу, лучше поэкспериментируйте с одним или двумя значениями.
  5. По окончании закройте редактор реестра и перезагрузите компьютер.
,

З ависшие или некорректно работающие приложения Windows нередко проявляют себя тем, что загружают процессор на 90 , а то и более процентов. Но есть такие процессы, которые не имеют исполняемого файла, но тем не менее, загружают процессор по полной, делая работу в Windows практические невозможной. Наглядным примером такого процесса являются системные прерывания, норма использования ресурсов ОЗУ для которого составляет примерно пять процентов.


Если процесс, являющийся следствием работы какого-нибудь исполняемого файла можно завершить или оптимизировать, то с системными прерываниями этого сделать нельзя по той простой причине, что он не зависит от работы конкретного приложения. Процесс «Системные прерывания» - это своеобразный индикатор, сигнализирующий о некорректной работе аппаратных компонентов компьютера, хотя и имеющий косвенную связь с запущенными приложениями.

Что такое системные прерывания

Постараемся дать этому процессу более подробное и понятное определение на конкретном примере. Представьте, что на вашем компьютере запущено некое приложение, предъявляющее к комплектующим железа определенные требования. Если устройство, будь то видеокарта, жесткий диск или оперативная память повреждены или для них в системе нет подходящих драйверов, центральный процессор предпринимает попытки компенсировать эти недостатки, выделяя для обработки проводимых устройством операций дополнительные ресурсы. Вот как раз об этом расходе ресурсов и сигнализирует процесс системные прерывания и чем серьезнее проблема, тем более высоким становится уровень загрузки.

Что делать, если системные прерывания грузят процессор

Так как практически во всех случаях проблема связана с неполадками в работе оборудования, начинать диагностику необходимо с драйверов. Для начала можно воспользоваться бесплатной утилитой . Эта небольшая утилита позволяет определить, есть ли в системе проблемы с драйверами устройств или нет. Предварительно завершив работу всех сторонних приложений, запустите утилиту (установки она не требует) и посмотрите на диаграмму. Если вы видите на ней высокие красные столбики, скорее всего, у вас имеются проблемы с работой драйверов устройств.

Не закрывая окошко , откройте и штатный Диспетчер устройств и начинайте последовательно отключать/включать устройства, раз за разом проверяя, не снизились ли показатели загрузки в окошке утилиты и не снизился ли процент загрузки процесса «Системные прерывания» в Диспетчере задач.

Если в момент отключения одного устройства показатели обеих инструментов (особенно Диспетчера задач) резко снизятся, скорее всего, проблема заключается именно в этом устройстве. Если оно не играет важной роли на ПК можете оставить его отключенным или попробуйте обновить его драйвер.

Внимание! Отключая компоненты «Компьютер» , «Процессор» и «Системные устройства» , будьте предельно осторожны, так как их отключение может привести к перезагрузке компьютера или аварийному завершению его работы. В идеале эти компоненты предпочтительнее вообще не трогать, если же вы считаете, что именно они являются причиной высокой активности процесса «Системные прерывания» , лучше ограничиться обновлением их драйверов. Старайтесь заодно избегать отключения контроллеров диска, дисплея, а также управляющих элементов (мыши и клавиатуры) .

Обычно этих действий бывает достаточно, чтобы устранить проблему чрезмерной активностью процесса «Системные прерывания» , однако нельзя исключать и другие причины, среди которых могут быть исчерпавший свои возможности аккумулятор, включенные в настройках звука аудиоэффекты и устаревшая версия BIOS .

www.thesycon.de/eng/latency_check.shtml

Если Вам нравятся статьи, заметки и другой интересный материал представленный на сайте Белые окошки и у вас есть непреодолимое желание поддержать этот скромный проект тогда выберите один из двух видов стратегии поддержки на специальной странице -