Sunteți pe pagina 1din 20

Cap.6.

Sisteme cu procesoare multiple bazate pe transputere

TRANSPUTER – TRANSistor comPUTER – este un procesor special proiectat


pentru realizarea de sisteme multiprocesor fără memorie partajată. Intenţia firmei
INMOS a fost aceea ca transputerul să fie o componentă de bază pentru un
sistem multiprocesor, tot aşa cum tranzistorul este pentru un calculator.

Tranzistor – procesor
Transputer – sistem multiprocesor

Drept urmare, transputerul a fost conceput ca un dispozitiv VLSI format din


procesor, memorie şi legături de comunicaţie serială punct la punct, de mare
viteză, comparabilă cu viteza de acces la memorie.

Se evită astfel problemele legate de arbitarea accesului la o magistrală comună


şi apariţia fenomenului de saturare a acesteia, cu limitarea numărului de
procesoare care o pot partaja în timp.

Transputerul este el însuşi un sistem multiprocesor, întrucât poate conţine, pe


lângă procesorul principal, un număr de procesoare specializate sau
coprocesoare, aşa cum sunt coprocesorul matematic de virgulă mobilă şi
procesoarele de comunicaţie care gestionează liniile de comunicaţie serială.

Transputerul conţine un procesor RISC, microprogramat, care recunoaşte un


număr redus de instrucţiuni de bază (32), utilizate pentru implementarea unor
programe secvenţiale simple. În plus, există grupuri auxiliare de instrucţiuni
specializate, care implementează operaţii aritmetice sau de planificare a
procesor.

Întrucât un proces executat pe un transputer poate fi compus el însuşi din mai


multe procese concurente, transputerul dispune de un planificator de procese
microcodat, care repartizează timpul procesorului către procese.

Planificatorul de procese lucrează cu două niveluri de prioritate: „high” şi „low:.


Orice proces de prioritate „high” care are toate condiţiile pentru a se executa (nu
aşteaptă apariţia unor evenimente) o va face înaintea oricărui proces de
prioritate „low”.

6.1. Arhitectura internă a transputerului

Aşa cum reiese din fig. 6.1, un transputer este compus dintr-un procesor,
memorie şi un sistem de comunicaţie interconectate printr-o magistrală internă
de date 32 de biţi. Magistrala este accesibilă şi din exterior, prin intermediul unui
bloc de interfaţare cu memoria externă. Aceasta extinde capacitatea limitată a
memoriei interne (4KB) până la 4 GB (magistrală de adrese de 32 de linii).

De asemenea, unele variante de transputer (T805) integrează pe acelaşi cip şi o


unitate de virgulă mobilă (FPU).

Unitate de virgulă mobilă (FPU)

Reset
Analyse
Error Procesor
BootFromROM Servicii de (CPU)
ClockIn sistem
VCC
GND
Interfaţă de
legătură Link0In
RAM (LINK) Link0Out

Interfaţă de
Link3In
legătură
(LINK) Link3Out

Interfaţă cu memoria externă

Fig.6.1. Arhitectura transputerului T805

CPU – conţine 3 registre generale de lucru de 32 de biţi: A, B şi C, care


formează o stivă hardware. Aceste registre sunt utilizate pentru operaţii
aritmetice cu numere întregi fără semn şi cu variabile de tip adresă.

Încărcarea unei valori în stivă : B→C, A→B, val→A.


Extragerea unei valori din stivă: val←A, A←B, B←C

În mod sismilar, FPU conţine o stivă hardware cu regiştrii AF, BF şi CF. Adresele
variabilelor în virgula mobilă sunt formate pe stiva CPU, apoi valorile variabilelor
în virgula mobilă sunt transferate între locatia de memorie adresată şi stiva FPU
sub controlul CPU.
Stiva CPU este folosită pentru manipularea adreselor variabilelor în virgulă
mobilă, ceea ce face ca lungimea cuvântului CPU să fie independentă de
lungimea cuvântului FPU.

Mai mult, întrucât planificatorul de procese al transputerului lucrează cu două


niveluri de prioritate, stiva FPU este dublată, astfel încât atunci când transputerul
comută între două procese aflate pe niveluri de prioritate diferite nu trebuie
salvată starea procesului întrerupt în memorie.

Înafară de cele 3 registre de uz general, CPU mai conţine alte 3 registre cu


funcţii specifice:

Instruction Pointer – indică adresa următoarei instrucţiuni;

Workspace Pointer – indică zona în care sunt stocate variabilele locale ale
procesului aflat în execuţie;

Operand Register – utilizat în formarea operanzilor instrucţiunilor.

A Variabile locale
B
C Program
WPtr
IPtr
Operand

Expresiile sunt evaluate pe stivă, iar instrucţiunile se referă implicit la stivă. De


exemplu, instrucţiunea add adună cele două valori din vârful stivei şi depune
rezultatul tot în vârful stivei. Utilizarea stivei elimină necesitatea adresării
explicite a operanzilor.

Datele statistice culese pe baza observaţiilor asupra unui mare număr de


programe arată că un număr de 3 registre furnizează un echilibru optim între
compactitatea codului şi complexitatea implementării hardware.

Observaţie:

Nu este prevazut nici un mecanism care să detecteze dacă pe stivă s-au


încărcat mai mult de 3 valori. Este uşor pentru compilator să se asigure că acest
lucru nu se va întâmpla niciodată.
6.2. Instrucţiunile transputerului

Încă din faza de proiectare a transputerului s-a stabilit că acesta va fi programat


într-un limbaj de nivel înalt. De aceea, setul de instrucţiuni al transputerului a fost
proiectat pentru o compilare simplă şi eficientă.

Toate instrucţiunile au un acelaşi format şi au fost alese astfel încât să dea o


reprezentare compactă a operaţiilor care apar cel mai frecvent în cadrul
programelor. Setul de instrucţiuni este independent de lungimea cuvântului
procesorului, permitând ca acelaşi microcod să fie utilizat atât pe transputere de
16 cât şi de 32 de biţi.

Fiecare instrucţiune este formată dintr-un singur octet, împărţit în două câmpuri
de 4 biţi:
- cei mai semnificativi 4 biţi reprezintă codul funcţiei (opcodul);
- cei mai puţin semnificativi 4 biţi – data asociată instrucţiunii.

D7 ………… D4 D3 ………… D0
Funcţia Data

Această reprezentare permite definirea unui număr de 16 funcţii, fiecare având o


dată cu valori cuprinse între 0 şi 15 (codificare pe 4 biţi).

Treisprezece dintre acestea sunt denumite funcţii directe şi sunt utilizate pentru
a codifica cele mai importante instrucţiuni realizate de orice procesor:

1. ldc – load constant


2. ldl – load local
3. stl – store local
4. ldnl – load non-local
5. stnl – store non-local
6. j – jump -
7. adc – add constant
8. cj – conditional jump
9. ldlp – load local pointer
10. ldnlp – load non-local pointer
11. call – call
12. ajw – adjust workspace
13. eqc – equals constant

Instrucţiunile ldl şi stl accesează locaţii de memorie relativ la spaţiul de lucru


(poziţia indicată de Wptr). Instrucţiunile ldnl şi stnl accesează locaţii de memorie
relativ la registrul A.
Funcţii prefix

Două din cele trei coduri de funcţii care au mai rămas permit operandului unei
instrucţiuni să aibă o lungime extinsă:

14. pfix - prefix


15. nfix – negative prefix

Toate instrucţiunile sunt executate prin încărcarea celor 4 biţi ai câmpului de date
în cei mai puţin semnificativi 4 biţi ai registrului Operand, care este apoi utilizat
ca operand al instrucţiunii. Toate funcţiile, cu excepţia celor de tip prefix, se
termină cu ştergerea registrului Operand, pregătindu-l astfel pentru următoarea
instrucţiune.
D7 ………… D4 D3 ………… D0
Funcţia Data

Operand register

Instrucţiunea pfix încarcă cei 4 biţi de date ai săi în registrul Operand, apoi
deplasează continutul acestuia spre stânga cu 4 poziţii.

Instrucţiunea nfix este similară, cu diferenţa că registrul Operand este


complementat înainte de a fi deplasat.

Astfel, operanzii pot fi extinşi la orice lungime până la dimensiunea registrului


Operand, printr-o secvenţă de instrucţiuni de tip prefix.

Avantajul acestor instrucţiuni este acela că sunt decodificate şi executate la fel


ca orice altă instrucţiune, care simplifică şi conduce la creşterea vitezei de
decodificare a instrucţiunilor.

De asemenea, ele simplifică compilarea limbajelor de nivel înalt, furnizând o cale


uniformă de a permite oricărei instrucţiuni să aibă un operand de orice
dimensiune. În plus, ele permit operanzilor să fie reprezentaţi într-o formă
independentă de lungimea cuvântului procesorului.

Funcţii indirecte

Codul de funcţie rămas este opr (operate). El face ca operandul său să fie
interpretat ca o operaţie asupra valorilor din stivă. Aceasta permite ca alte 16
operaţii (funcţii indirecte) să fie codificate într-o instrucţiune de 1 octet.
În acelaşi timp, instrucţiunile de tip prefix pot fi utilizate pentru a extinde
operandul unei instrucţiuni opr la fel ca şi pentru celelalte instrucţiuni. Rezultă
astfel un număr foarte mare de operaţii care se pot codifica folosind această
reprezentare.

Codificarea funcţiilor indirecte a fost aleasă astfel încât cele mai frecvente
operaţii sunt reprezentate fără utilizarea de instrucţiuni de tip prefix. Acestea sunt
operaţii aritmetice, logice şi de comparare, cum ar fi:

add
exclusive or
greather than

Cele mai puţin frecevente operaţii care apar au reprezentări care necesită o
singură operaţie de tip prefix. În această categorie intră operaţiile de
încărcare/descărcare a stivei FPU, de operare asupra valorilor din această stivă,
precum şi alte operaţii cum ar fi cele de prelucrare grafică, de recunoaştere de
forme şi de implementare a codurilor corectoare de erori.

6.3. Suportul pentru execuţia de procese concurente

Procesorul are un planificator de procese implementat în hardware care permite


execuţia cvasisimultană, cu partajarea timpului procesorului, a unui număr de
procese oricât de mare. Aceasta elimină necesitatea existenţei unui nucleu
software multitasking.

În orice moment, un proces poate fi:

Activ:
- în curs de execuţie;
- în aşteptarea accesului la timpul de execuţie al procesorului.

Inactiv:
- în aşteptarea unui mesaj de la o intrare;
- în aşteptarea terminării transmisiei unui mesaj;
- în aşteptarea expirării unui interval de timp.

Planificatorul de procese lucrează astfel încât procesele inactive nu consumă din


timpul procesorului. Procesele active aflate în aşteptarea intrării în execuţie sunt
ţinute într-o listă de aşteptare. Aceasta este o listă de spaţii de lucru ale
proceselor, implementată cu ajutorul a doua registre:
- unul care indică primul proces din listă;
- celălalt care indică pe ultimul.
În figura de mai jos, procesul S este în execuţie, iar P, Q şi R sunt active, în
aşteptarea execuţiei.

Spaţii de lucru ale


proceselor
Registre Program

Front P

Back
Q
A
R
B
C S
WPtr
IPtr
Operand

Un proces este executat până când nu mai poate continua deoarece aşteaptă un
mesaj de la un alt proces, aşteaptă terminarea transmisiei sau expirarea unui
interval de timp. De fiecare dată când un proces devine inapt pentru a continua
execuţia, pointerul de instrucţiuni este salvat în spatiul de lucru şi este extras din
listă următorul proces. Timpul de comutare între cele două procese este foarte
mic deoarece informaţia de stare care trebuie salvată este foarte redusă.

Pentru lucrul cu procesele concurente, procesorul dispune de un număr de


operaţii speciale:

start process
end process

Când este executată o structură paralelă, sunt folosite instrucţiuni start process
pentru a crea procesele concurente necesare. O instrucţiune start process
crează un nou proces prin adăugarea unui nou spaţiu de lucru la sfârşitul listei,
permiţând noului proces concurent să fie executat împreună cu cele aflate deja
în listă.

Terminarea corectă a unei structuri paralele este asigurată prin utilizarea


instrucţiunii end process. Aceasta foloseşte o locaţie din spaţiul de lucru ca
numărător a componentelor structurii paralele care trebuie să se încheie.
Numărătorul este iniţializat cu numărul de componente înainte ca acestea să fie
lansate.
Fiecare componentă se termină cu end process, care decrementează şi testează
numărătorul. Pentru toate componentele, cu excepţia ultimei componente,
număratorul este diferit de 0 şi componenta este eliminată din listă. Pentru ultima
componentă numărătorul este 0 şi componenta continuă.

6.4. Comunicaţia între procese

Procesele comunică între ele prin intermediul canalelor. Comunicaţia este punct-
la-punct, sincronizată şi nebuferizată. De aceea, un canal nu are nici coadă de
procese, nici coadă de mesaje şi nici buffer de mesaje.

Un canal de comunicaţie între procese care se execută pe acelaşi transputer


este implementat printr-un singur cuvânt de 32 de biţi în memorie (canal intern).

Un canal între procese care se execută pe transputere diferite este implementat


prin legături seriale punct-la-punct (canal extern).

Procesorul dispune de un număr de operaţii pentru transferul de mesaje, cele


mai importante fiind:

input message
output message

Acestea utilizează adresa canalului pentru a determina, la momentul execuţiei,


dacă un canal este intern sau extern. Asta înseamnă că aceeaşi secvenţă de
instrucţiuni poate fi folosită atât pentru canale interne cât şi pentru canale
externe, permiţând unui proces să fie scris şi compilat fără a cunoaşte unde sunt
conectate canalele sale.

Comunicaţia are loc atunci când ambele procese, transmiţător şi receptor, sunt
pregătite. Procesul care devine primul gata trebuie să aştepte până când şi cel
de-al doilea este pregătit pentru transfer.

Un proces realizează o operaţie de intrare sau de ieşire încărcând pe stivă un


pointer către mesaj, adresa canalului şi o valoare reprezentând numărul de octeţi
care trebuie transferat, după care se execută o instrucţiune input/output
message.

Comunicaţia pe canale interne

În orice moment un canal intern conţine fie identificatorul unui proces, fie
valoarea specială „empty”. Canalul este iniţializat cu „empty” înainte de a fi
utilizat.
Când un mesaj este trecut prin canal, identificatorul primului proces care este
pregătit este memorat în canal şi procesorul începe să execute următorul proces
din lista de aşteptare.

Când al doilea proces devine gata, mesajul este copiat, procesul în aşteptare
este reintrodus în lista de aşteptare, iar canalul este resetat la starea iniţială. Nu
contează care dintre procese (transmiţător sau receptor) a devenit primul gata.

P CH În figura alăturată, procesul P urmează


Registre
să execute o instrucţiune de ieşire în
canalul „empty” CH. Stiva conţine un
A: Count pointer către mesajul de transmis,
B: Channel Empty adresa canalului CH şi numărul de
octeţi al mesajului.
C: Pointer

După execuţia instrucţiunii output


P CH message, canalul CH conţine adresa
Workspace spaţiului de lucru al procesului P, iar
adresa mesajului de transmis este
Next Instr. P memorată în spaţiul de lucru al lui P.
Procesul P este trecut în aşteptare, iar
Pointer
următorul proces din lista de procese
active este lansat în execuţie.

Canalul CH şi procesul
P CH Q
P rămân în această
Workspace stare până când un al
A: Count
doilea proces, Q,
Next Instr. P B: Channel execută o instrucţiune
Pointer C: Pointer de intrare pe acelaşi
canal, CH.

P CH
Workspace
Mesajul este copiat, procesul în
Next Instr. Empty aşteptare P este reintrodus în lista
de procese active, iar canalul CH
List este adus în starea iniţială.
Comunicaţia pe canale externe

Atunci când un mesaj este transferat printr-un canal extern, procesorul


încredinţează sarcina de a transfera mesajul unui procesor specializat, care
asigură interfaţa cu legatura serială corespunzătoare.

Atunci când mesajul a fost transferat, interfaţa cu legătura serială indică


procesorului că poate reintroduce procesul aflat în aşteptare, în lista de procese
active. Aceasta permite procesorului să continue execuţia altor procese pe
durata transferului unui mesaj.

Fiecare interfaţă de legătură utilizează trei regiştri:


- un pointer către spaţiul de lucru al unui proces;
- un pointer catre un mesaj;
- un număr indicând lungimea mesajului.

În figura de mai jos, procesele P (transmiţător) şi Q (receptor), executate pe


transputere diferite, comunică între ele folosind un canal L, implementat printr-o
legătură ce uneşte cele doua transputere.
P
L
Registre

A: Count
B: Channel
C: Pointer

Atunci când P execută instrucţiunea de ieşire, regiştrii din interfaţa de legătură a


transputerului pe care este executat P sunt iniţializaţi, iar P este trecut în
aşteptare.
P
L
Workspace

Next Instr. P
Pointer
Count
P Q
L
Workspace Registre

A: Count
Next Instr. P B: Channel
Pointer C: Pointer
Count

Similar, când Q execută instrucţiunea de intrare, regiştrii interfeţei sale de


legătură sunt iniţializaţi, iar Q este trecut în aşteptare.
P Q
L
Workspace Workspace

Next Instr. P Q Next Instr.


Pointer Pointer
Count Count

Mesajul este acum copiat prin intermediul legăturii L, după care spaţiile de lucru
ale proceselor P şi Q se reîntorc in listele corespunzătoare de procese active.

P Q
L
Workspace Workspace

Next Instr. Next Instr.


List List

Protocolul utilizat de P şi Q face ca să nu conteze care dintre ele devine primul


gata pentru comunicaţie.
6.5. Legăturile de comunicaţie

O legatură (link) conectează o interfaţă de legătură a unui transputer direct la o


interfaţă de legătură a unui alt transputer prin două linii de semnal unidirecţionale
şi de sensuri opuse, pe care datele sunt transmise serial. Cele două linii
reprezintă două canale de comunicaţie externe şi utilizează un protocol asincron
simplu pentru a multiplexa informaţii de date şi de control.

Mesajele sunt transmise ca o secvenţă de octeţi. Recepţia fiecarui octet trebuie


să fie confirmată înainte de a începe transmisia următorului octet.

Formatul unui caracter: 1 1 Data (8 biţi) 0

Formatul unei secvenţe de confirmare: 1 0

Protocolul permite generarea unei confirmări de îndată ce receptorul a detectat


prezenţa unui caracter pe linie, astfel încât confirmarea poate ajunge la
transmiţător chiar înainte de terminarea transmisiei caracterului curent, astfel
încât transmiţatorul poate transmite imediat un nou caracter.

6.6. Timerul

Transputerul are un timer care contorizează fiecare microsecundă. Valoarea


curentă a timerului poate fi citită printr-o instrucţiune read timer.

Un proces poate executa o instrucţiune timer input, caz în care va fi pus în


aşteptarea scurgerii unui interval de timp. Instrucţiunea timer input necesită
specificarea unui moment de timp. Dacă timpul este „în trecut”, instrucţiunea nu
are nici un efect. Dacă timpul este „în viitor”, atunci procesul este pus în
aşteptare. Atunci când se ajunge la momentul de timp specificat, procesul este
reintrodus în lista de procese active.

6.7. Alternative

Instrucţiunile de tip alternativă permit unui proces să astepte date de intrare de la


oricare dintre membrii unui grup de canale, sau până la scurgerea unui interval
de timp. Acestea sunt instrucţiuni speciale, întrucât instrucţiunea input message
blochează procesul apelant până când canalul de intrare specificat este pregătit.

enable channel disable channel alternative wait


enable timer disable timer
Structurile de control de tip alternativă sunt implementate prin validarea intrării
canalului sau a timerului specificat în fiecare componentă. Apoi se utilizează
instrucţiunea alternative wait pentru a pune în aşteptare procesul dacă nici unul
dintre canale şi nici timerul nu este gata.

Procesul va fi apoi relansat atunci când oricare dintre acestea devine gata.

Urmează apoi dezactivarea canalelor de intrare şi a intrării de la timer.

6.8. Transputerul T805. Semnale la pini şi funcţionare

64 bit FPU

Reset
Analyse
Error 32 bit
BootFromROM System CPU
ClockIn Services
VCC
GND
ProcSpeedSelect0÷2
Link LinkSpecial
Services Link0Special
Timers
Link123Special

4KB Link Link0In


DisableIntRam Interface
SRAM Link0Out

ProcClockOut Link Link1In


notMemS0÷4 Interface Link1Out
notMemWrB0÷3
notMemRd Link Link2In
notMemRf External Interface Link2Out
RefreshPending Memory
MemWait Interface Link Link3In
MemConfig Interface Link3Out
MemReq
MemGranted EventReq
MemNotWrD0 Event EventAck
MemNotRfD1 EventWaiting
MemAD2÷31

Fig.6.2. Transputerul T805 – Semnale la pini


T805 este un trannsputer cu un processor de 32 de biţi şi o unitate de virgulă
mobilă de 64 de biţi.

Viteza procesorului poate fi selectată de la pini în trepte, cu ajutorul semnalelor


ProcSpeedSelect0÷2.

Interfaţa cu memoria furnizează 32 de linii de adrese/date multiplexate în timp.


Un controller de memorie configurabil furnizează toate semnalele de control şi de
refreşare a memoriei externe DRAM.

Blocul serviciilor de system

ClockIn – semnal de tact de 5 MHz, multiplicat intern – poate fi utilizat în comun


de mai multe transputere.

Reset – După ce Vcc devine validă, această linie trebuie menţinută activă cel
puţin 10 ms. Frontul descrescător al semnalului Reset iniţializează transputerul,
declanşează secvenţa de configurare a memoriei şi lansează rutina de
bootstrap. Pe durata activării liniei Reset, ieşirile link-urilor seriale sunt forţate în
“0”, iar intrările link-urilor şi EventReq trebuie menţinute în “0”. Accesul la
memorie nu poate avea loc pe durata resetării, dar poate să apară ulterior, chiar
şi înainte de bootstrap.

După dezactivarea liniei Reset este necesar un interval de întârziere de 144


perioade de ClockIn, după care se trece la configurarea memoriei. Indiferent
dacă a fost găsită sau nu o configuraţie de memorie, vor fi executati 36 de cicluri
de cictire a informaţiilor de configurare folosind o configuraţie implicită a
memoriei, într-o încercare de a le accesa din memoria ROM externă.

Urmează o nouă întârziere, cu o durată dependentă de configuraţia actuală. În


final se vor efectua 8 cicluri de refreşare consecutivi care vor iniţializa memoria
RAM, folosind noua configuraţie a memoriei. Urmează apoi secvenţa de
bootstrap.

Reset

Delay Internal External Delay Refresh Boot


Configuration Configuration

Boot-area transputerului
Primele instrucţiuni pe care le execută transputerul pot fi extrase dintr-o
memeorie ROM sau programul de bootstrap poate fi încărcat printr-o legătură
serială.

Astfel, dacă BootFromRom=1, transputerul începe să execute instrucţiuni


începând cu primii doi octeţi de la sfârşitul memoriei externe, adică de la adresa
7FFF FFFEh. La această locaţie trebuie să se afle o instrucţiune de salt înapoi,
la un program din ROM. După acest acces, linia BootFromROM poate fi
dezactivată. Procesorul consideră că execută un proces de prioritate low, iar
registrul W pointează la MemStart.

Dacă BootFromRom=0, transputerul aşteaptă primul mesaj de bootstrap pe


oricare din link-urile sale. Transputerul este pregătit să primească primul octet pe
un link la două cicluri procesor după dezactivarea liniei Reset.

Dacă primul octet recepţionat (octetul de control) este >1, atunci se consideră că
acesta reprezintă numărul octeţilor secvenţei de bootstrap care vor urma să vină.
Pe măsură ce aceştia sunt recepţionaţi, sunt depuşi în memoria internă,
începând cu adresa MemStart, ca un proces de prioritate low. Spaţiul de
memorie de imediat după secvenţa de cod încărcată va fi considerat implicit
drept spaţiu de lucru pentru acest prim proces. Un octet care soseşte pe un alt
link după recepţionarea octetului de control pe linkul de boot sau pe linkul de
boot după ultimul octet al secvenţei de bootstrap va fi reţinut şi nu se va
transmite nici o confirmare până când nu va fi solicitat de un proces.

Înainte de încărcarea secventei de bootstrap, orice locaţie de memorie internă


sau externă poate fi citită sau înscrisă pe linia de boot. Dacă octetul de control
este 00h, atunci sunt asteptaţi pe link alţi 8 octeţi. Primii 4 reprezintă adresa la
care vor fi înscrişi următorii 4. Dacă octetul de control este egal cu 01h, atunci
atunci următorii 4 octeţi sunt adresa locaţiei de memorie care va fi citită şi
transmisă pe link (4 octeţi de date). Aceste operaţii pot avea loc înainte de a se
primi un cuvânt de control (>1), moment care marchează începutul procedurii de
bootstrap.

Analyse

Dacă este activată linia Analyse atunci când transputerul execută programul de
aplicaţie, el se va opri automat la următoarea intervenţie a planificatorului de
procese. Din momentul activării liniei Analyse, transputerul se va opri după 3
cuante de timp ale planificatoruluide taskuri plus timpul necesar pentru orice
proces de prioritate ridicată pentru a se termina.

După oprire, este păstrată starea internă a transputerului, refreşarea memoriei


continuă, ca şi transferurile de date de tip input. Ieşirile de date vor continua doar
cât timp vor mai avea date în bufferul link-ului, fără a mai încerca un nou acces
la memorie.

După activarea liniei Analyse, se activează şi linia Reset. În acest moment,


registrele CPU vor conţine următoarele informaţii:

Iptr – MemStart (bootare de pe link)


- adresa externă de bootstrap (bootare din ROM).

Wptr – MemStart (bootare din ROM)


- Adresa primului cuvânt liber de după programul de bootstrap (pe link).

A – valoarea lui Iptr la oprirea procesului;


B – valoarea lui W la oprirea transputerului, împreună cu prioritatea procesului
oprit.
C – codul de identificare al link-ului de boot (dacă este cazul).

Error, ErrorIn

Pinul Error este controlat de o poartă SAU cu două intrări:


Error flag
Error
ErrorIn

Error flag este un indicator de condiţie intern al transputerului, care poate indica,
spre exemplu, o depăşire la o operaţie aritmetică, o încercare de împărţire prin 0,
depăşirea limitelor la accesul datelor dintr-un tabel, sau poate fi setat prin
program.

Odată setat, el poate fi şters numai prin execuţia instrucţiunii testerr. Acest flag
nu este şters prin resetarea transputerului, , astfel încât orice transputer la care a
apărut o eroare poate fi analizat „post-mortem”.

Un proces poate fi programat să se oprească la setarea acestui flag, pentru a nu


propaga efectul erorii către alte procese, dar procesele care nu necesită data
respectivă pot să continue să ruleze.

ErrorIn nu afectează starea internă a transputerului în nici un fel. Prin setarea


unui alt flag intern, HaltOnError, se poate cere transputerului să se oprească la
apariţia unei erori interne, fără însă a fi afectate direct alte transputere.

O altă metodă de tratare a erorilor este cea în care procesul la care a apărut o
eroare sau transputerul respectiv să oprească întreaga reţea. Aceasta se poate
face prin înlănţuirea pinilor ErrorIn şi Error între transputere şi aplicarea liniei
Error a transputerului final la intrarea EventReq a unui transputer master,
programat adecvat. Acesta din urmă va folosi funcţia de tip Analyse pentru a
depana eroarea.

Transputer
Master Latch
Event

T805-S0 T805-S1 T805-Sn


ErrorIn Error ErrorIn Error ErrorIn Error

Întreruperile externe sunt prezentate pe linia de intrare Event Request şi sunt


confirmate pe linia Event Acknowledge. După acetivarea unei cereri şi după
recunoaşterea cererii de către un proces aflat în asteptarea acestui eveniment,
transputerul activează ieşirea Event Acknowledge şi o menţine activă până la
dispariţia cererii. Linia Event Waiting este activata de către transputer ori de câte
ori un proces se pune în aşteptarea unui eveniment extern. Această linie este
dezactivată odată cu Event Acknowledge.

6.9. Memoria transputerului

T805 are 4KB de memorie SRAM integrată pe cip, utilizată pentru transferuri
rapide de date. Fiecare ciclu se acces la memorie durează numai un ciclu
procesor (o periadă a semnalului la linia ProcClockOut).

În plus, T805 poate accesa o memorie externa de până la 4 GB. Memoria internă
şi cea esterna fac parte din acelaşi spaţiu liniar de adresare. Memoria internă
pate fi dezactivată prin activarea liniei DisableIntRam.

Memoria transputerului este adresabilă pe octet, cuvintele fiind aliniate la adrese


multiplu de 4. Cel mai puţin semnificativ octet dintr-un cuvânt este cel de la
adresa mai mică.

Memoria interna începe la adresa cea mai mică (în reprezentare ca întreg cu
semn, deci la cea mai „negativă” adresă): 8000 0000h şi se întinde până la
adresa 8000 0FFFh. Memoria la care are acces utilizatorul începe la adresa
8000 0070h (numită anterior şi MemStart).

Contextul unui proces conţine un descriptor al spaţiului de lucru (WPtr) şi un


pointer de instrucţiuni (Iptr). Comutarea contextului, realizată de o instrucţiune
breakpoint, interschimbă WPtr şi Iptr al procesului curent cu locaţiile WPtr şi IPtr
menţinute în memoria utilizatorului (deasupra lui MemStart). În această zonă
sunt menţinute 2 astfel de contexte, câte unul pentru fiecare nivel de prioritate.
Zona de memorie rezervată (sub MemStart) este utilizată pentru a implementa
canalele externe de tip link şi event. De asemenea, timerele utilizează două
cuvinte, TPtrLoc0 şi TPtrLoc1, câte unul pentru fiecare nivel de prioritate.

Valorile registrelor procesului curent de prioritate low care a fost întrerupt de un


proces de prioritate high sunt salvate în locaţiile IntSaveLoc. Celelalte locaţii sunt
rezervate pentru alte operaţii speciale.

Memoria externă începe la adresa 8000 1000h şi se întinde, prin 0000 0000h,
până la 7FFF FFFFh. Datele de configurare a memoriei şi codul de bootstrap din
ROM trebuie să se afle în vârful spaţiului de adrese „pozitiv”, începând de la
7FFF FFF6h şi, respectiv, 7FFF FFFEh. Spaţiul de adrese situat imediat
dedesubt este utilizat de obicei pentru memoria ROM.

Reset Inst. #7FFF FFFC


Configurare Memorie #7FFF FFF6

#8000 1000 – memorie externă

#8000 0070 - MemStart

Rezervat
#8000 0048
EregIntSaveLoc #8000 0044
STATUSIntSaveLoc
CregIntSaveLoc
BregIntSaveLoc
AregIntSaveLoc
IPtrIntSaveLoc
WdescIntSaveLoc #8000 002C
TPtrLoc1 #8000 0028
TPtrLoc0 #8000 0024
Event #8000 0020
Link3Input

Link0Input #8000 0010


Link3Output
#8000 0004
Link0Output #8000 0000
Semnale de interfaţă cu memoria externă

MemAD2÷31 – linii de adresă/date – adresa este reţinută într-un latch la


începutul fiecărui ciclu de acces la memorie, după care seunt folosite pentru
transferul de date.

MemNotRfD1 şi MemNotWrD0 – semnale de refreşare şi de scriere în memorie,


multiplexate în timp cu cele mai puţin semnificative două linii de date.

notMemRd – citire memorie

notMemWrB0÷3 – semnale de scriere pentru fiecare din cei 4 octeţi ai unui


cuvânt de 32 de biţi.

notMemS0÷4 – semnale configurabile, de interfaţare cu diferite tipuri de


memorieşi dispozitive de I/E mapate în memorie.

MemWait – sincronizarea cu dispozitive mai lente;

notMemRf – validează mecanismul de refreşare integrat pe cip;

RefreshPending – indică un ciclu de refreşare in curs de desfăşurare;

MemReq, MemGranted – linii de cerere/confirmare a accesului DMA

MemConfig – linie de intrare utilizată pentru a citi datele de configurare atunci


când se stabilesc caracteristicile interfeţei cu memoria externă.
notMemWrB3
ClockIn
notMemWrB2
Link0In
T805
Link0Out
notMemWrB1
T805
Link1In
Link1Out notMemWrB0 T805
Link2In notMemRd
Link2Out T805 notMemS3 notOE 256K×4
T805
notCAS DRAM
notMemS2
Link3In
Link3Out notMemS1
notMemS0 notRAS

MemAD24÷31
MemConfig Column

MemAD16÷23
MUX
Address
Row/Column
Latch

MemAD8÷15
MemNotWrD0
MemNotRfD1
MemAD2÷7
MemNotWrD0
MemNotRfD1
MemAD2÷31

MemAD11÷9

MemAD2÷10
MemAD5

Fig. 6.3. Structura unui sistem cu transputer T805

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