способ доставки прерываний в драйверы пользовательского режима
Классы МПК: | G06F13/24 с использованием прерывания |
Автор(ы): | ТАЛЛУРИ Мадхусудхан (US), СМИТ Фредерик Дж. IV (US), ХЭВЕНЗ Джефф Л. (US) |
Патентообладатель(и): | МАЙКРОСОФТ КОРПОРЕЙШН (US) |
Приоритеты: |
подача заявки:
2006-05-16 публикация патента:
27.04.2011 |
Изобретение относится к области драйверов компьютерных аппаратных устройств, в частности к системе и способу предоставления и обработки прерываний скорее в пользовательском режиме, чем в режиме ядра. Техническим результатом является обеспечение расширения прерываний драйверов устройств на совместное использование. Системы и способы для предоставления структуры, в которой драйверы устройств могут работать на уровне пользовательского режима. Общая функция платформы (например, APIC) или шины (шины PCI) используется для вывода ЦПУ из режима прерывания без необходимости ждать, чтобы драйвер пользовательского режима удалил прерывание устройства. Это предоставляет возможность, чтобы драйвер устройства полностью был написан в пространстве пользователя. Драйвер устройства все также получает уведомления о прерываниях, но уже не с приоритетом прерывания. 3 н. и 14 з.п. ф-лы, 5 ил.
![способ доставки прерываний в драйверы пользовательского режима, патент № 2417413](/images/patents/43/2417413/2417413.jpg)
![способ доставки прерываний в драйверы пользовательского режима, патент № 2417413](/images/patents/43/2417413/2417413-2.jpg)
![способ доставки прерываний в драйверы пользовательского режима, патент № 2417413](/images/patents/43/2417413/2417413-3.jpg)
![способ доставки прерываний в драйверы пользовательского режима, патент № 2417413](/images/patents/43/2417413/2417413-4.jpg)
![способ доставки прерываний в драйверы пользовательского режима, патент № 2417413](/images/patents/43/2417413/2417413-5.jpg)
Формула изобретения
1. Компьютерно-реализуемый способ независимой от устройства обработки прерываний, содержащий этапы, на которых:
регистрируют драйвер устройства в операционной системе, причем драйвер устройства работает в пользовательском режиме;
предоставляют независимую от устройства службу прерывания как службу ядра, причем этой независимой от устройства службой прерывания предоставляется интерфейс, который вызывается упомянутым драйвером, чтобы активировать прерывание;
маскируют прерывание независимым от устройства образом в процессоре;
принимают через упомянутый интерфейс от драйвера устройства вызов, приводящий к захвату независимой от устройства службой прерывания линии прерываний;
демаскируют прерывание;
получают прерывание;
активируют общую процедуру службы прерывания режима ядра по получении прерывания и вслед за активацией процедур службы прерывания для драйверов режима ядра, совместно использующих линию прерываний;
выполняют общую процедуру службы прерывания режима ядра, причем общая процедура службы прерывания режима ядра повторно маскирует прерывание на более низком уровне, чем уровень процессора, и планируют в пользовательском режиме вызов драйвера устройства для обработки прерывания;
обрабатывают прерывание посредством драйвера устройства; и
активируют линию прерываний для получения другого прерывания.
2. Способ по п.1, в котором упомянутое блокирование прерывания выполняют в усовершенствованном программируемом контроллере прерываний (APIC) или контроллере шины.
3. Способ по п.1, дополнительно содержащий этапы, на которых:
предоставляют механизм планирования для совместного использования прерывания;
вызывают все драйверы, совместно использующие прерывание; и
поддерживают упомянутое блокирование прерывания до тех пор, пока все драйверы не сделают возврат из упомянутой обработки прерывания.
4. Способ по п.3, дополнительно содержащий этап, на котором устанавливают счетчик равным количеству драйверов, совместно использующих прерывание.
5. Способ по п.4, дополнительно содержащий этап, на котором отрицательными приращениями уменьшают значение упомянутого счетчика до нуля до активации прерывания.
6. Способ по п.3, в котором второй драйвер предусмотрен на уровне режима ядра, и упомянутый способ выполняется как для драйверов пользовательского режима, так и для драйверов режима ядра.
7. Способ по п.1, в котором упомянутая служба ядра является общей службой, которая независима от устройства, обслуживаемого упомянутым драйвером, причем данный драйвер является драйвером пользовательского режима.
8. Компьютерно-реализуемый способ обработки драйверов устройств пользовательского режима, содержащий этапы, на которых:
регистрируют драйверы устройств пользовательского режима в операционной системе;
предоставляют независимую от устройства службу прерывания как службу ядра, причем эта независимая от устройства служба прерывания предоставляет интерфейс, который вызывается упомянутыми драйверами устройств пользовательского режима для активации прерывания;
маскируют прерывание в процессоре, до выполнения независимой от устройства службы прерывания;
принимают через упомянутый интерфейс от одного из упомянутых драйверов устройств пользовательского режима вызов, приводящий к захвату упомянутой службой прерывания линии прерываний;
демаскируют прерывание;
получают прерывание;
активируют общую процедуру службы прерывания режима ядра по получении прерывания и вслед за активацией процедур службы прерывания для драйверов режима ядра, совместно использующих линию прерываний;
выполняют общую процедуру службы прерывания режима ядра;
блокируют прерывание на более низком уровне, чем уровень процессора, чтобы предотвратить ситуацию, когда прерывание достигает процессора;
планируют в пользовательском режиме вызов упомянутого одного из драйверов устройств пользовательского режима для обработки прерывания;
обрабатывают прерывание посредством этого одного из драйверов устройств пользовательского режима; и
активируют линию прерываний для получения другого прерывания.
9. Способ по п.8, в котором упомянутое блокирование прерывания выполняют в APIC или контроллере шины.
10. Способ по п.8, дополнительно содержащий этапы, на которых:
предоставляют механизм планирования для совместно используемых прерываний;
вызывают все драйверы устройств пользовательского режима, ассоциированные с упомянутыми совместно используемыми прерываниями; и
поддерживают упомянутое блокирование упомянутого прерывания до тех пор, пока все драйверы устройств пользовательского режима не сделают возврат из упомянутой обработки прерываний.
11. Способ по п.10, дополнительно содержащий этапы, на которых:
выполняют упомянутый механизм планирования для нерегистрированных или неизвестных устройств; и
блокируют нерегистрированное или неизвестное устройство.
12. Способ по п.8, в котором второй драйвер предусмотрен на уровне режима ядра, и упомянутый способ выполняется как для упомянутых драйверов устройств пользовательского режима, так и для драйверов устройств режима ядра.
13. Считываемый компьютером носитель с хранимыми на нем инструкциями для обработки драйверов устройств пользовательского режима, причем упомянутые инструкции осуществляют способ, содержащий этапы, на которых:
регистрируют драйверы устройств пользовательского режима в операционной системе;
предоставляют службу прерывания как службу ядра, причем эта служба прерывания предоставляет интерфейс, который вызывается упомянутыми драйверами устройств пользовательского режима для активации прерывания;
назначают объект прерывания одному из упомянутых драйверов устройств пользовательского режима и передают объект прерывания этому одному из драйверов устройств пользовательского режима, причем объект прерывания предоставляет доступ к линии прерываний;
маскируют прерывание в процессоре;
принимают через упомянутый интерфейс от упомянутого одного из драйверов устройств пользовательского режима вызов, приводящий к захвату упомянутой службой прерывания линии прерываний;
демаскируют прерывание;
получают прерывание;
активируют общую процедуру службы прерывания режима ядра по получении прерывания и вслед за активацией процедур службы прерывания для драйверов режима ядра, совместно использующих линию прерываний;
выполняют общую процедуру службы прерывания режима ядра;
блокируют прерывание на более низком уровне, чем уровень процессора, чтобы предотвратить ситуацию, когда прерывание достигает процессора;
планируют в пользовательском режиме вызов упомянутого одного из драйверов устройств пользовательского режима для обработки прерывания;
обрабатывают прерывание посредством этого одного из драйверов устройств пользовательского режима; и
активируют линию прерываний для получения другого прерывания.
14. Считываемый компьютером носитель по п.13, в котором упомянутое блокирование прерывания происходит в APIC или в контроллере шины.
15. Считываемый компьютером носитель по п.13, дополнительно содержащий инструкции для:
предоставления механизма планирования для совместно используемых прерываний;
вызова всех драйверов устройств пользовательского режима, ассоциированных с упомянутыми совместно используемыми прерываниями; и
поддержания упомянутого блокирования прерывания до тех пор, пока все драйверы устройств пользовательского режима не сделают возврат из упомянутой обработки прерывания.
16. Считываемый компьютером носитель по п.15, дополнительно содержащий инструкции для:
выполнения упомянутого механизма планирования для нерегистрированных или неизвестных устройств; и
блокирования нерегистрированного или неизвестного устройства.
17. Считываемый компьютером носитель по п.15, в котором второй драйвер предусмотрен на уровне режима ядра, и упомянутые инструкции выполняются как для упомянутых драйверов устройств пользовательского режима, так и для драйверов устройств режима ядра.
Описание изобретения к патенту
Область техники, к которой относится изобретение
Настоящее изобретение относится к области драйверов компьютерных аппаратных устройств. В частности, настоящее изобретение относится к системе и способу предоставления и обработки прерываний скорее в пользовательском режиме, чем в режиме ядра.
Предшествующий уровень техники
В операционной системе MICROSOFT WINDOWS и других операционных системах драйверы могут работать либо в пользовательском режиме, либо в режиме ядра. Драйверы пользовательского режима выполняются в непривилегированном режиме работы процессора, в котором выполняется другой код приложения, включая код защищенной подсистемы. Драйверы пользовательского режима могут получить доступ к системным данным только путем вызова API (Интерфейса Прикладного Программирования), который в свою очередь вызывает системные сервисы. Драйверы режима ядра выполняются как составной элемент исполняющей части операционной системы - основной компонент операционной системы, который поддерживает одну или более защищенных подсистем.
Драйверы пользовательского режима и драйверы режима ядра имеют различные структуры, различные точки входа и различные интерфейсы системы. Необходим ли устройству драйвер пользовательского режима или драйвер режима ядра, зависит от типа устройства и поддержки, которая уже предоставлена для него в операционной системе. Большинство драйверов устройств выполняются в режиме ядра. Драйверы режима ядра могут выполнять определенные защищенные операции и могут выполнять доступ к системным структурам, к которым драйверы пользовательского режима не могут осуществить доступ.
Когда аппаратное устройство прерывает центральное процессорное устройство (ЦПУ), ЦПУ отвечает путем внутреннего маскирования всех прерываний (на уровне ЦПУ) и активации процедуры обработки исключений, разработанной для обслуживания прерывания. Как правило, эта процедура программирует APIC (Усовершенствованный Программируемый Контроллер Прерываний), чтобы тот маскировал прерывания, которые ниже и выше уровня текущего прерывания, и тогда повторно активировал прерывания на уровне ЦПУ. Далее, запускается ISR (Процедура Обслуживания Прерываний) для обслуживания устройства, которое сгенерировало это прерывание. В случае совместно используемого прерывания несколько процедур ISR будут вызываться по очереди до тех пор, пока одна из них не укажет, что она обработала прерывание. На этой стадии прерывание должно быть обработано, и процедура операционной системы стирает прерывания на уровне APIC и возвращается. Весь этот процесс выполняется в контексте потока, который исполнялся, когда возникло прерывание, и он выполняется с высоким уровнем IRQL (Уровнем Обработки Прерываний). Код ISR, следовательно, выполняется в окружении с высоким уровнем управления, которое является подходящим только для кода режима ядра (то есть исполняемый код и данные, к которым выполняет доступ этот код, не должны быть разбиты на страницы. Код не может быть разбит на блоки и т.п.). Драйверы устройств, которые должны обрабатывать прерывания, обычно выполняются в режиме ядра из-за недостаточности поддержки для обработки прерываний в пользовательском режиме.
Соответственно, существует необходимость в механизме операционной системы для доставки прерываний в пользовательский режим так, чтобы дополнительные классы устройств могли использовать драйверы пользовательского режима. Настоящее изобретение предоставляет такое решение.
Сущность изобретения
Настоящее изобретение нацелено на системы и способы для предоставления возможности драйверам устройств выполняться на уровне пользовательского режима. Общая функция платформы (например, APIC) или шины (например, шины PCI) используется, чтобы маскировать прерывания до тех пор, пока ISR пользовательского режима не сможет быть спланирована, чтобы удалить прерывание устройства. Обработчики прерываний, таким образом, могут быть написаны как код пользовательского режима в стандартном окружении пользовательского режима. Это предоставляет возможность переноса в пользовательский режим такого класса драйверов, который ранее нужно было писать как драйверы режима ядра. Драйвер устройства все также получает уведомления о прерываниях, но уже не с приоритетом прерывания. Такая же схема может быть расширена на совместно используемые прерывания, где множество устройств совместно использует одну линию прерываний.
Согласно аспекту настоящего изобретения предоставляется служба ядра, которая действует как общая функциональность прерывания. Механизм связи между процессами (IPC) предоставляет возможность компонентам осуществлять связь друг с другом. Средство управления (Менеджер) вводом/выводом выполняет назначение/самозагрузку/координирование ресурсов компонентов. Служба прерывания предоставляет менеджеру ввода/вывода промышленный интерфейс, чтобы назначать объект прерывания для передачи в драйверы. Служба прерывания представляет второй интерфейс, который драйверы пользовательского режима могут вызвать, когда они готовы принять прерывание. Возврат из этого вызова означает, что возникло аппаратное прерывание и что драйвер должен связаться с устройством и выполнить в отношении него манипуляцию.
Дополнительные признаки и преимущества настоящего изобретения станут очевидны из следующего подробного описания иллюстративных вариантов осуществления, которое содержит ссылки на прилагаемые чертежи.
Перечень чертежей
Вышеизложенное раскрытие сущности, а также следующее подробное описание предпочтительных вариантов осуществления будут более понятны при прочтении в связи с прилагаемыми чертежами. Для целей иллюстрации изобретения представлены чертежи примеров конструкций настоящего изобретения, однако настоящее изобретение не ограничено конкретными раскрытыми способами и инструментарием. На чертежах:
Фиг.1 - структурная схема, иллюстрирующая пример вычислительного окружения, в котором могут быть реализованы аспекты настоящего изобретения;
Фиг.2 - типичная архитектура в вычислительном устройстве, таком как устройство по Фиг.1;
Фиг.3 - иллюстрация временной шкалы для выполнения обычного способа обработки прерываний, где драйвер устройства остается в режиме ядра, и
Фиг.4 и 5 - иллюстрации временных шкал для выполнения обработки прерываний согласно настоящему изобретению.
Подробное описание предпочтительных вариантов осуществления
Пример Вычислительного Окружения
Фиг.1 иллюстрирует пример подходящего вычислительного окружения 100 системы, в котором может быть осуществлено настоящее изобретение. Вычислительное окружение 100 системы является лишь одним примером подходящего вычислительного окружения, и оно не предназначено для определения рамок области применения или функциональных возможностей настоящего изобретения. Также вычислительное окружение 100 не должно быть интерпретировано как имеющее зависимость или требования, относящиеся к какому-либо компоненту или комбинациям компонентов, проиллюстрированных в примере рабочего окружения 100.
Изобретение может быть задействовано с множеством других окружений или конфигураций вычислительной системы общего назначения или специального назначения. Примеры известных вычислительных систем, окружений и/или конфигураций, которые могут подходить для использования с настоящим изобретением, включают в себя, но не ограничиваются перечисленным, персональные компьютеры, серверные компьютеры, карманные устройства или лэптопы, многопроцессорные системы, основанные на микропроцессорах системы, телевизионные приставки, программируемую потребительскую электронику, сетевые персональные компьютеры, миникомпьютеры, универсальные компьютеры (мэйнфреймы), распределенные вычислительные окружения, которые включают в себя любую из вышеперечисленных систем или устройств, и т.п.
Настоящее изобретение может быть описано в общем контексте машиноисполняемых инструкций, таких как программные модули, которые выполняются компьютером. В общем, программные модули включают в себя процедуры, программы, объекты, компоненты, структуры данных и т.п., которые выполняют конкретные задачи или реализуют специфические абстрактные типы данных. Настоящее изобретение также может быть реализовано в окружениях распределенных вычислений, где задачи выполняются посредством удаленных устройств обработки, которые связаны через сеть связи или иное средство передачи данных. В распределенном вычислительном окружении программные модули и другие данные могут быть расположены как на носителях данных локального компьютера, так и на носителях данных удаленного компьютера, включая устройства памяти.
Ссылаясь на Фиг.1, пример системы для осуществления изобретения включает в себя вычислительное устройство общего назначения в форме компьютера 110. Компоненты компьютера 110 могут включать в себя, но не ограничены перечисленным, блок 120 обработки, системную память 130 и системную шину 121, которая соединяет различные компоненты системы, в том числе соединяет системную память с блоком 120 обработки. Системная шина 121 может быть любого типа из ряда типов структур шин, включающих в себя шину памяти или контроллер памяти, периферийную шину и локальную шину, используя любую архитектуру из разнообразия архитектур шин. В качестве примера и не ограничиваясь этим, подобные архитектуры включают в себя шину стандарта Industry Standard Architecture (ISA), шину стандарта Micro Channel Architecture (MCA), шину стандарта Enhanced ISA (EISA), локальную шину стандарта Video Electronics Standards Association (VESA), шину стандарта Peripheral Component Interconnect (PCI), также известную как шина расширения, шину стандарта Peripheral Component Interconnect Express (PCI-Express) и шину стандарта Systems Management Bus (SMBus).
Компьютер 110, как правило, включает в себя ряд машиночитаемых носителей. Машиночитаемые носители могут быть любым доступным средством, к которому компьютер 110 может выполнить доступ, и они включают в себя как энергозависимые, так и энергонезависимые носители, съемные и несъемные носители. В качестве примера, но не ограничиваясь перечисленным, машиночитаемые носители могут содержать компьютерные носители данных и среды связи. Компьютерные носители данных включают в себя энергозависимые, энергонезависимые, съемные и несъемные носители, реализованные посредством какого-либо способа или технологии для хранения информации, такой как машиночитаемые инструкции, структуры данных, программные модули или другие данные. Компьютерные носители данных включают в себя, но не ограничены этим, ОЗУ, ПЗУ, ЭСППЗУ, флэш-память или память другой технологии, диски CD-ROM, цифровые универсальные диски (DVD) или иные оптические дисковые носители, магнитные кассеты, магнитные ленты, магнитные дисковые носители или другие магнитные запоминающие устройства или любые другие носители, которые могут быть использованы, чтобы хранить желаемую информацию и к которым может быть выполнен доступ компьютером 110. Среды связи, как правило, воплощают машиночитаемые инструкции, структуры данных, программные модули или другие данные в виде модулированного сигнала данных, такого как несущая волна или другой механизм передачи, и включают в себя любые среды доставки информации. Термин "модулированный сигнал данных" обозначает сигнал, у которого одна или более характеристик установлены или изменены таким образом, чтобы закодировать в сигнал информацию. В качестве примера, но не ограничиваясь перечисленным, среды связи включают в себя проводные среды, такие как проводная сеть или прямое проводное соединение, и беспроводные среды, такие как акустические, радиочастотные, инфракрасные и другие беспроводные среды. Комбинации из каких-либо вышеперечисленных носителей и сред также охватываются понятием машиночитаемый носитель
.
Системная память 130 включает в себя компьютерные носители данных в форме энергозависимой и/или энергонезависимой памяти, такой как ПЗУ 131 и ОЗУ 132. Базовая система 133 ввода/вывода (BIOS), содержащая базовые процедуры, которые помогают передавать информацию между элементами в компьютере 110, как, например, во время загрузки, как правило, хранится в ПЗУ 131. ОЗУ 132, как правило, содержит данные и/или программные модули, которые непосредственно доступны и/или задействованы блоком 120 обработки. В качестве примера, но не ограничиваясь этим, Фиг.1 иллюстрирует операционную систему 134, прикладные программы 135, другие программные модули 136 и данные 137 программ.
Компьютер 110 может также включать в себя другие съемные/несъемные энергозависимые/энергонезависимые компьютерные носители данных. Исключительно в качестве примера, Фиг.1 иллюстрирует накопитель 141 на жестких дисках, который считывает с или записывает на несъемные, энергонезависимые магнитные носители, магнитный дисковод 151, который считывает с или записывает на съемный, энергонезависимый магнитный диск 152, и оптический дисковод 155, который считывает с или записывает на съемный, энергонезависимый оптический диск 156, такой как CD-ROM или другой оптический носитель информации. Другие съемные/несъемные, энергозависимые/энергонезависимые компьютерные носители данных, которые могут быть использованы в примере рабочего окружения, включают в себя, но не ограничиваются перечисленным, кассеты с магнитной лентой, карты флэш-памяти, цифровые универсальные диски, цифровые видеоленты, твердотельные ОЗУ, твердотельные ПЗУ и т.п. Накопитель 141 на жестких дисках, как правило, соединен с системной шиной 121 через интерфейс несъемной памяти, такой как интерфейс 140, а магнитный дисковод 151 и оптический дисковод 155, как правило, соединены с системной шиной 121 посредством интерфейса съемной памяти, такого как интерфейс 150.
Накопители и дисководы и связанные с ними компьютерные носители данных, описанные выше и проиллюстрированные на Фиг.1, обеспечивают хранение машиночитаемых инструкций, структур данных, программных модулей и других данных для компьютера 110. На Фиг.1, например, накопитель 141 на жестких дисках проиллюстрирован как хранящий операционную систему 144, прикладные программы 145, другие программные модули 146 и данные 147 программ. Следует отметить, что эти компоненты могут быть такими же, как операционная система 134, прикладные программы 135, другие программные модули 136 и данные 137 программ, или же отличаться от них. Операционная система 144, прикладные программы 145, другие программные модули 146 и данные 147 программ обозначены другими номерами, чтобы проиллюстрировать, что, по меньшей мере, они представляют собой другие копии. Пользователь может вводить команды и информацию в компьютер 110 через устройства ввода, такие как клавиатура 162 и указательное устройство 161, такое как мышь, трекбол или сенсорная панель. Другие устройства ввода (не показаны) могут включать в себя микрофон, джойстик, игровой планшет, спутниковую антенну, сканер или т.п. Эти и другие устройства ввода часто соединяются с блоком 120 обработки через интерфейс 160 ввода пользователя, который соединен с системной шиной, но они могут также быть соединены посредством других структур интерфейсов и шины, таких как параллельный порт, игровой порт или универсальная последовательная шина (USB). Монитор 191 или другой тип устройства отображения также соединен с системной шиной 121 посредством интерфейса, такого как видеоинтерфейс 190. В добавление к монитору компьютеры могут также включать в себя другие периферийные устройства вывода, такие как громкоговорители 197 и принтер 196, которые могут быть соединены через интерфейс 195 периферийных устройств вывода.
Компьютер 110 может работать в сетевом окружении, используя логические соединения с одним или более удаленными компьютерами, такими как удаленный компьютер 180. Удаленный компьютер 180 может быть персональным компьютером, сервером, маршрутизатором, сетевым персональным компьютером, устройством однорангового узла или другим обычным сетевым узлом, и он, как правило, включает в себя многие или все элементы, описанные выше относительно компьютера 110, хотя на Фиг.1 проиллюстрировано только устройство 181 памяти. Логические соединения, изображенные на Фиг.1, включают в себя локальную сеть (LAN) 171 и глобальную сеть (WAN) 173, но могут также включать в себя другие сети. Подобные сетевые окружения типичны для контор, компьютерных сетей масштаба предприятия, интранета и Интернета.
При использовании в сетевом окружении LAN компьютер 110 соединен с LAN 171 через сетевой интерфейс или адаптер 170. При использовании в сетевом окружении WAN компьютер 110, как правило, включает в себя модем 172 или иное средство для установления связи через WAN 173, такую как Интернет. Модем 172, который может быть внутренним или внешним, может быть соединен с системной шиной 121 посредством интерфейса 160 ввода пользователя или иного подходящего механизма. В сетевом окружении программные модули, изображенные относительно компьютера 110, или их части могут храниться в удаленном запоминающем устройстве. В качестве примера, но не ограничиваясь этим, Фиг.1 иллюстрирует удаленные прикладные программы 185 как находящиеся в запоминающем устройстве 181. Очевидно, что показанные сетевые соединения представляют собой лишь примеры и для установления линии связи между компьютерами могут быть использованы другие средства.
Примеры осуществления
Настоящее изобретение реализует системы и способы, используя общую функцию платформы (например, APIC) или шины (шины PCI) для вывода ЦПУ 120 из режима прерывания без необходимости ждать, чтобы драйвер пользовательского режима удалил прерывание устройства. Это, преимущественно, предоставляет возможность, чтобы драйвер устройства был написан для пользовательского режима. Драйвер устройства пользовательского режима получает уведомления о прерываниях, но не с высоким приоритетом прерывания. Как описано ниже, настоящее изобретение может быть расширено на совместно используемые прерывания, где множество устройств совместно использует одну линию прерываний.
На Фиг.2 показана типичная архитектура в вычислительном устройстве. Один или более ЦПУ 120 соединены с APIC 200 ввода/вывода (то есть контроллером ввода/вывода) и шиной/мостом 202 PCI. В архитектуре INTEL в системе присутствует целых восемь APIC ввода/вывода. Они собирают сигналы прерывания из устройств ввода/вывода и передают сообщения в локальные APIC, когда этим устройствам необходимо выполнить прерывание. Каждый APIC ввода/вывода имеет произвольное количество вводов прерывания (или IRQ).
Предоставлены различные системные шины 121, такие как шина 201 ISA и шина 203 PCI, с которыми соединены устройства 204. Специалистам в данной области техники известно, что устройства 204, которые соединены с шиной 203 PCI, включают в себя регистры 205 PCI. Прерывание, сгенерированное устройством 204, направляется в контроллер 200 прерываний и, в конечном счете, в ЦПУ 120. Существует канал от ЦПУ до устройства 204, так что драйвер, исполняющийся на этом ЦПУ 120, может осуществить доступ и манипулировать аппаратным устройством 204.
На Фиг.3 проиллюстрирована временная шкала для обычного способа обработки прерываний, где драйверы устройства остаются в режиме ядра. Сначала на вступительном этапе драйвер устройства регистрирует свою ISR. Когда на этапе Т0 возникает прерывание, на этапе Т1 оно маскируется посредством ЦПУ, так что процессор не остается в прерванном состоянии постоянно. На этапе Т2 операционная система вызывает процедуру ISR драйвера, и на этапе Т3 драйвер обрабатывает прерывание, чтобы удалить прерывание. На этапе Т4 управление возвращается от процедуры ISR, и на этапе Т5 операционная система останавливает маскирование прерывания, так что в случае необходимости может быть обработано следующее прерывание.
Вследствие обычной обработки по Фиг.3 процедуры ISR драйверов вызываются с высоким уровнем IRQL и, соответственно, модель не позволяет писать код процедуры ISR для пользовательского режима. Чтобы предоставить процедуры ISR пользовательского режима, требуется, чтобы можно было маскировать прерывание (на уровне как можно ближе к устройству) до тех пор, пока не появится возможность спланировать код процедуры ISR пользовательского режима. Настоящее изобретение предоставляет возможность одному или более драйверам устройств выполняться как программы/процессы пользовательского режима. Предоставлена служба ядра, которая действует как общая функциональность прерывания. Прерывания маскируются на более низком уровне (то есть на уровне ниже ЦПУ, как описано ниже) до тех пор, пока код в драйвере пользовательского режима не пробуждается и не обрабатывает прерывание.
Служба прерывания по настоящему изобретению представляет интерфейс (например, "wait_for_interrupt" - "ожидать_прерывания"), который вызывается драйверами пользовательского режима, когда они готовы принять прерывание. Служба прерывания предоставляет менеджеру ввода/вывода интерфейс, чтобы назначить объект прерывания, который нужно передать в драйверы. При запуске драйвера устройства менеджер ввода/вывода использует этот интерфейс, чтобы создать объект прерывания, и передает его в драйвер устройства, предоставляя ему доступ к конкретной линии прерываний. Драйвер вызывает интерфейс wait_for_interrupt, когда он готов принять прерывания и/или когда он ожидает прерывания. Возврат из этого вызова означает, что возникло аппаратное прерывание и что драйвер должен связаться с устройством или выполнить в отношении него манипуляцию.
До вызова wait_for_interrupt для ожидания до следующего прерывания драйвер, предпочтительно, завершает какое бы то ни было действие, которое он выполняет для устройства, и устраняет причину прерывания устройства. Следующее прерывание устройства приведет к возврату wait_for_interrupt. Для этого процесса ожидания используется выделенный поток (предпочтительно, не главный поток), и к нему может быть применен повышенный приоритет. Для драйверов пользовательского режима служба прерывания маскирует прерывания, чтобы они не достигли ЦПУ. Например, в типичном APIC может быть маскирована конкретная линия прерываний. Определенные шины, такие как PCI 2.3, имеют переключатель в конфигурационном пространстве, который может активироваться/деактивироваться свойственным шине образом.
Согласно настоящему изобретению маскирование прерываний независимым от устройства образом является механизмом для блокирования прерываний на устройстве (или их маскирования) без программирования устройства свойственным устройству способом. Процедура ISR пользовательского режима является кодом для процедуры службы прерывания, которая расположена и выполняется в контексте потока пользовательского режима, как описано ниже. Фиг.4 иллюстрирует временную шкалу для механизма не являющихся совместно используемыми прерываний пользовательского режима. Этот механизм работает для устройств, которые не используют линию прерываний совместно, причем устройства используют прерывания, сигнализируемые сообщениями, или для устройств, совместно использующих линию прерываний (с драйверами пользовательского режима или режима ядра), но расположенных на шине, которая поддерживает независимый от устройств механизм для маскирования прерываний устройства.
Ссылаясь на Фиг.4, на вступительном этапе служба прерываний запускается путем блокирования или маскирования всех прерываний независимым от устройства образом. Когда на этапе Т0 драйвер вызывает процедуру wait_for_interrupt, чтобы перехватить поток в службе, на этапе Т1 это конкретное прерывание активируется/демаскируется. Когда устройство, связанное с драйвером, вызывает прерывание или такое прерывание было в ожидании, когда на этапе Т1 прерывания будут активированы, возникает событие и ЦПУ прерывается на этапе Т2. Для удаления событие может быть автоматически сброшено.
На этапе Т3 вызывается общий обработчик прерываний режима ядра, зарегистрированный для прерывания, и на этапе Т4 этот обработчик блокирует/повторно маскирует линию прерываний. Это выполняется на уровне, который ниже уровня ЦПУ (например, на уровне APIC 200 ввода/вывода, шины/моста 202 PCI, операционной системы и т.п.). Иначе говоря, на этапе Т4 прерывание устройства, предпочтительно, блокируется как можно ближе к устройству 204. Процессор тогда выходит из режима прерывания на этапе Т5, и на этапе Т6 планируется поток прерывания пользовательского режима, чтобы вызвать драйвер, ожидающий это прерывание. Драйвер обрабатывает прерывание на этапе Т7 и возвращается. Линия прерываний снова активируется для следующего прерывания.
Проблема с совместно используемыми прерываниями для процедур ISR пользовательского режима заключается в проблеме задержки. В общем, желательно сохранять маскированные прерывания на кратчайшее возможное время. В случае процедуры ISR пользовательского режима прерывания маскируется до тех пор, пока выполняется процедура ISR. Это может занять значительное время. Прерывания устройства, совместно использующего ту же линию прерываний, будут блокированы до тех пор, пока прерывания для этой линии не будут снова демаскированы. Следовательно, если прерывания ожидают не все драйверы с процедурой ISR пользовательского режима, совместно использующие заданную линию прерываний, то эта линия маскируется.
На Фиг.5 показан пример временной шкалы для механизма совместно используемого прерывания пользовательского режима на шине, которая не поддерживает маскирование прерываний по устройствам. Вначале прерывание для каждого из устройств, совместно использующих прерывание, маскируется на уровне шины или устройства. В этом случае также, предпочтительно, прерывание маскируется на самом низком возможном уровне, однако иногда бывает удобнее маскировать на том или ином определенном уровне. В этом случае настоящее изобретение может маскировать на уровне устройства или на уровне шины. Маскирование на уровне шины является функцией, которая предоставляет способ для маскирования прерываний, сгенерированных данным устройством. Это функция шины с уровнем детализации по устройству. Путем маскирования прерывания устройства таким образом система может продолжать работать до тех пор, пока код процедуры ISR пользовательского режима не сможет быть запланирован, чтобы удалить прерывание на уровне устройства свойственным устройству способом.
Позже, на этапе Т0, драйвер(ы) пользовательского режима для устройств(а) ожидает(ют) прерывания путем вызова метода WaitForInterrupt (ОжидатьПрерывания) на своем объекте прерывания. Существует счетчик (исходно установленный равным количеству драйверов, совместно использующих прерывание), который уменьшается каждый раз, когда драйвер активирует метод WaitForInterrupt, и поток впоследствии блокируется на объекте события для заданной линии прерываний. Когда вышеупомянутый счетчик становится равным нулю, что означает, что все драйверы устройств пользовательского режима, совместно использующие заданную линию прерываний, ожидают прерываний, метод WaitForInterrupt демаскирует управляемое устройство (Т1).
После того как прерывания устройства были демаскированы, может возникнуть прерывание (Т2). Когда возникает прерывание, активируется общая процедура ISR режима ядра, зарегистрированная для этого прерывания (Т3). Система обрабатывает это прерывание, по существу, таким же образом, как обрабатываются прерывания режима ядра в обычной системе. Процедура ISR сначала повторно маскирует прерывание устройства (Т4) и далее сигнализирует событие, на котором заблокирована процедура ISR пользовательского режима. Счетчик прерываний на линии прерываний тогда переустанавливается равным количеству драйверов, совместно использующих линию прерываний. Тогда процессор выходит из режима прерывания (Т5). Все потоки пользовательского режима активируются (Т6). Каждый поток проверяет, сгенерировало ли это прерывание аппаратное устройство, которым он управляет, и если это так, то он обслуживает прерывание (Т7). После завершения метод WaitForInterrupt вызывается снова.
Согласно настоящему изобретению совместное использование прерываний между компонентами пользовательского режима и компонентами режима ядра схоже с их совместным использованием только между компонентами пользовательского режима. Разница заключается в том, как работает общая процедура ISR режима ядра. По этому сценарию общая процедура ISR режима ядра активируется после процедур ISR для драйверов режима ядра, совместно использующих линию прерываний. Таким образом, если устройство, генерирующее прерывание, является устройством режима ядра, то оно может быть быстро обслужено в ядре и процедуры ISR пользовательского режима не будут активированы. За исключением увеличения задержек вследствие более частного маскирования линии прерываний драйверы режима ядра не подвергаются какому-либо воздействию. В добавление, драйверы режима ядра не включаются в расчет количества драйверов, которые совместно используют линию прерываний.
Согласно вышеизложенному настоящее изобретение способно обрабатывать прерывания общим способом операционной системы без необходимости отдельного драйвера для каждого устройства, поскольку любое прерывание устройства может быть заблокировано без сведений об устройстве. Это имеет место, поскольку, как правило, операционная система имеет сведения об APIC 200 ввода/вывода, и она может блокировать прерывания, по меньшей мере, на этом уровне. Как упомянуто выше, предпочтительно, прерывания обрабатываются как можно ближе к устройству.
Настоящее изобретение также предусмотрено для драйвера, который не может зарегистрироваться в операционной системе. Если прерывание генерируется устройством, драйвер которого не удалось зарегистрировать или он неизвестен, то прерывание отключается на уровне устройства и устройство деактивируется, чтобы предотвратить какие-либо дальнейшие прерывания. Альтернативно, по общей схеме управления, когда другие зарегистрированные драйверы уведомляют о том, что прерывание "им не принадлежит", то прерывание блокируется, чтобы эффективно выключить устройство.
Несмотря на то чтобы настоящее изобретение было описано в связи с предпочтительными вариантами осуществления с различных фигур, следует понимать, что могут использоваться другие схожие варианты осуществления или в описанном варианте осуществления могут быть выполнены модификации и дополнения для выполнения такой же функции настоящего изобретения в его же рамках. Например, специалистам в данной области техники будет очевидно, что настоящее изобретение, как описано в настоящей заявке, может быть применено к любому вычислительному устройству или окружению, будь то проводное или беспроводное, и оно может быть применено к любому количеству таких вычислительных устройств, соединенных посредством сети связи и взаимодействующих по этой сети. Кроме того, следует подчеркнуть, что рассматриваются различные компьютерные платформы, включающие в себя операционные системы карманных устройств и другие операционные системы, специфические для конкретного варианта применения, в особенности, поскольку количество беспроводных сетевых устройств продолжает быстро увеличиваться. Сверх того, настоящее изобретение может быть реализовано в или на множестве микросхем или устройств обработки, и хранение, схожим образом, может быть реализовано на множестве устройств. Следовательно, настоящее изобретение не ограничено каким-либо одним вариантом осуществления, а оно должно быть истолковано в широком смысле и объеме согласно прилагаемой формуле изобретения.
Класс G06F13/24 с использованием прерывания