Міжпроцесорне переривання
Міжпроцесорне переривання (англ. inter-processor interrupt, IPI) — спеціальний тип переривання, за допомогою якого один процесор може надсилати спеціальні повідомлення іншим процесорам багатопроцесорної обчислювальної системи. Прикладами таких повідомлень або запитів можуть бути
Історія
Спеціальна версія M65MP операційної системи OS/360 використовувала так зване «пряме керування» (англ. Direct Control feature) машини IBM System/360, щоб згенерувати переривання у іншому процесорі.[1] Більш формалізований інтерфейс у вигляді спеціальної інструкції SIGNAL PROCESSOR
з'явився у IBM System/370[2], і продовжує використовуватися у z/Architecture.
Архітектура x86
У IBM PC-сумісних комп'ютерах, що мають контролер переривань APIC, надсилання міжпроцесорних переривань часто здійснюється саме за допомогою APIC. Коли процесорові треба надіслати переривання до іншого процесора, вектор переривань і ідентифікатор LAPIC цільового процесора програмується у спеціальний регістр ICR (англ. Interrupt Command Register) «свого» контролера APIC. Після цього «свій» APIC надсилає повідомлення цільовому контролерові APIC, який викликає переривання потрібного процесора чи ядра.
Архітектура ARM
У сучасних процесорах архітектури ARM надсилання міжпроцесорних переривань здійснюється за допомогою контролера переривань GIC.[3]
Зокрема, механізм IPI потрібен для запуску процесорних ядер: після початкового запуску системи команди виконує лише одне «основне» ядро (англ. primary core); всі інші ядра знаходяться у стані «чекання на переривання» (у цей стан ядро переводиться інструкцією WFI
, англ. Wait For Interrupt). Для того, щоб запустити допоміжне ядро, у GIC треба запрограмувати початкову адресу виконання, а потім (теж за допомогою GIC) надіслати цільовому ядру програмно-генероване переривання (англ. Software Generated Interrupt, SGI).[3]
Приклади використання у операційних системах
У багатопроцесорній системі під керуванням Microsoft Windows процесор може переривати інший процесор з наступних причин (на додачу до вже наведених вище):
- запит на диспетчеризацію переривання (DISPATCH_LEVEL), що в підсумку запускає новий потік виконання;
- точка зупину налагоджувача ядра.
У Microsoft Windows міжпроцесорні переривання мають IRQL 29.[4]
Див. також
- Переривання
- Опрацьовувач переривань
- Non-maskable interrupt (NMI)
Джерела
- IBM System/360 Operating System Introduction (англ.). IBM. June 1971.
- IBM System/370 Extended Architecture. Principles of Operation (англ.). IBM. March 1983.
- Cortex-A Series Programmer’s Guide. 4.0 (англ.). ARM.
- Matt (28 квітня 2002). Understanding IRQL (англ.). Процитовано 6 грудня 2014.
- Interrupts and Exceptions (англ.).