...

Esercitazione al parziale del 1.12.2014

by user

on
Category: Documents
14

views

Report

Comments

Transcript

Esercitazione al parziale del 1.12.2014
Pre Parziale “Laboratorio di Sistemi Operativi” 17.11.14
Cognome
Nome
Matricola
Lab Arch degli Elab
SI
NO
Crediti
3
6
Domande chiuse: ogni domanda corrisponde ad un punteggio di 1 punto in caso di risposta esatta, 0 in caso di risposta
errata o mancante. Solo una rispasta è corretta.
1. Il comando ps -ef | grep defunct
A.
Visualizza i processi Zombie nel sistema
B.
Concatena l'output del comando ps -ef con grep che scrive su file defunct
C.
Se defunct esiste, sovrascrive il file con l'output del comando ps -ef
D.
Invia l'output del comando sul file grep defunct
2. Quale comando aggiunge il permesso x (esecuzione) solo per il proprietario in un file i cui permessi sono rw- r-- r--,
lasciando inalterati gli altri permessi?
A.
chmod 644 filename
B.
chmod o+x file name
C.
chmod a+x file name
D.
chmod u+x file name
3. Il “text segment” (program code) di un processo risiede in un'area della memoria virtuale
A.
R/W
B.
Write only
C.
Accessibile esclusivamente da un sol processo
D.
Read olny e potenzialmente condivisa da più processi
4. Il comando kill
A.
Fa terminare sempre un processo
B.
Terminal la shell
C.
invia un segnale ad un processo
D.
arresta il sistema
5. La variabile $PATH
A.
Contiene ”exit status” dell'ultimo comando eseguito
B.
Contiene il pathname dell'eseguibile shell
C.
Contiene l'environmet della shell
D.
Contiene la lista delle directory dove cercare il comando da eseguire
6. Cosa succede nel caso in cui la “wait()” viene attivata da un processo che non ha processi figli
Pre Parziale “Laboratorio di Sistemi Operativi” 17.11.14
Cognome
Nome
Matricola
Lab Arch degli Elab
SI
A.
Attende fino a quando non viene creato un processo figlio
B.
Attende fino a quando nel sistema non si presenta un processo zombie
C.
restituisca -1
D.
Restituisce 0
NO
7. La shell
A.
e' una routine del kernel
B.
e' un processo utente
C.
e' una sistem call
D.
e' una tabella del sistema operativo
8. In un sistema UNIX un processo nello stato ZOMBIE
A.
Occupa tutto lo spazio di indirizzamento allocato al processo
B.
Continua a mantenere solo una parte delle risorse della task_struct del kernel
C.
E' un normale processo running che prosegue la propria attività fino ad essere “waited”
D.
Può essere eliminato dal sistema con una “sure kill”.
9. In un sistema UNIX la “open()” su “regular file” vuole come parametro
A.
il file descriptor (int fd)
B.
il nome del file
C.
non essendo una fopen(), accetta solo gli standard I/O: input,output,error
D.
uno stream file (FILE* sfd).
10. La System Call wait()
A.
Pone il processo padre in attesa della terminazione del processo init
B.
In caso di successo restituisce il pid di un processo figlio terminato
C.
Pone il processo figlio in attesa della terminazione del padre
D.
ritorna lo status di terminazione che il processo figlio ha posto nella exit()
11. La System call signal(int sig, ...)
A.
Consente di inviare il segnale sig al processo corrente
B.
Consente di cambiare la disposition corrente di sig
C.
Consente solo di installare un handler per il sig
D.
Non ha effetto sui segnali la cui “default disposition” sia TERM.
12. La “signal mask” di un processo
A.
Contiene i segnali pending del processo
B.
Contiene tutti i segnali che non possono terminare il processo
Crediti
3
6
Pre Parziale “Laboratorio di Sistemi Operativi” 17.11.14
Cognome
Nome
Matricola
Lab Arch degli Elab
SI
C.
E' l'insieme dei segnali blocked per il processo.
D.
E' l'insieme dei segnali che il kernel non puo' inviare al processo
NO
Crediti
3
6
Domande aperte: ogni domanda corrisponde ad un punteggio variabile tra 0 e 3 punti a seconda della correttezza,
completezza e sinteticità della risposta.
13. Un processo padre crea 2 processi figli e dopo 10 secondi di elaborazione chiama la system call wait().
Successivamente entra in un loop infinito all'interno del quale non è prevista wait().
Il primo processo figlio termina a seguito di un errore con exit(1) dopo 2 secondi, il secondo processo figlio termina
correttamente dopo 15 secondi con exit(0). Rispondere ai seguenti quesiti:
A.
Restano dei processi Zombie nel sistema?
B.
Spiegare cosa succede quando termina il primo processo figlio
C.
Spiegare cosa succede quando termina il secondo processo figli
14. Con riferimento all'esercizio precedente, descrivere cosa accade se dopo 20 s
A.
kill < pid primo processo figlio>
B.
kill -9 < pid secondo processo figlio>
C.
kill -9 <parent pid>
Pre Parziale “Laboratorio di Sistemi Operativi” 17.11.14
Cognome
Nome
Matricola
Lab Arch degli Elab
SI
NO
Crediti
3
6
15. Per ogni chaimata di write() nel seguente codice, indicare quale sarebbe l'output, spiegarne il motivo. Indicare
anche il risultato finale (cat file.txt).
fd1 = open(“file.txt”, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
fd2 = dup(fd1);
fd3 = open(“file.txt”, O_RDWR);
A.
write(fd1, "hello", 6);
B.
write(fd2, "world", 6);
C.
lseek(fd2, 0, SEEK_SET);
D.
write(fd1, "HELLO", 6);
E.
write(fd3, "WORD", 6);
Esercizi: Ognuno dei seguenti esercizi corrisponde ad un punteggio variabile tra 0 e 6 a seconda
della correttezza, completezza e adeguatezza della soluzione proposta. Utilizzare il linguaggio C e
le system call UNIX cercando di essere chiari e strutturati.
E.1
- File descriptors duplicati condividono il file offset e le file status flags (es. O_APPEND)?
- Scrivere un programma atto a verificarlo**.
E.2
Scrivere un programma che apre un file esistente con la flag O_APPEND, chiama la write() per 4 volte con “<pid> ho
scritto <i> volte” *, precedendo chiascuna chiamata con lseek(fd,0,SEEK_SET).
Quale potrebbe essere il risultato di “cat <nomefile>” ?
** int dup(int oldfd); off_t lseek(int fd, off_t offset, int whence)// SEEK_CUR, SEEK_SET;int fcntl(int fd, int cmd, ... /*
arg */ ) // F_SETFL, F_GETFL;
* int sprintf(char *str, const char *format, ...);
Pre Parziale “Laboratorio di Sistemi Operativi” 17.11.14
Cognome
Nome
Matricola
Lab Arch degli Elab
SI
NO
Crediti
3
6
Fly UP