• Non ci sono risultati.

Prova Pratica di Laboratorio di Sistemi Operativi 18 luglio 2013

N/A
N/A
Protected

Academic year: 2021

Condividi "Prova Pratica di Laboratorio di Sistemi Operativi 18 luglio 2013"

Copied!
1
0
0

Testo completo

(1)

Prova Pratica di Laboratorio di Sistemi Operativi 18 luglio 2013

Esercizio 0 (“Se copiate, vi cacciamo”)

Rendete la vostra directory home inaccessibile ad altri utenti (sia in lettura che in esecuzione). Rimuovete tutti i file che vi appartengono dalla directory /public.

Esercizio 1: Linguaggio C (obbligatorio): (20 punti) Una gara fra processi.

Scrivere un programma C che prenda in input (da standard input) alcune righe contenenti comandi con relativi parametri.

La lista dei comandi termina quando viene inserita una riga vuota.

A questo punto tutti i comandi vengono eseguiti in modo concorrente e deve venir stampato l'ordine di terminazione.

(E' vietato usare system, popen o simili) Es.$ prorace

sleep 30 sleep 10 sleep 20 ls -l

input di una riga vuota

…. output di ls -l ….

1 arrivato: ls -l 2 arrivato: sleep 10 3 arrivato: sleep 20 4 arrivato: sleep 30

Esercizio 2: completamento (10 punti)

Si estenda l'esercizio 1 in modo da avere una partenza piu' sincronizzata dei processi.

Tutti i processi devono attendere un evento che li sblocchi tutti insieme, per esempio tutti i processi possono mettersi in attesa con poll o select sul canale di lettura di una pipe. Quando “prorace” scrive un carattere sulla pipe tutti i processi diventano ready.

Esercizio 3: Script bash o Python: (10 punti):

Scrivere un programma python o uno script bash che cataloghi per nome tutti i file presenti in un sottoalbero.

nameindex dir1 dir2

crea nel file dir2 un link simbolico ad ogni file contenuto nell'albero che ha come radice dir1. Quando sono presenti piu' file con lo stesso nome in diverse directory all'interno di dir1, viene posto un suffisso numerico al nome del link simbolico

se dir1 contiene i file pippo, pluto e paperino e la directory paperopoli e quest'ultima contiene i file paperino, qui quo e qua, all'interno di dir2 divranno essere contenuti i seguenti link simbolici:

pippo → dir1/pippo pluto → dir1/pluto

paperino → dir1/paperino

paperino1 → dir1/paperopoli/paperino qui → dir1/paperopoli/qui

quo → dir1/paperopoli/quo qua → dir1/paperopoli/qua Esercizio 4: (“Consegnate! E’ ora!”):

Consegnare lo script e il sorgente del programma C, in attachment separati, entro il tempo a disposizione, via e-mail a: renzo chiocciola cs.unibo.it. Il subject del mail deve essere uguale a PROVAPRATICA, i nomi dei file in attachment devono contenere il vostro cognome (per evitare confusioni in fase di correzione).

INOLTRE:

Se volete che il vostro lavoro venga giudicato, lasciate aperta la vostra sessione (incluso il vostro editor) e lasciate il laboratorio. Verrete richiamati uno alla volta per una breve discussione sul vostro elaborato.

Riferimenti

Documenti correlati

Scrivere un programma python o uno script bash che conti il numero dei file eseguibili presenti nella directory passata come parametro catalogandoli per tipo di interprete. (se il

Scrivere un programma che per ogni file .c nella directory corrente chiami il compilatore gcc per generare il file oggetto (.o) a meno che esista gia' nella directory un file

deve creare il file 'file1' recuperando il contenuto dal file generato da myt2 dell'esercizio1 Esercizio 3: Script bash o Python: (10 punti):. Il comando che dovrete implementare

l'ouput significa che se contiamo tutti i caratteri contenuti nella prima riga di tutti i file in mydir otteniamo 234 (mydir/file1 puo' avere 40 caratteri nella prima riga,

Scrivere un programma che stampi il numero di inode di ogni file presente in una direcotory passata come argomento (o della direcotry corrente se il programma viene chiamato

In particolare il programma deve eseguire una fork, quando l'utente digita un numero letto dal processo padre, il processo figlio deve stampare un numero uguale di x.. (negli esempi

L'informazione deve essere trovata scandendo la directory proc, infatti ad ogni processo attivo corrisponde una directory in /proc che ha come nome il numero del processo (ad esempio

L'informazione puo' essere trovata scandendo la directory proc, infatti ad ogni processo attivo corrisponde una directory in /proc che ha come nome il numero del processo (ad