5

Quali sono alcune delle cose importanti da fare e non all'interno di una modalità kernel e di una routine ISR? Ad esempio -Restrizioni mentre il kernel esegue una routine ISR

  • È disattivato il cambio di contesto durante l'esecuzione di un gestore di interrupt?
  • Un interruttore di contesto può verificarsi quando un processo si trova all'interno di una sezione
    critica ?
  • Quali circostanze nella modalità kernel meritano la disattivazione di ulteriori interrupt?

Come può verificarsi un cambio di processo in un errore di pagina, in cui un processo recupera dati dal disco, ma non si verifica durante altre occorrenze di interrupt. Come si classifica se un percorso eseguibile può essere interrotto/riprogrammato/anticipato?

Quali sono le altre cose da ricordare quando il processo è in modalità kernel o la gestione della routine ISR?

risposta

4

In breve: NESSUN INTERRUTTORE DI CONTESTO, MAI.

Ciò significa:

  • No preemption
  • Nessun blocco su mutex (serrature uso di spin, invece, e garantiscono che le controparti non-ISR ad acquisire con spin_lock_irqsave per disabilitare IRQ)
  • Nessuna chiamata a qualsiasi kernel funzione che può dormire (controllare la documentazione della funzione, alcune funzioni hanno anche varianti _cansleep).

Un interruttore processo può verificarsi in un errore di pagina, ma accade dopo corrispondente ISR è stato elaborato. Fondamentalmente un percorso può essere programmato se non è un ISR e se non si ha uno spinlock bloccato. Se si tiene uno spinlock, è necessario evitare di dormire fino a quando non viene rilasciato.

Dal momento che gli ISR ​​sono molto limitati, la gestione degli IRQ viene solitamente suddivisa tra metà superiore (che viene eseguita in contesto ISR e svolge il lavoro critico) e metà inferiore (che viene eseguita successivamente come thread del kernel e fa qualsiasi cosa può essere ritardato) che può dormire. Vedere questa pagina per maggiori informazioni:

http://www.makelinux.net/ldd3/chp-10-sect-4

Problemi correlati