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.
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
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.