Udostępnij za pośrednictwem


Koligacja przerwań

Przynależność przerwania to zbiór procesorów, które mogą obsłużyć to przerwanie. Każde urządzenie ma politykę afinityczną. System operacyjny używa zasad koligacji do obliczenia koligacji dla przerwań tego urządzenia. Zasady koligacji można określić w ustawieniach pliku INF lub rejestru urządzenia. Administratorzy mogą używać rejestru do ustawiania zasad koligacji dla przerwania.

Administratorzy mogą ustawić następujące wpisy w kluczu rejestru \Interrupt Management\Affinity Policy :

  • DevicePolicy to wartość REG_DWORD określająca zasady koligacji. Aby uzyskać możliwe wartości i ich znaczenie, zobacz IRQ_DEVICE_POLICY. Firma Microsoft zaleca używanie zasad domyślnych, jeśli ma to zastosowanie.

  • AssignmentSetOverride może być wartością REG_BINARY, REG_DWORD lub REG_QWORD określającą maskę KAFFINITY. W przypadku REG_BINARY rozmiar musi być mniejszy lub równy rozmiarowi KAFFINITY dla platformy, a kolejność bajtów wejściowych to little-endian. Jeśli DevicePolicy ma wartość 0x04 (IrqPolicySpecifiedProcessors), to ta maska określa zestaw procesorów, którym mają zostać przypisane przerwania urządzenia.

Plik INF sterownika może zapewnić domyślne ustawienia wartości rejestru. Oto przykład ustawiania wartości DevicePolicy na IrqPolicyOneCloseProcessor w pliku INF. Aby uzyskać więcej informacji, zobacz dyrektywę INF AddReg.

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

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

System udostępnia ustawienia rejestru sterownikowi urządzenia podczas wysyłania IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP do sterownika. System operacyjny zapewnia strukturę IO_RESOURCE_DESCRIPTOR dla każdego przerwania z członem Type ustawionym na CmResourceTypeInterrupt. W przypadku przerwania wywoływanego komunikatem ustawiany jest bit CM_RESOURCE_INTERRUPT_MESSAGE elementu członkowskiego Flags; w przeciwnym razie jest on zerowany. Element członkowski u.Interrupt opisuje ustawienia przerwania.

Poniższa tabela przedstawia korespondencję między ustawieniami rejestru a członkami u.Interrupt.

Wartość rejestru Członek u.Interrupt
DevicePolicy PolitykaPowiązań
AssignmentSetOverride TargetedProcessors

Informacje o platformie KAFFINITY

Typ KAFFINITY to maska koligacji, która reprezentuje zestaw procesorów logicznych w grupie.

typedef ULONG_PTR  KAFFINITY;

Typ KAFFINITY to 32 bity w 32-bitowej wersji systemu Windows i jest 64-bitowy w 64-bitowej wersji systemu Windows.

Jeśli grupa zawiera n procesorów logicznych, procesory są numerowane z zakresu od 0 do n-1. Numer procesora i w grupie jest reprezentowany przez bit i w masce koligacji, gdzie i znajduje się w zakresie od 0 do n-1. Bity maski koligacji, które nie odpowiadają procesorom logicznym, są zawsze zerowe.

Jeśli na przykład wartość KAFFINITY identyfikuje aktywne procesory w grupie, bit maski dla procesora jest taki, jeśli procesor jest aktywny i jest zerowy, jeśli procesor nie jest aktywny.

Liczba bitów w masce koligacji określa maksymalną liczbę procesorów logicznych w grupie. W przypadku 64-bitowej wersji systemu Windows maksymalna liczba procesorów na grupę wynosi 64. W przypadku 32-bitowej wersji systemu Windows maksymalna liczba procesorów na grupę wynosi 32. Wywołaj procedurę KeQueryMaximumProcessorCountEx , aby uzyskać maksymalną liczbę procesorów na grupę. Ta liczba zależy od konfiguracji sprzętowej systemu wieloprocesorowego, ale nigdy nie może przekraczać stałych limitów procesora 64 i 32 procesorów, które są ustawione odpowiednio przez 64-bitowe i 32-bitowe wersje systemu Windows.

Struktura GROUP_AFFINITY zawiera maskę koligacji i numer grupy. Numer grupy identyfikuje grupę, do której ma zastosowanie maska koligacji.

Procedury jądra korzystające z typu KAFFINITY obejmują IoConnectInterrupt, KeQueryActiveProcessorCount i KeQueryActiveProcessors.