Mikroinformatyka Wielozadaniowość

Transkrypt

Mikroinformatyka Wielozadaniowość
Mikroinformatyka
Wielozadaniowość
Zadanie
Tryb chroniony – przynajmniej jedno zadanie (task).
● Segment stanu zadania TSS (Task State Segment).
● Przestrzeń zadania (Execution Space).
- segment kodu,
- segment danych (kilka),
- segment stosu
(dla każdego poziomu).
●
Selektor segmentu TSS
identyfikuje zadanie.
●
Przy uruchamianiu lub zmianie
zadania:
- selektor TSS ładowany do TR,
- jeśli włączone stronicowanie –
uaktualniany jest PDBR (CR3).
●
Stan zadania
Stan rejestru zadania TR.
Elementy dynamiczne w TSS:
● Przestrzeń zadania – selektory CS, DS, ES, FS, GS, SS.
● Stan rejestrów ogólnego przeznaczenia.
● Stan rejestru znaczników.
● Stan wskaźnika rozkazów.
● Łącze do poprzedniego zadania – jego selektor TSS.
Elementy statyczne w TSS:
● Stan rejestru CR3.
● Stan rejestru LDTR.
● Adres bazowy mapy I/O.
● Mapa I/O.
● Wskaźnik stosu dla poziomów uprzywilejowania 0, 1 i 2.
● Pułapka uruchomieniowa – bit T.
●
Segment Stanu Zadania TSS
Wywołanie zadania
Wywołanie:
● Skok – JMP.
● Wywołanie podprogramu – CALL.
● Przerwanie – INT.
● Wyjątek.
● Powrót z przerwania – IRET (przy ustawionym znaczniku NT).
Identyfikacja zadania – selektor bramki zadania lub TSS.
Przerwania i wyjątki – bramka z selektorem zadania w IDT.
Przełączanie zadań:
● Zachowanie stanu aktualnie wykonywanego zadania –
uaktualniane dynamiczne pola TSS.
● Zawieszenie zadania.
● Załadowanie kontekstu uruchamianego zadania z TSS.
Zadania nie mogą być wywoływane rekursywnie.
Deskryptor segmentu TSS
Przechowywane wyłącznie w GDT.
● Gdy G=0, rozmiar >= 67h.
● DPL powinien być < 3 (tylko system może przełączać zadania).
● Jedno zadanie – jeden segment TSS i jeden deskryptor TSS.
● B – znacznik zajętości zadania:
- CALL lub INT pozostawia B,
- JMP lub IRET zeruje B.
●
Selektor TSS
Operacje na selektorze TSS
● Instrukcja LTR - ładowanie selektora TSS do TR (poziom 0).
● Instrukcja STR - zapisanie selektora TSS z TR do pamięci.
● TR ma część widoczną – selektor i niewidoczną – deskryptor.
● Deskryptor ładowany automatycznie.
Błędy przy operacjach na selektorze i deskryptorze TSS:
● Próba załadowania selektora TSS do rejestru segmentowego - #GP.
● Wybór LDT przy JMP lub CALL - #GP.
● Wybór LDT przy IRET - #TS (Invalid TSS).
● Przełączenie do segmentu, którego LIMIT < 67h - #TS.
Deskryptor bramki zadania
Może być umieszczony w GDT, LDT, IDT.
● Jedno zadanie może mieć wiele bramek na różnych poziomach.
● Zawiera selektor deskryptora segmentu TSS w tablicy GDT.
●
CPL procesu wywołującego oraz RPL selektora wskazującego
bramkę musi być mniejsze lub równe polu DPL deskryptora
bramki.
Nie jest brany pod uwagę DPL w deskryptorze segmentu TSS
wywoływanego zadania.
Przełączanie zadań
Pzełączanie zadań (Task Switching) zachodzi w następujących
przypadkach:
● CALL lub JMP z selektorem TSS w tablicy GDT.
● CALL lub JMP z selektorem bramki w GDT lub LDT.
● Przerwanie lub wyjątek z selektorem bramki w IDT.
● Powrót z zagnieżdżonego zadania (NT=1) przez IRET.
Przełączanie zadań
Kroki przy przełączaniu zadań:
1. Pobranie selektora segmentu TSS z:
- argumentu instrukcji JMP lub CALL,
- selektora w bramce wskazywanej przez JMP lub CALL,
- pola poprzedniego zadania z aktualnego TSS przy IRET.
2. Sprawdzenie poprawności przełączenia:
- JMP i CALL – sprawdzenie przywilejów (jak dla danych –
aktualny CPL i RPL <= DPL nowego TSS lub bramki),
- INT n – sprawdzany jest DPL,
- przerwania sprzętowe, wyjątki, IRET – nie sprawdzane
przywileje.
3. Sprawdzenie deskryptora TSS:
- rozmiar TSS (LIMIT >=67h),
- czy jest zaznaczony jako obecny (P).
Przełączanie zadań
4. Sprawdzenie znacznika BUSY:
- 0 dla JMP lub CALL, przerwania i wyjątku,
- 1 dla IRET.
5. Sprawdzenie czy aktualny TSS, nowy TSS i wszystkie
deskryptory są w pamięci.
6. Znacznik B w aktualnym deskryptorze TSS:
- jest zarowany przy JMP lub IRET,
- ustawiany przy CALL, przerwaniu i wyjątku.
7. Znacznik NT w zachowywanym EFLAGS:
- zerowany przy IRET,
- nie zmieniany przy CALL, JMP, przerwaniu i wyjątku.
8. Zachowanie stanu zadania w jego segmencie TSS
wskazywanym przez TR.
Przełączanie zadań
9. Jeśli przełączenie było wywołanie:
- CALL, przerwaniem lub wyjątkiem – znacznik NT zostaje
ustawiony w EFLAGS załadowanym dla nowego zadania,
- JMP lub IRET – NT pozostaje niezmienione.
10. Jeśli przełączenie było wywołanie:
- JMP, CALL, przerwaniem lub wyjątkiem – znacznik B w
deskryptorze TSS zostaje ustawiony,
- IRET – nie zmienia B.
11. Ładuje TR selektorem nowego segmentu TSS.
12. Stan z TSS nowego zadania jest ładowany do procesora.
13. Załadowanie deskryptorów segmentów nowego zadania.
14. Uruchomienie nowego zadania.
Przełączanie zadań
Błędy na etapach 1 – 11:
● Pozostanie przy poprzednim zadaniu.
Błędy na etapach 13 – 14:
● Wyjątek w kontekście nowego zadania.
Błąd na etapie punktu 12 (przeładowanie rejestrów):
● Błąd krytyczny bez możliwości obsługi.

Podobne dokumenty