Tudd Intuíció, előadás, szinkronizációs mechanizmusokra
Abstract: A jobb teljesítmény a számítógépes rendszerek és feladatának megkönnyítése programozók speciális szinkronizációs mechanizmusokra. A leírás néhány közülük - Dijkstra a szemafor, figyeli Chora üzenetsorokon - meghatározott ebben a fejezetben.
Év végén az előző előadás algoritmusok bár helyes, de meglehetősen nehézkes, és nem az eleganciát. Sőt, a bemeneti várakozó eljárás a kritikus szakaszban jár egy elég hosszú folyamat forgatás egy üres ciklus, vagyis a hulladék értékes processzor időt. Vannak más súlyos hiányosságokat algoritmusok épített a szokásos programozási nyelvek. Tegyük fel, hogy két folyamat kölcsönhatásban a számítógépes rendszerben, egyikük - H - egy magas prioritású, a másik - L - alacsony prioritású. Hagyja, hogy a ütemező úgy van kialakítva, hogy a folyamat a magas prioritású elmozdít egy alacsony prioritású folyamat, amikor készen áll a végrehajtás, és azon a processzor idejére CPU száma (ha a folyamat még inkább prioritássá nem jelenik meg). Ezután, ha a folyamat L a kritikus szakaszából, egy folyamat, mely során H. processzor. jött a bejáratnál a kritikus terület, kapunk egy patthelyzet. H eljárás nem léphet be a kritikus területen, míg a ciklus, és az eljárás nem kapja meg az ellenőrző L, hogy elhagyja a kritikus szakasz.
Annak érdekében, hogy előfordulása ilyen problémák, különböző mechanizmusok szinkronizáláshoz egy magasabb szintű fejlesztettek ki. Leírása egy részük - szemaforokkal. monitorok és kommunikáció - a tárgya ez az előadás.
Az egyik legkorábbi mechanizmusokat. javasolt, hogy végezzen szinkronizálást feldolgozza acél szemaforokat. fogalom, amely leírja Dijkstra (Dijkstra) 1965-ben.
A koncepció a szemaforokkal
A szemafor egy egész szám változó, amelynek nem negatív értéket, hozzáférést minden eljárás, amelynek kivéve a pillanatban a inicializálási végezhetjük csak két az atomi műveleteket: P (a dán szó proberen - ellenőrzéséhez) és V (a verhogen - növekedés). A klasszikus e műveletek meghatározásával a következő:
Ez a bejegyzés azt jelenti, hogy: működése során a szemafor S P első ellenőrzi az értékét. Ha ez nagyobb, mint 0. azután kivontuk S 1. Ha ez kevesebb vagy egyenlő, mint 0, a folyamat blokkolt, amíg, amíg S nagyobb mint 0. azután kivontuk S 1 lépésben S V szemafor az értékét csak hozzáadunk 1 idején a szemafor lehet inicializálni bármely nem negatív értéket.
Megoldás termelő-fogyasztó problémát szemaforokat
Az egyik a közös feladatok, amelyek szervezete interakciós folyamatok a feladata termelő-fogyasztó (producer-consumer). Legyen két folyamat keresztül kommunikálnak korlátozott méretű pufferben. Gyártó meghatározza az információ a vágólapra, és a fogyasztó letölti onnan. Ezen a szinten a fogyasztók tevékenységei, és a tenyésztők a következőkben foglalhatók össze.
Ha a puffer megtelik, akkor a gyártónak meg kell várnia, amíg nem lesz egy hely, hogy ott új információ. Ha a puffer üres, a felhasználónak kell várni egy új üzenetet. Hogyan tudjuk megvalósítani ezeket az állapotokat szemaforokat. Vegyünk három szemafor. üres. teljes és mutex. Szemafor teljes fogja használni annak érdekében, hogy a fogyasztó meg kell várni, amíg az információ megjelenik a puffer. Szemafor üres fogják használni, hogy megszervezze a várakozási gyártó a teljes puffer és szemafor mutexek - a szervezet a kölcsönös kizárás a kritikus területeken, amelyek az intézkedések put_item és get_item (művelet „a tájékoztatást”, és „hogy a tájékoztatás” nem lehet átlépni, mint ebben az esetben is veszélye információ torzítás). Ezután a probléma megoldása egy C-szerű nyelv a következő:
Ez könnyen ellenőrizhető, hogy valóban ez a helyes megoldás a problémára. Megjegyezzük, futólag, hogy az itt használt szemaforokat eléréséhez két célja van: a szervezet a kölcsönös kizárás, hogy a kritikus szakaszt, és vzaimosinhronizatsii sebesség a folyamatot.