Sunteți pe pagina 1din 160

CURS 7

Organizarea dispozitivelor de intrare-iesire (I/O)

Disp de intrare/iesire sunt disp periferice care se conecteaza la calculator. Aici


vom face o prezentare a relatiei cu calculatorul, a configuratiei sistemelor
intrare/iesire si a gestionarii acesteia cu diverse metode. Acest capitol va contine
detalierea sistemelor de interfata (schema de la lucrarea 2 cu solutia hardware de
parallelism in care o interfata I/O preia gestionarea canalelor I/O, degrevand
procesorul de aceste operatii si lasandu-l in acest timp sa faca alte operatii). O sa
vedem relatia intre controller si driver si o sa discutam cateva configuratii clasice
pentru gestionarea acestor operatii, cum ar fi accesul direct la memorie (canalele
DMA), tratarea lucrului prin intreruperi (canalele IRQ) si configurarea adreselor
de intrare/iesire.

Din pct de vedere al organizarii dispozitivelor I/O, se gasesc 2 solutii: la


calculatoarele mari (mini/micro calculatoarele, mainframe-urile – calculatoarele
de putere de putere mare, de complexitate) se vede in figura ca exista 3 tipuri de
specializare pentru magistrala:
- Magistrala care leaga unitatea centrala UC de memoria principala MP =>
magistrala de diagnoza
- Magistrala de memorie (cea hasurata) care ofera acces la MP pt canalele
I/O gestionate de procesoare dedicate de canal (in schema avem un caz
particular cu 2 astfel e procesoare)
- Magistrala de intrare/iesire prin care UC comunica cu perifericele,
folosind controllere specializare, adica interfete pt dispositivele care pot fi
cuplate
Procesoarele de canal pot fi cu functii diverse; aici se pot lega controllerele de
terminal pt terminalele de la distanta, diverse periferice si celalalt procesor
gestioneaza accesul la unitatile de disc, discurile externe.
In general, aceste periferice, cum se vede si in schema de jos, de la
microcalculatoare (de la pc-uri) sunt din 5 categorii, deci in clasificarea disp de
I/O intra:
- Memoriile secundare => pot fi memorii pe hard disk, hard disk-ul intern,
la nivelul memoriei tertiale memoria care poate fi pe disk-uri externe, atat
SSD-uri, cat si unitati de disc optic (CD, DVD, Blu ray)
- Echipamentele de intrare => tastatura, mouse-ul
- Echipamente de iesire => imprimanta
- Echipamentele de achizitie de date => camera video, scanner
- Dispositive si echipamente de comunicatie => modem, placa de retea
Acestea sunt toate disp I/O si sunt interfatate de aceste procesoare de canal.

La calculatoarele mici, de ex orice model de PC, exista o unica magistrala a


calculatorului, dar nu inseamna ca ea nu este specializata (de la lucrarea
benchmark magistrale: avem configurate linii de adresa, linii de date, linii de
arbitraj, de alimentare, de stare). Aici avem specializare la nivelul functiilor pe
care le indeplinesc liniile magistralei.
Dupa cum se observa in schema, la UC avem cuplate pe aceeasi magistrala de
calculator memoria si diverse controllere de intrare/iesire, cum ar fi de monitor,
de tastatura sau de discuri.
De retinut, la calculatoarele mari avem o specializare a acestor magistrale.
Schema ne arata cum se conecteaza si care este arhitectura unei interfete I/O. Ca
orice interfata, ea face legatura intre 2 elemente, in cazul nostru intre perifericul
in sine (elem reprez in partea de jos) si unitatea centrala de prelucrare prin care
se conecteaza pe liniile magistralei => vedem liniile de adresa, de date si de
comenzi ale magistralei. Ceea ce este in interiorul interfetei I/O este incadrat in
acea linie punctata. Comenzile sunt semnalele de input output read/write (IOR/
sau IOW/) active pe 0 (“/” este echivalent cu bara). Aceste semnale impreuna cu
liniile de adresa intra intr-un decodificator binar zecimal care identifica in mod
unic un periferic (pt a nu exista conflicte f periferic i se asociaza cod si acel cod
este generat de acel decodificator). Dispozitivul de comanda (si registrele de
comenzi si stare) primeste comenzile de la liniile de comanda de pe magistrala
calculatorului, transmite mai departe comenzile generate de UC catre periferic si
inregistreaza starea semnalelor de la periferice (starea ins de ex dipozitiv lipsa,
imprimanta defecta sau cu lipsa de hartie), adica statusul actual al acestuia. Obs
legatura cu magistrala de date bidirectionala, prin care aceste comenzi si stari sunt
prezentate procesorului. Registrele de intrare si de iesire prin care se face
transferal propriu-zis de date. De ex trimiterea unor date la imprimanta se face
prin registrele de iesire, achizitionarea datelor de la scanner se face prin registrele
de intrare. Adaptorul de semnale face ca aceste semnale sa fie compatibile cu ceea
ce intelege magistrala.
Interfata de intrare/iesire prezinta 2 niveluri:
- Semnalele asociate si functionarea interfetei => register sau porturi I/O
pentru date, comenzi si stare
- Particularitatile fiecarui periferic in parte => in fct de disp I/O care sunt
semnalele specific de comanda, scriere, citire ale acelui periferic

De retinut ca disp de comanda care gestioneaza un periferic anume poate sa fie


atat un circuit combinational, cat si secvential, si mai poarta denumirea de
controller. El este partea hardware care tine de interfata, iar partea software este
driverul asociat in memorie, care se ocupa de gestionarea transferului pt un
anumit periferic. Toate aceste drivere au o adresa in ROM, mai bine zis in ROM
bios, si de cele mai multe ori lucreaza prin intreruperi. De ex exista periferice la
care transferal nu este continuu, nu are rost sa tinem linii deschise tot timpul pt
mouse daca de la mouse comenzile vin cand si cand. Deci pentru a nu ocupa
degeaba niste magistrale cand perifericul este inactive, ele se vor activa si din
dialogul intre UC si periferic va avea loc doar atunci cand se solicita si solicitare
se face in regim de intrerupere. De ex adresa int 33H in hexa este cea care da
controlul mouselui in mom in care acesta face o cerere de intrerupere pt a
transmite date cand s-a schimbat starea actuala.
Din pct de vedere al modului de transmisie intre calculator si periferic, exista mai
multe criterii de clasificare: transmisia seriala sau paralela.
Transmisia paralela lucreaza pe 8 linii simultan, adica pe un octet. Linia are 8 cai,
astfel se realizeaza transmisia orientate pe octet. Ea are unitatea de masura B sau
octet/s. Are asociata si o interfata de transmisie paralela cu pini:

Nu mai este utilizata in ziua de astazi. Ea era utilizata pt


imprimante si scanner, dar odata cu aparitia porturilor
USB ea a fost inlocuita.
 25 de pinii, transpusi intretesut pe 2 linii
 Un grup de 9 pini sunt folositi mai frecvent, care
au legatura cu functionarea imprimantei
 11 – imprimanta ocupata
 Starea imprimantei data de busy, paper feed, LF,
eroare

Transmisia seriala se face pe un singur fir, deci linia este unica, octetii sunt intr-
un sir de date succesive, transferul se face bit cu bit, ceea ce usor de diferetiat fata
de transmisia paralela, caci cea seriala are unitatea de masura b/s. Mai demult
exista si interfata seriala a calculatorului, care astazi nu mai prea exista, de care
se lega mouse-ul serial, astazi foloseste USB. Pinii sunt in numar de 9, lucrand
pe o singura linie, configuratia este verticala cu aceasta semnificatie:

In table se specifica care sunt de intrare, care de iesire, acest lucru inseamna
configurarea a doi parteneri care discuta pe o linie de transmisiune seriala. Vom
observa ca toate semnalele din tabel, in afara de indicatorul de apel si de masa,
sunt in pereche. Data set ready DST este in pereche cu Data terminal ready DTR,
adica pinul 6 are ca raspuns 4. Alta pereche e data de pinii 7 si 8, RTS cu CTS,
partenerul 1 spune ca vrea sa tranmita date si dupa ce a vazut ca partenerul e activ
pe linie se transmite solicitare de transfer de date intr-un anumit sens (aici
partenerul 1 transmite, 2 receptioneaza), 1 raspunde prin CTS – clear to send,
dupa care are loc transmisia propriu-zisa de date, adica pinii 3 si 2, RD si TD,
deci pe acea linie dupa ce s-a facut configurarea parametrilor de transmisie, apare
transferul propriu-zis. Aceasta configuratie de protocol, pt ca exista un protocol
de comunicare intre 2 parteneri, o vom folosi mai tarziu.
Toate transmisiunile seriale se fac dupa anumite standarde, care prevad 4 lucruri
importante:
- Tipul de modulatie al semnalului purtator de pe linia de comunicatie a
transmisiunii seriale
- Codarea semnalului transmis => standardele de codare stabilesc vitezele
de transmisiune standardizate
- Si optional si un standard de compresie; datele comprimate ocupa un spatiu
mai mic si se transmit mai repede; fiind vorba de date informationale si nu
date multimedia, standardele de compresie sunt fara pierderi. De ex atunci
cand compilam o rutina, daca un singur bit este gresit, ne da eroare. Deci
nu ne permitem aproximare sau eroare pe un bit => datele informationale
trebuie decomprimate absolut identic; stardardele fara pierderi nu au rate
de compresie asa mari, dar garanteaza corectitudinea compresiei la nivel
de bit.

Componentele de baza ale unui standard


A. Standarde de modulatii (Bell, CCITT)
La transmisiunile seriale vorbim despre transmisiuni numerice, digitale sim ai
mult decat atat, folosim transmisiunea binara. Deci nu o sa discutam despre
modulatii analogice sau de modulatii discrete cu mai multe trepte, ci despre
modulatiile binare. Modulatiile folosite in aceste tipuri de transmisiune sunt de
tot amplitudine, modulatie, faza, dar folosesc doar valori care sa aiba
corespondenta in logica binara. Adica semnalul care moduleaza amplitudinea,
frecv sau faza poate sa aiba doar 2 valori, nu un nr infinit ca la modul analogice,
nici un nr limitat ca la modulatiile discrete. Aceste 2 val se stabilesca a.i. sa se
faca foarte usor diferenta intre un semnal modulat coresp logicii 1 cu logica 0. De
obicei aceste 2 valori sunt valori extreme ca sa poata fi deosebite in conditii de
zgomot. Toate aceste modulatii in care semnalul care moduleaza are 2 val posibile
se numesc cu schimbare sau shift keying => in acest fel sunt ASK (modulatia
in amplitudine - MA), FSK (modulatia in frecventa - MF), BPSK (modulatia in
faza - MP) cu schimbare intre 2 valori. De ex pt amplitudine alegem A si A/2, pt
frecventa f si 3f, pt faza -pi si +pi.
Modulatiile in cuadratura (MQ) folosesc intreg cadranul cu 2 axe de coordinate
(1,2,3,4), putand fi codate in felul acesta pe 2 biti. Amplitudinea poate fi de
asemenea modulata in cuadratura. Mai putem folosi modulatia impulsurilor in
cod (PCM).
Trebuie sa facem diferenta intre modulatie si codare si modul in care se aplica la
emisie: modulatia se refera la semnalul purtator care se transmite pe canal.
Imaginati-va un lant de transmisiune simplu format din sursa, canal si receptor.
Modulatia se refera la canal, adica ne arata cum imbracam semnalul fizic care
este compatibil cu mediul de transmisiune de pe canalul de comunicatie a.i. in el
sa poata sa fie introdusa info prin modularea unui parametru din semnal. De
obicei, semnalul este sinusoidal, este o functie armonica f(t) = A sin 𝜔𝑡 + 𝜑, in
care A – amplitudinea, 𝜔 = 2 pi f – deci frecventa, 𝜑 – faza. Exact asa se intampla
si la noi doar ca A, f si 𝜑 pot fi modulate doar in 2 variante

Sus de tot este logica pe care vrem sa o transmitem => 1, 0 … Se aloca unui bit
de 1 o anumita amplit, sa zicem A, si celuilalt bit o amplitudine mult diferita f
mica, A/10. Functia sinusoidala are continuitate, are aceeasi frecventa, cele 2
semnale care coresp lui 0 si 1 au si aceeasi faza, pleaca din 0. Vedem cele 2 valori
de amplit intre care se face shiftare. Daca ar fi mai multi biti de 0 sau de 1,
semnalul ar arata la fel. La FSK semalul are aceeasi amplit si aceeasi faza, dar se
schimba frecv => in figura avem 10 perioade complete pt semnalul de 1 si 5
perioade pt semnalul de 0 => frecv sunt f si f/2. Se alege de obicei o combinatie
de val ca sa nu fie usor confundate. De ex la ASK nu o sa alegem A si 0.9 A. Info
consta in modul in care este modulate amplit si cu zgomotul de pe canal, nu treb
sa le confundam la receptie. La PSK sau BPSK semnalele au aceeasi amplit si
frecv, dar faza diferite => unul pleaca pozitiv din 0, unul pleaca negativ din pi.
Daca se face acest punct de trecere unghiular cu pi inseamna ca s-a trecut de la 0
la 1 sau invers.
Din pct de vedere al circuitisticii pt transmiterea seriala bit cu bit, la receptive e
foarte usor de construit demodulatorul. La ASK spre ex, cum putem detecta
modificarile de amplit, tinand cont ca aici nu ne intereseaza faza sau frecv?
Trebuie sa avem un detector de anvelopa pt ca mesajul purtator de informatie este
continut in amplitudine. Cu alte cuvinte, ca sa vedem cand se face intre 1 si 0 ne
treb un detector de prag. Daca avem si zgomot, la 1 amplitudinea poate sa fie A
+- o val si la 0 A/10 +- o val. Imp e ca atunci cand avem val mare de amplit cu
zgomot negativ sa nu ajunga atat de jos incat sa il confundam cu semnal cu amplit
mica la care se adauga zgomot pozitiv. Functia de prag se alege la media
artimetica a celor 2 valori. Tot ce este peste A/2 face parte din amplit mare si tot
ce este sub A/2 din amplit mica => Acasta este decizie binara, la care se poate
adauga zgomot care este zgomot aditiv gaussian.
La FSK trebuie sa punem un detector de frecventa. Daca frecv aici sunt 2f si f,
punem undeva la jumatate, adica 3f/2. Si la PSK detectia se face cu un detector
de faza, de ex 0 sau pi. Cum zgomotul este aditiv, el se aduna in amplitudine,
astfel ASK este cel mai sensibil la zgomot. Daca se aduna zg pozitiv peste amplit
mica si zg negative peste amplit mare, semnalele se pot confunda. FSK si PSK
sunt foarte putin sensibile la zgomot, deci sunt de recomandat atunci cand zg pe
canal este aditiv pt ca aici nu demodulam amplit, info poate sa fie in faza sau in
frecv.

Mai sunt si alte tipuri de modulatii:


QPSK – modulatia cu schimbare de faza in cuadratura; Sa nu confundam
frecventa cu faza, in romana avand aceeasi initiala; faza – P si frecv – F. In stanga
sus avem o modulatie QPSK la emisie (fara zgomot), folosind cele 4 cadrane,
adica in cuadratura, acest lucru inseamna ca un punct este determinat de 2
coordonate (00, 10, 11, 01 – in ordine cele 4 cadrane). Ins ca este o modulatie
mult mai eficienta pt ca un pct din aceasta reprezentare contine 2 biti, nu unul.
Modulatie se face pe grupe de biti, ceea ce ins ca va creste viteza => nu vom avea
un semnal pt un bit, vom avea un semnal in cuadratura pt 2 biti. Sus in dreapta,
avem acelasi semnal modulat in cuadratura la receptie => punctele devin discuri
pt ca pe canal avem zgomot aditiv, fiecare punct fiind alterat de catre zgomot.
Aceste discuri pot fi unic determinate la receptor atata timp cat nu se
intersecteaza. Cu cat punctele din cele 4 cadrane sunt mai indepartate, cu atat
accepta un zgomot mai mare. Discurile nu trebuie sa depaseasca cadranele in care
sunt definite. De la TTI: Eficienta unei codari este cu atat mai mare, cu cat codam
pe grupuri de biti de lungime cat mai mare.
In partea de jos, stanga: modulatia in amplit in cuadratura, in care se folosesc de
asemenea cele 4 cadrane din reprez xy, dar intr-un cadran acum sunt 4 puncte de
transmisiune => QAM-16. Repreztarea grafica a acestei transmisiuni se numeste
constelatie/trellis. Fiind mai multe pct, transmisiunea este mult mai eficienta, spre
ex la QAM-16 => 2^4, ceea ce inseamna ca se transmit 4 biti simultan, deci
eficienta creste de 2 ori, dar varianta asta merge pt canale cu zgomot mai redus.
Cele 16 discuri obt la receptie treb sa nu se intersecteze.
Ult desen din dreapta jos, QAM-128 => 2^7, insemnand transmisie pe 7 biti
simultan. Deci de 7 ori mai eficienta decat transm bit cu bit, dar punctele sunt
mult mai inghesuite. 32 de puncta intr-un cadran, nu e patrat perfect, ele fiind
configurate pe o structura de patrat cu latura de 6, fiind 4 pct nefolosite in colturi.
Punctele obt la receptie sunt f apropiate, deci zgomotul treb sa fie cat mai mic.
Treb sa ne gandim la un compromis cand proiectam un astfel de sistem de
transmisiune, cat de eficienta poate sa fie transmisia in rap cu cat de mare e
zgomotul pe acel canal. Mergem pe o transmisiune pe cat mai multi biti, cu
conditia ca acele puncta sa nu fie confundate la receptie.

Urmeaza partea de codare.


Codurile sunt de 2 feluri: cod de sursa, care arata cum vom coda sursa care emite,
dar pt ca acest canal are si zgomot, pe langa protectia la erori pe care o facem
alegang standardul de modulatie, putem pune si standarde de detectie sau de
corectie (EDC – error detection code, ECC – error correction code) erorilor a.i.
cu pretul maririi timpului de transmisiune, dar ne asigura ca in interiorului acelui
pachet info + control, putem detecta 2 erori sau corecta 2 erori, de ex codul
Hamming.
Alte sisteme folosesc pt corectie sisteme de tip ARQ (automatic repetition
request). Daca exista dubii asupra unui pachet receptionat si noi nu avem o
protectie anterioara prin impachetarea cu biti de control pt detectie sau corectie,
noi cerem repetarea acelui mesaj. Se pierde timp, dar putem lua o decizie mai
buna (ex de standard CCITT V42). + Standardul de compresie fara pierderi a
datelor.

Din pct de vedere al clasificarii tipurilor de transmisiune:


A. Dupa modul de folosire a liniei de comunicatii
o Simple => trans in care exista un sg emitator (E) si mai multi
receptori (R); rolurile de E si R sunt fixe (ex sistem de broadcasting
– trans radio, TV)
o Semiduplex => E si R pot sa isi schimbe alternativ rolurile (ex. unde
radio – walkie-talkie)
o Duplex (full) => parteneri cu roluri simultane E/R
o
Fiind o trans seriala, adica un sir de biti, cum stim noi unde punem semnul de
delimitare a octetilor?

B. Dupa mecanismul de separare logica a octetilor


o Sincrone => in tandem cu un semnal de ceas (pe desen liniile vertical
care reprezinta fronturile semnalului de tact). La receptie, receptorul
va treb sa aiba exact acelasi semnal de ceas cu aceeasi perioada.
Mentinerea sincronizarii la distanta intre 2 semnale cu aceeasi
frecventa este o provocare, mai ales daca distanta e mare.
o Asincrone => nu mai treb sa aiba un semnal de ceas generat de
acelasi cuart si sincronizat intre emisie si receptie, dar pt a observa
unde incepe si se termina un octet, acesta sufera o anumita
impachetare, adica semnal de stop si de start (la inceput, fiind 0).
Volumul de date este mai mare deci timpul va fi mai lung, dar nu mai avem nevoie
de sincronizare.Altfel spus Densitatea de informatie dintr un pachet este
numarul util de biti de date(mesajul purtator de informatie k) / numarul total de
biti din acest pachet(n)
La extrem numar 2 biti de stop, 8/12(66% densit info).De cele mai multe ori se
prefera la transmisiuni seriale pe distante mare, nu exista posibilitatea
sincronizarii unui clock.
Intefetele intre cei doi se mai numesc si translatori:
-analog-digital
-digital- analog
-digital-digital
Astfel spus computerul este mereu digital. Dar depinde de sursa si de receptor.
De ex analog digital: preluam din extern, le introducem in calculator printr o
interfata I/O, ceea ce presupune ca semnalele sunt preluate de la un semnal
analogic, acesta trebuie convertite in digital(CAN).(ex cand preluam date de la
un echipament de date. Digital-Analogic - iesiriel din calculator, cand iesirea se
face pe un conv CNA, la imprimanta, placa de sunete etc.
Digita-Digital-oricare 2 blocuri din calculator: ex 2 modemuri
In fig avem cateva exemple de la fiecare.

Cateva standarde de interfete:


1.Rs-232C – exemplificarea a unei interfete seriale, cand 2 pc uri comunica
prin modem
DTE-calculatoru nostru, cel ce emite
DCE- care transmite de pe linia telefonica
Semnalul de se foloseste este binar, nivelul de tensiune (-12V ) ---- +12V. Minus
pentru 1 logic. Zgomotul este pozitiv sau negativ, exista o zona in zona gri, in jur
de 0 in care nu stim daca e -12 cu zgomot pozitiv sau +12 cu zgomot negativ.
Zona va da un semnal necunoscut. Emite in 0 si 1, dar la iesire putem avea 0,1
sau X(nu poate fi interpretat).
Orice interfata seriala lucreaza dupa un anumit protocol.
Tehnica acordului confirmat(handshake) – protocol- perechi de intrebari-
raspunsuri DTE-DCE:
2 parteneri fac un gentelman agreement si stabilesc niste reguli al parteneriatiului.
Ex: 2 perechi mereu, unul de iesire unul de intrare
Ex: DSR CU DTR ne asigura ca cei 2 sunt activi(sub tensiunea si sunt gata sa
inceapa conv)
-CTS cu RTS-cererea de conv, unul cere sa transmita celalat e de acord ca poate
sa receptioneze
-RD cu TD- transmisia de date dupa ce s au pus de acord
Se stabileste viteza, ce tip de corectie de erori etc
Configuratia pinilor RS-232C

2. U(S)ART – Intrarea este seriala, iesirea paralela


La conexiunea cu datale, au 8 linii, se face conv serie paralel, linia seriala din
stanga intra pe cele 2 linii de date ale magistralei de date. In partea de jos partea
inversa( o iesire din calculator)

Sectiunile unui UART:


Receptorul este pentru intrare(serie-paralel), emitatorul pentru iesire(paralel-
serie).
Controller de interfata are semnale de control care guverneaza aceasta
transmisiune si culege parametrii de stare de la transmisiune
Jos exemplificare de chip uri integrate care contin UART: i8251, National
Semiconductor 16550 etc
Ele reglementeaza si vitezele de transmisiune seriala, de obicei multipli de
valoare de baza(cea mai mare 19.200 bps)
3. ACIA – adica adaptorul de interfata pentru comunicatia asincrona(doar
pt asincrone)
Structura asemanatoare cu UART, conv serie-paralel(periferic-magistrala de
date) si paralel-serie (magistrala de date-linia de transmisiune )
Ele mai contin un registru de control pentru guvernarea functionarii corecte a
transm, si registrele de stare care ne dau info despre starea transmisiunii
Ex: MOS Semiconductor
Linie telefonica(ACIA)-transmisiune seriala, modemul face trans serial-paralela
Astazi toate dispun de adaptor USB, numai e nevoie de digital-analogic
CONVERSIE

4. USB
Este un standard care prevede atat reguli pentru interfatare cu exteriorul
calculatorului, dar o data transmise/primite ele sunt primite cu ajutorul
magistralelor USB.
Vom prezenta doar de felul de interfete al USB.
DPDV al interfetei seriale are un HOST controller(comunica prin intermediul
acestor host controllere, un host cu mai multe hub uri).

La nivel intern, host ul are un numar de linii, care se numesc PIPES. Sunt mai
multe pt downstreaming, acele conectoare se num End points, si un conector
pentru upstraming. 16 end point uri, 32 de linii(fiecare e dual). De la host-hub
downstreaming, hub-host up streaming
Pinii conectorilor USB: standart: A/B, mini A/b, C
Doar 4 semnale. Numarul de linii conectate atat pentru interfata cat si pt
magistrala sunt reduse.
5.IEEE 1394-in special pentru camere video
A avut 3 producatori

Conectorii interfetei, 6 pini in emisie, 4 la


receptie
Jos o sectiune transversala, putine linii, 2 perechi de date(albastru). Alimentare
cu rosu

INTERFETE PARALELE-nu se mai folosesc


1.IEEE 1284(CENTRONICS) a fost introdusa pentru interfatarea paralela a
imprimantei
Mai multe moduri de lucru: compatibilitate, linii de stare, byte pentru 8 biti
transmiti concomitent. Dar cele care au realizat mai mult sunt EPP(cantitati mari
de date, scannere), ECP(specificatia benzii si tipului de codare si tipului de
compresie) – RLE-modalitate de codare pentru siruri repetitive de acealasi bit
identice(eficenta cand apare mai mult de 3 )
Jos exemple de conectoare
2. PIA
El ne arata practic cum se realizeaza comunicatia printr o interfata de periferic
intr o exemplificare la Motorola 68xx. Sunt porturi bidirectionale, se
configureaza 2 A si B pe 8b.
Ne ofera posibilitatea transmisiunii paralela, simultana intre 2 disp pe 8b la linile
de date( unul poate sa emita, unul sa receptioneze)
3.PIO

Interfata generala paralela pentru calculatoare. Ex cum arata. Sagetile care intra
de intrare, care ies de iesire. E un exemplu particular pe 24b, poate sa lucreze
simultan pe 3 porturi de biti, A, B, C(8b in paralel). Sunt comandate prin A0 si
A1(2^2 combinatii, 3 se folosesc pentru a desemna care din porturi A,B, C)
Semnale de comanda:CS, WR, RD, RESET. Comunicatia bidirectionala D0-D7.
Se poate face un transfer prin handshake tot pe D0-D7.
Ex:i8255
C. Interfete Wireless

1.Blueetooth prevede mai multe clase, in ordine cronologica


Exemple de clase. Cu cat puterea e mai mare cu atat distanta creste, dar nu peste
100m.

Transmisiunea se bazeaza pe 2 principii: Frequency Hopping(saltul in frecventa)


si spectru distribuit( Direct Seq Spread Spectrum)
2 principii, ca aceasta comunicatie sa fie greu de urmarit, protectie la zgomot si
la utilizatorii neautorizati.
-Saltul in frecventa : Opereaza intr o banda 2.4-2.4835 GHz, dar ingusta. In
aceasta banda de 83.5 Mhz se face o impartire in sub benzi definind 79 de canale
fieacre a cate un Mhz. Se face schimband foarte rapid tansmisiunea de pe un
canale pe celalalt de 1600 de b/s (se face un salt in frecventa intre cele 79 de
canale)
-Spectru distribuit: spectrul este dat de largimea de banda, daca este
reprezentatata grafic in functii de densitatea de putere, la zgomot apare sub forma
de dreptunghi.Daca hasuram pe tot domeniul de frecventa obtinem puterea
zgomotului(densitatea spectrala de putere integrata pe tot domeniul de frecv ne
da PUTEREA)
-Principiul de eliminare al zgomotului de tip Divide et impera.Daca acel zgomot
dintr o banda se imprastie pe toate cele 79 de benzi, dreptughiul va avea o
inaltime foarte mica si o latime foarte mare. Hasurand noul dreptunghi de la o
banda la 79 de benzi, practic energia se conserva. Deci aria trebuie sa ramana
aceeasi, daca latimea creste de 79, inaltimea scade de 79. Puterea zgomotului va
fi foarte diminuata.

Cate porturi poate sa inregistreze Blue vedem mai sus. La nivelul host controller
noi avem posibilitatea de a interfata prin Blue foarte multe tipuri de alte
protocoale.
De obicei de blueetooth se pot configura retele, unul e master + 7 dispozitive
Blue=PICONET
Mai multe piconet=SCATTERNET

2.WI-FI
Avantajul Reteleor WI-FI- folosesc benzi de frecventa la care nu trebuie sa ceara
autorizatie . Orice retea wirless foloseste un spectru de frecventa la liber.
Pot evita obstacole, tehnologia de roaming(se poate comunica peste un deal, o
cladire inalta). Se pot folosi compatibile cu foarte multe standarde. PCI USB,
PCMCIA
(Citit de pe slide) In poza transmisia wi fi intre 2 cladiri
Se foloseste un master acces point -care este un modem pe cablu conectat la
ethernet, pe cladirea cealalata un Remote acces point. Ca sa faca conexiunea intre
ele prin wi fi(merge la distante mai mari decat blue, dar nu are voie sa intalneasca
obstacole) acel Relay Acces Point (se pun pe cladiri foarte inalte, dealuri) – face
legatura intre master si remote la fiecare dintre ele se pot conecta mai multe pc
uri laptop uri etc. Retelele pot sa comunice local in interiorul unui spatiu
delimitat, dar pot sa transmita prin roaming conexiunea cu o relatie la distanta.
CURS 8
CAP 3-Structura unui calculator – pg 27

Gestionarea tranzactiilor I/O


1.Transferuri DMA(Direct Memory Access)

DMA (Direct Memory Access)


- reprezinta un sistem prin care orice periferic sau sistem de I/O poate sa ceara
permisiunea sa lucreze direct cu memoria, adica sa faca transferuri de citire si de scriere
fara sa mai bata la cap procesorul sa gestioneze el aceste transferuri => pot avea loc
scrieri in memorie/citiri din memorie de catre unitatile I/O fara ca procesorul sa-si
intrerupa activitatea pe care o facea in acel moment => aceasta este una din solutiile de
paralelism spatial(hardware).
- totul se desfasoara pe baza unui protocol cu intrebari si raspunsuri, cu solicitari si
confirmari
- interfetele I/O din partea din dreapta jos – reprezinta interfetele pentru orice canal
de I/O pe care se poate lega orice tip de periferic => In momentul in care interfata
corespunzatoare unui anumit periferic doreste acces la memori (de exemplu: mouse sa
trimita date despre schimbarea starilor butonului; imprimanta sa citeasca date pentru
printare; scaner-ul/camera video sa scrie date pentru achizitiile pe care le face), interfata
lanseaza un mesaj DMA request(DRQ) catre controlerul DMA(Controler DMA i8237-
5) specializat. Controlerul face o solicitare procesorului(CPU) sa puna pe HOLD starea
in care se gasea in acel moment. CPU isi termina de executat sarcina pe care o avea in
acel moment si da HOLD acknowledge(HLDA), adica ii raspunde printr-un semnal de
confirmare controlerului DMA, care la randul lui raspunde interfetei ca a primit accesul
la memorie si poate sa inceapa transferul, prin semnalul DMA acknowledge(DACK).
Vedem ca interfata respectiva preia magistrala si folosindu-se de liniile date si comenzi
face direct transferul la modulul de memorie la care vrea sa scrie sau de la care vrea sa
citeasca.

Fazele unui transfer DMA

Observam 3 faze
importante:
1) Initializarea
transferului
2) Transferul propriu-
zis
3) Controlul final de
terminare si corectitudine

-este ca oricare alt protocol pe care l-am studiat(si la memorie si la magistrala)


-l-am intalnit la interfetele de transmisiune seriala, in care pe baza unui set de reguli se
parcurg anumiti pasi
Cel mai important este initializarea transferului, adica caderea de acord asupra
datelor de protocol si asupra pasilor care trebuie urmati
-Trebuie specificat:
- de unde se citeste sau unde se scrie, adica adresa de inceput a blocului care
urmeaza sa fie transferat in oricare sens
- ce cantitate de informatie transfera
- sensul, adica read sau write
DRQ – de la interfata la controler
HOLD – de la controler la CPU (CPU trebuie sa acorde acces total la
magistrala pt DMA, deci suspenda acctivitatea existenta in acel moment
trecand la starea high Z)
HLDA – raspunsul CPU catre controlerul DMA (reprez confirmarea cedarii
magistralei)
DACK – raspunsul DMA catre interfata (=>transferul poate incepe)

-Transferul este orientat pe cicluri, in care un ciclu inseamna un cuvant, iar cuvantul e
definit in functie de tipul magistralei

-La final se face un control de paritate(control al redundantei ciclice - CRC), pentru a


verifica daca integritatea transferului a fost indeplinita

Utilizari tipice ale


canalelor DMA
-intotdeauna canalele DMA de
pe controlerele DMA se
configureaza in functie de tipul
cipului de controler folosit
-Slide-ul de mai sus prezinta un exemplu pentru un controler DMA cu 8 intrari:
- pinii de intrare sunt numerotati de la 1->7
-asa cum controlerul DMA din schema de mai sus are 3 interfete pe care le
gestioneaza, el poate sa aiba pana la maxim 8 in care vedem cum se pot configura
- obs cum se face transferul; pe cati biti; ce utilizare tipica are
-vedem ca de multe ori solutia e flexibila, adica adaptiva, in functie de perifericele
instalate pe o configuratie specifica pot exista utilizari principale sau secundare, in acest
fel nu e obligatoriu ca toate sa fie in acelasi timp
- configuratiile acestea(de mai sus) sunt solutii recomandate, insa pot exista
controlere cu 16 pini sau 32 de pini, acesta fiind un exemplu simplu pt a vedea cum se
realizeaza aceasta configuratie

Exemplu
In acest exp dorim sa facem
urmatoare operatie:
-controlerul RS232C(studiat la
interfete seriale) asigura
transmisiunea pe o linie de
comunicatie, doreste sa scrie un bloc
de o anumita dimensiune la o anumita
adresa din memorie
-obs ca controlerul DMA are 4
campuri importante pentru a furniza
toate aceste date, de care protocolul, pe care l-am vazut mai devreme, are nevoie

O luam de jos in sus de la LSB:q


-directia transferului adica scriere/citire: 1-scriere; 0-citire (directia e mereu o
valoare binara)
-Cine vrea sa scrie? - dintre toate terminalele posibile 8,cel cu numarul 4, care in
configuratia nostra este controlerul RS232C este cel care vrea sa initieze transferul prin
DMA (campul Device)
-Ce dimensiune de bloc vrea sa transfere? – 32B(in octeti) (campul Count)
-Unde vrea sa transfere? – care e adresa primului bloc din cei 32 de octeti care
trebuie transmisi la adresa 100 din memorie (campul Address)
Temă: Reconfiguraţi controlerul DMA pentru citirea de la
terminalul 7 a unui bloc de 64 B de la adresa 0.

2. Canale IRQ (Interrupt Request)

De cele mai multe ori perifericele nu lucreaza permanent pt ca asta ar insemna


consumarea energiei si ocuparea permanenta a unor porturi si tinerea ocupata a
magistralelor tot timpul (de exp: mouse-ul nu trebuie sa aiba tot timpul magistrala
ocupata pt ca el nu transmite date decat intermitent => n-are rost sa scanam continuu
starea celor 3 butoane ale mouse-ului, ci numai atunci cand se intampla o modificare de
stare) => chiar daca multe periferice sunt sub tensiune si conectate tot timpul, ele nu
transmit date sau nu fac transferuri tot timpul. Astfel ele pot fi gestionate mai usor doar
atunci cand este nevoie. In momentul in care e nevoie ele fac o cerere de
intreruperi(Interrupt Request), care inseamna ca vom configura din nou o serie de canale
ca la DMA, dar le vom denumi IRQ, le vom gestiona tot intr-un controler
specializat(controlerul IRQ), care functioneaza dupa urmatorul mod de functionare.

Modul de functionare al unei intreruperi pe un canal IRQ (6 pasi importanti):

1) Dispozitivul I/O respectiv cere sa I se gestioneze o intrerupere-> lanseaza


aceasta cerere catre microprocesor printr-un semnal de tipul Interrupt Request. Facand
aceasta lansare trebuie sa se precizeze ce tip de periferic este( dispozitiv I/O ). Dupa cum
stim o interfata are partea harware controlerul si partea software driver-ul => toate
cererile de intreruperi sunt gestionate de o rutina driver care se afla in DOS la o anumita
adresa marcata printr-o valoare in hexa
Exp: daca avem semnalul Interrupt Request 33H => stim ca mouse-ul e cel care a facut
solicitarea
25H/26H => citire/scriere de la/pe hard disk

2)Procesorul opreste in acel moment actiunea pe care o avea in desfasurare; ii


confirma perifericului prin Interrupt Acknowledge, dar numai cu conditia ca nivelul de
prioritate a procesului cerut sa fie mai inalt decat cel care se deruleaza
-cand se face o cerere de intrerupere se poate intampla ca alta cerere de intrerupere
anterioara sa fie deja in curs de rulare. Daca se intampla acest lucru atunci se stabileste
dupa un anumit criteriu, pe care il fixeaza utilizatorul, o ordine a importantei, adica un
criteriu in care vom stabili cine e mai prioritar in tratarea intreruperii
-acest lucru se stabileste pe baza importantei actiunii, dar si pe baza
consecintelor pe care aceasta le produce
Exp: daca cererea de intrerupere vine de la hard disk => nu o sa intrerupem
un hard disk care are elemente mecanice in miscare pt a trata o intrerupere
mai putin importanta

3)Sistemul de operare face aceasta salvare a starii curente a microprocesorului ca


sa stie ce facea in acel moment (salveaza continutul registrelor curente ale unitatii
centrale de prelucrare si se duce intr-o tabela numita tabela vectorilor de intrerupere)

4)Tabela vectorilor de intrerupere contine acele adrese in care numarul canalului


de intrerupere cerut e pus in legatura cu o valoare de adresa in hexa

5)Rutina driver(exp. mouse-ul) isi ia rutina driver de la 33H aflata in ROM-


BIOS, I se cedeaza controlul acelei rutine driver care se ocupa de tratarea intreruperii.

6)Dupa ce intreruperea a fost tratata, adica in cazul nostru au fost preluate datele de
la butoanele mouse-ului (I s-a citit starea), trebuie ca procesorul sa revina la starea
initiala, starea pe care si-a salvat-o prin continutul registrelor curente, se reincarca si cu
aceasta ocazie ciclul s-a incheiat si se poate reveni la momentul in care s-a lansat cererea
de intrerupere, iar procesele pot continua pentru microprocesor asa cum se desfasurau
inainte
Exemplu:
-controlerul de la Intel 8259A e cel mai usor de gestionat
-poate fi un controler integrat adica un APIC(Intel APIC), un circuit dedicat acestei
functii

Nivelurile IRQ si asignarea corespunzatoare fiecarui


dispozitiv

- presupunem ca avem un controler IRQ


care gestioneaza 16 cereri de intrerupere

- fiecare nivel de intrerupere capata un


numar de la IRQ0->IRQ15

- un nivel IRQ superior e mai prioritar


decat un nivel IRQ inferior

De ce LPT1(imprimanta) e la un nivel care se gaseste in tabel mai jos decat


tastatura?
R: de la tastatura vine de preluat o cantitate foarte mica de date, pe cand la
imprimanta volumul de transfer e mult mai mare

Unde se afla controlerul IDE care raspunde de hard disk si CD-ROM?


R: pe pozitia 14, la un nivel de prioritate inalt => nu o sa intrerupem niciodata un
transfer masiv care reprezinta un motor in miscare cu elemente rotative pentru a trata o
schimbare de mouse sau o comanda de la tastatura. Pt aceasta avem un al 2 lea IDE si
posibilitatea de a cupla si un al 2 lea circuit de controler IRQ
Exemplu de sistem de gestionare a intreruperilor, de tratare a
cererilor IRQ la un sistem cunoscut, sistem Pentium procesor

-acest exemplu ne arata cum combina folosirea chipului integrat (8259A), controlerul
IRQ specializat de la Intel, cat si APIC-uri

-ambele procesoare primesc pe un APIC local integrat in chipul procesorului, cereri de


intreruperi pe 2 linii(LINT0 si LINT1)

-ele sunt gestionate de un APIC configurat ca un canal de intrare/iesire in care apar


cererile de intrerupere, in cazul nostru sunt configurate pe cipuri care au 16 intrari

-intreruperile la dispozitiv I/O pot fi tratate atat de catre APIC, cat si de 8259A, iar la
nivelul nucleelor celor 2 procesoare de catre APIC-ul local integrat

-forma generala a schemei este un simetrica adica daca schimbam intre ele cele 2
procesoare nu se intampla nimic in schema => este o arhitectura de multiprocesare
simetrica

Exemplu
-presupunem ca avem 3 dispozitive: imprimanta, hard disk-ul siinterfata seriala

-obs ca nivelurile de prioritate sunt 2, 4 si 5 la configurarea liniilor de interrupt request

-trebuie sa dam desfasurarea in timp a evenimentelor, adica pt fiecare periferic care poate
sa lanseze o cerere de intrerupere trebuie sa spunem: la ce moment de timp o formuleaza
si ce durata de tratare a intreruperii (DTI-durata de tratare a intreruperii)

Avem configuratia particulara:

-la momentu 0 porneste un program care are nevoie de: imprimanta la mom
10(t=10); interfata seriala la mom 15(t=15); hard disk la mom 20(t=20)

-graficul cu sageti ne arata momentele importante: cand apare o intrerupere; cand e


suspendata o intrerupere; cand revine o intrerupere suspendata si cand se termina
tratarea acelei intreruperi

Intelegerea exemplului:
-la t=10 cererea de intrerupere vine de la imprimanta care are nivelul de prioritate 2; nu
mai era ceva in desfasurare in acel moment => poate fi tratata acea intrerupere a carei
durata incepe la mom 10
-ne uitam la durata si obs ca toate sunt 10=> tre sa terminam la mom 20
-la t=15 apare cererea de intrerupere de la interfata seriala, dar la mom 15 imprimanta era
la jumatatea lucrului
-nivelul de prioritate al interfetei este 5>2 => imprimanta e suspendata si se
trateaza interfata seriala=>LPT-ul suspendat tine minte ca mai are 5 unitati de timp
de lucru
-incepe la momentul 15 tot cu durata 10=> tre sa dureze pana la 25

-la t=20 , la jumatatea tratarii intreruperii interfetei, apare cererea de intrerupere a hard
disk-ului

-nivelul de prioritate a hard disk-ului 4<5 => hard disk ul se suspenda, punandu-l
in asteptare, lasand interfata seriala sa-si termine lucrul

=> acum avem 2 mom in asteptare: una care nu a incepu si una care nu s-a finalizat

-nivelul de prioritate al imprimantei e 2 care e mai mic fata de cel al hard disk-ului care e
4 => hard disk-ul poate sa intre sa-si trateze intreruperea la momentul 25=> de la 25->35
se trateaza intreruperea pentru disk

-la mom 35(incheiera intreruperii pt disk) se reia cererea de intrerupere pt imprimanta


pana la mom 40(mai avea 5 unitati de timp)

Temă: Refaceţi diagrama de desfăşurare în timp a tratării întreruperilor, dacă la


momentul t = 30 apare suplimentar o cerere de întrerupere de la placa de reţea, cu nivelul
de prioritate 3 şi aceeaşi durată de tratare, d = 10.

3. Adresa de intrare-iesire 31;00


-exemplul porneste de la un sistem
embeded
-trebuie sa spunem pe cati biti se
face transferul si ce tip de memorie
solicita

-exp nostru are o unitate centrala cu


memore EPROM de 2KB × 8 B (ne
arata capacitatea si iesira), o
memorie RAM de 2KB × 8 B(ne
arata memoria principala) si interfata
de tip PIO(paralel input output)

-inainte de a ajunge in productie tre sa facem niste teste, inclusiv verificarea interfetei
PIO

-interfata PIO poate fi gestionata in 2 moduri: 1)modul hardware


2)modul software
-adica poate fi privita ca orice dispozitiv I/O fara sa ne uitam ce anume este si
atunci putem sa o incadram la orice categorie IRQ sau DMA depinde de cum
doreste ea sa comunice

-o gestionam prin harta memoriei si prin alocarea software


Diferentele dintre cele 2 abordari:
-daca e gestionata ca dispozitiv de I/O(hardware) inseamna ca i se va da o anumita linie
de magistrala

-abordarea software se numeste memorie mapata I/O, ceea ce inseamna ca i se aloca un


anumit numar de octeti in spatiul de memorie(cum se obs in desenul de jos) pentru cele 3
porturi pe care le prezinta (EPROM, memoria RAM si interfata PIO) si, in felul acesta
dupa se poate gestiona configurarea unei harti de memorie

In exp nostru:
-la adr 0-> se aloca spatiul necesar EPROM ului
-la adr 32K-> se aloca spatiul necesar mem RAM
- la adr 64K-> se aloca spatiul necesar interfetei PIO
-ce se vede hasurat e o zona de memorie mapata

Temă: justificaţi dimensiunile celor 3 spaţii de adrese alocate (2 KB, 2 KB


şi, respectiv, 4 B)

Studiu de caz: pasii in proiectarea unui sistem I/O

-proiectand un
sistem noi trebuie sa
dam criteriile
importante de care
trebuie sa tinem
seama; sa dam
valorile de
parametrii la care
vrem sa
ajungem(adica ce
performanta dorim
sa atingem); si sa
spunem relatia
dintre ele

Ce spunem cand vrem sa proiectam un sistem?


-Ce tipuri de dispozitive sunt conectate si pe ce magistrala?
Exp: avem camera video, avem imprimanta, avem scaner, etc, si fiecare pe
ce tip de magistrala comunica
-Care sunt cerintele acestor dispozitive din punct de vedere fizic? Cat sunt de mari?
Ce energie consuma?
-Pe ce tip de conectori sunt conectati? Pe ce sloturi din porturile calculatorului?
-Cat costa fiecare(analia tehnico-economica)? -Sa facem un calcul al fiabilitatii
-Sa estimam performanta si modalitatile de organizare, adica sa vedem care sunt
valorile de frecventa la care lucreaza, care sunt largimile de banda sau vitezele de
transfer implicate
-Sa vedem cum gestionam cererile de acces DMA si IRQ ale fiecarui dispozitiv
-cate cicluri de ceas dureaza initializarea
-cum configuram sistemul IRQ
-cum facem sa nu existe cost de asteptare cum am vazut in exp anterior, sau
stari de wait astfel incat memoria, magistrala si cache ul sa fie folosite cat
mai eficient
-schema reprez o configuratie particulara care poate rezulta in urma acestei analize

CAP 4 – Nivelul Fizic


A.Microprocesorul
-aceasta este o schema de structura logica a
pinilor, adica este o schema de chip => avem
numai intrarile si iesirile realizate prin aceasta
structura logica a pinilor

-vedem ce tip de semnal; daca e de in sau out si


pe cati biti; nr bitilor al liniilor de adresa; nr
liniilor de date; semnalele de comanda, de
intrerupere, de arbitrare; comunicarea cu
coprocesorul; transmiterea starii procesorului si
alte semnale
-in partea de jos vedem: masa, alimentarea si ceasul

Exemplu particular
-tot schema de chip pentru Intel Core i7
-se obs cele 2 canale de memorie - 2
memorii DDR-uri; canalul PCIe(express);
DMI(Direct Media Interface); interfata de
disc; pe dreapta: semnalele de diagnoza,
de monitorizare termica, de gestiune a
puterii; senzorul de putere; semnale de
configurare si alte semnale; jos- ceasul,
alimentarea si masa

-important pt aceasta schema pt a afla cati


astfel de pini are un astfel chip(in cazul nostru Intel Core i7 ), trebuie sa specificam si nr
de linii, adica pe cate linii de semnal se gestioneaza fiecare intrare sau iesire

B.Intreruperile si gestionarea intreruperilor

-cazul in care schema generala de tratare a intreruperilor e particularizata pt un controler


de intreruperi Intel 8259A

-observam dialogu care se face cu liniile cerere de intrerupere, liniile de date pt transfer
intr-un sens sau altul sau bidirectionale si semnalele de comanda, read RD/write WR
pentru sens, A0 pt prima linie LSB-ul a liniilor de adresa si chip selectul CS, pt control

-fiind un controler de intreruperi cu 8 intrari, s-a marcat aici o anumita alocare: pentru
IRQ0-semnalul de ceas; IRQ1-tastatura; IRQ5-disk-ul; IRQ7-imprimanta
-daca avem nevoie de mai mult de 8 linii atunci putem zice in felul urmator:
-daca nu avem la dispozitie alte circuite, alte chip uri, doar 8259A, atunci in
momentul in care s-a umplut, deci am pus 7 periferice pe liniile de intrare ale acestui
controler, pe ultima ramasa vom pune un alt controler (alt 8259A), ca si cum ar fi o
unitate I/O care se conecteaza. Astfel ea ocupa o singura linie de intrare, dar ea in sine are
alte 8 linii de intrare => in acest mod putem gestiona cele 7 canale alocate direct
perifericelor plus inca 8 periferice pe care le pune la dispozitie al 2 lea controler, adica
15. Daca avem nevoie de mai multe putem pe cele 8 linii alea primului controler sa
punem alte 8 controlere cu cate 8 intrari fiecare.

Temă: configuraţi o schemă de gestionare a întreruperilor, pe baza cipurilor


8259A cu 8 intrări, pentru un număr de 12 linii de întrerupere, cu specificarea
dispozitivelor I/O asociate (la alegere).

C.Magistrala

Magistrala -este canalul de comunicatie, acea artera de trafic pe care se face orice tip de
transfer in interiorul arhitecturii unui calculator
-ca o magistrala sa functioneze corect trebuie sa existe un cod rutier, adica un
set de reguli de circulatie care sa faca ca tot acest flux care circula pe magistrale sa se
desfasoare in bune conditii => reprezinta protocolul de magistrala

Protocolul de magistrala trebuie sa prevada:


-caracteristicile mecanice: ce tip de conectori, ce configuratie de conectori pe slot,
cum putem configura modulele de extensie(ce putem adauga in plus), sertarele, fundurile
de sertar si cablajele
-caracteristicile electrice: pt a functiona corect trebuie sa stabilim ce nivel de
tensiune, de curent, incarcare, frecventa de lucru, rata de transfer sau largime de banda pe
care o poate suporta acea magistrala
-secventa de generare a semnalelor este diagrama de timp
-timpii limita si timpii de mentinere, adica ce valoare min sau max trebuie sa aiba o
faza, cat de mult trebuie sa tinem activ un semnal, exp un semnal de memory read /
memory write, pentru ca datele respective sa fie corect citite / scrise
-interconditionarile(adica relatia cauza efect intre acestea): ne arata de fapt
succesiunea temporala si felul in care relatia cauza-efect se poduce, adica: in ce ordine
trebuie sa le dam drumul, activarea unui semnal ce produce in continuare, cand putem sa
dezactivam un semnal dupa ce o faza este finalizata, etc
-pe magistrala apar mai multe tipuri de semnale
Tipuri de semnale:
- semnale de date
- semnale de adresa
- semnale de comanda
- semnale de control: guverneaza buna gestionare a traficului pe magistrale
- semnale de intrerupere: pt ele trebuie sa alocam linii speciale pe magistrale
- semnale de tact(de ceas)
- semnale de control al accesului(de arbitraj): se refera la faptul ca la un momen dat
magistrala poate sa fie luata in control de un singur dispozitiv, dar daca sunt mai multe
dispozitive care vor sa aiba acces la magistrala atunci trebuie sa stabilim, la fel ca la IRQ
si DMA, un tip de prioritati, un set de criterii care sa ne spuna cui ii dam mai intai
magistrala si cine trebuie sa astepte
-linii de alimentare

Criterii de clasificare a magistralelor


Magistralele pot fi clasificate dupa 4 criterii importante:
1)Lucrul in raport cu ceasul
a)magistrale sincrone care au clock
b)magistrale asincrone care nu au clock

2)Numarul de module master


-intotdeauna cand se executa un transfer, adica implica 2 parteneri, unul din ei
trebuie sa fie initiatorul, cel care initiaza cererea de transfer sau face solicitarea celuilat
partener si acela este totdeauna master-ul
-slave-ul este partenerul care raspunde la o initiativa, care da un feedback si intra
intr-o comunicatie stabilita de catre initiativa master-ului
Exp: toate in afara de memorie pot sa fie si slave si master, memoria poate fi doar slave,
ea neputand sa ceara un transfer
-de cele mai multe ori procesoarele moderne lucreaza in arhitecturi multimaster
a)ca o magistrala sa fie unimaster, inseamna ca ea trebuie sa trateze un singur
master si acela este de obicei un procesor, dar in prezent nu mai exista asa ceva
b)daca este multimaster, inseamna ca pe magistrala vor fi mai multe dispozitive
care vor dori accesul la magistrala si vor fi gestionate in ordinea prioritatilor, conform
schemelor de arbitraj

3)Transferul de date
- ciclu-perioada completa in care se desfasoara un transfer care dupa aceea se poate
repeta cu alte date
a)magistrale secventiale: sunt cele prin cicluri, in care fiecare ciclu poate sa fie de
citire/scriere in/de la memorie si la fel cu dispozitivele I/O si cu circuitul DMA
b)magistrale tranzactionale: nu au cicluri => fiecare transfer e divizat la randul lui
in faze sau etape, astfel, magistralele tranzactionale vor putea fi tratate cu o diagrama de
stare pt a vedea in orice moment in ce stare suntem si in ce stare putem sa evoluam
ulterior

4)Numarul semnalelor utilizate:


a)magistrale seriale
b)magistrale paralele

Tipuri, familii si standarde de magistrala

Tipuri, familii si standarde ne arata un mod de operare a acestor magistrale in functie de


rolurile specific pe care le au.
1. Magistrale procesor-memorie
Cu cat magistralele au lungime mai mare cu atat vor fi mai lente.Pentru accesul la cash
sau la RAM procesorul trebuie sa aiba o cale directa scurta si rapida sis a nu mai faca
altceva decat accesul la memorie.
2. Magistrale I/O
Cu cat ne indepartam de processor magistralele sunt mai lungi mai lente, mai specializate
pe sarcini specifice.
3. Magistrale backplane

Este tipul ce se folosea pentru configurarea transferurilor pe placa de baza si mai tarziu a
devenit magistrala mezanin.

a. Doar magistrala
backplane care face legatura
intre processor, memorie si
traffic I/O
b. Procesorul si memoria
lucreaza pe un singur canal
a.i celelalte canale sa fie
folosite pentru sarcine
specifice
c. Combinatia tuturor

In stanga :
- in interiorul CPU-ului avem magistrala On-Chip, cea care este integrata in nucleu
procesorului si face legatura intre ALU si registrele interne.
- cele doua magistrale de intrare in ALU care sa aduca operanzii
In afara cipului CPU avem magistrala de memorie care face legatura intre CPU si RAM
prin controllerul de memorie si magistrale de I/O care fac legatura cu memoriile externe.

Exemple de situatii in care diferite perechi de dispositive se configureaza intr un binom


master-slave. CPU ul este mereu master fata de memorie, este master fata de un
perificeric cand cere sa se initializeze un transfer si fata de coprocessor atunci cand ii
transmite instructiuni.
Dispozitivele I/O pot fi master atunci cand cer DMA.
Coprocessorul poate sa fie master atunci cand cere operanzi de la CPU.
Memoria este doar slave in toate situatiile.
Un sertar care se introduce intr un calculator prin edge connector.
La PC urile obisnuite magistrala este comuna(partajata).Avantajul este simplitatea
deoarece aceleasi linii de adresa sunt commune pentru toate dispozitivele atasate.
Dezavantajul este acela ca magistrala partajata trebuie sa isi imparta largimea de banda la
acel numar de dispozitive ce este conectat pe el.

Numarul de linii a unei


magistrale se numeste latime.
Viteza de transfer sau banda
unei magistrale se numeste
largime de banda.
Latimea este un numar intreg,
deci un numar iar largimea de
banda se masoara in multipli de
biti/s.
a. 20 de linii de adresa
b. 24 de linii de adresa
c. 32 de linii de adresa

Viteza=numarul de linii* frecventa de ceas si rezulta ceva exprimat in biti/s dupa care noi
il transformam in octeti/s impartind rezultatul la 8. (B/s)
Pt viteza de transfer trebuie sa ne uitam la cantitatea de date si in ce interval de timp.
Viteza de transfer- debitul de transinformatie( ce cantitate de informatie in biti se
transforma in unitatea de timp adica secunda)
Avem reprezentarea diagremei de timp.Este magistrala intre procesor si memorie adica se
pot face transferuri intre CPU si RAM deci de citire/scriere.Diagrama de timp ne arata
succesiunea evenimentelor, desfasurarea in timp, momentele principale, conditionarile, ce
intervale de timp sunt necesare pt mentinere si cum se deternima ele in relatia
cauza/efect.
Liniile implicate sunt: ceasul, liniile de adrese si de date, semnalele de comanda(MREQ)
si sensul transferului(citire/scriere).In cazul nostru avem un exemplu de citire din
memorie a procesorului. Observam ca semnalul de ceas nu este ideal(nu este
dreptunghiular) ci este trapezoidal.Asta inseamna ca vom tine cont si de durata
frontorilor(cat dureaza sa creasca/coboare frontul)
Pentru un semnal de ceas corect aceste fronturi nu trebuie sa depaseasca 5% fata de
perioada de ceas.
Tot ce este marcat cu gri este zona ce nu ne intereseaza.
Dorim sa citim din memorie: pe semnalul de adresa punem valoarea adresei din memorie
de la care vrem sa citim( se marcheaza comutarea semnalului de adresa)
TAD – intervalul de timp intre frontul crescator din T1 si cmutarea semnalului din
adresa.
Semnalul de date a aparut abia in tactul 3 din cauza memoriei(din cauza timpului de
acces).Daca memoria este mai rapida poate pune datele chiar in T1, daca este mai lenta
apare o intarziere.
Cand deja adresele au aparut noi trebuie sa spunem ce vrem sa facem la acea adresa(sa
scriem sau sa citim). Deci se activeaza MREQ tot in tactul T1 dar cu un anumit delay fata
de comutatrea adreselor marcat cu TML.
TML: M: Memory; L:Low ( Timpul care trece intre punerea semnalului de adresa si
activarea smnalului MREQ)
Acea comutare vine la un anumit delay adica TM( intervalul la care se activeaza Memory
request fata de caderea frontului din T1)
Semnalu RD ii spune memoriei ca de acolo trebuie preluata o data.
TRL – timpul care trece intre frontul descrescator in T1 si comutarea pe 0 a semnalului
RD
Pe tactul T2 nu se intampla nimic( semnalul de WAIT s a comutat din cauza faptului ca
DATA este activat cu delay deoarece este lenta)
In ciclul T3 apar datele(memoria raspunde punand pe liniile de date cuvantul specificat in
T1)
Datele se mentin un interval de timp pentru a fi preluate pe magistrala.Dupa ce au fost
preluate, momentul de preluare este frontul descrescator deci se poate ridica semnalul de
MREQ dupa TMH, se poate ridica semnalul de RD prin TRH si apare semnalul TDH de
mentinere a semnalului de read.
Diagrama s-a desenat pt fi= 100MHz ( 1/10^8=10ns- durata unui ciclu de ceas)
Pentru toate aceste intervale create prin relatia cauza-efect intre evenimentele care au
avut loc s-au creat aceste conditii ce trebuie respectate:

-unde avem doar valoare maxima acel interval nu are voie sa dureze mai mult de..
-unde este valoarea minima nu are voie sa fie mai scurt de..
-unde este 0 acolo intervalul trebuie sa existe(sa fie pozitiv)
Dezavantajul major a magistralei sincrone: ea va dura mereu un numar complet de
perioade de ceas( durata totala a unui ciclu de magistrala va fi mereu 2T- mai rapida, 3T,
4T deci nu putem avea valori intermediare). Totul se masoara in etaloane multipli de T.
Acesta este un dezavantaj deoarece nu avem valori intermediare.Orice transfer care real
ar dura intre 3,1 si 4 va fi tratata in 4.

Magistrala asincrona nu mai are semnal de ceas, dar ca sa se faca o evidenta ff corecta a
comutarilor, a evenimentelor, se introduc doua semnale suplimentare de comanda:
-MSYN (Master)
-SSYN(Slave)
Tehnica folosita in acest caz este protocolul de Full Handshake.Este tehnica aceea in care
2 parteneri se pun de acord si vor folosi aceeasi parametrii de comunicatii.
Comutarea unui semnal in sensul activarii o va determina pe cealalta.Masterul este
primul care comuta iar slave-ul este cel care raspunde.
Tehnica se realizeaza astfel:
-se activeaza MSYN dupa ce s a pus adresa, s-a specificat accesul la memorie (prin
activarea MREQ), s-a specificat faptul ca va fi o citire( prin activarea RD) se pune
MSYN( semnalul de sincronizare de la master ne spune ca procesorul este gata sa
primeasca date pe care doreste sa le citeasca de la slave(memorie))
-In momentul in care s-a activat sincronizarea de master asteptam rezultatul citirii din
memorie( vine dupa un timp care este timpul de acces)
-In momentul in care el a pus datele activeaza SSYN (memoria a raspuns).In acest
moment datele pot fi preluate.
-Dupa activare SSYN dezactivam toate celelelate semnale deoarece datele au fost
preluate.
Marele avantaj este acela ca daca dorim un ciclu mai rapid si pune o memorie mai buna(
chiar si cu 1ns aceasta cantitate se va simti la ciclul de transfer).
In concluzie si o crestere a performantei infime poate fi simtita la aceasta metoda
asincrona.

Aceasta diagrama este tot o diagrama de citire pe magistrala asincrona dar diferenta in
acest caz este ca citirea nu se mai face pe cuvant ci se face pe blocuri.Un bloc poate
contine un pachet de date.
Aceasta este tehnica de citire in rafale(burst) – se da o singura data adresa si se citesc
atatea adrese consecutive cat se specifica a fi lungimea pachetului.
Deosebirile in aceasta diagrama:
-in valoarea countului trebuie sa precizam care este lungimea pachetului( in cazul nostru
4)
- trebuie sa spunem ca citirea se face pe blocuri( cu semnalul BLOCK)
In ciclul T1 se pune adresa inceputului pachetului, se pune lungimea pachetului de la
acea adresa, se activeaza MREQ, RD si se activeaza si BLOCK.
La sfarsitul ciclului T1 inca nu au aparut datele deci se va activa imediat si semnalul de
WAIT.
In ciclul T3 au aparut datele( delay de 2 perioade de ceas) in care apare cele 4 blocuri de
date citite in ordine.Putem ridica semnalul de WAIT.Este suficient sa preluam primul
bloc din pachet dupa care putem ridica restul semnalelor.

Protocol tranzactional – protocol in care ciclul de magistrala are mai multe faza sau etape
prin care se poate face o trecere de la o stare de alta.
Fiecare transfer are 3 faze:
-Request(REQ) - faza de cerere de transfer
-Transfer(XFER) - transferul propriu zis de citire/scriere
-Acknowledge(ACK) – confirmarea terminarii si corectitudinii transferului de date din
acel ciclu de magistrala

Transferul poate dura oricat in functie de lungimea pachetului de date cerut( se poate
ramane in aceasta stare in functie de lungime)
Exemplul are nuante diferite( masterul A si masterul B)
Fiecare master face altceva: pe magitrala putem citi o data de o adresa si sa scriem o data
de la alta adresa.
EX: Masterul A(gri) este cel care citeste, masterul B este cel care scrie si dupa care se pot
inversa.
Masterul B face o cerere de transfer, asta inseamna ca trebuie sa puna dupa faza de REQ
adresele de la care vrea sa citeasca.
Punand aceste adrese asteapta sa treaca la faza XFER.Memoria raspunde mai greu deci se
termina cu totul in ciclul 4.
Masterul A are faza de REQ de unde porneste comutarea adreselor spunand ca vrea sa
faca o citire.Faza de transfer incepe dupa 4 perioade de ceas deoarece o data intarzierea
este data de timpul de acces dar el trebuie sa astepte pe linia de Read sa se termine citirea
anterioara a masterului B.
CURS 10

Trecem la partea de arbitraj al magistralei.


Unul din criteriile de clasificare a magistralelor era dupa nr de module master. Comunicarea
master-slave pe magistrala inseamna ca unul din disp e cel care initieaza un transfer pe magistrala
iar celalalt raspune. Am vazut ca in aceste transferuri ca master-slave sunt implicate
procesorul/coprocesorul/unit de I/O si memoria. ( doar memoria poate fi slave ).
Cand exista mai multe unitati master poate aparea situatie de solicitari concurente de a
accesa magistrala. Asta inseamna ca trebuie sa gestionam aceste cereri concurente printr-un
mecanism de arbitraj care inseamna stabilirea unor prioritati ai sa avem o ordine prestabilita a
importantei acestor unitati ca sa le dam accesul la magistrala pe rand ( la un mom dat accesul pe
magistrala poate fi gestionat doar de un singur disp ).
Avem 2 tipuri de scheme de arbitraj: - structura centralizata ( este prezent fizic un arbitru –
avem intotdeauna un bloc hardware care sn arbitru) -> se aseamana putin cu ce era la GSM;
- structura descentralizata ( fizic arbitrul lipseste –
prezenta lui e compensata prin proceduri de arbitraj care nu indica un bloc fizic ).

Scheme de structuri centralizate:


- la schema1 (algoritmul DAISY CHAIN): exista 5 unit master (acele disp I/O) si toate adreseaza
arbitrului cereri de magistrala in mom in care au nev de transferuri; arbitrul le raspunde printr-o
linie de acordare a magistralei ( BUS GRANT – are o structura seriala ). Linia intra de la arbitru in
primul disp de unde iese si intra in al doilea disp si tot asa ( e practic o inlantuire graduala ai
prioritatea => direct din schema ). Cel mai prioritar va fi intotdeauna disp 1 care daca nu are nev de
magistrala trece in cont semnalul la int disp 2 si tot asa. Disp 5 are cea mai mica prioritate, el poate
sa ceara si sa primeasca magistrala daca niciunul din cele 4 de la stanga lui nu face aceasta
solicitare. Concluzie: apropiere de arbitru => prioritate mai mare + e nasol pt ultimu disp daca
avem prea multe.

- la schema2 (pt cazul cu multe disp master): se repartizeaza aceeasi schema1 cu 2 niveluri de
prioritate; avem 2 bus grant si 2 bus request (2 perechi de semn). Ex: pe bus request 1 pune disp
1/3/5 si pe 2 punem 2/4 => am separat pe 2 niveluri de prioritate.

- la schema3 (alg cu cereri independente): fiecare unitate master poate adresa arbitrului o cerere de
magistrala / iar arbitrul poate acorda unuia singur la un mom magistrala prin BG. La schema asta
nu se vede pe schema ce disp are prioritatea cea mai mare ( toate au acces direct, criteriul distantei
fata de arbitru nu functioneaza aici ). Care e ordinea prioritatilor aici, cum se alege? -> E
problema doar at cand 2+ disp master trimit cererea pt acces la magistrala in acelasi timp. Solutie
software: arbitrul trb sa aiba o configuratie care printr-o anumita formula de repartizare a
prioritatilor sa aiba ..; ex: realizam arbitrul printr-un FPGA pe care il putem reconfigura (software)
in ordinea dorita pt orice configuratie posibila ( pt orice nr m ).

- la schema4: pooling-ul intreaba rand pe rand pe fiecare disp ( 1,2...m ); cand cineva are nevoie
interogarea asta se opreste pt ca intalneste un semnal de bus req de la acel disp; daca magistrala e
libera arbitrul i-o acorda pe linia de confirmare si disp respectiv preia controlul magistralei ( pe
linia de bus ).
De ce trebuie log2m linii de interogare? -> pe linie s-a format un cod (binar) care de ex: pt
m=8 avem cod de log28 = 3biti din care pot avea 8 combinatii posibilie pt fiecare disp. (000, 001,
... )
Cum facem interogarile? Se fac pe rand, cand ajunge la m si il interogheaza porneste de la capat cu
1.
Linia de interogare este linie cu intrari binare in care avem atatia biti cate combinatii se pot face pe
2m. Nu este linie speciala pentru fiecare ci o singura linie in care s-a format un cod in care pe 3
pozitii binare
Poate genera 8 combinatii.

Scheme de structuri descentralizate:


- schema1: tot cu 5 unitati master, cereri de magistrala pe bus req, linia de arbitraj care stabileste
cine preia si faptul ca magistrala e ocupata inseamna activarea lui bus ??.
Comparare cu schema1 (daisy chain): in loc de arbitru fizic avem acum o linie de arbitrare
ca sa-l compenseze + ca apare acum o tensiune de 5V aplicata care inlocuieste blocul fizic. Ne
bazam pe faptul ca inchiderea unui circuit inseamna transferul acelui semnal de la fiecare bloc in
parte: deci +5V se aplica blocului 1, daca el are nev de magistrala a intrerupt difuzarea semn spre
dreapta iar daca nu are nev semnalul este continuu. Deci circ se inchide prin linia de arbitrare ai in
mom in care un disp are ne semn nu se mai propaga spre dreapta.
Deci la fel ca la daisy chain un bloc de tip master e mai prioritat decat cele de la dreapta lui
si mai putin prioritar decat unul de la stanga lui.

Pentru a obţine accesul la magistrala, o unitate trebuie să verifice indeplinirea a trei conditii:
a) sa verifice dacă magistrala este libera;
b) sa aiba semnalul BUS BUSY dezactivat;
c) dacă linia de arbitraj a ajuns pana la el (prezenta la intrarea sa este libera).

- schema2: schema descentralizata circulara, arbitrul e prezent printr-un bloc la fiecare disp master
in parte. Disp acestea vor cere magistrala pe bus req, ele vor primi confirmare pe semn ack si vor
avea semn bus grant activat (deci pot prelua magistrala) daca nimic de la stanga lui nu i a intrerupt
aceasta solicitare.
Cu alte cuvinte, daca un disp a fost prioritar si a preluat magistrala, dupa cand trecem mai
departe el devine cel mai putin prioritar (il trecem la coada) -> prin deplasare circulara.

Tipuri de standarde de magistrala:

- PCI: el e cel care a inlocuit standardul ISA ( Industry Standard Architecture ) si este o mag
sincrona;
a fost proiectat de Intel la liber ( fara licenta ) ai lumea sa l poate folosi free;
introduce un controller PCI ( controller de mem care lucreaza printr-o conexiune PCI Bridge
dedicata, de mare viteza ); el asigura astfel conex pe magistrala mem cu orice alt tip de disp care se
poate conecta ( ex: controller de retea/controller video/controller din alt standard (SCSI) );
Controlerul SCSI este tot un dispozitiv PCI, prin care se pot conecta la magistrala alte
dispozitive: HDD, SCN (scanner) etc.;
orice disp legat intr-un slot PCI este vazut ca un disp PCI;
La fMAX = 66 MHz, transfera cel mult 64 de biti simultan => largimea de banda = 528
MB/s (prima versiune?).

Arhitectura sistem Pentium


- regasim standardul PCI ca magistrala mezanin;
- in linia de sus avem magistrala de mem/magistrala locala a procesorului/magistrala cache;
- PCI ul le vede pe toate ca disp PCI;
- printre ele se poate gasi de ex un controller ISA pt ... jos disp conectate cu ISA;
- PCI ul se afla la nivelul intermediar intre aceste tipuri de magistrale;
- pe PCI se pun disp periferice rapide/pe ISA cele lente.
-doua versiuni PCI: pe 32 biti (120 pini) si pe 64 biti(120+64pini) la 3.3/5V 33/66MHz

Cum poate fi fol standardul PCI sau PCI-X (urm versiune) in diferite configuratii:
- schema1: pt procesoarele uni-core, Northbridge gestioneaza discutia cu memoria ( CPU-mem ) si
cu adaptorul grafic ( monitor ), Southbridge gestioneaza conexiunile externe din diferite standarde
+ comunicarea cu mem secundara.

- schema2: procesoarele dual-core, PCI se mentine, el aici asigura legatura prin controllere
specializate cu alte tipuri de magistrale. Rolul Southbridge ului este acum putin mai redus deoarece
cele 2 procesoare solicita acum mai mult Northbridge ul fata de ex cu uni-procesor.

Cum lucreaza magistrala PCI aici: - ea este sincrona, deci lucreaza prin coordonare cu un semnal
de tact, este multimaster si tranzactionala. Aici se lucreaza pe tranzactii, tranzactile sunt etape/faze
ale unui transfer pe magistrala si le putem gestiona printr-o diagrama de stare in care vom vedea in
orice moment in ce stare ne aflam si in ce stare putem trece ulterior.
=> Operatiile de read/write sunt gestionate prin 3 faze, respectiv 2 faze(cicluri).
Operaţia de citire:
ciclul 1 – disp master (procesorul) pune adresa de la care citeste pe magistrală;
ciclul 2 – se retrage adresa de pe magistrală, care este cedată slave-ului ( proces de inversare - se
multiplexeaza aceleasi linii de adresa fizice intre master si slave );
ciclul 3 – slave-ul pune pe magistrală data solicitata.
Operaţia de scriere:
ciclul 1 – master-ul pune pe magistrală atat adresa, cât şi data;
ciclul 2 – slave-ul preia de pe magistrală data (nu mai este nevoie de inversare/turnaround).
O tranzactie dureaza minimum trei cicluri, iar lungimea blocurilor ( ce cantitate de date trb sa
scriem/citim ) transferate nu e limitata.Ciclurile de magistrale sunt foarte numeroase, nu trebuiesc
retinute toate. Partea speciala la PCI este ca da alte perechi master-slave, adica in loc de master
spune initiator si il noteaza cu I iar in loc de slave spune target si il noteaza cu T

master = initiator (I), slave = target (T);


Figura de mai jos este o diagrama pt un proces de transfer pe magistrala PCI

Avem 3 situatii distincte in primul proces avem opratii de citire, apoi avem o perioada libera si
apoi o perioada de scriere.Liniile de date si de adresa sunt multiplexate de semnalul AD asta
inseamna ca pe aceleas linii fizice mai inainte se pune adresa, adresa a fost pusa de master,operatia
de inversare turnaround,urmand ca slav, memoria raspunde cu datele citite pe aceleas linii fizice.
- grafic: avem acel Idle deoarece s-a intrat in T4 cu preluarea datelor;
C/BE – clock/byte enable;(sensul de citire)
Adresa de pe linia AD este o adresa de citire si este corelata cu o comanda de read, urmand
validarea operatiei datele fiind preluate.Deoarece datele au fost preluate, intrand in T4 acesta este
ciclu liber. Observam un ciclu de scriere in care prima etapa a tranzactiei punerea adreselor si a
datelor(la scriere se spune unde si ce anume se pune pe aceleas linii, nu mai este nevoie de
turnaround, pe clock/byte enable s-a dat comanda de write, iar datele s-au validat pentru scriere.
semnalul FRAME – ne arata cat dureaza validarea ciclurilor acestor operatii;
corespondenta intre master-slave are loc pe semnalele IRDY (init ready) si TRDY (target
ready);
DEVSEL – device selection (care e masterul cu care trb sa intre in legatura, in caz ca avem
mai multe disp master).
In concluzie avem 3 faze/cicluri la citire si 2 faze/cicluri la scriere nu avem turnaround, dialog
master-slave prin IRDY TRDY si selectia dispozitivului afisat.
Arbitraj PCI: - cu schema3 de la struct centralizata

Standarde de magistrale de I/O:


➢ SATA (Serial Advanced Technology Attachment)
- dedicată transferului între calculator şi medii de stocare externe (mem magnetice – HD, mem
optice – CD/DVD);
- viteza mare de transfer si largime de banda mare (până la 16 Gb/s – reviziile 3.2 din 2013 și 3.3
din 2016);
- hot plugging / hot swapping – inseamna ca poate fi conectata/reconectata/inlocuita la “cald”;
- cabluri subţiri pentru răcire eficientă cu aer;
- verificări riguroase pentru integritatea operaţiilor;
- NCQ (Native Command Queuing) – protocol de optimizare a ordinii operaţiilor de citire/scriere
care tine loc de arbitraj;
- interfaţă standard specializata AHCI (Advanced Host Controller Interface);
- arhitectura de tip point-to-point care lucreaza pe modelul de conexiune directă între controler/hub
(H) şi device (D);
- porturi de expansiune (M) prin cablu, pentru conectarea mai multor echipamente la un hub;
- fol tehnica NRZ (Non-Return to Zero).
➢ SCSI (Small Computer System Interface)

- e fol cand avem de transferat cantităţi mari de date într-un timp foarte scurt: HD (hard),
CD/DVD, LPT, SCN, VID etc.;
- toate disp conectate la SCSI sunt vazute ca SCSI ( ca la PCI asemanare );
- magistrala tranzactionala, poate fi repr printr-o diagrama de stare in care comunicatia este tot
intre initator si tinta (slave).
- fiecărui dispozitiv SCSI (ţintă) îi este alocat un identificator unic SCSI ID (valoare întreagă);
-starea de baza este starea de magistrala libera in care magistrala se poate intoarce dupa oricare alta
stare. Cand are loc o tranzactie propriu zisa magistrala libera trece in faza de arbitraj(stabileste
care din dispozitivele cu ID configurat preia magistala) faza de selectie, daca se repeta operatia
avem faza de reselectie, dupa care faza de transfer propiu zis a operatiei si anume bucla care apare
in partea dreapta sus inseamna ca acest transfer poate sa dureze oricat se poate ramane un timp
oarecare prin ciclare in aceas faza in sensul transferul continua si cantitatea de date este mare. De
la fiecare faza se poate ajunge inapoi la faza de magistrala libera. SAS ultima versiune din 2017.

➢ AGP (Accelerated Graphics Port)

- am vazut-o de cele mai multe ori prin schemele Northbridge pt ca prin north se facea legatura cu
placa de afisare (monitorul), si acest standard de mag realiza gestiunea mem grafice; era o
magistrala paralela, rolul ei era sa preia sarcinile de comunicatie cu monitorul si sa degreveze
astfel CPU de aceste lucruri. Folosea o procedura specializata de acces a memoriei, deci este
practic un tip DMA care acceseaza exact zona grafica din mem pt a prelua informatia despre
afisare (adancimea de culoarea,rezolutia etc). Realiza aceasta comunicatie in mod pipe-line.
- poate atinge lărgimea de bandă de 2.132 MB/s, la viteza 8× (versiunile 3.0 și 3.5/UAGP);
- superioară magistralei PCI, dar abandonată după 2004, în favoarea magistralei PCI Express

➢ USB (Universal Serial Bus)

DPDV al gestiunii info si al transf de date pe magistrala exista 5 moduri de transfer:

- modul control – folosit pentru comenzi simple către dispozitive, primind ca răspuns starea
dispozitivului periferic la un moment dat (de exemplu, pipe-urile de management 0);
- modul izocron – garantează o viteză constantă (nu neapărat cea maximă), dar cu posibilităţi
de a pierde date (de exemplu, aplicaţii audio-video în timp real);
- modul întrerupere – pentru periferice care au nevoie de răspuns rapid (cu latenţe limitate)
(de exemplu, mouse, tastatură etc.);
- modul bulk – pentru transferuri mari şi lungi de date, folosind toată banda liberă, fără a
garanta banda (de exemplu, transferuri de fişiere).
- modurile super-speed și super-speed+ – introduse la ver. 3.0 (2008), respectiv, ver. 3.1
(2013), 3.2 (2017) și USB4 (2019), pentru transferuri foarte rapide și masive de date.
Fiecare transfer USB are asociat un descriptor.

- la desen: Endpoint e partenerul de dialog in transferul pe magistrala care poate fi ales dintre
tipurile de transfer anterioare. Setarile de interfata implica 3 tipuri de descriptori: de jos in sus
descriptori de disp, de config, de interfata.

Un root-hub are următoarele porturi (port = punct de conexiune):


- un port upstream – conectează hub-ul cu host-ul sau cu un hub mai apropiat de host;
- mai multe porturi downstream – conectează hub-ul cu alt hub sau cu un dispozitiv (endpoint).

Componenţa unui root-hub USB:


- controlerul hub-ului – comutator între portul upstream şi porturile downstream;
- repetorul hub – root-hub-ul propriu-zis: gestionează pipe-urile (divizate în max. 16 subpipe-uri);
- translatorul de tranzacţii – viteză medie/mică în aval de hub şi viteză mare în amonte de hub.
Formatul unui transfer pe magistrala USB (ex de 4 cadre/frame):
-avem 4 cadre
-frame1 si 3 sunt de sensuri opuse
-cadru inactiv are un singur camp
-frame 1 are formatul cadrului alcatuit din 4 cadruri

Versiuni USB / largimi de banda şi interfete:

Tehnologia Thunderbolt (TB) este o combinaţie între conexiunile PCI Express şi


DisplayPort (DP), oferind un protocol I/O dual cu transfer de date mare bidirecţional: 10 Gb/s
teoretic / 6,6 Gb/s practic.

Controlerul Thunderbolt (stânga) integrează un switch Thunderbolt, un switch PCI Express


şi unul
/mai multe porturi Thunderbolt, DisplayPort (dreapta) şi PCI Express. Interfaţa foloseşte ca materie
primă cuprul, are cel mult 3 m lungime (lungimea e limitata), o lăţime de 7,4 mm, o înălţime de 4,5
mm şi 20 de pini/cip.
Toate aceste standarde asigura comunicatia si nu mai sunt protocoale specializate pe o anumita
categorie, in general aceste standarde se refera atat la interfatARE, la comunicatia I/O cat si la
transferurile de date pe magistala cat si la lucrul in retea.
USB -> si la standard de interfete si la standard de magistrale.

➢ IEEE 1394 / FireWire (Apple) / i.LINK (Sony) / Lynx (Texas Instruments)

- magistrala seriala, tranzactionala, orientata pe pachete de lungime variabila, audio-video, de


mare viteză: 100, 200, 400, 800, 1600, 3200 Mb/s (până în 2014 – înlocuită de Thunderbolt);
DPDV al transmisiei:

- asincrone: unicast, garantate la recepţie, cu semnal de confirmare de la receptor;


- isocrone: multicast (alocă numere de canal pentru noduri diferite), garantate în timp, cu
o lărgime de bandă rezervată (maximum 80%), alocă banda pe cicluri (125 us);
- fluxuri asincrone (asyncronous streaming): unicast sau multicast.

Ex de cum arata formatul datelor transimse pe aceasta magistrala:

tag – formatul datelor (specific protocolului); channel – adresa de canal; tcode – codul tranzacţiei
(asincron, isocron, pachet de date, de control etc.); sy – codul de sincronizare (specific aplicaţiei)
destination id – 16 biţi: 6 biţi pentru node ID (63 de noduri) şi 10 biţi pentru bus ID (1024
magistrale); tcode – tipul tranzacţiei; pri – nivel prioritate (câmp neutilizat); destination offset –
locaţia de adresă din interiorul nodului ţintă (target)

- la desen: driverul software este cel unificator, pe partea dreapta avem layerele de protocol
serial/fizic de legaturi de date si tranzactional iar coloana din stg e layerul de gestiune de
magistrala (cel mai imp) si el e alc din 4 blocuri: controller de noduri – face legatura cu nivelul
legaturii de date si nivelul fizic + gestioneaza disp slave, cycle master – face trimiterea pachetelor
de initializare repetitive la un anumit interval fix de timp, IRM (Isochronous Resource Manager) –
gestioneaza largimea de banda a magistralei de date si aloca numerele de canal in modul de
transmisie multinod, Bus Manager (BM) –
gestionează distribuţia de putere(energie) pe cabluri şi afişează harta topologica şi diagrama de
viteza (la fiecare nivel tranzactional)

➢ I2C (Inter-Integrated Circuits)

- specifica aplicatilor industriale, de aparate de masura si control si gestionare a sist bazate pe uc +


dezvoltata de Philips;
- bidirectionala, simpla, cu viteze de pâna la 5 Mb/s (ultra-fast mode, ver.4, 2012);
- fol 2 fire de date: SDA (Serial DAta), SCL (Serial CLock);
- fiecare dispozitiv (transmiţător şi/sau receptor) este identificat printr-o adresa unica (ID);
- transmitatoarele şi receptoarele pot funcţiona în modul master-slave, se pot folosi scheme de
arbitraj din cele disc mai devreme.

Ex de schema cu arbitraj:

➢ Fibre Channel

- e un standard care face tranzitia intre magistralele cu fire pe baza de cupru si cele pe suport optic;
- Tehnologie de interconectare cu fiabilitate ridicata, pentru comunicatii concurente de mare
viteza între staţii de lucru, servere, sisteme de stocare a datelor etc., aflate la distante mari;
- Standard folosit iniţial la supercomputere, extins apoi la sisteme SAN (Storage Area Network);
- Foloseşte cabluri pe fibra optica, dar cu interfaţă electrică, iar porturile nu sunt neapărat HW;
- Protocol similar TCP/IP, transportând, în principal, (accepta) comenzi SCSI;
- Protocolul nu foloseşte modelul OSI-ISO, dar are tot cinci niveluri:
nivelul fizic (FC0): cabluri, conectori;
nivelul legăturii de date (FC1): codarea semnalelor pe linie;
nivelul de reţea (FC2): nucleul FC, cu protocoalele de bază şi conexiunile port-la port;
nivelul serviciilor comune (FC3): algoritmi RAID şi de criptare, conexiuni multiport;
nivelul de mapare al protocoalelor (FC4): încapsulează diversele protocoale folosite.
- Gama de protocoale încapsulate cuprinde: SCSI, TCP-IP, HIPPI-FP (High Performance
Peripheral Interface – Framing Protocol), FICON (Fibre Connection) etc.;
- Exista 2 tipuri de porturi: porturi ale nodurilor, porturi generale (catch-all);
- Exista 2 tipuri de switchuri: switch-uri modulare, cu un număr ridicat de porturi, bazate pe
sloturi, fără erori SI switch-uri de dimensiuni reduse, în configuraţii fixe (semi-modulare), fără
redundanţă;
- Gama de viteze: 1, 2, 4, 8, 16, 32, 128 (2016), 256 Gb/s (2019), pe distanţe de 0,5m – 50km;
- e vorba de un standard care integreaza un standard de mag cu unul de retea, deci limitele sunt
flexibile

-la desen: Topologii Fibre Channel (N_Port – port al unui nod, F_Port – port al reţelei fabric):
switched fabric (FC-SW): dispozitive/bucle conectate la switch-ul fabric, similar modelului
Ethernet;
punct la punct (point-to-point, FC-P2P): două dispozitive conectate direct (limitat, dar simplu);
buclă arbitrată (arbitrated loop, FC-AL): dispozitive dispuse circular, similar reţelei token-ring;
- in stanga e configuratia stea in dreapta e configuratia token ring (structura in bucla);
- fiecare legatura din stg e bidirectionala pe 2 fire unul e transm unul e recept.

➢ InfiniBand

- e concurenta cu Fibre Channel si Ethernet;


- Standard de mare performanţă în comunicaţiile pe reţele de calculatoare, caracterizat prin
viteză foarte ridicată şi latenţă foarte redusă;
- Magistrală serială, punct la punct, folosită la interconectări între şi în interiorul calculatoarelor;
- Folosită ca o interconexiune fie directă, fie prin switch, între: servere şi sisteme de stocare,
diferite sisteme de stocare;
- la nivelul anului 2018 era regasita in f multe configuratii din TOP 500 precum supercomputers,
clusters & data centers;
- Trece de la arhitectura tradiţională partajată a magistralei la arhitectura (bazata pe sw) cu
comutare de reţea, de tip fabric (switched fabric architecture). Cu alte cuvinte daca magistrala are
largimea de banda B (Mb/s) la standardul traditional de mag comuna partajata ea se imparte la
atatea disp cate sunt conectate pe magistrala iar la comunicatia de tip sw fabric B ramane aceeasi pt
toate disp atasate fara sa fie nev de impartire;
- Are 2 tipuri de specificatii la nivelul calitati serviciilor QoS (Quality of Service): la fiecare
procesor are un Host Channel Adapter (HCA) si la fiecare periferic un Target Channel Adapter
(TCA);
- Transmite date în pachete de până la 4 KB, asamblate într-un mesaj, care poate fi:
un acces DMA citit/scris de la/la un nod remote (RDMA)
un canal de tip emiţător sau receptor
o operaţie de tip tranzacţie (reversibilă)
o transmisie de tip multicast
o operaţie atomică (indivizibilă).
- Conexiunea fizică poate fi pe fir de cupru activ/pasiv (< 30 m) sau pe cablu optic (< 10 km).

- la desen: Exemplu simplu de arhitectură InfiniBand fabric: fiecare nod reprezintă fie un dispozitiv
gazdă
(server), fie un dispozitiv I/O (subsistem RAID), iar reţeaua InfiniBand Fabric poate consta dintrun
singur comutator (caz minimal) sau dintr-un set de comutatoare interconectate şi router-e.
Avantajele conexiunii seriale punct la punct:
- necesită doar patru legături (în comparaţie cu PCI, de exemplu);
- oferă capacitatea maximă a legăturii între două puncte finale, fiind dedicată acestora;
- se elimină concurenţa la magistrală şi întârzierea din suprasarcini în arhitectura partajată (+ partea
de arbitraj);
- oferă lărgime de bandă net superioară faţă de conexiunile cu lungimi mult mai mari;
Lărgimea de bandă optimizată (2017): 50 Gb/s (1x), 200 Gb/s (4x), 400 Gb/s (8x) și 600
Gb/s
(12x). În viitor, se anunță pentru 12x valori de 1200 Gb/s (după 2020) și 3000 Gb/s (după 2023).

➢ PCI Express (PCIe)


- a aparut in mom in care PCI ul nu mai facea fata la cerintele de viteza de transfer;
- nu e doar o magistrala, e si un standard de interconectare si retea;

- la desen: pe un cip de controller se leaga un sw prin care se pot conecta prin linii seriale paralele
imperechate orice tip de disp... .
-ce este caract ascetui switch, daca magistala comuna (cea din partea de sus cea lata pe gri) este o
magistrala partajata care isi imparte largimea de banda in functie de cate dispozitive sunt conectate.

Arhitectura PCIExpress se bazeaza pe switch, in acest caz fiecare disp PCI primeste intreaga
largime de banda si asta constituie diferenta majora intre PCI vechi si asta: nu se mai imaprte
largimea de banda cum era inainte.

Diferenţele majore ale arhitecturii PCIe faţă de arhitectura PCI:


- switch centralizat inlocuieste magistrală multimaster
- conexiuni seriale punct la punct inlocuiesc magistrală paralelă de lăţime mare, cu defazaje (skew)
- transfer de pachete între dispozitive vs. transfer de (blocuri de) cuvinte prin comenzi M-S
- grad siguranţă oferit de aplicarea asupra pachetelor a codurilor corectoare de erori
- conexiunile cip-switch sunt mai lungi (peste 50 cm), oferind posibilitatea partiţionării
- sistemul este extensibil, un dispozitiv putând deveni la rândul său un switch
- posibilitatea de hot plugging/swapping
- conectorii seriali sunt mai mici => posibilitatea de miniaturizare (sisteme portabile/mobile).

- duce mai mult spre o arhitectura de retea??


Structura stratificata a nivelurilor din arh PCIe: (respecta standardul OSI)

DPDV al performantelor: (GT/s – gigatransferuri/s)


Acest grafic exprima diferentele largimilor de banda in cazul care comunicatia se poate face pe mai
multe canale.

Pt a ne da seama de dimensiune ne uitam in tabel unde avem rata de transfer si lungimile de banda
pentru versiunile care au aparut din 2003.
Arhitectura simpla cu 3 porturi PCI Express, aceste porturi sunt de 3 tipuri, un disp PCI legat direct
de portul 2, un controler PCI care poate lega mai multe device-uri PCIle si o legatura pe protul 1
printr-un switch care poate conecta mai miulte disp PCIle.

- la desen: retinem doar unde apare PCIe ( de ex sus stanga la placa grafica unde pot fi 2 cazuri ... )

-standard de comunicatie care poate comunica atat la nivel grafiuc cu procesorul cat si la nivel de
northbridge cat si la nivel de southbridge.

STUDII DE CAZ:
O arhitectura pt calc PC de tip desktop in care se obs ca PCIle este fie inlocuitor de AGB pt
comunicatia intre northbridge si placa grafica fie o varianta de comunicatie intre cele doua chip-
seturi northbridge si southbridge.Pot exista mai multe porturi externe pentru conexiuni cu placa
Ethernet sau cu alte disp PCIle.
Arhitectura de sist portabil (laptop sau notebook) in care se obs ca PCIle apare din nou ca legatura
intre northbridge si placa grafica asigura comunicatia intre cele doua chip-seturi northbridge si
southbridge apare in multiple ipostaze pe southbridge ata prin conectarea disp integrate pe placa de
baza cat si ca variante pentru USB.Avem o placa dedicata Express Card prin care se asigura
comunicatia cu southbridge. Prezenta lui la toate niv este o dublare pe USB

PCIle apare la nivelul northbridge prin legatura cu magistrala Fabric chanel.


- frecventa de semnalizare pe OY + important despartirea de mag paralele si de cupru.
CAP5 NIVELUL MICROPROGRAMAT
In figura este reluata schema din primul curs a structurii stratificate pe niveluri,
reprez doar nivelurile inferioare. Indiferent de limbajul in care sunt scrise
progamele, acestea sunt compilate, asamblate, si de la nivelurile superioare ajunge
la nivelul masinii traditionale, cea pe care am studiat-o la arhitectura
micropocesoarelor. Avem comenzi care sunt vazute ca niste microoperatii.
Nivelul microprogramat e optional, adica interpretarea instructiunilor de la nivelul
masinii traditionale poate fi facut direct de nivelul fizic sau direct prin nivelul
microprogramat. Cele mai multe masini moderne prevad nivelul microprogramat
tocmai datorita faptului ca acest nivel ofera aceasta flexibilitate in interpretarea
instructiunilor, posibilitatea de a adauga instructiuni noi si mai ales modul in care
aceste instructiuni de la acest nivel sunt referite direct de catre hardware. Codul e
scris direct avand in vedere structurile fizice, blocurile la care fac apel si in modul
acesta exista o combinare hardware-software, astfel incat soft-istul stie exact
pentru ce structura fizica programeaza, iar hard-istul stie cum sa interpreteze instr
care se refera la blocurile din schema multiprogram.
Microinstructiunile care lucreaza la acest nivel preiau instructiunile venite de la
nivelurile superioare, le prelucreaza si le trimite pentru executie procesorului. Asa
ca fiecare instructiune va fi o succesiune de microcomenzi. Instructiunile de la
nivel superior se transforma intr-un nou set de comenzi numite microinstructiuni
care adreseaza direct structura hard pe care o avem la dispozitie.

Calea de date a unei maşini microprogramate cu format orizontal (umA)


In ceea ce consta formele in care se prezinta nivelul multiprogramat, am ales sa nu
facem o prez generala ci o prez pe schema particulara. La nivelul microprogramat
exista 3 formate: orizontal, mixt si vertical. In aceasta schema reprezentam
formatul orizontal. Numele vine de la formatul microinstructiunilor(structura, cate
campuri, cati biti si ce functii au). La nivelul schemei generale distingem doua
sectiuni: cale de date (singura reprez in schema) si schema de comanda (o tratam
mai tarziu).
Calea de date: circuitul pe care circula microinstructiunile, blocurile pe care le
adreseaza, pe unde parcurg datele acest traseu si care e rezultatul. Aceasta schema
e schema nucleului unui microprocesor.
Central avem unitatea ALU cu 2 intrari si o iesire. In intrarile ALU se iau valori de
la registrele interne si am presupus 16 registre (R1-R16). Se definesc 2 magistrale
de intrare in ALU, se iau operanzii din registrele interne si se aduc la intrarea ALU
(Mag A, Mag B). Se mai defineste o magistrala de iesire din ALU care duce
rezultatele calculelor in registrele interne (Mag C). La iesirea ALU de obicei se
pune un registru de deplasare (Shifter) care poate sa realizeze deplasare stanga sau
dreapta cu o pozitie sau sa lase nemodificat.
In stanga avem RAD (registru de adrese) si RDA (registru de date), fac legatura cu
mag de adrese si cu mag de date.
La intrarea stanga ALU avem un AMUX, acesta este un multiplexor al mag A care
alege daca operandul din stanga vine de pe magistrala A, adica din registrele
interne sau vine din RDA, adica din mag de date.
Avem doua registre tampon RTA si RTB au rol de a mentine valida valoarea
pentru tactul urmator, datorita faptului ca toate aceste reg sunt implementate cu
circuite latch.
Semnale care apar:
ALU face un nr de operatii, in cazul nostru face 4 = 22 operatii. Asa ca F0 si F1
selecteaza operatia din cele 4 posibile pe care o face ALU.
N si Z sunt semnale de stare. Sunt semnale de iesire. Sunt singurele.
N se activeaza daca rezultatul ALU e negativ. Z se activeaza daca rezulatul ALU e
0 ?!?!
A treia iesire nu mai e necesara pentru ca daca rezultatul e pozitiv inseamna ca N si
Z sunt inactive (0 logic). N si Z nu pot fi ambele 1 pt ca nu poate fi si negativ si 0.
Reg tampon trebuie sa fie activate, activarea se face prin semnalele de comanda L0
si L1.
In RAD si RDA apar:
M0 activarea reg adrese
M1 activarea reg date
M2(RD) si M3(WR) activarea sensului de circulatie.
Microinstructiunile care circula prin schema de mai sus ar trebui sa realizeze
urmatoarele operatii (ce comenzi dam astfel incat sa functioneze masina):
16 semnale pentru transferul de date din registrele R1 … R16 pe magistrala A;
16 semnale pentru transferul de date din registrele R1 … R16 pe magistrala B;
din ele se extrag date deci e vorba de citiri.

16 semnale pentru transferul de date de pe magistrala C într-unul din registrele R1


… R16;
aici e vorba de scrieri din mag C in registrele 1-16

două semnale de comandă a încărcării registrelor RTA şi RTB (L0 şi L1);


două semnale care selectează operaţiile executate de ALU (F0 şi F1);

două semnale de comandă a registrului shift (S0 şi S1);


reg Shift ar putea face max 4 operatii (ca sunt 2 semnale)
patru semnale de comandă a registrelor RDA şi RAD (M0, M1, M2, M3);
două semnale care indică operaţiile de scriere/citire în/din memoria principală (RD,
WR);
un semnal de comandă pentru AMU/AMUX (A0);
care spune daca se ia valoarea din RDA sau de pe RTA
In total avem 61 de semnale. Cu acestea stabilim structura microinstructiunii:
formatul ei este de 61 de biti, este foarte mare. Ne propunem sa reducem formatul
astfel incat sa ajungem la o micromasina modificata, cea in format mixt, si care
presupune codarea unora dintre instructiuni.
Cele mai multe semnale 3*16=48 sunt pentru relatia cu registrele interne (2 seturi
pentru citire, 1 set pentru s criere). Aici am putea reduce.

In urma reducerii obtinem urmatorul camp.


Pentru magistralele ABC avem doar 4 biti, in loc de 16. Cum se ajunge de la 16b la
4b pentru fiecare magistrala? 16 = 24
Trebuie sa convertim aceasta selectie zecimala intr-una binara cu ajutorul
decodorului. Folosim 3 astfel de decodoare ca sa facem trecerea de la 16 la 4 astfel
salvam 12b.
AMUX- cere un singur bit. 0 – intrare din RTA; 1 – intrare din RDA.
COND* - il explicam dupa ce facem partea de control a schemei, partea care realiz
generarea semnalelor de control.
ALU are 2b 0 – A+B; 1 – AꓵB; 2 – A; 3 – nonA.
DEPL cei 2b ai registrului SHIFT S0 si S1
0 – fără deplasare;
1 – deplasare la dreapta;
2 – deplasare la stânga;
3 – neutilizat.
RDA(inlocuieste M0) indică încărcarea RDA cu cuvântul de pe magistrala C;
RAD(inlocuieste M1) indică încărcarea RAD cu adresa cuvântului din RTB;
RD(inlocuieste M3) indică citirea din memoria principală;
WR(inlocuieste M2) indică scrierea în memoria principală;
VALC inseamna validarea intrarii in registre de pe mag C 0 – interdicţie; 1 –
validare.
De ce e necesar VALC? Validare inseamna scrierea lor cu valoarea de pe
magistrala C. Din regA si regB se iau valori pentru ALU pentru operanzi si tot
acolo se scriu rezultatele. Este necesara pentru ca trebuie sa separam foarte clar
citirea si scrierea. Poate scrierea se face intr-un registru din care mai trebuie sa
luam o valoare pentru ALU, ceea ce nu dorim, asa ca trebuie sa fim foarte atenti sa
nu scriem o valoare care trebuie citita.

*ADDR (8 biţi): câmp de adresă a microinstrucţiunii (există 256 de instrucţiuni).


Fazele semnalului de ceas
La executia unei instructiuni trebuie sa avem pe langa calea de date, si o schema de
comanda care va fi coordonata de un ceas cu 4 faze decalate cu π/2. Ele
functioneaza in ordine datorita faptului ca fiecare microinstructiune are 4 faze
corespondente a 4 categorii de actiuni pe care le face masina.
Schema bloc a unitatii de comanda
Cele 4 subcicluri de executie:
1. încărcarea microinstrucţiunii în registrul microinstrucţiune (RMI);
o data microinstructiunea incarcata trebuie sa aducem operanzii din reg interne
2. transferul conţinutului registrelor selecţionate pe magistralele A/B şi încărcarea
datelor în RTA/RTB;
executia propriuzisa de catre ALU3.
3.realizarea operaţiilor ALU şi ale registrului shift (RAD este încărcat de la ieşirea
RTB);
depunerea lui acolo unde trebuie
4. încărcarea datelor de la ieşirea registrului shift în registrul selecţionat şi/sau în
registrul RDA.
Calea de date este schema a doua de cand incepe capitolul 5.
Biti de control sunt bitii de intrare in blocuri, bitii de comanda.
Bitii de stare sunt cei de iesire.
Secventiatorul de microprogram este cel care stabileste secventa de
microinstructiune, cel care va da adresa de microprogram a instructiunii urmatoare.
Asta poate fi in doua feluri: ori e microinstructiunea urmatoare daca se pastreaza
logica din program si se incrementeaza adresa sau daca e instr de salt atunci trebuie
sa fie instructiunea care e indicata in acel salt.
Adresa de microprogram trebuie introdusa in memoria de microprogram care
include toate microinstructiuniile si care va da microinstructiunea urmatoare pe
calea de date.
Control de adresa in cazul in care secventiatorul nu face incrementare va trebui sa
caute o instructiune la care sa sara daca i se solicita.

Memoria de microprogram sau comanda.


Are 32b si 256 instructiuni.
Fiecare microinstrucţiune execută două funcţii:
controlează funcţionarea căii de date: ce se intampla pe circuitul pe care circula
datele
generează adresa pentru microinstrucţiunea următoare: adresa urmatoarei instr care
poate sa fie in 2 variante.
Secvenţiatorul de microprogram (microsecventiatorul) primeşte de pe calea de date
starea curentă a acesteia (biţii de stare N şi Z) şi adresează următoarea
microinstrucţiune, în funcţie de starea căii de date şi de biţii de control ai adresei
următoare, daţi de câmpurile COND şi ADDR.

Campul de conditionare are 4 posibilitati:


COND (2 biţi):
0 – se execută următoarea microinstrucţiune;
1 – salt la adresa specificată de ADDR, dacă N = 1;
2 – salt la adresa specificată de ADDR, dacă Z = 1;
3 – salt necondiţionat la ADDR.
MCO = microcontor (registru de adresare a memoriei de microprogram); numara
instructiunile
INCR = circuit de incrementare (INCR = MCO + 1); incrementeaza microcontorul
MMUX = multiplexor, lucrează în concordanţă cu decizia provenită de la
microsecvenţiator alegând pentru microinstrucţiunea următoare;
adresa MCO + 1;
adresa specificată în ADDR.
Schema bloc a micromaşinii cu format mixt (umA modificată)
Avem aceeasi schema prezentata anterior dar acum si cu calea de date. Avem si
unitatea de comanda care realizeaza controlul si coordonarea schemei.
In stanga jos avem schema cum era inainte.
Apar decodoarele, preiau pe 4 biti combinatia si selecteaza la iesire unu din cele 16
reg A, B (citire) C (scriere).
Apare ceasul in 4 faze, fiecare faza cu o culoare diferita fiecare corespunzand
urmatoarelor 4 faze:
incarcarea microinstructiunii
transferul operanzilor
realiz operatiei
depunerea rezultatului
Iesirile N si Z din ALU merg la microsecventiator, cel care tine cont de calea de
date si de starea ALU.
In dreapta jos e unitatea de comanda: contorul de microprogram, blocul de
incrementare si multiplexorul de multiprogram.
Memoria de microprogram contine toate microinstructiunile, sunt 256 in total au
32b. RMI = registru microinstructiune.
Campul ADDR e luat in MMUX in caz ca se face salt la acea adresa
A, B, C se duc in decodoare
VALC se duce la decodor C sa ii valideze scrierea sau nu
RD si RW se duc la RDA sa ii spuna scriere sau citire
RDA si RAD se duc la blocurile respective sa le valideze
DEPL se duce la shift sa il comande
ALU se duce la ALU sa ii spuna ce operatie sa selecteze
COND se duce la secventiator sa il conditioneze conform celor 4 variante
AMUX se duce la blocul AMUX sa spuna daca se preiau date de la RDA sau RTA
Am pornit de la 61b si am adus masina la 31b, am facut o reprez mai compacta cu
mai putine campuri dar mai mult codata.
Am ajuns de la formatul orizontal la formatul MIXT.
Discutăm mai în detaliu schema

Schema bloc a micromaşinii cu format mixt (mA modificată)

Dacă vrem să scriem în registrele interne, în cele 16 registre generale, preluăm


datele din magistrala C și le scriem.
Să facem această operație trebuie îndeplinite 3 condiții
1. VALC = 1-> Validarea încărcării registrelor pe magistrala C = 1 ( activ)
2.subciclul curent de ceas este 4 (Φ4 activ)-> Sa se intample in subciclul nr4 ( cel
care presupune depunerea rezultatelor in registrele interne)
3.registrul este indicat de câmpul C al microinstrucţiunii-> Să indicăm registrul
specific din cele 16 in campul C al microinstructiunii
Microsecventiatorul

Microsecventiatorul (care primeste starea caii de date si adreseaza urmatoarea


microinstructiune in functie de stare si de bitii de control COND şi ADDR are
ecuatia logica
Ecuaţia logică a microsecvenţiatorului:
O(s) = DN + SZ + SD
Ecuația logică este compusă tocmai din valorile N si Z dacă trebuie să țină cont de
stare.
O(μs) = ieşirea microsecvenţiatorului;
D = bitul dreapta al câmpului COND;
S = bitul stânga al câmpului COND;
S și D sunt cei 2 biti stanga/dreapta din campul COND
N, Z = semnale de stare generate de ALU (negativ şi zero). (bitii negativi si zero de
stare ai ALU)

In acestă ecuație logică, ca în oricare ecuație binară, pentru că S, D, N, Z pot fi 0 sau


1 rezultatul poate fi 0 sau 1
Dacă microsecvențiatorul, in urma ecuației logice va da rezultatul la iesire, inseamna
ca este una din situatiile de salt ( conditionat sau neconditionat) la adresa specificata
in campul ADDR
1 – salt la adresa specificată de ADDR, dacă N = 1;
2 – salt la adresa specificată de ADDR, dacă Z = 1;
3 – salt necondiţionat la ADDR
Dacă va fi 0, următoarea microinstrucțiune se obține prin incrementare

Exemplu: maşina microprogramată Tanenbaum Mic-1


Este o implemetare practica a unei masini microprogramate in forma mixta.
MAR – Memory Address Register (registrul de adrese sau RAD)
MDR – Memory Data Register (registrul de date sau RDA)
PC – Program Counter (contorul de program)
MBR – Memory Byte Register (registru de un octet pentru şirul de
microinstrucţiuni)
SP – Stack Pointer (indică adresa ultimului program apelat în stivă)
LV – Local Variable (variabila locală)
CPP – Constant Pool Pointer (indică adresa primului cuvânt din tabelul de
constante)
TOS – Top Of Stack (cuvântul de la adresa cea mai mare din stivă)
OPC – Operand Program Counter (contorul de program pentru operanzi)
ALU – Arithmetic-Logic Unit (unitatea aritmetică şi logică)
H – Registrul H (intrarea din stânga a ALU)
Shifter – Registrul shift (registru de deplasare)
N, Z – biţii de stare N şi Z ai ALU (rezultatul ALU < 0 → N = 1; rezultatul ALU =
0 → Z = 1)
MPC – Micro Program Counter (contorul de microprogram)
Maşina microprogramată Tanenbaum Mic-1
Memoria pentru microprogramare are alta dimensiune: 512x36 biti
Magistralele, registreleinterne, ALU, Shifterele, Decodoarele de la 4 la 16 si
semnalele de comanda sunt similare cu a micromasinii anterioare.
Registrul microinstructiunii MIR Micro Instruction Register are o alta structura de
36 de biti, alte campuri.
Schema asta am facut-o la LAB6

Observatii despre masina Tanenbaum Mic-1


Se numeste Mic-1 pentru ca el a proiectat 4 astfel de micromasini care sunt
derivatele unele din altele.
Micromasinile 2 3 si 4 folosesc in plus proprietati de pipeline, de paralelism.
Modelul de execuţie al microarhitecturii Mic-1 se numeşte ciclu extrage-
decodifică-execută. datorita ordinii in care se executa pasii in ciclul de
microinstructiuni
Micromaşina Mic-1 este comandată prin de microinstrucţiuni, fiecare dintre
acestea controlând calea de date pe parcursul unui ciclu. Ansamblul
microinstrucţiunilor formează microprogramul.
Schema bloc conţine două părţi:
• calea de date (partea stânga);
• secţiunea de control (dreapta), cel mai important bloc fiind memoria de
microprogram sau memoria de control.
Pentru controlul căii de date a maşinii Mic-1 este nevoie de 29 de semnale:
• 9 semnale pentru controlul scrierii datelor de pe magistrala C în registre;
• 9 semnale pentru scrierea valorilor din registre pe magistrala B, folosite apoi ca
intrare în blocul ALU;
Vedem ca in schemă elimină magistrala A și din Blocul H se intră direct in ALU

pentru o economie suplimentară de semnale

• 8 semnale pentru controlul funcţiilor ALU şi ale registrului shift (Shifter);


• 2 semnale pentru a indica citirea/scrierea din/în memorie prin registrele
MAR/MDR; (echivalente a registrelor RAD si RDA)
• 1 semnal pentru a indica extragerea din memorie prin PC/MDR.
Există doar 9 registre care pot fi scrise pe magistrala B (registrul MBR a fost
numărat de două ori, pentru cele două valori pe carele poate lua: unsigned şi
signed). De aceea, informaţia pentru magistrala B se poate coda pe 4 biţi, folosind
un decodor binar-zecimal pentru generarea a 16 semnale (dintre care este nevoie
doar de 9).
Registrul de microinstructiune in formatul masinii MIC-1

Formatul microinstrucţiunii pentru maşina Mic-1 (câmpuri şi număr de biţi alocat)


Calea de date se poate controla (pentru un ciclu de ceas cu 4 faze) cu 9 + 4 + 8 + 3
= 24 de semnale (24 de biţi). Mai apar 9 + 3 = 12 semnale adăugate la celelalte
deja existente
Formatul unei microinstrucţiuni pentru Mic-1 cuprinde următoarele câmpuri:
• Addr – conţine adresa următoarei microinstrucţiuni posibil de executat; ( este
campul de adresa
• JAM – determină modul de selecţie al următoarei microinstrucţiuni (echivalent
câmpului COND de la micromaşina A modificată, conform schemei mA
modificate); ( este campul de selectie in functie de solicitarea de operatie de salt
[JUMP] ) – Echivalentrul COMD prezentat la micromasina A modificata
• ALU – funcţiile blocului ALU şi ale registrului Shift;
• C – selectează în care registre va fi scrisă valoarea de pe magistrala C;
• Mem – funcţii referitoare la lucrul cu memoria;
• B – selectează intrarea pe magistrala B
ALU, C, Mem, B se pastreaza la fel ca la masina anterioara
Cele 4 subcicluri de execuţie ( sunt la fel ca la micromasina noastra adica sunt
aceleasi faze
de incarcare a registrului microinstructiune in functie de adresa solicitata
pentru urmatoarea microinstructiune,
propagarea semnalelor si preluarea operanzilor,
executia de ALU si Shifter a operatiilor lor
depunerea lor in magistrala C sau in registre)
1. MIR se încarcă cu valoarea de la adresa stocată în MPC;
2. Semnalele din MIR se propagă, iar magistrala B se încarcă cu valoarea din
registrul selectat;
3. Blocurile ALU şi Shifter operează şi produc un rezultat stabil;
4. Datele de la ieşirea blocului Shifter se propagă prin magistrala C în registre; se
încarcă biţii N şi Z şi registrul MPC

Diagrama de timp a ciclurilor de ceas în 4 faze


Aici vedem pe fiecare portiune de timp din diagrama marcarea intervalelor care
corespund fiecarui ciclu in parte

Gestiunea memoriei in masina microprogramata


Tanenbaum Mic-1
În orice moment, sunt definite următoarele zone de memorie:
1. Depozitul de constante (Constant Pool) – Nu poate fi scris de program și
conține constante, șiruri și indicatori către alte zone de memorie care pot fi referite.
Există un registru implicit, CPP (Constant Pool Pointer – CPP), care conține adresa
primului cuvânt din depozit.
2. Cadrul local de variabile (Local Variable Table – LV) – La fiecare apel de
metodă, este alocată o zonă pentru stocarea variabilelor în timpul apelului. La
începutul cadrului se găsesc parametrii/argumentele cu care a fost apelată metoda.
Nu conține stiva de operanzi, care este separată.
3. Stiva de operanzi (Operand Stack – OS) – Aflată imediat deasupra cadrului
local de variabile. Un registru implicit, SP (Stack Pointer), conține adresa primului
cuvânt din stivă (Top Of Stack).
4. Aria metodei (Method Area), numită și „zona textului”. Un registru implicit,
PC (Program Counter), conține adresa următoarei microinstrucții. Registrul PC
este de fapt un indicator. Spre deosebire de alte zone, este tratată ca un vector de
octeți, nu de cuvinte (4 octeți sau 32 de biți).
Asta e o metoda de bucatarie interna de gestionare a memoriei la MIC-1
Observație. Registrele CPP, LV și SP sunt orientate către cuvinte, nu cu octeți

Reprezentarea diferitelor părţi (arii sau zone) de memorie


Micromaşina în format vertical
Denumirea de format vertical/orizontal este echivalenta cu dualismul RISC/CISC
Adica noi plecam de la o instructiune lunga si incercam sa o facem scurta cu cat
mai putine campuri, dar campurile sa fie puternic codate
Vom vedea ca de la micromasina noastra, odata ce am trecut de la 61 la 32 putem
sa trecem de la 31 la 12 biti.
Pentru asta va trebui sa detaliem codul operatiei pentru fiecare microinstructiune in
parte
Vedem aici
16 microinstructiuni care sunt notate in binar prin codul binar direct de la 0000 la
1111 deci 16 combinatii,
vedem simbolul fiecarei microinstructiune in functie de operatia pe care o face,
vedem descrierea a ceea ce face opratia respectiva
si functia logica a operatiei microinstructiunii in care prin R1 si R2 s-au notat niste
campuri pe care le vedem in schema urmatoare, iar campul COP ( codul operatiei)
vom vedea ca este generalizarea blocului ALU de la schemele anterioare
Codul operaţiei pentru microinstrucţiunile în format vertical (COP = generalizarea
ALU)

Observaţie: R = l6R1 + R2
Folosind acest tabel cu aceste 16 operatii descrise in binar pe 4 biti si cu ecuatiile
logice corespunzatoare vom ajunge la schema urmatoare
Schema bloc a micromaşinii cu format vertical (mB)
Schema asta e mult mai concentrata adica
Cele 16 registre generale le regasim, amux-ul, ALU
In partea din dreapta vedem ca schema de comanda din dreapta mijloc se pastreaza
adica microcontorul, blocul de incrementare si multiplexorul.
Memoria de comanda care da registrul micronstructiune acum e mult mai mica
pentru ca microinstructiunea a ajuns la 12 biti
Noul registru microinstructiune are acum 3 campuri
COP – care comanda inainte ALU (Codul operatiei)
R1
R2
In rest, este la fel
Secventiatorul de micromasina,
ceasul in 4 faze
si decodorul COP care stabileste ce operatie se executa in functie de codul
acesteia.
• Blocul ŞI: 16 porţi ŞI care permit câmpului R1, după traversarea decodorului
R1, să comande golirea unui registru pe magistrala A şi încărcarea sa de pe
magistrala C. Aceste operaţii nu pot fi simultane  necesitatea porţilor ŞI, care
determină în timpul subciclului 4 încărcarea unui registru când această operaţie
este validată de decodorul COP.
Blocul SI apare inainte de intrarea decodorului R1 in registrele generale
Blocul SI este necesar tocmai ca un resgitru intern sa fie golit inainte de a fi scris
adica tot la fel ca la campul COP sa avem grija sa nu scriem ceva peste o valoare
care urmeaza a fi citita

• Blocul NZ: registru de doi biţi – înregistrează semnalele N şi Z la ieşirea ALU,


când această înregistrare este ordonată de decodor. Pe mB este realizată doar o
singură operaţie în timpul unei instrucţiuni  testarea şi utilizarea biţilor N şi Z
se face în instrucţiunea următoare.
Blocul NZ este cel care colecteaza bitii de stare N si Z de la ALU
Blocul NZ colecteaza starea ALU prin bitii de Negativ si Zero

• Decodorul COP: elementul central al maşinii – analizează codul operaţiei şi


precizează acţiunile întreprinse. Distribuie 13 comenzi distincte către blocul ŞI,
secvenţiator, registrul NZ, AMUX, ALU, circuitul shift, RAD şi RDA. Pentru
fiecare din cele 16 coduri de operaţii, se determină care dintre cele 13 comenzi
sunt active (1) sau în repaus (0).
Este cel care in funtie de ceea ce primeste din campul COP stabileste urmatoarea
actiune din faza 4
Decodorul COP actualizeaza noul cod al operatiei in functie de microinstructiunea
care urmeaza si spune ce trebuie facut

El, in principiu primeste codul operatiei pe 4 biti ( 24=16 microinstructiuni) si le


trimite mai departe sub formă de mocrocomenzi tuturor blocurilor care fac parte
din schema de comandă a micromașinii.
Deci ar fi trebuit să vedem un decodor care primește 16 coduri de operații la intrare
( adică 24 fiind alimentat de la câmpul COP pe 4 biți și scoate la ieșire 13
microcomenzi
Corespondenţa instrucţiuni-comenzi la maşina cu format vertical (mB
Tabelul acesta ne arata corespondenta intre microinstructiuni si microcomenzi
Daca ne uitam pe verticala avem cele 16 microinstructiuni
Pe orizontala avem cele 13 microcomenzi
Ele toate sunt realizate conform tabelului de mai devreme
Un plus in acest tabel inseamă că pentru o microcomandă vor participa acele
microinstrucțiuni.
Dacă ne uităm la una din microcomenzi vedem la ALU participă 15
microinstrucțiuni...
Putem citi tabelul invers
Dacă ne uităm pe orizontală, vedem pentru fiecare microinstrucțiune în care
comandă e implicată.
În acest tabel avem 13 funcții logice care corespund celor 13 microcomenzi
din capul de tabel de pe orizontală, care sunt funcții de 4 biți ( adică cei 4 biți ai
microinstrucțiunii)
Dacă ne gândim ca la .. si in acest tabel punem 0 in toate campurile in care
vedem casute goale si punem 1 peste tot unde vedem plus, avem tabelul a 13
functii logice de cate 4 variabile.
Cele 13 ecuaţii logice ale comenzilor, ca funcţii de 4 variabile (A, B, C,
D)
De fapt, ele sunt cei 4 biti din campul COP

Deci 13 funcții, fiecare de cate 4 variabile.


Dupa cum am mai spus, conceptul de micromasina orizontala, mixta si verticala
este ca la RISC/CISC, iar aceasta masina

este cea mai compacta


are cele mai putine campuri
s-a ajuns la doar 3 campuri față de la micromașina 1 și la micromașina
A modificată
Deci cu prețul reprezentării compacte putem ajunge la o micromașină cu număr
mic de campuri în instrucțiune, cu număr total de biți redus ( am văzut 61 -> 32 ->
12 ) dar in faza codării puternice a fiecarui camp in parte
Există foarte multe moduri de implementare ale mașinii microprogramate care se
înscriu intr-unul din cele 3 tipuri de formate
Orizontal
Mixt
Vertical
Cel mai compact este modul vertical tocmai datorita faptului ca in schema cele
256 de instructiuni are doar 12 biti deci memoria de comanda se reduce de la 8k(
initial la micromasina modificata) la 256*12.
Deci am scăzut de la 16*12 proporțioanl cu 4*256. Se reduce si dimensiunea
memoriei.
Este o schema cu memorie mica si ieftina, mult simplificata ca nr de blocuri si cu
aceleasi functii

Nanoprogramarea
Nanoprogramarea este o derivata de microprogramare in momentul in care ,
pornind de la memoria de microprogram si de la instructiunile pe care le contine
facem o analiza statistica a instructiunii.
Adica vedem intr-un numar mare de microprograme de cate ori este folosita fiecare
microinstructiune in parte
Vom constata ca nu toate microinstructiunile sunt folosite la fel.
Unele sunt folosite mult mai frecvent si altele mai putin
Ideea a fost
De ce sa nu izlam intr-o noua memorie pe care o numim “Memorie de
nanoProgram” acele microinstructiuni folosite mai des
a. Microprogramare convenţionala
Variantele pentru cele 2 reprezentari de memorie de microprogram( cea care
contine microinstructiunile) in varianta conventionala numarul de microinstructiuni
n=256 iar w=61,32,12
Deci ne referim la dimensiunea memoriei
In varianta nanoprogramata izolam o memorie de nanoprogram cu doar m
instructiuni in care m mult mai mic ca n, de acelasi numar de biti astfel incat acolo
sa punem microinstructiuni mai des utillizate, dar ca sa o adresam avem nevoie in
continuare de memoria de microprogram care va avea acelasi numar de
mmicroinstructiuni dar de dimensiune log2m
Deci
Daca m= 32, acolo memoria de microprogram am avea campuri de 5 biti
pentru ca pe 25 putem forma 32 de combinatii

b. microprogramare şi nanoprogramare
Exemplu. Fie un program de nw = 4096  100 biţi, cu m = 128 instrucţiuni
folosite mai frecvent.
Rezultă o nanomemorie cu mw = 128  100 biţi şi o memorie de comandă de n 
log m = 4096  7 biţi.
Avantaj: câştigul faţă de programarea convenţională este de:
(4096  100) – (4096  7) – (128  100) = 368.128 biţi.
Dezavantaj: nanoprogramarea presupune două accese la memorie în loc de unul
singur
Programul din exemplu are 4096 de microinstructiuni ( deci 4k ), fiecare
microinstructiune are w=100 de biti.
Dintre aceste 4096de microinstructiuni, 128 sunt folosite mai des.
Deci in cazul nostru m fiind 128 => log2m=7
atunci calcul[m rezultatul obținut.
NanoMemoria va avea w*m = 128*100biti
iar memoria de microcomanda va avea m ( care este 4096) *7 ca numar total de
biti
Deci rezultatul ar da valoarea dimensiunii celor 2 componente de micromemorie si
nanomemorie
Vrem sa facem acum o comparatie-+
Calculam dimesiunea memoriei de micropogram ( 4096*100) din care scadem cele
2 componente astfel calculate si vedem ca avem o economie de peste 360.000 de
biti
Deci in varianta de nanoprogramare in care separam intr-o memorie distincta
microinstructiunile mai des utilizate rezulta la capacitate o economie deci avem
nevoie de o memorie mai mica.
Dar dezavantajul este ca naoprogramarea presupune 2 accesari la memorie
Intai accesam mempria de microprogram din care se va selecta instructiunea
din memoria de nanoprogram
Deci memoria este mai mica, capacitatea scade, costurile scad, dar durata este mai
mare pentru ca la microprogramarea conventionala aveam nevoie de o singura
adresare, aici avem nevoie de 2 adresari

Exemple sisteme cu nivel microprogramat


Exemple de masini microprogramate reale adica structuri de nuclee la uP, uC

Schema bloc a arhitecturii pentru microprocesorul Intel Core i7 Sandy Bridge


Aici e prezentata doar calea de date ( in schema nu apare unitatea de control)
La nucleul Sandy Bridge din poza vedem 4 zone importante
Subsistemul de memorie din stanga sus care face legatura cu cache-ul extern
Unitatea de executie care contine toate unitatile ALU
Unitatea de control a executiei autofolder care stabileste redenumirea,
planificarea operatiilor in cazul in care ele nu se executa in ordinea naturala din
program
Si partea de front end, cea in care e cache-ul de nivel 1, unitatea de fetch
decoding, cache-ul de microperatii si predictorul de ramnificatii

Exemplu pentru un MicroController

Schema bloc a arhitecturii pentru microcontrolerul AVR ATmega 168


Tot o schemă microprogramată este si acest AtMega168 de la Microchip.
in partea din stanga sunt blocurile corespunzatoare schemei micromasinii
programate si in dreapta intrarile si iesirile.
In partea din dreapta SPI = Serial Peripheral Interface ( interfata seriala pentru
blocurile de intrare iesire)
WatchDogTimer este un timer care are sarcina, pe langga de a da ceasul, sa rezolve
si posibilele disfunctionalitati ale schemei
In rest vedem unitatea de intreruperi si modulele de intrare-iesire

Arhitectură pentru un Sistem On A Chip de la ARM


Procesorul Cortex A9 folosit intr-un SoC

Schema bloc a arhitecturii ARM Cortex A9 pentru OMAP4430 system-on-a-chip


In schema vedem blocurile componente ca la orice uP
Am vazut in toate schemele ca blocurile care reprezinta memorii cache, buffere,
registre sunt marcate cu gri
Avand in vedere ca ele toate se incadreaza intr-unul din cele 3 modele de masina
microprogramata vazute mai devreme adica micromasina A, A modificata si B ->
deci de la format orizontal mixt la vetical am facut comparatii intre aceste 3
scheme, am vazut care este ehivalentul blocurilor fata de cele 3 modele de formate
de masina microprogramata si am facut incadrarile intr-unul din cele 3 formate si o
comparatie intre ele
CURS 12

CAP 6. Nivelul Sistemului de Operare

Sistemul de operare este cel rezident in memoria ROM cel care guverneaza toate
actiunile care se intreprind la nivelul sistemului de calcul. Vom discuta doar despre
gestiunea memoriei virtuale pe care o vom pune in legatura cu memoria
fizica(memoria principala sau memoria de lucru RAM). Vom observa legatura
intre memoria fizica si memoria de lucr, modul de gestionare si vom trata cele
doua componente: operatiile de paginare si de segmentare.
Poziţionarea nivelului sistemului de operare în structura stratificată a nivelurilor
unui calculator se afla deasupra masinii traditionale si sub nivelurile(acestea nu
sunt reprezentate pe schema), aceste niveluri sunt operatiile de traducere
asamblare, compilare.
Observam ca el realizeaza interpretarea partiala a comenzilor sistemului de operare
la nivelul masinii traditionale si mai departe la nivelul microprogramat.
Din punct de vedere al definitiei memoria are doua abordari(doua componente):
memoria fizica si memoria virtuala.

• fizică:
o liniile fizice de adresă externe procesorului (lăţimea magistralei de
adrese, m);
o o spaţiul de memorie fizic instalată în sistemul de calcul (capacitatea
de adresare fizică, 2m );
• virtuală:
o spaţiu de memorie creat de SO, care conţine un model al memoriei şi
al adreselor de memorie pe care un program le are la dispoziţie (este
mai mare decât memoria fizică);
o suportul fizic (HDD) pe care SO salvează zone din memoria totală
disponibilă pentru a asigura spaţii libere în zona de memorie fizică,
destinate porţiunilor de cod sau de date cu care programul lucrează la
momentul respective.

Mem fizica se reprezinta prin doi parametrii care sunt legati. Daca specificam
latimea magistralei de adrese (adica numarul liniilor de adresa ) de pe magistrala
de sistem m, atunci avem practic numarul de linii fizice pe care se pot face
combinatii binare. Aceste combinatii binare ne vor arata numarul total de locatii
adresate sau de celule de memorie care pot fi scrise sau citite. Deci capacitatea
fizica a memoriei este 2m, in care prin m notam latimea magistralei( a nu se
confunda cu largimea de banda).
De cele mai multe ori in aplicatii se constata (aceasta constatare fiind facuta de-a
lungul generatiilor de procesoare) ca spatial fizic nu este sufficient pentru
dezvoltarea unor aplicatii si astfel s-a introdus conceptul de memorie virtuala.
Memoria virtuala fiind un spatiu creat tocmai de SO astfel incat sa genereze un
spatiu de memorie(spatiu adresabil) care depaseste capacitatea memoriei fizice.
Daca facem acest lucru este evident ca trebuie sa folosim un artificiu si anume un
spatiu virtual care depaseste capacitatea de memorie a RAM-ului trebuie
dezvoltat pe alt support fizic. De cele mai multe ori suport fizic este discul extern
sau discul intern, deci memoria secundara pe suport magnetic hard disk ul in care
se salveaza anumite zone care vor fi folosite de memoria virtuala pentru
gestionarea acesteia si asta presupune ca hard diskul are spatii libere. De multe ori
se intalneste situatia in care sistemul trimite un mesaj de avertizare In care spune
ca nu existe sufficient spatiu pe hard disk pentru dezvoltarea memoriei virtuale,
asta cand memoria fizica este aproape plina. Deci, cu alte cuvinte, trebuie pastrat
mereu un spatiu de minim 10-15% liber din capacitatea hard diskului astfel incat sa
se poate extinda aceasta dezvoltare virtuala de pagini suplimentare de memorie in
asa fel incat un program sa poate lucre cu un spatiu de adresare mai mare decat cel
fizic aflat la dispozitie.

Legatura intre memoria fizica si memoria virtuala


Figura de mai sus arata memoria reala sau memoria fizica(partea de sus). Un
program care ruleaza la un moment dat foloseste anumite entitati de memorare care
se extind in memoria virtuala.
Fizic aceste parti din memoria virtuala folosite de program sunt stocate pe discul
extern, pe hard disk.Dintre aceste zone de memorie virtuala folosite de un program,
trebuie alese acele portiuni care se incarca sus, in memoria reala sau in memoria
fizica.
Conceptul de paginare
Paginarea = procedeul de realizare în memorie a unor blocuri de dimensiuni fixe
(uzual, cu valori între 4 KB şi 4MB), numite pagini, care pot fi utilizate în
mecanismul interschimbării proceselor (transferul blocurilor între memoria internă
şi externă). Este un mecanism transparent utilizatorului, apanaj al sistemului de
operare.
Exemplu de paginare
Paginarea este un apanaj al sistemului de operare, adica gestiunea acestor obiecte
cu care lucreaza paginarea apartine SO, asta inseamna ca mecanismul este
transparent utilizatorului. Programatorul obisnuit nu vede, nu simte ce se vede in
spate, el vede doar rezultatele.
Paginarea despre care vorbim inseamna definirea anumitor portiuni de memorie de
dimensiune fixa, evident intotdeauna de valoare o putere a lui 2, sunt mici, numite
pagini astfel incatr sa se poata face schimbul de informatie in aceasta coanta de
informative de dimensiune fixa, intre spatial virtiual(care se vede in partea stanga)
si spatial fizic(din dreapta). Este foarte importanta folosirea acestei dimensiuni fixe
pentru ca in felul acesta se creaza cadre egale care pot fi umplute cu portiuni de
memorie de aceas dimensiune.
In cazul nostrum se observa ca spatial virtual este de 64KB si o pagina este de
4KB deci asta inseamna ca avem 64/4=16 pagini in memoria virtuala(se vad in
stanga numerotate de la 0 la 15), iar spatial fizic este 4KB adica dimensiunea unei
pagini, asta inseamna ca la un moment dat una din cele 16 pagini din spatial virtual
va fi chemata, apelata sa ocupe unicul cadru de pagina din spatial fizic. Atunci in
functie de cerintele programului, de referintele pe care le face acesta, SO alege in
fiecare moment care din cele 16 pagini din spatial virtual va umple exact cadrul de
pagina disponibil im spatial fizic. In felul acesta se face o interschimbare a
paginilor intre memoria interna si cea externa, astfel SO va trebui sa guverneze
succesiunea de pagini care vor umple spatial pe care il au la dispozitie in RAM.
Trebuie sa existe un bloc care sa se ocupe de aceasta operatie de interschimbare,
este de fapt un transfer de la un spatiu de adresa la alt spatiu de adresa.
Sistemul de gestiune al memoriei virtuale, prin blocul MMU (Memory
Management Unit) al procesorului, parcurge următoarele operaţii la execuţia unei
instrucţiuni din pagina următoare:
1.salvează conţinutul memoriei principale (MP) în memoria secundară;
2. localizează pagina respectivă în memoria secundară;
3. încarcă această pagină în MP;
4. asociază adreselor absolute adresa de memorie fizică (în exemplul anterior, de la
0 la 4095);
5. continuă execuţia programului.

In anumite scheme am intalnit blocul MMU(memory management unit).Acest bloc


salveaza continutul existent in RAM in memoria secundara deci pe hard disk. Se
uita unde se afla pagina care este ceruta de aplicatia in curs in memoria secundara,
o aduce in memoria principala deci o transfera din spatial virtual in spatial fizic,
deci daca se face aceasta operatie de transfer este ca o functie care realizeaza
conexiunea intre ele, deci cu alte cuvinte se face o translatie de adrese ca la
memoria cache( aducea blocuri din memoria RAM si le transforma in linii din
cache) exact asa se intampla si acuma, se face un transfer intre doua spatii de
adresa si trebuie asociate adreselor absolute din memoria virtuala adresele fizice
din memoria RAM. In cazul nostru adresele vor trebui sa fie pana in 4KB si dupa
care se continua executia programului, astfel incat aplicatia respectiva are la acel
moment incarcata in memoria principal acea pagina de care are nevoie.
In tabelul de mai sus se observa cum a evoluat in paralel memoria fizica cu
memoria virtuala, vedem ca 8086 are o memorie fizica de 1MB deci 220deci 20 de
linii de adresa, largimea magistralei de adresa si nu avea memorie virtuala.
Abia incepand cu 286 din familia 8086 de la Intel apare notiunea de memorie
virtuala, 286 avea 16MB fizic si virtual putea sa se extinda pe 1GB. Astfel se
observa cum a crescut de cateva sute de ori spatial adresabil prin introducerea
memoriei virtuale.
La 386 si 486 vedem ca 4GB se transforma in 64 TB, deci o crestere si mai
accentuata a spatiului de memorie virtuala se pastreaza acest lucru deci tot pe 32
linii de adresa Pentium, iar in penultima linie am concentrat generatiile post-
pentium, in care 36 linii de adresa se transforma tot in 64TB. La Intel Core I7 apar
40 linii de adresa deci 1 TB de memorie fizica si 256TB de memorie virtuala.Acest
table este util doar pentru a vedea raportul intre spatial fizic din RAM si virtual
pe care procesorul il are la dispozitie.
In continuare vom vedea cum se face in sistemul de operare implementarea fizica a
paginarii.
Avem un exemplu simplu de paginare in care memoria fizica adresabilasau
memoria virtuala este de 64KB(16 linii) si memoria fizic instalata sau memoria de
lucru RAM este de 32 KB 8 pagini . Vedem ca pagina s-a pastrat tot de 4KB.
Trebuie realizat un system care sa gestioneze transferal intre cele doua spatii si
translatia de adrese de la fizic adresabila la fizic instalata astfel incat in fiecare
moment sa avem o situatie exacta care dintre cele 16 pagini posibile de 4KB sunt
aduce in cele de 8KB cadre sau locatii posibile de paginare din memoria fizica.
Cum se realizeaza fizic acest lucru?
Caracteristicile & avantajele paginării:
•mărimea fixă a paginilor intră corect într-un sector al unui disc;
• un obiect în memorie nu trebuie să fie continuu: pagina este o nouă cuantă
de informaţie;
• mecanismul paginării nu este vizibil pentru utilizator;
• două niveluri de adresare indirectă a memoriei: o referinţă într-un director,
din care se selectează o tabelă a paginilor (TLB optimizează translaţia adresei
virtuale în adresă fizică);
• directorul şi tabelele de pagini au o structură uniformă, fiind tratate ca nişte
pagini speciale;
• prin bitul absent/prezent (0/1), MMU verifică prezenţa unei pagini în
memoria fizică.

Se foloseste un asa numit tabel de pagini. Asta inseamna ca o memorie adresata pe


16 linii cum se observa in stanga memoria fizic adresabila trebuie transformata
intr-o memorie cu 15 linii, deci 32KB este 215, cu alte cuvinte trebuie realizata o
translatie intre un spatiu de adresa de 16 b cum se vede in partea de sus intr-un
spatiu de adresa de 15b astfel va trebui sa realizam un tabel care sa contina o harta
a tuturor paginilor si care sa ne indice(pe figura exemplu de paginare) care dintre
cele 16 pagini din stanga vor fi incarcate in memoria fizica in cele 15 locatii de
pagini din dreapta, asta inseamna ca daca noi avem 16 pagini, 16=24 pe fiecare
pagin, in tabelul de pagina, noi o vom putea indexa pe fiecare cu 4b asta ne spune
ca adresa in memoria principala, fizica(cea din dreapta) se va forma in felul
urmatior:
Va trebui sa identificam care pagina din memoria virtuala se incarca in memoria
fizica si acest lucru este dat de 3 biti dreapta deci LSB-urile din tabel(acel 110) ne
indica pagina care a fost incarcata, pe 3 biti avem 23 combinatii deci in felul acesta
putem stabilii toate cadrele de pagina cum sunt ocupate in RAM , iar
deplasamentul in cadrul paginii de 4 K, se copiaza pur si simplu cei 3*4=12 biti
din partea de sus. Este formarea clasica a unei adrese din baza + deplasament in
care baza este luata in cei 3 biti din chenarul in tabelul e pagini, iar deplasamentul
este copiat direct.
Atunci se poate pune intrebarea ce rost are MSB-ul din stanga?
Pur si simplu este un bit care ne indica daca este :
• 1 inseamna ca pagina virtuala a fost incarcata in memoria fizica
• 0 inseamna ca pagina respective nu este in memoria fizica si va trebui sa fie
incarcata
Deci in felul acesta vedem cum 16 biti din memoria virtuala se transforma in 15
biti de adresa in memoria fizica.
Atribute oferite de paginare: faptul ca se folosesc entitati de dimensiune fizica
fixa(paginile cu acceas dimensiune) ne spune ca putem sa identificam in felul
acesta spatii de memorie de valoare o putere a lui 2 care sa fie divizori exacti ai
sectoarelor de pe hard disk astfel incat impartirea sa se faca exact si intr-un sector
sa intre un numar intreg de pagini.Fiecare noua pagina este tratata ca o informatie
spatiul in memoria virtuala nu trebuie sa fie continuu de exemplu toate zonele de
memorie cu care lucreaza un program nu trebuie sa fi unele dupa altele ca pagini
successive deci ele pot fi imprastiate in oricare din cele 16 cadre de pagina
existente in spatial virtual, este transparent utilizatorului deci aceste schimbari le
face SO si este mai de graba o dubla adresare sau o adresare indirecta pentru
obtinerea adresei se face o referinta intr-un director, directorul de pagini, care este
in zona de memorie din SO din care se selecteaza aceasta tabela a paginilor care se
observa in schema de mai sus.
Transferul propriu zis al adreselor il face blocul TLB la fel ca si la memoria cache
este cel care realizeaza translatia adreselor din spatial virtual in spatial fizic. Toate
aceste directoare si tabele au o structura de acceas dimensiune, deci cu alte cuvinte
fiind de aceas valoare ca si paginile nu sunt altceva decat niste pagini speciale,
pagini care nu contin informative sau date ci contin aceste informatii de gestionare
si dupa cum am scus bit prezen bit absent ne arata in cadrul MMU daca pagina
respectiva a fost sau nu a fost incarcata. Daca a fost incarcata se afla in RAM si o
putem folosii, daca nu a fost incarcata trebuie sa o aducem si in momentul in care o
aducem va trebui sa vedem daca mai este spatiu in memoria fizica.

In aceasta schema vedem cum in partea din stanga vom gaso 8 biti de 0 si 8 biti de
1 pe pozitia MSB pentru ca maxim se pot incarca 8 pagini in memoria principal si
raman 16-8 pagini neincarcate.
Ce se intampla daca in memoria fizica cea din partea dreapta toate cele 8 pagini
sunt deja pline, adica memoria RAM este incarcata complet toate cele 8 cadre de
pagina sunt mapate dar programul cere o pagina noua care e in plus de cele 8
existente dar de care este nevoie?
Paginarea la cerere vs. modelul setului de lucru
Eroare de pagină (page fault) = situaţia în care se face o referinţă la o adresă
dintr-o pagină care nu se află în memoria principală  SO trebuie să citească în
pagina cerută de pe disc, să introducă noua sa adresă fizică în tabelul de pagini şi
să repete instrucţiunea care a provocat eroarea.
Reducerea numărului de erori de pagină se poate face în două moduri:
• paginarea la cerere – o pagină este adusă în memorie numai când este solicitată,
nu în avans; dezavantaj: în cazul operării prin diviziune în timp, schimbarea
repetată a paginilor devine critică:
• principiul localizării – la orice moment de timp, t, există un set al tuturor
paginilor folosite de cele mai recente k referiri la memorie  se presupune că setul
de lucru (working set), w(k, t), variază lent în timp şi poate fi păstrat în memorie ca
bază de pornire pentru reducerea erorilor.
Politici de înlocuire a paginilor
Dacă memoria este complet ocupată, la apariţia unei erori de pagină, politicile de
înlocuire stabilesc care pagini trebuie să fie înlocuite. Paşii parcurşi pentru tratarea
excepţiei page fault:
1. aplicaţia accesează o pagină care nu este prezentă în memoria fizică;
2. blocul MMU (Memory Management Unit) generează excepţia page fault;
3. este aleasă o pagină goală (un cadru de pagină neocupat);
4. dacă nu este găsită nicio pagină goală, este aleasă una care urmează a fi evacuată
din memoria virtuală, această alegere fiind făcută pe baza unor algoritmi de
înlocuire;
5. dacă pagina a fost modificată, această pagină este mai întâi scrisă pe disc;
6. pagina necesară este citită de pe disc;
7. pagina este mapată în spaţiul de adrese al aplicaţiei;
8. este reluată execuţia aplicaţiei.
Atunci evident trebuie sa stabilim un mecanisc care sa ne dea care pagina din
memoria principal deja incarcata este cea la care putem sa renuntam, sa o
eliminam, astfel incat sa putem sa o aducem o pagina noua si acest lucru se face in
momentul in care sistemul de operare da un anumit semnal care se numeste eroare
de pagina, adica aplicatia in executie cere o locatie care se afla la o adresa dintr-o
pagina care inca nu e incarcata in RAM , daca nu este incarcata inseamna ca
trebuie sa o aduca de pe disk sa o puna in memoria principal daca are loc si daca
nu are loc sa se creeze spatiu prin eliminarea unei pagini mai vechi.
Evident ca aceste erori de pagina exact ca la cache sunt de evitat, adica trebuie sa
ne gandim la un mechanism care sa incerce sa minimizeze numarul erorilor de
pagina care se pot intalnii.
Reducerea page fault se poate face in doua moduri:
Paginarea la cerere adica aducem o pagina in RAM numai dupa ce ea a fost
solicitata nu in avans. In cazul operării prin diviziune în timp, schimbarea repetată
a paginilor devine critică.
A doua metoda de reducere este principiul localizarii si pentru asta se introduce o
functie care se numeste setul de lucru, sau working set.
Cu alte cuvinte, este o functie notata cu W si are doua variabile : k si t, deci w(k,t),
in care ne arata la fiecare moment de timp t care este multimea paginilor deja
folosite la cele mai reticente k referiri. Deci cu alte cuvinte, sa zicem, la ultimele
16 referiri au fost cerute 10 pagini. Asta inseamna ca pana la momentul t, sistemul
de operare a lucrat cu 10 pagini, si setul de lucru este multimea celor 10 pagini deja
solicitate la ultimele k referinte. Evident ca este o functie crescatoare, deci pe
masura ce trece timpul, este foarte probabil sa se ceara o pagina noua si atunci
setul se va imbunatatii adaugand o alta pagina. Dar, aceasta noua adaugare este
posibil sa nu apara la fiecare pas. Deci variatia in timp este lenta si il pastram in
memorie pe acest set de lucru ca sa stim de ce am avut nevoie. Pt ca principiul
localizarii ne spune ca daca am avut nevoie de o pagina in trecut, s-ar putea sa
avem nevoie si acum. Chiar daca spatial este deja localizata, noi o pastram acolo
pentru preferinte.
Dar daca memoria principala este deja plina, atunci trebuie sa vedem care pagina
este cea de care ne putem desparti => deci sa vedem care este cea care iese pentru a
putea aduce o pagina noua de care este nevoie. Observati ca pentru executia unui
program in cazul intalnirii unei erori de tip page fault, pasii sunt
urmatorii:programul cere o pagina. Se constata ca bitul din partea stanga adica
MSB este 0 => deci pagina respectiva nu este incarcata inca in memoria fizica, dar
este nevoie de ea. Asta inseamna ca MMU trebuie sa dea semnalul de page fault,
adica sa spuna aplicatiei „vezi ca pagina in care tu ai nevoie de o locatie inca nu e
incarcata in RAM”, va trebui sa gaseasca un cadru de pagina gol, neocupat in care
sa o aduca. Daca nu gaseste, va trebui sa scoata din memorie o pagina, dar nu
oricare, ci una de care sa poata constata ca se poate desparti fara consecinte. Deci
cu alte cuvinte, va trebui sa apeleze la un algoritm de inlocuire a paginilor care sa
ne spuna care este pagina de care chiar putem sa ne luam ramas bun pentru a
introduce pagina noua in care este referita. Daca pagina pe care o alege pentru a fi
evacuata a fost modificata, adica s-a umblat la ea intre timp cat timp era in RAM,
trebuie trecute pe disk modificarile efectuate intre timp. Dupa care, pagina nou
ceruta este luata de pe disk din memoria virtuala, este trecuta prin operatia de
mapare a adresei in memoria fizica, dupa care executia continua.

ALGORITMI DE INLOCUIRE
Mai departe vom stabili care pot fi algoritmii de inlocuire pe care-i folosim pt a
scoate o pagina veche in cazul in care se solicita prin eroarea de page fault o pagina
noua.
O sa facem o insiruire a tuturor algmoritmilor de inlocuire care se pot folosi in
cazul eliminarii unei pagini vechi in cazul in care se aduce o pagina noua. O sa
incepem cu algoritmul cu performantele cele mai bune, dar din pacate care nu este
realizabil fizic si o sa vedem imd de ce, dar care intotdeauna va fi o referinta, un
algoritm optimal, o referinta la calitatea algoritmului pe care il vom folosi. Adica
cu cat se apropie mai mult de performantele algoritmului optim, cu atat un algoritm
pe care il folosim va fi mai eficinet.
1. Algoritmul optim de înlocuire (Belady)
Fiecare pagină se etichetează cu numărul de instrucţiuni care se vor executa până
când pagina
este referită pentru prima dată => se elimină pagina cu cea mai mare valoare a
etichetei.
Dezavantaj: nu poate fi implementat (SO nu poate determina exact momentele
referirilor viitoare).
Exemplu: 8 pagini virtuale (numerotate de la 0 la 7) şi 3 cadre de pagină (page
frames) şir de referiri
Rata de page fault (pagini invalide) = 9/20.

Algoritmul respectiv a fost introdus de Belady, ii poarta numele si ne spune in felul


urmator: fiecare pagina din memoria virtuala este etichetata cu nr de instructiuni
executate pana la prima sa refereire. Cu alte cuvinte, se elimina pagina care are
eticheta cea mai mare. Adica pagina care, in timp, va fi folosita cat mai tarziu in
viitor. Cu alte cuvite, de despartim de acea pagian de care stim ca n-avem nevoie pt
foarte mult timp de acum inainte. Dar asta insemna sa stim de dinainte care vor fi
paginile referite in viitor. Predictia asta nu va putea fi intotdeauna posibila de
implementat fizic, adica s-ar putea sa nu stim in fiecare moment ce ne rezerva
viitorul si care va fi momentul in care o anumita pagina urmeaza de acum inainte
sa fie din nou referita.
Exemplu: in cazul nostru avem 8 pagini virtuale si 3 pagini fizice, adica dintre cele
8 pagini din memoria virtuala, in memoria RAM exista 3 cadre de pagina
disponibile. Deci in fiecare moment va trebui sa vedem care 3 pagini din cele 8
virtuale este incarcata in RAM si anume dupa principiul paginarii la cerere, adica
in functie de solicitari. Si modelul este urmatorul adica nu s-a reprezentat
continutul complet al fiecarei situatii in parte in evolutia in timp, doar modificarile
a fost notate. In partea de sus avem in timp sirul de referiri, adica de care din cele 8
pagini numerotate de la 0 la 7 este nevoie pentru a rula un anumit program. Se
vede ca avem aici vreo 20 de momemte de timp. Si care este continutul celor 3
cadre de pagini din memoria fizica la fiecare moment. Cu alte cuvinte, fiecare noua
schma din acelea cu 3 patratele ne arata continutul memoriei fizice la momentele
1,2,3...etc.
Ne uitam in sirul de referiri: la primul moment s-a cerut pagina 7, RAM-ul era gol,
s-a dus pagina 7. Momentul 2, s-a cerut pagina 0, este spatiu liber deci s-a dus si
pagina 0. La fel si cu pagina 1. Deci paginile 7,0 si 1 sunt primele 3 referiri care
umplu complet cele 3 cadre de pagina existente in memoria fizica. De aici incepe
problema. La momentul 4 se cere pagina 2 care nu se regaseste in setul de lucru
care era alcatuit pana la momentul 4 din paginile 7,0 si 1 deja ocupate in memoria
fizica. Deci va trebuie sa scoatem una dintre ele. Care dintre 7,1 si 0 va fi soicitata
cel mai tarziu in timp, adica cand va fi in viitorul indepratat nevoie de acea pagina?
Pai ne uitam si obs ca pagina 0 este necesara chiar la mometul urmator, la
momentul 5 deci o lasam. Ne uitam dupa aceea si vedem capagina 1 o mai intalnim
abia la momentul 13, iar de pagina 7 va fi nevoie abia la momentul 17. Deci cel
mai curand voi folosi pagina 0, dupa aceea pagina 1 si abia dupa aceea pagina 7,
deci 7 fiind pagina de care n-o sa mai avem nevoie mult timp de acum inaite si ea
va fi cea cu valoarea cea mai mare a etichetei si deci cea care va fi inlocuita. Deci
la momentul 4, pagina 7 va fi inlocuita cu pagina 2. Dupa aceea se cere pagina 0,
care exista deja in memorie, deci totul e in ordine. Nu s-a mai reprezentat
momentul 5 ptc continutul 2,0,1 se repeta neavand schimbari. Apoi la mometul 6,
se cere pagina 3. In acel moment aveam 2,1,0 si vedem ca pagina 3 nu se afla in
memorie. Trebuie sa o scoatem si ne uitam intre 2,0 si 1 care este necesara cel mai
tarziu in timp in ceea ce privese moementele din viitor: de 0 e nevoie la momentul
urmator, de 2 este nevoie la momentul 9 si ramane pgina care e solicitata cel ai
tarziu, pagina 1, pe care o mai vedem abia pe momentul 15,16 pe acolo.=> scoatem
1 si punem pagina 3 in locul ei .Si tot asa mai departe.
Daca facem socoteala pt numarul de referiri din figura, nr de pagini care a solicitat
schimbare de continut adica a dat eroare de page fault este de 9, adica exact cate
drepunghiuri incadrate avem, adica dreptunghiurile fiind notate numai cand se face
o modificare, s-a schimbat continutul, iar continutul se schimba atunci cand apare
eroarea de pagina invalida. Din 20 de referiri, 9 au fost cu page fault. Deci practic
la exemplul nostru, asta este performanta maxima care se poate obtine. 9/20 este
rata sau raportul de erori de pagina si la aceasta valoare vom face referirile si
comparatiile de acum inainte.
De acum incolo vom incerca sa gandim algoritmi care sunt generati pe baza
principiului localizarii spatiale sau temporale, care se bazeaza pe trecutul sirului de
referire, ci nu pe viitor pe care nu-l putem prezice cu exactitate si ne vom raporta
de fiecare data la performanta acestuia fata de cea de 9/20 obrinuta la Belady,
algoritmul optimal.
2. Algoritmul NRU (Not Recently Used)
Pentru fiecare pagină existentă în memorie, intrarea din tabelul de pagini conţine
doi biţi de stare:
• R (referred) – este pus în 1 ori de câte ori pagina este referită/accesată (la
citire sau scriere);
• M (modified): – este pus în 1 atunci când pagina este modificată.
Aceşti biţi trebuie actualizaţi la fiecare referire a memoriei. Iniţial, sunt puşi în 0.
Odată pus în 1, un bit rămâne în aceeaşi valoare până când este resetat explicit de
către SO. Periodic, R este pus în 0.

NRU inseamna Not Recently Used, poate vi-l mai amintiti ca a fost un exemplu si
la memoria cache, fiind vorba in principiu de acelasi lucru, inlocuirea unei portiuni
de informatie care trb scoasa si adusa una noua. La NRU ni se spune inca din
denumire ca vom scoate o pagina care nu a fost folosita recent, adica care in trecut
(adica inspre stanga daca studiem sirul de referiri)n-a mai fost folosita de foarte
multa vreme. Pt a stabili care este acea pagina, pt ca s-ar putea sa fie mai multe,
introducem doi biti de stare: bitul de referinta si bitul de modificare.
Deci R este un bit care se pune pe 1 ori de cate ori acea pagina a fost ceruta in
memorie, adica referita de programul in lucru, nu conteaza daca a fost vorba de
citire sau scriere, dar a fost nevoie de pagina. Iar M este pus in 1 numai atunci cand
pagina referita este modificata, deci doar cand este scrisa si s-a inlocuit o valoarea
din interiorul paginii. Asta insemna ca R si M sunt 2 biti de stare pentru fiecare
pagina in parte si la fiecare moment de timp, ei trebuie actualizati. Adica sa vedem
daca e cazul sa ii trecem in 1 in cazul in care pagina respectiva a fost ceruta sau
modificata. Odata pus in 1, adica odata ce o pagina este referita/modificata, bitul
va ramane 1 pana cand il reseteaza sistemul de operare. Sirul de referiri, la un mom
dat, s-ar putea sa fie fff lung si atunci anulam trecutul si incepem socoteala de la 0.
Deci dupa un anumit interval de timp, cand sirul de referiri este deja foarte mare,
periodic R se pune in 0.
Sistemul de operare distinge 4 clase de pagini:
• clasa 0: nereferite, nemodificate (R = 0, M = 0); (paginile care nu au fost
nici referite, nici modificate)
• clasa 1: nereferite, modificate (R = 0, M = 1);
• clasa 2: referite, nemodificate (R = 1, M = 0);
• clasa 3: referite, modificate (R = 1, M = 1). (cele mai importante pagini, pe
care vrem sa le pastram)
Pagina eliminată este selectată aleator din clasa având cel mai mic indice.
In fiecare clasa s-ar putea sa fie mai multe pagini care se incadreaza in aceste
combinatii de biti de stare. Si atunci daca vrem sa eliminam o pagina, atunci
principiul nostrum de a nu fi folosit recent, inseamna ca trb sa alegem o pagina
care nu a fost nici referita, nici modificata, adica o pagina care nu a introdus
schimbari de care sa avem nevoie, Adica va trb sa alegem o pagina de clasa 0.
Daca sunt mai multe pagini in fiecare clasa, alegem la intamplare una dintre ele pt
ca neavand un alt criteriu de discriminare in plus fata de aceasta impartire pe patru
clase….adica daca sunt mai multe pagini in clasa 0 cand noi vrem sa scoatem doar
una, alegem una la intamplare.
Algoritmul FIFO este un alg foarte simplu. Algoritmii complicati, care se vor
dovedi si mai eficienti, sunt cei la care trb sa tinem socoteala atat in ceea ce
priveste referiri, modificari, momentele acestora; adica sa tinem seama de evolutia
unor parametrii care inseamna contoare, timere, deci cu cat un alg va necesita mai
multe resurse si cu cat va dura mai mult timp pt verificarea si compararea tuturor
acestor parametrii de pagina, cu atat alg va fi mai greu de implementat, dar va fi
mai eficient.
3. Algoritmul FIFO (First In – First Out)
Asociază fiecărei pagini momentul intrării în memorie se înlocuieşte pagina cea
mai veche.

In cazul nostru, FIFO e un algoritm foarte simplu pt ca nu trebuie sa facem o


situatia la fiecare pagina in fiecare moment. Ci tine minte doar cand a intrat pagina
respectiva in memoria fizica, adica doar intrarile. Si atunci, prima intrata este
prima iesita, bineinteles in timp. Cu alte cuvinte, inlocuieste pagina cea mai
veche(?), cea care a intrat prima in memorie. Folosim acelasi exemplu.

Rata de page fault (pagini invalide) = 15/20.

Avem tot 20 de referiri, acelasi sir de soliticari de catre program, acelasi numar de
8 pagini virtuale si 3 cadre fizice in memoria RAM. Momentele 7,0,1, se intampla
exact cum am discutat anterior. RAM ul era gol, s-au adus paginile in ordine, la
momentul 3 s-a umplut memoria. Vine pagina 2. Acuma nu ne mai in dreapta, spre
viitor, ci acum vom analiza trecutul si evolutia starii paginilor de la inceputul
referirilor pana in acel moment. Cine a fost introdusa prima? Pagina 7 => pagina 2
intra in locul paginii 7. In momentul urmator vine 0 care exista deja in continut. In
momentul 6 vine pagina 3, nu este continuta, iar inauntru avem 2,0,1 dintre care
pag 0 a fost introdusa prima dintre acestea. => soatem pag 0 si introducem pagina
3. Si tot asa mai departe. Sirul de referiri va produce un nr mult mai mare de erori
de pagina, adica inlocuirile vor fi mai frecvente. Daca le numaram pana la capat,
vor fi 15 din 20 => deci rata de page fault va creste destul de mult, stiind ca la
Belady era 9/20. => nu e un algoritm foarte eficient, dar e un algoritm simplu pt ca
verificarile sunt putine.
Sa mai luam un exemplu tot la algortimul FIFO: in cazul in care avem 3 cadre de
pagini in RAM si referirile care se vad in partea de sus ( din exemplul de sus) ,
conform algoritmului FIFO vor rezulta 9 erori de paginare => deci 9 pagini
invalide.
Acum, sa presupunem ca avem acelasi timp de referiri, acelasi nr de pagini in
memoria virtuala, dar marit memoria fizica,deci am inlocui RAM ul cu unul de
capacitate mai mare care acuma permite 4 cadre de pagini. Logic, ne gandim ca
daca aceleasi 8 pagini din memoria fizica vor concura nu pe 3, ci pe 4 pozitii,
sansele de a gasi un loc liber vor trb sa fie mai mari. Adica e ca si cand , sa zicem,
concurenta la un examen de admitere este de 3 pe un loc si la un moment dat se
suplimenteaza numerul locurilor, toata lumea se gandeste ca „aa, am mai multe
sanse sa intru”. Se constata aici, de fapt, un paradox . Daca vom face verificarea la
4 frame-uri cu acelasi sir de referiri, com costata ca nr dreptunghiurilor incadrate
va fi 10 in loc de 9. => este contrar logicii pe care noi ne asteptam s-o vedem
aplicata. Adica daca marim RAM ul cu o pozitie si punem un cadru de pagina in
plus, vor fi mai multe erori? Da, si asta se numeste anomalia lui Belady, adica
cazul in care numarul de erori de pagina creste in ciuda marimii numarului de
spatii libere de frame-uri din memoria fizica.
Anomalia lui Belady:
Pentru unii algoritmi de înlocuire, numărul erorilor de page fault poate creşte dacă
se măreşte numărul de frame-uri (cadre de pagină).
Acest fenomen se produce in cazul algoritmului FIFO. Mai sus avem graficul care
ne arata cum variaza numarul de erori de pagina in cazul in care numarul de cadre
fizice din memoria RAM creste. Noi ne-am astepta sa scada, dar vedem ca
modificarea de la 3 la 4 este in sus, deci numarul de page fault-uri a crescut de la 9
la 10.
Temă: refaceţi Ex. 2 în cazurile cu 4 frameuri şi 5 frame-uri (cadre de pagină), la
acelaşi şir de accesări. Se aplică anomalia lui Belady? Intuitive, daca ne uitam in
grafic, vedem ca erorile scad pt 4->5 frame uri. (Ne-a lasa tema ca sa aplicam noi
alg FIFO cu 5 frame uri si sa vedem ca trecera de la 4 la 5 frame-uri face ca erorile
sa scada de la 10 la 5 erori pe pagina pt aceasi sir de referiri.)

Trebuie sa retinem de aici ca FIFO sufera de anomalia lui Belady , este un alg care
uneori, in anumite situatii contrazice logica elementara.
Am retinut ideea ca ca FIFO este un algoritm simplu, dar nu doarte bun. Din el
deriva un alt algoritm care , de fapt, se foloseste de combinatia avantajelor celor
doi algoritmi prezzentai inainte, FIFO si NRU, si anume algoritmul Second
Chance.

4. Algoritmul celei de-a două şanse (Second Chance)


Este o combinaţie între FIFO şi NRU, care evită neajunsul algoritmului FIFO de a
elimina din memorie o pagină utilizată intens: caută o pagină veche, nereferită în
perioada anterioară de ceas.
Se verifică bitul R al celei mai vechi pagini:
• dacă R = 0 – pagina este veche şi neutilizată este înlocuită imediat;
• dacă R = 1 – se pune R = 0, pagina este mutată la sfârşitul listei şi procesul
de căutare continuă.

Deci Second Chance combina FIFO si LRU a.i. daca FIFO elimina din memorie o
pagina utilizata intens pt ca el nu stie, nu tine socoteala ce se intampla cu acea
pagina dupa ce a intrat, ci doar cand a intrat, atunci unei pagini pe care FIFO ar
arunca-o, noi ii mai dam o sansa. Adica cautam o pagina veche, intrata de mult, dar
care sa nu fi fost referita in ultimul interval de timp. Cu alte cuvinte, schimbam un
pic regula de verificare a bitului de referinta, R.
• daca R = 0, deci pagina nu a fost referita, este veche si neutilizata => o
inlocuim
• dar daca R = 1, pagina respectiva care a fost veche, dar a fost solicitata(deci
referita) => n-o scoatem, ii mai dam o sansa, ii resetam bitul de referire si in
felul acesta o mutam la sfarsitul listei de eliminare si procesul continua
Sa vedem pe schema de jos, Exemplu: paginii A i se acordă o „a doua şansă”

Avem un numar de momente de timp la care se solicita paginile si avem o


succesiune de pagini referite aduse in memorie. Deci vedem ca paginile sunt notate
cu literele A,B,C...H, iar mometele la care au fost referite acele pagini sunt scrise
in cifrele de deasupra. Totul este reprezentat in evolutie temporala, de la stanga la
dreapta. Prima pagina incarcata a fost A, solicitata la momentul 0, apoi B la mom 3
s.a.m.d. In momentul in care am incarcat ultima pagina si ne aflam la momentul
curent suntem in dreapta la momentul 18 si s-a incarcat pagina H. Ce-ar face
FIFO? Ar scoate pagina A pt ca a fost incarcata prima, si nu ne intereseaza
celelalte pagini, cand au fost incarcate si de cate ori au fost modificate. Pagina A
este cea mai veche si FIFO pe asta ar scoate-o. Dar, folosind bitul de referinta
introdus la NRU, noi ii mai dam o sansa. O scoatem din coada listei si o punem in
capat, o aducem ca si cand ar fi fost nou introdusa si o avem in partea din dreapta a
sirului de cautare a.i. de la sfarsitul listei o aducem la iceput punandu-i bitul de
referinta R=0, ca si cand n-a fost nevoie de ea si sa vedem mai departe ce se
intampla. Cu alte cuvinte nu o scoatem, ii mai dam o sansa, dar daca ea in
continuare nu va fi referita si va ajunge o pagina veche, o sa fie scoasa. Dar, i se
mai da o sansa de ramanere inainte de a fi inlocuita. Cam asta inseamna second
chance.
Algoritmul urmator s.n Clock pt ca dpdv al diagramei, reprezinta de fapt o schema
figurata sub forma unui ceas in care acul indicator al ceasului ne arata momentul in
care noi facem o cautare pe lista de asteptare a paginilor care trebuie inlocuite. Este
o derivare din second chance bazat tot de FIFO cu imbunatatirea data la NRU, in
care din lista pe care o facem sa vedem pe cine dam afara nu mai este reprezentata
liniar, ci circular. E ca si cum linia respectiva o curbam si o aducem intr-o forma
circulara, a.i coada lista sa ajunga automat varful listei. Evolutia este urmat: sirul
de referiri si paginilr sunt acelesasi, doar ca reprezentarea s-a facut circulara. Daca
apare eroare de pagina, pagina la care ne aflam la mom. resp. marcata prin acul
indicator, ceea care este supusa conditilor de eliminare, este testata.
Cand testam pagina respectiva, de ex. Ne aflam la mom 3 si testam pagina C, daca
are R=0 => n-a fost solicitata si o scoatem imediat. Daca are R=1=> inseamna ca a
fost nevoie de ea si o lasam, ii punem R=0 si trecem mai departe, testam pagina D
s.a.m.d. In felul acesta vedem ca pagina A, din cazul anterior devine capul listei in
locul de coada listei prin aceasta inlocuire cu inlantuire circulara.
6. Algoritmul LRU (Least Recently Used)

Asemenator cu NRU, dintre toate pag. care n-au fost fol. Recent, o fol.
pe cea care a fost fol. Cel mai demult in timp, optimizam LRU a.i. sa
ajungem la un optim in ceea ce priveste neutilizarea paginii;
IMPLEMENTARE: le urmarim intr-un interval mai scurt decat o
perioada de ceas! DE CE?
Deoarece paginile care au fost foarte mult folosite/referite la cele mai
recente instructiuni din trecut, conform principiului localizarii
temporale, probabil vom mai avea nev. de ele tot la fel de intens si-n
urmat. cateva instr. Deci pagina care n-a fost utilizata de cel mai mult
timp ( de care n-a fost nevoie de ea de un interval de timp CEL MAI
MARE , nu MARE) este cea care este eliminata. In felul acesta rafinam
NRU, care era o rafinare a FIFO , ajungem mai aproape de
performantele algoritmului optim. Toate variantele de algoritmi care
sunt performante sunt si costisitoare.
Sunt 2 moduri de implementare:
TIP COADA: se face o coada de asteptare (lista inlantuita cu toate pag
existente in memorie si la coada ei se afla paginile care nu au mai fost
referite cel mai demult, iar la varf cele care au fost referite recent); a.i. la
fiecare noua referire noi trebuie sa refacem toata aceasta lista inlantuita
remodificand starile pag.=> o metoda care cere timp

TIP CONTOR(conter): La fiecare noua intructiune care face o referire,


incrementam un contor care spune ca pagina accesata a mai fost trecuta
prin inca un interval de timp (daca o pag. n-a fost necesara timp de 3
perioade, la urmat. perioada 3 devine 4, 4 devine 5, in felul acesta
contorul elimina pagina cu valoarea cea mai mica a contorului – pagina
care n-a mai fost referita de cel mai mult timp, adica la care nu s-a
umblat la contor de cel mai mult timp in urma). Contorul inseamna o
introducere de hardware, asta inseamna un cost suplimentar. Trebuie sa
alegem daca implementam SOFT CU COADA (LENT) SAU HARD
CU CONTOR (COSTISITOARE). Ambele duc la aceeasi
performanta.
AVANTAJ: Acest LRU cu toate ca provine din FIFO dublu modificat
nu mai sufera de anomalia lui belady;
IMPLEMENTARE: 7,0,1 e la fel pt ca RAM era gol, s a umplut cele 3
referire, vine 2 la mom. 4. nu se afla in RAM. PE CINE SCOATEM?-
pe cea care a fost referita cel mai demult in timp , 7 a fost prima referita,
este inlocuita cu 2(identic cu FIFO), vine 0 la mom 5, era inauntru,
continutul ramului se pastreaza, vine 3 , acum nu urmarim cine a intrat
ultima , si cine a fost referita cel mai demult , dintre 2,0 si 1, vedem ca 0
a intrat prima, dar a fost referita la momentul anterior => nu-l eliminam
pe 0. In moemntul cand vine 3 va trebui eliminat 1 , deoarece este si cea
care a fost introdusa cel mai tarziu si mai ales referita cel mai demult
in timp, chiar daca 0 a intrat prima. In aceasta consta imbunatatirea
LRU si daca continuam acest algoritm, pagina referita cel mai demult ( o
gasim cel mai in stanga in sirul de referire) Numarul de page faultul tot
la 20 de referire este de 12 ( mult mai bun decat 15 oferit de FIFO, dar
inca nu la fel de bun la 9 val optima).
LRU are o problema serioasa cand se fol. bucle sau cicluri pe mai multe
pagini ( at. cand se schimba alternativ 2 pagini – se scoate si se introduce
repetat o bucla extinsa in cazul exemplului peste 9 pagini virtuale cu 8
cadre de pagina=> trebuie doar o pagina scoasa)

(a), (b), (c) reprezinta momentele momentele de timp si schema de


deasupra structura paginilor existenta in RAM la acel moment. Primele 8
pagini (7-0) se afla in RAM la mom (a), este nevoia de pagina 8, la
mom. (b) a fost scos 0( n-a mai fost fol. de cel mai mult timp), dupa care
se cere din nou 0, cea pe care am scos-o, asa scoatem pagina 1, s.a.m.d.
In concluzie sirul acesta de comutari intre 2 pagini care sunt solicitate,
face ca algoritmul sa dea page fault de fiecare data, atunci in aceast caz
MRU este cel mai util (FIX OPUSUL). CONCLUZIE :
DEZAVANTAJUL LRU ESTE CA EXISTA CAZURI
PARTICULARE IN CARE DA ERORI REPETATE).
7. ALGORITMUL Random

Scoatem la nimereala o pagina, ESTE CEL MAI SIMPLU DE


IMPLEMENTAT, deoarece nu trebuie verificat nimic. S-ar putea sa
dea rezultate mai bune decat FIFO. Se descurca cel mai bine in cazul
ciclurilor ( cazul de mai sus). Multe implementari fol. o combinatie
adaptiva intre 2 algoritmi in functie de situatia particulara in care se afla.
De ex de la IMB OS/390 foloseste intre LRU si Random- foloseste o
schimbare adaptiva in functie de structura sirurilui de referire.

8. Algoritmul NFU ( not frequently used)


Daca NRU SI LFU se refereau la mometele la care paginile au fost
referite , NFU face fix inversul , se refera statistic la de cate ori a fost
referita fiecare pagina si scoatem una care n-a fost referita frecvent.
Indiferent de momentele de timp de intrare si referire, scoatem pagina cu
cel mai mic numarul de accesari. Pentru a vedea starea unei pagini
implementam contoare, va trebui sa implemetam un contor care sa fie
incrementat la fiecare referire. Contorul care are valoarea cea mai mica
(pagina cu cele mai putine referiri) va fi elimiat. Este un algoritm lent
deoarece trebuie sa incrementam contoarele la fiecare moment pentru
fiecare pagina.

Fiecare algoritm este o imbunatatire a precedentului, folosind avantajele


celui trecut, introducand niste elementele noi care sa elimine
dezavantajele fiecarei variante in parte.
9. Algoritmul Aging (de imbatranire)
Vom tine cont de varsta unei pagini, si o vom elimina pe cea cu varsta
cea mai mare, este derivat NFU, care tinea cont de numarul referitor.
Imbunatatirea consta in faptul ca se ia in seama si timpul, adica referirile
din ultimele n intervale de timp, inca care n-nr de biti pe care lucreaza
procesorul. Daca folosim un contor, deplasarea spre dreapta reprezinta
incrementarea cu o pozitie, dar inainte ca bit ul de referinta sa fie
adaugat in partea din stanga a numarului pe care il reprezinta contorul
unei pagini.
Paginile care au fost cerute de cele mai putine ori, dar mai curand, au
intaietate fata de cele mai au fost mai apelate de mai multe ori dar mai
demult in timp. in felul acesta contorul cu val. cea mai mica este cel
coresp. paginii eliminate.
Pe exemplu: bitul de referinta este 1 daca pagina respectiva a fost
ceruta in utimul interval verificat, si ca urmare le lasam pe toate
cele cu 1 , si eliminam o pagina cu 0.
Structura paginilor si a bitilor de referinta pentru un set de 6 pagini la
momentele de timp a,b,…
Situatiile a,b,c,d,e reprezinta starea la un anumit moment. Valorile celor
6 dreptunghiuri de jos ne arata paginile la momentele respentive in cele
6 variante. In partea de sus pt aceleasi 6 pagini avem bitii de referinta la
fiecare moment de timp in parte.
La momentul (a) bitii de referinta pt fiecare pagina ii vedem sus(101011)
ii regasim jos pe MSB in paginile de mai jos( transcrierea pe bitii de
referinta)
Prima tranzitie( fenomentul (a)-(b)) bitii de referinta (R bits) se vor pune
pe MSB la fiecare moment de timp. Noua valoare a contorului va
contine pe prima pozitie bitii de referinta si urmatoarele pozitii bitii de
referinta din momentele anterioare shiftate la dreapta cu cate o pozitie
pentru fiecare moment de timp.
Toate contoarele au fost generate pe pozitile corespunzatoare prin
shiftare la dreapta cu poztitie, ramanand pozitia din stanga libera, acolo
copiind bitii de referinta. La fiecare moment dintre aceste pagini vom
alege pagina cu contorul cel mai scazut, iar daca avem mai valori cu
acelasi contor, o eliminam pe cea cu bitul de referinta 0, la fel ca la
NFU, doar ca tinem cont si de timp. DIntre cele posibil de eliminat (nr
de referire mic) o eliminam pe cea care a fost referita de cel mai mult in
timp in trecut.
Shift right = imbatranirea cu o perioada . Dintre toate cele mai batrane (
contorul cel mai mic ca nr. de referiri) o eliminam pe cea care a fost fol
cel mai demult .

10. Algoritmul WS (Working set)


Setul de lucru ne arata multimea tuturor paginilor care au fost deja
referite pana la momentul T. El tine evidenta bitilor de referinta si de
modificare (R si M ) dar mai introduce un camp al momentului ultimei
accesari (time of last use). Se calculeaza al unui interval page span este
notat τ -reprezinta diferenta dintre momentul actual de timp si
momentul ultimei utilizari. Acea valoare= de cand n-a mai fost
utilizata ultima oara acea pagina se compara cu varsta paginii.
In exemplul de sus :avem tabelul de pagini, fiecare nr. de 4 cifre ne arata
momentul ultimei utilizati, casuta din dreapta este bitul de referinta.
Scanam toate paginile verificand bitul R de jos in sus.
Atunci la eximanarea unei pagini, daca gasim bitul de referinta 1, pagina
a fost referita, vom seta mom ultimei utilizati cu momentul
curent.Ultima utilizare coincide cu momentul curent de timp.
Daca R=0 si varsta paginii > page span, pagina resp. va fi
eliminata(varsta ei e mai mare decat intervalul de verificare).
Daca R=0 si vasta paginii< page span, vom retine cea mai mica valoare
dintre aceste 2( varsta va deveni noul page span).
Scutim de eliminare paginiile care sunt mai tinere decat intervalul de
verificare τ(tau) si le eliminam pe cele care au varsta mai mare decat
tau.(conditie suplimentara)
Cate pagini din setul total am utilizat la ultimele k apeluri de memorie la
momentul t, si vedem ca in partea de jos avem reprezentarea referirilor
la pagina, pana in momentul t1, se face multimea paginilor care au fost
referite (1,2,5,6,7), nu conteaza de cate ori. Stim setul paginilor care au
fost accesate in ultimele k(=10) referiri pana la mom t1. Multimea acesta
tot creste. La t2 ea se reseteaza. Intervalul Δ pe care se calc. referirile
pana la acel mom. se translateaza ca si cand am face o noua origine.
Dupa 6,2,3,4,1,2 am resetat si luam in considerare mai departe de la 3,
deci intr-o alternanta cu repetitie pana la moment t2 doar 3 si 4 s-au
folosit. Setul de lucru se reimprospateaza din cand in cand deoarece la
un moment dat ajunge sa fie egal multimea tuturor paginilor. In acest fel
working setul este baza pt urmat. algoritm.
11. Algoritmul WSClock (Working Set Clock)
Il optimizeaza pe working set cand lista stanga-dreapta liniara s-a
transformat intr-o lista circulara.
Foloseste acelasi principiu ca la Working Set (WS) unde am facut
verificarea liniara (de sus in jos) si am testat conditiile cu bitul R si
comparatia intre varsta si tau τ, acum facem acelasi lucru pe o inlantuire
circulara. Sa zicem ca in momentul curent de timp eram la 2204.
Situatiilr a,b,c,d reprezinta practic momente de timp cu anumite
verificari. Situatiile a,b -pagina verificata are bitul de referinta = 1,
situtiile c,d pagina verificata are bitul de referinta = 0. E ca si cum ne-am
intoarce la alg. clock si acul continue sa ticae si sa mearga in sensul orar
si la momentul respectiv al timpului curent a ajuns la pagina 2014, ii
verifica bitul de referinta, il gaseste 1, asta inseamna ca nu o elimina
fiindca a fost referita, trece mai departe, deci in situatie b, verifica
urmatoare pagina (“ora 5 trece in ora 6”) si 2014 ramane ,dar i se bitul
de referinta 0.
Mai sus e explicat ce se intampla cand se intalneste o pagina
cu bitul de referinta 1

In starile c,d bitul de referinta a fost gasit 0.


A ajuns la 1213, bitul de ref este 0, pagina resp. a fost eliminata, a fost
introdusa noua pagina, ne uitam sus, in mom curent ,era 2204, pagina
care a inlocuit 1213, si s-a pus bitul de ref. 1 pt ca fiind ceruta, ea intr-
adevar conditia R=1. S.a.m.d.
(a) si (b) ne arata o situatie cand o pagina este scutita pt ca R=1.
(c) si (d) ne arata o situatie cand pagina inlocuita pt ca R=0.
Aplicatii in L6B.
Observatie : 1.fiecare nou algoritm a fost derivat din unul din
celelalte adaugand o imbunatatire fata de cel precent si folosind o
rafinare pt a elimina dezavantajele acelui algoritm.
2. Multi dintre ei sunt algoritmi hibrizi, adica sunt combinatie de 2
algoritmi folosind avantajele fiecaruia dintre ele prin combinatie.
3. Fiecare dintre ele a fost comparata cu algoritmul optim.
Algoritmul Belady(optimal) nu este realizabil fizic dar se foloseste ca
referinta (benchmark pt celelalte algoritmi).
Sus la comentarii se vad concluziile la fiecare algoritm in parte, iar in jos
este o comparatie intre algoritmii de inlocuire pe baza numarului de page
fault-uri obtinute la un sir de 1000 de referiri.
La un nr. f mare de referiri putem trage niste concluzii statistice:
Numarul erorilor de pagina cu cat e mai mic, cu atat este mai bine, am
intalnit mai putine mesaje de eroare de pagina => algoritmul a lucrat mai
bine. Se vede in functie de numarul cadrelor de pagina disponibile ,
exact cum am lucrat la anomalia lui Beledic, cate frame-uri avem in
memoria principala, cel mai bine se comporta algoritmul optimal. Pe
masura ce trecem de la un alg. La altul perfomantelor sunt mai bune cu
cat sunt mai apropiate de alg optimal.
Intre LRU si FIFO, CLOCK-ul are o performanta intermediara,
De asemenea cu cat crestem nr cadrelor de pagina din memoria fizica,
adica sanselor ca o pagina noua solicitata sa si gaseasca locul fara sa o
scoata pe alta, ne face sa observam ca acesti algoritmi converg fara sa se
suprapuna.
Curs 13

Segmentarea

COMPARATIE CU PAGINAREA: Segmentarea este tot o operatie de gestiune


a memoriei vrituale si o modalitate de adresare mai eficienta a spatiului de
memorie. Diferenta este ca paginarea nu este accesibila utilizatorului
(programatorului), in timp ce segmentarea este fix opusul (segmentarea fiind un
instrument in plus pus la dispozitia programatorului).

Initial, in mem fizica, toate tipurile de obiecte cu care lucreaza un programator


(stive, metrici, constante, arbori, texte etc) sunt gestionate in acelasi spatiu de
memorie. Cum se vede in imagine, in partea de jos (Symbol table) avem un spatiu
de memorie nepartajat unidimensional, toate se suprapun. Adresa de memorie
incepe numerotarea din partea de jos a imaginii de la 0, iar obiectele cu care
programatorul lucreaza se pot suprapune aici, deci este posibil sa avem dificultati
de gestionare a acestor zone in care se dezvolta si se utilizeaza toate aceste obiecte.
Atunci ideea de segmentare a fost folosita cu scopul de a partajata aceast spatiu de
memorie, de a-l imparti pe segmente separat pentru fiecare obiect. Un
segmen(obiect)t este acum reprezentat in imagine printr-un dreptunghi marcat cu
gri.

COMPARATIE CU PAGINAREA: Daca la paginare, paginile aveau


dimensiune fixa, constanta astfel incat sa poata fi interschimbate si sa fie adus
oricare set din pagina virtuala in pagin reala (datorita faptului ca aveam aceeasi
dimensiune pentru orice pagina virtuala), la segmentare nu se mai intampla acest
lucru. Segmentele sunt de dimensiuni variabile, dimensiunea depinzand de
obiect.

In acelasi program utilizam mai multe tipuri de obiecte si atunci adreseele se


gestioneaza intr-un singur tabel LDT ( Local Descriptor Table ). Daca folosim
aceleasi obiecte in mai multe programe, adresele sunt gestionate de tabele GDT (
Global Descriptor Table ). Astfel, prin aceste tabele, obtinem o zona de memorie
bidimensionala, cele 2 dimensiuni fiind:

- o modalitate de indexare a segmentelor (un segment continand mai


multe obiecte de acelasi tip),
- In cadrul segmentului avem adresa locatiei pe pe care vrem sa o accesam
(a unuia dintre obiecte)

[adresa_segment][adresa_ob_din_segment]
Putem compara aceasta utilizare bidimensionala cu adresare combinata de tip baza
plus deplasamnet, in care baza ar fi categoria de segment numerotat, iar in cadrul
adresei vom avea un descriptor de sgment.
Imaginea din partea de sus ne arata o reprezentare vizuala a spatiilor independente
utilizate pentru gestionarea memoriei pentru toate categoriile de segmente. S-a
constata ca aceste tipuri de segmente (tipuri de obiecte) nu depasesc in total 32 de
categorii, deci in descriptorul de segment vom avea alocat un camp de 5 biti pentru
tipul segmentului.

In cadrul segmentului se mai acorde niste atribute obiectelor:

- Protectia: se refera la gradul de acces pe care aplicatia din sist de operare


il acorda unui obiect. Aceste niv sunt numerotate de la 0 la 3, in care
gradul cel mai inalt de protectie il are nivelul 0 (nucleu SO), apoi niv 1
(apeluri ale SO), nivel 2 (biblioteci dinamice) si nivel 3 (program
utilizator).
- Prioritatea: Niv de prioritate sunt numerotate tot de la 0 la 3.
Memoria virtuala la Intel Core i7

Exemplu de descriptor de segment al procesorului Intel Core i7:

In partea de sus avem REGISTRUL SELECTOR: El este cel care selecteaza


segmentele cu care se lucreaza. In cazul particular al acestui procesor, registrul
selector are 16 biti:

- Pronind de la MSB observam ca avem 13 biti index (cei care indexeaza


segmentele)
- Urmatorul bit (GDT/LDT) care ne spune daca acel segment este parte
dintr-un tabel local (LDT) sau dintr-un tabel global (GDT)
- Ultimii 2 biti ne specifica nivelul de PRIORITATE
In partea de jos a imaginii avem DESCRIPTORUL DE SEGMENT care ne da
practic structura segmentului. In cazul lui Intel Core i7 avem un descriptor pe 32b
alcatuit din baza (primii 16 biti din stanga) + deplasament (urmatorii 16 biti).

In cadrul bazei avem din nou o deplasare de tip baza (bitii 24-31 din stanga) +
deplasament (bitii 16-19) la care se mai adauga cativa biti suplimentari (bitul G –
ne spune daca deplasamentul notat cu LIMIT este exprimat in octeti sau in pagini;
bitul D – ne spune daca segmentele sunt pe 16 sau 32 de biti; apoi urmeaza un
camp neutilizat). Ordinea este baza + alti biti + deplasament.

In cadrul deplasamentului avem un bit P (acesta ne indica prezenta segmentului in


memorie), apoi avem un camp DPL pe 2b (care ne indica prioritatea) apoi avem
campul TYPE pe 5b (care ne indica tipul segmentului si niv de protectie), urmat de
deplasament.

Convrsia perechii (selectro, deplasament/offset) in adresa liniara


Din registrul selector se preiau adresa de baza, deplasamentul si alte campuri cu
ajutorul carora descriptorul va da baza la care offset-ul se va adauga pt a obtine
adresa liniara pe 32b.

Se interfereaza segmentarea si paginarea? Da, depinde de producator si de


modul de configurare al memoriei virtuale. La procesoare diferite pot sa existe una
dintre cele 3 variante:

1) Paginare pura: se foloseste DOAR paginarea, fara segmentare


2) Segmentare pura: se foloseste DOAR segmentarea, fara paginare (este
foarte rara)
3) Segmentare paginata: in care la mem virtuala trebuie sa se tina seama si
de gestionarea paginilor si de gestionarea segmentelor

Cum se realizeaza obtinerea adresei liniare din mem virtuala care trebuie
mapata in adresa fizica din memoria principala a i sa vedem cum lucram cu
directorul de pagini, tabelul de pagini si frame-ul de pagini?
Vom obtine tot o adresa liniara pe 32 de biti impartita in 3 campuri:

- DIR (director) 10b


- PAGE (pagina) 10b
- OFF (offset) 12b

Campul DIR va fi pus in corespondenta cu directorul de pagina, in acest fel


directorul de pagina avand 2^10=1024 locatii. In acele locatii se gasesc informatii
cu ajutorul carora vom accesa tabelul urmator (tabelul de pagina). Tabelul de
pagina este pus in corespondenta cu campul PAGE, deci are tot 2^10 = 1024 de
locatii . Cu informatia gasita intr-o locatie din tabelul de pagina COMBINATA cu
offset-ul vom gasi in interiorul unui cadru de pagina (frame page)
informatia/cuvantul dorit.

Exemplu de paginare segmentata


Acest exemplu ne arata cum se folosesc impreuna segmentarea si paginarea.

Adresa logica din memoria virtuala este alcatuita din perechea selector-offset (din
partea de sus din stanga). Selectroul se duce in tabelul corespunzator LDT sau
GDT, de unde culege descriptorul de segment de care are nevoie, unde impreuna
cu offset-ul formeaza adresa de baza a segmentului, care, in spatiul adreselor
liniare, ne va da o informatie de adresa de linie. Adresa de linie a segmentului
este alcauita din DIRECTOR, TABEL si OFFSET. Campul DIR ne da o intrare in
directorul de pagina, de unde vom lua info cu care, impreuna cu biti de tabel din
adresa liniara, vom face o adresare in tabelul de pagini. De aici vom lua o intrare
care ne va da o adresa fizica din spatiul de adresare fizica.

Tot ce este in partea stanga si tine de contruirea adresei tine de SEGMENTARE,


iar tot ce tine de contruirea adresei fizice tine de paginare.

Implementarea segmentarii
La segmentare, problema se poate pune initial la fel ca la paginare: ce se intampla
daca vrem sa inlocuim un segment cu altul? Unde il punem, avand in vedere ca nu
au aceeasi dimensiune tooate segmentele?

La segmentare, la inlociuri vor ramane spatii libere (GAURI).

Exemplul din figura: instantele (a), (b), (c), (d), (e) reprezinta structura de memorie
(pe 32 de biti ) de gestionare a segmentelor la mom de timp succesive.

Intre fig (a) si (b) vom inlocui segmentul 1 cu segmnetul 7. Seg 1 are 8k,
segmentul 7 are 5k. In acest fel, prin inlocuire se creeaza o gaura de 3K (plasata
deasupra lui seg. 7 pt ca numerotarea este facuta de jos in sus in acest exemplu).

Intre fig (b) si (c) vom inlocui segmentul 4 cu segmnetul 5. Seg 4 are 7k,
segmentul 5 are 4k. Astfel vom crea o gaura de 3k plasata deasupra segmentului 5.

Intre fig (c) si (d) vom inlocui segmentul 3 cu segmnetul 6. Seg 3 are 8k,
segmentul 6 are 4k, realizandu-se astfel o a treia gaura.

Intre fig (d) si (e) vom realiza o compactare prin care vom realiza o gaura unica
(prin insumarea dimensiunii tuturor gaurilor existente) care va fi plasata in varf.
Acest pas este util pentru ca memoria poate fi asignata mai usor daca avem o
singura gaura de dimensiune mare in loc sa avem mai multe gauri de dimensiuni
mici. De altfel in cazul unui nr mare de gauri cu dimensiune mica, exista riscul ca
anumite segmente de dimensiuni mari sa nu mai poata fi introduse. De aceea este
necesara aceasta compactare.

Intrebarea se pune si cum inlocuim segmentele, pe ce principiu introducem un


segment intr-un anumit spatiu liber sau in altul si cum completam gaurile care se
creaza
Algoritmi de înlocuire a segmentelor:
• best fit – cea mai bună potrivire (eficient- nu lasa nicio gaura in urma, se
verifica toate gaurile disponibile – figura d , se verifica ce pozitii au in
spatiul de adrese si ce dim si se cauta daca exista o gaura exact de
dimensiunea segmentului nou care vine. D aca vine un segment noi de 3 4
K, va gasi o astfel de potrivire.Este cam lent fiindca trebuie sa verifice tot
spatiul de adresa sa vada cate gauris sunt, unde sunt si de ce dim.)
• first fit – prima potrivire (rapid- cand vine un segment nou, ia de la baza, in
partea de jos, adresele in ordine crescatoare, verifica dim gaurilor si se
opreste la prima potrivire nu neaparat exact, dar acolo unde incape
segemntul. Daca seg nostru are 2 sau 3 K se va opri la primul segment in
care are loc, segment de 4 5 6, dar lasa gauri)
• next fit – următoarea potrivire după înlocuirea anterioară (rapid- sa nu mai
pornim de fiecare data de la adresa de jos, ci de la ultima inlocuire, nu mai
trebuie verificate toate locatiile)
• worst fit – cea mai proastă potrivire (lasă în urmă gaura cea mai mare, pune
segmentul in cea mai proasta potrivere,unde va ramane cel mai mult spatiu,
Un segment de 2 K va fi pus in gaura de 6 K, astfel mai lasa spatiu pt
urmatorul segment)
• random – înlocuire aleatoare (simplu, dar ineficient- gaura este aleasa la
intamplare)
Compactarea = defragmentarea externă a HDD, operaţie realizată după un număr
mare de înlocuiri

1. Memoria virtuală în sisteme de operare Unix:


Proces singurar -> o singura dimensiune la spatiul de memorie.
Spaţiul de adresă liniară la un proces Unix singular
Porneste de la ideea ca numeroteaza la fel adresele 0 jos pana la adresa maxima in
partea de sus si face inlocuirile succesive in directii diferite. Codul este pus in
partea de jos, stiva este de la adresele mari in jos, datele sunt puse in al2 lea spatiu
de jos in sus si tot asa pana toate se ocupa.
Face o gestionare a adreselor liniare, astfel incat spatiile libere sa se concentreze pe
mijloc si sa se diminueze pana la gradul de ocupare dorit.

2. Memoria virtuala la Motorola

Structura adresei liniare la Motorola 68×××: paginare pură, separarea pe 3 niveluri


de tabele
Procesoarele pe 68 folosesc paginare pura, adica fara segmentare, dar, datorita ca
dimensiunea adresei liniare este considerata mare pentru o gestionare usoara, si in
loc sa gestioneze spatiul de adresare liniara prin tabele pe 9 biti, imparte acesti 9
biti in 3 subcategorii. Foloseste o adresare tripluindexata pentru a gestiona mai
bine niste spatii cu mai putine intrari. Adica decat sa lucram cu un sg tabel cu 9
biti, mai bn lucram cu 3 tabele A,B,C. Tabelul A este adresat pe 4 biti => 2^4= 16
intrari. Cand se da valoarea din campul A al adresei liniare, ea adreseaza tabelul A
unde gaseste o noua adresa care este adresa cu care se face referire la tabelul B
(hasurata) . Tabelul B este pe 3 biti => 2^3 = 8 intrari. In acesttabel se gaseste la
adresa specificata in campul B, adresa care reprezinta de fapt adresa pt a 3 a
indexare, referirea la tabelul C. Tabelul C etse pe 2 biti => 2^2= 4 intrari. La
randul lui, in zona hasurata se gaseste valoarea care va constitui baza pt formarea
adresei. Deplasamentul este format de cei 11 biti din campurile LSB din dreapta
din adresa liniara. Deci se prefera sa lucreze cu mai multe tabele, dar cu mai multe
intrari pentru a fi gestionate mai usor.

5. Memoria virtuala la Sun SPARC


• Adrese virtuale pe 32 de biți translatate în adrese fizice pe 36 de biți;
• Tabele de pagini pe trei niveluri (index1, index 2, index3);
• Tabel contextual anterior indexat după ID-ul procesului;
• Tabelele de pagini au: 256 (28), 64 (26) și, respectiv, 64 (26) intrări;
• Pagini de 4 Kb.

Structura adresei liniare la Sun SPARC: paginare pură, separare pe trei niveluri de
tabele
Folosesc adrese virtuale pe 32 de biti, care sunt translatate in adrese virtuale pe 36
de biti.
Blocul care se ocupa de translatarea adreselor din adrese virtuale in adrese fizice
este TLB- translation look asigne Bar
Tabelele sunt tot in numar de 3 => 3 nivele de indexare, in figura index 1 2
si 3 de 8, 6, 6 biti si exact la fel ca la motorola dar cu alte dimensiuni, aceasta
adresare se face pe 3 niv de tabele, dar au alt numar de intrari. Tabelul contextual
este acela care practic ne ajuta la formarea bazei in adresa fizica, din tabelul
contextual se alege o adr specificiata in campul context, care adreseaza primul
nivel de tabele => 64 de combinatii. De acolo se ia continutul care cu ajutorul
indexaraii, in al 2 lea niv de tabele va lua o alta adresa, care cu ajutorul inxului 3
va forma o alta indexare in nivelul al 3 lea din table, de unde cu val gasita acolo,
combinata cu deplasamentul, ultimii 12 biti se formeaza in felul acesta adresa
fizica.

4. Memoria virtuală la CPU ARM OMAP4430

Tabelul de translaţie a adreselor şi structura blocului TLB la CPU ARM


OMAP4430
ASID = identificatorul spaţiului de adrese (Address Space IDentifier)
TTBR = registrul de bază al tabelului de translaţie (Translation Table Base
Register)

O combinare-segmentare paginara, deci o paginare segmentata


Contine 2 nivele de indexare a tabelelor. Nivelul 1 in stanga de 12 biti,
nivelul din dreapta de 8 biti si deplasamentuld e 12 biti => o adresa liniara tot pe
32 de biti. Impreuna cu info gasite in registrul de baza al tabelului de traslatie (acel
TTBR) cei 12 biti vor face o adresare in primul tabel de descriptor de segment,
unde impreuna cu informatia din al 2 lea camp din tabelul de pagini, va face o
adresare celui de -al 2 lea nivel unde se gaseste nivelul 2 de descriptori, unde val
resp de 20 debiti se copiaza ca adresa fizica de descriptor de pagina, iar
deplasamentul se face coborand cei 12 biti din dreapta din tabelul de pagini. Se obs
ca tabelul de pagini este asa cum am discutat la paginare, alcatuit din MMU, el
trebuie sa intervina, deoarece in mom cand se face aceasta translatie de la adresa
virtuala la adresa fizica, s ar putea ca segmentul respectiv sa nu se afle in memoria
principala, atunci blocul TLB care face aceasta translatie, va da un mesaj de eroare.
Daca TLB ul da ratare, inseamna ca trebuie sa intervina MMU. TLB este
implementat fizic in blocul hardware memory management unit, detaliile le vedem
in partea dreapta. Acolo avem un camp de validare care ne spune de prezenta sau
absenta segmentului, zona de pagina virtuala, zona de pagina fizica, diversi
indicatori de tip Flag, si avem un camp denumit ASID - adress stage idendifier care
ne spune tot asa, in care din dpatiul multidimensional de segmente ne aflam.
Avand in vedere ca MMu intervine pe partea hard cand TLB da ratari, sa ne
gandim Temă: explicaţi cum intervine tabelul de pagini în cazul unei erori TLB
(TLB miss).

Formarea spatiului de adresa virtuala dar vazut ca zona de


spatiu de memorie.

In partea de sus este adresa virtuala iar jos este adresa fizica.
Cum este partajata aceasta memorie?
R: pentru fiecare categorie de pagini se gaseste un spatiu distinct, adica se
gestioneaza paginile virtuale de dim 4 K, prin gestionarea drr virtuale de 32 de biti,
intr o formula de 20+12 +> 2^12 = 4K . Acolo se gestioneaza paginile din
memoria principala de dim 4K dar el accepat si ideea sa exista pagini de 64 de K
de 16 M, deci accepta ca dim sa poata fi schimbata pe categorii. Daca presupunem
4 categorii, la fel seintmpla si cu adr fizice pe 32 de biti, sunt gestionate in 4
categorii dif in fct de dim paginii cu care se lucreaza, adusa din mem virtuala in
mem fizica => 4 tipuri de traslatii de adrese din spatiul virtual in cel fizic.
Comparatie intre paginare si segmentare:

consideraţie paginare segmentare

Programatorul ştie de existenţa sa? nu da

Câte spaţii liniare de adresă există? 1 mai multe

Spaţiul de adrese virtuale poate depăşi


dimensiunea memoriei? da da

Tabelele de dimensiune variabilă pot


fi gestionate uşor? nu da

De ce a fost inventată tehnica? pentru simularea pentru a furniza


memoriilor mari mai multe spaţii de
adrese

Paginarea este apanaj exclusiv al sistemului de operare, programatorul in


timpul lucurului cu un program nu vede acest procedeu. Segmentarea o vede si se
si foloseste tocmai pt a getsiona zonele de memorie, sa fol un spatiu bidimensional.
In cazul paginarii, exista un singur spatiu liniar de adresa, pt ca toate
paginile au aceesi dim, la segmentare mai mult, pentru ca si in cazul in care se
lucra pe categorii diferite de segmente, ele se gestioneaza separat prin acea
adresare intre registrul selector si descriptorul de segment.
Spatiul de adrese virtuale depaseste dimensiunea memoriei in ambele cazuri,
putem gestiona un spatiu care sa ne permita sa ne exitndem mult peste ce este
oferit de catre memoria RAM.
La paginare tebelele de dim variabila nu se gestioneaza usor deoare paginile
ar trebui sa aiba toate aceeasi dimensiune. Chiar pe ex de sus, daca avem dim
variabila de pagini, si avem 4 spatii diferite si 4 tipuri de traslatii diferite in fct de
dim paginii. Cel mai usor se gestioneaza operatia de paginare cu o singura dim
fixa, care inseaman un tabel cu dim ct. La segmentare este usor fiindca se
presupune de la inceput ca au dim diferite si fiecare tip de sg (ct, matrice, tabel,
text) sunt getsionate separat in fct de dim lor.
Pentru paginare => am vz c ain anii 80 familia intel x86 este limitata la niv
M octetilor si astfel erat nevoie de simularea unor memorii mai mairi. Pentru
segmentare => ca s anu putemi intr-un singur cos toate segmentele si pt a le
getsiona mai usor si pt a realiz aun spatiu multidimensional.

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