Mutex vs Semaphore
az operációs rendszer terminológiája szerint a mutex és a szemaforok olyan kernel erőforrások, amelyek szinkronizálási szolgáltatásokat nyújtanak, más néven szinkronizációs primitívek. A folyamatszinkronizálás fontos szerepet játszik a megosztott adatok konzisztenciájának fenntartásában. Mind a szoftver, mind a hardver megoldások jelen vannak a kritikus szakaszproblémák kezelésére. De a kritikus szakaszproblémák hardveres megoldásait meglehetősen nehéz megvalósítani. Mind a Mutex, mind a szemafor szinkronizálási szolgáltatásokat nyújt, de nem azonosak.
mi a Mutex?
a Mutex egy kölcsönös kizárási objektum, amely szinkronizálja az erőforráshoz való hozzáférést. A program elején egyedi névvel jön létre. A mutex reteszelő mechanizmus biztosítja, hogy csak egy szál tudja megszerezni a mutexet, és belépjen a kritikus szakaszba. Ez a szál csak akkor engedi ki a mutexet, amikor kilép a kritikus szakaszból.
ez egy speciális típusú bináris szemafor, amelyet a megosztott erőforráshoz való hozzáférés ellenőrzésére használnak. Ez magában foglal egy elsőbbségi öröklési mechanizmust a kiterjesztett prioritású inverziós problémák elkerülése érdekében. Ez lehetővé teszi a jelenlegi magasabb prioritású feladatok blokkolt állapotban tartását a lehető legrövidebb ideig. Az elsőbbségi öröklés azonban nem korrigálja az elsőbbségi inverziót, hanem csak minimalizálja annak hatását.
példa
ezt a következő példa segítségével mutatjuk be,
a Mutex használata
a mutex kölcsönös kizárást biztosít, akár a gyártó, akár a fogyasztó számára, aki megkaphatja a kulcsot (mutex), és folytathatja munkáját. Amíg a gyártó kitölti a puffert, a felhasználónak várnia kell, és fordítva. A Mutex lock-ban mindig csak egyetlen szál működhet a teljes pufferrel.
amikor egy program elindul, kéri a rendszert, hogy hozzon létre egy mutex objektumot egy adott erőforráshoz. A rendszer létrehozza a mutex objektumot egyedi névvel vagy azonosítóval. Amikor a programszál használni akarja az erőforrást, elfoglalja a zárolást a mutex objektumon, felhasználja az erőforrást, majd használat után feloldja a zárolást a mutex objektumon. Ezután a következő folyamat lehetővé teszi, hogy megszerezze a zárat a mutex objektumon.
eközben egy folyamat megszerezte a zárolást a mutex objektumon, és egyetlen szál vagy folyamat sem férhet hozzá az erőforráshoz. Ha a mutex objektum már zárolva van, akkor a mutex objektum zárolásának megszerzésére irányuló folyamatnak várnia kell, és a rendszer sorban áll, amíg a mutex objektum fel nem oldódik.
a Mutex előnyei
a mutex következő előnyei vannak, például:
- a Mutex csak egyszerű zárak, amelyeket a kritikus szakaszba való belépés előtt kapnak, majd elengedik.
- mivel egy adott pillanatban csak egy szál van a kritikus szakaszában, nincsenek versenyfeltételek, és az adatok mindig konzisztensek maradnak.
a Mutex hátrányai
a Mutexnek vannak hátrányai is, például:
- ha egy szál zárat kap, elalszik, vagy megelőzi, akkor a másik szál nem léphet előre. Ez éhezéshez vezethet.
- nem zárolható vagy oldható fel más kontextusból, mint az, amelyik megszerezte.
- egyszerre csak egy szálat szabad engedélyezni a kritikus szakaszban.
- a normál megvalósítás elfoglalt várakozási állapothoz vezethet, amely pazarolja a CPU idejét.
mi a szemafor?
a szemafor egyszerűen egy változó, amely nem negatív és megoszlik a szálak között. A szemafor egy jelző mechanizmus, egy másik szál pedig egy szemaforra váró szálat jelezhet.
egy szemafor két atomi műveletet használ,
1. Várjon: a wait művelet csökkenti az S argumentum értékét, ha pozitív. Ha s negatív vagy nulla, akkor nem történik művelet.
2. Jel a folyamatszinkronizáláshoz: a jelművelet növeli Argumentumának értékét S.
a szemafor a Beállítás módjától függően engedélyezi vagy elutasítja az erőforráshoz való hozzáférést.
szemafor használata
egyetlen puffer esetén a 4 KB-os puffert négy 1 KB-os pufferre oszthatjuk. A szemafor összekapcsolható ezzel a négy pufferrel, lehetővé téve a felhasználók és a gyártók számára, hogy egyszerre különböző puffereken dolgozzanak.
típusú szemafor
szemafor különbözteti meg az operációs rendszer két kategóriában számláló szemafor és bináris szemafor.
1. Szemafor számlálása: a szemafor értéke a rendszerben lévő erőforrások számára inicializálódik. Amikor egy folyamat hozzá akar férni az erőforráshoz, végrehajtja a wait()műveletet a szemaforon, és eggyel csökkenti a szemafor értékét. Amikor felszabadítja az erőforrást, elvégzi a signal () műveletet a szemaforon, és eggyel növeli a szemaforértéket.
amikor a szemaforszám 0-ra megy, ez azt jelenti, hogy a folyamatok minden erőforrást elfoglalnak. Egy folyamatnak erőforrást kell használnia, ha a szemafor száma 0. Végrehajtja a wait () műveletet, és blokkolva lesz, amíg a szemafor értéke nagyobb lesz, mint 0.
2. Bináris szemafor: a szemafor értéke 0és 1 között mozog. Hasonló a mutex zárhoz, de a mutex egy reteszelő mechanizmus, míg a szemafor egy jelátviteli mechanizmus. A bináris szemaforban, ha egy folyamat hozzá akar férni az erőforráshoz, végrehajtja a wait() műveletet a szemaforon, és csökkenti a szemafor értékét 1-ről 0-ra. Amikor elengedi az erőforrást, egy signal() műveletet hajt végre a szemaforon, és az értékét 1-re növeli. Tegyük fel, hogy a szemafor értéke 0, és egy folyamat hozzá akar férni az erőforráshoz. Ebben az esetben wait() műveletet hajt végre, és blokkolja magát, amíg az erőforrásokat használó aktuális folyamat felszabadítja az erőforrást.
a szemafor előnyei
a szemafor következő előnyei vannak, például:
- lehetővé teszi egynél több szál elérését a kritikus szakaszhoz.
- a szemaforok gépfüggetlenek.
- a szemaforokat a mikrokernel gépfüggetlen kódjában valósítják meg.
- nem engedélyezik több folyamat belépését a kritikus szakaszba.
- mivel a szemafor elfoglalt és várakozik, soha nem pazarolja a folyamat idejét és erőforrásait.
- gépfüggetlenek, amelyeket a mikrokernel gépfüggetlen kódjában kell futtatni.
- lehetővé teszik az erőforrások rugalmas kezelését.
a szemaforok hátránya
a Szemaforoknak vannak hátrányai is, például:
- a szemafor egyik legnagyobb korlátja az elsőbbségi inverzió.
- az operációs rendszernek nyomon kell követnie az összes hívást, hogy várjon és jelezze a szemafort.
- használatukat soha nem kényszerítik ki, de csak egyezményes.
- a várakozási és jelzési műveleteket a szemafor holtpontjainak elkerülése érdekében a megfelelő módon kell végrehajtani.
- a szemafor programozás összetett módszer, ezért van esély arra, hogy nem érik el a kölcsönös kizárást.
- ez szintén nem praktikus módszer nagy léptékű használatra, mivel használatuk a modularitás elvesztéséhez vezet.
- a szemafor hajlamosabb a
- programozói hibára, és a programozói hiba miatt holtpontot vagy a kölcsönös kizárás megsértését okozhatja.
különbség a Mutex és a szemafor között
az alapvető különbség a szemafor és a mutex között az, hogy a szemafor egy jelátviteli mechanizmus, azaz a folyamatok wait() és signal() műveletet hajtanak végre annak jelzésére, hogy megszerzik vagy felszabadítják-e az erőforrást. Ezzel szemben a mutex egy reteszelő mechanizmus, és a folyamatnak meg kell szereznie a zárat egy mutex objektumon, ha meg akarja szerezni az erőforrást. Íme néhány különbség a szemafor és a mutex között, például:
feltételek | Mutex | szemafor |
---|---|---|
definíció | a mutex egy zárolási mechanizmus, mivel egy erőforrás megszerzéséhez egy folyamatnak zárolnia kell a mutex objektumot, és az erőforrás felszabadítása közben fel kell oldania a mutex objektumot. | a szemafor egy jelátviteli mechanizmus, mivel a szemafor változón végrehajtott wait() és signal() műveletek jelzik, hogy egy folyamat megszerzi vagy felszabadítja az erőforrást. |
létezés | a mutex egy objektum. | szemafor egy egész változó. |
funkció | a Mutex lehetővé teszi több programszál elérését egyetlen erőforráshoz, de nem egyszerre. | a szemafor lehetővé teszi, hogy több programszál hozzáférjen az erőforrások véges példányához. |
tulajdon | a Mutex objektumzárat csak az a folyamat oldja fel, amely megszerezte a mutex objektum zárolását. | a szemafor értéke megváltoztatható az erőforrás megszerzésének vagy felszabadításának bármely folyamatával a wait() és a signal() művelet végrehajtásával. |
kategorizálás | a Mutex nincs tovább kategorizálva. | a szemafor a számláló szemafor és a bináris szemafor kategóriába sorolható. |
művelet | a mutex objektum zárolva vagy feloldva van az erőforrás kérése vagy felszabadítása során. | a szemafor értékét a wait() és a signal() műveletekkel módosítjuk az inicializálástól eltekintve. |
Resources Occupated | ha egy mutex objektum már zárolva van, akkor az erőforrás megszerzésére irányuló folyamat vár, és a rendszer sorban áll, amíg az erőforrás felszabadul, és a mutex objektum feloldásra kerül. | tegyük fel, hogy a folyamat megszerzi az összes erőforrást, és egyetlen erőforrás sem szabad. Ebben az esetben a folyamat azzal az óhajjal, hogy megszerezze erőforrás végzi wait() művelet szemafor változó és blokkolja magát, amíg a gróf szemafor lesz nagyobb, mint 0. |
Leave a Reply