Extras din curs
Capitolul 1. Introducere
1.1. Multiprogramare, multitasking, programare în timp real, calcul paralel,
sisteme distribuite ?
Majoritatea calculatoarelor contemporane sunt formate dintr-o unitate centrală (procesorul)
şi o anumită cantitate de memorie. Exact ca şi primele calculatoare construite pe vremea lui von
Neumann. Totuşi, tehnologia a evoluat mult: în particular, memoria - care pe vremuri era un tambur
magnetic - este acum formată din circuite integrate, adică acelaşi material ca şi unitatea centrală,
dar nu face mai nimica: orice octet lucrează numai atunci când este solicitat de la centru. Per global,
doar o mică parte din hardware este utilizată în fiecare moment. Cum am putea organiza şi exploata
într-un mod mai eficient acest hardware? De exemplu, o tehnologie relativ recentă - FPGA (Field
Programmable Gate Arrays) - permite realizarea unei memorii active (memoria este formată din
mii/milioane de mici unităţi de calcul). Cu asemenea dispozitive se pot rezolva unele probleme la
un raport preţ/performanţă de sute de ori mai bun decât al calculatoarelor obişnuite. Unii cercetători
sînt de părere că numai neştiinţa noastră în a organiza calcule paralele cu zeci (sute) de procese ne
împiedică să realizăm computere mult mai eficiente.
Cum rezolvăm probleme foarte dificile?
Există numeroase probleme matematice şi tehnice pentru a căror rezolvare este nevoie de o
putere de calcul mult superioară calculatoarelor obişnuite. De exemplu: rezolvarea sistemelor de
ecuaţii diferenţiale, calculul fluidelor de ardere în motoare termice, simularea globală a
fenomenelor meteo şi multe altele. Soluţia: calculatoare cu mai multe procesoare (sisteme
multiprocesor), sau punerea pe treabă a mai multor calculatoare în mod simultan ( prin programare
distribuită).
Cum utilizăm eficient calculatorul pe care îl avem?
Mai aproape de utilizatorii de PC, cred că oricare dintre noi suferă când o aplicaţie tip WWW sau
FTP ne ţine blocaţi câteva minute bune, în timp ce calculatorul - practic - nu face nimic. Sub noile
versiuni Windows este posibil ceea ce sub Unix a fost posibil întotdeauna: să lucrezi într-o altă
aplicaţie în timp ce altele aflate în aşteptare continuă în paralel (multitasking). Acest lucru este
posibil prin programarea concurentă. În curând vom avea şi PC-uri cu mai multe procesoare, şi
atunci vom putea să profităm şi mai mult de principiile programării paralele.
De ce se face atâta caz astăzi de programarea concurentă? De ce se studiază acest domeniu?
Practic ce rezultate se urmăresc a fi obţinute?
Câteva răspunsuri:
Preocupările în ceea ce priveşte programarea concurentă nu sînt în nici un caz noi. Nou este faptul
că în prezent acestea încep să pătrundă în sfera de preocupare a unui cerc larg de programatori şi
utilizatori şi nu mai este "privilegiul" unor "iniţiaţi".
Calculatoarele pe care s-au implementat iniţial sisteme concurente (care presupun desfăşurarea, în
paralel, a mai multor activităţi) au fost sisteme cu un singur procesor central. Din punct de vedere
fizic deci, o singură activitate se putea desfăşura la un moment dat (la care se adaugă, eventual,
activitatea unui procesor specializat pentru I/O). Paralelismul apărea doar la nivel logic, prin faptul
Software pentru comunicaţii
Tibor Asztalos
2
că se executau cu schimbul secvenţe de instrucţiuni aparţinând diferitelor activităţi. Au existat
următoarele motive pentru care o astfel de implementare a fost utilă, şi pentru care programarea
concurentă pe sisteme monoprocesor s-a făcut şi se face şi astăzi:
1. Utilizarea eficientă a procesorului central: în timp ce o activitate aşteaptă un anumit eveniment
(de exemplu încheierea unei operaţii de I/O sau a unui acces la distanţă) procesorul se poate dedica
altei activităţi. Acest lucru se poate realiza de mult pe sisteme care lucrează sub UNIX şi mai nou şi
pe PC-uri ce lucrează sub Windows sau Linux.
2. Deservirea în paralel a mai multor utilizatori (sisteme multiuser): mai mulţi utilizatori pot fi
legaţi prin câte un terminal la acelaşi unic calculator. Procesorul deserveşte pentru o anumită cuantă
de timp un utilizator, după care trece la următorul. În mod subiectiv, fiecare utilizator crede că are
acces exclusiv la calculator deşi în realitate activităţile corespunzătoare utilizatorilor se deservesc
succesiv.
3. Aplicaţii care prin natura lor impun o implementare sub formă de activităţi paralele: dacă
precedentele două puncte s-au referit la creşterea eficienţei în utilizarea sistemului sau la
îmbunătăţirea politicii de deservire a utilizatorului, aici este vorba de aplicaţii care prin natura lor
trebuie implementate sub formă de activităţi paralele, chiar dacă aceste activităţi sînt executate, pe
baza unei anumite politici, de către un unic procesor. Este vorba aici, în mod tipic, de aşa numitele
programe în timp real, sau de ceea ce astăzi se numeşte embedded systems, deci sisteme dedicate
controlului într-o anumită aplicaţie (procese industriale, automobile, aviaţie, telecomunicaţii,
echipament casnic, etc.). Comun acestor aplicaţii este că ele presupun furnizarea unui răspuns, întrun
anumit interval de timp, la un impuls exterior. Impulsurile exterioare provoacă lansarea unor
activităţi care, cel puţin conceptual, se desfăşoară în paralele cu activităţi lansate ca răspuns la alte
impulsuri. Maniera în care procesorul se dedică diferitelor activităţi este rezultatul unei planificări,
uneori foarte sofisticate, care trebuie să garanteze furnizarea unui răspuns în timp util.
Considerentele prezentate mai sus sînt valabile şi astăzi, atunci când se doreşte utilizarea
eficientă a unei staţii de lucru sau când se implementează un sistem de control folosind un PC sau
un sistem dedicat bazat pe un microprocesor. Fiind însă vorba de sisteme bazate pe un singur
procesor introducerea concurenţei, deşi poate să îmbunătăţească gradul de utilizare global al
calculatorului, nu rezolvă accelerarea execuţiei unui program luat individual (faţă de cazul în care
acest program ar fi fost executat fiindu-i dedicat în exclusivitate sistemul).
Sistemele bazate pe arhitecturi monoprocesor tradiţionale nu pot rezolva actualmente
probleme extrem de complexe şi care presupun prelucrarea unei cantităţi mari de date: calcule
numerice din domeniul ştiinţelor naturale, simulări, proiectare asistată de calculator, prelucrarea
imaginilor, sisteme economice, etc. Rezolvarea unor asemenea calcule într-un timp acceptabil
necesită sisteme cu o arhitectură nouă, bazate pe activitatea concomitentă a mai multor procesoare,
care să asigure în mod efectiv desfăşurarea în paralel a prelucrării datelor. S-au dezvoltat în această
direcţie arhitecturi foarte diverse, de la sisteme cu zeci de mii de procesoare foarte simple la sisteme
cu un număr redus de procesoare foarte complexe. O altă direcţie de dezvoltare a fost aceea a unor
procesoare foarte puternice care, deşi execută un unic flux de instrucţiuni (deci o singură activitate)
pun la dispoziţia programatorului instrucţiuni foarte puternice care acţionează în paralel asupra unei
cantităţi mari de date
Preview document
Conținut arhivă zip
- Software pentru Telecomunicatii.pdf