Sunteți pe pagina 1din 91

CURS 1

8080 - al doilea microprocesor pe 8 biti (1974)


• Latimea magistralei: 8 biti; Memoria adresabila: 64K x 8 biti.
• Setul de instructiuni a crescut in numar si performanta. Instructiunile
erau executate de 10 ori mai rapid decat 8008 (e.g. 2 microsecs pentru
o adunare).
• Aplicatiile: similare microprocesoarelor precedente.

8086 – Primul microprocesor pe 16 biti (1978).


• Latimea magistralei: 16 biti;
• Memoria adresabila: 1MByte;
• Setul de instructiuni : se extinde cu instructiuni de inmultire si impartire;
• Numarul si complexitatea instructiunilor reprezinta elementele care incadreaza acest
microprocesor in categoria CISC - complex instruction set computers.
• Intel extinde familia 8086 cu introducerea 80186 si 80188, si adauga coprocesorul
8087 (procesorul matematic pentru operatii in virgula mobila).
• 8088 a fost utilizat de IBM Corporation in PC-uri (calculatoare personale). Primele
aplicatii ale PC-urilor erau masini de procesare a cuvintelor sau mini-calculatoare.

• 80386 (SX/DX)- Primul microprocesor pe 32-biti.


• Procesorul opera la frecvente de 16-33 MHz pe magistrala sistemului si
putea fi acompaniat de 80387 FPU.

• 80486 (SX/DX2/DX4)
• Unitatea Centrala de Prelucrare (UCP) pe 32 biti.
• 8KB de L1 cache si FPU integrat in chip.

• Pentium: (1993)
• Initial numit P5 sau 586
• Microprocesor pe 32-biti, latimea magistralei de date de 64-biti
• 32-biti magistrala de adrese - memorie adresabila: 4GB.
• Frecvente de ceas de 60, 66, 90 MHz.
• Tehnologie superscalara.• Aplicatii: realitate virtuala; video comparabile cu televiziunea
comerciala
CURS 2

Caracterisitici Microporcesor :

• Microprocesoarele extrag instructiunile din memorie.


• Au o structura interna formata din mai multe unitati de procesare (UP), fiecare unitate efectueaza
un anumit task.
• Microprocesoarele moderne proceseaza simultan mai multe instructiuni in etape de executie
diferite. Aceasta abilitate se numeste pipelining.

Operarea normala a microprocesorului 8080 este urmatoarea:

Structura interna a microprocesorului 80486


• 80486 contine mai multe unitati interne.Fiecare unitate este proiectata sa lucreze ca
intr-o conducta cu instructiuni in diferite etapede executie.
• Unitatea de interfata cu magistrala (Businterface unit (BIU)) este responsabila cu
extragerea instructiunilor si cu citirea/ scrierea datelor intre procesor si memorie.
• 8KB memorie cache pastreaza cele mairecente date si instructiuni.
• Coada de instructiuni cu 32 octeti deinstructiuni neexecutate este numita prefetcher
• Decodificatorul de instructiuni decodifica instructiunile pentru a fi utilizate de EUs .
• Unitatile de executie sunt: floating point unit (FPU), control and protection test unit, paging
unit, segmentation unit, arithmetic and logic unit (ALU).
• Unitatea de adrese (Address Unit (AU)) genereaza adresele fizice.
Arhitectura sistemului

Comunicatia dintre sistem si


microprocesor are loc prin
trei magistrale: de adrese,
de date si de control.
Orice sistem cu
microprocesor are intrari
pentru alimentarea cu
tensiune si pentru semnalul
de ceas (clock).

Semnalul de ceas (clock) este cel care guverneaza viteza de operare a microprocesorului
si este semnalul de ceas al tuturor circuitelor secventiale din sistem. Acest semnal
determina cand au loc evenimente in hardware. Ciclurile de ceas sunt intervale de timp
discrete. In proiectare se foloseste fie lungimea unei perioade de ceas (ex. 250
picosecunde), fie frecventa de ceas (ex. 4GHz) care este inversul unei
perioade de ceas.

• Magistrala de adrese (iesiri din microprocesor).


• Transmite o adresa catre sistem, adresa de memorie sau adresa portului de
intrare/iesire catre sistemul de intrari/iesiri.
• Specifica o locatie de memorie sau un port I/O.
• Latimea magistralei de adrese determina câtă memorie poate fi adresata de un
procesor.

• Magistrala de adrese (iesiri din microprocesor)


• Lungimea adresei logice a unui microprocesor poate fi mai mare decat cea a adresei
fizice.
• Unele microprocesoare folosesc aceleasi linii de adresa pentru operatii cu memoria sau
I/O, altele au un pin M/IO\ pentru a distinge intre operatiile cu memoria sau I/O.

• Magistrala de date
• Transfera date intre microprocesor si memorie sau sistemul I/O.
• Latimea magistralei de date determina câ_i octeti sunt transferati la
un moment dat intre microprocesor si memorie.
• Multiplexarea in timp se poate folosi pentru a reduce numarul de pini ai unui
microprocesor.

• Magistrala de control
• Ofera semnalele de control ce pot cauza efectuarea unei operatii de citire sau scriere in
memorie sau I/O.
• Majoritatea sistemelor au cel putin 4 semnale de control in aceasta magistrala (active
pe 0).
• MRDC\ (Memory ReaD Control)
• MWRC\,
• IORC\ (I/O Read Control),
• IOWC\.
• Latimile magistralelor de date si adrese variaza de la o versiune la alta de
microprocesor. In general, cu cât este mai lată magistrala de date, cu atât
microprocesorul este mai rapid.

Semnificatia pinilor:

• RESET – pin de RESET, trebuie ținut timp de 4 cicluri mașină pe 1. Adresa de reset
este FFFF0h; la reset este șters bitul de stare a intreruperilor (IF) – sunt dezactivate
întreruperile.
• CLK – oferă semnalul de bază de ceas pentru microprocesor.
• Vcc – 5V
• GND – masă
• READY – pin de intrare care permite stărilor de WAIT în funcționarea
microprocesorului.
Când este 0 microprocesorul intră în stare de așteptare și nu efectuează alte operații.
• INTR – Interrupt request – linie de întrerupere externă hardware, dacă
IF=1 UCP intră în ciclul de tratare a întreruperii după finalizarea instrucțiunii curente.
• INTA\– Interrupt acknowledge –
răspuns la INTR.
• NMI – Non-maskable interrupt – similar cu INTR dar nu testează IF.
• TEST\ – este testat de instrucțiunea WAIT. Dacă este 0 instrucțiunea WAIT
funcționează ca o operație NOP. Dacă este 1 instrucțiunea WAIT așteaptă până la
tranziția în 0. Utilizat în conjuncție cu coprocesorul matematic.
• HOLD – pin de intrare care indică solicitarea unui ciclul DMA. Dacă este 1
microprocesorul oprește execuția programului și trece liniile de magistrală în stare de
impedanță mărită.
• HLDA – Hold acknowledge, confirmarea procesorului că a intrat în starea de HOLD.
• AD15-AD0 – linii multiplexate de date și adrese (la 8088 liniile A15-A8 conțin doar
partea high a adresei)
• ALE – semnal de control pentru memorarea adresei
• RD\, WR\ – semnale ce indică un ciclu magistrală de citire, scriere. Atâta timp cât sunt 0
datele sunt valide pe magistrală.
• M/IO\ – diferențiază ciclurile magistrală cu referire la memorie sau la porturile I/O
• DT/R\ – Data transmit/receive – microprocesorul transmite (1) sau recepționează (0)
date pe magistrală. Utilizat pentru a comanda buferele de pe magistrala externă de date.
• DEN – Data bus enable – activarea buferelor de pe magistrala externă de date.
• A19/S6 – A16/S3 – Linii de adresă / status multiplexate; S6 este întotdeauna 0, S5
indică starea lui IF, S4 și S3 arată segmentul care este accesat în ciclul magistrală curent
(00-ES, 01-SS, 10-CS sau nici un segment, 11-DS) și sunt adesea utilizate prin
decodificare pentru a accesa patru bank-uri de memorie de 1M (rezultând încă două linii
de adresă A21, A20).
• MN/MX\ – Mod minim/ maxim– pin de intrare / selecție, pentru modul minim pinul
trebuie conectat la +5V.
• BHE\/S7 – Bus High Enable – indică utilizarea părții superioare a magistralei de date
(D15-D8) în cadrul unui ciclu magistrală. S7 e întotdeauna 1.
• S2, S1, S0 – indică tipul ciclului magistrală curent, decodate de controlerul de
magistrală 8288: 000 – interrupt acknowledge, 001 – I/O read, 010 – I/O write, 011 – halt,
100 – opcode fetch, 101 – memory read, 110 – memory write, 111 – passive
• RQ\/GT0\, RQ\/GT1\ – request / grant – pin bidirecțional pentru operațiile DMA
• LOCK\ – lock output – utilizat pentru blocarea perifericelor.
• QS1, QS0 – arată starea cozii interne de instrucțiuni
– pentru coprocesorul matematic (00 – idle, 01 – first byte of opcode, 10 – empty, 11 –
subsequent byte of opcode).
Memoria si microprocesorul

• Spatiul de adrese pentru un sistem cu microprocesor este referit fie ca memorie logica,
fie ca memorie fizica.
• Memoria logica este memoria sistemului asa cum o vede un programator.
• Memoria fizica este structura hardware a sistemului de memorie.
Memoria logica
• Pentru adresarea unui cuvant de memorie (16-bit word) sunt accesati doi octeti
consecutivi.
• Pentru o utilizare eficienta a memoriei, datele reprezentate prin cuvinte si cuvinte duble
pot fi stocate cu aliniere la limitele doubleword sau fara aliniere la aceste limite. Limitele
de aliniere pentru double-word corespund adreselor care sunt multiplu de 4.

Arhitectura de baza I/O

• Echipamentele de intrari/iesiri (I/O devices) au porturi de intrari/iesiri (I/O ports) care


sunt organizate in spatiul adreselor de intrari/iesiri (I/O address space).
• I/O address space contine 64K octeti de adrese consecutive in domeniul 0000- FFFF.
• Controllerul de intreruperi primeste cereri de intrerupere (IRQs) de la I/O Devices. I/O
Device genereaza un semnal IRQ. Controllerul de intreruperi trebuie sa identifice care
dintre intreruperile activate in asteptare are cea mai mare prioritate. Apoi se efectueaza
protocolul
cerere/confirmare a intreruperii cu microprocesorul. In final, pe magistrala se transmite
numarul tipului de intrerupere.
• Fiecare numar asociat tipului de intrerupere are un vector de intrerupere in spatiul
adreselor de memorie. Vectorul de intrerupere indica rutina care serveste intreruperea
(interrupt service routine (ISR)). ISR are rolul de a gestiona evenimentul extern.

CURSUL 3

Registrii :

• Trei grupuri de registre:


• Registre de uz general,
• Registre de uz special si
• Registre de segment.
• Registrul de indicatori (flags) care arata conditiile speciale ale operarii unitatii aritmetice
si logice a microprocesorului (ALU).

Reg uz general :
Sunt utilizate in orice scop dorit de programator.
Fiecare registru este adresabil fie ca:
• 64-biti (RAX,RBX, R8,..,R15) - Pentium4 si Core2
• 32-biti (EAX, EBX, etc.) – doar de la 80386
• 16-bit (AX,BX, etc.) sau
• 8-bit (AH, AL, BH, BL, etc.).

RAX, EAX: Accumulator:


• Se foloseste ca 64-biti RAX, 32- biti (EAX), 16 biti (AX) sau 8-biti (AL sau AH).
• Instructiuni: inmultire, impartire, alte operatii aritmetice sau logice.
• EAX poate tine offset de memorie.
• RBX, EBX: Base Index:
• In general pastreaza offset-ul locatiei de memorie.
• RBX, EBX, BX, BH sau BL.
• ECX: Count:
• In general: este contorul pentru instructiunile care se repeta: deplasari sau
rotiri de biti ; operatii cu string-uri care se repeta, contorul instructiunii LOOP.
• RCX, ECX, CX CH, sau CL.
• ECX poate tine offset de memorie.
• RDX, EDX: Data:
• RDX, EDX, DX, DH sau DL
• Registru de uz general care
• Pastreaza cea mai semnificativa parte a produsului dupa o
inmultire pe 16 sau 32-biti,
• Pastreaza cea mai semnificativa parte a deimpartitului inainte de
impartire.
• Numarul portului I/O pentru instructiunile I/O

RBP, EBP: Base Pointer:


• Pointer in adresarea array-urilor de date in stiva de memorie.
• RBP, EBP, BP.
• RDI, EDI: Destination Index:
• Instructiuni cu string-uri – adreseaza datele din string destinatie al transferului.
• RDI, EDI sau DI.
• ESI: Source Index:
• Instructiunile cu string-uri – adreseaza datele din string sursa al transferului.
• RSI, ESI sau SI.
RIP, EIP: Instruction Pointer:
• Arata urmatoarea instructiune din segmentul de cod.
• 16-bit (IP) in modul real si 32-bit in modul protejat.
• Se poate modifica printr-o instructiune jump sau call.
• In modul 64-bit contine o adresa pe 40-biti.
• RSP, ESP: Stack Pointer:
• Adreseaza stiva de memorie LIFO (last input first output).
• La executia instructiunilor PUSH si POP;
• La apelul de subrutina si revenirea din subrutina: CALL sau RET .
• SP – 16 biti.

RFLAGS, EFLAG, FLAG: pastreaza starea conditiilor din microprocesor si


controleaza operarea acestuia. Compatibilitate cu toate versiunile microprocesorului.
• Instructiunile aritmetice si logice pot modifica c.m.d.d 5 flag-uri si Overflow.
Flag-urile nu se modifica la instructiuni de transfer de date sau de control.
• Cele mai recente flag-uri controleaza I/O, intreruperile hardware maskabile,
debugging, task switching, etc.

• Flag de Transport: C (Carry):


• Indica transportul dupa o adunare sau imprumutul dupa o scadere.
• Indica unele conditii de eroare in programe sau proceduri.
• Flag de Paritate: P (Parity):
• 0 pentru numere impare de biti si 1 pentru numere pare de biti.
• Paritatea reprezinta numarul cifrelor de 1 exprimat prin par sau impar..
• Ex.
• Daca un numar binar contine trei cifre 1 - paritate impara, P=0.
• Numerele cu 0 cifre 1 se considera de paritate para.
• Flag Auxiliar: A (Auxiliary Carry):
• Indica transportul dupa o adunare sau imprumutul dupa o scadere intre bitii 3 si 4
ai rezultatului.
• Este testat cu instructiunile DAA si DAS;
• Flag de Zero: Z (Zero):
• Indica rezultatul 0 dupa o operatie aritmetica sau logica.
• =1 daca rezultatul este 0.
• Flag de Semn: S (Sign):
• Indica semnul rezultatului dupa o operatie de adunare sau scadere.
• =1 daca semnul rezultatului este negativ.

• Flag Capcana: T (Trap): Activeaza capcana.


• =1 activeaza capcana.
• Ofera posibilitatea depanarii on-chip (debugging)
• Microprocesorul intrerupe fluxul normal de instructiuni in functie de conditiile
indicate de registrele de depanare si control. (debug and control registers).
• =1 permite depanare pas-cu-pas a programului; =0 dezactiveaza acest
mod pas-cu-pas.
• In modul pas-cu-pas, microprocesorul genereaza o exceptie de depanare dupa
fiecare instructiune; se inspecteaza starea de executie a programului dupa fiecare
instructiune.
• Setarea acestiu flag T este posibila cu instructiunea POPF. Exceptia de depanare
este generata dupa instructiunea care urmeaza.

• Flag de Intrerupere: I (Interrupt):


• Controleaza operarea pinului INTR (Interrupt request);
• =1; activeaza intreruperile.
• Instructiunea STI seteaza flagul I; I=1
• Instructiunea CLI reseteaza flagul I; I=0
• Controleaza raspunsul procesorului la cererile de intreruperi mascabile hardware.
Cand este setat raspunde unei astfel de cereri; cand este resetat inhiba
intreruperile.
• Nu afecteaza generarea de exceptii sau intreruperi nemascabile.
• Modificarea acestui flag se poate face doar la indeplinirea anumitor conditii de
privilegiu

• Flag de directie: D (Direction):


• Pentru instructiunile cu string-uri selecteaza modul de incrementare sau decrementare
pentru registrele DI si/sau SI.
• =1 registrele sunt decrementate automat.
• Instructiunile STD si CLD modifica acest flag.
• Flag de depasire: O (Overflow):
• Setat de instructiunile de adunare sau scadere.
• Conditia de depasire este indeplinita doar in cazul numerelor cu semn.
• Inidica daca rezultatul depaseste capacitatea masinii.
• Ex. Daca la 7FH (=127) se aduna 01H(+1) rezultatul este 80H (-128).
Conditie de depasire in cazul adunarii numerelor cu semn.
• Operatiile numerelor fara semn ignora acest flag.

• Flag nivel de privilegii: IOPL (I/O privilege level):


• Indica nivelul de privilegii la care trebuie executat codul pentru a putea executa
instructiuni I/O.
• 00 – cel mai inalt nivel de incredere;
• 11 - cel mai scazut nivel de incredere;
• Nivelul de privilegii al programului care se executa trebuie sa fie mai de incredere
deact IOPL pentru a putea accesa spatiul de adrese I/O.
• Poate fi modificat prin instructiunea POPF de un program cu nivel de privilegii 0
(cel mai inalt nivel).
• IOPL realizeaza si mecanismul de control al flagului de intreruperi IF si tratarea
intreruperilor in modul virtual-8086 - daca acest mod este activat (CR4.VME = 1).

• Flag de mod virtual: VM (Virtual Mode):


• =1, selecteaza modul virtual de operare pentru un sistem in modul protejat.
Sistemul permite sa coexiste in memorie mai multe partitii DOS de memorie de 1MB
fiecare.
• Simuleaza DOS in mediul Windows
• Flag de repornire: RF (Resume):
• Permite repornirea unei instructiuni care urmeaza dupa tratarea unei exceptii de
depanare (cauzate de conditiile de breakpoint);
• =1 dezactiveaza temporar generarea exceptiilor de depanare (prin breakpoint).
• =0 breakpoint-urile pot genera exceptii de depanare.
• Software-ul de depanare trebuie sa seteze acest flag inaintea revenirii din
programul intrerupt cu instructiunea IRETD ( previne ca instructiunea de breakpoint sa nu mai
cauzeze o alta exceptie de depanare).
• Procesorul sterge automat acest flag dupa ce s-a executat cu succes revenirea
din exceptie. Poate trata din nou exceptii de tip breakpoint.

• Flag de verificare aliniere: AC (Alignment Check):


• Doar la 80486SX pentru sincronizare cu coprocesorul 80487SX.
• =1 in conditiile in care un word sau double word este adresat la o
adresa care nu corespunde limitei specifice de aliniere pentru word (multiplu de 2) sau
doubleword (multiplu de 4).
• se genereaza o exceptie (alignment-check exception) daca operandul nu este aliniat.

Exceptia:
• Verifica alinierea datelor. In cazul unui schimb de date co procesoare care au nevoie ca
toate datele sa fie aliniate.
• Este utilizata de interpretoare pentru a indica anumiti pointeri speciali (care omit
alinierea). Se elimina astfel overhead-ul de verificare a fiecarui pointer si se trateaza doar
pointeri speciali.

• Flag de intrerupere virtuala: VIF (Virtual Interrupt Flag):


• Reprezinta copie a bitului flagului de intreruperi.
• Contine imaginea virtuala a IF.
• Este utilizat in conjunctie cu flagul VIP.
• Disponibil la Pentium- Pentium 4.
• Flag Intrerupere Virtuala in asteptare: VIP (Virtual Interrupt Pending):
• Disponibil la Pentium- Pentium 4
• =1 indica o intrerupere in asteptare;
• =0 nu exista intreruperi in asteptare;
• Este utilizat in conjunctie cu flagul VIF.
• Flag de identificare: ID (Identification):
• Disponibil la Pentium- Pentium 4
• Pentru instructiunea CPUID, care ofera informatii despremicroprocesor: numarul versiunii
si producatorul.

Registre de segment :
• Genereaza adresa de memorie in combinatie cu alte registre.
• 4-6 registre.
• Opereaza diferit in modul real fata de modul protejat al microprocesorului
• CS (Segment de Cod):
• Segmentul de cod este o sectiune din memorie care pastreaza programele si
procedurile folosite de acestea.
• Acest registru defineste adresa de inceput a sectiunii de memorie cu cod.
• Mod real – specifica inceputul unui segment de 64KB.
• Mod protejat – selecteaza un descriptor de segment ce include adresa de inceput si
lungimea sectiunii de memorie cu cod.
• Segmentul de cod este limitat la 64KB pentru 8086-80286 si 4 GB pentru 386
si urmatoarele.
• DS (Segment de Date):
• Similar CS, cu exceptia ca acest segment pastreaza date.
• Datele sunt accesate in segmentul de date prin:
• Adresa de offset sau continutul altor registre care au adresa de offset.

• ES (Extra Segment):
• Segment de date utilizat de unele instructiuni pentru manipularea string-urilor.
• Este destinatia datelor.

• SS (Stack Segment):
• Similar CS, exceptie acest segment pastreaza stiva.
• Locatia intrarii curente in stiva este stabilita de continutul registrului SP.

• FS si GS:
• Disponibile de la 80386 si urmatoarele.
• Registre segment suplimentare pentru doua segmente de memorie suplimentare care
pot fiaccesate de programe.
Operarea in mod real

• Modul real - Reprezinta un mediu de programare compatibil procesorului 8086 cu unele


extensii, (ex. abilitatea de a comuta in modul protejat)
• Microprocesorul lucreaza in mod real la pornire sau dupa reset.

Translatarea adresei in modul real

• Procesorul deplaseaza continutul


registrului segment 4 biti la stanga
pentru a forma adresa de baza pe 20
de biti.
• Offsetul este adunat adresei de
baza, iar rezultatul reprezinta adresa
liniara ce se mapaeaza direct in
spatiul adreselor fizice.
• In modul real se considera ilegal un
offset mai mare de FFFF pentru
microprocesoare ce opereaza cu
registri pe 32 biti.
• Pentru compatibilitate cu 8086, in
modul real de operare se genereaza
exceptie ( erori de psudo-protectie -
intreruperile 12 sau 13) daca offset-ul
reprezentata pe 32-biti este in afara
domeniului 0 - FFFFH.
Segment si Offset
• Adresa de segment si offset genereaza adresa de memorie in modul real de operare.
• Adresa de Segment se afla intr-unul dintre registrele de segment si defineste inceputul
oricarui segment de memorie de 64 KB.
• Offsetul selecteaza locatia de memorie din segmentul de memorie de 64KB.

Schema de adresare in modul real cu adresa de segment si offset

Offsetul este distanta de la


incepul segmentul de
memorie.
Registrul de segment contine
1000H.
Se observa ca registrul de
segment este este alaturat
unui 0H in partea din
dreapta si formeaza adresa
de memorie pe 20-biti.
Acceseaza inceputul unui
segment de memorie in
oricare locatie din primii
1MB de memorie.

Segment si Offset
• O locatie de memorie se defineste prin specificarea continutul registrului segment si a
offset-ului.
• Sintaxa seg_addr:offset,
• 1000:F000 specifica 1F000H.
• Exista combinatii implicite intre registrele de segment si offset-uri in definirea referintelor
la memorie.
• Valoarea din registrul de segment este numita valoarea curenta a registrului de
segment.
• Combinatii implicite intre registrele microprocesorului:
• CS:EIP
• SS:ESP, SS:EBP
• DS:EAX, DS:EBX, DS:ECX, DS:EDX, DS:EDI,
DS:ESI, DS:8-bit_literal, DS:32-bit_literal
• ES:EDI
• FS and GS have no default.

Exemplu de memorie a sistemului cu 4 segmente


• Segmentul reprezinta o unitate
adresabila de memorie
independenta formata din 64K
octeti consecutivi de memorie.
• Fiecare segment are o adresa de
baza a segmentului care identifica
inceputul, fiind locatia de memorie a
celui mai putin semnificativ octet
adresabil.
• 8086-80286 au 4 segmente de
memorie, iar 80386 si urmatoarele
au 6 segmente de memorie. La un
moment dat numai aceste segmente
pot fi active: segment de cod,
segment de stiva, si segmente de
date (2 sau 4).

Segmente de memorie – continue, adiacente, disjuncte si suprapuse

• Segmentele sunt identificate cu literele A, B, C, etc..


• Registrul segmentului de date DS contine valoarea B.
Al 2-lea segment de memorie, de 64 KB, notat cu B,
reprezinta segmentul de date curent. In acest segment
sunt stocate datele care sunt prelucrate. Acest spatiu
de memorie trebuie sa contina locatii de memorie ce
pot fi accesate de instructiuni pentru operanzi sursa
sau destinatie.
• Segmentul E este selectat de registrul CS ca segment
de cod. Acesta este segmentul de cod din care sunt
extrase instructiunile programului curent pentru
executie.
• Registrul SS contine H. Segmentul cu acelasi nume
este folosita ca stiva.
• ES, FS si GS sunt incarcate cu valorile J, K, L astfel ca
segmentele de memorie J, K, L sunt segmentele de
date adi_ionale.
Relocare

• Adresarea prin segmentare permite relocarea datelor si a codului.


• Program relocabil. Se poate schimba locul in oricare zona de memorie si
executat, apoi, fara nici o modificare.
• Date relocabile. Pot fi plasate in oricare zona de memorie si utilizate fara nici o
modificare a programului.
• Un segment de memorie poate fi mutat fara a schimba vreun offset. Trebuie
modificat doar continutul registrului segment sa specifice baza pentru noua
zona de memorie.
• Altfel programul ar fi trebuit rescris sau modificat inainte de a fi mutat. Aceasta
ar fi costat timp si ar fi necesitat mai multe versiuni de program pentru diferite
configuratii.

Registre si instructiuni suportate in modul real


• Setul de registre disponibile in modul real include:
• Toate registrele definite pentru microprocesorul 8086.
• plus noile registre introduse pentru microprocesoarele pe 32-biti, ex. FS si GS, registre
de control, registrele FPU, etc.

Moduri de adresare
• La executia unei instructiuni, microprocesorul efectueaza o anumita
functie pe anumite date. Aceste date se numesc operanzi.

• Operanzii pot fi:


• parte a unei instructiuni;
• Se afla intr-unul din registrele interne ale microprocesorulu;
• Se afla in memorie la o anumita adresa;
• port I/O.
• Pentru a accesa tipuri diferite de operanzi, microprocesorul are diferite
moduri de adresare (ex. structuri de date, inregistrari, array-uri 1D sau 2D).

• Modurile de adresare sunt impartite in trei categorii:


• Adresarea operandului din registru;
• Adresarea operandului imediat;
• Adresarea operandului din memorie.
MODURI DE ADRESARE :
Modul de Adresare din Registru

• Operandul este specificat intr-un registru intern al microprocesorului.


• Registrele interne pot fi utilizate ca sursa sau destinatie a operanzilor.
Registrele de date pot fi accesate pentru diverse dimensiuni ca: octet, word,
double-word sau quad-word.
• MOV AX, BX
Copiaza continutul lui BX, care este specificat ca operand sursa, in AX, operand
destinatie. Ambii operanzi, sursa si destinatie, reprezinta continutul unor registre
interne ale microprocesorului.

Inaintea executiei instructiunii, continutul lui BX este ABCDH si continutul lui AX este
“orice” .
Instructiunea este citita din coada de instructiuni, decodata si executata.
Rezultatul produs de executia acestei instructiuni este copiat in AX

Mod de adresare imediat


• Daca operandul este o parte dintr-o instructiune, atunci acesta reprezinta un operand
imediat si este accesat prin modul de adresare imediat.
• Operandul poate avea lungimea de 8, 16, 32 sau 64 biti, este codificat in instructiune
codul operatiei si in mod mormal reprezinta o valoare constanta. .
• Acest mod de adresare poate fi folosit pentru a specifica un operand sursa.
• MOV AL, 18H
• 18H, operand sursa, operand imediat.
• Operand destinatie, continutul lui AL, adresare prin registru
• Instructiunea foloseste adresare imediata si prin registru.
• Operandul imediat este in segmentul de cod, in octetul imediat dupa codul operatiei.
• Valoarea impreuna cu codul operatiei pentru instructiunea MOV sunt extrase din
memorie in coada de instructiuni.
• Nu se efectueaza nici un acces la memoria externa.
• Rezultatul produs prin executia instructiunii este ca operandul imediat, 18H, este
incarcat in AL.

Mod de adresare cu operand din memorie


• Operand in memorie – microprocesorul trebuie sa calculeze adresa fizica a operandului
si apoi sa initieze o operatie de scriere sau citire la aceasta locatie.
• Adresa fizica este formata din adresa de baza a segmentului (segment base address
(SBA) ) si adresa efectiva (effective address (EA)).
• SBA identifica locatia de inceput a segmentului de memorie.
• EA reprezinta offsetul operandului fata de inceputul acestui segment de memorie.
• Segmentul si offsetul se combina si formeaza adresa fizica in modul real intr-un
microprocesor.

• Valoarea offset-ului se poate specifica in diferite moduri:


• Mai multe tipuri de moduri de adresare:
• Adresare directa – cel mai simplu mod
• Exista un numar de moduri de adresare care depind decombinarea a patru elemente:
baza, index, factor de scala si deplasament.
• Acestea se numesc: adresare indirecta prin registru, adresare bazata, adresare indexata;
adresare bazata indexata
• Aceste moduri de adresare ofera programatorului diverse posibilitati de calcul al adresei
efective a unui operand din memorie.
Calculul adresei efective se face cu urmatoarea formula generala:
• EA= baza+(index x factor de scala)+deplasament

Adresarea directa
• Codul instructiunii este urmat de adresa efectiva - offset pe 16 biti - a
locatiei de memorie a operandului - fata de adresa de baza din
registrul segment.
• Registrul segment implicit este intotdeauna DS. In consecinta, adresa fizica este
obtinuta din DS:EA.
• Se poate referi orice registru segment: CS,DS,SS, ES, FS,GS
• Exemplu: MOV CX, [BETA]
Daca valoarea asignata lui BETA este 1234H si continutul lui DS este 0200, atunci
adresa fizica a operandului sursa este
• PA= 02000H+ 1234H= 03234H.
• Instructiunea citeste cuvantul de date incepand cu aceasta adresa, ABBAH, si
apoi o incarca in registrul CX.
Adresare indirecta prin registru
• Este similar modului precedent in felul de obtinere a adresei fizice.
Diferenta este la specificarea offset-ului.
• Adresa efectiva se afla intr-un registru de uz general: AX,BX,CX,DX.SP,BP,SI,DI.
• Exemplu: MOV AX, [SI]
• Executia acestei instructiuni muta continutul locatiei de memorie care este la un offset -
valoarea din SI - fata de adresa de baza a segmentului in AX.
• Daca SI contine 1234 si DS contine 0200, atunci adresa fizica este 03234H.
Continutul acestei locatii este copiat in registrul AX.
• De remarcat: rezultatul produs de executia acestei instructiuni este la fel cu cel din
exemplul anterior – adresare directa.
• Acest mod de adresare se utilizeaza atunci cand valoarea lui EA este calculata
si stocata in registru de instructiunile anterioare. EA este o variabila

Adresare bazata
• Adresa fizica a operandului este obtinuta prin adunarea unui deplasament direct sau indirect
la continutul unui registru baza.
• Registrul baza defineste o structura de date, inregistrare, in memorie, iar deplasamentul
selecteaza elementul din structura.
• Modificarea valorii deplasamentului permite accesul la alt element al structurii.
• Modificarea continutului registrului baza permite accesul la o alta inregistrare.
• Registrul baza poate fi: AX,BX,CX,DX,SP,BP,SI,DI;
• Deplasamentul direct: orice valoare pe 8 sau 16 biti.

Adresare bazata
• Exemplu: MOV [BX]+BETA, AL
• Registrul baza BX si deplasamentul direct BETA sunt utilizate pentru a deriva EA a
operandului destinatie.
• Notatia: registrul baza se pune intre paranteze drepte. Urmeaza semnul “+” si
deplasamentul direct.
Continutul lui AL este BA, continutul lui DS este 0200, BX este 2000, iar valoarea
lui
BETA este 1234. Adresa fizica este05234H.
Instructiunea muta valoarea BA in memorie la aceasta adresa fizica. DS registru
segment implicit. Daca registrul baza este SP sau BP, atunci calculul adresei fizice este
automat efectuat cu registrul segment de stiva SS.

Adresare Indexata.
• Acest mod foloseste deplasamentul ca pointer la un array din memorie iar continutul
registrului specificat este folosit ca index care selecteaza elementul din array.
• Daca in registrul index este valoarea n, atunci se selcteaza elementul n.
• Exemplu: MOV AL, ARRAY+[SI]
• Indexul este in registrul SI. Acesta este adunat cu deplasamentul direct ARRAY.
Registrul index este intre paranteze drepte.
• Adresa fizicaPA este • PA= DS:{ARRAY+(SI)}
• Registrul segment: CS,DS,SS,ES,FS,GS
• Registrul index: AX,BX,CX,DX,BP,SI,DI

• Valoare ARRAY este 1234, DS este 0200, SI este 2000, atunci PA devine 05234.
Continutul acestei locatii de memorie este BA. Acest octet este citit in AL.
• Factorul de scala poate fi inclus, considerand una din valorile: 1,2,4 sau 8.
• Calcul EA: valoarea registrului index este inmultita cu factorul de scala si apoi este
adunat cu deplasamentul.
• Exemplu: MOV AL, ARRAY+[SI x 2]
• PA devine: PA= 02000H+1234H+2000Hx2= 07234H

Adresare bazata indexata


• Se combina adresarea bazata cu adresarea indexata.
• Se utilizeaza pentru accesul la structuri de date complexe, array-uri bidimensionale.
• Array de date m x n. Deplasamentul este valoarea fixa ce stabileste primul element al
raay-ului in memorie. Registrul baza – coordonata m a array-ului
• Registrul index – coordonata n a rrayului.
• Orice element al array-ului se acceseaza prin modificarea valorilor din registrele baza si
index.
Exemplu MOV AH, [BX][SI]+BETA
• BX - registru baza, SI - registru index, BETA - deplasament.
• EA a operandului sursa este
• EA = (BX)+(SI)+BETA
• Adresa fizica PA se formeaza din continutul registrului DS si EA.
• PA= DS: {(BX)+(SI)+BETA}

• DS contine 0200, BX este 2000,SI este 2000 si BETA este 1234, atunci PA = 7234H.
• Executia instructiunii - valoarea stocata in memorie la aceasta locatie este citita in AL.
• Indexul poate fi scalat cu un factor de scalare, similar adresarii indexate.
SETUL DE INSTRUCTIUNI AL MICROPROCESORULUI :
• MOV DX,CX ; copiaza continutul lui CX in DX
• XCHG AX,DX ; interschimba continuturile lui AX si DX
• XLAT ; translatie – operare cu look-up table. Inlocuieste continutul lui AL cu continutul locatiei
de memorie de la adresa PA=(DS)0+(BX)+(AL)
• LDS SI, [200H] ; incarca registrul SI cu continutul locatiei de memorie de la adresa cu offsetul
200H.
• ADD AX,BX ; aduna continutul lui AX cu continutul lui BX si pune rezultatul in AX.
• INC AH ; incrementeaza AH.
• SUB BX, CX ; scade continutul lui CX din BX si pune rezultatul in BX.
AND AL, 00011111B ; mascarea celor mai semnificativi trei biti ai lui AL
OR AL, 11000000B ; setarea celor mai semnificativi 2 biti ai lui AL
XOR AL, 00001111B ; complement logic pentru bitii 1 din AL
NOT AL ; inverseaza fiecare bit al lui AL

ROL AX, 1 ; continutul lui AX este rotit o pozitie de bit la stanga. MSB este incarcat cu
LSB; CF reflecta starea ultimului bit deplasat.
• ROR AX, CL ;continutul lui AX este rotit un numar de biti specificati de CL la dreapta.
• Instructiuni RCR si RCR, bitii sunt rotiti prin CF (flag-ul de transport)

• Instructiunile bit test testeaza nivelul logic al unui bit din continutul unui registru sau a
unei locatii de memorie. Starea bitului testat este copiata in CF.
• BT EAX, EDI ; bitul din EAX este selectat de indexul din (EDI) , apoi este testat, iar valoarea sa
este salvata in CF.
• Variante: BTR EAX, EDI ; valoarea bitului testat este salvata in CF si apoi acest bit din EAX
este resetat
• BTC BX,7 ; bit test and complement; Daca BX contine 03F0H, dupa executie va fi 0370H, iar
CF 1.
• Instructiunile bit scan scaneaza bitii operandului sursa - registru/locatie de memorie - sa
stabileasca daca sunt/nu sunt toti 0.
• BSF ESI,EDX ; bit scan forward (BSR – bit scan reverse) - bitii din (EDX) sunt testati unul dupa
altul incepand cu bitul din poz. 0. Daca toti bitii sunt 0, atunci ZF devine 0. Altfel valoarea
indexului (pozitia bitului +1) primului bit testat fiind 1 este copiat in registrul ESI.

Flagurile fie monitorizeaza starea executiei unei instructiuni, fie controleaza diverse optiuni de
operare. Astfel de instructiuni pot fi:
• LAHF ; incarca AH cu flaguri
• SAHF ; memoreaza AH in flaguri
• CLC, STC, CMC ; sterge/seteaza/complement flagul de transport
• CLI, STI ;sterge/seteaza flagul de intreruperi
Secventa de instructiuni: MEM1, MEM2 locatii de memorie
LAHF
MOV MEM1,AH
MOV AH, MEM2
SAHF
Instructiuni de comparare si setare
• Sunt utilizate sa compare doua numere reprezentate pe 8-, 16-, 32- biti.
• CMP D,S ; rezultatul (D)-(S) seteaza/reseteaza flagurile.
• Rezultatul este reflectat in schimbarile flagurilor de stare CF, AF, OF, PF, SF, ZF. Noua
stare logica a acestor flaguri este utilizata de alte instructiuni pentru a decide daca se
modifica sau nu secventa de instructiuni a programului.

Instructiuni de salt (Jump)


• Scopul acestor instructiuni este de a da o alta cale de executie a programului.
• Exista 2 tipuri de instructiuni de salt, salt neconditionat si salt conditionat.
Saltul neconditionat poate fi salt intrasegment, care este limitat la adresele din segmentul
curent de cod si salt intersegment care permite salturi de la un segment de cod la altul.

• Formatul instructiunii: JMP Operand ; Operandul poate fi:


• Intrasegment: Short-label; Near-label,
• Intersegment: Far-label, Memptr 16, Regptr 16, Memptr 32, Regptr 32

Exemple:
• JMP LABEL ; salt in program la eticheta LABEL;
• JMP BX ; noua valoare a lui IP este continutul lui (BX);
• JMP [BX] ;continutul lui BX este adresa de memorie care are offsetul.
Offsetul este incarcat in IP, care cu continutul curent al CS stabilesc adresa de salt.

• JMP DWORD PTR [DI] ; continutul registrelor (DS) si (DI) este utilizat la calculul adresei de
memorie care contine pointer double-word ce identifica locatia la care va fi saltul. Pointerul
double-word este citit in reg. IP (primii 16 biti) si CS (ultimii 16 biti) pentru a pasa controlul
noului punct din program.

• Instructiunile de salt conditionat testeaza prezenta sau absenta unor anumite conditii
de stare.
• JC Label ; jump on carry – daca CF =1 programul continua cu instructiunea de la eticheta Label,
altfel continua cu instructiunea urmatoare.
• JP (jump on parity – PF=1); JPE (jump on parity even - PF = 1); JNP (not parity - PF=0); JPO
(parity odd – PF=0)
• JE (jump if equal - ZF=1); JZ (jump if zero ZF= 1)
Instructiuni apelare a subrutinelor
• Acest grup include instructiuni care transfera controlul de la programul principal la o
subrutina si revenirea controlului inapoi programului principal. Instructiunile de baza sunt
CALL si RET. CALL poate fi :

• Intrasegment. IP este adresa urmatoarei instructiuni care urmeaza dupa CALL; IP este
salvat in stiva, (SP) -> (SP)-2;
• Operanzi intrasegment specifica noua valoare pentru IP: Near-proc, Memptr16,
Regptr16
• CALL NPROC; operand imediat 16 biti – offset relativ la CALL
• CALL BX; (BX) ->(IP) subrutina se afla la adresa CS:IP
• CALL WORD PTR [BX] ; IP este incarcat cu adresa locatiei de memorie derivata din
continutul (DS) si (BX) • Call Intersegment. (CS) si (IP) sunt salvate in stiva;IP si CS sunt
incarcate cu noile valori.

• Operanzi intersegment:
• CALL FPROC ; operand imediat 32 biti se incarca in IP si CS
• CALL DWORD PTR [DI]; adresa fizica din memorie este derivata din (DS) si (DI)
• Fiecare subrutina trebuie sa se termine prin executarea unei instructiuni care
returneaza controlul programului principal. Aceasta instructiune se numeste RET.
• Valorile salvate in stiva sunt reincarcate in registrele asociateIP sau (IP si CS)

• Instructiuni PUSH si POP


• PUSH – salveaza parametrii in stiva, iar POP ii obtine inapoi.
• Format PUSH S; POP D;
• Operandul (S sau D) pe 16 biti poate fi un registru de uz general, un registru segment
sau o locatie de memorie.
• PUSH AX
• POP DX
• Fara operand: PUSHF; POPF; PUSHA; POPA; PUSHAD;
POPAD push flags; push all (16-biti) push all 32-biti;

Instructiuni de tratare a buclelor (Loop handling instructions)


• Aceste instructiuni pot fi utilizate in locul unor instructiuni de salt conditional si ii dau
programatorului un mod mai simplu pentru scrierea secventelor din bucle.
• Format: LOOP Short-label
• Instructiunea LOOP lucreaza cu continutul registrului CX. CX se incarca cu un numar
ce reprezinta numarul de cate ori se executa bucla. De cate ori se executa bucla
continutul lui CX este mai intai decrementat si apoi este verificart ca nu e zero. Daca este
0 bucla se termina si se executa instructiunea urmatoare.
Instructiuni de manipulare a stringurilor.
• Un string este o serie de octeti, words sau double words de date aflate in locatii de
memorie consecutive.

• Aceste instructiuni pot:


• Muta/ Copia stringuri dintr-o zona de memorie in alta zona de memorie: MOVSB;
MOVSW; MOVSD;
• Scana elementele unui string de date in cautarea unei anumite valori: SCANSB, etc;
Afecteaza flagurile: CF,PF,AF,ZF,SF,OF.
• Compara elementele a doua stringuri pentru a stabili daca sunt la fel sau diferite:
CMPSB, etc; Afecteaza flagurile: CF,PF,AF,ZF,SF,OF.
• Initializa un grup de locatii consecutive de memorie: LODSB; STOSB

Modul protejat de operare


• Modul protejat permite accesul la date si programe aflate la adrese de memorie mai
mari de 1 Mbyte.
• Se schimba schema de adresare (segment, offset) specifica modului real de operare.

• Comparatie cu modul real:


1) exista offset pentru accesul informatiei dintr-un segment;
2) adresa de segment nu mai exista. Registrul de segment contine un selector;
3) diferenta in modul in care se acceseaza segmentul de memorie

Selectori si descriptori

• The selector, located in the segment register , selects one of 8192 descriptors from a
table of descriptors.
• The descriptor describes the location, length and access rights of a segment of memory.
• There are two descriptor tables used with the segment registers:
•Tabela de descriptori globali - global descriptors table (GDT) - Global descriptors contain
segments that apply to all programs
• Tabela de descriptori locali - local descriptors table (LDT)
- Local descriptors are unique to an application.
• Fiecare tabela contine 8192 descriptori, astfel ca 16384 descriptori sunt disponibili
oricand.
Formatul unui descriptor de segment de memorie
• The base address indicates the starting location of the memory segment.
• For 80286 is 24-bit address, thus any of 16 MB of memory could be this address.
• For 80386/80486 is a 32-bit address, thus any address within 4GB of memory.
• The segment limit contains the last offset address found in a segment. It is 16-bit limit for
80286 and 20-bit limit for 80386/80486.
For example: If a segment begins at memory location F00000H and ends at location
F000FFH, then:
• 80286: the base address is F00000H and the limit is 00FFH
• 80386/80486: the base address is 00F000000H and the limit is 000FFH
• The access rights byte controls access to the memory segment. It describes how
the segment functions in the system.
• If the segment is a data segment, the direction of growth can be specified. If the
segment grows beyond its limit, the microprocessor program is interrupted.
• If a data segment can be written or is write-protected.
• The code segment is also controlled in a similar way and can have reading
inhibited
Octetul drepturilor de acces

Formatul unui descriptor de segment de memorie


• Other 80386/80486 specific features in the descriptor format are:
• G-bit represents granularity. If G=1, the value of limit is multiplied by 4KB, if G=0,
the limit specifies a segment limit of from 1 Byte to 1 MByte in length.
• AV-bit bit is used by the operating system and indicates that the segment is
available (AV=1) or not available (AV=0).
• D-bit indicates how instructions access register and memory data in protected
mode.

This flag should always be set to 1 for 32-bit instructions. The 32-bit instruction
mode assumes all offset addresses and all reregisters are 32 bits. If D=0 the instructions
are 16-bit and they use 16-bit offset addresses and 16-bit registers. This mode is often
called the 16-bit instruction mode.
Modul protejat .Continutul registrului de segment

• Microprocesoarele 80286 si 80386 – modul protejat

MICROPROCESORUL 80286
• Proiectat pentru medii multitasking.
• Introduce, pentru prima oară în cadrul familiei, un sistem de gestiune al memoriei care
permite adresare a până la 16MB de memorie fizică și până la 1GB de memorie virtuală.
• Execută setul de instrucțiuni 8086 într-un număr mai mic de cicli mașină datorită
optimizării arhitecturii interne.
Semnale magistrala

•BHE\ – Bus High Enable – indică transferul pe partea superioară a magistralei de


date

•PEREQ, PEACK\ – Processor Extension Operand Request / Acknoledge


•BUSY\ – Processor Extension Busy –semnal de la coprocesor care indică începerea
execuției unei instrucțiuni; când e activ procesorul nu trebuie să trimită către coprocesor
alte instrucțiuni
•ERROR\ – Processor Extension Error – semnalizează apariția unei erori în execuția
instrucțiunii curente, este conectat la sistemul de întreruperi vectorizate

Registrul PSW
• Pentru a intra în modul protejat se execută instrucțiunea LPSW care inițializează
registrul PSW (Program Status Word)

Din modul protejat se poate ieși doar prin reset hardware!


Microprocesorul 80386
•Primul microprocesor din cadrul familiei pe 32 de biți (cuvânt de date și linii de adresă
=> 4GB memorie fizica adresabila).
•Poate trece din modul protejat în modul real fără reset hardware.
•Există trei versiuni ale circuitului DX, SX și EX.
•Versiunea SX este versiunea mai simplă (doar 24 de linii externe de adresă și 16 linii
externe de date) – destinată sistemelor care nu permiteau magistrală de 32 de linii
(funcționa chiar în sisteme proiectate pentru 80286).
•Versiunea EX este versiunea ”embedded” ce include mai multe circuite suport (controler
DRAM, 24 pini I/O, port serial, timere etc.)

Organizarea Memoriei:

•A31-A2 – linii de adresă – identifică cele 1G locații a 32 de biți (A0 și A1 sunt


decodate intern impreuna cu marimea datei transferate în semnalele BE3\-BE0\).
• Modul real A2-A19 active
• Modul protejat: A2-A31 active
•BE3\-BE0\ – Bank enable signals – selectează accesul la un octet, word sau double-
word.
• Pentru citirea unei instructiuni toate semnalele BE3\-BE0\ sunt active, 0000.
•BS16\ – Bus size 16 (dacă BS16\=0 atunci chiar și varianta SX operează pe magistrală
de date de 16 biți – D0-D15) – dimensionarea dinamica a magistralei.
• Duplicarea datelor pentru anumite cicluri de scriere in memorie: in modul 16-bit cand
datele sunt transferate doar pe partea ms a magistralei de date: D16-D32.
•NA\ – Next address – permite ca următoarea instrucțiune sau cuvânt de date să fie emis
în ciclul curent de magistrală
Operarea in modul protejat
Arhitectura modului protejat specifica trei tabele de descriptori care trebuie definite pentru
operare in acest mod: GDT, LDT si IDT:
• Global Descriptor Table (GDT) - mecanisme pentru definirea spatiului global de adrese
de memorie. Memoria globala este o resursa generala a sistemului care poate fi
accesata de toate programele. Contine descriptori de segmente – caracterisitici ale
segmentelor memoriei globale.
• Local Descriptor Table (LDT) – spatiul local de adrese de memorie in cazul unui task.
LDT are descriptorii de segment care ofera acces la segmentele de meorie de cod si
date rezervate taskului curent. Fiecare task are propriul LDT. Sistemul contine mai multe
LDT.
• Interrupt Descriptor Table (IDT) – contine descriptori de intererupere sau porti –
mecanismul prin care microprocesorul paseaza controlul programului rutinelor de tratare
a intreruperilor. Dimensiunea IDT poate fi setata sa suporte mai putin de 256 de
intreruperi.

Pentru a accesa si specifica tabelele de descriptori, microprocesorul contine


Registre Invizibile Programului

Operarea in modul protejat .Registrele invizibile programului


• Aceste registre controleaza microprocesorul atunci cand acesta este in modul protejat.
Se observa ca fiecare registru de segment contine o zona invizibila utilizata in modul
protejat numita descriptor cache.
• Descriptor cache este incarcat cu adresa de baza, limita si drepturile de acces de
fiecare data cand se schimba continutul registrului segment.
• Cand registrul de segment este incarcat cu un nou continut, microprocesorul acceseaza
tabela de descriptori si incarca descriptorul in portiune de cache. Acesta este pastrat si
utilizat pentru accesul la segmentul de memorie pana cand continutul registrului segment
se
schimba din nou.
• In acest mod se evita accesele repetate la tabela de descriptori de fiecare data cand
segmentul de memorie este accesat.
Mecanismul de stabilire a adresei fizice :

Accesul la adrese din spatiul local


Incarcarea zonei cache a registrului segment

Elemente de organizarea memoriei: overlay, swapping, segmentarea, memoria


virtuala segmentata, paginarea

Overlay- Când o parte a programului stocat pe disc devine necesară pentru


CPU, această parte este adusă în memoria principală în locul altei părți a programului,
care nu este necesară la acel moment.
Diferitele subspații ale spațiului programului se pot încărca în aceeași zonă de memorie
apare suprapunerea acestor subspații; de aici decurge și numele tehnicii de gestiune a
memoriei: overlay (suprapunere).
 Este esențială evitarea situațiilor când doua părți distincte și care se pot
suprapune ale programului sunt simultan necesare în memorie pentru executarea
programului.
 Singurul care poate face aranjamentele cerute de tehnica overlay este
programatorul, pentru că el cunoaște modul de evoluție a programului și care secțiuni ale
lui trebuie să fie rezidente în memorie la un anumit moment de timp
Partiționarea se poate efectua prin structurarea întregului program intr-un arbore de
module, pentru care toate modulele de pe un nivel se pot suprapune.
Arborele de suprapunere se poate construi urmărind arborele apelării procedurilor.
Rădăcina este reprezentată de programul principal, care este permanent rezident în
memoria principală, iar toate procedurile apelate direct de către programul principal se
pot suprapune, pentru că ele sunt apelate una câte una, nici una din ele ne necesitând
prezența alteia.
Realizarea arborelui de suprapunere este o problema netrivială. Modulele superpozabile
trebuie sa aibă, aproximativ, aceeași dimensiune, ca să poată fi conținute în același
spațiu de memorie.
• Altă problemă este generată de minimizarea operațiilor de instalare în și evacuare din
memoria principala a modulelor (swapping). Cu cât numărul acestor operații este mai
mare, cu atât eficiența de ansamblu este mai mică.
• Recomandarea: realizarea de module de mari dimensiuni. DAR gestionarea memoriei
se face cu mai bună eficiență dacă modulele superpozabile sunt de mici dimensiuni.
• Concluzie: programatorul trebuie să realizeze compromisul între cerințele privind
memoria și cele referitoare la eficienta execuției Programatorul se poate baza pe
instrumente software de dezvoltare necesare elaborării taskului final, întrucât exista
editoare de legături care se pretează utilizării tehnicii overlay.
• La execuție, un program construit conform tehnicii menționate efectuează apelări ale
sistemului de operare ori de câte ori este necesar a folosi o procedură care, la acel
moment, nu este rezidentă în memoria principală.
o Implementarea tehnicii overlay nu necesită mijloace hardware speciale, cu excepția
unor
unități rapide de disc, care să permită încărcarea cu mare viteză în memoria principală a
secțiunii cerute a programului
Adresele de program generate de compilatoare nu depind de structura arborelui de
suprapunere, întrucât apelurile la procedurile externe sunt soluționate de către editorul
de legături, fie în modul normal, fie prin inserarea de apeluri către sistemul de operare.
• Tehnica overlay este un exemplu tipic pentru metodele care combină cunoștințele
programatorului despre comportarea programului cu comutarea automată a secțiunilor
de program, cu scopul implementării mecanismului de gestiune a memoriei.
Principalul dezavantaj al metodei: pregătirea arborelui de suprapuneri și necesitatea de a
încărca în memorie un întreg modul, chiar dacă doar o parte a lui este necesară.
• Efect: se pot obține performanțe mai slabe decât cele oferite de alte tehnici de gestiune,
complet automate. DAR este perfect posibilă rularea unor programe cu dimensiuni
superioare celei a memoriei fizice disponibile.
Swapping -Într-o mașină funcționând în regim de multiprogramare este posibilă
execuția concurentă a mai multor programe. De aceea, se dorește a se păstra în
memoria principala doar programele care sunt gata de rulare.
• Conform politicii de swapping (comutare între memoria principală și cea
secundară), un program care așteaptă terminarea unei operații I/O (care poate dura
câteva ms), este evacuat din memorie (swapped out). Când el devine din nou gata de
rulare, sistemul încearcă să găsească un spațiu adecvat în memoria primară, în care să
încarce programul în discuție.
Dacă nu există spațiu disponibil, programul este înscris într-o listă de așteptare. La
fiecare evacuare de program în memoria secundară, rutinele de implementare a
mecanismului de gestiune a memoriei încearcă să încarce în memoria principală un
program din lista de
așteptare.
 Conversia adresei virtuale în adresă fizică de memorie principală se face prin
adunarea adresei virtuale la adresa de început a zonei de memorie în care s-a efectuat
încărcarea. Deoarece această operație de relocare trebuie efectuată la fiecare ciclu de
memorie, apare
necesitatea de hardware specializat, care să efectueze relocarea într-un mod care să nu
conducă la lungirea timpului de execuție dreptconsecință a aplicării tehnicii swapping.
Acest hardware specializat, implementat adesea într-un singur circuit, se numește
unitate de gestiune a memoriei (MMU - memory management unit) și poate fi considerat
drept o
extensie a CPU, care efectuează cu mai mare viteza funcții asociate gestiunii memoriei.
Fiecare tehnică de gestiune a memoriei necesita propriul tip de MMU. Totuși,
sistemele cu multiprogramare au întotdeauna nevoie de o astfel de unitate hardware.
Ori de câte ori un program este lansat sau relansat în execuție, adresa de bază a zonei
de memorie în care se află stocat este încărcată într-un registru special al MMU.
• Un alt registru conține dimensiunea programului, fapt ce permite ca, pe durata execuției
acestuia, să se poată detecta tentativa de adresare într-un spațiu exterior celui al
programului curent. Acest test simplu permite protejarea fiecărui program împotriva unor
acțiuni periculoase - involuntare sau nu - efectuate de către alte programe.

Tehnica swapping de gestiune a memoriei este simplu de implementat, dar are și


dezavantaje
Tehnica swapping consideră un program drept un bloc a cărui încărcare se poate face
doar într-o zonă de locații contigue de memorie, deci ea nu permite folosirea micilor
fragmente de spații libere de memorie, spații a căror dimensiune totală devine importantă
după un număr de operații swapping. Acest efect este numit fragmentarea memoriei și
urmările sale se pot atenua, înlocuind tehnica swapping cu cea de segmentare
Segmentarea - spargerea programelor în mai multe segmente pentru care nu
este necesară stocarea în zone adiacente de memorie, deși fiecare din ele trebuie
încărcat într-un bloc compact de memorie :
⇨ diminuează efectele fenomenului de fragmentare
⇨ este posibilă utilizarea și a unor zone de memorie de dimensiuni mai mici.
Segmentele corespund unor submulțimi logice ale programului. Se poate
considera, spre exemplificare, segmentul de cod si segmentul de date. Segmentarea
poate fi mai pronunțată decât atât, putând exista mici segmente compuse din una sau
mai multe rutine sau din una sau mai multe structuri de date.
• Mecanismul de conversie a adreselor implicat de tehnica de segmentare este
complex:
• S.O. trebuie să dispună și să întrețină o tabelă cu descriptorii segmentelor pentru
fiecare program.
• Fiecare element al acestei tabele este compus din:
- adresa de bază;
- dimensiunea segmentului;
- atribute (folosite pentru a verifica daca accesul efectuat este corect).
• Identificarea segmentului este facilitata de existența unei submulțimi de adrese
virtuale.
• Descriptorul este extras din tabela de descriptori ai segmentelor.
• După aceasta, conversia de adresă se face similar cazului tehnicii swapping.
• Relocarea este critică pentru performanța sistemului, întrucât trebuie efectuată la
fiecare ciclu memorie. Deci, dacă tabela descriptorilor segmentului ar fi păstrată în
memoria principala, apare necesitatea unui ciclu suplimentar de acces la memorie, ceea
ce dublează timpul cerut de efectuarea unui ciclu memorie Depășirea acestei dificultăți
se face stocând tabela descriptorilor segmentelor într-o mică, dar foarte rapidă, memorie
RAM cu care este
prevăzută MMU.
 Dimensiunea limitată a acestei memorii speciale necesită folosirea tehnicii de
swapping între aceasta și memoria principală a sistemului .Problema când numărul de
segmente > cantitatea care poate fi stocată în memoria RAM a MMU.
Soluție: memoria rapidă din MMU poate fi utilizată ca memorie cache în care se
păstrează cei mai recent utilizați descriptori de segment. La inițializarea procesului de
conversie a adreselor, MMU caută în memoria sa internă descriptorul de segment.
• Daca nu este găsit, descriptorul este citit din memoria primară și copiat în
memoria internă.
• Principiul localității programelor → probabilitate ridicată ca descriptorul să se afle
în memoria internă a MMU. Al doilea ciclu de memorie este doar rareori necesar , deci
nu influențează într-un mod important performanța de ansamblu.
Memorie virtuală segmentată - Execuția programelor evoluează printr-o
serie de faze, iar spațiul de adresare la care se face acces în cadrul unei faze este mai
mic decât
întregul spațiu de adresare al programului.
Dacă segmentele la care se face acces în cadrul unei faze sunt stocate în memoria
primară, programul este executat aproape la fel de repede ca în cazul în care toate
segmentele sale s-ar găsi în memoria primară, deoarece, practic, toate operațiile de
acces au loc la segmente existente în aceasta.
Când se generează o referire la un segment absent, el este adus în memoria principală,
înlocuind, eventual, alte segmente.
• Implementarea mecanismului: MMU va verifica prezența segmentului adresat prin
testarea unui anumit bit în descriptorul segmentului: acest bit este 1 când segmentul este
încărcat și zero când el este evacuat din memoria primară.
• Evacuarea se face mai rapid dacă segmentul nu a fost modificat de la încărcare,
nemaifiind necesară copierea sa în memoria de masă (de regulă, în cazul segmentelor
de cod).
Pentru aceasta, fiecare descriptor are un fanion indicând starea de modificat /
nemodificat (“accessed”) a segmentului în discuție. Inițial, fanionul are valoarea 0 și este
înscris cu 1 la fiecare operație de înscriere a unei locații din codul segmentului.
 O caracteristică esențială pentru arhitectura hardware a unui sistem folosind
tehnici de segmentare este data de posibilitatea întreruperii de către CPU a execuției în
mijlocul unei instrucțiuni și de reluare a instrucțiunii exact de la punctul la care a survenit
întreruperea. În aceste cazuri mecanismele clasice pentru întreruperi și capcane nu sunt
suficiente, pentru că ele sunt activate doar la sfârșitul instrucțiunii, așa că nu pot fi
utilizate în tratarea unor erori în manipularea segmentelor, erori care pot apărea oricând
pe durata desfășurării unei instrucțiuni.
Instrucțiunea nu poate fi terminată dacă a apărut o eroare de segment , deoarece
execuția ei ar conduce la o eroare ireparabilă.
Ultima variantă de tehnică de segmentare are mai multe avantaje (de exemplu
legate de rularea programelor al căror spațiu de adresare este mai mare decât cel al
memoriei fizice disponibile), DAR are și neajunsuri.
Cel mai important: dimensiunile neuniforme ale segmentelor complică gestionarea
spațiului de memorie (s-ar putea să nu existe spațiul necesar încărcării în memoria
primară a unui segment de program pentru că segmentul evacuat avea dimensiune mai
mică, deci memoria eliberată este insuficientă).
• Soluții:
- algoritmi complecși de înlocuire a segmentelor
- menținerea permanentă a unui spațiu neutilizat de memorie.
-paginarea, care divizează spațiul programului în submulțimi de aceleași
dimensiuni.
Paginarea - Întregul spațiu de memorie se partiționează în blocuri de dimensiuni
egale, numite pagini.
Paginarea elimină legătura între organizarea logică a programului și paginile de
memorie, deci are consecințe în relația programatorului cu spațiul de adrese.
Singurele componente care iau in considerare partiționarea spațiului programului în
pagini sunt cele ale mecanismului de gestiune a memoriei.
Memoria fizică este privită ca un set de blocuri, fiecare având dimensiunea unei pagini
Ca și în cazul segmentării, nu este necesară alocarea de blocuri contigue de
memorie pentru pagini contigue ale programului.
Paginile, ca și segmentele, pot fi parțial stocate în memoria principală a sistemului.
Când se face o referire la o adresa virtuală dintr-o pagina ce nu se află în memoria
primară, mecanismul de paginare copiază într-un bloc întreaga pagină conținând adresa
menționată
Mecanismul se numește "cerere de pagini" (demand paging), întrucât paginile sunt
aduse în memorie când sunt solicitate de către program.

În decursul timpului s-au dezvoltat mai multe tehnici de paginare, care pot fi
grupate după cum urmează:
o mecanisme care determină momentul la care o pagină trebuie copiată în
memoria principală. Cea mai des utilizată tehnică este cea bazată pe cererea de pagini
(“demand paging”), utilizată de către MMU ale unor microprocesoare moderne.
o S-au elaborat și alte metode, care încearcă predicția comportării programului și
încarcă în memorie paginile presupuse a fi utilizate de către acesta în viitorul apropiat;
mecanisme (sau tehnici de înlocuire) care folosesc algoritmi de selectare a paginilor
existente în memorie ce pot fi evacuate, eliberând, astfel, spațiul pentru alte pagini
mecanisme ce folosesc un algoritm de determinare a creșterii / descreșterii numărului de
blocuri de memorie folosite de un anumit program.
Gestiuneamemoriei la microprocesorul 80386DX

Modele de memorie – segmentare si paginare


• Unitatea de gestiune a memoriei in modul protejat lucreaza cu adresa virtuala.
• Adresa virtuala are 48 biti si este formata din selector si offset.
Specifica o locatie de memorie a unei instructiuni sau date.
Selectorul pe 16 biti contine: index (13 biti), bitul tabelei (TI) si 2 biti pentru RPL.
Spatiul adreselor virtuale (SAV): 214 (16384 = 16 K ) segmente de memorie unice, fiecare
cu dimensiunea maxima de 4GB
• Organizarea in segmente a memoriei
- Dimensiunea variabila a segmentului – avantaj pentru utilizarea eficienta a memoriei.
-Prin combinarea selectorului de segment (14 biti m.s.) cu offset-ul (32 biti) se obtine o
adresa virtuala pe 46 biti. De aceea, spatiul de adrese virtuale la 80386DX este de 246,
adica 64TB
• 80386 DX implementeaza segmentare si paginare.
• Modelul de segmentare la 80386 DX’s: 64 TB SAV este impartit in 32 Tbyte - spatiu
global si 32 Tbyte – spatiu local.
• Bitul TI al selectorului face deosebirea intre tabelele GDT si LDT care definesc SAV.

Memoria globala si locala a unui task

Prin multiprocesare o aplicatie este reprezentata printr-o colectie de taskuri.


Un task reprezinta un grup de rutine program care efectueaza impreuna o anumita
functie. Cand microprocesorul initiaza un task acesta poate avea active segmente de
memorie globala si locala. Spatiul local de adrese memoreaza date sau cod ce pot fi
accesate doar de taskul coresponzator.
Spatiul global contine in general resursele sistemului de operare si data care pot fi
stocate de mai multe sau chiar toate taskurile.
Spatiul adreselor fizice si translatia adreselor din spatiul virtual in spatiul fizic

SAV este 64 TB iar spatiul de adrese fizice este doar de 4GB. Astfel ca la un
moment dat doar o mica parte din informatiile din memoria virtuala se pot afla in memoria
fizica.
Informatiile care nu sunt utilizate in mod curent sunt stocate pe disk. Daca un
segment de memorie care nu este prezent in memoria fizica este accesat de un program
si este disponibil un spatiu in memoria fizica, atunci segmentul este citit de pe hard disk
si copiat in memoria fizica.
Pe de alta parte, daca spatiul fizic este plin, atunci un alt segment trebuie mai intai
trimis pe hard disk pentru a face loc noilor informatii.

Managerul de memorie, controleaza alocarea si de-alocarea memoriei fizice si


procesul de inter-schimbare a datelor intre HD si memoria fizica a sistemului se numeste
swapping. Astfel spatiul de adrese al sistemului apare mai mare decat memoria fizica a
sistemului.
Principalele tehnici prin care o adresa virtuala pe 48-biti este mapata pe o adresa
fizica de 32-biti sunt segmentarea si paginarea.
Procesul de translatare a adreselor necesita un element numit - tabela de cautare
bazata pe memorare (memorybased look-up table )

In procesul de translatie, unitatea de gestiune a memoriei (MMU - memory


management unit) stabileste daca sau nu segmentul sau pagina corespunzatoare din
spatiul virtual se afla in memoria fizica.
Daca nu este, atunci se realizeaza inter-schimbul intre un segment/pagina mai
veche din memoria principala cu noul segment/pagina de pe harddisk.

Procesul de translatie a adresei

a) Daca paginarea este off, atunci are loc procesul de translatie a segmentului
Partea cache a registrului segment de date :
• Defineste locatia, lungimea si tipul atributelor segmentului de memorie.
• Este pe 64 biti.
• Nu este accesibil programatorului
• Este incarcata cu descriptorul atunci cand prin executia unei instructiuni in
registrul de segment se incarca un nou selector
MOV DS, AX; DS se incarca cu un nou selector de segment de date din memoria
locala
• Se executa instructiunea.
• Descriptorul corespunzator din LDT este incarcat in partea cache a registrului.
• MMU verifica informatiile din descriptor pentru a stabili daca sunt sau nu valide..
• Daca PG = 0 adresa liniara este addresa fizica a locatiei de memorie care trebuie accesata.
b) Daca paginarea este on atunci unitatea de paginare aranjeaza spatiul fizic de
adresare in 1.048.496 pagini, fiecare pagina de 4096 octeti.
Blocurile de marime fixa este un dezavantaj pentru ca cele 4K adrese sunt alocate
de MMU chiar daca nu vor fi toate utilizate. Apare fragmentarea memoriei – se creeaza
sectiuni de memorie neutilizata. Fragmentarea reduce eficienta de utilizare a memoriei.
Avantajul este ca paginarea simplifica implementarea prin software a MMU.
Cand PG = 1 - a doua translatie are loc – translatia paginii

.
PDBR = page directory base register: identifica locatia tabelei page directory table;
20 biti sunt bitii MSB ai adresei. Cei 12 biti LSB sunt considerati 000H la inceputul unui
director, care se termina cu FFFH la sfarsit.
Directorul cu pagini contine 4K–octeti de locatii de memorie, fiind organizat in 1K
adrese pe 32 biti. Aceste adrese indica fiecare cate o tabela separata de pagini, care
este tot in memoria fizica.
DIR = reprezinta offsetul fata de valoarea din PDBR si selecteaza una dintre ce 1K
intrari de 32 biti din director. Acest pointer este memorat in 80386DX in bufferul TLB
(translation lookaside buffer). Aceasta valoare este utilizata ca adresa de baza a tabelei
de
pagini din memorie. Fiecare tabela de pagini este de 4Kocteti si contine un numar de 1K
adrese pe 32 biti. Aceste adrese sunt numite adrese ale paginilor. Fiecare adresa indica
o pagina de 4K locatii de date in memoria fizica.
PAGE = selecteaza una din cele 1 K intrari pe 32 biti dintr-o tabela de pagini.
Acesta intrare este memorata cache in TLB - translation lookaside buffer. Reprezinta o
adresa care selecteaza o pagina de 4K din memorie (page frame ). Aceasta pagina de
locatii de memorie este utilizata pentru stocarea datelor.
Partea 12-bit offset a adresei liniare identifica locatia operandului in pagina activa.

TLB Translation lookaside buffer: - Permite pastrarea a 32 seturi de intrari in


tabele.
Astfel ca intotdeauna vor fi 128K octeti de memorie paginata direct accesibili. Operanzii
din
aceste parti de memorie pot fi accesati fara a mai citi noi intrari din tabelele de pagini.
Daca un operand ce trebuie accesat nu este in nici una din aceste pagini, atunci se
consuma un timp suplimentar pentru citirea/scrierea intrarii tabelei de pagini in TLB.
Formatul unei intrari in tabela director sau tabela de pagini

• Adresa de baza – Base address ( 20 biti) a unei tabele de pagini (intrarea intr-o tabela
director) sau a unei pagini (intrarea intr-o tabela de pagini) . Adresa de baza reprezinta
bitii MSB (most significant bits); 12 LSB (least significant bits) sunt considerati 000 –
tabelele de pagini si paginile incep la locatii multiplu de 4K.
• U/S – implementeaza un mecanism de protectie a paginilor pe doua niveluri.
-> = 1 protectie la nivel utilizator – nivel de privilegiu scazut asignat paginilor
accesibile de catre aplicatiile software;
->= 0 protectie la nivel superior asignat resurselor sistemului de operare.

• R/W – read/write bit : este utilizat pentru a marca read-only or read- write o
tabela sau pagina de nivel utilizator.
• Read-only = 1
• Read-write = 0

• Protectia asignata unei tabele de pagini prin intrarea specifica in director se aplica
tuturor paginilor.
• P – present = 1 – indica daca o intrare este valida si disponibila in procesul de
translatie.
• = 0 – intrarea fie nu e definita sau nu e prezenta in memoria fizica. the
entry is either undefined or not present in physical memory
• Daca se incearca sa se acceseze o tabela de pagini sau o pagina care are
P=0 , atunci rezulta o exceptie numita page fault.
• A – accessed - 1 : o tabela sau o pagina au fost accesate ( acest bit este setat
inainte de a scrie la o adresa din pagina respectiva).
• D – dirty – este definit doar pentru o intrare a tabelei de pagini fiind setata daca
se
scrie la orice adresa din pagina respectiva.
• AVL bits – disponibili programatorului.
• Sistemul de operare poate verifica starea bitilor A, D pentru a stabili atunci cand
pagina din memoria fizica trebuie inlocuita prin swap.
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.

Elementele cheie ale mecanismului de protectie sunt segmentarea, paginarea si


descriptorii.

• Modelul de protectie ofera 4 posibile niveluri de privilegii fiecarfui task. Acestea sunt
numite: Level 0, Level 1, Level 2, Level l 3.
• Level 0 este cel mai privilegiat; Level 3 este cel mai putin privilegiat.
• Nivelurile de privilegii sunt asociate astfel:
• Level 0: software independent de aplicatii care ofera functii orientate pe microprocesor:
control I/O, gestiunea memoriei.
• Level 1: procese care ofera serviciile sistemului: accesul la fisiere.
• Level 2: implementeaza rutine customizate care sa suporte operatii ale sistemului in
scopuri speciale.
• Level 3: aplicatii utilizator.
• Prin aceasta protectie se obtine o mai buna fiabilitate software pentru ca erorile dintr o
aplicatie nu pot afecta sistemul de operare sau alte aplicatii.

• Terminologie – Accesul la cod si date prin modelul de protectie


• Descriptor privilege level (DPL) – a fost definit.
• I/O privilege level (IOPL) – a fost definit.
• Current privilege level (CPL) – nivelul de privilegii curent al unui task is defined as the
privilege level of the code or data segment that is currently being accessed by a task.
• Exemplu: CPL al unui task in executie este DPL octetul drepturilor de acces din
descriptor cache al registrului CS. Aceasta valoare este de obicei egala cu DPL al
segmentului de cod.
• Requested privilege level (RPL) este nivelul de privilegii al noului selector ce se incarca
in registrul segment.
• Exemplu: in cazul codului, este nivelul de privilegii al segmentului de cod care
contine rutina apelata. => RPL este DPL al segmentului de cod caruia I se transfera
controlul.
Cum sunt accesate segmentele de date de un cod cu CPL?

• Regula generala: Codul poate accesa doar date care sunt pe acelasi nivel de privilegiu
sau mai putin privilegiat.
• Exemplu: CPL al unui task =1 => poate accesa segmente de date cu DPL egal
cu1, 2 or 3.
• Cand un nou selector este incarcat in registrele DS, ES, FS or GS, DPL al segmentului
de date target este verificat sa respecte aceasta regula.
• Exceptie: Cand registrul SS este incarcat. In acest caz DPL trebuie sa fie egal cu CPL.
=> Stiva activa este intotdeauna la acelasi CPL. Fiecare nivel de privilegiu are cate o
stiva.
• Exemplu: DPL=2, CPL=0 and RPL=2 Are loc accesul la date?
• Solutie: DPL al segmentului target este 2 si este mai putin privilegiat decat CPL sau
RPL. De aceea criteriul de protectie este satisfacut si accesul la date are loc.

Cum este transferat controlul intre cod la acelasi nivel de privilegii sau intre cod cu
niveluri diferite de privilegii?
• Transferul controlului are loc:
• In acelasi segment de cod prin instructiunile:
• 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

• Transferul controlului programului are loc daca una din cele doua conditii este
indeplinita :
• Daca CPL este egal cu DPL, cele doua segmente sunt pe acelasi nivel de
privilegii.
• Daca CPL reprezinta un nivel mai privilegiat decat DPL, dar bitul C (conforming
code) din descriptorul noului segment este setat, rutina se executa la nivelul CPL.
• Regula generala: Cand controlul este transferat unui cod dintr-un segment cu un nivel de
privilegii diferit => noul segment de cod trebuie sa fie mai privilegiat. Se utilizeaza
descriptorul de poarta.
Formatul unui descriptor de poarta :
• 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
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.
• Verificari de privilegii la transferul programului prin poarta de apel.
• Apelul este realizat cu success daca:
• DPL poarta este egal cu CPL.
• RPL al codului apelat este (RPL<=CPL)

Multitasking
• Un microprocesor implementeaza o arhitectura software multitasking daca are on-chip
hardware care sa permita existenta mai multor taskuri in sistemul software si sa permita
ca acestea sa fie planificate pentru executie intr-o maniera time-sharing.
• Controlul programului este comutat de la un task la altul dupa o perioada de timp fixata.
• Un task este definit ca o colectie de rutine program ce efectueaza o functie specifica.
Aceasta functie se numeste proces. Microprocesorul are un mecanism eficient de
comutare a taskurilor.
• Cand este apelat in operare acesta are resurse de memorie locale si globale.
• Taskul este unitatea de lucru pe care un procesor o poate executa sau suspenda.
• Un procesor poate executa un: program, un task or proces, un serviciu al sistemului de
operare, un serviciu al unei intreruperi, tratarea unei exceptii.
• Task este elementul cheie al unei arhitecturi software multitasking.
• Arhitectura microprocesorului ofera un mecanism de salvare a starii taskului, trimiterea
unui task in executie sau comutarea dintr-un task in altul.
• Structura unui task este definita prin spatiul de executie al taskului si segmentul de stare a
taskului.
• Spatiul de executie al taskului contine
• segmentul de cod,
• unul sau mai multe segmente de date,
• segmentele de stiva.
• pentru protectie, fiecare nivel de protectie are cate o stiva.
Segmentul de stare a taskului – TSS

• TSS contine toate informatiile necesare pornirii sau opririi unui task.
• TSS specifica
• segmentele care fac parte din spatiul de executie al taskului
• reprezinta locul de stocare a altor informatii de stare a taskului.
• In multitasking TSS ofera mecanismul de legatura dintre taskuri.

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.

Invocarea taskurilor
• Un task poate fi invocat
• direct
• indirect
• Invocarea poate fi:
• intersegment jump (nu exista legatura de return la taskul anterior),
• intersegment call (informatiile de back linkage sunt salvate automat).

Invocarea directa a unui task


• Invocarea directa a unui task este atunci cand instructiunile JMP or CALL au ca
operand un selector.
• Executia instructiunii CALL include:
• 1. selectorul este incarcat in registrul TR
• Verificarea drepturilor de acces
• - descriptor este prezent P=1
• - taskul nu este ocupat Busy B=0
• - regula de protectie nu este violata: CPL=DPL
• 2. citeste descriptorul TSS din GDT si –l incarca in cache-ul registrului TR.

Invocarea indirecta a unui task

• JMP or CALL printr-o poarta a taskului asigura transferul controlului la un task cu RPL
diferit de CPL (mai privilegiat).
• Formatul unei task gate
• Selectorul indica poarta taskului (task gate) care poate fi in LDT sau GDT, in locul unui
selector TSS. Poarta contine TSS selector care este incarcat in registrul TR
pentru a selecta TSS si a initia comutarea taskurilor.

Curs 9

Întreruperi
• Întreruperea este produsă de un eveniment extern microprocesorului, adesea de o
operație de intrare/ieșire sau de expirarea unei perioade de timp.
• Efectul întreruperii:
• suspendarea execuției programului aflat în rulare,
• transferarea controlului unei rutine dedicate tratării întreruperii (interrupt handler - IH).
• IH are sarcina de a efectua acțiunile cerute de evenimentul extern care a generat
întreruperea.
Tipuri de întreruperi
• întreruperi vectorizate;
• întreruperi nemascabile;
• întreruperi nevectorizate;
• întreruperi cu relansare.

Întreruperi vectorizate
_ Întrucât există mai multe surse de întreruperi, selectarea rutinei de tratare presupune
cunoașterea identității sursei întreruperii. Aceasta se realizează prin execuția unui ciclu
special, numit ciclu de confirmare a acceptării cererii de întrerupere (interrupt
acknowledge cycle - INTA). Se utilizează magistrala externă a microprocesorului.

_ Evenimentul care a generat întreruperea determină furnizarea către CPU a unui cod de
identificare. Acest cod, citit de către microprocesor în ciclul de confirmare a acceptării
cererii de întrerupere, este utilizat de către CPU ca index al unei tabele păstrate în
memorie.
_ În general, întreruperile vectorizate sunt mascabile.
_ Primirea cererilor de întreruperi vectorizate se face printr-un singur semnal fizic,
deoarece detaliile privind sursa cererii se obțin prin ciclul de confirmare a acceptării
cererii de întrerupere.

Întreruperi nemascabile

_ O astfel de cerere de întrerupere suspendă execuția programului aflat în rulaj indiferent


de funcția executată de acesta.
_ Exemple tipice de evenimente:
_ tendința de a ieși din parametrii de funcționare normală a sursei de alimentare;
_ detectarea unor erori în operațiile în conjuncție cu memoria (ex. erori de paritate).
_ alte defecte majore ale sistemului
_ Semnalarea unei cereri de întrerupere nemascabilă se face printr-un semnal de
intrare distinct. Nu mai este necesară indicarea sursei unei astfel de întreruperi, întrucât
ea se cunoaște.

Întreruperi nevectorizate

_ Întreruperile nevectorizate se implementează prin același mecanism ca și în cazul


întreruperilor nemascabile, adică există linii specializate de intrare pentru semnalarea
cererilor.
_ Spre deosebire de cele nemascabile, întreruperile nevectorizate pot fi dezactivate prin
program.

Întreruperi cu relansare

_ Suspendarea execuției unui program se face, de regulă, la terminarea instrucțiunii


curente pentru a se reduce la minimum posibil informațiile ce se salvează în conjuncție
cu programul întrerupt.
_ Sunt cazuri când întreruperea este declanșată de o situație care împiedică însăși
terminarea execuției corecte a unei instrucțiuni, caz în care cererea de întrerupere
trebuie servită înainte de terminarea instrucțiunii.
_ Soluție: proiectarea instrucțiunilor astfel încât să fie posibilă întotdeauna repornirea
execuției lor, indiferent de momentul la care a survenit întreruperea.

Timpul de latență
_ Timpul cerut de servirea unei cereri de întrerupere depinde de operațiile necesare
tratării evenimentului extern care a cauzat întreruperea, precum și de întârzierea între
activarea cererii și începutul activității rutinei de tratare. Această întârziere este o
caracteristică a microprocesorului și se numește timp de latență.
_ Pentru a putea evalua timpul de latență a unui microprocesor trebuie examinata
secvența de operații necesare pentru comutarea de la programul întrerupt la rutina de
servire a întreruperii.
Operațiile necesare în acest scop sunt:

_ salvarea în stiva a indicatorilor de condiții (continutul registrului EFLAGS si a IP:CS);


_ execuția ciclului de confirmare a acceptării cererii de întrerupere.

Priorități
• Ordinea de prioritate este, în general, următoarea:
• întreruperi cu relansare (intreruperi interne) - ele au prioritatea maximă, deoarece sunt
asociate unor evenimente care nu pot aștepta terminarea instrucțiunii curente pentru a fi
servite;
• întreruperi nemascabile - întreruperile din această clasă sunt prioritare celor vectorizate
sau nevectorizate, întrucât evenimentele care le determină necesită o servire rapidă și
întreruperile nu pot fi mascate;
• întreruperi vectorizate;
• întreruperi nevectorizate.

Întreruperi vectorizate

Interfata intreruperilor externe mascabile


• INTR – cerere de intrerupere : "1" activa.
• INTA – confirmare a cererii de intrerupere

INTR trebuie dezactivat inaintea terminarii executiei rutinei de intrerupere, altfel


aceeasi intrerupere poate fi confirmata a doua oara.
• Cand semnalul INTR a fost recunoscut, microprocesorul incepe ciclul de
magistrala INTA
• Sunt generate 2 pulsuri de INTA :
- Primul puls semnaleaza circuitului de intreruperi confirmarea acceptarii cererii si
sa se pregateasca sa trimita numarul tipului
- Al doilea puls, circuitul de intreruperi pune pe magistrala de date numarul tipului
de intrerupere
• READY – insereaza stari de asteptare in ciclul magistrala;
• Linii de adresa - selecteaza circuitul de intreruperi sau registrele interne ale
acestuia;
• LOCK : nici un alt circuit nu poate prelua controlul magistralei sistem pana cand
secventa ciclului magistrala INTA nu s-a terminat.
Circuit programabil pentru intreruperi – 8259A

Semnificatia pinilor :

• D0-D7 – linii de date conectate la magistrala de date. Transfera cuvintele de


comanda, informatii de stare si numarul tipului intreruperii
• INT, INTA – ofera un mecanism de tip handshake prin care circuitul trimite
microprocesorului o cerere de intrerupere si primeste confirmarea acceptarii acesteia.
Pe durata unui ciclu magistrala INTA, semnalul INTA\ are 2 pulsuri “0” logic prin care
semnaleaza ca:
• a. cererea a fost confirmata;
• b. trebuie sa trimita pe magistrala de date numarul intreruperii active cu cea mai
mare prioritate.
• A0 – selectia registrului intern care este accesat in timpul operatiilor de citire/scriere;
• IR0-IR7 – cereri de intrerupere;
• CAS 0-2 - interfata cascada intr-o configuratie master/slave. O configuratie
master/slave extinde de la 8 la maxim 64 numarul liniilor IR.
• SP/EN - (input slave program/ output enable) linie multifunctionala. Ca intrare SP\
trebuie sa fie “1” pentru master si “0” pentru slave. Dupa primul INTA circuitul master
trimite codul CAS (3 biti) care identifica circuitul slave cu cea mai mare prioritate ca sa
fie servit. Fiecare slave compara codul CAS. Cand se potriveste, circutul slave pune pe
magistrala de date numarul intreruperii.

Circuit programabil pentru intreruperi – 8259A


8259A arhitectura interna :
• Data Bus Buffer si Read/Write Logic ofera accesul la registrele interne.
• Interrupt Masking Register (IMR) activeaza sau mascheaza cererile de
intrerupere.. M0-M7 este “1” -mascat, altfel “0” activat.
• Interrupt Request Register (IRR) pastreaza starea curenta a cererilor de
intrerupere. Pentru fiecare intrerupere cate un bit. “1” activ ; “0” inactiv.
• Priority Resolver Register – identifica intreruperea cu cea mai mare prioritate pe
baza unei scheme de prioritati stabilita prin software.
• Interrupt Service Register (ISR) pastreaza
intreruperea in curs de servire. Intreruperea cu cea mai mare prioritate este memorata
aici in timpul primului puls INTA\ . Starea acestui registru poate fi citita de catre
microprocesor.

Desfășurarea unei secvențe de întrerupere (întrun sistem cu 8086) :

1. Una sau mai multe linii IRQ trec în ”1” logic setând biții corespunzători în registrul IRR
2. 8259 trimite un semnal INT către CPU
3. CPU răspunde cu un puls pe linia de INTA
4. La primirea pulsului de INTA biții corespondenți din ISR sunt setați și cei din IRR resetați
5. CPU inițiază un al doilea puls INTA în urma căruia 8259 eliberează
pe magistrală conținutul lui ISR
6. La sfârșitul ciclului magistrală toți biții din ISR sunt resetați
Programarea lui 8259A :
• Programarea circuitului se realizeaza prin cuvinte de comanda de initializare si de operare.
• Cuvintele de initializare (ICW1, ICW2, ICW3 si ICW4) sunt incarcate in registrele interne ale
circuitului intr-o secventa de initializare predefinita.
• Comenzile de operare permit microprocesorului sa varieze diferite moduri de operare asociate
modului de baza definit la initializare.

• Comenzile se realizeaza prin executia instructiunilor

OUT sau MOV.

• Cand adresa asignata circuitului 8259A este pe magistrala de adrese se activeaza pe


“0” logic intrarea CS\. Acest semnal activeaza unitatea read/write logic a circuitului si
datele de pe liniile D0- D7 sunt scrise in registrul de comanda din blocul control logic in
mod sincron cu semnalul WR\.

Capcane (Traps)
Capcana (trap) este un mecanism care produce apelarea automată a unei
proceduri. Spre deosebire de o întrerupere, capcana este activată, explicit sau implicit,
de către o acțiune efectuata de către programul aflat în rulaj (“întreruperi” software).
Capcanele sunt utilizate pentru tratarea unor condiții de excepție, adesea
anormale, care apar în cursul existenței unui program, sau pentru activarea unor
proceduri speciale, cum ar fi rutine ale sistemului de operare.
Tipuri de Capcane
a) capcane activate întotdeauna;
b)capcaneactivate/dezactivate prin program;
c) capcane solicitate explicit prin program.
a) Capcane activate întotdeauna - Se asociază cu un eveniment de tip eroare,
indiferent de operația efectuată de către CPU;De aceea, nu există mijloace de
dezactivare a acestui tip de capcană.
Exemple tipice:
_ tentativa de a executa o instrucțiune inexistentă;
_ tentativa de a executa, dintr-un regim neprivilegiat, o instrucțiune rezervată
regimului privilegiat;
_ capcanele în conjuncție cu gestiunea memoriei externe.

b) Capcane Activate/Dezactivate Prin Program


_ Evenimentele care reprezintă sau nu o condiție de excepție sau anormală, în
funcție de acțiunile specifice efectuate de către program.
_ Capcanele pot fi activate (dezactivate) de programul însuși, după cum este
necesar sau nu a detecta aceste situații.
_ Standardul IEEE 754 prevede ca excepțiile generate de operațiile cu numere
cu virgulă mobilă sau de conversie pot genera o capcană numai în urma unei activări
de către program.
_ Un alt exemplu: capcana utilizată pentru a detecta tentativa de execuție a unei
operații cu operanzi cu virgulă mobilă în absența unității aritmetice dedicate acestor
operații. În aceste cazuri capcana se dezactivează când configurația hardware include
procesorul matematic

c) Capcane Solicitate Explicit Prin Program


_ Nu se folosesc, în mod obișnuit, pentru detectarea condițiilor anormale, dar
reprezintă un mijloc de activare a execuției unor rutine speciale, de cele mai multe ori
acestea fiind funcții ale sistemului de operare.
_ Sunt astfel organizate încât sa fie posibilă activarea lor la apariția unor
capcane. Operației îi sunt dedicate instrucțiuni speciale, numite adesea apeluri de
sistem (system-call instructions), dată fiind menirea lor principală de activare a rutinelor
sistemului de operare.
_ Când se execută o astfel de instrucțiune se activează capcana corespunzătoare.
_ Prin asocierea unui parametru, aceeași instrucțiune poate activa capcane diferite.

Manipularea Capcanelor
_ Acțiunile cerute de manipularea capcanelor sunt similare cu cele executate la
apariția unei întreruperi:
_ se salvează în stiva indicatorii de condiție și contorul programului (CS:IP).
_ se execută saltul la rutina de tratare a capcanei.
_ Informația despre rutina de tratare este memorată într-un vector stocat într-o
zona de memorie bine precizată; în anumite cazuri capcanele și întreruperile folosesc
în comun același vector.
_ De regulă, rutina de tratare a capcanei se execută la un nivel privilegiat
superior față de cel în care se află programul ce a produs capcana.
Priorități
_Apariția simultană de întreruperi și capcane ridică probleme legate de
selectarea celei căreia să i se acorde atenție.
_Ca și întreruperile, capcanele sunt servite, de regulă, la terminarea instrucțiunii
curente. Unele capcane (cum este page fault trap) trebuie servite imediat, întrerupând
execuția
instrucțiunii curente. Ele pot fi considerate similare cu întreruperile cu relansare.
_Deși fiecare microprocesor are propriile sale reguli de prioritate privind
capcanele, se pot folosi următoarele criterii generale:
_ capcanele cu relansare au prioritatea maximă, ca și întreruperile cu relansare;
_ celelalte capcane au priorități superioare întreruperilor mascabile, deoarece ele
sunt folosite pentru detectarea erorilor și stărilor anormale, deci necesită atenție
imediată;
_ întreruperile nemascabile pot întrerupe rutinele de tratare a capcanelor și a
întreruperilor.

Instrumente de Depanare
• Depanarea este un proces dificil, care se simplifică prin fragmentarea programelor în
blocuri mai mici, mai ușor de stăpânit. În sprijinul depanatorului se pot oferi
următoarele seturi de instrumente:
a) Execuție pas cu pas;
b) Puncte de suspendare a execuției (breakpoints);
c) Memorarea “traseului” programului (program trace).

a) Execuție Pas cu Pas


• Primul instrument permite rularea programului instrucțiune cu instrucțiune, execuția
fiind stopată la sfârșitul fiecărei instrucțiuni.
• Prin examinarea stării CPU și a locațiilor de memorie se poate determina eventuala
abatere a programului de la comportarea dorită.
b) Puncte de Suspendare a Execuției (Breakpoints)
• Punctele de suspendare a execuției permit suspendarea execuției unui program
după execuția unei anumite instrucțiuni.
• Permit execuția unor blocuri mai mari de program înainte de suspendarea
execuției la un anumit punct cu scopul testării rezultatelor intermediare.

Memorarea “Traseului” Programului (Program Trace)


_Traseul programului constă într-o înregistrare a tuturor instrucțiunilor executate
de program de la ultima suspendare și permite verificarea corectitudinii fluxului de
instrucțiuni parcurse
de program.
_Pentru oferirea suportului necesar acestor
instrumente de depanare, toate microprocesoarele moderne sunt prevăzute
cu mecanismele hardware pentru trace.
Capcana de Traseu

_Majoritatea microprocesoarelor sunt prevăzute cu o capcană specială, numită


trace trap - capcană de traseu. Ea permite atât execuția pas cu pas, cât și realizarea
de trasee ale programului. Capcana se activează (dezactivează) prin intermediul unui
indicator de condiție special, accesibil prin program.
_Când este activă, capcana de traseu lansează în execuție rutina de tratare
după ultima instrucțiune executată. Desigur, capcana este dezactivată automat pe
durata execuției rutinei de tratare în scopul evitării generării unei bucle infinite.
_Rutina de tratare a capcanei de traseu permite programatorului să afișeze un
set de informații (starea CPU, locații de memorie) care să înlesnească depanarea
programului. Aceeași rutina permite memorarea într-un tampon al traseului a datelor
despre instrucțiunea executată.

Puncte de Suspendare Software a Execuției


• Rularea pas cu pas a programelor este, de cele mai multe ori, consumatoare de timp,
mai ales după ce s-au corectat mari blocuri de program.
• Utilitatea punctului de suspendare a execuției (breakpoint): aceasta facilitate permite
inserarea în program a unor "comenzi" de suspendare.

_Se selectează instrucțiunile pentru care tentativa CPU de a le executa duce la


suspendarea execuției programului.
_Pentru implementare se folosește o instrucțiune capcană specifică, a cărei lungime
este cea minimă permisa pentru o instrucțiune.
_Instrucțiunea a cărei execuție ar trebui să suspende rularea programului este stocată
într-o zonă specială de memorie și este înlocuită prin instrucțiunea breakpoint.
_Când contorul programului indică locația în care se afla instrucțiunea breakpoint,
aceasta este executată, fapt ce rezultă în activarea rutinei asociate de tratare.

Puncte de Suspendare Hardware a Execuției


• Mecanismul de suspendare software a execuției permite utilizatorului să întrerupă
execuția unui program doar cu ajutorul unei instrucțiuni particulare.
• Punctul de suspendare hardware a execuției se implementează cu ajutorul unității de
gestiune a memoriei (memory management unit - MMU), care conține registre în care
se înscrie adresa de memorie la a cărei adresare trebuie să se suspende
execuția programului.
Puncte de Suspendare Hardware a Execuției)

_ Când mecanismul de breakpoint este activat, MMU compară fiecare noua


adresă de acces cu conținutul registrelor de breakpoint. La egalitate, MMU emite un
semnal capcană, fapt ce permite ca tentativa de acces la locația de memorie al cărei
adresă este păstrată în registrele de breakpoint să conducă la suspendarea execuției
programului și activarea unei rutine adecvate de tratare a situației.
_ Microprocesoarele moderne permit utilizarea de puncte de suspendare a
execuției programului atât software, cat și hardware. Numărul primelor este limitat doar
de dimensiunea zonei de salvare, în timp ce numărul de puncte de suspendare
hardware este limitat de numărul de registre breakpoint din MMU.

Întreruperi si excep_ii la microprocesoarele INTEL


• Intreruperile si exceptiile sunt evenimente care arata ca o conditie exista
undeva in sistem, procesor sau in programul curent in executie si necesita atentia
procesorului.
• Intreruperile apar la momente de timp aleatoare in executia unui program ca
raspuns la semnalele venite de la elemente hardware.
• Elementele hardware din sistem utilizeaza intreruperile sa poata gestiona
evenimentele externe procesorului.
• Elementele software pot genera intreruperi prin executia instructiunii INT n.
• Exceptiile au loc atunci cand procesorul detecteaza o conditie de eroare in
timpul executiei unei instructiuni.
Întreruperi si excep_ii la microprocesoarele INTEL
• La primirea unei cereri de intrerupere sau la detectarea unei exceptii:
• Procedura/taskul curent in executie sunt suspendate, iar procesorul executa
rutina de servire a intreruperii sau a exceptiei.
• Cand se termina executia rutinei de servire a intreruperii, procesorul reia
executia procedurii/taskului intrerupt.
• Reluarea procedurii intrerupte se realizeaza fara pierderea continuitatii
programului.
• Se poate intampla ca revenirea dintr-o exceptie sa nu fie posibila sau ca
intreruperea sa cauzeze terminarea executiei programului curent.
• Fiecare exceptie definita arhitectural si fiecare conditie de intrerupere cu o
tratare speciala a procesorului are asignat un numar unic de identificare numit vector.
• Procesorul utilizeaza vectorul asignat ca index intr-o tabela a vectorilor de
intreruperi. Numerele asignate vectorilor pot varia de la 0 la 255.
• Vectorii de la 0 la 31 sunt rezervati exceptiilor si intreruperilor definite
arhitectural. Nu toti vectorii din acest domeniu au o functie definita. Vectorii neasignati
unei functii raman rezervati.
• Vectorii de la 32 la 255 sunt pentru intreruperi definite de utilizator. Aceste
intreruperi sunt, in general, asignate echipamentelor I/O, ca sa poata trimite cereri
procesorului prin mecanismele hardware de intreruperi externe.
Surse ale intreruperilor :

• Intreruperi externe (generate hardware). Intreruperi hardware mascabile ce pot


fi trimise prin pinul INT. Daca flagul IF al registrului EFLAGS permite, toate intreruperile
hardware mascabile pot fi mascate in grup.
• Intreruperi generate-software. Instructiunea INT n permite generarea de
intreruperi din program prin specificarea numarului vectorului ca operand.
• Exemplu: INT 32 apeleaza rutina intreruperii 32.
• Daca in instructiune se specifica numarul 2 (numarul vectorului pentru NMI) se
apeleaza rutina pentru intreruperea NMI, dar nu se activeaza elementele hardware
pentru NMI.
• Intreruperile generate software nu pot fi mascate prin flagul IF.
• Exceptii de tip eroare de program detectate de procesor. Procesorul genereaza
una sau mai multe exceptii atunci cand detecteaza erori software (aplicatie sau sistem
de operare) . Exista un numar asociat fiecarei exceptii detectabile de catre procesor.
• Exceptii generate software. Instructiunile INTO, INT 3 permit generarea
exceptiilor software. Aceste instructiuni permit verificarea conditiilor exceptiei prin fluxul
de instructiuni.
• De exemplu, INT 3 cauzeaza generarea exceptiei breakpoint sau INTO –
generarea exceptiei overflow.
• Instructiunea INT n poate fi utilizata pentru a emula exceptii prin software.
• Exista limitari fata de exceptiile generate prin hardware care produc un cod al
erorii.

Clasificarea intreruperilor interne si exceptiilor in functie de raportare

• Erori— exceptii care pot fi corectate si care odata corectate permit repornirea
programului fara pierderea continuitatii. Daca se raporteaza o exceptie de tip eroare,
procesorul reface starea masini cu starea de
dinaintea executiei instructiunii eronate. Adresa de return (continutul salvat al
registrelor CS, EIP) al rutinei indica instructiunea cu eroare si nu instructiunea
urmatoare acesteia. ( Ex: divide error exception; invalid opcode exception; interrupt
table limit too small).
• Capcane – exceptii care sunt raportate imediat dupa executia instructiunii
capcana. Capcanele permit ca executia unui program sa continue fara pierderea de
continuitate. Adresa de return arata instructiunea de executat dupa instructiunea
capcana. (Ex. breakpoint exception – INT 3).
• Abort – exceptii care nu raporteaza locatia instructiunii care cauzeaza exceptia
si nu repornesc programul care a cauzat exceptia. Sunt utilizate pentru erori severe,
erori hardware, inconsistente sau valori ilegale in
tabelele sistemului.
Prioritati

• Prioritatea se realizeaza in doua moduri:


• Pe baza unei ierarhii a grupurilor de intreruperi. Ordinea este: reset, intreruperi
interne si exceptii, intreruperi software intreruperi nemascabile si intreruperile hardware
externe.
• In fiecare grup, fiecare intrerupere are asignat un nivel de prioritate prin numarul
tipului. Tipul 0 identifica, iar 255 identifica intreruperea cu prioritatea cea mai scazuta.

Prelucrarea
intreruperilor in mod
real la 80386DX
• La sfarsitul instructiunii curente
microprocesorul testeaza.
• intai intreruperile interne sau exceptiile,
• apoi NMI, si,
• la final, INTR pentru a determina daca a aparut vreo intrerupere externa.
Tabela vectorilor/descriptorilor de intreruperi

• Aceasta tabela face legatura intre numerele tipurilor de intreruperi si locatia de


memorie unde se afla rutina de servire a intreruperii. Tabela se numeste:
• Tabela vectorilor de intreruperi (IVT) – in modul real;
• Tabela descriptorilor de intreruperi (IDT) - in modul protejat
• Tabela contine 256 de elemente – pointeri de adrese (Vector 0 ÷ Vector 255),
unde un element corespunde fiecarui numar asociat tipurilor de intreruperi. Pointerii
identifica in memoria program locatiile de inceput ale rutinelor de tratare a
intreruperilor.
• In general, IVT ocupa zona 00000H ÷ 003FFH (primul 1KB de memorie). Se
poate ca IVT sa se afle oriunde in spatiul de memorie. Adresa de inceput si marimea
sa pot fi definite de registrul IDTR. La reset sau la pornirea sistemului in modul real
continutul IDTR este 0 iar limita IVT este 3FF.

• Fiecare vector are 2 cuvinte de memorie.

• Cuvintele de la adresele 003FCH si 003FF vor indica CS255 : IP255.


• In tabela IVT:
• Vectorii 0 ÷ 31 : au functii dedicate sau sunt rezervati. Exemplu: 0,1,3,4 sunt
pentru divide error, debug exception, breakpoint, overflow error.
• Vectorii 32 ÷ 255 : disponibili utilizatorilor pentru diverse intreruperi software
sau hardware.
• In cazul intreruperilor hardware externe: fiecare numar (nivel de prioritate) are asociat
un semnal de intrerupere intr-un hardware extern.

Tabela vectorilor de intreruperi si IDT

• Tabela descriptorilor de intreruperi (IDT) se pot afla oriunde in spatiul de memorie.


• IDTR contine adresa de baza si limita IDT
• IDT contine descriptori de poarta (gate descriptors) max 256.
• Daca rutina careia i se transfera controlul este in taskul curent, atunci se foloseste: trap gate sau
interrupt gate;
• Daca rutina careia i se transfera controlul este in alt task, atunci se foloseste: task gate
• Prin acest mecanism se redirectioneaza executia programului.
• Un descriptor de poarta are 8 bytes de memorie
• Gate 0 se afla la IDT + 0H ÷ IDT + 7H
• Limita tabelei IDT poate fi o valoare mai mica de 7FFH pentru a minimiza
memoria rezervata pentru IDT.

Formatul descriptorului portii de intrerupere

• Octetul drepturilor de acces: identifica daca sau nu descriptorul de poarta este


valid, nivelul de privilegii ale rutinei si tipul portii.
• P – prezent; 1 – descriptorul este activ;
• DPL – nivel de privilegii pentru rutina de servire a intreruperii; 00 – cel mai
privilegiat.
• T – tip = 0 poarta de intreruperi = 1 poarta de capcana : pentru capcana, flagul
IF nu este sters.

Instructiuni pentru intreruperi

Instructiuni de manipulare a flagului de intreruperi (IF) :

• CLI – sterge IF
• STI – seteaza IF (activeaza semnalul INT)
• Instructiunile se executa in modul protejat. Daca CPL > IOPL instructiunile nu se executa si se
genereaza exceptia general protection
• LIDT (Load interrupt descriptor table register) este instructiunea utilizata pentru a modifica registrul
IDTR.

In forma generala este:


• LIDT EA ; EA- adresa efectiva
• EA este reprezentata prin 3 words = 2words pentru adresa de baza +1 word pentru limita tabelei;
• SIDT (store interrupt descriptor table register) este instructiunea utilizata pentru examinarea
continutului registrului IDTR.
• Instructiunea de intrerupere software este utilizata pentru a initia un apel vectorizat al rutinei de
tratare a intreruperii.
• Prin executia acestei insructiuni controlul programului este transferat subrutinei indicate de vector
sau de poarta cu numarul n specificat de instructiune.
• INT n ;
• Fiecare rutina de tratare a intreruperii trebuie sa aiba return, pentru a transfera controlul inapoi
programului principal.
• IRET ; revenirea din rutina de tratare a intreruperii
Curs 10
Sistemul de memorie

Există două arhitecturi consacrate în ceea ce priveste organizarea sistemului de


memorie: von Neumann si Harvard. În cazul arhitecturii von Neumann memoria este
văzută ca un tot unitar în care se află atât programele cât si datele; în cazul arhitecturii
Harvard memoria este împărtită în două părti distincte, memorie program si memorie
de date

Configuratia pinilor :

Circuite de memorie ROM :


• Memoria ROM (Read-Only Memory) este un tip de memorie care nu poate fi modificată sau stearsă
de către procesor. Este în general non-volatilă.
• Circuite de memorie de tip ROM
• Programata din fabrica, nu poate fi modificata
• Circuite de memorie de tip PROM (Programmable ROM)
• Poate fi programata o singura data
• Circuite de memorie de tip EPROM (Erasable PROM)
• Reprogramarea prin expunere la lumina UV de mare intensitate timp de 20 minute
• Circuite de memorie de tip flash EPROM, E2PROM sau EEPROM (Electrically Erasable PROM)
• Scrierea este mai lenta decat in RAM normal. Utilizata pentru memorarea informatiilor de setup (ex.
video), BIOS, etc.
EPROM

Memoria RAM
• Memoria de tip RAM (Random Access Memory) se caracterizează prin faptul că timpul de acces la
date este independent de localizarea efectivă (în circuit) a acestora.
• SRAM. Circuitele SRAM (Static RAM) sunt circuite de memorie RAM volatile care utilizează
patru tranzistoare per celulă pentru a păstra sarcina electrică de „1” logic. Timpul de acces este mai
rapid fata de EPROM (250ns). SRAM pentru cache are timp de acces de ordinul 10ns.

• SRAM sunt limitate ca dimensiune ( pana la 128K X 8). DRAM sunt disponibile
in capacitatimai mari, (ex. 64M X 1)
• Circuitele DRAM (Dynamic RAM) sunt circuite de memorie RAM volatile care
utilizează un condensator pentru a păstra sarcina electrică de „1” logic. Din cauză că
timpul de stocare a sarcinii în elementul capacitiv este de ordinul milisecundelor aceste
circuite necesită, spre deosebire de SRAM, un ciclu periodic de între_inere (refresh) a
sarcinilor electrice la nivel de celulă la fiecare 2 pana la 4 ms. Densitatea elementelor
electronice pentru implementarea unei celule pe pastila de siliciu a circuitului este de
patru ori mai mică decât în cazul SRAM (memoria SRAM necesită patru tranzistoare
per celulă, memoria DRAM unul singur) si de aceea costul per unitate de stocare este
mai mic. Pinii de adresa sunt multiplexati.
• Exemple de tehnologii actuale DRAM: FPM DRAM (Fast Page DRAM), EDO DRAM
(Extended Data Out DRAM), SDRAM (Synchronous DRAM), DDR SDRAM (Double
data-rate SDRAM), RDRAM (rambus DRAM), VRAM (Video RAM) etc.
• Circuitele NVRAM (Non-volatile RAM) sunt circuite de memorie SRAM realizate în
tehnologie CMOS, cu consum redus, alimentate cu o baterie care să permită retinerea
informatiilor din circuit la întreruperea alimentării cu energie electrică a sistemului

• DRAM
Detectarea si corectia erorilor

• Mecanismele de detectare a erorilor presupun stoparea operatiilor cu memoria


înainte ca informatii gresite să fie utilizate în sistem. Corectia erorilor presupune
reconstruirea informatiilor gresite, pe baza unor informatii redundante, chiar în timpul
functionării sistemului.
Există două tipuri de erori: permanente (hard errors) sau aleatoare (soft errors).
Erorile permanente sunt cauzate de defecte hardware, iar erorile aleatoare de
interferente, desincronizări sau erori de program.
• Una dintre metodele cele mai utilizate de detectare si corectie a erorilor se
bazează pe utilizare unor biti de paritate. În cele mai multe cazuri se utilizează un
singur bit de paritate pentru fiecare cuvânt de date din memorie. O astfel de metodă
poate detecta erorile simple (modificare unui singur bit din cuvânt), nu si erorile
multiple, si nu poate corecta aceste erori. Pentru detectarea erorilor multiple si corectia
erorilor simple se poate extinde metoda bitului de paritate de la nivel de cuvânt la nivel
de bloc, pe lângă bitul de paritate a fiecărui cuvânt se utilizează si un bit de paritate la
nivel de coloană a blocului de cuvinte.
• Verificarea paritatii – detecteaza un singur bit eronat din memorie. Pentru
fiecare 8 biti de date se adauga 1 bit de paritate. Paritate EVEN, al 9-lea bit devine 1
daca exista un numar par de 1 in toti cei 9 biti. Paritate ODD - al 9-lea bit devine 1
daca este impar.

• Suma de control sau BCC (Block-Check Character). Poate detecta biti multipli eronati. - Suma in
complement fata de 2 a secventei de octeti (negativul sumei). Nu exista eroare daca rezultatul
adunarii datelor cu suma
• CRC (Cyclic Redundancy Check) – verifica transferul datelor prin hardware (ex.
harddrives). Datele sunt stream-uri seriale de n-biti. Bitii sunt coeficientii unui polinom (M(X)): b0 –
cmps bit, iar bn cms bit.

• Paritate, BCC si CRC sunt doar mecanisme de detectie. Sistemul este trecut in starea halt
daca este detectata vreo eroare. Corectia erorilor este inclusa in noile sisteme. SDRAM include ECC
(error correction code).
• Corectia va permite sistemului sa continue operarea. Corectia erorilor costa in termeni de
extra-biti.
• Corectia erorilor bazata pe Codurile Hamming. Pentru corectia unui singur bit dintr-un octet
de date sunt necesari 4 biti de paritate.
• Circuitul 74LS636 – corecteaza erorile prin memorarea a 5 biti de paritate pentru fiecare octet
de date. Are 8 pini de date (I/O); 5 pini de paritate (I/O), 2 pini de control, 2 iesiri de eroare : Single
error flag (SEF), Double error flag (DEF).

• Prin introducerea bitilor de paritate la nivel de bloc de pot detecta erorile multiple si pot fi corectate
erorile simple.
• Un standard de corectie bazat pe implementarea hardware a bitului de paritate la nivel de cuvânt
este ECC (Error Correction Code). Acest mecanism implică atât suport hardware la nivel de circuit de
memorie, cât si suport hardware si software la nivel de sistem.
• O altă modalitate de detectare al erorilor la nivel de bloc de date este tehnica bazată pe sumă de
control. Această se bazează pe un mecanism simplu de tip modulo n pe baza însumării tuturor
elementelor din bloc. Un mecanism similar, dar care oferă o sigurantă mai mare este cel care extrage
pentru un bloc de date un CRC (cyclic redundancy code) care permite detectarea oricăror modificări
a informatiilor din respectivul bloc de date. Algoritmul de calculare a CRC-ului se bazează pe
interdependenta polinomială a informatiilor si oferă o acuratete mai mare de detectare a erorilor.
Interfatarea cu circuitele de memorie .Magistrala sistem

• Orice sistem de calcul este format din UCP, sistem de memorie si porturi de
intrare / iesire (sistem I/O), acestea fiind părtile componente de bază.
• Multimea conexiunilor (liniilor electrice) care interconectează UCP cu sistemul
de memorie si cu sistemul I/O se numeste magistrală sistem. Aceasta are rolul de a
permite schimbul de informatii (date) între UCP si restul sistemului precum si de a
transmite comenzile UCP către celelalte componente ale sistemului.
• Există trei componente ale magistralei sistem: magistrala de adrese, magistrala
de date si magistrala de comenzi.

Decodificarea adreselor de memorie

• Procesorul adreseaza un spatiu de memorie mai mare decat al unui circuit de


memorie.
• Pentru a aloca unui circuit de memorie un spatiu in memoria adresabila a
microprocesorului , este necesara decodificarea.
• Exemplu: 8086 are adrese pe 20-biti si un spatiu total de adresare de 1 MB. EPROM
2716 are numai 2KB de memorie si 11 pini de adresa. Un decodificator poate fi utilizat
pentru a aloca 2KB de memorie in spatiul de 1MB de adrese.
• 74LS138 – Decodificator 3/8
Interfatarea memoriei pentru microprocesoare pe 8 biti
Interfatarea memoriei pentru microprocesoare pe 16 biti
-
(8086/80186), MWTC for 80286 and 80386SX,
A0 (or BLE, Bus Low Enable)

• Magistrala de date este impartita in bancuri

Stabilirea functiilor CS
• Cu alte cuvinte putem conecta liniile magistralei de adrese sistem A0 – A12
direct la intrările de adrese ale circuitelor (cu A12 -> /A12) si liniile A12, A13 si A14 le
putem folosi ca semnale de selec_ie. Dacă în sistem nu se mai află nici un alt
dispozitiv mapat în acest spatiu de adrese este suficientă utilizarea liniilor A12-A14,
dacă mai există si alte dispozitive trebuie să utilizăm si linia A15 pentru a identifica în
mod unic cele două circuite de memorie.
Dacă nu facem acest lucru este posibil ca în momentul emiterii adresei 9000H,
de exemplu, (aflată în alt dispozitiv) circuitul 1 să ne returneze con_inutul adresei
1000H (cele două adrese diferă exact prin linia de adresă A15).

• În cazul nostru functiile de chip select sunt:


• CS1 = A12*A13\*A14\*A15\+A12\*A13*A14\*A15\
• CS2 = A12*A13*A14\*A15\+A12\*A13\*A14*A15\
• În cazul în care functiile logice de selec_ie sunt prea complicate ele pot fi minimizate
prin metode specifice (teorema DeMorgan).
• Dacă modalitatea de varia_ie a valorilor liniilor de adresă nu poate fi observată direct
se pot utiliza metode de tipul Karnaugh, Quine-McCluskey sau Espresso pentru
extragerea (si minimizarea) func_iei logice de selec_ie.
• În func_ie de natura circuitului de memorie în logica de selectie poate fi implicat
si un semnal de comandă de tip /RD, /WR sau /PSEN. În cazul nostru fiind vorba de
circuite de memorie de tip SRAM vom folosi doar semnalele /RD si /WR

Posibila implementare

Ierarhizarea memoriei

• În majoritatea cazurilor sistemele de calcul nu dispun de un singur nivel de


memorie; sistemul de memorie nu este omogen din punct de vedere al tipurilor de
circuite si dispozitive care îl alcătuiesc. Un prim exemplu de ierarhizare a memoriei îl
constituieîmpăr_irea memoriei pe două niveluri: memorie primară (memorie cu care
UCP lucrează în mod direct) si memorie secundară (memorie accesibilă prin
intermediul unui dispozitiv de control suplimentar).
• Apari_ia celui de al doilea nivel de memorie a fost argumentată de ra_iuni
economice si practice. Memoria primară este formată din circuite electrice care nu
permit stocarea unor mari cantită_i de informa_ii si care nu permit întotdeauna
stocarea informa_iilor în absen_a alimentării cu energie electrică. În schimb, memoria
principală oferă un timp de acces foarte mic.
Spre deosebire de aceasta, memoria secundară este formată din dispozitive de
stocare magnetice sau magneto-optice, cu un timp de acces mai ridicat, dar cu
posibilită_i de stocare de mari dimensiuni si cu facilită_i de păstrare a datelor si în
absen_a alimentării cu energie electrică.
Memorie principala/Memorie secundara

Niveluri de memorie

Principiul localitatii
• S-a evidențiat existența unui principiu, numit principiul “localității” programelor (program
locality), extensibil si la date.
• Dacă la momentul t se face acces la adresa de memorie x, există o probabilitate ridicată ca,
la momentul t + Δt, să se efectueze accesul la adresa de memorie x + Δx, unde Δt si Δx sunt valori
mici ale lui t si x.
• Principle of locality:
• Programele executa secvențe de instructiuni
• Programele au bucle
• Matricele sunt memorate în blocuri contigue
• Datele neînrudite sunt plasate în același segment
Curs 11

Exemple simple de porturi I/O

Port de intrare pe 8 biti cu 74ALS244

Port de iesire pe 8 biti cu 74ALS374


Aplicatie
• Sistem supervizor de control cu 64 switches si 64 LEDs.
• Magistrala sistem include 8 linii de date, 16 linii de adrese, linii de control pentru citire
si scriere. Fiecare 8-bit input port (switch) si perechea corespunzatoare 8-bit output
port (LED) au aceeasi adresa.
• Spatiul I/O este de la CBF0H-CBF7H.
• Decodificatoare, latch-uri, buffere sau porti logice sunt utilizate dupa cum este nevoie.
• Subrutinele citesc switches si seteaza LED-urile corespunzatoare.
• Arhitectura sistemului de control:
• Logica decodificatoare – DCD: decodifica liniile de adresa sa genereze
semnalele de selectie.
• Fiecare linie a tabelului este adresa binara de la CBF0 la CBF7

Implementarea logicii decodificatoare

Implementarea sistemului
• Secventa de instructiuni de operare a sistemului
MOV DX,CBF4H ; incarca adresa portului.
IN AL,DX ; citeste valoare switch-uri.
OUT DX,AL ; actualizeaza starea LED-urilor

8255A – Interfata paralela programabila

• Diagrama generala

• Interfatarea la magistrala sistemului

• Exemplu: Interfatarea 8255A la magistrala sistemului. Magistrala sistemului are 16 linii de date (D0-
D15), IORC\ si IOWC\ comenzi pentru operatiile de citire, respectiv de scriere. Porturile I/O pentru
8255A sunt: Port A: 00C0H, Port B: 00C2H, Port C: 00C4 and Control Register: 00C6.
• Procedura de proiectare: se decodifica adresele rezervate pentru 8255A astfel incat sa se obtina
semnalul SEL\ pentru pinul de intrare CS\.
• Adresele in forma binara sunt:

• Implementarea selectiei si interfatare

• Programarea • Octetul de control


• 8255A Set/Reset Port C

Modurile de operare: Mod 0, Mod 1 si Mod 2

• Modul 0. Selecteaza operarea simpla ca I/O. Bitii cuvantului de control sunt


asociati fiecarui grup.
Grupul A de 12 biti consta din port A (8 biti) si 4 biti din port C 7:4 .
Similar grup B de 12 biti consta din f port B (8 biti) si 4 biti din port C 3:0.
• D4 – port A
• D3 – port C 7:4
• D1 – port B
• D0 – port C 3:0
• In modul 0 fiecare grup poate fi initializat ca output sau input.
8279 - Programmable keyboard/display interface –Interfatarea cu tastatura
8279 - Programmable keyboard/display interface –Interfatarea cu displayul

8254 – Real-time clock


8254 – Real-time clock - Cuvantul de comanda

8254 – Real-time clock – Moduri de functionare


Curs 12
Transfer DMA – DIRECT MEMORY ACCESS
• Transferul DMA este utilizat pentru scopuri diverse: citirea și scrierea în memoria
secundară, retea locala sau alt fel de comunicatii.
• Tehnica DMA oferă acces direct la sistemul de memorie, pe parcursul unui ciclu DMA
microprocesorul fiind disable.
• Într-un ciclu DMA sunt implicate două semnale de magistrală: HOLD și HLDA.

Ciclul DMA
• Semnalul HOLD solicită accesul DMA. Microprocesorul răspunde la o astfel de
solicitare suspendând programul curent și trecând liniile de magistrală într-o stare de
impendanță ridicata.
• Semnalul HOLD are prioritate mai mare decât INTR și NMI, doar pinul de RESET are
prioritate mai mare.

Ciclul DMA
• Semnalul de HOLD întrerupe execuția instrucțiunii curente.
• Semnalul de HLDA indică faptul că microprocesorul a efectuat toate operațiile
necesare eliberării magistralei sistem.
• Logica și semnalele necesare desfășurării ciclului DMA sunt asigurate de un controler
DMA – în cazul circuitelor 8086/8088 – circuitul suport 8237, în cazul
microprocesoarelor mai noi funcționalitatea a fost preluată de chipset-ul plăcii de bază
– de exemplu 82357 Integrated Peripheral Controller ce include 2 circuite 8237 plus
două circuite 8259A.
Circuitul 8237
• Circuit cu patru canale DMA compatibil cu microprocesoarele 8086/8088.
• Permite transferuri de până la 1.6MB/s.
• Fiecare canal permite adresarea unui bloc de date de 64K.
8237 - pini
• CS\ – (I) permite programarea circuitului;
• HRQ – Hold request – (O) semnalul prin care se solicită ciclul DMA către
microprocesor
• HLDA – (I) semnalul prin care se confirma controlul magistralei
• EOP\ – End Of Process – (IO) permite semnalizarea terminării procesului de transfer
• DREQ3-0 – DMA Request – (I) câte o linie de solicitare ciclu DMA pentru fiecare din
cele patru canale
• DACK3-0 – (O) DMA channel Acknowledge
• READY – (I) folosit introducerea unor stari de asteptare in cazul conectarii la
periferice lente
• DB0 - DB7 – linii bidirec_ionale de date cu trei stări utilizate pentru programarea
circuitului
• A0 - A3 – linii bidirec_ionale de adresă cu trei stări folosite pentru selectarea
registrelor interne in cazul programarii sau pentru a forma adresa de transfer in
timpul operatiei DMA.
• A4 - A7 – linii de iesire de adresă cu trei stări ce formeaza adresa de transfer in
timpul operatiei DMA
• /IOR, /IOW – linii bidirec_ionale de scriere/citire registre interne si control periferice
• AEN – adress enable - folosit pentru un latch extern pe 8 bi_i sau pentru oprirea
accesului altor device-uri din sistem la magistrală
• ADSTB – adress strobe – folosit pentru strobarea (memorarea) adresei prin latch
• /MEMR, /MEMW – permite controlul ciclurilor de citire scriere în cazul memoriilor

Circuitul 8237
Moduri de Transfer posibile
• Single Transfer Mode – controlerul este programat pentru realizarea unui singur
transfer. După realizarea transferului registrul CWCR va ajunge la 0 si se va emite un
semnal Terminal Count (TC). La terminarea ciclului de transfer al datelor, HRQ devine
inactiva si microprocesorul preia controlul magistralei.
• Block Transfer Mode – transferul este initiat prin semnal pe una din liniile DREQ si se
desfasoara pana la terminarea intregului bloc de date; Dezactivarea liniei DREQ nu
afecteaza transferul blocului de date.
• Demand Transfer Mode – odata initiat ciclul DMA, datele sunt transferate continuu
cat timp DREQ este activ si valoarea din registrul intern CWC este autoincrementata
de la 0000H la FFFFH.
• Cascade Mode – controlerul este înseriat in sistem cu alte controlerele 8237.

Încascadarea a trei circuite 8237

8237 – Registre interne


8237 – Registre interne
• CAR – Current Address Register – stochează adresa pe 16 biți necesară transferului
DMA. Specific fiecărui canal în parte. Permite (in/de)crementarea automată. (câte unul
pentru fiecare canal)
• CWCR – Current Word Count Register – indică dimensiunea blocului transferat (-1)
(câte unul pentru fiecare canal)
• BA – BWC – Base Address – Base Word Count – utilizați pentru auto-inițializare
pentru regiștrii precedenți. (câte unul pentru fiecare canal)
• TAR – Temporary Adress Register – permite transferul a 2 octeti (16 biti) în cazul
memory-to-memory.
• TWCR – Temporary Word Count Register – indică dimensiunea blocului transferat în
cazul unui transfer memory-to-memory.
8237 – Registrul CR DREQ pe baza indexului liniei 0-3.
• CR – Command Register –permite • Rotating priority – cel care a avut cea
programarea efectivă a controlerului. prioritate are
apoi cea mai mică prioritate.

Transfer Memory to Memory


• Programarea registrului CR (bitul 0)
pentru selectarea canalelor 0, 1;
• Se va programa apoi registrul de
Request software pentru a se
genera software DREQ;
• După eliberarea controlului magistralei
de către CPU începe
transferul în modul Block Transfer;
• Se citesc date de la adresa sursa pe
canal 0 si sunt depuse în
registrul tampon intern (TR – 8 biti) după
care este initiat un ciclu
8237 de scriere la adresa destinatie iar datele
CR – Posibile configurări sunt transmise pe al
• Compressed Timing – Un transfer se doilea canal (canal 1);
realizează în 5 • Transferul se termină cu generarea
ciclii de ceas. În cazul unor dispozitive unui semnal TC.
I/O sau • La terminarea ciclului DMA registrul
memorii mai rapide se poate configura TR ramane cu ultimul octet
un transfer în 2 transferat.
ciclii de ceas.
• Fixed Priority – prioritatea cererilor de
transferuri
8237 CR – Posibile configurări
• Compressed Timing – Un transfer se realizează în 5 ciclii de ceas. În cazul unor
dispozitive I/O sau memorii mai rapide se poate configura un transfer în 2 ciclii de
ceas.
• Fixed Priority – prioritatea cererilor de transferuri DREQ pe baza indexului liniei 0-3.
• Rotating priority – cel care a avut cea prioritate are apoi cea mai mică prioritate.

8237 – Registre interne


• MR – Mode Register – setează modul de operare (câte unul pentru fiecare
canal).

8237 MR – Posibile configurări • RR – Request register – este utilizat


• Autoinitialize – Prin configurarea bitului pentru a solicita un transfer DMA din
de Autoini_ializare, valorile originale program – util
scrise în Base Adress si Base Word pentru transferuri de tip memory-
Count se vor copia în registrii CAR si tomemory.
CWCR după semnalul de TC. • Cand bitul de cerere este setat incepe
Trei tipuri de transfer posibile: Read, ciclul DMA, iar cand este resetat ciclul
Write, Verify DMA se opreste.
• Write – transferă date de la un device • Canalul DMA trebuie programat in
I/O (activând IOR\) la memorie activând modul block transfer.
MEMW\
• Read - transferă date de la o memorie
la un device I/O activând MEMR\ si
IOW\
• Verify – pseudo transferuri (se
comportă ca si în cazul Read sau Write,
dar lasă liniile MEMW\, IOR\, MEMR\ si
IOW\ inactive)
8237 – Registre interne
8237 – Registre interne
• MRSR – Mask Register Set/Reset – Intrarea DREQ a canalului corespunzator este
dezactivata daca bitul din masca este setat.
• MSR – Mask Register – permite setarea concomitentă pentru toate cele patru canale

8237 – Registre interne


• SR – Status Register – permite verificarea stării celor patru canale.
• Pentru fiecare canal specifica daca a ajuns la numarul final TC (terminal count) si
daca sunt cereri in asteptare pentru fiecare canal.

Accesarea registrelor
Exemplu – interfațare
Niveluri de memorie

Timp (ns): 1s 10s 100s 10000000s


10000000000s
10s ms 10 sec
Cap(byte): 100s Ks Ms Gs
Ts

Funcționarea memoriei cache on-board

Funcționarea memoriei cache on-board


Definitii si proiectare
• Definitie: Un ciclu de memorie este considerat cache hit, daca informatia de accesat
se gaseste in memoria principala si memoria cache. In acest caz se acceseaza copia
informatiei din cache si nu se mai initiaza un ciclu de memorie principala.
• Definitie. Cache miss este conditia indeplinita atunci cand informatia din cache nu
este aceeasi cu cea din memoria principala adresata. In acest caz, microprocesorul
citeste codul sau datele din memoria principala si le scrie in locatia corespunzatoare
din cache.
• Definitie. Hit rate masoara cat de eficient opereaza subsistemul de memorie
• Hit rate = (numarul de hits/ numarul total de cicluri magistrala) x 100%
• Proiectarea memoriei cache. Prin proiectare se poate imbunatati marimea factorului
hit rate.
• Elementele de interes sunt: marimea cache, organizarea si metoda de update a
memoriei cache.
• Marimea. Cu cat este mai mare memoria cache, cu atat este mai mare factorul
hit rate. Sansa ca informatia cautata sa se afle in cache este mai mare intr-o
memorie cache mai mare. Totusi cu cat este mai mare memoria cache cu atat
creste si costul acesteia.
• Organizare. 2 forme: direct-mapped cache si two-way set associative

Direct-mapped cache

• Memoria cache este un array organizat intr-un singur banc de memorie de 64kB.
Memoria principala este vazuta ca o serie de 64 kB pagini.
• X(0), X(1), …, X(N) sunt locatii de date din memorie la acelasi offset X in toate
paginile din memoria principala, care se mapeaza pe singura locatie X din memoria
cache.

Funcționarea memoriei cache on-board


2-way set associative
• Cache memory este organizata in 2 bancuri de cate 32kB fiecare, Bank A si Bank B.
• Paginile din memoria principala au aceeasi marime ca a unui banc din cache.
• Sunt de doua ori mai multe pagini decat la organizarea direct mapped.
• O locatie de memorie la un anumit offset din fiecare pagina se poate mapa intr-o
locatie de memorie cache fie in A fie in B.
• De exemplu, X(2) poate fi in cache fie in X(A) ori X(B), cu un factor hit rate mai mare.
Funcționarea memoriei cache on-board • Politica de scriere trebuie sa rezolve
• 2wo-way set associativ problema cum sa se mentina consistent
• Metoda de update. Se refera la continutul memoriei principale cu
algoritmul de inlocuire a informatiilor si continutul memoriei cache fara a pierde
la politica de scriere. prea mult din performanta?
• Metodele de inlocuire se bazeaza pe • write through – toate operatiile de
faptul ca cea mai recent utilizata scriere au loc si in memoria principala.
informatie are o sansa mai mare de a fi Daca locatia adresata este in cache,
reutilizata. Pentru associative mapping memoria cache este actualizata sa fie
un algoritm de inlocuire stabileste care coerenta cu memoria principala. Pentru
block va fi inlocuit. Pentru 2-way set scriere, procesorul intotdeauna va avea
associative se utilizeaza algoritmul LRU o viteza mai mica cu memoria
least recently used (LRU). LRU principala. Deoarece procentul de scrieri
inlocuieste blocul din cache la care nu s- este mic (ca. 15%), aceasta schema nu
a facut referire de cea mai lunga conduce la o reducere prea mare a
perioada de timp. Astfel, subsistemul performantei.
hardware urmareste daca info X(A) din • write through with buffered write - este
Bank A ori X(B) din Bank B este cea mai similar cu write-through, dar in locul
recent utilizata. scrierii in memoria principala, adresa de
• Examplu: X(0) din pagina 0 tocmai a scriere si datele sunt stocate intr-un
fost incarcata la X(A) din Bank A; X(B) buffer de viteza mare. Buferul de scriere
din Bank B este din pagina 1 si nu a mai transfera datele in memoria principala in
fost accesata de o lunga perioada de timp ce procesorul isi continua
timp. O noua info X(3) din pagina 3 este activitatea. Ofera o viteza mai mare, dar
accesata si trebuie sa inlocuiasca o necesita un hardware mai complex.
valoare din X(A) ori X(B). • write back – se face update doar in
Pe baza LRU se selecteaza X(B) din memoria cache, care nu mai se
Bank B. pastreaza coerenta cu memoria
• LRU pastreaza in cache cea mai principala. Cand blocul este inlocuit din
recent folosita informatie. Rezulta un cache, continutul sau trebuie sa fie
factor hit rate mai mare, deci sistem mai copiat inapoi in memoria principala.
performant. Ofera o performanta mai
buna, dar este necesar un hardware mai
Funcționarea memoriei cache on-board complex
• 2-way set associative