Dopiero teraz rozpocznie się wykonywanie nr 1. Zanim do tego doszło (w efekcie odczytu długiego skoku) pp wykonał 60 cykli magistrali przeznaczonych na przełączanie zadań.
RD |
00005000 |
0014BB66 |
RD |
5004 |
0068DB8E |
RD |
5008 |
68AA55FF - wynika z działania kolejki |
Zadanie nr 1 nie wykonuje oczywiście nic konkretnego, lecz zostało tak skomponowane aby pokazać warunki powstawania i mechanizmy obsługi wyjątków (ij. przerwań wewnętrznych) właściwych dla trybu wirtualnego. W analogicznym przykładzie będą to wyjątki:
- nr 13 (#GP) : ogólne naruszenie mechanizmów ochrony
- nr 10 (#TS) : błąd w procesie przełączania zadań
Powyższe instrukcje wprowadzają, „z przesiadką” w BX selektor do rejestru segmentowego danych D5 (rejestr pośredni jest konieczny bo do rejestrów ŁŁ.S.śSr 'W-jjU iv5'SM*
i&oąj tfgz.Tc& ta QGli:
l/lW^aWYU ! !V4 *,/♦ tli A f rrarfontp / H pi fi)
. O f 7>T>T
(
J
I
mnntrA
segtnenpt w (DPI-.).
Mają one postać nierówności DPL >CPL i DPL >RPL
Tak więc ich sprawdzenie może być przeprowadzone dopiero po odczycie deskryptora nr 2 z tablicy lokalnej. Można już powiedzieć, że nierówności powyższe będą spełnione tylko wtedy jeśli DPL=3. Odczyt deskryptora jest tez niezbędny, gdyż może okazać się, że wystąpią inne błędy. Przykładowo jeśli w deskryptorze bit P=0 (brak segmentu w pamięci operacyjnej) to w pierwszej kolejności pp zgłosi bardziej ważny wyjątek braku segmentu. Po powrocie z obsługi tego wyjątku nastąpi ponowienie wykonania instrukcji, która ten wyjątek spowodowała i jeśli nierówności nie będą dalej spełnione to pp zgłosi wyjątek nr 13 „ogólne naruszenie mechanizmów ochrony”.
LOCK RD\ 00000D14 fpt/bOj)2 Segment danych znajduje się w
LOCK ROJ 00000D10 <mii) ÓńDP: obszarze 9700-97FF. Jego atrybuty:
baza limit' A
1 00 1 001 0
P DPL S segment danych; odczyt i zapis
Nierówności powyższe nie są zachowane. Nie można dopuścić aby zadanie użytkownika (z poziomu trzeciego) miało dostęp do danych poziomu bardziej uprzywilejowanego (tutaj zerowego tj. poziomu z którego korzysta system operacyjny). Ponieważ testy odczytanego deskryptora nie wypadły pozytywnie, więc nie zostanie on użyty i cykl zapisu bitu A w deskryptorze nie wystąpił.