Tema d`esame di Sistemi Operativi I e II e
Transcript
Tema d`esame di Sistemi Operativi I e II e
Tema d’esame di Sistemi Operativi I e II e Laboratorio 16 luglio 2007 Docenti Luigi Lavazza, Igor Nai Fovino e Matteo Vaccari Nome e Cognome: Matricola: Prima parte 1. (4 punti) Si descriva brevemente la struttura dati a tre livelli di Unix che viene usata nella lettura o scrittura di un file; si faccia un semplice diagramma. (a) A cosa serve il file descriptor? (b) Dove viene salvata la posizione della prossima lettura? (c) Dove viene conservata la sequenza di blocchi che contiene i dati del file? 1 2. (3 punti) Si dica brevemente (non più di una decina di righe in tutto): • cosa è il deadlock • quali sono le condizioni per cui si può verificare • come viene evitato nel kernel di Linux. 3. (4 punti) Si descriva brevemente in cosa consiste una tabella delle pagine su più livelli: (a) a cosa serve (b) quali campi contiene una riga del TLB 2 4. (3 punti) Si scriva un programma C equivalente al comando di shell “cat /etc/passwd | grep pippo 2> /tmp/foo”, utilizzando le chiamate di sistema di Unix. 3 5. (6 punti) Si mostri l’implementazione del meccanismo della “barriera” utilizzando le primitive della libreria pthread. Non è necessario mostrare i dettagli, basta uno pseudo-codice C, da cui emerga chiaramente l’uso dei meccanismi di sincronizzazione (ovviamente occorre evitare le corse critiche). Se non ricordate esattamente la sintassi delle primitive pthread, usate una notazione sufficientemente simile e chiara. Il programma illustrativo crea un certo numero di thread che eseguono una funzione che è necessario specificare nel dettaglio solo per quanto riguarda la sincronizzazione. Si ricorda che il meccanismo della barriera funziona come segue: • ogni processo che arriva alla barriera aspetta gli altri; • quando anche l’ultimo processo è alla barriera, tutti i processi possono avanzare (la scelta di quale effettivamente debba tornare in esecuzione è demandata allo scheduler). NB: in questo esercizio la barriera blocca i processi (o thread) una volta soltanto (non è una barriera bidirezionale). 4 Nome e Cognome: Matricola: Seconda parte 6. (4 punti) Un amministratore di sistema vorrebbe realizzare uno script che inverta l’ordine delle righe di ogni file di testo il cui nome contenga una certa stringa ( dove “invertire” significa ad esempio, considerando un file di 10 righe, far diventare la prima riga l’ultima, la seconda riga la penultima e cosi’ via). Piu’ in dettaglio, si realizzi uno script che: (a) Prenda come parametro il nome di un file “lista”. Tale file conterrà una lista di stringhe da cercare (una stringa per ogni riga). Ad esempio potrebbe contenere: pu pi asc (b) Analizzi i nomi dei file contenuti nella directory da cui lo script è stato lanciato ed identifichi tutti quelli i cui nomi contengano al loro interno una delle stringhe specificate nel file “lista”. (c) Inverta l’ordine delle righe contenute in tali file, salvando i nuovi file cosi’ ottenuti all’interno della directory ~/reverse/ con il nome: “nome_file”_reverse Si consideri questo esempio esplicativo: il file “lista” contiene le stringhe dell’esempio precedente (pu pi asc). La directory in cui lo script viene lanciato contiene i seguenti file di testo: “corrente.txt”, “spesa.txt”, “maschere.txt”. In particolare, il file “maschere.txt” contiene le seguenti righe: ciao a tutti quanti Come si noterà il solo file “maschere.txt” contiene nel suo nome una delle stringhe cercate (asc). Esso dovrà quindi essere invertito e salvato in un file ~/reverse/maschere.txt_reverse, il quale conterrà le seguenti righe: quanti tutti a ciao Per semplicità si assuma che la directory analizzata contenga solo file di testo. 5 7. (3 punti) Si illustrino brevemente le differenze tra link simbolico e hard link 8. (3 punti) Uno script shell può accettare dei parametri come input. Si descriva brevemente come accedere a tali parametri nel caso particolare in cui essi siano più di nove. 6