Comments
Description
Transcript
Esame luglio 05
Laboratorio di Sistemi Operativi: Prof.ssa A. Rescigno Anno Acc. 2004-2005 Prova d’esame Luglio 2005 Università di Salerno Nome e Cognome: 1 /10 Classe 1 p-p Matricola: 2 /11 3 /10 4 5 /14 /8 6 /47 Classe 2 p-d tot /100 Spazio riservato alla correzione 1. 10 punti a) Descrivere che cosa fa il seguente script. PS3=">?" select frutta in "mela" "arancia" "melone"; do if [ $frutta ]; then echo Ti piace $frutta; break else echo Nessuna frutta fi done b) Scrivere uno script shell in cui data una lista di interi da linea di comando, si ottenga sullo standard output il triplo di ciascuno di tali interi. Prova d’esame 2 2. 11 punti É noto che la system call unlink é un’operazione atomica. Si descriva utilizzando un esempio che cosa potrebbe accadere se ció non fosse. Giustificare la risposta. Prova d’esame 3. 10 punti a) Si consideri il seguente programma: #include <stdio.h> int main(void) { char arry[ ]="Finisco\n"; printf("Inizio\n"); write(1,arry,9); } Sia a.out il suo eseguibile. Spiegare dettagliatamente perché dando a.out > file cat file si ottiene Finisco Inizio 3 Prova d’esame b) Si consideri il seguente programma #include <stdio.h> int main(void) { char arry[ ]="Finisco\n"; printf("Inizio\n"); fflush(stdout); write(1,arry,9); } Sia a.out il suo eseguibile. Spiegare dettagliatamente perché dando a.out > file cat file si ottiene Inizio Finisco 4 Prova d’esame 4. 14 punti Si consideri il seguente programma e si supponga di compilarlo. #include<sys/types.h> #include<fcntl.h> #include<unistd.h> #include"ourhdr.h" int main(){ if (access("prova.txt", R_OK)<0) err_ret("access error per prova.txt"); else printf("access OK\n"); if (access("tentativo.txt", R_OK)<0) err_ret("access error per tentativo.txt"); else printf("open OK\n"); if (open("prova.txt", O_RDONLY)<0) err_ret("open error per prova.txt"); else printf("open OK\n"); if (open("tentativo.txt", O_RDONLY)<0) err_ret("open error per tentativo.txt"); else printf("open OK\n"); exit(0); } Se fosse -rwxrwxrwx 1 rescigno 10932 Jun 4 10:45 a.out -rw------- 1 rescigno 1891 Jun 4 09:45 prova.txt -rw------- 1 studente 1891 Jun 4 08:45 tentativo.txt supponendo che il real user ID sia studente dire 1) che cosa succede dando a.out. 2) Si assuma ora di settare il set-user-id di a.out. Dire se ci sono cambiamenti dando a.out. In entrambi i casi la risposta va giustificata. 5 Prova d’esame 6 7 Prova d’esame 5. 8 punti a) Si supponga di mandare in esecuzione il seguente programma: int main(void) { pid_t pid1, pid2; pid1 = fork(); pid2 = fork(); exit(0); } Dire quanti processi vengono generati. Giustificare la risposta. b) Si supponga di mandare in esecuzione il seguente programma: int main(void) { pid_t pid1, pid2; pid1 = fork(); if (pid1>0) { pid2 = fork(); exit(0); } Dire quanti processi vengono generati. Giustificare la risposta. Prova d’esame 8 6. 47 punti Si consideri il seguente scenario: Sia S un processo server e sia C un generico processo client. Ciascun processo client riceve dall’utente un intero che invia al server S e poi dorme per 40 secondi. Il server S riceve da linea di comando una lista di numeri e si comporta in maniera differente in relazione ai casi sottoelencati. a) (12 punti) La comunicazione da client a server avviene attraverso una FIFO. Il server S ammazza il processo se il numero che gli ha inviato é nell’elenco, altrimenti lo lascia vivere. b) (20 punti) La comunicazione da client a server avviene attraverso memoria condivisa gestita da un semaforo. Il server S dopo che aver lasciato trascorrere 30 sec verifica se i numeri passati dai processi client sono nell’elenco, uccidendoli in caso affermativo e lasciandoli vivere altrimenti. c) (15 punti) La comunicazione tra client e server avviene attraverso code di messaggi. Il server S invia al client un messaggio in cui lo si invita ad uscire, se il numero inviatogli é nell’elenco, ed in cui gli si chiede di dormire 10 sec, altrimenti. Prova d’esame 9 Prova d’esame 10 Prova d’esame 11