sem_overview(7) Miscellaneous Information Manual sem_overview(7) NUME sem_overview - prezentare generala a semafoarelor POSIX DESCRIERE Semafoarele POSIX permit proceselor i firelor de execuie sa ii sincronizeze aciunile. Un semafor este un numar intreg a carui valoare nu este permisa niciodata sa scada sub zero. Se pot efectua doua operaii asupra semafoarelor: creterea valorii semafoarelor cu unu (sem_post(3)); i descreterea valorii semafoarelor cu unu (sem_wait(3)). In cazul in care valoarea unui semafor este in prezent zero, atunci o operaiune sem_wait(3) se blocheaza pana cand valoarea devine mai mare decat zero. Semafoarele POSIX se prezinta sub doua forme: semafoare cu nume i semafoare fara nume. Semafoare cu nume Un semafor cu nume este identificat printr-un nume de forma /nume-oarecare; adica un ir de pana la NAME_MAX-4 (adica 251) de caractere cu terminaie nula, format dintr-o bara oblica iniiala, urmata de unul sau mai multe caractere, dintre care niciunul nu este o bara oblica. Doua procese pot funciona pe acelai semafor cu nume, trecand acelai nume la sem_open(3). Funcia sem_open(3) creeaza un nou semafor cu nume sau deschide un semafor cu nume existent. Dupa ce semaforul a fost deschis, acesta poate fi operat cu ajutorul funciilor sem_post(3) i sem_wait(3). Atunci cand un proces a terminat de utilizat semaforul, acesta poate utiliza sem_close(3) pentru a inchide semaforul. Atunci cand toate procesele au terminat de utilizat semaforul, acesta poate fi eliminat din sistem folosind sem_unlink(3). Semafoare fara nume (semafoare bazate pe memorie) Un semafor fara nume nu are un nume. In schimb, semaforul este plasat intr-o regiune de memorie care este partajata intre mai multe fire de execuie (un semafor thread-shared semaphore) sau procese (un semafor process-shared semaphore). Un semafor partajat de fire este plasat intr-o zona de memorie partajata intre firele unui proces, de exemplu, o variabila globala. Un semafor partajat de proces trebuie plasat intr-o regiune de memorie partajata (de exemplu, un segment de memorie partajata System V creat cu ajutorul shmget(2) sau un obiect de memorie partajata POSIX creat cu ajutorul shm_open(3)). Inainte de a fi utilizat, un semafor fara nume trebuie iniializat cu ajutorul sem_init(3). Acesta poate fi apoi operat cu ajutorul sem_post(3) i sem_wait(3). Atunci cand nu mai este necesar i inainte ca memoria in care este localizat sa fie eliberata, semaforul trebuie distrus folosind sem_destroy(3). Restul acestei seciuni descrie cateva detalii specifice ale implementarii in Linux a semafoarelor POSIX. Versiuni Inainte de Linux 2.6, Linux a acceptat doar semafoare fara nume, partajate pe fire de execuie. Intr-un sistem cu Linux 2.6 i o biblioteca ,,glibc" care ofera implementarea NPTL a firelor de execuie, este furnizata o implementare completa a semafoarelor POSIX. Persistena Semafoarele POSIX cu nume sunt persistente in nucleu: daca nu este eliminat de sem_unlink(3), un semafor va exista pana la inchiderea sistemului. Vincularea Programele care utilizeaza API-ul POSIX pentru semafoare trebuie compilate cu cc -pthread pentru a face legatura cu biblioteca ,,in timp real", librt. Accesarea semafoarelor cu nume prin intermediul sistemului de fiiere In Linux, semafoarele cu nume sunt create intr-un sistem de fiiere virtual, montat in mod normal sub /dev/shm, cu nume de forma sem.nume-oarecare (acesta este motivul pentru care numele de semafoare sunt limitate la NAME_MAX-4, mai degraba decat la NAME_MAX caractere). Incepand cu Linux 2.6.19, se pot plasa ACL-uri pe fiierele din acest director, pentru a controla permisiunile obiectelor pentru fiecare utilizator i grup in parte. NOTE Semafoarele din System V (semget(2), semop(2) etc.) reprezinta o API de semafoare mai veche. Semafoarele POSIX ofera o interfaa mai simpla i mai bine conceputa decat semafoarele System V; pe de alta parte, semafoarele POSIX sunt mai puin disponibile pe scara larga (in special pe sistemele mai vechi) decat semafoarele System V. EXEMPLE Un exemplu de utilizare a diferitelor funcii de semaforizare POSIX este prezentat in sem_wait(3). CONSULTAI I sem_close(3), sem_destroy(3), sem_getvalue(3), sem_init(3), sem_open(3), sem_post(3), sem_unlink(3), sem_wait(3), pthreads(7), shm_overview(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 sem_overview(7)