Sunteți pe pagina 1din 46

Arhitectura Microprocesoarelor

Capitolul III

Memorii interne și moduri de accesare

Mihaela Hnatiuc
Universitatea Maritimă Constanţa

Ce sunt memoriile?
• Unități de stocare a informației pe timp scurt
sau lung, funcție de construcția lor

• Cea mai mică unitate de memorie este locația

• Unitatea de măsură a capacității de memorie


sunt octeții sau biții
Principalele tipuri de memorii interne

• Memorie de date accesate la I8x86 cu


registrele SI, DI

• Memorie de program accesate la I8x86 cu


registrele PC, IP

• Memorie stivă accesate la I8x86 cu registrele


BP, SP

Principalele segmente de memorie la


I8x86
• Segment de memorie de date accesate cu
registrele DS, ES

• Segment de memorie program accesate cu


registre CS

• Segment de memorie stivă accesate cu registre


SS
Registre de memorie la INTEL
80386
Tipuri de registre la INTEL 80386
• Registre de uz general;
• Registre segment;
• Registre pointer de instrucţiuni şi de stare;
• Registre de control;
• Registre de adresare ale sistemului;
• Registre de depanare;
• Registre de test.

Registrele pentru accesul în


interiorul unui segment
• Împreună cu registrele de date, reprezintă registrele
generale; SP şi BP sunt registre indicator iar SI şi DI
sunt registre index. Registrele indicator conţin adresa
relativă faţă de baza segmentului la care se află un
operand în cadrul segmentului stivă; SP indică adresa
relativă a vârfului stivei în raport cu conţinutul
registrului SS (baza stivei), iar BP indică adresa relativă
a unui operand în cadrul segmentului stivă

• Registrele index conţin adresa relativă faţă de baza


segmentului la care se află un operand în cadrul
segmentelor de date sau de date suplimentar, deci în
raport DS sau ES; SI si DI se utilizează în general în
cazul operaţiilor cu şiruri de date, SI indicând adresa
operandului sursă iar DI adresa operandului destinaţie
Registre. Descrierea funcțiilor
•Registrul indicator de adresă IP (Instruction Pointer)
•FS şi GS - registre pentru selectori de segmente de date curente (au aceeaşi funcţii ca DS,
ES);
•CR2 - registru utilizat în mecanismul paginării, conţine adresa liniară de 32 de biţi a
instrucţiunii care a cauzat eroarea de găsire a paginii; informaţii suplimentare referitoare la
acest eveniment se află în codul de eroare încărcat în stiva de tratare a erorilor de pagină;
•CR3 - conţine baza adresei fizice a tabelei directorilor de pagină; această tabelă este
întotdeauna aliniată la intervale de 4 kB = 212B, cei 12 biţi mai puţin semnificativi trebuie să
fie întotdeauna zero;
•TR - registrul segment al stării sarcinii (TSS - Task Status Segment) conţine selectorul
descriptorului TSS împreună cu adresa liniară, limitele şi atributele descriptorului respectiv
fiind utilizate în mecanismele de protecţie, în modul de lucru protejat;
•DR0 - DR7 - registre pentru depanarea programelor; primele 4 registre sunt destinate
memorării adreselor liniare ale punctelor de oprire (breakpoints) inserate în program în
procesul depanării.
•TR6, TR7 - registre de test folosite în testarea memoriei;
•TR6 - registrul comenzilor de test iar TR7 este folosit ca registru de date.

Registre Indicator de Condiţii la I8x86 [1]

VM RF O NT IOPL IOPL OF DF IF TF SF YF - AF - PF - CF

17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Descrierea bitilor din registrul indicator
de condiţii la I8x86
• Bitul 0: indicatorul de transport CF (Carry Flag). Are valoarea 1 dacă în
execuţia unei instrucţiuni aritmetice care poziţionează acest indicator a apărut un
transport sau s-a făcut un împrumut la rangul cel mai semnificativ. De asemenea,
instrucţiunile de rotire a conţinutului unui registru pot acţiona asupra acestui
indicator.
• Bitul 2: indicatorul de paritate PF (Parity Flag). Ia valoarea 1 dacă din execuţia
unei instrucţiuni care poziţionează acest indicator s-a obţinut un rezultat
conţinând un număr par de biţi cu valoarea 1.
• Bitul 4: indicatorul de transport auxiliar AF (Auxiliary Carry Flag). Are
valoarea 1 dacă în execuţia unei instrucţiuni ce îl influenţează a apărut un
transport de la rangul 3 spre rangul 4 (sau a fost executat un împrumut din rangul
4 spre rangul 3). Acest indicator este foarte des utilizat pentru implementarea
operaţiilor aritmetice cu numere codificate în BCD.
• Bitul 6: indicatorul de zero ZF (Zero Flag). Are valoarea 1 dacă, în urma
execuţiei unei instrucţiuni ce are efect asupra sa, rezultatul obţinut este nul.

Descrierea bitilor din registrul


indicator de condiţii la I8x86
• Bitul 7: indicatorul de semn SF (Sign Flag). Acest bit ia valoarea 1 dacă în urma unei operaţii
aritmetice s-a obţinut un rezultat negativ (pentru care, conform convenţiei, bitul cel mai
semnificativ este de asemenea 1). Practic, în acest caz, SF este o copie a bitului de semn
asociat rezultatului.
• Bitul 8: bitul de depanare TF (Trap Flag). Acest fanion de control este utilizat pentru execuţia
programelor în regim pas cu pas, în scopul testării lor amănunţite. Dacă acest indicator este
setat la valoarea 1 de către utilizator, după execuţia fiecărei instrucţiuni se va genera un
semnal de întrerupere intern (pe nivelul 1).
• Bitul 9: bitul de activare/dezactivare a sistemului de întreruperi IF (Interrupt Flag). Prin
valorile date de către utilizator, acest fanion determină acceptarea (dacă IF=1) sau respingerea
(dacă IF=1) semnalelor asociate întreruperilor externe. Bineînţeles, indicatorul nu are
influenţă asupra întreruperilor nemascabile.
• Bitul 10: bitul indicator al direcţiei de parcurgere a şirurilor DF (Direction Flag). Având
semnificaţie doar în cazul instrucţiunilor de prelucrare a şirurilor, valoarea 0 (zero) a acestui
flag indică parcurgerea şirurilor de la adrese mici spre adrese mai mari, în timp ce valoarea 1
determină inversarea sensului de tratare a acestora.
• Bitul 11: indicatorul de depăşire la calcule efectuate în virgulă fixă OF (Overflow Flag).
Acest bit ia valoarea 1 dacă din execuţia unei instrucţiuni aritmetice s-a obţinut un rezultat ce
depăşeşte capacitatea de reprezentare a destinaţiei precizate implicit sau explicit (numărul de
biţi ai acesteia).
Descrierea bitilor din registrul
indicator de condiţii la I8x86
• Biţii 12-13: indicatorul nivelului privilegiat de acces la operaţiile de intrare/ieşire IOPL
(Input/Output Privilege Level). Valoarea celor doi biţi asociaţi afectează comportarea procesorului la
detectarea apelurilor de tip intrare/ieşire.
• Bitul 14: NT (Nested Task) - indicatorul de sarcini imbricate. Valoarea 0 (zero) a acestui bit indică
faptul că sarcina în curs de execuţie este independentă, revenirea din aceasta fiind realizată în mod
normal. În caz contrar (NT=1) este semnalată existenţa unei sarcini imbricate, revenirea la sarcina
anterioară fiind posibilă prin apelul instrucţiunii de ieşire din întrerupere (IRET).
• La intrarea în scenă a microprocesoarelor pe 32 de biţi, registrul indicatorilor de condiţii a fost
completat cu două fanioane de sistem şi un nou indicator de control, acesta fiind:
• Bitul 16: Indicator de reluare RF (Resume Flag) - utilizat în întreruperi înregistrate în biţii DR0 -
DR3. Indicatorul este testat înainte de procesarea oricărei pause iar dacă este găsit în 1, va fi
ignorată orice eroare generată de instrucţiunea următoare. Indicatorul este resetat automat la
încheierea cu succes a tuturor instrucţiunilor, cu excepţia instrucţiunilor IRET, POPF, JMP, CALL şi
INT, care produc o comutare a sarcinii. În funcţie de valoarea acestuia, în etapa de depanare a
programelor se poate activa sau inhiba generarea aşa-numitelor excepţii la execuţia pas cu pas,
influenţând revenirea la firul de execuţie normal.
• Bitul 17: Modul virtual 8086 VM (Virtual 8086 Mode) - setarea acestui indicator obligă procesorul
să lucreze în modul de lucru protejat, se trece în modul virtual 8086, adică procesorul lucrează cu
segmentele de memorie ca 8086 dar păstrează toate protecţiile de acces la memorie.

Memoria virtuala
• Obiective:
– Extinderea memorie interne peste memoria
externa
– Protejarea zonelor de memorie impotriva unor
accese neautorizate
• Tehnici de implementare:
– Paginarea
– Segmentarea
Segmentarea
• Impartirea memoriei in blocuri (segmente)
• Adresarea unei locatii prin:
– Adresa de segment+Adresa de offset = Adresa fizica
• Atasarea de atribute de acces la fiecare segment
• Avantaje:
– accesul unui program sau task este limitat numai la locaţiile conţinute
în segmentele care i-au fost alocate
– se pot separa zonele de memorie funcţie de destinaţia acestora: cod,
date, stivă
– specificarea adresei relative în cadrul segmentului necesită un număr
mai mic de biţi, ceea ce duce implicit la reducerea lungimii
instrucţiunilor
– segmentele unui program pot fi amplasate în diferite locuri ale
spaţiului de adresare sau pot fi relocatate, cu modificări minore în
codul programului

Registre segment
• Registrul CS conţine adresa de început a segmentului de
cod. Pentru a adresa o instrucţiune,microprocesorul
combină conţinutul registrului segment de cod CS cu al
registrului indicator de adresă, IP, obţinând o adresă fizică
de 20 biţi .
• Registrul DS conţine adresa de început a segmentului de
date ;
• Registrul SS conţine adresa de început a segmentului stivă ;
• Registrul ES conţine adresa de început a unui segment de
date suplimentar. Segmentul de cod conţine instrucţiuni iar
ultimele trei segmente de memorie sunt dedicate operanzilor
(date).
Moduri de funcţionare ale
procesorului 80386
• Funcţionarea în modul real
• Atunci când 8086 este pornit sau după o resetare, acesta este
predispus să lucreze în modul real. Modul real are aceeaşi bază de
funcţionare al 8086, dar permite accesul la registrele de 32 de biţi
specific microprocesorului 80386. Modul de adresare, lungimea de
memorie, gestionarea întreruperilor, sunt identice cu 8086. Toate
intrucţiunile, cu excepţia celor în modul protejat, sunt disponibile.
Mărimea implicită a operanzilor este de 16 biţi. Când se utilizează
registrele şi adresele de 16 biţi se pun prefixele de instrucţiuni.
Capacitatea maximă a unui segment este de 64 Ko iar capacitatea
maximă de memorie este de 1 Mo, în acest fel, liniile A2-A19 sunt
active. Există două zone de memorie fixă rezervate în modul real:
locaţiile de la 00000H la 003FFH sunt rezervate vectorilor de
întrerupere iar locaţiile de la FFFFFFFFOH la FFFFFFFFFH sunt
rezervate pentru iniţializare.

Moduri de funcţionare ale


procesorului 80386
• Funcţionarea în modul virtual 8086
• Mod de lucru dinamic în sensul că procesorul
poate comuta repetat şi rapid între modul
virtual şi protejat
• Unitatea centrală de procesare intră în modul
virtual din cel protejat pentru a executa un
program în 8086 iar apoi trece înapoi în modul
protejat pentru a continua execuţia
programului în 80386
Moduri de funcţionare ale
procesorului 80386
• Funcţionarea în modul protejat
• Performanţa microprocesorului 80386 este obţinută
când funcţionează în modul protejat. Acest mod de
lucru creşte foarte mult viteza de execuţie, spaţiul de
memorie fiind de până la 4 Go (pe 32biţi) permiţând
executarea de programe virtuale în zone de memorie de
orice capacitate. Permite de asemenea executarea
programului 8086, cu o gestionare a memoriei
sofisticată şi protejată. Modul protejat oferă instrucţiuni
suplimentare, care sunt în special indicate, pentru
sprijinirea sistemelor operative multi-sarcină.

Adresarea memoriei în Modul Real


• Adresa este formată din concatenarea dintre
– adresa segment care este memorată în registrele
segment care definesc adresa de început a 64Ko de
memorie segment
– adresa efectivă (ofset) selectează orice locație din
64Ko de memorie segment

• Exemplu: adresa 42000h este generată astfel


4000:2000h (AS=4000h AE=2000h)
Segmentarea memoriei → Gestionarea memoriei

Principiile gestionarii memoriei:


•Segmentele sunt de dimensiuni variabile, strict izolate,
adresare liniară în interiorul segmentului, relativă la baza
segmentului
•Segmentele sunt înzestrate cu proprietăți care permit:
•Personalizarea segmentelor
•Protecția informatiei din segmente
•Segmentele pot fi mutate între memoria interna (fizica) si cea
externa

Exemplu de adresare a memoriei în Modul


real CS:IP(EIP) [1]
Adresarea în Mod Real
Formarea adresei fizice

Adresare liniară ↔ adresare segmentată


(”fizic” ↔ “logic”)

Tipuri de memorii și adresarea lor în


Mod Real

• Memoria de date: DS:SI, DS:DI, DS:BX


– Pentru instrucțiuni de tip string ES:DI

• Memoria program: CS:IP

• Memoria stivă: SS:SP sau SS:BP


Program relocabil
• Modul acesta de segmentare permite
programului DOS să fie relocat în memoria
sistem

• Permite și scrierea funcțiilor în mod real si în


sistem protejat

• Cod și dată relocabile pot fi plasat în orice


zonă a memoriei și executat fără schimbări

Un program aplicație conținând segmentul de cod, date și stivă încărcate în memoria sistem DOS
Segmentele arată o suprapunere deoarece cantitatea de date nu cere 64 Ko de memorie
Se observă cum întreaga arie poate fi mutată fără a fi schimbat adresa de start segment
DOS loader calculează și atribuie adresa de start segment [1]
Memorie virtuală
• Memoria virtuala reprezinta un ansamblu de tehnici si mecanisme
folosite pentru a extinde capacitatea aparentă a memoriei principale
RAM. Astfel, numarul de biti din instructiune, care specifica adresa,
depaseste capacitatea memoriei principale fizic instalata, ca
posibilitati de adresare.
• In aceste conditii, din programul stocat in memoria externa vor fi
aduse in memoria principala numai zonele active la un moment dat.
• Procesul este transparent pentru utilizator si se desfasoara automat.
Spatiul de adresare explorat de bitii de adresa din instructiunile
furnizate de procesor corespunde capacitatii memoriei virtuale.
• Sub aspect fizic memoria virtuala va fi organizata in memoria
secundara.
• Ea se situează între CPU și Hard Disk şi este folosită la multi-
sarcini.

Memorie virtuală
• Dimensiunile unei pagini sunt mult mai mici decât
dimensiunea memoriei principale. În acest mod, în
memoria principală pot fi aduse, din memoria
secundară, mai multe pagini active ale unui program
sau ale mai multor programe, în cazul exploatării
sistemului în regim de multiprogramare

• Programul utilizatorului este constituit dintr-un număr


oarecare de pagini, organizate într-un segment. Prima
pagina, din cadrul fiecarui segment, conţine, pe langa
un identificator de pagina, un identificator de segment
şi numărul de pagini din segmentul dat
Sistem de operare
• Definitie:Sistemul de operare este un strat de software format dintr-o
colectie de programe care ruleaza in mod Kernel (supervisor),
actionand ca un program de control. Acesta se incarca in memoria
interna la pornirea sistemului de calcul si realizeaza interfata
utilizator-hardware, defineste structura sistemului de fisiere si
gestioneaza resursele.

• Rol:Sistemul de operare asigura o interfata (GUI-graphic user


interface sau CLI-commandline interface) intre utilizator si hardware-
este o “arhitectura de mediu”. El reprezinta si un mecanism de
planificare a job-urilor si a proceselor. Activitatea de planificare poate
fi simpla ca in cazul rularii urmatorului proces dintr-o coada de
asteptare, sau poate fi mai complicata, folosind reguli complexe de
alegere a urmatorului proces ce va fi rulat.

Sistem de operare
• Functii: Sistemul de operare indeplineste doua functii de baza: 1. extinderea
masinii si 2. gestionarea resurselor

• 1. Abstractizarea oferita de sistemul de operare este mult mai simpla decat


utilizarea nemijlocita a hardware-ului, acesta ascunzand chestiunile de detaliu.
Functia sistemului de operare este de a prezenta utilizatorului echivalentul unei
masini extinse/ virtuale, care este mai usor de programat decat hardware-ul
existent. Sistemul de operare furnizeaza o serie de sercivii, pe care programele le
pot obtine utilizant instructiuni special numite Apeluri de sistem

• 2. Cea de-a doua functie asigura alocarea ordonata si controlata a procesoarelor,


memoriilor si dispozitivelor de I/E diferitelor programe care intra in competitie
pentru ele. Sistemul de operare trebuie sa urmareasca cine si ce resurse foloseste,
sa aloce resursele solicitate, sa tina cont de folosirea acestora si sa medieze cererile
care intra in conflict,pentru evitarea blocajelor. Asadar, sistemul de operare permite
utilizarea eficienta asistemului, oferind fiecarui utilizator/program o “felie” din
totalul resurselor, desfasurand in paralel mai multor activitati si inlaturand irosirea
ciclurilor de ceas. Partajarea resurselor se poate face in timp, diferitele programe
sau utilizatori folosindu-le pe rand sau in spatiu,resursa fiind divizata la mai multe
programe
Modul Protejat
- Este locul unde se execută Windows
- Adresarea acestei secțiuni extinse cere o schimbare a segmentului plus o schemă a
ofsetului folosită în modul real de adresare

• Când date sau cod sunt adresate în memoria extinsă, adresa de ofsetul este încă
utilizată la accesarea informației plasată cu memoria segment

• In locul segmentului de adresă acesta conține selectorul care selectează un


descriptor din tabelul de descriptori

• Descriptorul specifică locația memoriei segment, lungimea și dreptul de acces.


Indirect registrul segment selectează încă segmentul

• Deoarece registrul de segment și adresa de offset încă accesează memoria,


instrucțiunile folosite în modul protejat sunt identice cu cele din modul real

• Diferența între moduri este felul de a interpreta segmentele cât și numărul de biți
alocați adresei de ofset (la 386 este de 32 biți în loc de 16 biți alocați în modul real)
– 32 biți permite accesul a 4Go de locații dintr-un segment (Intel 80386)

De ce protecție?

• Protecție – pentru a nu permite suprapunerea


de date sau scrierea în zona de date sau
program a Sistemului de Operare
Definiții
• Procese. Tabela de pagini împreună cu contorul programului (PC) și registrele
microprocesorului formează împreună starea unui anumit program. Unul dintre
registrele microprocesorului (numit PTR - Page Table Register) conține adresa
la care este încărcată tabela de pagini. Se numește proces (task) un program
împreună cu starea asociată acestuia. Un proces executat curent este activ, altfel
el este inactiv.
• Comutarea de task-uri constă în inactivarea procesului curent și activarea altui
proces, inactiv până acum. Pentru aceasta este necesară salvarea și respectiv
restaurarea stării proceselor. Desigur, sistemul de operare (SO) trebuie doar să
reîncarce PTR pentru a indica tabela de pagini aferentă noului proces activ.
• Excepția Page Fault (PF). Acest eveniment apare în cadrul mecanismului de
translatare a adresei virtuale în adresă fizică. Dacă bitul P (pagină lipsă în
memoria principală) are valoarea zero, rezultă că printr-o procedură de excepție
se dă controlul unui handler al SO în vederea tratării. Aici, SO va trebui să
decidă ce pagină din MP va trebui evacuată în vederea încărcării noii pagini de
pe disc în general aici se merge pe ideea LRU (Last Recently Used), adică va fi
evacuată pagina care nu a mai fost accesată de către CPU de cel mai mult timp
(se merge deci implicit pe principiul localității temporale).

Proces:

•execuția unuia sau mai multor programe

•nivelul de privilegiu este dinamic (după


programul în curs de rulare)

•atribute: spatiul adreselor, utilizarea registrelor,


stiva, date
• Memoria virtuala o alfel de definiţie totalitatea
hartii logice a memoriei care poate fi formata prin
concatenareanumarului maxim de segmente ce
pot fi definite, fiecare presupus la dimensiunea
maxima.
• Cuprinde totalitatea resurselor de memorie ale
microcalculatorului (interne si externe), limitele
fizice fiind transparente utilizatorului
Adresa logica (AL) ↔ Adresa fizica (AF)
Adresa virtuala (AV) ↔ Adresa fizica (AF)
• Gestionarea memoriei: mecanism de translatare a
adreselor virtuale în adrese fizice
Gestionare ↔ Protectie, Multiprocesare
Mod real ↔ Mod virtual (protejat)

Selector și descriptor
• Un selector poziționat în registrul segment, selectează unul din 8192 descriptori de
la una din două tabele de descriptori

• Exemplul
• Dacă în modul real codul segment începe la locația 00080h, în modul protejat acest
număr poate adresa orice locație de memorie din întregul sistem pentru segmentul
de cod

• Există două tabele de descriptori unul cu descriptori globali și altul cu locali


• Descriptorii globali conțin definițiile segment aplicate la tot programul = descriptor
sistem
• Descriptorii locali sunt unici doar unei aplicații = descriptor aplicație
Descriptor
• Exemplu
• Fiecare tabel de descriptori are 8192 descriptori în total în cele 2 tabele vor
fi 16384 – pentru fiecare aplicație pot fi descriși 16384 segmente de
memorie.
• Dacă lungimea unui segment este de 4Go, aceasta ar însemna că o aplicație
poate accesa 4G*16384 octeți = 64To

• Zona adresei de bază a unui descriptor indică locația de început a


memoriei segment
– Exemplu la 80286 adresa de bază este pe 24 biți, deci segmentul începe
la orice locație în 16Mo de memorie

a) Descriptorii segmentelor: permit identificarea


segmentelor uzuale de lucru (de programe si/sau de
date)
b) Descriptorii speciali de control:
1. Descriptorii segmentelor de sistem – pentru
segmente care sunt folosite de microprocesor în
mecanismul gestionarii memoriei
2. Descriptorii "segmentelor de stare a proceselor"
– pentru implementarea mecanismului
multiprocesarii
3. Descriptorii "portilor" – pentru protectia multi-
nivel, multiprocesare, raspuns la cererile de
întreruperi
Segment: “cuanta” de memorie cu atribute de protectie precizate
•segmentare ¬ modularizare programe
•atributul de arhitectura pentru un segment este un SELECTOR
•între SELECTOR si segmentul vizat este un DESCRIPTOR
DESCRIPTOR-ul permite:
- rezervarea unei zone de memorie pentru segment
- definirea dimensiunii segmentului în functie de cantitatea de
informatii care trebuie stocata
- restrictionarea accesului în segment
Proces:
•executia a unul sau mai multe programe
•nivelul de privilegiu este dinamic (dupa programul în curs de
rulare)
•atribute: spatiul adreselor, utilizarea registrelor, stiva, date

Exemple de descriptori [1]


Modul de selectare al adresei desenat
dupa [1]

Adresarea memoriei [2]

Memoria
4G0
15 0 31 0
Selector Adr. offset
31 0
Adr. fizica
Adresa de segment +
Lungime
Acces 0
Descriptor de segment
Adresarea memoriei [2]
Selector
Index TI RPL
0 1
GDT LDT
*8

Descriptor + Descriptor
+
Descriptor

+
GDTR LDTR
Adresa *8 Selector

Translarea adresei virtuale [2]


Tabele de descriptori
• GDT - General Descriptor Table
– contine descriptorii pentru segmente comune
– o singura tabela GDT pe sistem
• LDT - Local Descriptor Table
– contine descriptorii pentru segmentele alocate unui task
– fiecare task are propriul tabel LDT
• IDT - Interrupt Descriptor Table
– contine descriptorii segmentelor care contin rutinele de
tratare a intreruperilor
– un singur tabel pe sistem

• Tabela GDT (Global Descriptor Table) conţine o descriere completă a spaţiului


global de adrese şi este unică.

• Tabelele LDT (Local Descriptor Table) conţin descriptori ai spaţiului de adrese local
fiecărui task.

• Un task se caracterizează prin perechea de tabele GDT (comună tuturor task-urilor)


şi LDT (specific fiecărui task). Tabela GDT, fiind unică pentru toate task-urile, nu
are nevoie de descriptor. Adresa de bază şi dimensiunea ei sunt păstrate într-un
registru special, GDTR (Global Descriptor Table Register). Analog există un registru
LDTR, care memorează adresa de bază şi mărimea tabelei LDT curente asociată cu
task-ul în execuţie.

• Registrele GDTR şi LDTR sunt accesibile numai sistemului de operare, prin


intermediul unor instrucţiuni specifice.

• Fiecare task îşi are propria tabelă LDT, care conţine descriptorii segmentelor de cod
şi date utilizate. De asemenea, task-ul poate avea propria tabelă a vectorilor de
întrerupere (IDT –Interrupt Descriptor Table), care conţine descriptorii vectorilor de
întrerupere specifici task-ului.

• Tabela IDT are aceeaşi structură ca tabela DT. Accesul la aceste tabele pentru citire
şi scriere se face prin instrucţiuni specifice: LGDT, SGDT, LLDT, SLDT, LIDT,
SIDT ( Load /Store Global / Local / Interrupt Descriptor Table Register).
Selector și Descriptor
• La I80386 adresa de bază este pe 32 biți aceasta permite segmentelor să înceapă de
oriunde în 4Go de memorie
• Segmentul limită conține adresa ultimului offset găsit în segment, adresa de bază
este F00000h și limita este FFh
– Pentru 286 adresa de bază este F00000h și limita este 00FFh
– Pentru 386 adresa de bază este 00F00000H și limita este 000FFH
– Notă: 286 este limitat la 16 biți (acesează memorie între 1-64Ko) iar 386 până
la Pentium 4 până la 20 biți (accesează memorie între 1Ko-1Mo sau 4Ko-4Go)
• Bit de granularitate (G) – specific doar de la procesoarele I80386 – Pentium 4
• Dacă G=1 valoarea limită este înmulțită cu 4Ko (FFFh) limita este atunci
00000FFFFh a FFFFFFFFFh, aceasta permite o lungime a segmentului de la 4Ko-
4Go în pași de 4Ko.
• Exemplu DOS rulează pe 16 biți (se referă la adresa de ofset pe 16 biți) iar
windows pe 32 biți
• În componența descriptorului se mai găsește un bit L (large) pe care Intel l-a
denumit 64 biți deoarece selectează 64 biți de adresă, cu 64 extinși când este L=1
(Pentium 4 sau Core2 ) și 32 biți când L=0

Exemple de calcul
• Exempul 1.
• Unde începe și se termină segmentul dacă adresa de bază este
10000000h, limita este 001FFh și G=0
• Baza =Start= 10000000h
• G=0
• Sfârșit=Baza +limita=10000000h+001FFh=100001FFh

• Exemplul 2.
• Aceleași date ca ex.1 cu G=1. Limita este de FFFh
• Baza=Start=10000000h
• G=1
• Sfârșit=Baza+limita=10000000h+001FFFFFh=101FFFFh
Selector și Descriptor. Descriere pe bit

• Bitul AV (386) este utilizat de unele sisteme de operare


pentru a indica dacă segmentul este valabil sau nu.

• Bit D indică cum sunt registrele de acces al


instrucțiunilor și memoria de date (de la 386 până la
Core2) în mod real sau protejat
– Dacă instrucțiumile sunt pe 16 biți – compatibile cu 8086-
80286 (se folosește 16 biți adresă de ofset și registre pe 16
biți (folosit de DOS)
– Dacă instrucțiunile sunt pe 32 biți (adresa de ofset și
registre pe 32 biți) se poate lucra atât pe 16 cât și 32 biți

Descriptori pentru segmente de cod si date [1]

15 0
Limita 15..0
1,0
3,2 Baza 15 ..0

5,4 P DPL DT Tip Baza 23 ..16

7,6 Baza 31 ..24 A D G AV Lim 19..16

Baza - adresa de început (32 b) G - granularitate:


Limita - dimensiunea segm. (20b) 0 - octet; 1- 4ko
P - prezenta
Tip: - tipul segmentului
1 -prezent in mem.
DPL - Descriptor Privilege Level
D - dimensiuna implicita
DT - Dtype (1 pt. cod si date, 0 pt. 0- 16b; 1-32b
sist. si poarta) AV - disponibil pt. progr.
A - accesat
1. Verificări la încărcarea selectorului:
1.A – Verificarea tipului de segment relativ la registrul
segment folosit; câmpuri implicate: S, P/D, ED
1.B – Verificarea existentei descriptorului pentru segmentul
vizat; câmpuri implicate: ACCES
1.C – Verificarea daca segmentul vizat este în memoria
interna; câmpuri implicate: P
1.D – Verificarea respectarii regulilor nivelelor de privilegii;
câmpuri implicate: DPL, C

2. Verificari la încarcarea descriptorului în registrul cache:


2.A – Verificarea daca sunt respectate limitele segmentului;
câmpuri implicate: LIMITA, ED
2.B – Verificarea daca segmentul este folosit conform
atributelor din octetul ACCES; câmpuri
implicate: W, R

Conținutul registrului segment în timpul


lucrului în Mod Protejat la 80286 [1]
• Pentru Intel 80286:
• AV ≡ adr32
• AE ≡ adr16; dimensiunea maxima a unui segment = 216 B =
64 kB

• SELECTOR ≡adr16; numai 14 biti din selector sunt folosiţi


pentru definirea segmentelor

• nr. maxim de segmente = 214 (16 k segmente)

• Dimensiunea memoriei virtuale: 214 segmente * 216


B/segment = 230 B = 1 GB

• AF ≡ adr24 Harta memoriei fizice are 224 B = 16 MB

• Pentru Intel 386, 486, Pentium:


• AV ≡adr48
- AE ≡ adr32;
- dimensiunea maxima a unui segment = 232B = 4GB
- SELECTOR ≡ adr16;
- nr. maxim de segmente = 214 (16k segmente)
• Dimensiunea memoriei virtuale:
• 214 segmente * 232 B/segment = 246 B = 64 TB
• AF ≡ adr32 Harta memoriei fizice are 232 B = 4GB
• TI = 0 → spaţiul adreselor globale cu 213 segmente
• TI = 1 → spaţiul adreselor locale cu 213 segmente
Tipul sectorului [2]

Tipul sectorului
• Pt. segment de cod: • Pt. segment de date
– E - executable
– E - (executable)
• =1 pt. segment de cod
• =0 pt. segment de date
– C - conforming
– ED - expansion direction:
• 0- accesibil pt. CPL=DPL
• 1- accesibil pt. CPL<DPL • 0 - extindere spre adrese mari
– R - readable • 1 - extindere spre adrese mici
• 0- nu se poate citi (numai – W - writeable
executa) • 0 - nu se poate scrie
• 1 - se poate citi • 1 - se poate scrie
– A - (accessed) – A - accessed
• 0- neaccesat
• 0- neaccesat
• 1- a fost accesat
• 1- a fost accesat
Anatomia descriptorului de segment
redesenat dupa [1]

[2]
LTDR și GTDR
• Limita fiecărui tabel de descriptor este pe 16 biți pt că lungimea maximă a tabelei este de
64Ko
• Când se operează în mod protejat adresa tabelei de descriptori globali și limitele sale
sunt încărcate în GDTR
• Înaintea utilizării modului protejat, tabela de descriptori de întreruperi (IDTR ) trebuie de
asemenea inițializat
• Locația tabelei de descriptori locali este selectată de la tabelul de descriptori globali, unul
din descriptorii globali este setat să adreseze tabela de descriptori locali
• Accesarea tabelului de descriptori locali, LDTR este încărcat cu un selector - Acest
selector accesează tabela de descriptori globali și încarcă adresa, limita și dreptul de acces
a tabelei de descriptori locali în zona cache a LDTR
• Registrul de sarcini (TR) păstrează un selector, care accesează descriptorul ce definește
sarcinile
• O sarcină este adesea o procedură sau un program de aplicații
• Descriptorul pentru proceduri sau program de aplicații este salvat în tabela de descriptori
globali, deci acccesul poate fi controlat prin nivele de privilegii.
• Schimbarea sarcinilor permite procesorului să schimbe între sacrini într-un timp f scurt
(17micros) ceea ce permite sisteme multisarcini

Translarea adresei în spațiul


adreselor globale folosind GTDR [2]
Explicații fig precedentă [2]

Accesarea adreselor locale folosind


GDTR [2]
Concluzii cu privire la informatiile
din descriptori
• BAZA si LIMITA localizeaza si definesc marimea
segmentului; ED reglementeaza modul în care se
interpreteaza LIMITA
• P si A asista sistemul de operare la schimbul
informatiei între memoria interna si externa
• S indica tipul se segment vizat: de sistem (LDT),
de date, de program
• R si W definesc modul de acces al informatiei în
segmente – protectie
• DPL si C asigura protectia conform mecanismului
privilegiilor multi-nivel
Registre program invizibile
Procesorul 80286 Core2 conține registre program invizibile care specifică adresa memoriei
sistem unde se găsesc tabelele de descriptori locali și globali

Acestea nu sunt adresate direct prin soft de unde le vine și numele de invizibile
Totuși unele sunt adresate de sistemul soft
Acestea controlează microprocesorul când operează în mod protejat

Fiecare registre segment conțin o zonă de program invizibilă utilizată în mod protejat numită și
memorie cache deaoarece este orice memorie ce conține informații (nu trebuie confundat cu
cache L1 sau L2 aflată în microprocesor)
Zona de program invizibilă a registrelor segment este încărcat cu adresa de bază, limita și
dreptul de acces de fiecare dată când numărul registrului segment este schimbat

Când un nou segment este plasat în registrul segment, microprocesorul accesează tabela de
descriptori și încarcă descriptorul în zona de program invizibilă a registrului segment

Acesta permite procesorului să repete accesul la memoria segment fără să se facă referire la
tabela de descriptori
Registrul tabelei de descriptori globali (GDTR) și registrul tabelei descriptorului de întrerupere
(IDTR) conțin adresa de bază a tabelei de descriptori și limitele sale

Registre de program invizibile


pentru 286 - Core2 (cache) [1]
Paginare
• Impartirea memoriei interne si externe in blocuri (pagini) de
lungime fixa
• Incarcarea in memoria interna a paginilor care au
probabilitatea cea mai mare de a fi utilizate in viitorul apropiat
• Implementare similara cu memoria cache
• Probleme de proiectare:
– dimensionarea optimă a paginii
– amplasarea în memorie a unei noi pagini
– regăsirea paginilor în memorie
– selectarea paginilor care se descarcă din memorie
– implementarea operaţiilor de scriere.

Paginarea memoriei
• Mecanismul paginării memoriei permite oricărei locații
de memorie fizică să fie asignată la orice adresă liniară
• Adresa liniară este definită ca adresa generată de
program
• Paginare= descompunerea memoriei în subdiviziuni
logice
• Diferența dintre pagină și segment
– Paginile sunt de dimensiuni fixe , concatenate
• Mecanismul paginării poate să însoțească sau nu
mecanismul gestionării memoriei
• Mecanismul paginării a fost introdus de Intel la
procesoare pe 32 biți
Paginare prin tehnica asociativă [1]

Paginarea memoriei
Există posibilitatea de a folosi memoria în mod paginat şi sub V86. Această opţiune poate fi
luată în consideraţie într-una din următoarele situaţii :
-Pentru uşurinţa mapării suplimentului de aproximativ 65kb ce excede spaţiul normal pe 20
biţi, de 1Mb;
-Pentru a crea un spaţiu virtual mai mare decât cel fizic existent;
-Pentru a pune la dipoziţie un cod comun mai multor programe 8086 în derulare pe aceeaşi
maşină, economisîndu-se spaţiu;
-Pentru a reorienta referirile la resurse I / O mapate pe zona de memorie ( caz mai rar
întâlnit).
Mecanismul de paginare preia adresa liniară generată de mecanismul de segmentare în mod
protejat şi o transformă în adresă fizică. Aceasta se face cu ajutorul unor tabele numite DT
( Directory Table, tabelul directorilor de pagina ) şi PT (Page Table, tabel de pagini ).
DT conţine 1024 intrări. O intrare în DT conţine adresa de început a unei tabele de
tip PT. Şi acest tip de tabelă are 1024 intrări. O intrare în PT conţine adresa de început a
paginii de memorie în care se face accesul. Deplasamentul în aceasta tabelă reiese din
câmpul Deplasament al adresei liniare.
Se pot astfel adresa 1024*1024 = 1M pagini fiecare a 4ko fiecare, deci rezultă un total de
4Gb.
Mecanismul de paginare poate fi activat / dezactivat prin setarea / resetarea rangului PG al
registrului CR0 ( Control Register ).
• AL → DIRECTOR↑ -TABELA↑ OFFSET
în care:
a) DIRECTOR este un câmp de 10 biti. Acestia,
concatenati cu 00, formeaza adresa relativa la baza a
elementului vizat din director. Concatenarea cu 00 este
normala pentru ca un element are 4 B, deci
informatia este "aliniata" din 4B în 4B
b) TABELA este un câmp de 10 biti. Tot prin concatenare
cu 00 formeaza adresa relativa la baza a
elementului selectat dintr-o tabela a paginilor
c) OFFSET este un câmp de 12 biti care localizeaza
informatia în pagina selectata. Evident si aceasta
adresa este relativa la adresa fizica a bazei paginii

Format pentru adresa liniară (a) și a


directorului de pagină (b)[1]
Format pentru adresa liniară (a) și a
directorului de pagină (b)
• Primii 10 biți indică intrarea în director de pag
• La adrese liniare 00000000H–003FFFFFH, este accesat primul director de pagină
• Fiecare intrare a directorului pagină reprezintă sau repaginează o secțiune de 4Mo a sistemului de
memorie
• Conținuturile directorului de pagină selectează o pagină tabel aceasta este indexată de următorii 10
biți de adresă liniară (poziția 12-21 a biților) (Adresa 00000000H–00000FFFH)
• Partea de ofset a adresei liniare (0-11biți) următoare selectează un octet în pagina de memorie de
4ko.
• Dacă intrarea 0 a tabelei de pagini conține adresa 00100000H, atunci adresa fizică este
• 00100000H-00100FFFH pentru adresa liniară 00000000H–00000FFFH. Aceasta înseamană când un
program accesează locații între 00000000H și 00000FFFH, adresa fizică a microprocesorul adresează
fizic adresa 00100000H–00100FFFH.
• Deaoarece acținea de repaginare a 4Ko de memorie cere acces la directorul de pagină și la tabelul
de pagină, amândouă localizate în memorie (Intel) încorporează un tip special de cache numit TLB
translation look-aside buffer).

• La 486, cahe reține adresele a 32 cele mai recente pagini translate. Aceasta însemnă că dacă acceași
arie este accesată, adresa este deja prezentă în TLB și accesul la directorul paginii și la tabelul de
pagini nu mai e cerut

• De la Pentium–Pentium 4 conțin TLB separat pentru fiecare instrucțiune și cache de date


Exemplu de paginare [2]

AL → DIRECTOR↑­ TABELA­↑OFFSET
în care:
a) DIRECTOR este un câmp de 10 biti. Acestia,
concatenati cu 00, formeaza adresa relativa la baza a
elementului vizat din director. Concatenarea cu 00
este normala pentru ca un element are 4 B, deci
informatia este "aliniata" din 4B în 4B
b) TABELA este un câmp de 10 biti. Tot prin
concatenare cu 00 formeaza adresa relativa la baza a
elementului selectat dintr-o tabela a paginilor
c) OFFSET este un câmp de 12 biti care localizeaza
informatia în pagina selectata. Evident si aceasta
adresa este relativa la adresa fizica a bazei paginii
Registre de pagini. Descriere
• Unitatea paginei este controlată prin conținutul registrelor de control CR0-CR4 (de la 386-Core2)

• Mecanismul paginării funcționează si în mod real și virtual

• Începând cu Pentium CR4 este extins putând controla pagini de 2-4Mo


• Cele mai importante registre de control sunt CR0-CR3
• Descriere biți CR0
– PG=1 – adresa liniară este convertită în adresă fizică folosind mecanismul paginării
– PG=0 – adresa liniară generată de program devine adresă fizică folosită la accesarea memoriei

• CR3 conține baza directorului de pagină sau rădăcina adresei și biții PCD și PWT care controlează
operațiile pinilor PCD și PWT pe procesor
• Dacă PCD este setat pinul PCD devine 1 logic în timpul ciclurilor care nu sunt paginate. Acesta permite un
control hard extern a memoriei cache de nivel 2 (memorie internă funcționează ca un buffer între
microprocesor și sistemul de memorie DRAM)
• PWT este utilizat ca și PCD pentru controlul scrierii în cache în lipsa paginării
• Adresa bazei directorul de pagină localizează directorul pentru unitatea de translare a paginii.
– Obs.adresa localizează directorul de pagină la orice 4Ko limită în memorie deoarece el este anexat
intern la 000h. Directorul de pagină conține 1024 directori de 4octeți fiecare. Fiecare director
adresează o pagină tabel ce conține de 1024 intrări
Structura registrului de control la
microprocesoare [1]

Director de pagină și tabel de pagină


• Figura de mai jos arată director de pagină câteva
tabele de pagină și câteva pagini de memorie

• Directorul de pagină conține 1024 cuvinte duble de


adrese aceasta localizează mai mult de 1024 pagini de
tabele. Directorul de pagină și fiecare tabelă de pagini
sunt de 4ko în lungime

• Dacă o entitate de 4Go este paginată, sistemul trebuie


să aloce 4ko de director de pag și 4Ko x1024 sau
4Mopentru 1024 tabele de pag. Aceasta înseamnă o
investiție serioasă în memoriae.
Mecanismul paginării la 386 Core2 [1]

Director de pagină, pagina tabel 0 și două pagini de


memorie. Adresa paginii 000C8000-000C9000 este
mutată la 00110000-00110FFF [1]
Modul liniar
• Modul memorie liniar conține octetul 1T de
memorie folosind o adresă pe 40-biți. În
viitor, Intel intenționează să crească
lățimea adresa de la 52 de biți pentru a
accesa bytes 4P de memorie. Modul liniar
este disponibil doar la Pentium 4 și Core2
care au propriile lor 64-biți extensii activat.

64 de biți la modelul de memoria uniformă[1]


REZUMAT
1. Modelul de programare a 8086 prin 80286 fcon’ine registre pe 8-16 bi’I iar pe 80386
pe 8, 16, 32 biți numiți și registre extinse.Microp 386 are și registrele segment FS și
GS.
2. Registre pe 8 biți de la 8086 AH, AL, BH, BL, CH, CL, DH și DL sunt AX, BX, CX,
DX, SP, BP, DI, și SI pe 16 biți devenind EAX, EBX, ECX, EDX, ESP, EBP, EDI, și
ESI format extins pe 32 biți. La Pentium 4 sunt pe 64 biți având denumirile RAX,
RBX, RCX, RDX, RSP, RBP, RDI, RSI și R8 până la R15.
Denumirea registrelor care conțin adresă de cod (IP/EIP/RIP) și a registelor de stare
(FLAGS, EFLAGS, or RFLAGS).
3. Toate modurile de adresare a memoriei în mod Real se realizează printr-o combinație
dintre adresa segment concatenată cu patru de zero în binar la care se adună adresa
efectivă. Adresa fizică fiind reprezentată pe 20 biți.
• Registrul CS conţine adresa de început a segmentului de cod. Pentru a adresa o
instrucţiune,microprocesorul combină conţinutul registrului segment de cod CS cu
al registrului indicator de adresă, IP, obţinând o adresă fizică de 20 biţi .
• Registrul DS conţine adresa de început a segmentului de date care va fi combinată
cu adresa efectivă conținută în BX, DI, SI.
• Registrul SS conţine adresa de început a segmentului stivă ;
• Registrul ES conţine adresa de început a unui segment de date suplimentar.
Segmentul de cod conţine instrucţiuni iar ultimele trei segmente de memorie sunt
dedicate operanzilor (date).

REZUMAT
4. Operațiile în mod protejat permit accesarea a 1Mo de memorie
(80286 - Core2). Aceasta extindere se realizeză ca în modul real
diferența fiind că adresa segment este memorată într-un descriptor
selectat cu un registru segment.
5. Descriptorul conține adresa de bază, limita și proprietăți. Baza
localizeză adresa de start a memoriei segment, limita definește ultima
locație a segmentului. Proprietățile definesc cum segmentul de
memorie este accesat via program.
La 80286 se permite un segment de memorie de 16Mo de memorie
folosind 24 biți pentru adresa de bază. De la 386 avem 4Go de memorie
folosind 32 biți pentru adresa de bază. La 286 limita este 64 ko folosind
16 biși iar de la 386 1Mo folosind 20 biți.
6. Registrul segment conține 3 câmpuri (13 biți adresează 8192
descriptori din tabela de descriptori globali sau locali, precizarea fiind
facută de bitul TI; următorii 2 biți cei mai prioritari din dr. Ne dă
informații despre nivelul de prioritate pentru accesarea segmentului de
memorie.
7. Registrele de program invizibile sunt utilizate în selectarea tabelelor de
descriptori. Acestea conțin o zonă de memorie cache ce conține parametrii
unui selector: adresa de bază, limita și proprietăți. Cache-ul permite
microprocesorului să acceseze un segment de program fără să se mai refere la
tabela de descriptori până când conținutul registrului segment se schimbă.
8. Pagina de memorie este de 4ko. Adresa liniară, generată prin program se
mapează în orice adresă fizică prin mecanismul paginării (de la 80386 la
Pentium xx).
8. Paginarea memoriei este realizată prin registrele de control CR0 și CR3.
Bitul PG de la CR0 validează paginarea și conținutul lui CR3 adresează
directorul de pag. Directorul de pag conține peste 1024 adrese a tabelelor de
pag. Care sunt utilizate să acceseze tabelele de pag. Tabela de pag conține
1024 intrări ce localizează adresa fizică a 4Ko de pag de memorie.
9. TLB (translation look-aside buffer) cache are 32 cele mai recente translații
de pag de tabel. Acesta include translarea paginii tabelului dacă s-a executat
deja această operație, crescând viteza de execuție.
10. Memoria liniară conține 1To de memorie folosind 40 biți pentru adresare.

S-ar putea să vă placă și