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.