• Non ci sono risultati.

SISTEMI OPERATIVI E LAB. (A.A. 10-11) – 13 LUGLIO 2011

N/A
N/A
Protected

Academic year: 2021

Condividi "SISTEMI OPERATIVI E LAB. (A.A. 10-11) – 13 LUGLIO 2011"

Copied!
1
0
0

Testo completo

(1)

SISTEMI OPERATIVI E LAB.

(A.A. 10-11) – 13 LUGLIO 2011

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 ESAME13Lug11-2-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 3 parametri: il primo deve essere il nome assoluto di un direttorio che identifica una gerarchia (G) all’interno del file system, il secondo deve essere considerato numero intero strettamente positivo (H), mentre il terzo deve essere considerato un singolo carattere (C). Il programma deve cercare nella gerarchia G specificata tutti i direttori che contengono almeno un file che abbia una lunghezza in byte minore od uguale a H e che contenga (nel contenuto) almeno una occorrenza del carattere C. Si riporti il nome assoluto di tali direttori sullo standard output. In ognuno di tali direttori trovati, si deve invocare la parte in C, passando come parametri i nomi dei file trovati (F0, F1, ... FN-1) che soddisfano la condizione precedente e il carattere C.

La parte in C accetta un numero variabile N + 1 di parametri che rappresentano i primi N nomi di file (F0, F1, ... FN- 1), mentre l’ultimo rappresenta un singolo carattere (C) (da controllare).

Il processo padre deve generare 2 * N processi figli (P0 … P2 * N-1) e i processi figli vanno considerati a coppie, ognuna delle quali è associata ad uno dei file Fi. In particolare, la prima coppia è costituita dal processo P0 e dal processo P2*N-1, la seconda dal processo P1 e dal processo P2*N-2 e così via fino alla coppia costituita dal processo PN-1 e dal processo PN: in generale una coppia è costituita dal processo Pi (con i che varia da 0 a … N-1) e dal processo P2*N-1-i. Entrambi i processi della coppia devono cercare il carattere C nel file associato Fi sempre fino alla fine attuando una sorta di staffetta così come illustrato nel seguito. Il processo Pi deve cominciare a leggere cercando la prima occorrenza del carattere C; appena trovata deve comunicare all’altro processo della coppia P2*N-1-i la posizione del carattere trovato all’interno del file (in termini di long int); quindi il processo P2*N-1-i deve partire con la sua ricerca del carattere C dalla posizione seguente a quella ricevuta; appena trovata una nuova occorrenza di C deve comunicare all’altro processo della coppia Pi la posizione del carattere trovato all’interno del file (in termini di long int); tale staffetta deve avere termine quando il file è finito.

Al termine, ogni processo figlio deve ritornare al padre il numero di occorrenze del carattere C trovate dal singolo processo della coppia e il padre deve stampare su standard output il PID di ogni figlio e il valore ritornato.

Riferimenti

Documenti correlati

Per ogni linea, l’ultimo processo figlio PN-1 dopo la lettura della propria linea corrente, verifica il numero di occorrenze di C trovate nella linea corrente nei confronti del

Il programma deve cercare nella gerarchia G specificata (inclusa la radice) - tramite un file comandi ricorsivo, FCR - tutti i direttori che contengono un file che ha nome relativo

Il processo padre riceve da ogni figlio la lunghezza L in caratteri dei file F1, F2 … FN e quindi deve comunicare ad ogni figlio la stringa “Sopra media”, “Equal media” o

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

fino al figlio PN-1 che comunica con il padre; questo schema a pipeline deve essere ripetuto per ogni linea di ogni file e deve prevedere l’invio in avanti di un array di

Nella prima fase, il processo padre deve richiedere all’utente per ogni file Fk (cioè per ogni processo figlio Pi) un divisore della lunghezza in byte

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

Al termine, ogni processo figlio deve ritornare al padre il numero di occorrenze del carattere Cz trovate dal singolo processo della coppia (supposto minore o uguale a 255) e il