Perché il Mascheramento degli Interrupt è Essenziale nei Microprocessori
Esecuzione Atomica e Determinismo in Tempo Reale
Il mascheramento degli interrupt disabilita temporaneamente la gestione degli interrupt, consentendo alla CPU di eseguire sezioni di codice critiche in modo atomico. È una primitiva di sincronizzazione fondamentale.
Motivi Chiave
- Protezione di Sezione Critica: Previene condizioni di race durante l'accesso a risorse condivise (variabili globali, registri hardware, liste collegate). Senza mascheramento, una ISR potrebbe corrompere i dati durante un aggiornamento.
- Determinismo in Tempo Reale: Garantisce il tempo di esecuzione peggiore (WCET) per le attività ad alta priorità limitando la latenza degli interrupt. Essenziale per sistemi real-time rigidi (automotive, avionica, controllo motore).
- Lettura-Modifica-Scrittura Atomica: Consente un'implementazione sicura di semafori, mutex e algoritmi lock-free su sistemi single-core.
- Gestione Energetica: Disabilitare gli orologi del controller di interrupt durante il sonno profondo riduce la corrente di perdita nei dispositivi a batteria.
- Ottimizzazione di Switch di Contesto: Riduce salvataggi/ripristini di contesto non necessari quando gli interrupt sono differiti durante brevi routine del kernel.
Meccanismi di Implementazione
- Mask Globale: Singolo flag (es. x86
CLI/STI, ARMCPSID I/CPSIE I, RISC-V CSRmie). - Mask Selettivo: Bit di abilitazione per interrupt nel controller di interrupt (PIC, APIC, GIC, PLIC).
- Soglia di Priorità: Maschera tutti al di sotto di un livello (ARM BASEPRI, RISC-V PMP).
Rischi dell'Uso Eccessivo
Mascheramento eccessivo → maggiore latenza degli interrupt, scadenze mancate, eventi persi (overrun seriale, deriva del tick del timer). Best practice: mantenere le sezioni mascherate < 10–20 µs; usare blocchi a grana fine dove possibile.