Mi a Semaphore? Számlálás, bináris típusok példával

⚡ Okos összefoglaló

Semaphore Egy operációs rendszerben a `` egy nemnegatív egész változó, amelyet a szálak megosztanak, és amely két atomi műveleten, a várakozáson és a jelzésen keresztül koordinálja a megosztott erőforrásokhoz való hozzáférést, megakadályozva a versenyhelyzeteket a folyamatok szinkronizálása során.

  • 🔢 Meghatározás: A szemafor egy nemnegatív egész változó, amely jelzi, hogy egy megosztott erőforrás elérhető-e a versengő szálak számára.
  • 🇧🇷 Kettő Operafeltételek: A várakozás (P) művelet erőforrást kér és csökkenti a számlálót, míg a jel (V) művelet felszabadítja azt és növeli a számlálót.
  • 🔁 Számlálás típusa: Egy számláló szemafor lehetővé teszi, hogy egy meghatározott számú szál azonos erőforrásokat használjon egyszerre.
  • 🔒 Bináris típus: A bináris szemafor 0 és 1 értékekre korlátozódik, így úgy viselkedik, mint egy egyszerű kölcsönös kizárásos zár.
  • ⚠️ Kompromisszumok: Semaphoregépfüggetlenek és rugalmasak, mégis helytelen használat esetén fennáll a prioritási inverzió és a holtpont veszélye.
  • 🤖 AI Assist: A gépi tanulás és a mesterséges intelligencia által támogatott kódolási asszisztensek képesek modellezni a párhuzamos működést, és helyes várakozási és jelzési szekvenciákat generálni.

Semaphore in Operating rendszer

Mi a Semaphore?

Semaphore Egyszerűen egy változó, amely nem negatív és megosztva a szálak között. A szemafor egy jelzőmechanizmus, és a szemaforon várakozó szálat egy másik szál jelezheti. Két atomi műveletet használ: 1) Várjon és 2) Signal a folyamat szinkronizálásához.

A szemafor vagy engedélyezi vagy letiltja az erőforráshoz való hozzáférést, ami attól függ, hogyan van beállítva.

Jellemzői Semaphore

Íme a szemafor jellemzői:

  • Ez egy olyan mechanizmus, amely a feladatok szinkronizálására használható.
  • Ez egy alacsony szintű szinkronizálási mechanizmus.
  • Semaphore mindig tartalmaz egy nem negatív egész értéket.
  • Semaphore tesztműveletekkel és megszakításokkal valósítható meg, amelyeket fájlleírók segítségével kell végrehajtani.

Típusok Semaphores

A szemaforok két gyakori típusa a következő:

  • Szemaforok számolása
  • Bináris szemaforok

Számolás Semaphores

Ez a fajta Semaphore egy számlálót használ, amely segít abban, hogy egy feladatot többször is meg lehessen szerezni vagy el lehessen engedni. Ha a kezdeti számláló = 0, akkor a számláló szemafort nem elérhető állapotban kell létrehozni.

Számolás Semaphores

Ha azonban a szám > 0, akkor a szemafor a rendelkezésre álló állapotban jön létre, és a benne lévő tokenek száma megegyezik a számával.

Kétkomponensű Semaphores

A bináris szemaforok meglehetősen hasonlóak a szemaforok számlálásához, de értékük 0-ra és 1-re korlátozódik. Az ilyen típusú szemaforokban a várakozási művelet csak akkor működik, ha a szemafor = 1, a jelzési művelet pedig akkor sikeres, ha a szemafor = 0. Könnyebb megvalósítani, mint a szemaforok számlálását.

Kétkomponensű Semaphores

Például az Semaphore

Az alább megadott program egy lépésről lépésre történő megvalósítás, amely magában foglalja egy szemafor használatát és deklarálását.

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

Várj és Signal Operabe Semaphores

Mindkét művelet végrehajtására szolgál folyamat szinkronizálás. Ennek a szemafor műveletnek a célja a kölcsönös kizárás.

Várni rá OperaCIÓ

Ez a fajta szemaforművelet segít a feladat kritikus szakaszba való belépésének szabályozásában. Ha azonban a várakozás értéke pozitív, akkor az X várakozási argumentum értéke csökken. Negatív vagy nulla érték esetén nem történik művelet. P(S) műveletnek is nevezik.

A szemafor értékének csökkentése után, amely negatívvá válik, a parancs addig marad fenn, amíg a szükséges feltételek teljesülnek.

P(S)
{
    while (S<=0);
    S--;
}

Signal működés

Ez a fajta Semaphore művelet egy feladat kritikus szakaszból való kilépésének vezérlésére szolgál. Segít növelni az argumentum értékét 1-gyel, amelyet V(S)-ként jelölünk.

P(S)
{
    while (S>=0);
    S++;
}

Számolás Semaphore vs. Bináris Semaphore

Íme néhány fő különbség a számlálás és a bináris szemafor között:

Számolás Semaphore Kétkomponensű Semaphore
Nincs kölcsönös kizárás Kölcsönös kizárás
Bármilyen egész érték Csak 0 és 1 érték
Egynél több slot Csak egy slot
Adja meg a folyamatok készletét Kölcsönös kizárási mechanizmussal rendelkezik.

A különbség köztük Semaphore vs. Mutex

Az alábbi táblázat összehasonlít egy szemafor mutexszel több paraméter alapján:

paraméterek Semaphore mutexek
Szerkezet Ez egyfajta jelzőmechanizmus. Ez egy zárszerkezet.
Adattípus Semaphore egy egész változó. A Mutex csak egy tárgy.
Módosítás A várakozás és jelzés műveletek módosíthatják a szemafort. Csak az erőforrást kérő vagy felszabadító folyamat módosítja.
Erőforrás menedzsment Ha nincs szabad erőforrás, akkor a folyamathoz olyan erőforrásra van szükség, amelynek végre kell hajtania a várakozási műveletet. Meg kell várnia, amíg a szemaforok száma nagyobb, mint 0. Ha zárolva van, a folyamatnak várnia kell. A folyamatot sorban kell tartani. Ezt csak akkor kell elérni, ha a mutex fel van oldva.
Szál Több programszál is lehet. Több programszál is lehet a mutexben, de nem egyszerre.
Tulajdon Az értéket bármely, az erőforrást felszabadító vagy megszerző folyamat megváltoztathatja. Az objektumzárat csak az a folyamat oldja fel, amelyik megkapta a zárolást.
Típusai Típusok Semaphore szemafort és bináris szemafort számol. A Mutexnek nincsenek altípusai.
OperaCIÓ Semaphore az érték módosítása a várakozás () és a jel () művelettel történik. A Mutex objektum zárolva van vagy fel van oldva.
Erőforrások Foglaltság Lefoglalt, ha minden erőforrás használatban van, és az erőforrást kérő folyamat várakozási () műveletet hajt végre, és blokkolja magát, amíg a szemaforok száma >1 lesz. Abban az esetben, ha az objektum már zárolva van, az erőforrásokat kérő folyamat vár, és sorba állítja a rendszer a zárolás feloldása előtt.

Előnyei Semaphores

Itt vannak a használat előnyei/előnyei Semaphore:

  • Lehetővé teszi, hogy egynél több szál hozzáférjen a kritikus szakaszhoz.
  • Semaphores gépfüggetlenek.
  • Semaphores a mikrokernel gépfüggetlen kódjában vannak megvalósítva.
  • Nem teszik lehetővé több folyamat belépését a kritikus szakaszba.
  • Mivel a szemaforban nyüzsgő várakozás folyik, soha nem vesztegetik a folyamatidőt és az erőforrásokat.
  • 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.

Hátrányai Semaphores

Íme a szemafor hátrányai/hátrányai:

  • A szemafor egyik legnagyobb korlátja az elsőbbségi inverzió.
  • Az operációs rendszernek fenn kell tartania track az összes várakozási és jelzőszemafor hívás.
  • Használatukat soha nem kényszerítik ki, de csak megállapodás alapján.
  • A szemafor holtpontjainak elkerülése érdekében a Várj és Signal a műveleteket a megfelelő sorrendben kell végrehajtani.
  • Semaphore A programozás bonyolult, így van esély a kölcsönös kizárás elkerülésére.
  • Szintén nem praktikus módszer nagyüzemi használatra, mivel használatuk a modularitás elvesztéséhez vezet.
  • Semaphore hajlamosabb a programozói hibákra.
  • Előfordulhat holtpont vagy a kölcsönös kizárás megsértése programozói hiba miatt.

GYIK

Edsger Dijkstra 1965-ben vezette be a szemaforokat. A várakozási és jelzési műveleteket P-nek és V-nek is nevezik, a holland proberen (teszt) és verhogen (növekmény) szavakból.

Egy tisztán számláló szemafor nemnegatív marad, de sok implementáció hagyja, hogy az érték negatív legyen. Nagysága ekkor megegyezik a szemafor sorban várakozó folyamatok számával.

SemaphoreKlasszikus párhuzamos működési problémákat koordinálnak, mint például a termelő-fogyasztó (korlátos puffer) és az olvasó-író. Hozzáférést biztosítanak egy korlátozott, azonos erőforrásokból álló készlethez, védve a megosztott adatokat.

Egy mutex rendelkezik tulajdonossal, így csak a zároló szál tudja feloldani. Egy bináris szemafornak nincs tulajdonosa, így bármelyik szál jelezheti. Nem azonosak.

Prioritásinverzió akkor történik, amikor egy alacsony prioritású szál egy olyan szemafort tartalmaz, amelyre egy magas prioritású szálnak szüksége van, így a sürgős szál várakozásra kényszerül. A prioritásöröklési protokollok ezt csökkentik.

A legtöbb modern platform használ szemaforokat: a C nyelven a POSIX sem_t-t, a Semaphore osztályban Java, és a menetvágás.Semaphore in PythonA fejlesztők ritkán építenek ilyet a nulláról.

A gépi tanulás elemezheti a végrehajtást traca versenyhelyzetek előrejelzésére, a számláló szemafor által tárolt engedélyek számának beállítására és a valószínűsíthető patthelyzetek jelzésére, segítping A mérnökök biztonságosabb párhuzamosságot terveznek.

Igen. Az olyan mesterséges intelligencia asszisztensek, mint a GitHub Copilot, képesek várakozási és jelzési sablonokat generálni, zárolási sorrendet javasolni, és elmagyarázni a versenyfeltételeket. RevFigyelmesen nézze meg a kimenetet, mivel a finom patthelyzetek könnyen elrejthetők.

Foglald össze ezt a bejegyzést a következőképpen: