• Non ci sono risultati.

SISTEMI OPERATIVI E LAB. (A.A. 10-11) – 18 GENNAIO 2012

N/A
N/A
Protected

Academic year: 2021

Condividi "SISTEMI OPERATIVI E LAB. (A.A. 10-11) – 18 GENNAIO 2012"

Copied!
1
0
0

Testo completo

(1)

SISTEMI OPERATIVI E LAB.

(A.A. 10-11) – 18 GENNAIO 2012

IMPORTANTE:

1) Fare il login sui sistemi in modalità Linux usando il proprio username e password.

2) I file prodotti devono essere collocati in un sottodirettorio della propria HOME directory che deve essere creato e avere nome ESAME18Gen12-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 tre parametri: il primo deve essere il nome assoluto di un direttorio che identifica una gerarchia (G) all’interno del file system, il secondo parametro deve essere considerato un singolo carattere (C), mentre il terzo parametro deve essere considerato un numero intero strettamente positivo (K). Il programma deve cercare nella gerarchia G specificata tutti i direttori (compresa la radice) che contengono almeno un file il cui nome sia di 5 caratteri e i cui caratteri dispari, sempre del nome, siano tutti uguali al carattere C e abbia un numero di linee uguale a K. Si riporti il nome assoluto di tali direttori sullo standard output. Al termine dell’intera esplorazione ricorsiva di G, si deve invocare la parte in C, passando come parametri i nomi assoluti dei file trovati (F1, F2, ... FN), il carattere C e il numero K.

La parte in C accetta un numero variabile di parametri che rappresentano nomi assoluti di file (F1, F2, ... FN) un singolo carattere (C) e un numero intero strettamente positivo (K): il numero di file è variabile ma comunque superiore ad 1; si effettuino i necessari controlli sul numero dei parametri e sugli ultimi due parametri considerando,senza verificarlo,che tutti i file abbiano esattamente K linee.

Il processo padre deve creare N processi figli (P0 … PN-1): ogni processo figlio è associato ad uno dei file Fi.

Ogni processo figlio deve leggere le linee del file associato Fi sempre fino alla fine, contando in ogni linea le occorrenze del carattere C. Ognuno dei figli, una volta calcolato il numero di occorrenze di C trovate in una linea, deve inviare questo conteggio (in termini di long int) al processo padre: quindi ogni figlio deve inviare al padre K conteggi, uno per ogni linea del file Fi associato.

Il padre ha il compito di stampare su standard output, rispettando l'ordine dei file, i conteggi ricevuti da ogni processo figlio riportando il nome del file e il numero di linea corrispondente: quindi il padre deve ricevere e stampare il primo conteggio ricevuto dal figlio P0, poi il primo conteggio ricevuto dal figlio P1 e così via fino ai primo conteggio ricevuto dal figlio PN-1 e quindi così via fino al K-esimo conteggio dei vari figli.

Al termine, ogni processo figlio deve ritornare al padre:

a) il valore 0 se non sono state trovate occorrenze del carattere C nel proprio file associato Fi;

b) il valore 1 se sono state trovate occorrenze del carattere C nel proprio file associato Fi;

e il padre 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

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

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

Ogni processo nipote PPi, una volta ricevuto il carattere AM dal processo figlio Pi, deve calcolare a sua volta il numero di occorrenze Nocc (in termini di long int) di AM nel

Ogni processo figlio Pi deve leggere i caratteri del file associato Fj cercando la prima occorrenza (Cn) di un carattere numerico. I processi figli e il processo padre

Per ogni insieme ricevuto, il padre deve determinare il valore massimo e, SOLO AL PROCESSO FIGLIO CHE HA INVIATO TALE VALORE, deve indicare (*) di stampare su

Ogni processo figlio Pi deve calcolare (in termini di long int) la lunghezza in linee del file associato Fk. Quindi, i processi figli e il processo padre devono attenersi a questo