Nie wiedziałem do jakiego działu dać to dałem tutaj bo OSy są często pisane w C.
Sytuacja jest taka:
Brak strony w pamięci -> przerwanie -> kod obsługujący do przerwanie - > X
Czy możliwe jest, aby X = przerwanie? Tzn. czy w trakcie wykonywania po stronie kernela interrupt handlera możliwe jest kolejne przerwanie? Jeżeli odpowiedź jest to zależy, to od czego?
To zależy co najmniej od architektury procesora i od zdarzenia, które nastąpi w chwili obsługi wyjątku braku strony.
Różne rodzaje wyjątków oddziałują w inny sposób na pozostałe.
Dla przykładu, w procesorach ARM, wyjątek braku strony (np. data abort) automatycznie (sprzętowo) zamaskuje przerwanie IRQ. Oznacza to, że na tym CPU, na którym wystąpił wyjątek braku strony nie zostanie przyjęte przerwanie IRQ do momentu aż go nie odmaskujemy lub nie opuścimy wyjątku (służy do tego specjalna instrukcja) przy założeniu, że wcześniej przerwanie IRQ było odmaskowane.
Natomiast data abort nie maskuje szybkich przerwań (FIQ) a więc jeśli takie przerwanie jest skonfigurowane w systemie to jak najbardziej może się w takiej sytuacji pojawić i "wywłaszczyć" procedurę obsługi braku strony (jednak zwykle FIQ nie jest włączony).
Ponadto, jeżeli w procedurze obsługi braku strony nastąpi kolejny błąd dostępu do strony (np. w wyniku jakiegoś błędu w designie) to nastąpi zagnieżdżony wyjątek itd.
TLDR: To zależy od architektury. Z reguły przerwania asynchroniczne, od urządzeń itp. są maskowane. Przerwania specjalne (jak FIQ na ARM) mogą nie być maskowane. Wyjątki takie jak zagnieżdżony page fault nie mogą być maskowane (nie miałoby to sensu).
W tym momencie nie przychodzą mi do głowy inne scenariusze chyba, że coś związane z RT. Mam nadzieję, że nic nie pomyliłem ;]