Probleme cu memorie partajata si semafoare ------------------------------------------ Obs.: In cadrul problemelor de mai jos, oridecateori este vorba de un acces concurent la un segment de memorie partajata, pentru a evita inconsistentele se va folosi un mecanism de semafoare. 1.Sa se scrie un program care creaza o zona de memorie care contine un intreg p si un sir cu m elemente initializate cu 0. Un alt program va executa intr-un ciclu infinit urmatoarele actiuni: in functie de numarul intreg existent la un moment dat in zona de memorie, schimba pe pozitia p valoarea 0 in 1 si invers, dupa care genereaza un alt p aleator intre 1 si m, il scrie in zona de memorie partajata. Primul program verifica din cand in cand zona de memorie, daca sunt mai mult de n cifre de 1 in sir atunci elibereaza zona de memorie si trimite SIGTERM celorlalte procese atasate la zona de meorie. 2. Se creaza o zona de memorie care este folosita de doi jucatori de "vaporase". Zona de memorie va contine un identificator jucator, linia si coloana spre care se tinteste si un 0 (daca la miscarea precedenta a fost tintit) sau 1 (daca nu a fost tintit) sau -1 daca a fost invins. Un jucator va intra in joc numai daca nu sunt deja doi jucatori. Pentru programul jucatorului se va genera o matrice 12x12 cu 7 elemente succesive marcate pe o linie sau pe o coloana, iar pozitia spre care se tinteste se va citi de la tastatura sau va fi generata de un algoritm inteligent. 3. Un program creaza o zona de memorie in care este o matrice cu elemente 1 si 0. Un alt program va parcurge matricea pe linii la intervale de n secunde si daca un element are in jurul lui mai mult de 5 vecini 1 atunci elementul devine 1 iar daca are mai mult de 5 vecini 0 elementul devine 0. Procesul care a creat zona de memorie va afisa matricea pana cand elementele acesteia nu se mai modifica. 4. Un program creaza o zona de memorie in care este o matrice cu elemente 1 si 0. Un alt program va parcurge matricea pe coloane la intervale de n secunde si daca un element are in jurul lui 5 vecini 1 atunci elementul devine 0 iar daca are 5 vecini 0 elementul devine 1. Procesul care a creat zona de memorie va afisa matricea pana cand elementele acesteia nu se mai modifica. 5. Un program creaza o zona de memorie in care este o matrice cu elemente 1 si 0. Un alt program va parcurge matricea in spirala la intervale de n secunde si daca un element are in jurul lui mai putin de 3 vecini 1 atunci elementul devine 1 iar daca are mai putin de 3 vecini 0 elementul devine 0. Procesul care a creat zona de memorie va afisa matricea pana cand elementele acesteia nu se mai modifica. 6. Se vor crea doua zone de memorie partajata care vor fi accesate de trei procese. Procesul A va avea acces la ambele zone de memorie, iar procesele B si C vor accesa fiecare una dintre ele. Procesele B si C genereaza cate un numar si il scriu in zona de memorie la care sunt atasate. Procesul A, citeste numerele din cele doua zone de memorie si le afiseaza. Dupa aceasta B si C genereaza din nou cate un numar... Toate acestea se vor repeta de 10-15 ori. 7. Se creeaza o zona de memorie partajata de dimensiune 9*sizeof(int).Doua procese se vor conecta la aceasta zona de memorie si vor juca X0(ics zero). Procesele vor comunica si prin semafoare, notificand celuilalt proces ca ia venit randul. Cand jocul se termina se va afisa continutul zonei de memorie la iesirea standard. 8. Se vor crea trei zone de memorie partajata si doua procese conectate la ele. Procesul A va scrie la intamplare in una dintre zonele de memorie valoarea 1, iar in celelalte va pune 0 si apoi anunta printr-un semafor procesul B ca poate accesa zonele. Procesul B citeste la intamplare una dintre zonele de memorie. Daca o citeste pe cea care contine 1 va afisa la iesirea standard ca a castigat, iar daca nu, ca a pierdut. Jocul se va repeta de 10-15 ori. 9. Problema producatorului si a consumatorului: Producatorul produce articole care sunt asezate pe o banda. Consumatorul ia de pe banda articolele si le consuma. Ipotezele in care au loc aceste operatii sunt: - producatorul poate produce un articol la orice moment de timp; - consumatorul poate prelua un articol doar daca banda este nevida; - ordinea in care produsele sunt preluate de pe banda de catre consumator coincide cu ordinea in care sunt asezate pe banda de catre producator; - toate articolele produse vor fi consumate. 10. Problema citirilor si a scrierilor: Se considera o carte la care au acces mai multi cititori si mai multi scriitori. Este permis ca mai multi cititori sa aiba acces simultan la continutul cartii, dar daca un scriitor opereaza asupra cartii (completeaza, sterge, modifica, etc.) atunci nici un alt scriitor si nici un alt cititor nu au acces la carte. Mai exact: - un cititor poate incepe operatia de citire daca si numai daca nici un scritor nu este in curs de a scrie in carte; - un scriitor poate incepe operatia de scriere daca si numai daca nici un cititor si nici un alt scriitor nu au acces la carte. Se cere sa se simuleze operatiile de citire si scriere in carte. 11. Problema filozofilor chinezi: La o masa rotunda stau 5 filozofi chinezi. Principala lor activitate este cea de a gandi, dar evident din cand in cand trebuie sa manance, folosind pentru aceasta cate doua betisoare. Stiind ca intre oricare doi filozofi se afla un betisor si ca un filozof poate manca doar daca a ridicat de pe masa atat betisorul din stanga sa cat si pe cel din dreapta sa, se cere sa se simuleze activitatile filozofilor asezati la masa. 12. Problema barbierului somnoros: Pravalia unui barbier este formata din doua incaperi: cea de asteptare si cea in care este scaunul pe care se aseaza clientii pentru a fi barbieriti. Daca nu are clienti barbierul somnoros se culca. Mai exact: - la inceput si cand termina de barbierit un client, barbierul se uita pe usa in camera de asteptare. Daca exista clienti, invita pe primul sosit dintre ei sa intre si sa se aseze pe scaun; daca nu exista clienti, barbierul se aseaza el pe scaun pentru a dormi; - fiecare client, cand intra in sala de asteptare, se aseaza la coada; daca este singur in sala, ciocaneste la usa salii cu scaunul de barbierit pentru a-l trezi pe barbier.