Procesa sinhronizācija: kritiskās sadaļas problēma OS

Satura rādītājs:

Anonim

Kas ir procesu sinhronizācija?

Procesu sinhronizācija ir uzdevums koordinēt procesu izpildi tā, lai diviem procesiem nevarētu būt piekļuve vieniem un tiem pašiem kopīgotajiem datiem un resursiem.

Tas ir īpaši vajadzīgs daudzprocesu sistēmā, kad darbojas vairāki procesi kopā, un vairāk nekā viens process mēģina vienlaikus piekļūt vienam un tam pašam kopīgotam resursam vai datiem.

Tas var novest pie kopīgo datu neatbilstības. Tātad viena procesa veiktās izmaiņas ne vienmēr atspoguļojas, kad citi procesi piekļūst tiem pašiem kopīgotajiem datiem. Lai izvairītos no šāda veida datu neatbilstības, procesi ir jāsinhronizē savā starpā.

Šajā operētājsistēmas apmācībā jūs uzzināsiet:

  • Kas ir procesu sinhronizācija?
  • Kā darbojas procesu sinhronizācija?
  • Programmas sadaļas
  • Kas ir kritisko sekciju problēma?
  • Kritiskās sadaļas noteikumi
  • Kritiskās sadaļas risinājumi

Kā darbojas procesu sinhronizācija?

Piemēram, apstrādājiet A, mainot datus atmiņas vietā, kamēr cits process B mēģina nolasīt datus no tās pašas atmiņas vietas. Pastāv liela varbūtība, ka otrā procesa nolasītie dati būs kļūdaini.

Programmas sadaļas

Šeit ir četri būtiskie kritiskās sadaļas elementi:

  • Ieejas sadaļa: Tā ir procesa daļa, kas izlemj konkrēta procesa ievadīšanu.
  • Kritiskā sadaļa: Šī daļa ļauj vienam procesam ievadīt un modificēt koplietojamo mainīgo.
  • Izejas sadaļa: Sadaļa Izeja ļauj citam procesam, kas gaida sadaļā Ieeja, iekļūt kritiskajās sadaļās. Tas arī pārbauda, ​​vai process, kas pabeidzis izpildi, ir jānoņem, izmantojot šo sadaļu.
  • Atlikušā sadaļa: visas pārējās kodeksa daļas, kas nav sadaļā Kritiskā, Ieejas un Iziet, sauc par atlikušo sadaļu.

Kas ir kritisko sekciju problēma?

Kritiskā sadaļa ir koda segments, kuram var piekļūt ar signāla procesu noteiktā laika posmā. Sadaļa sastāv no koplietojamiem datu resursiem, kuriem vajadzēja piekļūt citiem procesiem.

  • Ierakstu kritiskajā sadaļā apstrādā funkcija wait (), un to attēlo kā P ().
  • Izeju no kritiskās sekcijas kontrolē signāla () funkcija, kas attēlota kā V ().

Kritiskajā sadaļā var izpildīt tikai vienu procesu. Citiem procesiem, kas gaida kritiskās sadaļas izpildi, jāgaida, līdz pašreizējais process pabeidz izpildi.

Kritiskās sadaļas noteikumi

Kritiskajā sadaļā ir jāievieš visi trīs noteikumi:

  • Savstarpēja izslēgšana: savstarpēja izslēgšana ir īpašs binārā semafora veids, ko izmanto piekļuves kontrolei kopīgotajam resursam. Tas ietver prioritāru mantošanas mehānismu, lai izvairītos no paplašinātām prioritātes inversijas problēmām. Vienlaikus vienā kritiskajā sadaļā var izpildīt ne vairāk kā vienu procesu.
  • Progress: Šis risinājums tiek izmantots, ja neviens neatrodas kritiskajā sadaļā un kāds to vēlas. Tad tiem procesiem, kas nav viņu atgādinājumu sadaļā, ir jāpieņem lēmums, kam jāieiet noteiktā laikā.
  • Saistītā gaidīšana: Kad process pieprasa iekļūšanu kritiskajā sadaļā, ir noteikts ierobežojums, cik daudz procesu var iekļūt viņu kritiskajā sadaļā. Tātad, kad ir sasniegts ierobežojums, sistēmai jāļauj procesa pieprasījumam nokļūt tā kritiskajā sadaļā.

Kritiskās sadaļas risinājumi

Procesu sinhronizācijā kritiskajai sadaļai ir galvenā loma, tāpēc problēma ir jāatrisina.

Šeit ir dažas plaši izmantotas metodes, lai atrisinātu kritiskās sadaļas problēmu.

Pētersona risinājums

Pētersona risinājums ir plaši izmantots kritisko sekciju problēmu risinājums. Šo algoritmu izstrādāja datorzinātnieks Pētersons, tāpēc tas tiek nosaukts kā Pētersona risinājums.

Šajā risinājumā, kad process tiek izpildīts kritiskā stāvoklī, tad otrs process izpilda tikai pārējo kodu, un var notikt pretējais. Šī metode arī palīdz pārliecināties, ka kritiskajā sadaļā noteiktā laikā darbojas tikai viens process.

Piemērs

PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
  • Pieņemsim, ka ir N procesi (P1, P2,… PN), un katram procesam noteiktā laika posmā ir jāieiet kritiskajā sadaļā
  • Tiek uzturēts FLAG [] masīvs N, kas pēc noklusējuma ir nepatiesa. Tātad, vienmēr, kad procesam ir nepieciešams ievadīt kritisko sadaļu, tam ir jāiestata karodziņš kā patiess. Piemēram, ja Pi vēlas ievadīt, tā iestatīs FLAG [i] = TRUE.
  • Cits mainīgais, saukts TURN, norāda procesa numuru, kas pašlaik ir paredzēts ievadīšanai CS.
  • Process, kas nonāk kritiskajā sadaļā, izejot, mainīs TURN uz citu numuru no gatavo procesu saraksta.
  • Piemērs: pagrieziens ir 2, tad P2 nonāk kritiskajā sadaļā un izejot no pagrieziena = 3, un tāpēc P3 izlaužas no gaidīšanas cikla.

Sinhronizācijas aparatūra

Dažreiz kritiskās sadaļas problēmas atrisina arī aparatūra. Dažas operētājsistēmas piedāvā bloķēšanas funkcionalitāti, kad Process iegūst bloķēšanu, ieejot sadaļā Kritiskais, un pēc aiziešanas atbrīvo slēdzeni.

Tātad, kad cits process mēģina iekļūt kritiskajā sadaļā, tas nevarēs iekļūt, jo tas ir bloķēts. To var izdarīt tikai tad, ja tā ir brīva, iegūstot pašu slēdzeni.

Mutex slēdzenes

Sinhronizācijas aparatūra nav vienkārša metode, ko ieviest visiem, tāpēc tika ieviesta arī stingra programmatūras metode, kas pazīstama kā Mutex Locks.

Šajā pieejā koda ievadīšanas sadaļā tiek iegūts LOCK virs kritiskajiem resursiem, kas tiek izmantoti kritiskās sadaļas iekšienē. Izejas sadaļā šī slēdzene ir atbrīvota.

Semaforu risinājums

Semafors ir vienkārši mainīgs lielums, kas nav negatīvs un tiek dalīts starp pavedieniem. Tas ir vēl viens kritiskās sadaļas problēmas algoritms vai risinājums. Tas ir signalizācijas mehānisms un pavediens, kas gaida uz semafora, par kuru var signalizēt cits pavediens.

Procesa sinhronizēšanai tiek izmantotas divas atomu darbības: 1) gaidīšana un 2) signāls.

Piemērs

WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;

Kopsavilkums:

  • Procesu sinhronizācija ir uzdevums koordinēt procesu izpildi tā, lai diviem procesiem nevarētu būt piekļuve vieniem un tiem pašiem kopīgotajiem datiem un resursiem.
  • Četri kritiskās sadaļas elementi ir 1) ieejas sadaļa 2) kritiskā sadaļa 3) izejas sadaļa 4) atgādinājuma sadaļa
  • Kritiskā sadaļa ir koda segments, kuram var piekļūt ar signāla procesu noteiktā laika posmā.
  • Trīs obligātie noteikumi, kas jāievieš ar kritisko sadaļu, ir: 1) savstarpēja izslēgšana 2) procesa risinājums 3) saistoša gaidīšana
  • Savstarpējā izslēgšana ir īpašs bināro semaforu veids, ko izmanto piekļuves kontrolei kopīgotajam resursam.
  • Procesa risinājums tiek izmantots, ja neviens neatrodas kritiskajā sadaļā un kāds to vēlas.
  • Saistītā gaidīšanas risinājumā pēc tam, kad process pieprasa iekļūšanu tā kritiskajā sadaļā, ir ierobežojums, cik daudz citu procesu var iekļūt viņu kritiskajā sadaļā.
  • Pētersona risinājums ir plaši izmantots kritisko sekciju problēmu risinājums.
  • Kritiskās sadaļas problēmas tiek atrisinātas arī aparatūras sinhronizācijā
  • Sinhronizācijas aparatūra nav vienkārša metode, ko ieviest visiem, tāpēc tika ieviesta arī stingra programmatūras metode, kas pazīstama kā Mutex Locks.
  • Semafors ir vēl viens kritiskās sadaļas problēmas algoritms vai risinājums.