Uvod v paralelne procese

 

Problemi paralelnih procesov

So�asno izvajanje ve� programskih procesov odpira dodatne probleme, ki jih pri navadnih programih ne zasledimo, �etudi so ti programi lahko zelo kompleksni. Ve�ina teh problemov terja pravilno sinhronizacijo paralelnih procesov. Stvar postane �e toliko te�ja, �e ti programski procesi ne potekajo na istem ra�unalniku. Oglejmo si najprej tipi�ne probleme, zatem pa �e mehanizme, ki jih moramo zato uporabiti.


Problem kriti�nih sekcij

Problem nastopi, ko ve� so�asnih procesov ob�asno terja dostop do skupnih ra�unalni�kih virov ali skupnih podatkovnih struktur, ki jih �eli spreminjati. Ko dobi proces dostop do takih skupnih podatkovnih struktur, je v takoimenovani kriti�ni sekciji .

Zagotoviti moramo,da je v �asu, ko je nek proces v kriti�ni sekciji, drugim procesom dostop v to sekcijo prepovedan.

Ostali procesi lahko medtem paralelno potekajo, v primeru zahteve po vstopu v zasedeno kriti�no sekcijo pa �akajo. Ob sprostitvi kriti�ne sekcije lahko vanjo vstopi lepo en proces.

Medsebojno izob�enje so�asnih programskih procesov lahko zagotovimo s posebnimi konstrukti.

Primer:

Vzemimo sistem z ve� terminali. Sistem naj "�teje �tevilo vrstic, vtipkanih v enem dnevu". V ta namen imamo skupno sistemsko spremenljivko lineCount. Delo posameznih uporabnikov za terminali nadzorujejo lo�eni procesi. Kadarkoli nek uporabnik na svojem terminalu vtipka , se izvedejo v sklopu njegovega programskega procesa stavki naslednje vsebine:
load lineCount 
add 1 
store lineCount
Vzemimo primer, da lineCount �e vsebuje vrednost 1234 in da proces A pravkar izvaja ukaz add, ki vrednost v akumulatorskem registru pove�a na 1235. Naj v tem trenutku proces B (zaradi enakega �tetja) prav tedaj izvede operacijo load. Podatke 1235 v akumulatorju se zato spet pokvari na 1234 in, �e bi v tem hipu proces A izvedel �e zadnjo operacijo (store), bi o�itno shranil v spremenljivko lineCount zgre�eno vrednost.

Problem lahko re�imo, �e je dostop posameznih programskih procesov do takih skupnih spremenljivk, kot je v na�em primeru lineCount, ekskluziven.

Podobne probleme zasledimo tudi na primer pri ve�uporabni�kem dostopu do podatkov v podatkovnih bazah, pri (sistemskem) dostopu do skupnih podatkovnih struktur (operacijskega sistema) v ve�procesnih operacijskih sistemih itd.


Problem omejenega pomnilnika (Proizvajalec - porabnik)

To je v bistvu problem dveh so�asnih procesov, pri katerem en proces (proizvajalec) generira podatke, ki jih mora uporabljati drug proces (uporabnik). Da bi bilo izvajanje obeh procesov med seboj �imbolj neodvisno, shranjuje proces - proizvajalec podatke v skladi��e (medpomnilnik, buffer), drug proces pa jih iz tega skladi��a jemlje v istem zaporedju.

Tako so�itje dveh procesov zasledimo zelo pogosto v okviru modulov operacijskih sistemov, predvsem v v modulih, ki so odgovorni za vhodno- izhodne operacije ra�unalnika.

Seveda je "skladi��e" omejeno (�e drugega ne �e z velikostjo pomnilnika). Proizvajalec lahko medpomnilnik napolni le do neke meje. Pred nadaljnjim polnjenjem mora po�akati, da ga "porabnik" vsaj malo izprazni. Prav tako ne sme proces - porabnik ni� "vzeti iz medpomnilnika", �e ni �e vanj kaj vlo�il proces - proizvajalec. Potrebna je koordinacija delovanja obeh procesov.

Omejenemu pomnilniku pravijo v�asih tudi kro�ni medpomnilnik (ring- buffer), saj ga za�ne proizvajalec, potem, ko je pri�el do konca, spet pomniti "na za�etku". Analogno se dogaja s porabnikom: Ko vzame z medpomnilnika zadnji element, gre naslednjega iskati spet na "za�etek". V ra�unalni�kem smislu uporabljata oba procesa kazalca na teko�i element v tem medpomnilniku. Pomembno je, da kazalec procesa- porabnika ne prehiti kazalca proizvajalca (in obratno).


Problem pisalcev in bralcev

Imejmo ve� so�asnih procesov, ki lahko berejo ali popravljajo isto podatkovno strukturo. Struktura naj bo dovolj kompleksna, da je posamezen proces ne more prebrati ali zapisati v "enem koraku". To pomeni, da bi lahko nek proces za�el zapisovati novo verzijo, med samim zapisovanjem pa bi lahko nek drug proces strukturo "prebral". Podatki, ki bi jih tako dobil, bi bili lahko delno �e "novi", delno pa �e "ta stari", skratka nekonsistentni. Da ne pride no nekonsistence podatkov, moramo zagotoviti, da v obdobju, ko nek proces zapisuje nove podatke, noben drug proces ne more ne brati ne pisati v to strukturo. Seveda pa lahko ve� "bralcev" so�asno bere. Potrebna je torej pravilna koordinacija pisalcev in bralcev.


Problem smrtnega objema

Obravnavali bomo razli�ne tehnike medsebojne sinhronizacije paralelnih programskih procesov. Ta se dose�e tako, da proces, ki naj bo sinhroniziran z nekim drugim, v danem trenutku po�aka na nek dogodek (event). Prav mo�no je, da do tega dogodka iz razli�nih razlogov ne more priti. Pravimo, da se je en ali ve� paralelnih procesov zna�lo v smrtnem objemu (deadlock). Oglejmo si nekaj mo�nih vzrokov za tak pojav ter ugotovimo, kako ga lahko prepre�ujemo.

Do smrtnega objema lahko pride, ko na primer dva procesa �akata drug na (dogodek) drugega. Ker pa sta oba s tem blokirana, do odre�ilnega dogodka ne v enem ne v drugem procesu ne pride. Preprost zgled je lahko naslednji. Imamo dva programska procesa, ki za svoje delo potrebujeta dve periferiji. Vsak si �e lasti eno in �aka na drugo. Problem ponazoruje slika.

Kateri pogoji so potrebni za nastop smrtnega objema?
Kako prepre�ujemo nastop smrtnega objema?

Primer v Javi


Problem stradanja

Sorodni problem smrtnemu objemu je problem stradanja ali nedolo�enega zapostavljanja. V�asih mu tudi re�emo problem �ivega objema (livelock). Nek proces �aka na neko sredstvo, vendar je (morda zaradi ni�je prednosti) stalno zapostavljen in nikdar ne pride na vrsto. Tipi�en primer �ivega objema lahko zasledimo pri slabo zasnovanem algoritmu razvr��anja procesov (scheduling). Nek proces z nizko prioriteto morda nikdar ne pride na vrsto, ker imajo prednost procesi z vi�jo prednostjo. Ta problem lahko re�ujemo na primer tako, da s staranjem prednost takemu procesu zvi�ujemo.

Navedene probleme blokiranja nekega procesa (nedolo�eno zapostavljanje, smrtni objem) zasledimo na primer pri operacijskih sistemih ra�unalnikov. Operacijski sistem je predvsem "upravnik sredstev" (resource manager) ra�unalni�kega sistema. Za ta sredstva pa isto�asno lahko konkurira ve�paralelnih programskih procesov.

Filozofi na ve�erji 1, 2,