Przerwania w RTLinuksie
Gdy nadejdzie przerwanie:
- zostaje wywołana procedura obsługi przerwania RT
- procedura ta robi, co należy zrobić dla wątków RT, i sprawdza stan
SFIF
- o ile
SFIF == 0 , informacja o przerwaniu zostaje wrzucona do kolejki oczekujących przerwań i następuje powrót z procedury obsługi za pomocą instrukcji iret
- o ile
SFIF == 1 , informacje na stosie zostają odpowiednio zmodyfikowane dla potrzeb linuksowego handlera (tak, żeby wyglądało to na normalne przerwanie), po czym zostaje wywołany odpowiedni 'wrapper'
- wrapper uruchamia odpowiednią linuksową procedurę obsługi przerwania nie-RT
- procedura robi, co do niej należy, i przekazuje sterowanie z powrotem do wrappera
- wrapper sprawdza, czy są jeszcze jakieś zakolejkowane, oczekujące przerwania: jeśli tak, zaczyna je przetwarzać, jeśli nie - wykonuje
iret (instrukcję powrotu z obsługi przerwania)
|
|