• Non ci sono risultati.

SISTEMI OPERATIVI e LABORATORIO DI SISTEMI OPERATIVI (A.A. 11-12) – 20 GIUGNO 2012

N/A
N/A
Protected

Academic year: 2021

Condividi "SISTEMI OPERATIVI e LABORATORIO DI SISTEMI OPERATIVI (A.A. 11-12) – 20 GIUGNO 2012"

Copied!
1
0
0

Testo completo

(1)

SISTEMI OPERATIVI e

LABORATORIO DI SISTEMI OPERATIVI (A.A. 11-12) – 20 GIUGNO 2012

IMPORTANTE:

1) Fare il login sui sistemi in modalità Linux usando il proprio username e password, attivare syncexam.sh e passare in modalità testuale.

2) I file prodotti devono essere collocati in un sottodirettorio (che deve essere nella directory studente_XXX) che deve essere creato e avere nome ESAME20Giu12-1-1. FARE ATTENZIONE AL NOME DEL DIRETTORIO, in particolare alle maiuscole e ai trattini indicati. Verrà penalizzata l’assenza del direttorio con il nome indicato e/o l’assenza dei file nel direttorio specificato, al momento della copia automatica del direttorio e dei file. ALLA SCADENZA DEL TEMPO A DISPOSIZIONE VERRÀ INFATTI ATTIVATA UNA PROCEDURA AUTOMATICA DI COPIA, PER OGNI STUDENTE DEL TURNO, DEI FILE CONTENUTI NEL DIRETTORIO SPECIFICATO.

3) Il tempo a disposizione per la prova è di 120 MINUTI per lo svolgimento di tutto il compito e di 75 minuti per lo svolgimento della sola parte C.

4) Non è ammesso nessun tipo di scambio di informazioni né verbale né elettronico, pena la invalidazione della verifica.

5) L’assenza di commenti significativi verrà penalizzata.

6) AL TERMINE DELLA PROVA È INDISPENSABILE CONSEGNARE IL TESTO DEL COMPITO (ANCHE IN CASO CHE UNO STUDENTE SI RITIRI): IN CASO CONTRARIO, NON POTRÀ ESSERE EFFETTUATA LA CORREZIONE DEL COMPITO MANCANDO IL TESTO DI RIFERIMENTO.

Esercizio

Si realizzi un programma concorrente per UNIX che deve avere una parte in Bourne Shell e una parte in C.

La parte in Shell deve prevedere due parametri: il primo deve essere il nome assoluto di un direttorio che identifica una gerarchia (G) all’interno del file system e il secondo deve essere considerato un numero intero strettamente positivo (K). Il programma deve cercare nella gerarchia G specificata tutti i file la cui lunghezza in linee sia maggiore di K: si riporti il nome assoluto di tali file sullo standard output. Al termine dell’intera esplorazione ricorsiva di G, si deve invocare la parte in C per ogni file trovato F, passando come parametri il nome assoluto di F, la sua lunghezza in linee (N) e il numero intero (H) che rappresenta la lunghezza media delle linee del file F calcolata come lunghezza in caratteri di F diviso N.

La parte in C accetta tre parametri (da controllare) che rappresentano le seguenti informazioni: il primo rappresenta il nome assoluto di un file F, il secondo deve essere considerato un numero intero strettamente positivo (N, da controllare) che rappresenta la lunghezza in linee di F e mentre l’ultimo parametro deve essere considerato un numero intero positivo (H, da controllare) che rappresenta la lunghezza media delle linee di F.

Il processo padre deve per prima cosa creare due file il cui nome (Fsotto e Fsopra) risulti dalla concatenazione del nome del file associato con la stringa rispettivamente “.sotto” e “.sopra” (ad esempio se F è /tmp/pippo.txt il file Fsotto si deve chiamare /tmp/pippo.txt.sotto e il file Fsopra si deve chiamare /tmp/pippo.txt.sopra). Quindi, il processo padre deve generare N+2 processi figli (P0 … PN-1, Psotto e Psopra): ognuno dei primi N processi figli è associato ad una linea del file F, mentre i processi figli Psotto e Psopra sono associati rispettivamenti ai file Fsotto e Fsopra. Ogni processo figlio Pi (con i da 0 a N-1) deve calcolare la lunghezza (L) della sua linea compreso il terminatore di linea e quindi deve comunicare la linea (compreso il terminatore di linea) ad uno dei due figli Psotto o Psopra: in particolare, deve comunicarla al figlio Psotto se L è maggiore o uguale a H, altrimenti deve comunicarla al figlio Psopra. I processi Psotto e Psopra hanno il compito di scrivere nel proprio file (Fsotto e Fsopra, rispettivamente) le linee ricevute dai processi figli Pi (con i da 0 a N-1), rispettando l'ordine originale della linee del file F.

Al termine, ogni processo figlio Pi (con i da 0 a N-1) deve ritornare al padre il valore di L, mentre i processi figli

Psotto e Psopra devono ritornare al padre il numero di linee scritte sul proprio file (si suppongano tutti i valori

di ritorno minori di 255). Il padre, dopo che i figli sono terminati, deve stampare su standard output i PID di

ogni figlio con il corrispondente valore ritornato.

Riferimenti

Documenti correlati

La parte in Shell deve prevedere due parametri: il primo deve essere il nome assoluto di un direttorio che identifica una gerarchia (G) all’interno del file system e il secondo

1) Fare il login sui sistemi in modalità Linux usando il proprio username e password, attivare syncexam.sh e passare in modalità testuale. 2) I file prodotti devono essere

1) Fare il login sui sistemi in modalità Linux usando il proprio username e password, attivare syncexam.sh e passare in modalità testuale. 2) I file prodotti devono essere

Il programma deve cercare nella gerarchia G specificata tutti i direttori che contengono file che hanno nel loro contenuto istanze del carattere C, sia maiuscolo che minuscolo: ad

Una volta creato il processo nipote, ogni figlio e ogni nipote eseguono concorrentemente; in particolare, ognuno dei due ‘tipi’ di processi deve leggere, dal suo file associato,

1) Fare il login sui sistemi in modalità Linux usando il proprio username e password, attivare syncexam.sh e passare in modalità testuale. 2) I file prodotti devono essere

Una volta creato il processo nipote, ogni figlio Pj e ogni nipote PPj devono leggere, dal loro file associato Fj+1, metà del file un carattere alla volta in senso inverso e

Il processo padre ha il compito di ricevere, rispettando l’ordine dei file, prima il valore intero L e quindi, usando in modo opportuno questa informazione, la linea: per ogni