OPERACIJSKI SUSTAVI 17.2.2003.

Napomena: Pokraj imena i prezimena na ispitu navedite i školsku godinu u kojoj ste slušali predmet.Studenti koji su slušali kolegij u tekućoj školskoj godini rješavaju zadatke 1-4, ostali rješavaju zadatke 1-5.

1. Uz pretpostavku da su svi pozivi funkcije fork uspješno izvršeni napišite što donji programski odsječak ispisuje i detaljno objasnite zašto. (Uputa: Nacrtajte stablo pokrenutih procesa.)

for(i=0; i<3; i++){
   pid=fork();
   if (pid>0){
      waitpid(pid);
      printf("A %d \n", i);
   }
   else{
      printf("B %d\n", i);
   }
}
exit(0);

2. Zbog radova promet na mostu se odvija posebnom regulacijom. Potrebno je napisati algoritam za kontrolu prometa koji će poštovati sljedeća pravila:

a) na mostu se ne smiju u istom trenutku naći dva automobila koji idu u suprotnim smjerovima.

b) na mostu može biti više automobila koji idu u istom smjeru.

c) moguće je da se automobili koji idu u istom smjeru medusobno pretječu.

d) onemogućiti pojavu da kontinuirani protok automobila s jedne strane uzrokuje beskonačno čekanje s druge strane.

3. Objasnite princip monitora.

4. Što je fragmentacija spremnika i kako nastaje?

5. Uz pretpostavku da su svi pozivi funkcija za stvaranje procesa i rad sa zajedničkom memorijom uspješno obavljeni, navedite što ispisuje donji program te objasnite razlog takvog ispisa.

#include<stdio.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/sem.h>
main(){
    int SegID;int a=10;int *b;pid_t pid;
    SegID = shmget(IPC_PRIVATE,sizeof(int),0660);
    b = (int*)shmat(SegID,NULL,0);
    *b = 20;
    pid=fork();
    if (pid==0){
        a=a+5;*b=*b+5;
        printf("var1=%d , var2=%d\n", a, *b);
        shmdt(b);
        exit(0);
    }
    else{
        waitpid(pid);
        a=a+5;*b=*b+5;
        printf("var1=%d , var2=%d\n", a, *b);
    }
    shmdt(b);
    shmctl(SegID,IPC_RMID,NULL);
}

Boris Milašinović

Rezultati: srijeda 19.2.2003. u 13h , usmeni ispit: četvrtak 20.2.2003. u 9h