4. feladat

Feladva okt. 31-nov. 6., 2011

Határidő nov. 26., 2011

Szemaforok és osztott memória

Megjegyzés:

  1.  Írjunk programot, mely létrehoz egy osztott-memória területet, amely egy p egész számot, illetve egy m elemű, 0-értékekkel inicializált számsorozatot tartalmaz. Egy másik program a következőket hajtjavégre egy végtelen ciklusban: az osztott-memória területen levő p értéktől függően megváltoztatja a sorozat p. pozíciójában levő elem értékét, 1-el növelve azt, majd generál egy 1 és m közötti véletlen számot, és beírja az osztott memória területre a p értékét felülírva.

    Az első program ellenőrzi időnként az osztott-memória területet, és ha egy n számnál nagyobb az elemek összege, akkor felszabadítja az osztott-memória területet és SIGTERM jelzést küld az osztott-memória területhez hozzárendelt többi folyamatnak.

  2. Hozzunk létre egy osztott-memória területet, melyet két "torpedózó" játékos használ. Az osztott-memória terület tartalmazzon egy játékos-azonosítót, a célpont sor- és oszlopszámát, és egy 0 (ha azelőző lövés talált) vagy 1 (ha az előző lövés nem talált) vagy -1 (ha az előző lövés teli találat volt) értéket. Egy játékos csak akkor lép be a játékba, ha nincs még két játékos, aki már játszik. Ajátékosnak megfelelő programban egy 12x12-es mátrixot generálunk, melyen 7 egymás utáni (vízszintes vagy függőleges) pozíciót megjelölünk. A következő célpont kijelölése vagy a billentyűzetről történik, vagy egy intelligens algoritmus segítségével.

  3. Írjunk programot, mely létrehoz egy osztott-memória területet, egy 0 és 1 értékeket tartalmazó mátrixszal. Egy másik program n másodpercenként soronként végigjárja a mátrixot, és amennyiben valamelyik mátrixelem szomszédságában több, mint 5 1-es érték van, akkor ez az elem értéke is 1 lesz, ha pedig több, mint 5 0-s szomszédja van, 0-vá válik ő is. Az a folyamat, amelyik létrehozta az osztott-memória területet kiírja a mátrixot mindaddig, ameddig már nem változik többé. (A mátrixot módosító folyamat helyben dolgozzon, vagyis egy változtatás kihatással legyen a szomszédeira)

  4. Létrehozunk két osztott-memória területet, melyeken három folyamat osztozik majd. Az A folyamat mindkét osztott-memória területhez hozzáférhet, a B és C folyamat pedig csak egy-egy meróriaterülethez a kettő közül. A B és a C folyamatok egy-egy számot generálnak, és beírják azt arra az osztott-memória területre, amelyhez hozzá vannak rendelve. Az A folyamat olvassa a számokat a két osztott-memóriaterületről és kiírja azokat. Ezután (miután az A folyamatnak sikerült kiolvasnia az általuk korábban beírt számot) a B és C folyamat újból generál egy-egy számot. Mindez 10-15 alkalommal ismétlődik.

  5. Hozzunk létre egy 9*sizeof(int) méretű osztott-memória területet. Két folyamat fog hozzákapcsolódni ehhez és X-0-t játszanak. A két folyamat szemafor segítségével is kommunikál, jelezve a másik folyamatnak, hogy most ő a soros. Az osztott-memória terület tartalmát írjuk ki a képernyőre miden lépés után.

  6. Egy program létrehoz egy osztott-memória területet, egy 0 és 1 értékeket tartalmazó mátrixszal. Egy másik program n másodpercenként oszloponként végigjárja a mátrixot, és amennyiben valamelyik mátrixelem szomszédságában 5 db. 1-es érték van, akkor ez az elem értéke is 1 lesz, ha pedig 5db. 0-s szomszédja van, 0-vá válik ő is. Az a folyamat, amelyik létrehozta az osztott-memória területet,kiírja a mátrixot mindaddig, ameddig az már nem változik többé. (A mátrixot módosító folyamat helyben dolgozzon, vagyis egy változtatás kihatással legyen a szomszédeira)

  7. Egy program létrehoz egy osztott-memória területet, egy 0 és 1 értékeket tartalmazó mátrixszal. Egy másik program n másodpercenként spirál formájában végigjárja a mátrixot, és amennyiben valamelyik mátrixelem szomszédságában kevesebb, mint 3 db. 1-es érték van, akkor ennek az elemnek az értéke 1 lesz, ha pedig kevesebb, mint 3 db. 0-s szomszédja van, akkor 0-vá válik. Az a folyamat, amelyiklétrehozta az osztott-memória területet, kiírja a mátrixot mindaddig, ameddig az már nem változik többé. (A mátrixot módosító folyamat helyben dolgozzon, vagyis egy változtatás kihatással legyen a szomszédeira)

  8. Hozzunk létre három osztott-memória területet. Két folyamat fog hozzájuk kapcsolódni. Az A folyamat a három osztott-memória terület közül véletlenszerűen választ egyet, amelyikbe 1-et ír, a másikkettőbe 0-t, majd jelzi egy szemafor segítségével a B folyamatnak, hogy ő következik. A B folyamat találomra választ egyet a három osztott-memória terület közül, melynek kiolvassa a tartalmát. Ha éppen azt olvasta, amelyiknek az értéke 1, kiírja a képernyőre, hogy nyert, különben azt, hogy veszített. A játék 10-15 alkalommal megismétlődik.

  9. A termelő/fogyasztó problémája:

    A termelő fogyasztási cikkeket termel, melyeket elhelyez egy futószalagon (véges puffer). A fogyasztó sorban leveszi a szalagról a termékeket és elfogyasztja őket. A fenti tevékenység a következő feltételek közt megy végbe:

    • a termelő bármilyen időpillanatban termelhet fogyasztási cikket
    • a fogyasztó csak akkor vehet terméket a szalagról, ha az nem üres
    • a fogyasztó ugyanabban a sorrendben fogyasztja el
    • a termelő telített fotószalagra (tel pufferbe) nem helyezhet újabb cikket
    • minden egyes megtermelt fogyasztási cikk el lesz fogyasztva

  10. Az író/olvasó probléma:

    Tekintsünk egy könyvet, melyhez több író és olvasó szeretne hozzáférni. Megengedett, hogy egyszerre több olvasó olvassa a könyvet, viszont ha egy író dolgozik a könyvön (hozzáír, töröl, módosít,stb.), akkor rajta kívül sem más író sem más olvasó nem férhet hozzá a könyvhöz. Pontosabban:

    • egy olvasó akkor és csakis akkor foghat hozzá az olvasáshoz, ha egyetlen író sem írja éppen a könyvet.
    • egy író akkor és csakis akkor foghat hozzá az íráshoz, ha egyetlen olvasó és egyetlen más író sem foglalkozik a könyvvel.

    Szimuláljuk a könyvolvasás, illetve írás műveleteit.

  11. A kínai filozófusok problémája:

    Egy kerek asztalnál 5 kínai filozófus ül. Legfőbb tevékenységük a gondolkodás, de természetesen időnként enniük is kell valamit. Az evéshez két pálcát használ mindenikük. Tudva, hogy minden kétfilozófus között van egy pálcika, és hogy egy filozófus csak akkor ehet, ha mind a jobboldalán, mind a baloldalán levő pálcikát felemelte, szimuláljuk az asztalnál ülő filozófusok tevékenységét.

  12. Az álmos borbély problémája:

    Egy borbély borbélyüzlete két helységből áll: az egyik a váróterem, a másik pedig az, ahol a kliensek a borbélyszékbe ülnek, hogy megborotválják őket. Ha nincs kliense, az álmos borbély lefekszik és alszik. Pontosabban:

    • a borbély kezdetben, illetve miután megborotvált valakit, kinéz a váróterembe. Ha van kliens, betessékeli az elsőt, és leülteti a borbélyszékre; ha nincs kliens, akkor a borbély maga ül a székbe, és alszik.
    • minden kliens, amikor belép a váróterembe, leül a sor végére; ha egyedül van a szobában, akkor kopog a borbélyszékes szoba ajtaján és felébreszti a borbélyt