Proiect PSO 2002 - Semafoare generalizate in MINIX ---------------------------------------------- Autor: Opincaru Cristian Grupa 345C3 oppy@xnet.ro Tema Proiect: ------------------------ Semafor generalizat Modificarea conceptului de semafor in semafor numarator supraunitar, extins cu operatia Z (zero): Semaforul este asimilabil unui contor ce poate lua doar valori pozitive. Operatiile ce pot fi aplicate asupra unui semafor de acest tip sunt: - V(n) - Adauga valorea 'n' la valoarea curenta a semaforului. Operatia nu produce blocarea thread/proces-ului apelant. - P(n) - Incearca extragerea valorii 'n' din valoarea curenta a semaforului. Thread/proces -ul apelant este blocat pana in clipa in care operatia se poate aplica fara ca semaforul sa ajunga negativ. Daca aceasta conditie este indeplinita de la bun inceput, thread-ul apelant nu este blocat. - Z() - Daca valoarea semaforului este ne-nula, thread/proces -ul apelant va fi blocat pana la indeplinirea acestei conditii. Observatii: In cazul operatiei P(n) pot fi considerate diverse politici de deblocare a thread/proces -urilor: - sunt deblocate de fiecare data cat mai multe thread/proces -uri posibil (se deblocheaza prioritar thread/proces -urile ce incearca P(n) cu valori mici ale lui n) - deblocarea este facuta in ordinea apelurilor (deblocare FIFO) Ajungerea semaforului pe valoare 0 impune deblocarea tuturor thread/proces -urilor blocate pe operatie Z() pana in acel moment. Instalare: ------------------------- In continuare se presupune ca aveti acces la un sistem Linux(Unix) si ca ati instalat proaspat Minix-ul (versiunea 2.0.0) pe calculator. Pentru instalare Minix citeste fisirele Readme.txt si Install.txt care vin impreuna cu sistemul MINIX. 1) Se booteaza Minix. 2) Se creaza o discheta formatata: format /dev/fd0 1440 mkfs /dev/fd0 3) Se booteaza Linux 4) Se despacheteaza fisierele din arhiva si se copiaza pe discheta formatata Minix. mount -t minix /dev/fd0 /mnt/floppy cp -R unde_au_fost_despachetate/* /mnt/floppy 5) Se booteaza in minix. 6) Se monteaza discheta: mount /dev/fd0 /fd0 7) Se copiaza fisierele de pe discheta: cp -R /fd0 / 8) Se compileaza librariile: su bin cd /usr/src/lib make all make install 9) Se compileaza kernelul: cd /usr/src/tools make hdboot (sau make fdboot) 10) Se rebooteaza: su root reboot