folyamat Synchronizálás: Kritikus szakaszprobléma az operációs rendszerben
⚡ Okos összefoglaló
folyamat SyncA hronizálás a folyamatok végrehajtásának koordinálásának feladata, hogy két folyamat ne férhessen hozzá ugyanahhoz a megosztott adathoz vagy erőforráshoz egyszerre. Megakadályozza az adatok inkonzisztenciáját a többfolyamatos rendszerekben azáltal, hogy szabályozza a kritikus szakaszhoz való hozzáférést.

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 fontos ez egy többfolyamatos rendszerben, 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 inkonzisztenciájához vezethet. Tehát az egyik folyamat által végrehajtott módosítás nem feltétlenül tükröződik, amikor más folyamatok is hozzáférnek ugyanahhoz a megosztott adathoz. Az ilyen típusú adatinkonzisztencia 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 módosítja az adatokat egy memóriahelyen, miközben egy másik B folyamat megpróbálja beolvasni az adatokat a memóriábó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 szakasz négy lényeges 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, hogy a Belépés szakaszban várakozó többi folyamat belépjen a Kritikus szakaszba. 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 többi része CodeAzokat a pontokat, amelyek nem tartoznak a Kritikus, Belépési és Kilépési Szekcióba, Maradék Szekciónak nevezzük.
Mi a kritikus szakasz probléma?
A kritikus szakasz egy olyan kódrészlet, amelyhez egyetlen folyamat férhet hozzá egy adott időpontban. A szakasz olyan megosztott adatforrásokból áll, amelyekhez más folyamatoknak is hozzá kell fé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 alkalmazzák, amikor senki sincs a kritikus szakaszban, és valaki be akar jutni. Ekkor azoknak a folyamatoknak, amelyek nincsenek a fennmaradó szakaszukban, véges időn belül el kell dönteniük, hogy kinek kell bejutnia.
- Kötött várakozás: Amikor egy folyamat hozzáférési kérelmet nyújt be a kritikus szakaszba, van egy meghatározott korlát a kritikus szakaszba jutó folyamatok számára vonatkozóan. Tehát, amikor a korlátot eléri, a rendszernek engedélyeznie kell a folyamathoz intézett kérést, hogy bejusson a kritikus szakaszába.
Megoldások a kritikus részhez
Folyamatban Synckronizálás, a kritikus szakasz játssza a főszerepet, így 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 egy széles körben használt megoldás kritikus szakaszfeladatokra. Ezt az algoritmust egy Peterson nevű informatikus fejlesztette ki, ezért is nevezik Peterson megoldásának.
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
- Tegyük fel, hogy N folyamat van (P1, P2, … PN), és minden folyamatnak valamikor be kell lépnie a kritikus szakaszba.
- Egy N méretű FLAG[] tömböt tartunk karban, amely alapértelmezés szerint hamis. Tehát, amikor egy folyamatnak be kell lépnie a kritikus szakaszba, igazra kell állítania a jelzőjét. 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ó a CS-be való belépésre váró folyamat számát jelzi.
- 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: a 2. kör a lényeg, hogy P2 belép a kritikus szakaszba, majd a 3. körből kilépve P3 kitör a várakozási ciklusból.
Synchronizálás Hardver
A kritikus szakasz problémáit néha hardveresen is megoldják. 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 elhagyja 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 mindenki számára egyszerűen megvalósítható módszer, ezért bevezettek egy szigorú szoftveres módszert, az úgynevezett Mutex Locks-ot is.
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 nemnegatív változó, amelyet a szálak megosztanak. Ez egy másik algoritmus vagy megoldás a kritikus szakasz problémájára. Ez egy jelzőmechanizmus, és egy szemaforra váró szálat egy másik szál jelezhet.
Két atomi műveletet használ: 1) várakozást és 2) jelzést a folyamat szinkronizálásához.
Példa
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


