folyamat Synchronizálás: Kritikus szakaszprobléma az operációs rendszerben

Mi az a folyamat Synchronizálás?

folyamat Synchronizálás feladata a folyamatok végrehajtásának összehangolása oly módon, hogy két folyamat ne férhessen hozzá ugyanazokhoz a megosztott adatokhoz és erőforrásokhoz.

Különösen akkor van rá szükség többfolyamatos rendszerekben, amikor több folyamat fut együtt, és egynél több folyamat próbál egyszerre hozzáférni ugyanahhoz a megosztott erőforráshoz vagy adathoz.

Ez a megosztott adatok következetlenségéhez vezethet. Tehát az egyik folyamat által végrehajtott változtatás nem feltétlenül tükröződött abban, hogy más folyamatok mikor fértek hozzá ugyanazokhoz a megosztott adatokhoz. Az ilyen típusú adatok inkonzisztenciájának elkerülése érdekében a folyamatokat szinkronizálni kell egymással.

Hogyan Folyamat Synchronizálás működik?

Például az A folyamat megváltoztatja az adatokat egy memóriahelyen, miközben egy másik B folyamat megpróbálja kiolvasni az adatokat a memóriahelyről azonos memóriahely. Nagy a valószínűsége annak, hogy a második folyamat által beolvasott adatok hibásak lesznek.

folyamat Synchronizálás Művek

Egy program szakaszai

Íme a kritikus rész négy alapvető eleme:

  • Belépési rész: Ez része a folyamatnak, amely eldönti, hogy egy adott folyamat belépjen.
  • Kritikus szakasz: Ez a rész lehetővé teszi egy folyamat számára a megosztott változó bevitelét és módosítását.
  • Kilépés szakaszból: A Kilépés szakasz lehetővé teszi a többi folyamat számára, amely a Belépés szakaszban várakozik, hogy belépjen a kritikus szakaszokba. Azt is ellenőrzi, hogy a végrehajtását befejező folyamatot el kell-e távolítani ezen a szakaszon keresztül.
  • Fennmaradó rész: A Kódex összes többi része, amely nem szerepel a kritikus, belépési és kilépési szakaszban, a maradék szakasz néven ismert.

Mi a kritikus szakasz probléma?

A kritikus szakasz a kód olyan szegmense, amelyhez egy jelfolyamat egy adott időpontban hozzáférhet. A szakasz megosztott adatforrásokból áll, amelyeket más folyamatoknak kell elérniük.

  • A kritikus szakaszba való belépést a wait() függvény kezeli, és P()-ként ábrázolja.
  • A kritikus szakaszból való kilépést a signal() függvény vezérli, amelyet V() jelölünk.

A kritikus szakaszban csak egyetlen folyamat hajtható végre. Más folyamatoknak, amelyek kritikus szakaszuk végrehajtására várnak, meg kell várniuk, amíg az aktuális folyamat befejezi a végrehajtását.

A kritikus szakasz szabályai

A kritikus szakasznak mindhárom szabályt érvényesítenie kell:

  • Kölcsönös kizárás: A kölcsönös kizárás egy speciális típusú bináris szemafor, amelyet a megosztott erőforráshoz való hozzáférés szabályozására használnak. Tartalmaz egy prioritás öröklődési mechanizmust a kiterjesztett prioritás-inverziós problémák elkerülése érdekében. Egyszerre legfeljebb egy folyamat futhat le a kritikus szakaszában.
  • Haladás: Ezt a megoldást akkor használják, ha senki nincs a kritikus szakaszban, és valaki be akar lépni. Ekkor azoknak a folyamatoknak, amelyek nincsenek az emlékeztető szekciójukban, el kell dönteniük, hogy ki menjen be, véges időn belül.
  • Kötött várakozás: Amikor egy folyamat a kritikus szakaszba való bejutást kéri, egy meghatározott korlát van a kritikus szakaszba kerülő folyamatok számára. Tehát a határ elérésekor a rendszernek lehetővé kell tennie, hogy a folyamat kérése a kritikus szakaszába kerüljön.

Megoldások a kritikus részhez

Folyamatban Synchronizálás, kritikus szakasz játssza a főszerepet, hogy a problémát meg kell oldani.

Íme néhány széles körben használt módszer a kritikus szakaszok problémájának megoldására.

Peterson megoldás

Peterson megoldása széles körben használt megoldás a kritikus szakaszok problémáira. Ezt az algoritmust Peterson informatikus fejlesztette ki, ezért nevezték el Peterson-féle megoldásnak.

Ebben a megoldásban, amikor egy folyamat kritikus állapotban fut, akkor a másik folyamat csak a kód többi részét hajtja végre, és ennek az ellenkezője is megtörténhet. Ez a módszer segít abban is, hogy egy adott időpontban csak egyetlen folyamat fusson a kritikus szakaszban.

Példa

Megoldások a kritikus részhez

PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
  • Tételezzük fel, hogy N folyamat van (P1, P2, … PN), és egy bizonyos időpontban minden folyamatnak be kell lépnie a kritikus szakaszba
  • A rendszer egy N méretű FLAG[] tömböt tart fenn, amely alapértelmezés szerint hamis. Tehát amikor egy folyamatnak be kell lépnie a kritikus szakaszba, a jelzőjét igazra kell állítania. Például, ha a Pi be akar lépni, akkor a FLAG[i]=TRUE értéket fogja beállítani.
  • Egy másik TURN nevű változó jelzi azt a folyamatszámot, amely éppen a CS-be való belépésre vár.
  • Az a folyamat, amely kilépéskor belép a kritikus szakaszba, a TURN-t egy másik számra változtatná a kész folyamatok listájából.
  • Példa: kanyar 2, majd P2 belép a kritikus szakaszba, és kilépés közben a turn=3 és ezért a P3 kitör a várakozási hurokból.

Synchronizálás Hardver

Néha a kritikus szakasz problémáit hardver is megoldja. Egyes operációs rendszerek zárolási funkciót kínálnak, ahol a folyamat zárolást kap, amikor belép a kritikus szakaszba, és feloldja a zárolást, miután elhagyta azt.

Tehát amikor egy másik folyamat megpróbál belépni a kritikus szakaszba, nem fog tudni belépni, mivel zárolva van. Ezt csak akkor tudja megtenni, ha magának a zárnak a megszerzésével szabad.

Mutex zárak

SyncA hronizációs hardver nem egyszerű, mindenki számára megvalósítható módszer, ezért a Mutex Locks néven ismert szigorú szoftveres módszert is bevezették.

Ebben a megközelítésben a kód beviteli szakaszában LOCK-ot kapunk a kritikus szakaszon belül használt kritikus erőforrások felett. A kilépési részben az a zár feloldódik.

Semaphore Megoldás

Semaphore egyszerűen egy változó, amely nem negatív, és megosztva a szálak között. Ez egy másik algoritmus vagy megoldás a kritikus szakasz problémájára. Ez egy jelzőmechanizmus és egy szemaforon várakozó szál, amit egy másik szál jelezhet.

Két atomműveletet használ, 1) várakozást és 2) jelet a folyamatszinkronizáláshoz.

Példa

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

Összegzésként

  • A folyamatszinkronizálás feladata a folyamatok végrehajtásának összehangolása oly módon, hogy két folyamat ne férhessen hozzá ugyanazokhoz a megosztott adatokhoz és erőforrásokhoz.
  • A kritikus rész négy eleme: 1) Belépési szakasz 2) Kritikus szakasz 3) Kilépési szakasz 4) Emlékeztető rész
  • A kritikus szakasz a kód olyan szegmense, amelyhez egy jelfolyamat egy adott időpontban hozzáférhet.
  • Három kötelező szabályt kell betartani a kritikus szakaszon: 1) Kölcsönös kizárás 2) Folyamatmegoldás 3) Korlátozott várakozás
  • A kölcsönös kizárás egy speciális típusú bináris szemafor, amelyet a megosztott erőforráshoz való hozzáférés szabályozására használnak.
  • A folyamatmegoldást akkor használják, ha senki nincs a kritikus szakaszban, és valaki be akar lépni.
  • A kötött várakozási megoldásban, miután egy folyamat kéri a kritikus szakaszába való bejutást, van korlát, hogy hány további folyamat kerülhet be a kritikus szakaszába.
  • Peterson megoldása széles körben használt megoldás a kritikus szakaszok problémáira.
  • A kritikus szakasz problémáit a hardver szinkronizálása is megoldja
  • SyncA hronizációs hardver nem mindenki számára egyszerűen megvalósítható módszer, ezért bevezették a Mutex Locks néven ismert szigorú szoftveres módszert is.
  • Semaphore egy másik algoritmus vagy megoldás a kritikus szakasz problémájára.