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.

Mutex vs szemafor

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.

Mutex vs szemafor

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.

Mutex vs szemafor

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.

 Mutex vs szemafor

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:

 Mutex vs szemafor

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