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

Tablice deskryptorów w

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ń.

Atrybuty deskryptorów Nr bitu

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