Documente Academic
Documente Profesional
Documente Cultură
Capitolul III
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
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.
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.
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
Sistem de operare
• Functii: Sistemul de operare indeplineste doua functii de baza: 1. extinderea
masinii si 2. gestionarea resurselor
• Când date sau cod sunt adresate în memoria extinsă, adresa de ofsetul este încă
utilizată la accesarea informației plasată cu memoria segment
• 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?
Proces:
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
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
• Tabelele LDT (Local Descriptor Table) conţin descriptori ai spaţiului de adrese local
fiecărui task.
• 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
15 0
Limita 15..0
1,0
3,2 Baza 15 ..0
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
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
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
• 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
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)
• 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]
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.