Elkar-blokeatze

Wikipedia(e)tik
Hona jo: nabigazioa, Bilatu

Elkar-blokeatzea sistema eragileetan prozesu multzo baten edo sistema konkurrente bateko exekuzio harien blokeatze iraunkorra da. Hari hauek sistemako errekurtso bera lortu nahi dute. Prozesuen konkurrentziako beste arazo batzuetarako ez bezala, ez dago soluzio orokorrik elkar-blokeatzeak konpontzeko. Blokeatze guztiak, bi prozesu edo gehiagok bete ezin dituzten beharren ondorioz sortzen dira. Bizitza errealean, adibidez, arku eta geziekin jolasten diren umeekin konpara daiteke. Haur batek arkua hartzen du eta besteak gezia. Bietako inork ezin du jolastu besteak hartu duena askatu arte. Adibide gisa, bitez bi errekurtso lortu nahi dituzten bi prozesu. Lehen prozesuak errekurtso hauetako bat erabiltzeko baimena lortzen du ( errekurtso horren lock-a lortzen du). Beste prozesuak bigarren errekurtsoaren blokeoa lortzen du. Orain lehenengo prozesuak bigarren errekurtsoa lortu nahi du baina ezin du lortu bigarrenak blokeatuta bait du. Bigarren prozesuak berriz lehen baliabidea lortu nahi du, baina hau lehen prozesuak du blokeatuta. Kasu honetan elkar-blokeatzea gertatzen da, biak beste prozesuak baliabidea askatzearen zain bait daude lanean jarraitzeko.

Beharrezko baldintzak[aldatu | aldatu iturburu kodea]

Coffman-en baldintza gisa ezagutzen dira, eta hauen lehen deskribapena 1971. Urtean E.G.Coffman-ek idatzi zuen artikulu batean. Baldintza hauek batera bete behar dira eta ez dira guztiz independenteak beraien artean. Bitez P0,P1,…..,Pn Prozesuak eta r0,R1,….Rm baliabideak.

  • Elkarrekiko bazterketaren baldintza: une bakoitzean prozesu batek bakarrik erabil dezakeen baliabide konpartituta bat egotea.
  • Erretentzio eta itxoite baldintza: gutxienez Pj prozesu batek, Rj baliabide bat lortu du, eta ez du askatzen beste prozesu bati esleitu zaion Ri baliabide bati itxaroten dio.
  • Jabetza ez kentzearen baldintza: prozesuek ezin dituzte baliabideei jabetzarik kendu, hau da, baliabideak beren jabeek soilik askatu ahalko dituzte.
  • Itxarote zirkularraren baldintza: bitez P0…Pm prozesu multzoa (prozesu multzo osoaren azpimultzoa), P0, P1-ek lortu duen baliabide baten zain dago, azken hau P2-k lortu duen baliabide baten zain dago,…, eta Pm, P0-k lortu duen baliabide baten zain. Baldintza honek, erretentzio eta itxarote baldintza inplikatzen du.

Elkar-blokeatzeak saihesten[aldatu | aldatu iturburu kodea]

Elkar-blokeatzeak ekidin daitezke prozesuen baliabide esleitzearen inguruko informazioa aurrez lortzen bada. Baliabide eskaera bakoitzerako, sistemak eskaera ongi betez ea egoera ez seguru batera iristeko arriskua dagoen kontrolatzen du, non elkar-blokeatze bat gerta daitekeen. Horrela sistemak baliabide eskaerak soilik egoera seguru batera iritsiko garela ziurtatu ezkero asetzeko ditu. Sistemak hurrengo egoera segurua den edo ez jakiteko, aurrez eta uneoro baliabideen egoeraren berri izan behar du. Elkar-blokeatzeak ekiditeko algoritmo bat baino gehiago daude:

  • Bankariaren algoritmoa.
  • Baliabideen esleitze grafoaren algoritmoa.
  • Segurtasun algoritmoa.
  • Baliabide eskaeren algoritmoa.

Aurreikustea[aldatu | aldatu iturburu kodea]

Elkar-blokeatzeak, aurreko beharrezko baldintzak betetzen ez direla ziurtatuz aurreikus daitezke.

  • Elkarrekiko bazterketa ezabatzen: Prozesu batek ezingo du baliabide bat atzitu modu baztertzailean.
  • Erretentzio eta itxarote baldintza ezaba daiteke prozesu guztien lanean hasi aurretik zein baliabide behar dituzten esaten badute. Hau sarritan ezinezkoa da. Beste aukera baliabide gehiago eskatu arretik dituzten baliabide guztiak askatzea da.
  • Jabetza ez kentzearen baldintza ezingo da ezabatu, prozesu batek baliabide bat denbora jakin batez eduki ahalko bait du, bestela prozesua inkontziente gera daiteke.
  • Itxarote zirkularraren baldintza gainditzeko erraza da. Prozesu bati baliabide jakin bat edukitzea baimentzen zaio soilik une jakin batean. Edo hierarkia batean sor daiteke, horrela itxarote denborak ez gertatzeko.

Livelocka[aldatu | aldatu iturburu kodea]

Livelock bat deadlock baten antzekoa da, baina hauetan, livelockean dauden prozesu baten bestearekiko egoera konstanteki aldatzen da. Adibidez, mundu errealean livelock bat ondorengo kasuan gertatzen da: bi pertsona korridore luze batean kontrako norabidea oinez doazenean eta elkar tupust ez egiteko, pertsona hauek modu jator batean alde batetik bestera mugitzen asten dira batek besteari pasatzen uzteko. Baina biek alde berdinera mugitzen dira, denbora berean, eta ez dira bat besteari pasatzen uzten. Livelock elkar-blokeatzeak ekiditen dituzten algoritmo batzuen erabiltzeak dituen arriskuetako bat da. Hau prozesuei lehentasunak ezartzen konpon daiteke.