LAB1 Općenito: * Kako poslati signal procesu: a) preko tipkovnice b) iz ljuske * Navesti nekoliko signala i čemu služe. * Što radi funkcija sigaction? * Što se sve može postići sa sigaction (koja sve ponašanja, što treba staviti kao argumente)? * Opisati postupak prihvata signala. * Kad se signal neće prihvatiti? * Ako je programu poslan signal SIGINT za vrijeme čekanja na funkciji sleep(10), što će se dogoditi nakon povratka iz obrade signala? Hoće li program "odspavati" neprospavano vrijeme ili ne? Zašto? * Neka program trenutno obrađuje signal SIGINT. Što će se dogoditi ako mu se tada pošalje još jedan SIGINT? Što ako mu se tada pošalje SIGTERM? * Što ako za signal SIGINT nije navedeno ponašanje (sa sigaction)? Što će se dogoditi s procesom kad primi taj signal? Vezano uz vježbe: Zadatak 1 * Provjeriti da li program radi (prevođenje/pokretanje). * Što bi se dogodilo kad bi se maknuo poziv sigaction iz programa? * Zašto Ctrl+\ prekida izvođenje? * Poslati signal SIGKILL programu, koristeći drugi terminal (ljusku). * Dok jedan signal već čeka početak obrade (npr. SIGUSR1, K_Z=010) ponovno poslati isti signal procesu. Što će se dogoditi? Zašto? LAB2 - O dretvema * Što radi funkcija pthread_create, pthread_join * Čemu služi prvi|treći|četvrti argument za pthread_create * (2. parametar ne ističemo posebno, pa ga možemo preskočiti - tu su razna svojstva dretve: način raspoređivanja, stog, tip dretve, ...) * Zašto je zadnji argument (koji se prenosi u početnu funkciju dretve) kazaljka? * Što se događa s dretvom koja poziva pthread_join? * Kad će dretva koja je pozvala pthread_join nastaviti s radom? * Što bi se dogodilo da glavna dretva, nakon stvaranja novih nema petlje s pozivom pthread_join već završi s radom? - O procesima * Što radi funkcija fork()? * Što vraća fork()? * Što radi funkcija wait()? Zašto je bitna? * Što ako roditelj ne pozove wait za svakog djeteta? * Kada bi umjesto wait(NULL) koristili wait(&varijabla) koju bi vrijednost imala varijabla nakon wait-a? * Što je to zajednička memorija? * Zašto treba koristiti zajedničku memoriju (dohvaćenu sa shmget+shmat) kada želimo komunikaciju između roditelja i djece te djece međusobno? * Opisati funkcije shmget i shmat (što radi jedna a što druga)? * Što radi funkcija shmdt i shmctl (kako se koristi u kodu)? # Provjeriti da shmget i shmat koriste ispravno, npr. da ne bi shmat koristili više puta, a shmget samo jednom (sve varijable bi tada pokazivale na istu memoriju). # Najbolje bi bilo kada bi memoriju za sve rezervirali jednom i onda to dijelili; ali nije krivo i ako za svako polje idu ispočetka: shmget + shmat (nije optimalno ali radi) - Dekkerov/Lamportov algoritam * Za koliko najviše dretvi se može koristiti Dekkerov/Lamprtov algoritam? * Može li jedna dretva dvaput za redom ući u KO prema Dekkerovu algoritmu? Ako da kako - opisati scenarij? * Čemu služi polje/varijabla: BROJ, ULAZ ? * Ako dretve 1, 2 i 3 žele u KO a BROJ[] ima vrijednosti: 5 4 9 koja će dretva prva ući? * Da li će algoritam raditi ako imamo samo jednu dretvu? * Čemu služi petlja dok je ULAZ[j]==1 radi ;? * Što kada je J == I u petlji "dok je"? Zašto to prolazi, tj. dretva ne čeka na samu sebe? * U najgorem slučaju, koliko će drugih dretvi trebati čekati jedna dretva, ako ih je ukupno N? * Što ako neka dretva zastane u NKO? Utječe li to na KO drugih dretvi? - 2a/2b * Kad bi makli sinkronizaciju, varijabla "A" bi mogla nakon završetka programa imati vrijednost manju od N*M (broj dretvi * broj iteracija). Zašto? * Što kad u 2a ne bi koristili zajedničku memoriju za varijablu A već ju definirali kao globalnu varijabli (int A=0;)?