Generacja adresu fizycznego pamięci przy pracy w trybie adresacji wirtualnej CPU
Pamięć fizyczna
31
16 15
0
Selektor
Przemieszczenie
Wskaźnik
ychn
adresowy
ty da
en
ych
egm
ator
n
Dana
S
m
cz
Su
adresów
fizy
ów
tor
Deskryptor segmentu
skryp
entów
m
23 0
g
a de
Adres bazowy
ic
se
segmentu
Tabl
Wybór deskryptora na podstawie selektora 15
3 2 1 0
Indeks
TI RPL
TI=0
TI=1
Deskryptor 0
Deskryptor 0
Deskryptor 1
Deskryptor 1
Deskryptor 213-1
Deskryptor 213-1
Tablica deskryptorów
Tablica deskryptorów
globalnych
lokalnych
Pamięć fizyczna
CPU
15
0
...
Rozmiar GDT
23
GDT
Baza GDT
LDT1
15
0
Selektor LDT
...
LDTi
15
0
...
Bieżąca
Rozmiar GDT
23
LDT
Baza GDT
LDT
Niedostępne programowo
n
...
15
0
Rozmiar IDT
23
Baza IDT
Deskryptor przerwania
nr n
Tablica
...
deskryptorów
procedur
Deskryptor przerwania
obsługi
nr 1
przerwań
Deskryptor przerwania
nr 0
GDT ( ang. Global descriptor table) – globalna tablica deskryptorów; LDT ( ang. Local descriptor table) – lokalna tablica deskryptorów; IDT ( ang. Interrupt descriptor table) – tablica deskryptorów procedur obsługi przerwań.
Nazwa (symbol)
Opis
P = 1 - segment znajduje się w pamięci fizycznej; 7 P
( ang. Present)
P = 0 - segment nieobecny w pamięci fizycznej; adres bazowy oraz wartość ograniczająca rozmiar segmentu nie są wyko-rzystywane 6 – 5
DPL ( ang. Descriptor privilege level) Poziom uprzywilejowania segmentu S = 1 – deskryptor segmentu danych lub kodu programu;
4 S
( ang. Segment descriptor) S = 1 – deskryptor systemowego segmentu danych lub systemowego mechanizmu sterującego.
E = 0 – segment danych;
3 E
( ang. Executable)
E = 1 – segment kodu programu.
Kierunek rozszerzania segmentu: 2
ED = 0 – „w górę”, przemieszczenie jest mniejsze lub ED ( ang. Expansion direction) równe wartości ograniczającej rozmiar segmentu; E = 0
ED = 1 – „w dół”, przemieszczenie jest większe niż wartość ograniczająca rozmiar segmentu; C = 0 – kod może być realizowany, jeśli bieżący 2
C (
poziom uprzywilejowania jest wyższy (lub równy) ang. Confirming)
E = 1
niż poziom uprzywilejowania zapisany w deskryptorze segmentu CPL>DPL lub CPL=DPL.
1
W = 0 – zabroniony zapis danych; W ( ang. Writeable) E = 0
W = 1 – dopuszczony zapis danych.
1
R = 0 – zabroniony odczyt kodu programu; R ( ang. Readable)
E = 1
R = 1 – dopuszczalny odczyt kodu programu.
A = 0 – nie był realizowany dostęp do segmentu; A = 1 – selektor segmentu został wprowadzony do 0 A
( ang. Accessed)
podręcznego rejestru deskryptora segmentowego lub wykorzystany przez rozkaz testowania selektora segmentu
Podręczne rejestry deskryptorów Niedostępne programowo
Atrybuty
Adresy bazowe
Rozmiary
Selektory segmentów
dostępu
segmentów
segmentów
CS
DS
SS
ES
15
0
47 40
39
16
15
0
Rejestry segmentu
(ładowane programowo)
Podręczne rejestry deskryptorów segmentów (ładowane sprzętowo)
Algorytm rozpoznawania typu procesora START
Czy
bity 12-15 w
rejestrze stanu
NIE
są zawsze
równe 1?
Czy
bity 12-15 w
TAK
rejestrze stanu są
zawsze równe 0 w
TAK
80286
trybie
rzeczywistym?
Czy
w instrukcji
przesunięć shr
liczba bitów
przesunięć jest
NIE
TAK
maskowana do 5
bitów?
80186
Czy
bit 18 w
NIE
rejestrze stanu
NIE
80386
może być
8086/88
równy 1?
TAK
Czy
może być
zmieniona
wartość bitu 21 w
NIE
80486
rejestrze stanu ?
TAK
Pentium
KONIEC