szemafor vs.Mutex

Bevezetés

az operációs rendszer (OS) folyamata kölcsönhatásba lép az ugyanabban a rendszerben futó más folyamatokkal egy közös feladat elvégzése érdekében. Azokat a folyamatokat, amelyek kölcsönhatásba lépnek más folyamatokkal, együttműködési folyamatoknak nevezzük.

a folyamatok közötti kommunikáció (IPC) stratégiák alapján, amelyeket egy folyamat hajt végre, megoszthatja címterét más folyamatokkal, vagy üzenetváltáson keresztül kommunikálhat. Az előbbi technikában kritikus fontosságú a kommunikáció vezérlése, mivel mindkét folyamatnak közös címtere van.

ez a folyamatkommunikáció vezérlése szinkronizálás néven ismert. Megfelelő szinkronizálás nélkül a folyamatok elavult adatokat olvashatnak, vagy felülírhatnak más folyamatadatokat.

a szemafor és a mutex két olyan mechanizmus, amelyen keresztül megvalósíthatjuk a szinkronizálást és kezelhetjük a folyamatok koordinációját. Ebben a cikkben megvizsgáljuk ezt a két szinkronizálási segédprogramot, és összehasonlítjuk a különböző jellemzőket.

a kritikus szakasz megértése

a szemafor és a mutex megvitatása előtt értsük meg a kritikus szakasz problémáját.

tegyük fel, hogy van egy olyan rendszerünk, amely n folyamatot tartalmaz. Ezen folyamatok mindegyikének van egy kódszegmense, amelyben a folyamat végrehajthat egy közös változó frissítést, egy táblázat frissítést, vagy írhat egy fájlba. A kód ezen szegmensét a folyamat kritikus szakaszának nevezik.

2.1. A kritikus szakasz problémájának jellemzői

a kritikus szakasz alapvető jellemzője, hogy amint egy folyamat elkezdi végrehajtani a kritikus szakaszát, egyetlen más folyamat sem hajthatja végre a kritikus szakaszát. Vagyis nincs két folyamat, amely egyszerre képes végrehajtani kritikus szakaszát. Ez a kritikus szakasz probléma egy protokoll megtervezése, hogy a folyamatok használhassák az együttműködést.

minden folyamatnak engedélyt kell szereznie a kritikus szakaszba való belépéshez. Az engedélyt végrehajtó kódrészlet a belépési szakasz. Hasonlóképpen, a kritikus szakasz kilépését megvalósító kódrészlet az exit szakasz néven ismert.

2.2. Kritikus Szakaszprobléma kritériumai

a kritikus szakaszprobléma megoldásának meg kell felelnie a következő kritériumoknak:

  • kölcsönös kizárás: ha egy folyamat végrehajtja a kritikus szakaszát, akkor egyetlen más folyamat sem tudja végrehajtani a kritikus szakaszát
  • haladás: ha egyetlen folyamat sem hajtja végre a kritikus szakaszát, akkor más folyamatok dönthetnek a kritikus szakasz végrehajtásáról. A megoldás és a megvalósítás alapján kiválasztunk egy folyamatot, amely képes végrehajtani a kritikus szakaszát. A figyelemre méltó jellemzői, hogy a folyamatok képesek arra, hogy folytassa a kiválasztási folyamat, hogy végre a kritikus szakasz
  • Korlátozott várakozás: ott kell lennie egy korlátozott várakozás egy folyamat, amikor kérte a kritikus szakasz bejegyzés szakasz és hányszor egy másik folyamat végrehajtja a kritikus szakasz

Mutex zárak

számos segédprogramok megoldani a kritikus szakasz probléma egy operációs rendszer. A kölcsönös kizárás (mutex) zárak vagy a mutex a legegyszerűbb megoldás. A mutex zárakat a kritikus szakasz védelmére és a verseny körülményeinek megakadályozására használjuk. Egy folyamatnak meg kell szereznie a zárolást, mielőtt hozzáférne a kritikus szakaszához, és a kritikus szakasz végrehajtásának befejezése után elengedi a zárolást.

3.1. Hogyan működik a Mutex zár?

a zárak megszerzésére és kioldására szolgáló két funkciót két funkció képviseli: acquire() és release(). Az acquire funkció megszerzi a zárat, a release pedig elengedi a zárat. A mutex zárnak van egy logikai változója, amely eldönti, hogy a zár elérhető-e vagy sem. Ha a zárolás elérhető, akkor az acquire() metódus sikeres, és a zár nem érhető el. Minden olyan folyamat, amely megpróbál hozzáférni egy nem elérhető zároláshoz, blokkolva van, amíg a zárat fel nem oldják.

a következő álkód mutatja az acquire () módszert:

által nyújtott QuickLaTeX.com

a következő álkód mutatja A release () módszert:

által nyújtott QuickLaTeX.com

3.2. A mutexek hátrányai

a mutex zár fő hátránya, hogy lehetővé teszi a szál spinlock-ját, ha a zár nem áll rendelkezésre.

míg az egyik szál megszerezte a zárat, és a kritikus szakaszában van, az összes többi szál, amely megpróbálja megszerezni a zárat, egy hurokban van, ahol a szál rendszeresen ellenőrzi, hogy a zár elérhető-e. Így a zároláshoz forog, és pazarolja a CPU ciklusokat, amelyeket más szálak produktívan használhattak volna.

ez egy fő probléma egyetlen CPU gépen. A Spinlock elfoglalt várakozásként is ismert, mivel a szál “elfoglalt” várja a zárat.

3.3. A mutexek előnyei

bár a mutex zárak szenvednek a spinlock kiadásától, előnyük van. Mivel a folyamat spinlocks a CPU, ez kiküszöböli annak szükségességét, hogy a folyamat összefüggésben kapcsoló, ami egyébként szükséges lett volna.

egy folyamat Kontextusváltása időigényes művelet, mivel megköveteli a végrehajtási folyamatstatisztikák mentését a folyamatvezérlő blokkban (PCB), és egy másik folyamat újratöltését a CPU-ba. Vannak többprocesszoros CPU-k, ahol az egyik folyamat foroghat az egyik processzormagban, a másik pedig végrehajthatja kritikus szakaszát. Így a rövid időtartamú spinlock bizonyos esetekben hasznosabb, mint a folyamat kontextuskapcsolója.

szemafor

a szemafor egy másik segédprogram, amely a Mutex zárakhoz hasonló szinkronizálási funkciókat is kínál, de robusztusabb és kifinomultabb.

a szemafor egy egész változó, amely az inicializáláson kívül két standard atomi művelettel érhető el – wait() és signal(). A wait() műveletet P-nek, a signal() műveletet pedig V-nek nevezzük.

vessünk egy pillantást a wait() műveletre:

által nyújtott QuickLaTeX.com

végül nézzük meg a jel () működését:

által nyújtott QuickLaTeX.com

!

minden művelet a szemafor egész értékére a wait() és a signal () – ban atomikusan végrehajtva. Vagyis, ha egy folyamat módosítja a szemafor értékét, egyetlen más folyamat sem tudja egyszerre módosítani ugyanazt a szemafor értéket.

az S szemafor értéke alapján két kategóriába sorolható: számláló szemafor és bináris szemafor. A számláló szemafor értéke 0-tól véges értékig terjedhet. Míg a bináris szemafor értéke 0 és 1 között lehet.

4.1. Szemaforák számlálása

a szemaforok számlálása vezérelheti az adott erőforrás n példányszámát. Magyarázzuk meg a számláló szemafor analógiáját.

tegyük fel, hogy létezik egy könyvtár három tanulószobával, és van egy könyvtáros, akinek tíz kulcsa van, mindegyik egy másik szobához. Miután az olvasó hozzáférést igényel egy szobához, be kell szereznie egy kulcsot a szoba használatához. Miután az olvasó végzett a használatukkal, visszaadják a szobakulcsot a könyvtárosnak. Miután az összes szoba használatban van, egy új olvasónak meg kell várnia, amíg egy szobát egy meglévő olvasó meg nem ürít.

a fenti példában az erőforrás egy szoba, amelynek tíz példánya van. Ezeket a példányokat egy számláló szemafor segítségével kezelik, amelyet tízvel inicializálnak. Ezt a szemafor értéket a szemafor wait() és signal() metódusai vezérlik. A következő ábra ezt szemlélteti:

4.2. Bináris szemaforok

a bináris szemafornak két lehetséges értéke van: 0 és 1. Ha a szemafor által kezelt erőforrás elérhető, akkor a szemafor értéke 1. Ellenkező esetben 0-ra van állítva, jelezve, hogy az erőforrás nem áll rendelkezésre.

a bináris szemafor ugyanolyan funkcionalitással rendelkezik, mint a mutex zár. Azok a rendszerek, amelyek nem támogatják a mutex zárakat, kihasználhatják a bináris szemaforokat ugyanazon funkcionalitás elérése érdekében.

az alábbi ábra szemlélteti a bináris szemafor:

szemafor vs. Mutex

az alábbi táblázat összefoglalja a szemafor és a mutex zárak fontos jellemzőit:

által nyújtott QuickLaTeX.com

következtetés

ebben a cikkben a mutexek és a szemaforok különböző aspektusait tárgyaltuk.

először a kritikus szakaszról beszéltünk, és arról, hogy szükség van egy mutexre vagy szemaforra a kritikus szakasz végrehajtásának ellenőrzésére. Ezután a mutexről és a szemaforról beszéltünk.

végül bemutattuk a szemafor és a mutex összehasonlítását.

ha van néhány éves tapasztalata a számítástechnikában vagy a kutatásban, és érdekli, hogy megossza ezt a tapasztalatot a közösséggel, nézze meg a hozzájárulási irányelveinket.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.