Міжпроцесорне переривання (, IPI) — спеціальний тип переривання, за допомогою якого один процесор може надсилати спеціальні повідомлення іншим процесорам багатопроцесорної обчислювальної системи. Прикладами таких повідомлень або запитів можуть бути запит MMU на синхронізацію кешів (таких як TLB) на інших процесорах, у випадку, коли один з процесорів змінив відображення () пам'яті; старт або зупинка процесорів або ядер.
Історія Спеціальна версія M65MP операційної системи OS/360 використовувала так зване «пряме керування» () машини IBM System/360, щоб згенерувати переривання у іншому процесорі. Більш формалізований інтерфейс у вигляді спеціальної інструкції SIGNAL PROCESSOR з'явився у IBM System/370, і продовжує використовуватися у z/Architecture.
Архітектура x86 У IBM PC-сумісних комп'ютерах, що мають контролер переривань APIC, надсилання міжпроцесорних переривань часто здійснюється саме за допомогою APIC. Коли процесорові треба надіслати переривання до іншого процесора, вектор переривань і ідентифікатор LAPIC цільового процесора програмується у спеціальний регістр ICR () «свого» контролера APIC. Після цього «свій» APIC надсилає повідомлення цільовому контролерові APIC, який викликає переривання потрібного процесора чи ядра.
Архітектура ARM У сучасних процесорах архітектури ARM надсилання міжпроцесорних переривань здійснюється за допомогою контролера переривань GIC. Зокрема, механізм IPI потрібен для запуску процесорних ядер: після початкового запуску системи команди виконує лише одне «основне» ядро (); всі інші ядра знаходяться у стані «чекання на переривання» (у цей стан ядро переводиться інструкцією WFI, ). Для того, щоб запустити допоміжне ядро, у GIC треба запрограмувати початкову адресу виконання, а потім (теж за допомогою GIC) надіслати цільовому ядру програмно-генероване переривання (, SGI).
Приклади використання у операційних системах У багатопроцесорній системі під керуванням Microsoft Windows процесор може переривати інший процесор з наступних причин (на додачу до вже наведених вище): запит на диспетчеризацію переривання (DISPATCH_LEVEL), що в підсумку запускає новий потік виконання; точка зупину .
У Microsoft Windows міжпроцесорні переривання мають IRQL 29.
Див. також Переривання Опрацьовувач переривань (NMI)
Джерела