Поделиться через


Сходство прерываний

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

Начиная с Windows Vista администраторы могут использовать реестр для настройки политики сходства для прерывания.

Администраторы могут задать следующие записи в разделе реестра \Управление прерываниями\Политика сходства :

  • DevicePolicy — это REG_DWORD значение, указывающее политику сходства. Возможные значения и их значения см. в разделе IRQ_DEVICE_POLICY. Корпорация Майкрософт рекомендует использовать политику по умолчанию, если применимо.

  • AssignmentSetOverride может быть REG_BINARY, REG_DWORD или REG_QWORD значением, указывающим маску KAFFINITY . Для REG_BINARY размер должен быть меньше или равен размеру KAFFINITY для платформы, а порядок входных байтов немного байтов. Если DevicePolicy имеет значение 0x04 (IrqPolicySpecifiedProcessors), эта маска задает набор процессоров, для назначения прерываний устройства.

INF-файл драйвера может содержать параметры по умолчанию для значений реестра. Ниже приведен пример того, как задать для параметра DevicePolicy значение IrqPolicyOneCloseProcessor в INF-файле. Дополнительные сведения см. в разделе Директива INF AddReg.

[install-section-name.HW]
AddReg=add-registry-section 

[add-registry-section]
HKR, "Interrupt Management\Affinity Policy", DevicePolicy, 0x00010001, 2

Система делает параметры реестра доступными для драйвера устройства при отправке IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP драйверу. Операционная система предоставляет структуру IO_RESOURCE_DESCRIPTOR для каждого прерывания с элементом Type , равным CmResourceTypeInterrupt. Для прерывания с сигналом сообщения устанавливается бит CM_RESOURCE_INTERRUPT_MESSAGE элемента Flags ; В противном случае это ясно. Элемент u.Interrupt описывает параметры прерывания.

В следующей таблице приведено соответствие между параметрами реестра и членами u.Interrupt.

Значение реестра Участник you.Interrupt

DevicePolicy

AffinityPolicy

AssignmentSetOverride

TargetedProcessors

О KAFFINITY

Тип KAFFINITY — это маска сходства, представляющая набор логических процессоров в группе.

typedef ULONG_PTR  KAFFINITY;

Тип KAFFINITY имеет значение 32 бита в 32-разрядной версии Windows и 64 бит в 64-разрядной версии Windows.

Если группа содержит n логических процессоров, процессоры нумеруются от 0 до n-1. Номер процессора i в группе представлен битом i в маске сходства, где i находится в диапазоне от 0 до n-1. Биты маски сходства, которые не соответствуют логическим процессорам, всегда равны нулю.

Например, если значение KAFFINITY определяет активные процессоры в группе, то бит маски для процессора равен 1, если процессор активен, и равен нулю, если процессор не активен.

Максимальное число логических процессоров в группе определяется числом бит в маске сходства. Для 64-разрядной версии Windows максимальное количество процессоров в группе составляет 64. Для 32-разрядной версии Windows максимальное количество процессоров в группе составляет 32. Вызовите подпрограмму KeQueryMaximumProcessorCountEx , чтобы получить максимальное количество процессоров в группе. Это число зависит от конфигурации оборудования многопроцессорной системы, но никогда не может превышать фиксированные 64-процессорные и 32-процессорные ограничения, установленные 64-разрядными и 32-разрядными версиями Windows соответственно.

Структура GROUP_AFFINITY содержит маску сходства и номер группы. Номер группы определяет группу, к которой применяется маска сходства.

Подпрограммы ядра, использующие тип KAFFINITY, включают IoConnectInterrupt, KeQueryActiveProcessorCount и KeQueryActiveProcessors.