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