Sunteți pe pagina 1din 69

Magistrala [Bus] (Structura John von Neumann)

Magistrala (Bus-ul) calculatorului realizează conexiunea între diferitele dispozitive ale configuraţiei şi
asigură comunicaţia dintre acestea, referitoare la transmisia datelor şi informaţiilor de comandă şi
stare. Fizic magistrala este implementată la nivelul plăcii de bază (cazul PC), iar, mai rar la anumite
tipuri de calculatoare poate conţine segmente flexibile, pentru legatura între plăci electronice sau
subansamble de plăci (configurate în sertare sau dulapuri).

Performanţele magistralei se referă la cantitatea de informaţie care poate fi transmisă la un moment


dat (număr de linii de semnal) şi la viteza de transmisie respectivă.

Magistrala propriu-zisă conţine căile căile de transmisie a semnalelor electrice (conexiuni). Pentru
funcţionarea acesteia sunt necesare dispozitive specifice (circuite integrate), grupate sub denumirea
de cipset care au rolul de a asigura trasmisia efectivă a semnalelor electrice, dar şi funcţionarea
protocolului de comunicaţie, pentru diferite regimuri de funcţionare.

Comunicaţia pe magistrală este diferită de simpla transmisie unor semnale electrice pe o linie
(conductor electric). În cazul liniei se consideră că la un capăt al liniei se găseşte un emiţător, sau
transmiţător, iar la celălalt capăt se găseşte un receptor. Primul se comportă ca o sursă de energie,
iar celălal ca un receptor. Dacă emiţătorul este o sursă de tensiune, acesta va debita curent către
receptor.

În cazul magistralei nu este importantă energia, ci informaţia trasmisă. Deci, în acest caz
transmiţătorul trebuie să furnuzeze suficientă energie (de fapt suficient curent, pentru că emiţătorul
se comportă ca o sursă de tensiune) pentru ca starea receptorului să se schimbe. Deci puterea
transmisă pe magistrală trebuie să fie capabilă să comande receptorul într-o manieră corectă, deci să
asigure imunitatea la zgomotul electric care apare datorită cuplajelor capacitive sau inductive cu alte
surse.

Dacă un dispozitiv nu este capabil să susţină curentul cerut este necesar ca pe linia de transmisie să
fie intercalat un amplificator de curent (buffer amplificator de curent).

Spre deosebire de o linie electrică care transmite semnale continui, transmisia pe magistrală se
realizează în impulsuri, într-o manieră secvenţială. Adică, la anumite momente de timp
transmiţătorul îşi schimbă starea ieşirii, având drept consecinţă schimbarea stării receptorului.
Această comunicaţie trebuie să dureze un timp cât mai scurt. De aceea, apariţia acestui eveniment
(schimbarea de stare) trebuie memorată la nivelul receptorului. Pentru ca circuitele de comandă ale
emiţătorului să nu depindă de viteza de transmisie pe magistrală, informaţia (schimbarea de stare)
furnizată acestuia trebuie memorată si la nivelul emiţătorului. Rezultă că dispozitivele care sunt
conectate la magistrală trebuie dotate cu circuire de memorare (registre de memorie tampon, sau
registre latch), atât la emisie cât şi la recepţie. Deci magistrala trebuie să asigure transmisia
informaţiei de schimbare de stare, de la emiţător la receptor. Starea unei linii low (jos) sau high (sus)
reprezintă semnificaţia unei cifre binare (bit) „0” sau „1”. Pe magistrală sunt transmise date,
purtătoare de informaţie. Astfel, starile de la iesirea dispozitivului emiţător sunt transmise
receptorului. Pe magistrală se transmit simultan grupuri de stări (sau biţi), corespunzătoare
cuvintelor de date prin care este codificată informaţia. Deci, tronsonul pentru transmisia de date al
magistralei conţine un număr de linii corespunzător lungimii cuvântului de date (8, 16, 32, 64 de biţi).

Dispozitivele conectate la magistrală trebuie identificate şi la, un moment dat, trebuie stabilită
calitatea de emiţător sau receptor (un anumit dispozitiv poate transmite sau primi date).
Identificarea dispozitivelor sau zonelor de memorie între care se realizează comunicaţia se face prin
codul de adresă. Pe liniile de adresă ale magistralei este trasmis un cod care va activa un anumit
dispozitiv, registru sau o anumită locaţie (cuvânt) de memorie.

Stabilirea calităţii de emiţător sau receptor se face cu ajutorul unor semnale de control (comenzi),
trasmise pe anumite linii speciale. Dispozitivul care controlează magistrala (secvenţa de comunicaţie)
poartă denumirea de master. Este posibil ca si alt dispozitiv să ceară controlul magistralei (deci să
obţină calitatea de master).

Începerea unei secvenţe de comunicaţie impune ca magistrala să fie liberă. Dacă se impun
comunicaţii datorate unor evenimente exterioare imprevizibile (asincrone), cererea de comunicaţie
este transmisă pe linii de comandă speciale (linii de cerere de întrerupere externa) către procesor,
care joacă rolul de master în majoritatea timpului.

Este posibil ca, la un moment dat, să existe mai multe cereri de întrerupere simultane. În acest caz,
trebuie stabilită care dintre comunicaţii va fi realizată prima, prin intermediul unui disapozitiv numit
arbitru de priorităţi.

Protocolul de comunicaţie pe magistrală reuneşte totalitatea secvenţelor de comunicaţie (de


începere, încheiere şi sincronizare a transmisiei datelor). Protocoalele de comunicaţie sunt specifice
tipului de calculator, plăcii de bază şi dispozitivelor conectate la aceasta.

Magistralei foloseste anumite circuite speciale de comunicaţie ca, de exemplu, circuitul DMA (Direct
Memory Access). Acesta asigura controlul magistaralei, sincronizarea, generarea secvenţelor de
început şi sfârşit, pentru realizarea transmisiei de informaţie cu viteză mare, sub forma pachetelor
(masivelor) de date între diferite dispozitive periferice şi memoria RAM, fără implicarea procesorului.
De regulă, acest tip de transfer se face între hard-disk (sau alte memorii de masa) şi memoria RAM.

Conform celor arătate, magistrala de comunicaţie, considerată ca ansamblul de căi de semnal şi


circuite electronice de control, trebuie să conţină următoarele componente (organizate sub formă de
circuite integrate mai mult sau mai puţin distribuite):

- amplificatoare de magistrală (buffer);

- registre tampon (latch);

- circuite de intrerupere externa;

- arbitru de priorităţi;

- circuite de sincronizare;

- circuite DMA;

Semnalele transmise pe magistrală au de regulă următoarea funcţie semnificaţie şi notaţie (pentru


calculator cu un cuvânt de date şi de adresă de 32 de biţi):

- conexiunile de date (D0,D1,…,D31);

- conexiunile de adresă (A0,A1,…,A31);

- linii de comandă
- comanda de scriere şi citire în memorie sau regiştri (Read şi Write);

- cerere control magistrală (BUSRQ – BusRequest);

- acceptare control magistrală (BUSAQ – BusAcknowledge);

- cerere de întrerupere (IRQ – Interrupt Request);

- acceptare cerere de întrerupere (IAQ – Interrupt Acknowledge);

- semnale de identificatre a stărilor procesorului (M1 pentru primul ciclu masină).

Conexiuni interne

Latch

date
Receptori Buffer Receptori
adresă date comenzi

Linii adresă
Linii date
Linii comandă

Conexiunile unui dispozitiv la magistrală

Fiecare dispozitiv trebuie dotat cu registre „latch” pentru memorarea datelor şi circuite electronice
pentru transmisie şi recepţie.

Conexiunile la liniile de date trebuie să fie bidirecţionale pentru orice dispozitiv care transferă date în
ambele sensuri. Trebuie menţionat că datele transmise nu reprezintă numai informaţiile necesare
execuţiei programului, dar şi cele legate de starea sau comanda unui dispozitiv.

Conexiunea la liniile de adrese se face cu circuite de emisie în cazul dispozitivelor de tip master şi cu
circuite de recepţie pentru cele de tip slave. Registrul de tip latch se comportă ca un grup de celule
de memorie corespunzătoare unui grup de biţi (cuvânt de date).

Întreaga structură a calculatorului se bazează pe celule de memorie care au capabilitatea de a


transmite date între ele. Acestea sunt organizate fie în cadrul unui banc de memorie (circuit integrat
utilizat numai ca memorie), fie sub forma registrelor prezente la nivelul procesorului sau a altor
dispozitive. Conexiunile se fac fie direct la magistrală, fie în interiorul dispozitivului. Fiecare celulă
conţine, de fapt o celula de tip latch şi eventual circuite (amplificatoare) de emisie/recepţie.

Carcateristic pentru conexiunea de tip magistrală este posibilitatea de comunicaţie în ambele sensuri
şi posibilitatea ca mai multe dispozitive să fie conectate electric împreună (in paralel), pe aceleaşi
linii. De exemplu, dacă am avea două dispozitive A şi B conectate la o linie, atunci când A transmite
informaţie lui B, A se va comporta ca un emiţător şi B ca receptor. Dacă se doreşte comunicaţia
inversă, de la B la A rolurile se vor schimba. Rezultă că, pentru a fi posibil acest lucru, trebuie ca la
linia respectivă să fie conectate (în acelaşi timp) ambele emiţătoare şi ambele receptoare.
Conectarea simultană a receptoarelor nu este o problemă deoarece intrările acestora au impedanţă
de intrare de valoare mare şi nivelul de tensiune al liniei nu este afectat. Conectarea simultană a
două emiţătoare nu este însă permisă deoarece ele reprezintă surse de tensiune comandate. Dacă
iesirea unui emiţător se află la un moment dat în starea sus, iar a celuilalt în starea jos, primul va
debita un curent important care va trece prin circuitul de ieşire al celui de-al doilea, lucru nepermis.
Rezultă că emiţătoarele trebuie realizate şi comandate astfel încât acest lucru să nu se întâmple.
Soluţia tehnică este utilizarea ieşirii cu trei stări (three state), şi anume: starea Jos (nivel de tensiune
scăzut), starea Sus (nivel de tensiune ridicat), ambele cu impedanţă de iesire redusă, capabile să
furnizeze sau să absoarbă curent şi starea izolată (stare a 3-a) atunci când impedanţa este ridicată şi
nu mai influenţează nivelul de tensiune al liniei.

Rezultă că transferul bidirecţional al informaţiei se poate realiza prin activarea, la un moment dat, a
unui singur circuit de emisie (având starea Sus sau Jos) şi dezactivarea celorlalte emiţătoare conectate
la linia respectivă, prin trecerea lor în starea a treia (izolată). Atunci când un transmiţător este activ,
poate avea loc o operaţie de scriere (write) într-o celulă de memorie, dacă, bineînţeles, există şi o
comandă de memorare (scriere) pentru celula respectivă. În acest caz se spune că în celula
receptoare are loc o operaţie de citire (read). Atunci un circuit de tip latch îşi schimă starea, conform
cu nivelul de tensiune de la intrare.

Intrare date

Comandă

memorare b b b2 b3 b b b b
0 1 4 5 6 7

Ieşire
date
Registru Latch (paralel) pentru 1 octet (byte)
Buffer
Conexiunea la
Memorar emisie-recepţie
magistrala internă Magistrala
e
(pt.magistrală)
recepţie calculatorului
Latch recepţie
(Magistrala
Latch emisie externă)
Conexiune
Memorare
internă
emisie
Comandă scriere

Pe magitrală

Structura conexiunilor unei celule de memorie la magistrala internă şi externă

În mod obisnuit magistrala realizează comunicaţii bidirecţionale. Există totuşi cazuri când din motive
tehnice sau economice este mai avantajos ca transmisia de informaţie să se facă într-un singur sens.
În acest caz (magistrală de tip Daisy-chain), dispozitivele au intrări şi ieşiri separate atât pentru
emiţătorii şi receptorii liniei de adresă (EA, RA1, RA2, RA3) cât şi pentru emiţătorii şi receptorii liniilor
de date (ED1, ED2, ED3, ED4 şi RD1, RD2, RD3, RD4). O asemenea soluţie este folosită uneori pentru
dispozitivele conectate la acelaşi cuplor (sau interfaţă) cum ar fi unităţile de memorie pe disc (sau
SD-solid disc).

Linii de adrese

EA RA1 RA2 RA3

RD1 ED1 RD2 ED2 RD3 ED3 RD4


ED4
Linii de date

Magistrala de tip unidirecţional (Daisy-chain)

Dacă lungimea magistralei este relativ scurtă în raport cu viteza de propagare a semnalului (şi
stabilizarea nivelului de tensiune), atunci se poate considera că transmisia stărilor este instantanee şi
că în secvenţa semnalelor sau comenzilor nu trebuie să fie introduse întârzieri, sau timpi de
aşteptare.

Un caz special apare atunci când pot exista întârzieri datorită propagării sau viteza de răspuns a
anumitor circuite este mai redusă. De exemplu, timpul de memorare poate fi mai lung decât timpul
scurs între două schimbări de stare a procesorului. In acest caz, cuplorul de memorie trebuie să
introducă semnale de aşteptare (wait) care să prelungească starea de la ieşirea procesorului.

În cazul când timpul de propagare pe magistrală este relativ lung, din punctul de vedere al
procesorului (sau dispozitivului emiţător), nu poate fi cunoscut cu precizie momentul când semnalele
devin stabile la intrările unui dispozitiv. Procesorul ar putea dezactiva semnalul de scriere înainte ca
acesta să se fi propagat până la intrarea memoriei. Atunci sunt necesare conexiuni şi semnale
suplimentare pentru confirmarea sosirii informaţiei de schimbare de stare la nivelul receptoarelor
(magistrală asincronă). Mai jos este dat un exemplu simplificat de magistrală cu protocol de tip hand
shake (asemanator salutului strângerii mâinii). Acesta este asemănător salutului prin strângere de
mână. Pentru aceasta sunt folosite semnalele de sincronizare suplimentare: Send_Data, Data_Sent,
Data_Acepted, Bus_Clear.

Send data
Dispozitiv Dispozitiv
Data sent
“master” “slave”
Data acepted
Bus clear

Semnalele de sincronizare pentru magistrala “hand-shake”

Astfel, dispozitivul Master transmite semnalul de cerere de date Send_Data (“master-ul întinde
mâna”). Atunci când dispozitivul Slave primeşte acest semnal (după timpul de propagare respectiv)
validează (emite) datele pe liniile corespunzatoare şi răspunde cu semnalul Data_Sent (“slave-ul
întinde şi el mâna”). Când semnalul Data_Sent ajunge (după un timp de propagare) la dispozitivul
Master, acesta ia la cunoştiinţă că datele sunt stabile la intrările lui şi îşi poate comanda circuitele
Latch pentru memorare. După aceasta datele nu mai sunt necesare la intrările lui şi este cazul să
înştinţeze dispozitivul transmiţător (care are calitatea de Slave) că acesta poate să elibereze
magistrala, adică să îşi comande ieşirile în starea a treia (de impedanţă mare). Astfel, dispozitivul
Master transmite semnalul Data_Accepted (“îşi retrage mâna”). Atunci când dispozitivul Slave îl
primeşte, acesta va avea confirmarea că datele transmise au fost memorate şi eliberează magistrala,
odată cu transmiterea semnalului Bus_Clear care înştinţează dispozitivul Master că poate utiliza
magistrala. După receptionarea acestui semnal, eliberarea magistralei este confirmată şi din acest
moment dispozitivul Master poate utiliza magistrala, activând emiţătoarele proprii, care până atunci
au fost menţinute în starea a treia.

Noţiunea de magistrală ocupată sau liberă se referă, pe de o parte la starea electrică a liniilor, iar pe
de altă parte la existenţa unei secvenţe de comunicaţie. În cazul „liber”, toate emiţătoarele
dispozitivelor conectate la magistrală sunt în starea a treia (izolată), potenţialul liniei este “flotant”,
adică este la discreţia oricărei surse de tensiune (emiţător) care poate fi activată. In această stare, un
dispozitiv poate commanda magistrala, dacă aceasta doreste. Magistrala este considerată ocupată
dacă o secvenţă de comunicaţie este în curs şi liberă în situaţia contrară. În lipsa unor semnale
speciale, care să indice că există o asemenea secvenţă, situaţia magistralei poate fi detectată fie prin
analiza evoluţiei semnalelor electrice, fie prin alocarea calităţii de Master unui dispozitiv, la un
moment dat.

Performanţele calculatorului sunt determinate, printre altele, de numărul de conexiuni ale


magistralei (lungimea cuvantului de date). Putem folosi denumirea de spaţiu de adresă sau zonă de
adresă pentru numărul de linii utilizate pentru adresare şi spaţiu de date sau zonă de date pentru
cele de date. Cu cât avem un spaţiu de adresă mai mare, cu atât pot fi adresate mai multe locaţii
(cuvinte) de memorie, deci poate fi accesată o memorie RAM mai voluminoasă. Cu cât avem un
spaţiu de date mai mare, cu atât valorile numerelor care pot fi reprezentate cu un cuvânt sunt mai
mari, deci nu este nevoie ca reprezentarea numerelor întregi sau zecimale mari să fie departajată pe
mai multe cuvinte.

Modul de calcul pentru numărul maxim de adrese, ca şi pentru valoarea maximă reprezentată de un
cuvânt, este acelaşi ca pentru evaluarea unui număr binar. Ca şi la reprezentarea binară, pentru o
procesare mai uşoară, numărul de conexiuni folosit reprezintă, de regulă, o putere a lui 2. De
exemplu, o magistrală care conţine 16 linii de adresă poate accesa: 216-1 = 65536 cuvinte de
memorie. Analog, o magistrală care conţine 32 linii de date poate transmite cuvinte cu valoarea
maximă: 232-1 =4294967296. Pentru a lucra mai uşor cu aceste numere, se obişnuieşte ca să fie
exprimate în multipli de biţi, octeţi (bytes) sau cuvinte specifice unui anumit calculator. De asemenea
se foloseşte prescurtarea “b” pentru biţi, “B” pentru bytes şi “W” (word) pentru cuvinte. În această
convenţie, multiplu „kilo” nu reprezintă 1000 de unităţi, ci 1024 de unităţi, corespunzător puterii 10 a
lui 2, adică 210=1024. Rezultă că 65536 cuvinte reprezintă de fapt 64k cuvinte, pentru că: 65536 =
64*1024.

Trebuie remarcat că în cazul calculatoarelor complexe, în această categorie putând fi considerate şi


anumite configuraţii de PC, structura de magistrală poate evolua către arhitecturi de magistrale
multiple, care lucrează cu număr de linii şi viteze sporite. De exemplu, se pot utiliza magistrale
separate pentru perifericele rapide (memoria, placa video sau eventual cuplorul de discuri), şi
respectiv magistrale cu viteză redusă pentru perifericele lente (cuplorul de discuri, cuplor de
imprimantă, interfeţe seriale, etc). Bineînţeles că nici legătura cu memoria RAM, nici conexiunea
DMA nu necesita magistrale separate. Totuşi această structură permite ca unitatea centrală să poată
da comenzi unor dispozitive, în timp ce are loc un transfer DMA şi de asemenea să comunice cu
memoria cu un protocol mai eficient şi cu o viteză mai mare decât cea permisă de magistrala rapidă.

În cazul unei structuri cu o singură magistrală, realizarea ciclurilor DMA trebuie să nu interfereze cu
acţiunea procesorului şi în acelaşi timp, să-şi păstreze eficienţa.
Cuplor Interfaţă Periferie
imprimant serială
lentă
ă
CPU Magitrală lentă

Magitrală rapidă

Cuplor Periferie rapidă


Controler Placă video
discuri
RAM DMA Magitrală unităţi de disc

Conexiune DMA

Structură de magistrală multiplă.

Controlul magitralei (Bus-ului) se face prin circuitele Chip-Set-ului, care au urmatoarele functii:

- Amplificarea semnalelor de iesire ale procesorului;

- Arbitrajul (stabilirea prioritatilor) cererilor de intrerupere externa;

- Arbitrajul (stabilirea prioritatilor) cererilor de control Bus;

- Controlul transferului DMA (direct_memory_acces).


Unit.Centrala (CPU) [Master] Mem.RAM [Slave] Interfa

Unit.Comanda Unit.Aritmetica Reg.D

Reg.S
PC (IP) Reg.Prg. SP (Point.Stiva)
Reg.
Acumulator Reg.Generale

Gen.

Adresa
Blocuri Blocuri Bloc Blocuri Blocuri Blo
MUX DMUX Serv.Int. MUX DMUX M

Adrese

Date

Comenzi

UNITATEA CENTRALA (Procesorul)


Sistemele numerice bazate pe logica binara sau bivalenta, care se conformeaza regulilor algebrei lui
George Boole lucreaza cu variabile binare (biti) cu valori de „0” si „1”, corespunzatoare celor doua
stari de tensiune din circuite numerice (digitale). Daca componentele au functii fixe (operatori logici,
bistabili, registri, numaratoare) circuitul final se numeste „cu logica cablata” si joaca rolul unui
„automat” la care intrarile si iesirile sunt grupuri sau secvente de stari logice. Daca insa, avem o
structura de tip „von Neumann” sistemul lucreaza dupa un program (software), deci cu „logica
programata”. In acest caz componenta (modulul) esential este procesorul (unitatea centrala sau
(CPU-central_processing_unit). Acesta comanda magistrala, lucreaza cu memoria prin modului MMU,
realizeaza operatii aritmetice si logice (“si”, “sau”, etc.), totul sub comanda instructiunilor de
program. Fiecare procesor este caracterizat printr-un set de instructiuni specific. Acestea sunt coduri
binare, sunt decodificate direct de procesor si poarta numele de instructiuni masina. Numarul si
complexitatea lor, alaturi de viteza de executie, definesc performantele CPU. Instructiunile masina
contin operatii realizate de circuitele CPU si pot fi reprezentate alfanumeric prin limbajul de
asamblare, specific procesorului. Programele sursa in care sunt scrise limbajele obisnuite (de nivel
inalt) sunt transformate in forma executabila (fisiere tip “.exe”) prin procesul de compilare. Pentru
fiecare limbaj si un anume procesor trebuie sa existe un program de compilare (compilator) specific,
incarcat si executat de un anumit sistem de operare. Rezulta ca fazele de prelucrare ale unui program
sursa sunt editarea, compilarea, link-editarea (cand este realizata forma binara finala a programului
executabil, cu includerea bibliotecilor necesare care contin programe de sistem, de ex. pt. operatiile
de intrare-iesire).

Programul este alcatuit din codurile instructiunilor, plasate in zona de program a memoriei, la adrese
succesive. Acestea sunt executate in aceasta ordine daca pe parcurs nu apar instructiuni de salt, prin
care continuarea programului, in momentul respectiv, se face la o adresa specificata de instructiunea
de salt (adresa de salt), unde se gaseste segmentul de program cu care se va continua, conditionat
sau nu, in functie de tipul instructiunii de salt. Acesta este un instrument puternic in tehnica
programarii, prin care in functie de diferite conditii, pot fi parcurse diferite ramuri de program.
Realizarea buclelor (cicluri de tip FOR) de program, utilizarea functiilor conditionale (de tip IF),
intrarea in subprograme (subroutine, proceduri sau functii de program) utilizeaza instructiuni de salt
specifice.

Pentru executia unei instructiuni, CPU trebuie sa aduca din RAM codul instructiunii, prin operatia de
“Fetch” (contine codul de operatie si informatiile pt. accesul operanzilor ce trebuie prelucrati). Dupa
executie, CPU comanda (daca e cazul) transferul rezultatului in RAM.

O instructiune de program poate avea ca efect o operatie aritmetica, logica sau un “salt” in program,
la o anumita adresa a unui alt segment de program.

CPU poate avea arhitectura tip RISC sau CISC:

RISC – (Reduced Instruction Set Computer) – cu instructiuni simple si mai putine;

CISC - (Complex Instruction Set Computer) - cu instructiuni complexe si mai numeroase.


In prezent se prefera arhitctura RISC unde instructiunea este descompusa in cat mai multe faze de
prelucrare, executate simultan in module mai simple, dar mai rapide.

CPU, in afara de structurile paralele, contine module care pot realiza functii diferite intr-o maniera
simultana (de ex. operatii in timpul transferurilor la memorie).

Exemplu de Module (Elemente) CPU:

- UC (unitatea de comanda) - gestioneaza organizarea fazelor de executie a instructiunilor si


comunicatia dintre modulele CPU;

- ALU (Aritmetic_Logic_Unit) – Unitatea de calcul aritmetic si logic;

– Registre speciale (PC, SP, SWR, AC), Reg. Generale (A, B, C, D, etc.)

- Modulul MMU (Memory_Management_Unit)

- Modul Servire Intrerupere_Externa (intreruperea hardware);

- Modul FPU (floating point unit) (unitatea de calcul in virgula mobila), pentru operatii cu numere
zecimale reprezentatea cu mantisa (contine cifrele semnificative) si exponent (contine ordinul de
marime, reprezentat printr-o putere a lui 10)

Modulul MMU este foarte importat. El comanda accesul la memorie si realizeaza operatiile
aritmetice necesare re-calcularii adreselor in timpul re-alocarilor (maparilor) in memoria virtuala.

Modulul Servire Intreruperi Externe (vectorizat):

- Primeste semnalul de tip IRQ (interrupt_request) – cerere de intrerupere externa – atunci cand un
alt dispozitiv, altul decat procesorul cere accesul la magistrala pentru comunicatie sau pentru a
deveni “master” pe magistrala (preluarea controlului magistralei);

- Returneaza semnalul de tip IAK (interrupt_aknoledge) dupa ce procesorul (sau dispozitivul “master”
a eliberat magistrala (iesirile lui au trecut in starea izolata cu impedanta mare (starea a-3a);

- Dispozitivul care a cerut intreruperea transmite pe magistrala codul “vectorului de intrerupere”


acesta contine informatia asupra adresei de inceput a programului de servire intrerupere (care intr-o
prima etapa citeste starea dispozitivului).

In cazul mai simplu al intreruperilor ne-vectorizate, dupa aparitia semnalului IRQ unitatea de
comanda face un salt in programul de serviciu la o adresa fixata, specifica procesorului respectiv.

Pentru a avea operanzii disponibili si pentru a realiza diferite operatii sau transferuri intermediare
unitatea centrala este dotata cu un set de registre, care reprezinta celule de memorie pentru un
singur cuvant de date (64 biti, de ex.), cu functii speciale, legate de modul de functionare al CPU sau
rol general (memorii temporare utilizate de programe). Registrii ca si alte zone de memorie sunt
accesati fizic tot prin coduri de adresa, dar in programele de asamblare pot referiti dupa denumirea
lor, ca registri.

Registrele speciale

PC (IP) – Program Counter (Numarator de program) sau Instruction Pointer (Pointer de Instructiuni) –
este incarcat cu adresa instructiunii urmatoare, cea care va fi incarcata din memorie si va fi
executata. Este incrementat dupa fiecare instructiune. Daca se executa o instructiune de salt,
valoarea lui este modificata corespunzator cu adresa de salt.

SP (Stack_Pointer) – Pointerul de Stiva – Contine adresa curenta la care se fac scrierile sau citirile in
memoria de stiva. Este incrementat dupa fiecare scriere (instructiunea “Push”) si decrementat dupa
fiecare citire (instructiunea “Pop”).

PSW (Program_Status_Word) – Contine bitii de stare (Flaguri) – care indica starea CPU (terminarea
operatiilor cu eroare sau depasire (overflow), memorarea “transportului operatiilor aritmetice,
marcarea operatiilor “cu semn”, etc.). In PSW bitii de stare ai programului, memorati in circuite
bistabile (memorie de un bit), pot fi setati sau resetati separat, spre deosebire de alti rgistrii din
sistem, unde scrierea sau citirea se face pentru intreg cuvantul de date.

AC – Registrul “acumulator” este registrul intermediar sau “de manevra” pentru memorarea
temporara unui operator sau rezultat implicit, in anumite operatii in care codul de operatie este mai
redus (contine referinta numai pentru un singur operand).

Registrele Generale (denumite de obicei A, B, C, D, etc.)

Sunt utilizate pentru memorarea temporara a operanzilor sau rezultatelor transferate in sau din
memoria RAM (unde transferul se face cuvant cu cuvant de date). Prezenta simultana a operanzilor
in procesor este necesara pt. efectuarea operatiilor, prin actiunea circuitelor care au functia de
“operator”, prin care se realizeaza operatiile aritmetice sau logice.

Operatiile aritmetice actioneaza asupra grupurilor de biti (cuvinte de date) care reprezinta numere
(operanzi).

Formatul Instructiunii (Cod.Op, Op.1, Op.2), poate fi reprezentat ca mai jos:

Cod operaţie Cod operand A Cod operand B

Codul de operaţie identifica tipul de operatie (reprezentata de un operator si realizata de un circuit


cu rol de operator) sau modul actiune al instructiunii (de ex. un salt in alta zona de program,
conditionata sau nu). Operatia poate fi de tip aritmetic, logic (prelucrare combinata de conditii,
comparatie, etc.)
Codul operanzilor specifica locul din memorie (sau registrul unitatii centrale) unde se gasesc datele
respective. Acesta este reprezentat de o adresa directa sau indirecta (adresa contine o alta adresa
unde se gaseste operandul (adresare indirecta) sau pozitia intr-un sir de date ordonat – adresare
indexata)

Rezultatul instructiunii, din motive de eficienta, de regula nu contine un cod special si este plasat
peste unul dindre operanzi.

Fazele de executie ale Instructiunii (Fetch, Dec_1, Dec_2, Exec, Mem_Rez)

Fazele de executie si numarul lor sunt determinate de structura circuitelor (hardware) sau de
arhitectura respectiva. Pentru a putea realiza cat mai multe operatii rapide in paralel, se prefera
divizarea executiei instructiunii in cat mai multe faze (10-20). In modul cel mai simplu, fazele
principale (fiecare poate contine alte sub-faze) pot fi descrise de:

- Incarcarea codului instructiunii in CPU, prin transferul din zona de memorie de program din RAM
(denumita “Fetch” in terminologia engleza consacrata);

- Decodificarea continutului instructiunii (cod operatie si identificarea operanzilor) (Dec_1);

- Identificarea locatiei operanzilor si aducerea lor din memorie (zona de date) (Dec_2;

- Executia propriu-zisa (Exec), conform codului de operatie, realizeaza operatiile necesare si poate
contine multe faze, in functie de complexitatea operatiei. Pentru marirea performantelor se doreste
ca operatia respectiva sa se efectueza intr-o maniera cat mai combinationala (obtinerea imediata a
rezultatelor, intr-un singur pas).

- Depunerea (memorarea) rezultatului final in memorie (Mem_Rez).

Execuţia instrucţiunilor poate afecta biţii de stare ai procesorului (“Flag-uri”) memorati in registrul
PSW, pentru a putea fi utilizati de instructiunile urmatoare (bitul de transport sau semn) sau de
mersul ulterior al programului (bitul de depasire, de eroare, etc.)

Mai jos este dat un exemplu simplu pt. conexiunile şi semnalele de comandă (minimale), pe
magistrala (bus), la nivelul unei unităţii centrale elementare.
RESET
HOLD
HOLDA
WAIT
BUSRQ
BUSAK
IRQ
IAK
CPU M1
MEM
I/O
R
W

RESET – Comanda “resetarea” procesorului (eliminarea starilor intamplatoare de la pornirea


alimentarii electrice) – Initializarea (aducerea la valoarea zero) a tuturor registrilor si bistabililor
(memorie de 1 bit);

HOLD – Comanda de oprire a unitatii centrale (ramane in asteptare);

HOLDA – Confirmarea primirii comenzii de oprire;

WAIT - Comanda de asteptare a transferului de la memorie (memorii mai lente);

BUSRQ (Bus_Request)- Cerere de control magistrala (bus) – situatia de “Master” de catre alt
dispozitiv (de ex. controlerul DMA);

BUSAK (Bus_Aknowledge)- Confirmarea primirii Cererii de control magistrala;

IRQ (Interrupt_Request) – Cerere de Intrerupere externa;

IAK (Interrupt_Aknowledge)- Confirmarea primirii Cererii de Intrerupere externa;

M1 – Identifica ciclul de comunicatie cu dispozitivele periferice;

MEM – Acces pe magistrala la zona de memorie (are acelasi spatiu de adrese ca si dispozitivele de
intrare-iesire (I/O);

R (Read) – Comanda de citire (din memorie sau registre) – Activeaza iesirile altor dispozitive care
devin surse de tensiune pentru tronsonul de date al magistralei;

W (Write) - Comanda de scriere – comanda memorarea (electronic) datelor existente in tronsonul de


date al magistralei, in memorie sau registrele altor dispozitive.

MEMORIA SISTEMULUI
Realizarea Tehnologica

Mem. Statica – Celulele pt. memorarea bitilor sunt circuite bistabile formate din cate 2 tranzistori
conectati incrucisat.

Mem. Dinamica - Memorarea bitilor serealizeaza in capacitatea de poarta a tranzistorilor cu efect de


camp de tip MOS (metal-oxid-semiconductor) descrisi in cap. “Implementare”. Sarcina se pierde in
timp, de aceea sunt necesare ciclurile de improspatare (refresh), care ocupa o parte din timpul de
acces la memorie.

Nu trebuie facuta confuzia cu memoria (alocarea) Statica si Dinamica din structurile de date ale
programelor care se refera la adresele de alocare ale variabilelor (cu adresa fixata sau nu, in timpul
executiei programului).

Mem. Volatila – isi pierdre continutul in lipsa alimentarii (mem. RAM, de ex.)

Mem. Nevolatila – isi pastreaza continutul in lipsa alimentarii (ex. mem. de masa: HD, SD, SSD, Flash,
dar si mem. de tip ROM).

Mem. ROM (read only memory) – sunt programate (inscrise) in procesul de fabricatie si pot fi numai
citite (sunt si ne-volatile) – utilizate in automatica si in trecut pt. BIOS.

Mem. PROM (programable read only memory) – similare ROM, fabricate fara continut, continutul
este programat (inscris) o singura data, cu ajutorul unui programator.

Mem. EPROM (eraseble programable read only memory) – bazate pe tranzistori MOS speciali
sensibili la lumina, care pastreaza informatia in timp. Memoria poate fi reinscrisa (reprogramata),
numai dupa ce a fost stearsa in totalitate, prin luminarea intensa cu lumina UV (ultra-violeta).

Mem. EEPROM (electrical eraseble programable read only memory) – bazate pe tranzistori MOS
speciali (cu poarta flotanta) care isi pastreaza informatia in timp. Memoria poate fi reinscrisa (la nivel
de cuvant sau de date) prin aplicarea unui regim electric special.

Toate aceste tipuri de memorii si-au restrans utilizarea partial sau total, cu exceptia memoriei
EEPROM care se foloseste in controlere si care a dus la tehnologiile pentru fabricarea memoriilor de
masa electronice (Flash, SD, SSD).

Memoria din sistem este referita ca memorie logica pentru structurile de date din software. Adresele
ei sunt cele care pot apare in programe. Memoria fizica este cea implementata in dispozitivele si
circuitele electronice care formeaza structurile de memorie. Corespondenta de adrese si recalcularea
acestora se face prin modulul MMU din procesor.

Structurile de date alocate sau transferate in memorie lucreaza la nivel de pagina logica sau fizica
(memorie paginata). Organizarea datelor se poate face pe segmente (memorie segmentata).
Accesul se face dupa adresa de baza a segmentului si adresa din interiorul segmentului. Astfel, in
cadrul segmentului (alocarea in segment), calculul si alocarea adreselor se poate face cu un cod
separat, mai scurt, in timp ce codul segmentului ramane fix.

Adresarea memoriei, din ratiuni de tehnica programarii se poate face in mai multe moduri:

Adr. Imediata – Codul instructiunii contine chiar operandul respectiv;

Adr. Directa - Codul instructiunii contine adresa operandul respectiv;

Adr. Indirecta - Codul instructiunii contine adresa la care se gaseste, de fapt, adresa operandului
respectiv;

Adr. Indexata - Codul instructiunii contine un index dupa care se fac adresari succesive, in masivele
mari de date (siruri de date);

Memoria virtuala este cel mai complex si evoluat concept de organizare si acces la memorie.

In modul cel mai simplist si primitiv codul de program ar trebui incarcat incepand cu adresa zero,
pentru ca adresele din program sa coincida cu cele fizice din RAM, in caz ca acestea ar fi suficiente.
Lucrul cu Memoria virtuala permite ca datele sa fie alocate in paginile disponibile ale memoriei RAM,
iar corespondenta adreselor fizice cu adresele din program sa se faca prin recalcularea lor de catre
procesor, prin MMU (memory management unit), prin refacerea referintei (adresa de baza) si
translatarea celorlalte. Acest mod de lucru permite lucrul simultan cu mai multe programe (procese)
si extinderea, oricat de mult este necesar, a spatiului logic de memorie cerut de ficare program. La un
moment dat, de fapt, se lucreaza intr-o pagina fizica de memorie, care corespunde numai unei parti
din memoria logica ceruta de program.

Structurile de memorie fizica din sistem sunt organizate in memorii de tip: RAM, CACHE, STIVA si
MASA. Acestea au functii (destinatii), structuri de date si moduri de alocare (identificarea locatiilor de
memorie) profund diferite.

Memoria RAM

- este memoria operativa a sistemului, gestionata de modul MMU (memory management unit);

- contine zone corespunzatoare codurilor de program (codurile instructiunilor de program) si zone


corespunzatoare datelor prelucrate;

- comunicatie pe BUS (prin: cod.Adr, cod.Date, C-zi Read/Write)

- acces rapid (sute MHz), mai lenta decat mem. Cache;

- acces cuvant cu cuvant (de date) pe BUS;

– Adresabila - similara unui Tabel (Matrice) – necesita Codul de Adresa pe BUS;


Secventa de acces RAM:

Plasarea pe BUS (tronsonul de adrese) a codului de adresa;

Plasarea pe BUS (tronsonul de date) a cuvantului de date;

Activarea comenzii de citire (Read) sau scriere (Write) (BUS tronsonul de comenzi);

C-da – Write - comanda memorarea (electronica) datelor existente in tronsonul de date al


magistralei, in celule de memorie sau registrele altor dispozitive; In timpul comenzii (impulsului)
Write nivelele de tensiune ale codului de adrese si de date trebuie sa fie stabile pe BUS;

C-da Read - Activeaza iesirile altor dispozitive care devin surse de tensiune pentru tronsonul de date
al magistralei; In lipsa comenzii Read conexiunile de date pe BUS ale unui dispozitiv care nu este
adresat, trec in starea de impedanta ridicata, tronsonul de date al BUS-ului putand fi comandat de alt
dispozitiv adresat, care primeste comanda Read.

Meoria CACHE

- este Integrata in procesor;

-Transparenta fata de programe; Gestionata hardware numai de procesor; Poate avea dimensiuni
variabile sau poate lipsi;

- Mai multe nivele (L1, L2, L3) cu functii, timp acces si structura cailor de date diferita.

Pt. fiecare nivel, cu cat timpul de acces este mai scurt cu atat capacitatea este mai mica;

- acces foarte rapid (frecventa de ordinul GHz, datorita distantei de propagare f.scurte);

- acces multiplu - cai de date multiple (cod.instr.+cod date), citiri + scrieri simultane;

– Citirea din CACHE este Asociativa - Cautarea datelor pentru o anumita adresa se face prin cautarea
codului de adresa respectiva, prin comparatii succesive, cu codurile de adresa deja stocate in CACHE;
Structura de informatii din CACHE contine atat cuvinte de date, cat si codurile de adresa la care sunt
memorate datele respective in RAM. La o incercare de citire, procesorul cauta adresa respectiva in
lista adreselor stocate in CACHE. Daca o gaseste, face citirea rapida a datelor corespunzatoare. Daca
nu, citirea se face in RAM si sunt copiate in CACHE atat cuvantul de Date cat si Adresa
corespunzatoare. Daca in CACHE nu exista spatiu disponibil, se elimina unele date stocate, conform
unor algoritmi de inlocuire care lucreaza dupa diferite criterii (de ex. “vechimea” datelor din CACHE).
Se doreste pastrarea datelor utilizate mai recent, in speranta ca programul in lucru va mai face apel
la ele, relativ curand.

Deci, citirea in CACHE se face asociativ, dupa codul de adresa cautat, iar scrierea se face la copierea
datelor (odata cu codurile de adresa) din RAM, eventual utilizand algoritmii de inlocuire.

Memoria de STIVA

- Este utila si eficienta pt. intrarea/iesirea in/din sub-programe, numite si subroutine, proceduri sau
functii de program, etc.;

– Nu necesita Cod de Adresa;


- Accesul este secvential (o structura de date tip LIFO – last_imput_first_output);

- Acces prin instruct: “PUSH” (pentru scriere) si “POP”( pentru citire);

- Zona de memorie este alocata (“mapata”) in RAM (adresa este generata de registrul
SP-stack_pointer)(la write – se incrementeaza SP; la read se decrementeaza SP);

Utilitatea memoriei de stiva este pusa in evidenta la intrarea si iesirea din sub-programele incluse
unele in altele (imbricate). La fiecare intrare intr-un sub-program (care poate avea variabile proprii cu
aceleasi nume ca in programul in care este inclus) trebuie salvate (memorate) valorile variabilelor
(parametrii sub-programului) si cuvantul de stare al programului. La fiecare iesire din sub-program
acestea trebuie restaurate (refacute). Cum ordinea intrarilor in sub-programele imbricate este
inversa fata de ordinea iesirilor, salvarile si restaurarile se pot face simplu si firesc prin utilizarea
instructiunilor PUSH si POP.

Memoria de MASA (disc, SD, SSD, Flash)

- Necesita un cuplor intre BUS si o magistrala speciala pe care pot fi conectate mai multe dispozitive
de memorie de masa;

- Este necesar sistemul de operare si programul utilitar de lucru cu fisiere (de ex.Windows Explorer);

- Structurile de date sunt de tip Fisier (masive mari de date);

- Accesul fizic se face pt. structuri mari de date (sectoare disc, registre extinse de date, pagini de
memorie);

- Programele fac acces la date prin Numele Fisierului;

- Accesul efectiv se face prin directivele Sistemului de Operare, care fac apel la proceduri din
bibliotecile de sistem, care sunt incluse incluse in codul executabil, la faza de link-editare pentru
forma executabila a programului;

Structuri specifice necesare pt. accesul datelor in memoria de masa:

- Lista Numelor fisierelor (extensibila);

- Tabelele de corespondenta (FAT- file allocation table) intre adresele logice (utilizate de programe) si
adresele fizice (locatiile in cadrul sectoarelor de disc sau macro-registrilor SD sau SSD);

- Harta dispozitivului (Map) – contine informatiile zonelor ocupate, libere si modul de adresare a lor.

Toate aceste structuri se construiesc in zone specifice, rezervate in dispozitivul de memorie de masa
(de ex. primele sectoare ale HD)

Operatii specifice fisierelor

- Structura de fisier trebuie creata, iar noul nume trebuie adaugat in Lista Numelor fisierelor;
- La fiecare acces e cauta numele fisierului in lista respectiva (prin comparatii succesive, in mod
asociativ);

- La fiecare operatie de scriere in fisier, se completeaza FAT cu locatiile fizice gasite libere pt. scrierea
datelor si alocate fisierului respectiv;

- La fiecare operatie de citire in fisier se cauta numele fisierului in lista si se recupereaza datele din
locatiile fizice, dupa informatiile din FAT;

- Stergerea fisierelor se face numai prin modificari in lista numelor fisierelor, inregistrarile fizice
raman neschimbate, dar se poate rescrie peste ele, la operatiile urmatoare.

In figura este prezentata schema de localizare si inlantuire a informatiilor structurate ca sectoare pe o


pista a unui hard disk (HD) sau macroregistri in cadrul unei memorii de masa solide (SD). In zona de
inceput a memoriei (sectorul sau registrul zero) se gasesc informatiile corespunzatoare listei de nume
a fisierelor, urmate de cele de localizare a datelor distribuite in zonele gasite libere in harta
memoriei. Cu cat numarul de rescrieri pe disc este mai mare, cu atat zonele gasite libere, pentru
inregistrarea unui fisier, devin mai distribuite si mai imprastiate in volumul memoriei (zona de date
corespunzatoare unui fisier nu mai este continua), accentuandu-se fragmentarea discului sau
memoriei SD. Rezulta ca, cu cat gradul de fragmentare este mai mare, cu atat apare cresterea duratei
de scriere completa a unui fisier nou, datorita cautarii si scrierii zonelor libere gasite si completarii
tabelelor FAT corespunzatoare si cresterea duratei de citire a unui fisier deja scris, datorita accesului
pentru mai multe zone diferite, descrise in tabelele FAT. Deficienta se poate remedia prin procesul de
defragmentare, realizat periodic de sistemul de operare sau comandat de catre utilizator. Acest
proces consta in copierea zonelor fragmentate in zone noi, continue, pentru fiecare fisier. Totusi, in
cazul memoriilor SD, procedura nu este recomandata din cauza uzurii de natura electrica a
dispozitivelor de stocare specifice SD (prin efectul de tunelare in tranzistorii cu efect de camp cu
poarta flotanta MOS, care nu este perfect reversibil, la fiecare noua stocare).

Structura fizica a unei memorii de tip RAM

In memoria RAM (random access memory) localizarea datelor (cuvintelor de date) se face prin codul
de adresa transmis pe magistrala. Structura fizica a unei memorii, de tip 4x4 (4 cuvinte de date a cate
4 biti) poate fi privita ca un „tabel” constand in celule de stocare de cate un bit. Liniile tabelului
corespund cuvintelor de date si sunt accesate simultan, fiind activate prin selectia iesirilor
decodificatorului DEC avand la intrare codul de adresa. La fiecare celula este conectata cate o linie de
scriere si cate o linie de citire. Liniile de scriere sunt intrari de amplificatoare si au impedanta mare.
Liniile de citire sunt iesiri de amplificatoare. Daca amplificatoarele au iesiri cu 3 stari, atunci intrarile
si iesirile de date pot fi conectate impreuna la liniile unei magistrale. Cand semnalul de citire (Read)
este activ iesirile au impedanta redusa si nivel de tensiune corespunzator bitului memorat. Daca
„Read” nu este activ, acestea trec in starea „izolata”, cu impedanta mare si linia magistralei poate fi
comandata de alt dispozitiv.

In mod obisnuit memoria RAM este de tip dinamic, avand avantajul ca pentru memorarea fiecarui
unui bit este necesar numai un cate un singur tranzistor cu efect de camp de tip MOS, spre deosebire
de memoria statica, unde pentru fiecare bit este necesr cate un circuit bistabil, compus din cate doi
tranzistori. Tranzistorul tip MOS (metal-oxid-semiconductor) lucreaza in regim de condensator, prin
capacitatea de poarta. Totusi, dezavantajul memoriei dinamice consta in necesitatea ciclurilor de
refresh (re-improspatare) prin care, periodic, sarcina stocata in tranzistori trebuie refacuta, printr-o
procedura speciala de „re-scriere”, descrisa in Apendice.

b b b b

b b b b
Cod Adresă Reţea de
DEC b b b b celule de
memorie

b b b b

Citire date
D3 D3
Data D2 D2 Data
D1 D1
In D0 D0 Out

Principiul de adresare a unei memorii RAM.


Vcc/2
Preîncărcare
Celula

de 1 bit

Linie cuvânt

Linie de bit
Vcc/2 Vcc/2 Vcc/2
Refresh
Comparatoar
e

MUX

Principiul de functionare a memoriei RAM (de tip dinamic).

Modulul DMA (direct memory acces)

- Este un circuit de tip Master (poate controla magistrala);

- Este cuplat la magistrala (Bus). Este un circuit integrat separat sau integrat structura Chipset-ului,
sau altor module de control a magistralei.

- Realizeaza transferul continuu si rapid pentru structurile de date extinse, intre memoria RAM si
memoria de MASA, sau invers, fara interventia procesorului (CPU). Acestea corespund sectoarelor de
disc sau macro-registrelor memoriei SD. In timpul transferului DMA gestioneaza comanda si
sincronizarea transmisiei (generarea succesiva a codurilor de adresa si semnalele de citire-scriere);

- Inaintea inceperii si desfasurarii transferului modulul DMA trebuie programat si initializat.

Prin procedura de programare, procesorul, sub comanda programului de serviciu DMA, rezident in
sistemul de operare, scrie in registrele speciale DMA datele referitoare la sursa si destinatia
transferurilor precum si cantitatea de date (numarul cuvintelor) care va fi transferata.

Dupa initializare (comanda de incepere transfer) circuitul DMA face cererea de control a magistralei
(prin semnalul BUSRQ-bus_request), asteapta confirmarea eliberarii magistralei (prin semnalul
BUSAK-bus_aknoledge) si apoi incepe procedura de transfer propriu-zis. La terminarea ei activeaza
un semnal de intrerupere externa (IRQ-interrupt_request), pentru cedarea controlului magistralei.
Exemplu (informativ) pentru schema de conexiuni la magistrala si schema functionala a unui circuit
DMA (la nivel de schema bloc de principiu).

-I/OR 1 A7 Ampli DRQ0


DB 0-7 Can 0
40
-I/OW A6 Date DACK0
2
-MEMR A5
39
-MEMW A4 Can 1
3 -IOR
MARK 38 TC
-IOW
READY 4 A3 Bloc R/W
37
HLDA A2 Can 2 DRQ1
5 CLK
ADSTB 36 A1 DACK1
RESET
AEN 6 A0
35
HRQ Vcc Can 3
A0
7
-CS 34 D0
A1
CLK 8 D1
A2
33 Bloc C-dă Arbitru
RESET D2 DRQ2
A3
9 priorităţi
-DACK2 D3 DACK2
32 -CS
-DACK3 D4
10
DRQ3 31 -DACK0
A4
DRQ2 11 -DACK1
30 A5
Schema bloc a controlerului DMA si a conexiunilor la BUS.
DRQ1 D5
12 A6
DDRQ0 29 D6
A7 DRQ3

Apendice
GND – 13
FunctionareaD7memoriei RAM dinamice DACK3
28
Celula de memorie
14
de tip dinamic nu se bazează pe un circuit bistabil. În acest caz informaţia
Ready
(valoarea sau
27 starea descrisă de un bit) corespunde stării de încărcat sau descărcat a capacităţii de
poartă a unui
15
tranzistor MOS. Avantajul major al acestei structuri este faptul că pentru stocarea
HRQ
informaţiei 26
de un bit este necesar un singur tranzistor de tip MOS, deci densitatea celulelor de
HLDA de memorie este mult mai mare.
memorie pe16cip şi implicit capacitatea totală
25 -MEMR

17 -MEMW
24
AEN
Date Date
18
intrare 23 ADSTB ieşire

19
22
TC
20
MARK
selecţie
21

Structura unei celule de memorie dinamică


Această schemă de principiu a celulei de memorie conţine trei tranzistori MOS. Capacitatea de poartă
a celui din mijloc reprezintă elementul de stocare. Ceilalţi doi tranzistori joacă rol de elemente de
comutaţie. Capacitatea de stocare poate fi încărcată sau descărcată dacă tranzistorul de la intrare
este în stare de conducţie. Datele sunt acesibile pentru citire dacă tranzistorul de ieşire este în
conducţie.

În realitate, se utilizează o schemă mai eficientă, la care fiecare celulă de memorie (corespunzătoare
unui bit) conţine numai doi tranzistori MOS, unul pentru obţinerea capacităţii de stocare, figurat cu
un condensator, iar celălalt pentru conectarea acestuia la o reţea de conexiuni, cu o structură
matriceală (figurat printr-un comutator).

Memoria RAM dinamică, deşi poate oferi capacităţi mult mai mari, pentru acelaşi număr de
componente, pune două probleme. Prima se referă la pierderea, în timp a sarcinii din capacitatea de
stocare. De aceea, pentru ca memoria să-şi păstreze conţinutul, sunt necesare cicluri de
reîmprospătare sau „refresh” prin care este regenerată sarcina capacităţilor de stocare.

În al doilea rând, capacitatea tranzistorilor MOS, de dimensiuni foarte reduse (mai mici de un
micron), este foarte mică şi sarcina stocată în aceasta nu este capabilă să comande amplificatoarele
de magistrală.

Atunci când memoria dinamică este în funcţiune, datorită prezenţei unor circuite suplimentare,
ciclurile de refresh, de fapt, sunt realizate odată cu operaţiile de scriere sau citire. Aceasta se impune
datorită faptului că prin operaţia de scriere sau citire sarcina stocată se pierde, fiind distribuită pe
intrările comparatoarelor. Astfel, este necesară o secvenţă de lucru specială, care permite detecţia
prezenţei sarcinii de stocare, la nivelul tranzistorilor MOS şi care acţionează în modul următor:

- înainte de fiecare operaţie de citire, comutatoarele de la nivelul superior generează o


secvenţă de preîncărcare prin care se obţine o sarcină electrică, la nivelul liniei de bit,
localizată de fapt în porţile tranzistoarelor MOS de la intrarea comparatoarelor;
- în momentul când un comutator de legătură cu o capacitate de stocare intră în conducţie
(comandată de linia de cuvânt), sarcinile de preîncărcare se redistribuie în funcţie de starea
de încărcare a capacităţii de stocare. În funcţie de această redistribuire se va obţine o
anumită valoare pentru potenţialul la intrarea comparatoarelor, care vor comanda linia de
ieşire în starea Sus sau Jos;
- refacerea sarcinilor de stocare se face prin închiderea comutatoarelor de refresh. Dacă este
vorba de o operaţie de citire, semnalul este luat de la ieşirea comparatoarelor, bineînţeles
după invalidarea intrărilor şi memorarea temporară a stării acestora. În cazul unei operaţii de
scriere, semnalul este preluat chiar de pe magistrală.

Acest mod de lucru este necesar deoarece, pe de o parte, sarcina de stocare este foarte redusă şi nu
este capabilă, singură, să comande intrările comparatoarelor şi, pe de altă parte, valoarea
potenţialului obţinut prin redistribuirea sarcinii poate fi mai bine controlată.

Atât liniile de preîncărcare ca şi liniile de cuvânt sunt comandate corespunzător cuvântului selectat
prin codul de adresă. Trebuie menţionat însă, că pentru a mări eficienţa procesului de refresh
operaţia de citire se poate extinde la nivelul unui grup de cuvinte, corespunzător unei anumite
structuri matriceale de partiţionare a memoriei, selecţia cuvăntului citit pe magistrală facându-se
prin intermediul unui multiplexor (MUX).
Interfetele de intrare-iesire (I/O)

Interfetele de intrare-iesire sunt dispozitivele prin care sistemul de calcul comunica in vederea
transferului de date. Interfata este cuplata la magistrala (bus) si comunica cu un anumit periferic
folosind cai de comunicatie si protocoale (secvente necesare realizarii unui anumit tip de
comunicatie) specifice. Perifericele pot fi echipamente de intrare-iesire propriu-zise ca de exemplu
consola calculatorului (tastatura + display) sau alte dispozitive ale configuratiei, interne in carcasa
sistemului sau externe, atasate sistemului sau portabile. De exemplu memorii de masa tip hard-discul
(HD), disc optic (CD, DVD), solide (SD,SSD, Flash, Stick), scanere, digitizoare, plottere, proiectoare,
alte dispozitive pentru preluarea sau transmiterea datelor, pentru achizitii de date sau comenzi
electrice, linii de comunicatie externe paralele sau seriale.

Caile de comunicatie sunt de tip magistrala (bus) atunci cand pot fi conectate simultan mai multe
periferice. De exemplu magistralele specifice memoriilor de masa, cele USB, etc. Acestea au alte
caracteristici si performante fata de magistrala propriu-zisa a sistemului (aflata pe placa de baza la
PC) si pot avea conexiuni paralele sau seriale.

Conexiunea paralela este mai performanta, putand transmite simultan mai multi biti (4, 8 sau chiar
intregul cuvant de date al sistemului (64 de biti, de ex.), dar necesita un numar mare de conexiuni,
corespunzatoare numarului de biti transmisi simultan.

Conexiunea seriala la aceeasi frecventa maxima de lucru are capacitate mult mai mica. Nivelele de
tensiune corespunzatoare bitilor de date sunt transmise unul cate unul, sub forma de impulsuri,
corespunzatoare unor intervale de timp dinainte stabilite, dupa o secventa sincronizata (sincrona)
sau nu, cu nu (asincrona) semnal de ceas (CK) de referinta. Transmisia sincrona este preferata pentru
fluxuri mari de date.

Legatura seriala, de regula, foloseste cate un singur conductor pentru fiecare sens de transmisie, deci
este mai economica. De-a lungul evolutiei calculatoarelor, frecventele maxime au crescut si
interfetele paralele au putut fi inlocuite cu interfete seriale (cazul memoriilor de masa (HD sau SD).
Desi mult mai simpla fizic (coexiuni foarte putine), comunicatia seriala necesita protocoale si circuite
mai complicate, legate de „impachetarea” si „despachetarea” grupului de biti (pachet de date)
corespunzator cuvantului de date transmis.

Toate interfetele sunt cuplate cu unitatea centrala si memoria RAM printr-o magistrala a sistemului.
De regula in sistem (si in PC) magistrala este partajata intr-un tronson de viteza mare, care impreuna
cu circuitele de comanda formeaza este numita „nord-bridge” (pentru comunicatia cu memoria si
procesorul video) si intr-un tronson mai lent, numit „south-bridge”, pentru celelalte periferice.

Fiind conectata pe magistrala o interfata trebuie sa contina zone de memorie locala si/sau registri
unde sa fie transferate date, intr-un sens sau altul, cu scopul transmisiei comenzilor, interogarii starii
perifericului si transmisiei datelor. Acestea sunt accesate (localizate) prin codul de adresa de pe
magistrala.

Pentru a putea comunica cu procesorul, prin programele din sistemul de operare sau de aplicatie,
pentru fiecare interfata trebuie sa existe un program asociat (numit program de serviciu sau program
„driver”) care, de regula, trebuie instalat inainte de a face interfata operationala.

O problema foarte importanta este modul de „dialog” intre unitatea centrala si interfata. Inceputul si
sfarsitul unui transfer poate sa aiba un caracter asincron, dependent de anumite evenimente
imprevizibile, legate de starea perifericului. Astfel, in mod imprevizibil, poate apare necesitatea unui
transfer din partea perifericul sau semnalarea unei schimbari in starea sau modulul lui de
functionare. Unitatea centrala trebuie instiintata pentru a raspunde solicitarii in timp util. Solutia cea
mai simpla ar fi interogarea periodica (citirea registrului de stare) a perifericului, prin procesul numit
„polling”. Aceasta metoda ocupa din timpul de lucru al procesorului, interogarile necesare fiind cu
atat mai frecvente cu cat perifericele sunt mai multe si mai rapide. Rezulta ca este necesara o
metoda „asincrona” care sa activeze dialogul cu procesorul numai atunci cand este necesar. Metoda
se numeste „intrerupere externa” si se bazeaza pe un semnal de cerere de intrerupere (IRQ-interrupt
request) care instiinteaza procesorul asupra necesitatii inceperii „dialogului” cu perifericul. Inainte ca
acesta sa inceapa, trebuie ca procesorul sa-si intrerupa activitatea curenta (executia programului in
lucru) si sa elibereze magistrala (iesirile catre magistrala trebuie trecute in „starea a 3-a”, cu
impedanta mare) pentru comunicatia cu perifericul, care la randul lui trebuie instiintat printr-un
semnal de confirmare a acceptarii cererii de intrerupere (IAK-interrupt acknowledge).

Rezulta ca atat interfata cat si procesorul trebuie dotate cu module specializate de generare a cererii
de intrerupere (la nivelul interfetei) si de servire a cererii de intrerupere (la nivelul procesorului).
Secventa de servire a cererii de intrerupere trebuie sa permita transmisia informatiilor
corespunzatoare identificarii perifericului si a programului de serviciu. Acestea se transmit pe
tronsonul de date al magistralei, de catre interfata (dupa ce a fost sub forma eliberata magistrala si
emis semnalul de confirmare IAK) sub forma „vectorului de intrerupere”, cuvant de date care contine
informatia de adresa a programului de serviciu.

Utilizarea vectorului de intrerupere permite existenta unei singure conexiuni de cerere de intrerupere
(IRQ) pentru mai multe periferice. Daca exista cate o conexiune separata pentru fiecare periferic
apelul programului de serviciu se face pe baza unei adrese fixate la nivelul sistemului de operare sau
structurii procesorului (in cazul µ-Controlerului). Conexiunea separata rezolva simplu si problema
prioritatii acordarii si servirii intreruperii pentru cereri IRQ simultane, cand arbitrajul se rezolva la
nivelul circuitelor procesorului (eventual programate anterior) sau cu ajutorul unui controler auxiliar
numit arbitru de prioritati.

In cazul utilizarii unei conexiuni IRQ pentru mai multe dispozitive periferice (DPk), problema
arbitrajului cererilor IRQ simultane trebuie rezolvata printr-un mod de conexiune special al
interfetelor, cu topologie „serie” „lant” sau „cascada”.

IRQ

DP1 DP2 DP3


Procesor IAQ
RIA1 EIA1 RIA2 EIA2 RIA3 EIA3

Magistrală de
date

Asigurarea priorităţilor de întrerupere prin conexiune “lanţ”.


În această schemă semnalul de acceptare a întreruperii, IAQ emis de către procesor trece prin
circuite electronice specializate, la nivelul interfetelor dispozitivelor periferice. Fiecare este dotata cu
câte un receptor (RIA1, RIA2, RIA3) şi cu câte un emiţător (EIA1, EIA2, EIA3). Acestea sunt comandate
electronic, astfel încât dacă un periferic nu a transmis nici un semnal de întrerupere INT pe linia
comună, atunci transmite mai departe semnalul IAQ, iar dacă un periferic a transmis un semnal de
întrerupere, atunci semnalul IAQ nu este transmis mai departe, câtre următorul periferic. Rezultă că,
dacă mai multe periferice transmit simultan cereri de întrerupere, propagarea semnalului de
confirmare IAK, între periferice va fi oprit de dispozitivul care a transmis semnal IRQ, aflat cel mai
apropiat de procesor. Acesta va fi cel care va transmite vectorul de intrerupere pe tronsonul date.
Deci, prioritatea de întrerupere este stabilită de modul de aşezare (apropierea fata de procesor) a
perifericelor în conexiunea cascadă.

Secventa de intrerupere

Secventa de intrerupere externa reprezinta succesiunea de operatii si transferuri de date care permit
inceperea „dialogului” de comunicatie intre un periferic si unitatea centrala, in urma producerii unui
eveniment extern (de ex. cuplrea la un port USB). Sunt utilzate liniile IRQ si IAK ale tronsonlui de
comenzi ale BUS-ului si eventual tronsonul de date, pentru intreruperile vectorizate. Daca, la un
moment dat, starea perifericului se schimba, unitatea centrala trebuie instiintata pritr-un semnal
electric (IRQ) si ea trebuie sa activeze programul de serviciu corespunzator interfetei. Prima operatie
care trebuie facuta, prin actiunea unitatii de comanda a CPU, este citirea starii perifericului. In functie
de aceasta se vor desfasura comenzile sau secventele ulterioare. Succesiunea operatiilor (pentru
intreruperea vectorizata) este urmatoarea:

- activarea semnalului IRQ de catre interfata perifericului;

- memorarea cererii de intrerupere de catre blocul de servire a itreruperii din CPU;

- activarea procedurii (hardware) de oprire a programului curent, aflat in lucru si salvarea starii
acestuia;

- eliberarea magistralei de catre CPU, prin trecerea iesirilor de date in starea a 3-a (izolata);

- transmisia confirmarii cererii de intrerupere (IAK-interrupt acknowledge) catre interfata;

- activarea iesirilor de date ale interfetei si plasarea vectorului de intrerupere (IVC-interrupt vector)
pe magistrala;

- citirea vectorului de intrerupere de catre CPU;

- activarea programului de servire prin saltul la adresa data de IVC;

- citirea registrului de stare a perifericului;

- executia segmentului de program de serviciu corespunzator.

Transferul de date la Interfaţa paralelă

Inainte de generalizarea porturilor USB, comunicatia calculatorului PC cu o imprimanta simpla era


realizata printr-o interfaţa paralelă universala (portul paralel). Aceasta reprezinta cel mai putin
complex exemplu de interfata si contine numai trei registre de cate 8 biti (octet)., identificate printr-o
anumită adresă, dată în format HEXA (baza 16), avand următoarele funcţii:

Adresa: 378h – Registrul de date, bidirecţional (“Data Latch”) în regim de scriere (Write) memorează
şi transmite un byte către imprimantă, iar în regim de citire (Read), furnizează ultimul byte transmis.

Adresa: 379h – Registrul de stare (Printer Status) poate fi numai citit (Read-only).

Adresa: 37Ah – Registrul de comandă (Printer Controls) are regim de citire/scriere (Read/Write).

Exceptând registrul de date, la celelalte registre biţii pot fi setati sau resetati individual si au
semnificaţii diferite, corespunzător stării sau comenzii date dispozitivului. Au următoarea
semnificaţie:

b7 b6 b5 b4 b3 b2 b1 b0

Registrul de stare: Biţii 0, 1, 2 au valoarea 0.

Bitul 3: Indicator de eroare negat (-ERROR) – ia valoarea 0 în cazul unei erori de transmisie;

Bitul 4: Imprimanta este selectată, deci activă “logic” şi poate comunica cu calculatorul;

Bitul 5: Indică lipsa hârtiei, luând valoarea “1” (+PE – paper out);

Bitul 6: Indicator (negat) de disponibilitate pentru preluarea codului unui caracter (-ACK –
acknowledge, ready for next character);

Bitul 7: Indicator (negat) de stare ocupată, când nu poate fi preluat un nou caracter, sau imprimantă
inactivă logic, nepornită sau necuplată (-BUSY or off-line error).

Registrul de comenzi: Biţii 6 şi 7 au valoarea 0.

Bitul 0: Semnal de comandă pentru memorarea unui byte transmis (+Strobe);

Bitul 1: Comandă saltul unei linii de tipărire (+AUTO Line Feed – LF after CR);

Bitul 2: Semnal (negat) de Reset pentru imprimantă – iniţializarea tuturor comenzilor şi indicatorilor
de stare (-INIT);

Bitul 3: Comandă de selecţie (logică) a imprimantei, capabilă să comunice cu calculatorul (+SLCT IN);

Bitul 4: Activează sistemul de întreruperi al cuplorului. Atunci când este activ, este generat un semnal
de întrerupere hardware către procesor dacă se activează indicatorul ACK (devine zero).

Bitul 5: indică cuplorului sensul de transfer a datelor (0 – dacă sunt transmise date imprimantei sau
dispozitivului, 1 - dacă sunt citite date).

Transferul de date de la interfata la imprimanta


In cazul interfeţei paralele, odată ce legătura logică este stabilită şi nu sunt situaţii de eroare,
transferul datelor la imprimantă se face caracter cu caracter, folosind pentru sincronizare semnalele
ACK, BUSY şi STROBE ca în diagrama de mai jos.

BUSY
-- ACK

DATA

-- STROBE

 0.5s
0.5s minimum

Principiul de funcţionare la transferul unui caracter se bazează pe condiţiile următoare:

- Datele trebuie să fie stabile înaintea apariţiei semnalului STROBE generat de interfaţă, catre
imprimanta; Semnalul STROBE comandă memorarea datelor;

- Imediat după recepţia semnalului STROBE imprimanta răspunde cu semnalul BUSY pentru a
împiedica transmisia a încă unui caracter, înainte ca registrul de date să fie disponibil (datele să fie
preluate si tiparite);

- După ce datele au fost utilizate, imprimanta anunţă prin semnalul ACK că pe liniile de date poate fi
trimis codul caracterului următor;

- La scurt timp după activarea semnalului ACK, semnalul BUSY revine la starea iniţială (inactivă).

Deşi, aparent ar putea fi folosit un singur semnal de validare, în loc de cele doua semnale ACK şi
BUSY, funcţiile lor sunt, oarecum departajate, ACK permiţând transmisia de date noi (tranziţia liniilor
de date), iar BUSY permiţând activarea semnalului STROBE.

Înlănţuirea schimbărilor de stare a semnalelor STROBE, BUSY, ACK este următoarea. Transmisia
semnalului STROBE determină apariţia semnalului BUSY (blocarea transmisiei caracterului următor),
iar la eliberarea registrului tampon al imprimantei, aceasta transmite semnalul de confirmare ACK şi
resetează semnalul BUSY.
Schema bloc de principiu pentru comunicatia cu interfata paralela

Bus Date INTERFAŢA PARALELĂ IMPRI


CPU
Conector Conecto
Mem-Date Date DL Reg
Date Paralel Imprima
Date Date
Cablu
Cod FC AL Paralel
Secvenţa Reg

Program Stare

PC
Reg

C-dă

INT S.O.
VCI
Schimbare
VCI
Stare
IRQ
Secvenţă Generator
BIOS
Întreruper Întrerupere
IAK
e
CALCULUL PARALEL

Executie paralela aparenta (software): Multi-Programare; Multi-Tasking

Mai multe programe active simultan. Procesorul nu contine module multiple pentru executia paralela.

Multi-Programare: sunt incarcate in memorie mai multe programe. Executia trece de la unul la celalalt
(Intrerupere software) in momentul cand un program face o cerere de transfer intrare-iesire (mult mai
lent decat executia in CPU).

Multi-Tasking (Time-Sharing)(executie cu Diviziune in timp): Executia programelor (task-uri) active este


intrerupta periodic (ordinul mili-secundei). Utilizatorul are impresia executiei simultane. Timpul de lucru
total nu este mai scurt. Se adauga secventele de trecere de la un program la altul, plus transferurile
aferente in memoria de masa (swapping), cand trebuie salvate si restaurate paginile corespunzatoare
fiecarui program.

Executie paralela (hardware): Procesorul contine module multiple identice pentru executia paralela.

Paralelism dependent de programe - Procesarea vectoriala: Instructiuni speciale (instructiuni vectoriale)


actioneaza asupra unor structuri de date vectoriale, cu operatii similare. Ex.: Lucrul pt. cele 3 dimensiuni
la prelucrarea grafica a imaginilor. Lucrul in 2 dimensiuni la prelucrarea stereo a sunetului. Lucrul un
multe dimensiuni cu vectori si matrice la rezolvarea sistemelor de ecuatii, etc.

Multi-Threading (Hyper- Threading) – Executia simultana pentru mai multe segmente (thread-uri=fire)
de program. Procesorul contine module identice care partajaza aceleasi zone de memorie.

Multi-Proces: Procesorul Multi-Core (Nuclee multiple) contine module identice care lucreaza cu zone de
memorie separate

Pentu lucrul Multi-Threading sau Multi-Core sunt necesare in programe directive speciale care distribuie
programele sau segmentele de program modulelor identice separate.

Paralelism independent de programe: Programele nu trebuie sa contina indicatii asupra modului de


procesare paralela. Prelucrarea paralelizarea se face fie prin suprapunerea fazelor de executie a
instructiunilor, fie prin suprapunerea executiei instructiunilor independente.

Executia unei instructiuni necesita mai multe faze. Rezulta ca sunt necesare mai multe perioade de
“ceas” (clock-CK) de comanda a tranzitiilor procesorului pentru executia unei singure instructiuni (ciclu
de instructiune). Fiecare ciclu de instructiune, la randul lui contine mai multe cicluri masina, fiecare
necesitand mai multe impulsuri de ceas (CK).
Deci, frecventa maxima de executie a instructiunilor este mult mai mica decat cea a impulsurilor de CK
(de ordinul GHz), determinata de tipul tehnologiei de realizare a circuitului integrat. Pentru a executa o
instructiune completa la fiecare impuls de ceas (1_intructiune/1_CK) se realizeaza suprapunerea fazelor
de executie, intr-o structura hardware denumita “Pipe-line” (=conducta) (banda de asamblare). In banda
de asamblare se realizeaza “aducerea în avans a instrucţiunilor” de la adresele urmatoare din memorie,
inainte de terminarea executiei instructiunii curente (deja incarcate).

Pentru o singura bandă de asamblare (Pipe-line), notam Tact_1, Tact_2, Tact_3, etc., momentele
impulsurilor de ceas (CK) de comanda si cu FT, DC, EX, RZ fazele de executie a instructiunii, unde:

FT – faza de “fetch” – incarcarea codului instructiunii in memorie;

DC – faza de decodificare – decodificarea codului de operatie si referintelor operanzilor;

OP_1 ; OP_2 – fazele de aducere din memorie a operandului 1, respectiv 2;

EX – faza de calcul, conform codului de operatie;

RZ - faza de depunere a rezultatului in memorie.

Tact 1 Tact 2 Tact 3 Tact 4 Tact 5 Tact 6 Tact 7 Tact 8

FT I1 I2 I3 I4 I5 I6 I7 I8

DC I1 I2 I3 I4 I5 I6 I7

OP_1 I1 I2 I3 I4 I5 I6

OP_2 I1 I2 I3 I4 I5

EX I1 I2 I3 I4

RZ I1 I2 I3

Modulele paralele executa simultan faze de executie de la instructiuni diferite. De ex. la tactul 6 se
executa simultan faze de la 6 instructiuni diferite. Astfel, se pot obtine rezultate, pentru cate o
instructiune, la fiecare impuls de ceas (CK) – pentru Tact_6, Tact_6, Tact_8, in tabel.

Eficienta benzii de asamblare se reduce atunci cand in sirul de instructiuni apare o instructiune de salt in
program. In acest caz, programul va continua cu alte instructiuni decat cele care urmeaza la adresele
succesive. Deci, incarcarea acestora devine inutila, coada de incarcare trebuie stearsa si trebuie incarcate
instructiunile de la adresa de salt. Pentru a mari eficienta se utilizeaza o metoda de estimare a salturilor,
pe baza celor care s-au realizat inainte, memorate in “History-Buffer”, mizandu-se pe o executie repetata
si periodica a anumitor segmente de program (situatie frecventa in structura programelor). Aceasta
metoda utilizeaza un tabel de estimare a salturilor numit “speculative jump table” (Tabel de Predicţie),
in momentele estimate de un numarator al pasilor de program la care au avut loc salturile precedente
(Contor de Salturi).

Pentru executia simultana a mai multor instructiuni complete se pot utiliza mai multe benzi de
asamblare (“pipe-line”) in paralel – Structura “Multi-Pipeline” sau “Super-Scalara” (de ex. doua pipe-line
la procesorul Pentium_1 si trei la Pentium_Pro). Astfel se pot executa simultan mai multe instructiuni
pentru fiecare impuls de ceas (CK) (m.m. intr./1CK).

In acest caz unitatea de comanda a procesorului imparte programul in mai multe segmente de program.
In acest caz apare problema dependentei instructiunilor, cand o instructiune dintr-un segment are ca
operanzi rezultate calculate de o alta instructiune, aflata in alt segment. Problema se rezolva prin
executia “in alta ordine” (“out of order”) a instructiunilor, decat cea care apare in program. Modul de
lucru out of order necesita Detecţia Dependenţelor si existenta unei structuri hardware numita “statie de
rezervare” sau “statie de planificare si distribuire a instructiunilor” (“reservation station”) care tine
evidenta executiei instructiunilor si pastreaza operanzii pana la executia completa, definita de “fereastra
de executie a instructiunii” (“instruction window”). Dupa terminarea executiilor rezultatele trebuie
aranjate si plasate in memorie in ordinea ceruta de program, memorata in “registrul de reordonare”
(“ReOrder- Register”), pe baza unei “unitati de extragere a rezultatelor”.

O alta problema care apare in executia simultana a instructiuni sau fazelor acestora este modul de
utilizare a registrelor generale ale procesorului. In timpul executiei paralele pot apare referiri simultane
la acelasi registru, datorita suprapunerii registrilor cu acelasi nume, utilizati de instructiuni diferite. In
acest caz este necesara alocarea temporara a unor registri diferiti, pentru registrii cu acelasi nume,
corespunzatori operanzilor de la instructiuni diferite (Mapare Registrilor”). Acestia sunt denumiti “alias
registers” si sunt implementati in circuite separate, cu atat mai numeroase cu cat avem mai multe
executii simultane.

Structura procesoarelor complexe se bazeaza pe structuri modulare care, pentru a nu fi intarziate de


timpii de asteptare a datelor, contin memorii tampon (buffer) unde sunt memorate datele sub forma
unor “Cozi de Asteptare”.

Faze prelucrare

Faze Execuţie (FE): FT (fetch), DC (decod), EX (exec), RZ (rez)


FE Pentru două benzi de asamblare B I, B II

Tact 1 Tact 2 Tact 3 Tact 4 Tact 5 Tact 6 Tact 7 Tact 8

B I - FT I1 I3 I5 I7 I9 I 11 I 13 I 15

B II - FT I2 I4 I6 I8 I 10 I 12 I 14 I 16

B I - DC I1 I3 I5 I7 I9 I 11 I 13

B II - DC I2 I4 I6 I8 I 10 I 12 I 14

B I - EX I1 I3 I5 I7 I9 I 11

B II - EX I2 I4 I6 I8 I 10 I 12

B I - RZ I1 I3 I5 I7 I9

B II - RZ I2 I4 I6 I8 I 10
Problemele Calculului Paralel

In general, prin Calcul Paralel se intelege posibilitatea unitatii centrale (procesorului) de a executa mai
multe instructiuni masina simultan (instructiunile decodificate direct de catre procesor si in care au fost
descompuse programele in limbaje de nivel inalt in forma executabila (tip “.exe” sau “.com”), prin
procesul de compilare. Pentru aceasta trebuie sa existe mai multe module (hardware) similare si o
modalitate de distribuire a instructiunilor de program catre acestea.

Avand in vedere ca instructiunile se por descompune in mai multe faze de executie, paralelismul se poate
realiza la nivelul acestora.

La nivel mai superior, se poate vorbi de executia in paralel a programelor (task-uri), care sunt
descompuse in procese si fire (secvente) de program sau “thread-uri”. Ultimele partajaza aceeasi zona de
memorie (ca in procesoarele de tip multi-thread), iar procesele actioneaza ca programe independente
(ca in procesoarele de tip multi-core sau multi-nucleu).

Astfel, daca intr-o structura ne-paralela fiecare instructiune masina este executata in cadrul mai multor
cicluri de instructiune si mai multor cicluri masina. Rezulta ca pentru executia completa a unei
instructiuni sunt necesare mai multe perioade de ceas (CK) sau tact ale impulsurilor care comanda
tranzitiile de stari din procesor.

De-a lungul desvoltarii procesoarelor, inainte de paralelizarea propriu-zisa pentru executia


instructiunilor, s-a realizat progresiv separarea diferitelor functii in module diferite (ca de ex. modulul de
control al magistralei, modulul de lucru cu memoria (MMU-memory management unit), modulul de
realizare a operatiilor in virgula mobila, etc.

Problema cea mai complexa in realizarea paralelizarii este modul cum pot fi segmentate programele,
astfel incat sa fie dirijate catre module de procesare diferite, avand in vedere ca intre variabilele si
parametrii programului pot exista diferite dependente. Problema se rezolva prin executia in alta ordine
(out of order execution), astfel incat sa fie evitate dependentele. Apoi, un modul special realizeaza
reordonarea si memorarea rezultatelor in ordinea initiala.

Pentru fiecare instructiune trebuie urmarita parcurgerea tuturor fazelor de executie incluse in asa
numita “instruction window” printr-un modul numit “statie de rezervare” (rezervation station).

Pe de alta parte executia instructiunilor trebuie pregatita anterior prin modulul de planificare a executiei
(din unitatea de comanda), care aduce din memorie codurile instructiunilor si realizeaza decodificarea si
descompunerea acestora in operatii elementare, prin strategia de tip RISC (reduced instruction set
computer), care utilizeaza module pentru operatii mai simple, dar foarte reapide. In momentul cand in
program apar instructiuni de salt, prin care continuarea programului de face intr-un alt segment care nu
are adresa din memorie urmatoare celei a instructiunii in curs, este necesara refacerea secventei de
incarcare a instructiunilor. Rezolvarea acestei probleme se realizeaza prin utilizarea metodei si tabelului
de estimare a adresei de salt (adrese de salturi speculative).
Partajarea resurselor (fizice) de calcul (registre si operatori) trebuie facuta pentru ca referirile identice
din diferite segmente de program aflate in executie simultana sa fie dirijate temporar catre resurse
fictive diferite, numite “alias registers” sau “alias operators” unde sunt mapate valorile operanzilor.

Viteza de calcul poate fi imbunatatita daca, in cadrul unui segment de program, valorile variabilelor sunt
transmise direct catre instructiunile unde sunt parametri de intrare, fara sa se mai treaca prin locatiile
din RAM unde sunt referite adresele operanzilor instructiunilor, prin asa numitele tehnici de by-passing
si forward parameter transmision.

Daca paralelizarea calculului se face la nivelul fazelor de executie ale instructiunii, atunci procedeul se
numeste de tip pipeline (banda de asamblare). Prin suprapunerea fazelor de executie de la diferite
instructiuni, defazate in timp, se poate obtine cate un rezultat la fiecare impuls de tact (ceas - CK), daca
fiecare faza se realizeaza, la randul ei, in cate o perioada de tact. Astfel, numarul de instructiuni
executate pe unitatea de timp este egal cu frecventa de comanda a procesorului (de ordinul GHz). Deci,
avem cate o 1_instructiune/1CK.

Deci, vom avea cate o structura de tip pipeline pentru a paraleliza fazele de executie pentru cate o
instructiune. Daca se doreste executia completa a mai multor instructiuni deodata, atunci se folosesc
structuri multi-pipeline, sau superscalare. In acest caz pot fi executate mai_multe_instructiuni/1CK.

In evolutia procesoarelor Intel, aceasta tehnica a aparut incepand cu “Pentium I”, care continea doua
structuri pipeline, insa numai una dintre ele continea modul de calcul in virgula mobila (pentru calcule cu
numere zecimale).

Eficienta metodei pipeline depinde de numarul de faze de executie ale instructiunii masina si de timpul
de lucru asociat executiei unei faze. Evident se urmareste ca fazele sa fie cat mai simple (deci implict, mai
multe) si timpul lor de executie cat mai scurt (prin tehnica RISC).

In cazul superscalar, aparent pentru o paralelizarea cat mai puternica, ar trebui utilizate cat mai multe
tronsoane pipeline. Totusi, se arata ca din cauza dependentelor inerente dintre variabilele (parametrii)
programului, multiplicarea extensiva a structurilor pipeline nu este eficienta.

Metodele mentionate mai sus (tip pipeline si superscalar) sunt independente de program, pentru in
functionarea lor nu este necesara nici o informatie provenita din constructia programului. Deci,
programatorul nu este implicat in tehnica de paralelizare a calculului.

Gradul de paralelizare poate fi insa sporit oricat de mult (pana la limitele de volum hardware, date de
numarul maxim de module sau procesoare din sistemul de calcul) daca ramificatia operatiilor,
instructiunilor sau segmentelor de program catre procesoare sau module integrate diferite se face prin
instructiuni sau directive speciale, la nivelul programului si limbajului de programare, prin tehnicile de
paralelizare dependende de program. Solutiile contin trei tipuri de strategii.

Daca variabilele sau structurile de date din program au, prin natura lor, o structura vectoriala (cu mai
multe componente sau coordonate), atunci pot fi definite operatii (vectoriale) care sa actioneze similar
asupra componentelor vectorului de date. Este cazul prelucrarilor semnalului audio pe mai multe canale
(stereo – cu doua canale, quadro – cu patru, “studio”- cu sapte canale) sau datelor video (grafice) in doua
(2D) sau trei (3D) dimensiuni. In cazul “video” transformarile grafice (geometrice) se pot descompune in
operatii de translatii sau rotatii asupra componentelor, care sunt prelucrate prin aceleasi tipuri de
operatii.

Multe “modele” fizico-matematice se bazeaza pe variabile multi-dimensionale, descrise vectorial care


sunt prelucrate prin operatori matriceali sau tensoriali (matrice multidimensionala). In acest caz, se pot
utiliza un numar corespunzator de procesoare care sa execute simultan operatiile pentru toate
componentele vectorilor. Este cazul super-calculatoarelor “vectoriale” cu structura de tip “cluster” care
pot contine de ordinul miilor de procesoare, eventual, fiecare multi-nucel), in cadrul unor module
identice, care comunica intre ele prin cai de date de mare viteza (super-magistrale de frecventa inalta
sau fibre optice).

Alta solutie utilizeaza ramificarea segmentelor de program, definite la nivelul programului de baza ca fire
de program (thread-uri) sau procese, prin directive speciale (instructiuni de comanda). Acesta este cazul
obisnuit al modulelor sistemului de operare (ca si Windows, de ex.). Acesta contine un modul
“planificator” (scheduler) special care gestioneaza cozile de asteptare ale proceselor active si rularea
(executia) lor pe nucleele sau modulele diferite ale procesoarelor.

O solutie globala se aplica la nivelul retelelor de calculatoare si foloseste tehnica de tip “grid”, prin care
masive foarte mari de date sunt prelucrate, cu diferite programe de aplicatie la nivelul unor calculatoare
diferite, cuplate prn internet la distanta, eventual in institutii si/sau tari diferite. Este cazul prelucrarilor
experimentelor de amploare care au loc in centre internationale de cercetare, ca CERN de exemplu.

Mentionam ca frecventa maxima de comanda (frecventa de tranzitie a circuitelor logice secventiale


interne) este fixata de tehnologia de realizare si iplicit de dimensiunea tranzistoarelor MOS
(metal-oxid-semiconductor), componente ale circuitelor logice. Cu cat dimensiunea este mai redusa,
capacitatea de portii (gate) de comanda a tranzistorului MOS este mai redusa si de-asemenea sarcina
electrica care trebuie transferata. In plus, aceasta este mai redusa daca tensiunea de alimentare este mai
mica. De aceea, procesoarele cu scara larga de integrare si implicit cu un numar foarte mare de
tranzistoare (de ordinul miliardelor) sunt alimentate la tensiuni reduse (~1V). Puterea de comutatie
disipata de tranzistoare depinde de frecventa de lucru, dar si de tensiunea de alimentare. De-aceea la
dispozitivele portabile (cu baterii) exista un control (reglaj automat) permanent al acestora. Chiar la cele
stationare, reglajul se face pentru nu a fi depasita puterea medie disipata. Numai pe duratele de timp
cand este necesara o putere de calcul sporita, tensiunea de alimentare si frecventa de lucru sunt
crescute (regimul de lucru “turbo”).
IMPLEMENTAREA

Circuitele electronice utilizate in prezent in tehnica de calcul sunt bazate exclusiv pe tranzistoare cu efect
de camp de tip MOS (metal-oxid-semiconductor) (schita din dreapta). Spre deosebire de tranzistorul
“bipolar” (schita din stanga), acesta este comandat in tensiune prin electrodul de poarta (nu consuma
curent de comanda in regim de curent continuu), deci puterea de comanda este mult redusa. Totusi.
aceasta creste odata cu viteza de comutatie datorita capacitatii parazite a portii. In cazul memoriilor
dinamice, capacitatea portii devine utila, similara unei capacitati de stocare.

La tranzistorul bipolar (TB) curentul emitor-colector este comandat prin injectia unui curent in zona
subtire a bazei. Structura se bazeaza pe jonctiunile care se formeaza intre zonele dopate de tip n, p, n, la
care sunt conectati electrozii. Conductia in tranzistorul MOS se bazeaza pe obtinerea unui canal de
conductie, datorita extragerii de purtatori din substrat, sub influenta campului electric creat de poarta.
Viteza de comutatie creste odata cu reducerea dimensiunilor tranzistorului (in prezent sub 10 nm =
1010-9).

sursa poart drena


emitor bază colector
a

p n n E n
canal de purtători
n
substrat Structură p

Sectiune in structura (simbolica) a TB Sectiune in structura (simbolica) a T-MOS

Implementarea este actiunea prin care se trece de la nivelul de reprezentare (cu scheme, simboluri, etc.)
la nivelul de realizare fizica, cu circuite electronice.

Avantajul logicii si algebrei booleene (dupa ideile lui George Boole) este faptul ca, daca se defineste un
anumit tip de operator (unic sau universal) de baza, atunci toate functiile si operatiile aritmetice sau
logice se pot reprezenta si implementa numai cu ajutorul acestuia prin scheme diferite de conexiune.
Acesta este un avantaj urias din punct de vedere tehnologic. Odata ce s-a proiectat, optimizat si verificat
circuitul corespunzator operatorului unic, din punct de vedere electric si tehnologic, realizarea pentru
alte functii in circuitele integrate se poate face numai prin combinatii si conexiuni, utilizand medii
software de editare si dezvoltare specifice, fara a mai fi necesara proiectarea sau verificarea electrica a
unor structuri complexe (nu este vorba de verificarile in procesul de productie). Astfel se pot realiza
circuite cu miliarde de componente integrate numai prin editarea schemelor, cu module predefinite,
aflate in bibliotecile mediului de dezvoltare software, eventual prin munca (divizata) simultana a unui
numar mare de participanti. In cazurile complexe, se pot folosi cateva tipuri diferite de operatori
(circuite) tipizate si apoi multiplicate in structura integrata cu diferite tipuri de conexiuni.

Operatorii logici mai sunt denumiti si porti logice.


Operatorul de tip NAND (non-and = si-nu) si cel de tip NOR (non-or = sau-nu) sunt exemple tipice pentru
dezvoltarea circuitelor si realizarea tehnologica ca operatori unici universali.

Functii (operatiile) logice (non, si, sau, etc.) au ca variabile de intrare biti (stari logice). Prin traditiea
analizei validitatii conditiilor si “propozitiilor” logice, o variabila (bit) se considera adevarata daca are
valoarea “1” si falsa daca are valoarea “0”.

Astfel, in mod intuitiv, un operator “si” cu doua intrari are iesirea de valoare “1” daca, si o intrare, si
cealalta intrare, au valoarea “1”. In acelasi mod se pot construi operatori si cu oricate intrari. Analog, un
operator “sau” cu doua intrari are iesirea de valoare “1” daca, sau o intrare, sau cealalta intrare, au
valoarea “1”. Evident, un operator si va avea iesirea “1” daca ambele intrari au valoarea “1”.Analog, un
operator sau va avea iesirea “1” daca cel putin o intrare are valoarea “1”.

In mod evident operatorul “non” va schimba prin negatie valoarea unui bit, “0” in “1” si invers.
Operatorul NAND (si-nu) face o negatie dupa operatia si. Analog, operatorul NOR (sau-nu) face o negatie
dupa operatia sau.

Un alt mare avantaj al algebrei booleene este faptul ca, din punctul de vedere al operatorului, nu exista
deosebire intre operatiile logice si cele aritmetice. Daca bitul de la intrare face parte dintr-un numar
binar el este interpretat ca cifra binara si operatia logica sau va corespunde operatiei aritmetice
adunare, iar operatia logica si va corespunde operatiei aritmetice inmultire. De aceea pentru simbolul
operatiei sau (or) se utilizeaza si simbolul “+”, iar pentru simbolul operatiei si (&) se utilizeaza si simbolul
“•”.

Operatorii logici sunt descrisi prin tabele de adevar, care dau toate combinatiile de iesire pentru toate
combinatiile de intrare. Pentru operatorul NAND avem simbolul (conventional) si tabelul de adevar de
mai jos.

In1 In2 Out (NAND)

___

A B AB

-------------------------------
A
___
0 0 1
AB
0 1 1
B
1 0 1

1 1 0

Pentru operatorul NOR avem simbolul (conventional) si tabelul de adevar:

____
A
___

AB
B
A B A+B

-------------------------------

0 0 0

0 1 0

1 0 0

1 1 1

In virtutea proprietatilor operatorului de tip unic, operatorul NAND poate fi utilizat pentru construirea
altor operatori, de exemplu, dacă este utilizat un operator de tip NAND (ŞI-NU), cu o intrare fixată la 1
logic, se poate obţine operatorul de negaţie „non”, datorită echivalenţei:

echivalent cu:
1

Similar, funcţia ŞI se realizează simplu prin negarea ieşirii unui operator NAND:

1 AB
A
__
B
AB

Relaţiile De Morgan, permit transformarea sumelor în produse şi invers, ca în exemplul de mai jos,
considerând nişte variabile binare oarecare a şi b:

a + b = ab respectiv ab = a + b

Astfel, ţinând cont că dubla negaţie nu are nici un efect, expresia de la ieşirea unui operator NAND poate
fi pusă sub forma:

AB = A + B = A + B

Rezultă că operatorul NAND joacă rolul unui operator SAU pentru variabilele de intrare negate. Astfel,
pentru a realiza un operator SAU cu ajutorul operatorului NAND este necesară negarea intrărilor:
_
A
A
_ A+B
1
B
1

B
Este interesant de remarcat că dacă într-o configuraţie oarecare avem mai multe nivele de operatori
aceştia realizează funcţii diferite, ŞI, respectiv SAU, în mod alternativ. Astfel, în exemplul de mai jos, care
conţine două nivele de operatori de tip NAND, operatorii de pe primul nivel joacă rolul de operatori ŞI,
iar cei de pe nivelul următor joacă rolul de operatori SAU:

__
A
AB
__ AB  CD = AB + CD
B
CD
C

D
Aceasta se poate justifica dacă expresia de la ieşirea operatorului combinat este adusă la o formă de tip
sumă, cu ajutorul relaţiilor De Morgan. Considerând ca intrări variabilele AB şi CD , şi ţinând cont că
dubla negaţie nu are nici un efect, se obţine:

( ) (
AB  CD = AB  CD = AB + CD = AB + CD)
Operatorii aritmetici pentru numere reprezentate binar sunt alcatuiti din combinatii de operatorilor
logici, care realizeaza operatia aritmetica (echivalenta cu una logica) la nivelul cifrelor binare (biti). La
fiecare suma a doua cifre binare ale unui numar se ia in consideratie transportul rezultat la suma cifrelor
de ordin mai mic si se transmite valoarea noului transport la suma cifrelor de ordin mai mare.

Combinaţiile posibile la adunarea a doua numere reprezentate prin câte o cifră binară sunt:

0 0 1 1 termenul( A)
+0 +1 +0 +1 termenul( B)
0 1 1 10 transportul (C ) si suma( S )

Se observă că valoarile sumei cifrelor şi transportului transmis se pot obţine cu următoarele expresii de
algebră binară. Valoarea sumei este ne-nula numai cand cifrele sunt diferite. Valoarea transportului este
ne-nula numai cand acestea au, ambele, valoare ne-nula.

S = AB + AB C = AB
Tabelul de adevăr pentru cele două expresii este:
Termenul A Termenul B Suma S Transportul C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

Rezulta ca schema logică pentru calculul sumei a doua cifre binare si a transportului urmator poate fi
implementată astfel:

B S
A

B
A
C
B

Dacă numărul binar conţine mai multe cifre, cand trebuie considerat si transportul precedent (de la suma
de ordin inferior) pentru calculul sumei cifrelor şi transportului urmator se pot utiliza următoarele
expresii logice:

S = ABCn −1 + ABCn −1 + ABC n −1 + ABCn −1

C = BCn −1 + ACn −1 + AB

Regulile de calcul pentru fiecare ordin al cifrelor binare, pentru toate valorile posibile ale termenilor şi
transportului precedent se conformeaza tabelului de adevăr de mai jos:
Intrări Ieşiri
Transportul Cn-1 Termenul A Termenul B Suma Transportul Cn
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

Rezulta ca schema logică pentru calculul sumei a doua cifre binare si a transportului urmator, tinand cont
de transportul precedent, poate fi implementată astfel:
A
B
B
Cn-1
Cn-1 Cn
A
S

Circuitele logice se impart in doua categorii importante: circuite combinationale si circuite secventiale.
Acestea pot fi privite ca blocuri cu o multitudine de intrari si iesiri. Acestea pot fi referite, mai compact,
ca intrare de date si stare a intrarii (incluzand toate conexiunile intrarilor si starile lor) sau iesire de date
si stare a iesirii (incluzand toate conexiunile iesirilor si starile lor).

Circuitele combinationale nu au proprietati de memorie. Starile logice de la iesiri depind exclusiv de cele
de la intrari. Functionarea poate fi descrisa complet de tabelul de adevar. Daca starile de la intrari se
schimba, aproape simultan se vor schimba starile de la iesiri, dupa un timp scurt numit timp de
propagare sau timp de stabilizare necesar propagarii fizice a semnalului de tensiune in interiorul
circuitului electronic.

Operatorii logici sunt exemple circuite combinationale.

Circuitele secventiale poseda proprietati sau elemente de memorie. Starile logice de la iesiri depind atat
de starea intrarilor, dar si de starile precedente ale circuitului (determinate de elementele interne de
memorie). Pentru fiecare stare stabila a intrarii (incluzand toate starile intrarilor) circuitul poate parcurge
o succesiune de stari interne, care sa duca la succesiune de stari ale iesirii (incluzand toate starile
iesirilor). Pentru comanda sincrona a tranzitiilor starilor este utila o intrare speciala, separata, numita
intrare de tact sau ceas, notata de regula cu CK (clock). Aceste circuit se numesc circuite secventiale
sincrone. Daca tranzitia starilor interne si de iesire se produce numai sub influenta schimbarii starilor de
la intrari, circuitele se numeste circuite secventiale asincrone. In acest caz stabilizarea iesirilor nau mai
apare imediat dupa impulsul de tact (CK) datorita unui timp de propagare a tranzitiilor interne. In plus,
pana la stabilizare, iesirile pot parcurge o succesiune de stari instabile imprevizibile care complica
utilizarea circuitului intr-un ansamblu si necesita masuri de siguranta suplimentare. Din aceasta cauza
circuitele secventiale asincrone sunt mai rar folosite.

Circuitele de numarare si automatele secventiale sunt exemple de circuite secventiale. La registre si


memorii procesul tranzitiilor se rezuma la secventa de scriere (memorare). Functionarea tuturor
sistemelor programabile este de natura secventiala.

Circuitele combinationale au un rol esential in construirea operatorilor logici si operatorilor aritmetici


complecsi (in unitatea ALU din CPU), dar si pentru realizarea unor circuite de control al transferului de
date in cadrul sistemelor sau sub-sistemelor, bazate pe multiplexoare, demultiplexoare si
decodificatoare. Se pune problema ca sub comanda unui cod de selectie, similar codului de adresa,
pentru o anumita perioada scurta de timp, sa fie creata o cale de date de natura electrica prin care sa
poata comunica doua module sau dispozitive diferite. Calea de date contine mai multe conexiuni
corespunzatoare bitilor unui cuvant de date (de ex. 64 biti). Reamintim ca transferul de date se realizeaza
fizic prin transmiterea nivelelor de tensiune, reprezentand biti (stari logice) de la un dispozitiv la altul.

Multiplexoarele (MUX) comandate de un cod de selectie, realizeaza selectia unei dintre caile de date de
la intrare, pentru a intra in conexiune cu o singura cale de iesire. Astfel, cuvantul de date aflat intr-un
anumit registru sau celula de memorie poate fi transferat pe magistrala de comunicatie.

Deemltiplexoarele (DMUX) intr-o maniera similara, comandate de codul de selectie, realizeaza selectia
unei dintre caile de date de la iesire, pentru a intra in conexiune cu o singura cale de intrare. Astfel,
cuvantul de date existent pe magistrala de comunicatie poate fi transferat intr-un anumit registru sau
celula de memorie din structura unui modul sau dispozitiv.

Mai jos sunt figurate schemele bloc corespunzatoare. Sagetile groase simbolizeaza caile de date,
continand grupuri de conexiuni, caracterizate prin stari logice cu un anumit numar de biti. Numarul de
cai selectate este dat de puterea lui 2 (1, 2, 4, 8, etc.), corespunzatoare codului si conexiunilor de selectie
(cu un anumit numar de biti). De exemplu, cu 1 bit vom selecta 2 cai, cu 2 biti - 4 cai, cu 3 biti – 8 cai, etc.

Numarul de biti ai cailor de date (corespunzator cuvantului de date) este ales tot ca o putere a lui 2. Se
prefera asa, pentru ca atunci cand este necesara selectia bitilor, in cadrul unui cuvant de date, sa poata fi
utilizate toate combinatiile unui cod de selectie. Exista si exceptii, de exemplu codul instructiunilor de la
controlerele industriale are un numar de biti ales in functie de marimea setului de instructiuni.

Numele tipului pentru un multiplexor sau un demultiplexor reflecta configuratia acestuia. De exemplu:
MUX 48 specifica un multiplexor cu 4 cai de intrare, a cate 8 biti; DMUX 24 specifica un demultiplexor
cu 2 cai de iesire, a cate 4 biti; Evident, primul va avea un cod de selectie de 2 biti, iar al doilea de 1 singur
bit.
Ieşire Intrar
date e date
Căi de Căi de
intrare MUX DMUX ieşire

Selecţie Selecţie

Schema bloc de principiu pentru circuitul Multiplexor şi Demultiplexor

Selecţia cailor intr-un multiplexor sau intr-un demultiplexor se face cu un modul special numit selector
sau decodificator (DEC), care se fabrica si ca circuit integrat separat. In schema bloc de mai jos. In acest
caz (decodificator de 3 biti) ieşirile B0, B1 … B7 sunt activate (setate pe „1” sau resetate pe „0”, in functie
de varianta), conform cu valoarea codului reprezentat de cele 3 intrări: A0, A1 si A2. Astfel, dacă la intrări
avem codul 101, va fi activată ieşirea a 5-a, adică B5, corespunzătoare valorii:
1  2 2 + 0  21 + 1  2 0 = 4 + 1 = 5 .

B0
A0
A1 DEC
A2 B7

Este evident că numărul de ieşiri ale unui decodificator cu n intrări va fi egal cu 2n. În structura circuitelor
unui calculator, în mod frecvent este folosit procesul de selecţie (pentru adresarea memoriei, selecţia
liniilor magistralei, transferul de date în cadrul procesorului, etc.).

Este firesc ca numărul de selecţii posibile să corespundă unei puteri a lui doi. Altfel, o parte din ieşirile
decodificatorului vor rămâne nefolosite.

Este important de retinut ca principiul de functionare al unui multiplexor sau demultiplexor nu se


bazeaza pe comutatoare electrice. Acestea ar putea fi realizate integrat prin utilizarea unor tranzistori
MOS plasati in serie, care ar permite sau nu ar permite trecerea curentului, deci transmiterea nivelului
de tensiune, corespunzator starii logice. Tranzistorii nu sunt comutatoare ideale, deci produc caderi de
tensiune suplimentare, care ar afecta conservarea valorilor de tensiune ale nivelelor logice. De aceea se
prefera utilizarea exclusiva a operatorilor logici, construiti special pentru conservarea acestor nivele, prin
includerea elementelor amplificatioare tranzistorizate.

Mai jos sunt date schemele logice cu circuite NAND (operator SI-NU) si INVERSOARE (operator
NON-negatie) pentru un multiplexor si un demultiplexor cu cate doua cai selectate, fiecare de cate un
bit.
A
QA

Q IN

B
QB
(a) Selecţie (b)
Selecţie
Schema logica a multiplexorului şi demultiplexorului cu câte două căi selectate

Tabelele de adevar corespunzatoare sunt:

Tab.1 Tab.2 Tab.3

Selecţie A B Q Selecţie IN QA QB Selecţie IN QA QB


0 0 x 0 0 0 0 0 0 0 0 x
0 1 x 1 0 1 1 0 0 1 1 x
1 x 0 0 1 0 0 0 1 0 x 0
1 x 1 1 1 1 0 1 1 1 x 1

Circuitul de multiplexare

În cazul când căile de date conţin numai o singură linie, corespunzătoare transferului unui singur bit de
date, pentru selecţie este necesară numai o singură conexiune. Schema multiplexorului (a) poate fi
implementată cu trei porţi Şi-Nu (NAND) şi un inversor. În funcţie de starea intrării va fi validată numai
una dintre porţi, care se va comporta ca un inversor. Starea celeilalte va fi forţată pe nivelul “1”. Rezultă
că poarta de la ieşire se va comporta tot ca un inversor, pentru datele transmise. Se observă că porţile de
la intrare joacă rolul unor operatori de tip ŞI (înmulţire binară), iar poarta de la ieşire joacă rolul unui
operator SAU (adunare binară). Deci, porţile de la intrare pot permite sau nu transferul datelor, iar
poarta de ieşire transmite la ieşire numai contribuţia intrării porţii validate, indiferent de nivelul logic al
celeilalte intrări. Tabelul de adrevăr pentru această structură de multiplexor este Tab.1.

Circuitul de demultiplexare

În schema demultiplexorului (b), valoarea de la intrare este distribuită către cele două porţi de validare a
trasferului. În funcţie de nivelul conexiunii de selecţie, va fi validată numai o singură poartă, care va juca
rol de inversor, iar cealaltă va fi forţată în starea “1”. Inversoarele de la ieşire au rolul de a restabii nivelul
de la intrare (ne-inversat). Dacă acestea sunt de tip “trei-stări”, la ieşirea inactivă vom avea impedanţă
mare (nivel flotant). În caz contrar, ieşirea inactivă va fi poziţionată pe “0”. Tabelul de adevăr Tab.2
corespunde ieşirilor cu două nivele logice, iar Tab.3 celor cu trei-stări. Deşi demultiplexoarele integrate
separate nu au, de regulă, ieşiri cu trei-stări, totuşi această schemă este foarte utilă în cazul structurilor
complexe conectate direct la magistrale de comunicatie.

Circuitele secventiale

Circuite secventiale sunt utilizate in constructia circuitelor de numarare (numaratoare), a registrilor si a


memoriilor statice. Acestea utilizeaza un circuit secvential elementar numit bistabil, caracterizat prin
doua stari stabile, care pot fi setate atunci cand este comandat. Spre deosebire de acesta, circuitul
astabil nu are nici o stare stabila (este un oscilator cu unda dreptunghiulara), iar circuitul monostabil are
o singura stare stabila la care revine automat, dupa starea temporara rezultata in urma comenzii.

Un circuit bistabil de tip R-S (reset-set) poate fi implementat cu două porţi NAND. Caracteristic
bistabilului R-S sunt iesirile QA si QB cu caracter complementar si necesitatea a doua intrari de comanda.
In functie de activarea intrarilor SA sau SB (active pe „0” logic), iesirile pot fi setate sau resetate in mod
complementar. Daca ambele intrari au starea „1” logic circuitul pastreaza (memoreaza) starea
precedenta.

SA
QA

SB QB

Pentr această conexiune, stările la ieşire sunt determinate în modul următor. Dacă, de exemplu, intrarea
SA are starea logică 0, ieşirea corespunzătoare QA va trece obligatoriu în starea 1, conform modului de
lucru al porţii NAND. Cealaltă ieşire, QB va fi determinată de intrarea SB şi iesirea QA. Dacă SB are starea
logică 0, QB va trece obligatoriu în starea 1, iar QA va depinde de starea intrării SA şi ieşirii QB. Dacă
ambele intrări sunt în starea 0, ambele ieşiri vor fi forţate în 1, iar dacă ambele intrări sunt în starea 1,
aceste nu vor influenţa porţile NAND, starea lor rămânând cea precedentă. Rezultă funcţionarea descrisă
in tabel.

Intrarea SA Intrarea SB Ieşirea QA Ieşirea QB


0 0 1 1
0 1 1 0
1 0 0 1
1 1 St. prec. St. prec.

Se observă că acest circuit bistabil, la care sunt adaugate cateva circuite suplimentare (porti sau
operatori logici), poate fi folosit ca o celulă de memorie de un bit. Atunci când la intrările bistabilului se
aplică valori logice complementare, acestea vor determina starea bistabilului, similar unei operaţii de
scriere. Această stare va fi menţinută, chiar dacă nu mai avem informaţie la intrări, cu condiţia ca acestea
să fie trecute în starea logică „1”. Astfel, o celulă de memorie, în forma cea mai simplă, poate fi
construită dacă adăugăm circuitului bistabilul două porţi pentru validarea operaţiei de scriere şi un
circuit inversor, pentru obţinerea intrărilor cu valori logice complementare. Dacă semnalul de scriere
Write este în starea „0”, ieşirile porţilor de validare vor avea valoarea „1”, iar bistabilul îşi va păstra
starea precedentă, care va putea fi citită la ieşirea celulei de memorie. Dacă semnalul de scriere are
valoarea logică „1”, porţile de validare vor inversa starile complementare, provenite de la intrarea si
iesirea circuitului inversor şi le vor aplica la intrările bistabilului. Astfel, dacă la intrarea celulei de
memorie avem starile „0”, respectiv „1” logic, aceastea se vor regăsi la ieşire după operaţia de scriere
(cand intrarea Write este activa).

Intrare

Ieşire

Write

Celula de memorie de 1 bit.

Circuitele numaratoare (circuite de numarare a impulsurilor) precum si registrele paralele si registrele


„de deplasare” serie-paralel si paralel-serie contin un numar de circuite bistabile, in functie de numarul
de biti cu care lucreaza acestea. Trebuie mentionat ca atat structurile integrate in circuite mai complexe
cat si circuitele integrate separate pot contine functii diferite sau cumulate selectate de intrari
speciale. Mai jos selectam cateva cazuri.

Numaratorul binar direct

Daca aplicam la intrare

La fiecare impuls de intrare, codul de iesire al numaratorul binar creste cu cate o unitate (se
incrementeaza). Astfel, evolutia in timp a iesirilor este de forma unor impulsuri de tensiune,
corespunzatoare starilor bitilor de stare. Pentru o anumita frecventa de intrare, frecventa impulsurilor de
la iesire este divizata cu o putere a lui doi si este cu atat mai mica cu cat bitul codului de iesire este mai
semnificativ.

Structura numaratorului contine bistabili de tip Master-Slave interconectati in serie. La acest tip de
bistabili comanda se face frontul crescator al impulsului de intrare. Rezulta ca fiecare bistabil va realiza
un ciclu complet (set-reset) (impuls de iesire) dupa doua fronturi ascendente succesive la intrare. Deci,
lungimea impulsului de iesire este dubla fata de cea a impulsului de intrare si se poate considera ca
bistabilul Master-Slave este un divizor de frecventa cu doi. In acelasi timp, numarul de impulsuri care va
apare la iesire este jumatate fata de cel de la intrare. Deci, se poate admite ca bistabilul Master-Slave
este un numarator binar, ciclic, pentru cate doua impulsuri. Pentru mai multi bistabili conectati in serie,
numaratorul va realiza o divizare a frecventei cu o putere a lui 2 (divizare cu 4 pentru 2 bistabili, cu 8
pentru 3 si cu 16 pentru patru bistabili) si va deveni un circuit de numarare ciclic cu 4, 8 sau 16 stari.

Daca schimbarile de stare ale bistabililor se fac pe masura propagarii semnalului (informatiei de stare) de
la intrare catre iesire avem un numarator asincron. Acesta, de regula, este evitat din cauza starilor
intamplatoare care pot sa apara la iesiri, pentru durate foarte scurte, pana la stabilizarea lor (propagarea
completa intrare-iesire). Daca schimbarile de stare se fac sincron cu un semnal de tact (ceas-CK) atunci
avem un numarator sincron, la care iesirile tranziteaza simultan, fara stari aleatorii.

T
T T T In

Q0 Q1 Q2 Q0 Q1 Q2

Conexiunea numărătorului asincron, respectiv sincron.

In structura sistemelor de calcul numaratorul binar este foarte util pentru obtinerea semnalelor de tact
(ceas-CK) cu frecvente divizate si pentru realizarea secventelor de comanda, in cadrul unitatilor de
comanda (construite ca automate secventiale). Pentru fiecare impuls de tact codul numaratorului se
schimba si activeaza cate o alta iesire a decodificatorului, care la randul ei activeaza cate o alta
configuratie (diferita) a circuitelor unitatii centrale pentru operatiile de transfer, operatii logice sau
aritmetice.

Oscilator Numărător
Impulsuri

de tact A B C Cod binar

Decodificator

(de stări)
Semnale activare
stări
O0 O1 O2 O3 O4 O5
O6 O7
Tabelul de stari
Numărul Ieşiri: ABC Ieşiri: O0 O1 O2 O3 O4 O5 O6 O7
impulsului (numărător) (decodificator)
0 0 0 0 1 0 0 0 0 0 0 0
1 0 0 1 0 1 0 0 0 0 0 0
2 0 1 0 0 0 1 0 0 0 0 0
3 0 1 1 0 0 0 1 0 0 0 0
4 100 0 0 0 0 1 0 0 0
5 101 0 0 0 0 0 1 0 0
6 110 0 0 0 0 0 0 1 0
7 111 0 0 0 0 0 0 0 1

Impulsuri la intrarea numărătorului

Stările ieşirii B a numărătorului

Stările ieşirii A a numărătorului

00 01 10 11 Codurile corespunzătoare stărilor A şi B

A=0 A=0 A=1 A=1


Ieşirea activă a decodificatorului
B=0 B=1 B=0 B=1
(cu nivelul 1, restul având nivelul 0)

Formele de undă şi stările la intrarea şi ieşirile unui Numărător de 2 biţi (patru stări).
O0=1 O1=1 O2=1 O3=1

Registrul „latch” (cu incarcare-scriere si citire paralela)

Registrele de tip „latch” joaca rolul unei memorii temporare (buffer), de regula, de dimensiunea unui
cuvant de date. Incarcarea (scrierea) se face simultan pentru toti bitii.

Comanda de scriere (memorare), in functie de varianta, poate fi activa pe nivel (pozitiv sau negativ) sau
pe front (crescator sau descrescator).

Structura registrului contine circuite bistabile (cu doua stari), reprezentand celule pentru memorarea
fiecarui bit, care sunt setate sau resetate la comanda de scriere in functie de starile intrarilor.

Sunt utilizate in toate dispozitivele (inclusiv procesorul) di structura sistemului. Datele sunt disponibile si
la iesiri fie permanent, fie la o comanda separata (de citire) cand registrul are iesiri cu 3 stari si este
cuplat la o magistrala. Intrarile pot fi cuplate permanent la magistrala deoarece au impedanta mare si nu
influenteaza electric (si implicit logic) magistrala, atunci cand este comandata de alt dispozitiv.
Intrare date

Comandă

memorare b b b2 b3 b b b b
0 1 4 5 6 7

Ieşire
date
Registru Latch (paralel) pentru 1 octet (byte)

Registrul de deplasare (serial)

Registrul de deplasare (universal) poate fi comandat astfel incat atat informatia de intrare, cat si de iesire
sa fie accesibila si sub forma seriala, transferata printr-o singura conexiune electrica (un singur fir) sub
forma unor siruri de biti (pachet de biti). Registrul serial trebuie sa contina, in mod necesar, o intrare de
tact sau ceas (clock-CK). Aceasta comanda deplasarea informatiei in cadrul registrului, catre stanga sau
dreapta, in functie de varianta fabricata sau o comanda suplimentara (sens de deplasare).

La intrarea sau iesirea seriala, pastrarea corespondentei cu bitii cuvantului de date se face prin corelarea
cu momentul de timp in care se face scrierea sau citirea pe conexiunea seriala. Astfel, la o intrare seriala
primul bistabil (1) (conectat la intrare), la comanda impulsului de tact va prelua (memora) starea logica
(nivelul de tensiune) a intrarii, din momentul respectiv. La urmatorul impuls de tact, starea bistabilului
(1) va fi transferata bistabilului urmator (2), iar bistabilul (1) va prelua starea de la intrare din momentul
respectiv, s.a.m.d.. Astfel, dupa n impulsuri de tact, registrul se va incarca (prin deplasarea bitilor in
structura registrului) cu starile bitilor care au existat la intrare de-a lungul evolutiei in timp a impulsurilor
de tact.

Analog, la o iesire seriala, va apare pentru fiecare moment corespunzator impulsului de tact, starea
bitului care se va propaga, pas cu pas, in structura registrului si va ajunge la iesire la momentul respectiv.

Pentru ca bistabilele componente ale registrului sa efectueze, la fiecare impuls de tact, doua operatii
simultane (preluarea noii stari de la bistabilul precedent si transmisia starii curente catre bistabilul
urmator) este necesar ca acestea sa contina doua sub-circuite bistabile (numite sectiune Master si
sectiune Slave), care sa actioneze impreuna, pentru fiecare impuls de tact, in doua faze. Pe frontul
ascendent, starea bitului (curent) se transmite de la celula Master la celula Slave si devine accesibila
pentru bistabilului urmator, care o va memora la randul lui. Apoi, pe frontul descendent celula Master
preia satrea bitului din bistabilul precedent. Analog lucraeza fiecare bistabil Master-Slave, informatiile
bitilor trecand de la unul la celalalt, propagandu-se de-a lungul registrului de deplasare.

Registrul de deplasare se utilizeaza in unitatile aritmetice, pentru calcule care necesita deplasarea
numerelor binare, in cadrul algoritmilor operatiilor aritmetice de ordinul doi (inmultiri, impartiri) sau
pentru transmisia seriala a informatiei (pe liniile seriale, printr-un singur fir). In primul caz, scrierea
numarului in registru se face paralel (toti bitii deodata), apoi se face deplasarea la stanga sau la dreapta,
in functie de necesitatile operatiei, dupa care se face citirea numarului, tot sub forma paralela.

In cazul al doilea, serializarea (impachetarea) cuvantului de date se face in scopul transmisiei seriale pe
un singur fir a informatiei. La emisie, registrul transmitator primeste cuvantul de date paralel (de la o
magistrala de date, de ex.) si il transmite serial, bit cu bit, sincron cu un semnal de tact (ceas). La receptie
registrul receptor se incarca serial, pe durata mai multor impulsuri de tact, dupa care informatia este
preluata paralel, pentru tot cuvantul de date.

Rezulta ca registrele de deplasare utilizate in transmisia in interfetele seriale (pentru impachetarea si


despachetarea informatiei) sunt de tip paralel-serie la transmisia seriala si serie-paralel la receptia
seriala.

Intrări de date paralele


L

SI SO
M-S M-S M-S M-S
T (CK)

Ieşiri de date paralele

Schema bloc de principiu pentru registrul de deplasare (serial)


L 3. REPREZENTAREA NUMERICĂ A DATELOR, CONVERSIA DATELOR

Tipuri de reprezentare numerică (pe octet sau cuvânt): binară, hexa, zecimală, ASCII (American Standard
Code for Information Interchange).

* Forma binară (baza “2”) foloseşte cifrele “0”şi “1” şi poate reprezenta o valoare numerică sau un grup
de stări logice (valori de adevăr).

* Forma Hexa (baza “16”) foloseşte cifrele: 0,…,9,A(=10), B(=11), C(=12), D(=13), E(=14), F(=15). Este
foarte avantajoasă pentru reprezentarea codurilor binare, care la origine folosesc numai simbolurile “0”
şi “1”. Datorită relaţiei biunivoce între fiecare cifră hexa (0…F) şi fiecare grup de patru cifre binare se
poate obţine o formă concisă a codurilor binare, foarte folosită atunci când se lucrează direct cu limbajul
maşină sau cu conţinutul locaţiilor de memorie.

* Forma ASCII reprezintă un caracter (cifră, litera, simbol grafic) corespunzător unui cod numeric.

Calculul unei valori (Val) pentru un număr cu n+1 cifre: “cn…c2c1c0”

reprezentat într-o anumită bază: “B”

se efectueaza cu relaţia: Val = cnBn…c2B2c1B1c0B0

Un număr binar poate reprezenta un set de stări logice sau valori de adevăr. Operaţiile logice vor acţiona
la nivel de bit (cifră binară). Pentru cifrele binare avem următoarea corespondenţă între operatiile
aritmetice şi logice:

Tip operaţie Notaţie operator logic Notaţie operator aritmetic


Înmulţire AND (ŞI) *
Adunare OR (SAU) +

Pentru un număr cu două cifre, reprezentarea operatorilor implementati cu circuite electronice, pentru
operaţiile logice AND şi OR,fara “Transport”(“Carry”), foloseşte simbolurile:

A0 A0
C0 C0
B0 B0

C1 C1
A1 A1

B1 B1
Intervalul de variaţie al numerelor întregi fără semn este:
- pe octet (pe 8 biţi): [0..255];
- pe cuvânt (word -16 biţi): [0..65535];
- pe dublu cuvânt (double word – 32 biţi): [0..232].

Intervalul de variaţie al numerelor întregi cu semn (reprezentate în “cod complementar fata de 2”) este:

- pe octet: [-128..+127];

- pe cuvânt: [-32268...+32267];
- pe dublu cuvânt: [-231..+ 231-1].

Atunci când se lucrează în mod text, pentru caracterele alfa-numerice, se foloseşte, de regulă,
reprezentarea ASCII. Acesta diferă de codul BCD (“neîmpachetat") prin prima tetrada (primul grup de 4
biţi) care este 3H in loc de 0H (reprezentarea Hexa).

În limbajul de asamblare (limbajul masina – decodificat direct de circuitele procesorului) trebuie


specificat dacă un registru este utilizat pentru un tip sau alt tip de date. Astfel, de exemplu, în cazul
registrului “Acumulator”, specificarea AL sau AH se referă la memorarea unui octet, respectiv în partea
inferioară (A – “low”) sau în partea superioară (A – “high”) a registrului. Specificarea AX sau EAX
(“extended” AX) se referă la utilizarea registrului, respectiv, pentru un cuvânt sau pentru un
dublu-cuvânt.

Conversia numerică

În cadrul calculatorului, numerele sunt memorate sub formă binară. Aceasta poate să reprezinte chiar
forma binară a numărului sau poate să reprezinte (codificat) cifrele unei alte reprezentări. Atunci când
este afişat, calculatorul realizează operaţii de conversie, prin care se obţine şirul de simboluri
corespunzătoare cifrelor modului de reprezentare dorit.

De exemplu, numărul cu valoarea 200z (indicele arată reprezentarea zecimală) are următoarele
reprezentări în baza 16 (hexazecimal), respectiv în baza 2 (binar):

200z = C8h = 11001000b

Această echivalenţă are loc deoarece:

200 z = 2  10 2 + 0  101 + 0  10 0

C8h = C  16 + 8 = (12)z  16 + 8

11001000 b = 1  2 7 + 1  2 6 + 0  2 5 + 0  2 4 + 1  2 3 + 0  2 2 + 0  21 + 0  2 0
În tehnica de calcul se preferă reprezentarea hexazecimală deoarece este mai concisă şi trecerea la
reprezentarea binară se poate face mai direct, prin conversia individuală a cifrelor hexa, evitându-se
calculul cu puteri mari ale bazei. Fiecare cifră hexa este convertită în cod binar cu 4 cifre, valoarea
maximă fiind aceeşi (=15z). Există astfel o corespondenţă biunivocă între cele două reprezentări,
indiferent de valoarea numărului. Deci, se poate trece da la reprezentarea hexa la cea binară, indiferent
de semnificaţia unui cod numeric oarecare. În exemplul de mai sus, cifra C corespunde grupului 1100, iar
cifra 8 corespunde grupului 1000.

Cu toate acestea, uneori, numerele sunt codificate binar prin conversia individuală a cifrelor zecimale, în
reprezentarea notată “BCD” (Binary Code Decimal). Trebuie menţionat că pentru reprezentarea binară a
fiecărei cifre zecimale sunt necesare câte 4 cifre binare (4 biţi), deci o parte din cod nu va fi folosit
(corespunzător valorilor de la 10 la 15).

Pentru exemplul de mai sus, prin conversia BCD rezultă:

200z = (2 bcd )(0 bcd )(0 bcd ) = (0010.0000.0000)bcd

Pentru memorarea datelor, poate fi folosit câte un octet pentru codul binar al fiecărei cifre zecimale
(aliniat la dreapta), rezultând reprezentarea “BCD Neimpachetată” sau se poate utiliza un octet pentru
câte două cifre zecimale, rezultând reprezentarea “BCD Împachetată”.
L 1. TRANSFERUL DE DATE ÎN CADRUL PC

Organizarea sistemului de calcul

1.Sis.Oper.
5.Generator
(+Proc.Int.)
întreruperi
2.Software bază
(hardware)
Compilatoare, 8.Periferic
6.Unitate
etc. e
3.BIOS Centrală
HD,…
9.Disp.I/O
(procesor) 10.Conexiuni
(ROM)
monitor,
4.Programe 7.Memori exterioare
a tastatură,
de aplicaţie
RAM porturi

Noţiunile de bază:

A. Întreruperi interne (DOS Interrupts);

B. Funcţiile DOS (DOS Functions);


Software
C. Întreruperi interne BIOS INT (BIOS Interrupts);

D. Funcţiile (ROM-BIOS Functions, BIOS Data Area); Hardware


E. Harta porţilor I/O (I/O Port Map);

F. Întreruperi externe (IRQ’s Hardware INTs).


L 4. INSTRUCŢIUNILE PROCESORULUI – TIPURI DE INSTRUCŢIUNI

Instrucţiunile maşină (decodificate direct de circuitele procesorului) reprezintă un cod care conţine codul
operaţiei şi informaţii asupra adreselor operanzilor şi rezultatului. Acestea pot avea lungime şi structură
diferită. De regulă, rezultatul se suprapune peste unul dintre operanzi, instrucţiunea având următorul
format:

Cod operaţie Cod operand A Cod operand B

Execuţia instrucţiunilor poate afecta biţii de stare ai procesorului (“Flag-uri”) şi poate realiza operaţii
aritmetice, logice, de comparaţie, salturi în program, etc.

Identificarea operanzilor – Operanzii se pot obtine din urmatoarele structuri de memorie:

Registre: acces prin nume (cod registru);

Memoria: acces prin adresă (cod adresă);

Stiva: acces secvenţial;

Flaguri (biţi indicatori): c-da circuite bistabile (memorie de un bit).

Cazul Instrucţiunilor de transfer

Instrucţiunile de transfer au structura cea mai simplă. De exemplu instrucţiunea: “MOV dest, src”
realizează transferul de date din locaţia “sursă” către locaţia “destinaţie”. Acestea pot reprezenta
registre sau locaţii de memorie, conform cu mecanismele de adresare. De exemplu, “mov ax, 1h”
realizează transferul valorii constante “1”, reprezentată în formă hexazecimală (baza 16) în registrul AX.

Acţiunea unei instrucţiuni de transfer şi tipul operanzilor pot fi diferite.

Pentru lucrul cu regiştrii sau cu memoria avem următoarele posibilităţi (exemple):

- Transfer între registre sau locaţii de memorie (instructiunea: MOV);


- Transfer reciproc (schimbarea conţinuturilor) între registre sau locaţii de memorie (XCHG);
- Transferul de la un port (registru de comunicaţie cu alt dispozitiv, specificat prin adresa sa), în
registrul AL sau AX, respectiv pentru octet sau cuvânt (IN adr.port);
- Transferul datelor de la un registrul AL sau AX la un port, specificat prin adresă (OUT adr.port);
- Transferul în AL al conţinutului adresei: ES:[BX+(AL)], cu adresa de segment ES şi deplasamentul
BX;
- Încarcarea valoarii unei adrese într-un registru de 16 biţi (LEA reg16, adr);
- Încarcarea registrului DS şi un registru de 16 biţi, cu conţinutul adresei date şi adresei
următoare(LDS reg16, mem);
- Încarcarea registrului ES şi un registru de 16 biţi, cu conţinutul adresei date şi adresei
următoare(LES reg16, mem).
Interfata USB

Interfata USB (universal serial BUS) s-a raspandit si s-a generalizat in domeniul calculatoarelor de tip PC
(personal computer) ca interfata universala standard, pentru toata gama de dispozitive externe.

Desi denumirea face apel la termenul de BUS care desemneaza o structura de magistrala, functionarea
USB este mai speciala. Caile de transmisie nu sunt bidirectionale, utilizand o conexiune separata pentru
transmisie si una pentru receptie. Conectarea perifericelor nu se face electric in paralel. Pentru
conectarea simultana a mai multor periferice pe conexiunea USB sunt necesare dispozitivele numite
HUB, care realizeaza ramificarea catre dispozitive individuale, atat logic cat si electric. Ramificarea logica
(directarea pachetelor de informatie catre periferice diferite) se face printr-un cod de adresa transmis tot
serial, in cadrul unei secvente a protocolului specific USB. Functionarea USB este complexa, uitilizand
structuri de date si secvente de lucru specifice. Fiecare transfer de date util (cuvantul de date care
trebuie transmis perifericului) in transmisia seriala este incadrat de semnale (coduri) necesare pentru
sincronizare (corespondenta intre momentele de timp corespunzatoare semnalului de tact sau ceas-CK si
duratele de timp corespunzatoare starilor bitilor transmisi), identificarii si dirijarii pachetului de
informatie, precum si stabilirii functiei de transfer specifice (scriere, citire, etc.).

O alta deosebire fata de o magistrala propriu-zisa este modul de stabilire a dialogului cu perifericele.
Calitatea de master o are numai calculatorul, iar detectia evenimentelor, la nivelul perifericelor nu se
face prin intreruperi, ci printr-un sistem de polling, deci prin interogare periodica a starii perifericelor,
care insa nu o efectueaza procesorul calculatorului ci controlerul interfetei (hub-ului) din sistem.

Interfata USB foloseste structuri de date de tip “pachet”, care sunt vehiculate prin conexiunea serială.
Acestea, în afară de transmisia efectivă de date, pot avea rolul de a transmite mesaje sau comenzi, între
dispozitive. Pachetele de informaţie conţin coduri de adresă şi mijloace de sincronizare a receptorilor,
pentru identificarea stărilor de “0” sau “1” conţinute în mesaj.

Pentru stabilirea direcţiei de transfer se foloseşte conceptul de “token” (jeton). Acesta este un mesaj
special, cu rol de comandă care, în anumite situaţii, permite unui dispozitiv să transmită date.

O caracteristică importantă a interfeţei USB este posibilitatea de a lucra pe “nivele” diferite atât din
punct de vedere hardware cât şi software. Astfel, prin intermediul “hub-urilor” comunicaţia se poate
face cu echipamente diferite, dar şi cu “zone” diferite a acestora, identificate prin anumite adrese.
Fiecare zonă adresată poate avea funcţii specifice. La nivel software, interfaţa poate lucra cu programe
aflate fie la nivelul sistemului de operare fie la nivelul programelor de aplicaţie.

Codificarea datelor (informaţiei)

Informaţia transmisa este codificată prin nivele de tensiune ale conexiunii seriale. Aceasta foloseşte
modul de codare “NRZI” (Non Return to Zero Invert) bazat pe existenţa sau non-existenţa unor tranziţii
ale tensiunii, corespunzătoare unor anumite momente de timp. Acestea sunt determinate, la rândul lor,
prin metoda de sincronizare folosită. În acest context, starea “1” este reprezentată prin lipsa unei
tranziţii, iar starea “0” prin apariţia unei tranziţii (faţă de starea precedentă a nivelului de tensiune).
Astfel, un sir de “1” duce la lipsa tranziţiilor pe durată mai lungă, iar un şi de “0” produce tranziţii la
fiecare pas de timp (stabilit prin mecanismul de sincronizare). Un exemplu de codificare NRZI este arătat
mai jos.

Aşa cum s-a arătat mai sus, pentru utilizarea codului NRZI este necesar să existe o corelaţie între
tranziţiile de tensiune pe linie şi momentele (paşii) de timp. Deci, transmiţătorul produce anumite
tranziţii de tensiune, corespunzător unor anumite momente de timp care se succed periodic. Fizic,
acestea sunt determinate cu ajutorul unui generator de impulsuri. La nivelul receptorului trebuie să
existe, de asemenea, un generator de impulsuri, care însă trebuie sincronizat cu cel al transmiţătorului.
Aceasta se poate realiza prin detectarea momentelor (fazelor) tranziţiilor, atunci când au loc, în cadrul
unui mesaj oarecare, oscilatorul generatorului fiind astfel comandat, încât fronturile impulsurilor să fie
sincrone cu apariţia tranziţiilor (utilizând un bloc electronic cunoscut sub denumirea de PLL–“Phase
Looked Loop” adică “buclă de blocare a fazei”).

Structura de adresă

Structura unui sistem USB, din punctul de vedere al protocolului este diferit în raport cu structura fizică
(constructivă). Un dispozitiv conectat la un “hub” (denumit aici şi “host”- gazdă), acesta reprezentând
echipamentul de ramificaţie al conexiunilor, este referit în acest context sub denumirea de “funcţie”
(function), deşi sensul propriu al cuvântului are altă semnificaţie. În documentaţia de specificaţie a
produsului acest termen este definit astfel: Funcţie – un dispozitiv USB care oferă o anumită capabilitate
(facilitate) dispozitivului “host”, ca de exemplu, o conexiune ISDN , un microfon cu transmisie numerică,
dispozitive audio, comandate numeric, etc. O “funcţie” poate să posede mai multe “endpoints” (capete).
Pentru un anumit dispozitiv, acestea sunt definite astfel: Device endpoints – o porţiune (zonă) unui
adresabilă a unui dispozitiv USB, care poate fi sursa sau destinaţia unui flux de informaţie, vehiculat între
“host” şi dispozitiv.

Câmpurile unui pachet

Specific comunicaţiei USB este faptul că datele transmise, indiferent că acestea sunt purtătoare de
informaţie sau sunt necesare protocolului din punct de vedere tehnic (pentru sincronizare, identificarea
dispozitivelor, transmisia comenzilor, detecţia erorilor, etc.) sunt structurate în “pachete”. Acestea
reprezintă “unităţi” de informaţie vehiculată şi, la rândul lor pot fi organizate în mai multe zone
(câmpuri). Dacă anumite câmpuri, ca de exemplu, cele de tip “SYNC” sau “PID” sunt conţinute în mod
standard în toate tipurile de pachete, altele sunt specifice numai pentru anumite grupuri particulare de
pachete. Astfel câmpul “FrameNumber” (număr de cadru), apare numai în cadrul pachetelor de tip
“Start-of-Frame” (început de cadru). Zona biţilor de definiţie a pachetului nu este în format codificat
(NRZI). În mod special s-a renunţat la codificarea NRZI şi “bit stuffing” din motive de claritate a
reprezentării. Toate pachetele conţin câmpurile de delimitare disticte: “Start-of-Packet” şi
“End-of-Packet”. Procedura „bit stuffing” este o metoda utilizata pentru imbunatatirea modului de
sincronizare, pe care nu o mai detaliem aici.

Câmpul SYNC

Toate pachetele conţin la început un câmp de sincronizare (SYNC), care constă într-o secvenţă codificată
astfel încât să asigure o densitate de tranziţii maximă. Aceasta permite circuitului de intrare să
sincronizeze oscilatorul (clock) local cu faza de tranziţie a datelor de intrare. Secvenţa de SYNC
corespunde duratei a 8 biţi pentru regimul de viteză “full/low” şi 32 de biţi pentru regimul de viteză
“high”. În continuare câmpul SYNC va fi considerat implicit şi nu va fi figurat în diagramele structurilor
pachetelor. Ultimii doi biţi ai câmpului SYNC reprezintă un “marker” şi sunt utilizaţi pentru identificarea
sfârşitului câmpului SYNC şi începutul câmpului “PID”.

Câmpul de identificare a pachetului

Acesta este referit ca “packet identifier field” (PID) şi urmează imediat după câmpul SYNC al fiecărui
pachet USB. Un “PID” conţine patru biţi, care indică tipul pachetului, urmaţi de încă patru biţi de
verificare. Tot din câmpul PID este determinat formatul pachetului şi modul de detecţie a erorii de
transmisie. Cei patru biţi de verificare, permit confirmarea recepţionării corecte a codului PID, pentru ca
restul pachetului să poată fi interpretat corect. Sub-câmpul de verificare este generat din codul PID, prin
aplicarea complementului faţă de unu (prin negarea individuală a biţilor). Dacă biţii de verificare nu
reprezintă negarea biţilor de identificare însemnă ca câmpul PID a fost recepţionat eronat.

(LSb) (MSb)

PID0 PID1 PID2 PID3 P ID 0 P ID1 P ID 2 P ID 3

Câmpurile de adresă

Punctul de destinaţie a unui trasfer de date, definit ca “Function Endpoint” este adresat prin utilizarea a
două câmpuri: câmpul de adresă a “funcţiei” (“Address Field”) şi câmpul adresei capătului (Endpoint).
Pentru ca un mesaj (token) să poată să fie transmis corect, ambele câmpuri trebuie decodificate şi
interpretate corect.

Câmpul de adresă a funcţiei (Address Field)

Câmpul de adresă a “funcţiei” (ADDR) specifică funcţia, prin adresa ei, care reprezintă fie sursa fie
destinaţia unui pachet de date, aceasta depinzând de valoarea codului PID. Aşa cum se arată în figura de
mai jos, pot fi specificate 128 de adrese prin câmpul ADDR, conţinând şapte biţi (<0:6>). Câmpul ADDR
este specificat pentru mesajele de tip: “IN”, “SETUP” sau “OUT” şi pentru mesajele speciale de tip “PING”
sau “SPLIT”. Prin definiţie, fiecare valoare ADDR defineşte o singură “funcţie”. Până la apariţia unei
comenzi de “reset” sau “power-up”, adresa unei funcţii are valoarea implicită zero şi apoi adresa trebuie
stabilită (programată) de “host”, în timpul “procesului de enumerare”. Adresa zero este rezervată ca
adresă implicită şi poate fi folosită pentru alt scop.

(LSb) (MSb)

ADDR0 ADDR1 ADDR2 ADDR3 ADDR4 ADDR5 ADDR6

Câmpul de adresă de capăt (Endpoint Field)

Un câmp de suplimentar de patru biţi, denumit “Endpoint Field” (ENDP) permite o adresare mai flexibilă,
atunci când, în cadrul funcţiilor, sunt necesare mai multe destinaţii. Exceptând adresa zero, valorile
corespunzătoare capetelor sunt specifice funcţiilor. Câmpurile “endpoint” sunt definite pentru mesajele
(token) de tip: IN, SETUP sau OUT şi pentru mesajul special de tip PING.

Din punct de vedere funcţional, comunicarea cu “funcţiile” este structurată la nivelul unor căi (linii) de
comunicaţie abstracte (independente de structura fizică), referite cu termenul de “pipe”. Fiecare funcţie
trebuie să accepte o linie de comandă asignată unui capăt (endpoint) cu adresa implicită zero (Default
Control Pipe).

Dispozitivele cu viteză redusă (lowspeed devices) suportă maximum trei căi (pipes) pentru fiecare funcţie:
o linie de comandă implicită, plus două linii adiţionale (fie două de tip “control pipe”, fie una “control
pipe” şi una de tip “interrupt endpoint”, fie două “interrupt endpoint”). Funcţiile de tip “full-speed” şi
“high-speed” pot suporta până la 16 capete de tip “IN” şi “OUT”.

(LSb) (MSb)

ENDP0 ENDP1 ENDP2 ENDP3

Câmpul “Număr de Cadru”

Câmpul pentru Numărul de Cadru conţine 11 biţi şi este incrementat de către Host, în funcţie de numărul
cadrului. Acesta poate creşte până la o valoare maximă de 7FF (Hexa) şi este transmis numai în mesajele
de tip “Start-of-Frame” la începutul fiecărui cadru sau micro-cadru. Figura de mai jos arată structura
cadrelor, respectiv a micro-cadrelor, corespunzător variantelor de standard 1.1 şi 2.0.
1ms 1ms

Cadru “full/low speed”

Cadru “high speed”

Câmpul de Date

Câmpul de date poate conţine între zero şi 1024 bytes (octeţi) şi trebuie să aibă un număr întreg de
bytes. În cadrul fiecărui byte, biţii de date sunt decalaţi în timp (transmisie de tip serial), începând cu
bitul cel mai puţin semnificativ (LSb–Low Significant bit). Formatul câmpului de date şi dimensiunea unui
pachet de date depinde de tipul de transfer (mesaj), de exemplu, transfer (mesaj) de întrerupere,
transfer (mesaj) de comandă sau transfer uniform în timp (“isochronous transfer”)

Tipuri de pachete

Pachete de tip Jeton

Figura de mai jos arată formatul câmpului pentru un pachet de tip jeton. Acesta constă într-o zonă de
PID, care specifică dacă câmpul este de tip IN, OUT sau SETUP eventual de tip ADDR sau ENDP. Pachetul
special de tip PING conţine aceleaşi câmpuri ca şi alte pachete jeton. Pentru transferurile de tip OUT sau
SETUP, câmpurile de adresă şi de capăt (endpoint) definesc în mod univoc destinaţia (corespunzătoare
unui endpoint) care trebuie să primească pachetul de date următor. Pentru transferul de tip IN acestea
definesc în mod univoc care “sursă” (corespunzătoare unui endpoint) trebuie să transmită pachetul de
date. Pentru transferul de tip PING acestea definesc dispozitivul (specificat prin endpoint) care va
răspunde cu un pachet de tip “handshake”.

Pachetele de tip jeton pot fi generate numai de către “host”. Un pachet de tip IN PID defineşte un
transfer de date de la un dispozitiv (“function”) către host. Pachetele de tip OUT şi SETUP PID definesc
transferuri de date de la host către un dispozitiv (“function”). Un pachet de tip PING PID defineşte un
transfer “handshake” de la dispozitiv către host.

Pachetele de tip jeton şi SOF (Start-of-Frame) sunt delimitate de un cod EOP (End-of-Pachet) după trei
bytes ai câmpului pachetului de date. Dacă la decodificarea pachetului este recunoscut codul unui jeton
sau SOF, dar care nu se termină cu un EOP, după trei bytes, acesta trebuie considerat invalid şi trebuie
ignorat de câtre receptor.
(LSb) (MSb)

Câmpul PID ADDR ENDP CRCs

Nr.de biţi 8 7 4 5

Pachete de tip Handshake

Pachetele de tip handshake, aşa cum se arată mai jos, constau numai în codul PID. Acestea sunt utilizate
pentru a raporta starea transferului de date şi pot returna valori (coduri) indicând recepţia cu succes a
datelor, acceptarea sau respingerea unei comenzi, controlul fluxului de date şi condiţiile de oprire.
Codurile “handshake” pot fi returnate numai dacă tipul de transfer respectiv suportă controlul fluxului de
date. Codurile “handshake” sunt totdeauna returnate în etapa sau faza de handshake a transferului şi
pot fi returnate, în locul datelor, în faza de transfer de date. Pachete “handshake” sunt delimitate de un
EOP după un byte al câmpului pachetului. Dacă la decodificarea pachetului este recunoscut codul
handshake, dar care nu se termină cu un EOP după un byte, acesta trebuie considerat invalid şi trebuie
ignorat de câtre receptor.

(LSb) (MSb)

Câmpul PID

Nr.de biţi 8

Pachete de tip Start-of-Frame

Pachetele de “început de cadru” (Start-of-Frame-SOF) sunt generate de host cu o rată nominală, la


fiecare 1,00ms  0,0005ms pentru conexiunea de tip full-speed şi la fiecare 125s  0,0625s, pentru
conexiunea de tip high-speed. Pachetele SOF constau într-un cod PID, care indică tipul de pachet, urmat
de câmpul ‘numărul de cadru’, reprezentat pe 11 biţi, aşa cum este reprezentat mai jos.

(LSb) (MSb)

Câmpul PID Număr Cadru CRCs

Nr.de biţi 8 11 5

Pachetul SOF face obiectul unui transfer de tip jeton în sensul propriu şi nu de date suplimentare. Acesta
distribuie (transferă) o informaţie de marcare (SOF marker), însoţită de numărul de cadru, sincronizată
la anumite intervale de timp corespunzătoare începutului fiecărui cadru. Toate dispozitivele (“funcţiile”)
de tip full-speed şi high-speed, incluzând pe cele de tip “hub” pot recepţiona pachete SOF. La
recepţionarea pachetelor jeton SOF dispozitivele (funcţiile) receptoare nu returnează nici un mesaj. De
aceea nu poate fi garantată primirea codului SOF.
Pachete de Date

Un pachet de date constă într-un cod PID, un câmp de date conţinând zero sau mai mulţi bytes de date
(informaţie) şi un cod CRC, aşa cum este indicat mai jos. Există patru tipuri de pachete de date,
identificate de coduri PID diferite: DATA0, DATA1, DATA2 şi MDATA. Două dintre codurile PID, pentru
DATA0 şi DATA1, sunt astfel definite pentru a putea realiza sincronizarea tranziţiilor pe calea de date.
Toate cele patru coduri PID pot fi utilizate în secvenţa de PID pentru dispozitive (endpoints) cu mare
lărgime de bandă (high bandwidth) şi transfer uniform în timp de mare viteză (high-speed isochronous
transfer). Trei dintre codurile PID (MDATA, DATA0, DATA1) sunt utilizate în transferuri de tip “Split”.
Datele trebuie transmise totdeauna printr-un număr întreg de bytes. Codul CRC este calculat numai în
funcţie de câmpul de date din pachet şi nu include codul PID, care are propriul său câmp de verificare.
Întinderea maximă a câmpului de date pentru dispozitivele low-speed este de 8 bytes. Pentru
dispozitivele full-speed este 1023 bytes, iar pentru dispozitivele high-speed este 1024 bytes.

(LSb) (MSb)

Câmpul PID Date CRC 16

Nr.de biţi 8 0 - 8192 16

Pachete tip PING

Pachete de tip PING formează o clasă de pachete utilizate numai pentru dispozitive de tip “high-speed”.
Acestea sunt utilizate pentru determinarea vitezei de transfer.

NIVELELE DE TRANSFER

Nivelul handshake

Procedurile de handshake sunt diferite, corespunzator diferitelor tipuri de conexiuni. Un dispozitiv de tip
“host” poate să trimită unui dispozitiv de tip “funcţie” o cerere de interogare de tip IN sau OUT. În
funcţie de starea dispozitivului “funcţie”, răspunsul poate să permită dispozitivului “host” să scrie date în
registrul tampon (buffer) al primului sau să anuleze transferul. Acelaşi lucru este posibil în situaţia
inversată.

Corecţia de eroare

Apariţia unei erori poate fi detectată datorită câmpului CRC al unui pachet, dar anumite câmpuri posedă
propriile mijloace de verificare. Cîmpul PID conţine informaţia redundantă a biţilor negaţi şi eroarea
poate fi detectată chiar dacă convenţia de “bit-stuffing” nu este respectată. Trebuie notat totuşi, că în
cazul transferului “izocron”, care are loc într-o manieră unidirecţională, nu există nici o posibilitate
pentru trimiterea pachetelor de tip NAK şi re-recepţionarea datelor, de aceea acest tip de transmisie este
rezervat pentru dispozitivele cu comunicaţie de tip “stream”, unde controlul erorii nu este important
(camere de luat vederi, etc.).

Ramificaţia conexiunilor USB

În sensul clasic, conexiunea USB permite numai transferul între două dispozitive aflate la capete (“host”
şi “function”). Dezvoltarile ulterioare (USB 2.0) au permis ramificarea unei conexiuni USB cu ajutorul unui
dispozitiv de tip “Hub”. Acesta conţine circuite electonice care permit identificarea dispozitivelor
interconectate şi transferul între acestea. Dipozitivele plasate la capătul ramificaţiilor pot lucra pe un
nivel de viteză mai redus.

Comunicaţia prin intermediul unui hub conţine secvenţe specifice de comunicaţie, între host şi hub,
numite “split transactions”. Acestea conţin două părţi: “strat-split” şi “complete-split”, necesare,
respectiv, începerii şi încheierii unui ciclu de comunicaţie.

În diagrama de mai jos sunt indicate categoriile (nivelele) de comunicaţie, între host şi hub, respectiv
între hub şi device.

Nivelele de protocol abstracte

Este important de remarcat, că modul de comunicaţie USB poate fi reprezentat, la nivel abstract, pe mai
multe nivele, aşa cum se obişnuieste, de exemplu, în tehnica reţelelor de date. În general, aceste nivele
pot reprezenta conexiuni cablate, plăci (circuite) de comunicaţie şi căi de comunicaţie (“pipes”) între
programe de sistem, programe de aplicaţie sau proceduri ale sistemului de operare.

Aceste nivele sunt legături logice (abstracte sau simbolice) şi reprezintă asocieri între un “capăt” (adresă
sau locaţie) al unui dispozitiv şi programe localizate la nivel de “host”. O astfel de cale de comunicaţie
(“pipe”) poate avea diferite atribute, de exemplu, poate transfera date sub formă de şiruri (stream pipe)
sau date sub formă de mesaje (message pipe). Calea de nivel zero (Pipe 0) este rezervată şi este
prevăzută în software-ul asociat oricărui dispozitiv.

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