Beruflich Dokumente
Kultur Dokumente
Protectie si multitasking
Modelul de protectie
Multitasking Comutarea taskurilor si Tabela TSS (Task
State Segment)
Modelul de protectie
Contine elemente de siguranta care pot fi realizate in modul
protejat al unui sistem software pentru a interzice accesul
neautorizat la resursele de memorie ale unui task.
Microprocesorul include unitati hardware care implementeaza
un mecanism de protectie. Acest mecanism:
Restrictioneaza accesul la resursele sistem si locale ale
unui task;
Izoleaza taskurile intre ele intr-un mediu multitasking.
Modelul de protectie
Descrierea accesului de memorie
Modelul de protectie
Lista verificarilor de protectie si a restrictiilor contine:
Verificarea tipului;
Verificarea limitei;
Restrictii ale domeniului adresabil;
Restrictii ale intrarii la apelul de procedura
Restrictii ale setului de instructiuni.
Exemplu: Scrierea la o locatie de memorie
Este testat tipul segmentului pentru a fi consistent cu registrul in al
carui cache se incarca.
Este verificat offsetul ca sa fie in limita segmentului.
Atribute importante ale descriptorului:
P- bit prezenta segmentului in memoria fizica.
Segment de cod sau de date (bit 4);
readable, writable, conforming, expand up or expand down, accessat;
Nivelul de privilegii (DPL).
Modelul de protectie
Inaintea incarcarii descriptorului , MMU verifica daca:
Segmentul este prezent in memorie fizica;
Segmentul este pe un nivel de privilegii ca sa poata fi accesat de
programul curent aflat la nivelul curent de provilegii.
Tipul este consistent cu registrul in care este selectorul (CS=cod,
DS, ES, FS, GS, SS=date)
Referinta in segment nu depaseste limita segmentului.
Daca se detecteaza o violare? Semnaleaza conditie de eroare si MMU
trebuie sa:
Determine cauza erorii;
Corecteze problema;
Reinitieze operatia;
Exemplu de violare a protectiei : Selectorul incarcat in CS indica un
descriptor care defineste un segment de date.
Niveluri de privilegii
Niveluri de privilegii
10
11
JMP NEAR
CALL
verificarea limitei
In alt segment de cod prin instructiunile:
JMP FAR
CALL
Verificari: tip segment, limita segment, reguli de
nivel de privilegii
12
13
14
Descriptor de poarta
Implementeaza schimbarea nivelurilor de privilegii.
Incercarea de a transfera controlul unei rutine dintr-un segment
de cod mai privilegiat
Exista 4 tipuri de descriptori de poarta:
Poarta de apel (call gate)
Poarta taskului (task gate)
Poarta intreruperii (interrupt gate)
Poarta capcanei (trap gate)
Instructiunile care refera un descriptor de poarta:
CALL FAR
JMP FAR
15
where
16
Poarta de apel
Implementeaza un transfer indirect al transferului
controlului dintr-un task de la un cod cu nivelul CPL la un
cod mai privilegiat. Defineste un punct de intrare valid intrun segment mai privilegiat. Adresa virtuala a acestui punct
de intrare este:
destination selector + destination offset
unde:
=>destination selector identifica segmentul de cod
caruia i se re-directioneaza controlul.
=>destination offset indica instructiunea din acest
segment de unde se reia executia.
Se poate afla fie in GDT or LDT.
17
Poarta de apel
Operare:
Selectorul portii de apel este incarcat
in CS => se incarca in cache
descriptorul segmentului de cod
apelat (descriptorul unui segment
executabil).
Offset-ul din descriptorul portii de
apel localizeaza punctul de intrare in
procedura din segmentul executabil.
Ori de cate ori CPL-ul taskului se
modifica, o noua stiva este activata.
18
Poarta de apel
Secventa de comutare a contextului programului:
..
Vechile informatii din ESP si SS sunt salvate in noua
stiva impreuna cu alti parametri, EIP si CS (pastrarea
legaturii pentru return).
Incepe executia procedurii la un nivel mai inalt de
privilegii.
RET: intoarce controlul programului apelant. Se
reface contextul original al programului => vechile
valori ale EIP, CS, parametri, ESP, SS sunt scoase
din stiva.
Executia programului se reia cu instructiunea
urmatoare instructiunii CALL din segmentul de cod
mai putin privilegiat.
19
Poarta de apel
Verificari de privilegii la
transferul programului prin
poarta de apel.
Apelul este realizat cu succes
daca:
DPL poarta este egal cu
CPL.
RPL al codului apelat este
(RPL<=CPL)
20
10
21
22
11
23
24
12
25
26
13
27
28
14
29
30
15
31
32
16
NT flag
NT flag are un rol important in multitasking.
Pentru a reveni in taskul anterior sunt utilizate doua elemente:
back link din TSS si NT flag.
Cand NT=1 arata ca taskul curent in executie este imbricat in
executia altui task.
33
Invocarea taskurilor
34
17
35
36
18
37
38
19
39
20