Modulo 2 Flashcards
(136 cards)
- Quale delle seguenti affermazioni sui processi Linux è falsa?
> In un determinato istante, non possono esserci 2 processi distinti con lo stesso PID
> Per creare i PID dei processi si usano dei numeri interi che crescono sempre
> In istanti diversi, possono esserci 2 processi distinti con lo stesso PID
> Ogni processo può conoscere il suo PID
Per creare i PID dei processi si usano dei numeri interi che crescono sempre
- Quale delle seguenti affermazioni sugli errori delle syscall è vera?
> Per stampare su stdout la spiegazione di un errore verificatosi in una syscall si può effettuare la seguente chiamata: printf(“%s\n”, strerror(errno));
Per stampare su stdout la spiegazione di un errore verificatosi in una syscall è sufficiente chiamare perror
Per stampare su stdout la spiegazione di un errore verificatosi in una syscall è necessario scrivere uno switch sulla variabile globale errno
Per stampare su stderr la spiegazione di un errore verificatosi in una syscall, il cui nome sia contenuto nella variabile syscall_name (di tipo char *), si può effettuare la seguente chiamata: perror(“Si e’ verificato il seguente errore nella chiamata a %s”, syscall_name);
> Per stampare su stdout la spiegazione di un errore verificatosi in una syscall si può effettuare la seguente chiamata: printf(“%s\n”, strerror(errno));
- Quale delle seguenti affermazioni sui processi Linux è vera?
> Normalmente, il processo figlio, una volta terminata la sua computazione, attende, con una chiamata alla syscall wait, che il padre termini e gli restituisca il suo exit status
Un processo diventa zombie se termina prima di almeno uno dei processi che abbia eventualmente creato
Ogni processo può conoscere il proprio PID, ma non quello del processo che l’ha creato
Con l’eccezione del primo processo, tutti i processi sono creati con una fork effettuata da un altro processo in esecuzione
> Con l’eccezione del primo processo, tutti i processi sono creati con una fork effettuata da un altro processo in esecuzione
Spiegazioni:
[generalmente il padre aspetta mediante la funzione wait
che il figlio finisca ed ottiene le varie informazioni sull’exit
status]
[un processo diventa zombie se il padre termina prima del figlio senza effettuare una wait]
[ogni processo conosce il ppid]
- Quale delle seguenti affermazioni sui processi Linux è falsa?
> Digitare un comando sulla shell genera sempre un nuovo processo
Esistono file che non possono essere eseguiti per diventare processi
Affinchè un file possa diventare un processo è necessario che abbia i permessi di esecuzione
Qualsiasi computazione eseguita dal sistema operativo è contenuta dentro un qualche processo
> Digitare un comando sulla shell genera sempre un nuovo processo
[molti comandi come ad esmpio cd non generano nuovi processi ma sono dei semplici cambi di variabile all’interno dello stesso processo]
- Quale delle seguenti affermazioni sui processi Linux è vera?
> Eseguendo (con successo) k volte un file eseguibile, si generano k diversi processi
Per poter lanciare un file eseguibile, è prima necessario aspettare che il comando precedente sia terminato
Tutti i processi sono sempre in stato di RUNNING
Un processo è sempre un’istanza di uno script bash
> Eseguendo (con successo) k volte un file eseguibile, si generano k diversi processi
[si possono lanciare comandi in backgorund]
[possono stare anche in altri stati]
- Un programma scritto in linguaggio C:
> Rappresenta le stringhe ESCLUSIVAMENTE come array di caratteri terminate dal carattere ‘\n’
Rappresenta le stringhe ESCLUSIVAMENTE come array di caratteri terminate dal carattere ‘^M’
Rappresenta le stringhe ESCLUSIVAMENTE come array di caratteri terminate dal carattere ‘0’
Rappresenta le stringhe come array di caratteri terminate dal carattere ‘\0’
Rappresenta le stringhe come array di caratteri terminate dal carattere ‘\0’
- Quale delle seguenti affermazioni è vera?
> Linus Torvalds ha riscritto i pacchetti di Unix, creando i pacchetti GNU
Tutte le opzioni sono false
Linus Torvalds ha scritto il primo kernel di Linux all’inizio degli anni ‘80
Richard Stallman ha descritto per primo la licenza GPL
Richard Stallman ha descritto per primo la licenza GPL
[ Linus Torvalds programma il kernel del primo Linux nel 1991]
- Quale delle seguenti affermazioni è vera?
> Nessuna delle opzioni è vera
È possibile montare un filesystem solo se è dichiarato nel file /etc/fstab
È possibile montare un filesystem solo se è dichiarato nel file /etc/mtab
Ad ogni filesystem corrisponde un disco fisico o parte di esso(partizione)
Nessuna delle opzioni è vera
[/etc/fstab contiene i filesystem che vengono montati a tempo di boot]
[/etc/mtabm contiene i filesystem che sono montati e dove]
[i filesystem virtuali non corrispondono ad alcun disco]
- Quale delle seguenti affermazioni sulla comunicazione tra processi in Linux è vera?
> Per far comunicare qualunque coppia di processi è necessario metterli in pipeling da shell
Usando la syscall pipe, è possibile far comunicare qualunque coppia di processi
Nessuna delle opzioni è vera
Usando le named pipes, è possibile far comunicare solo processi parenti(ad es., padre con figlio)
Nessuna delle opzioni è vera
[possono comunicare anche tramite file,segnali,con le socket..]
[syscal pipe è limitato a processi padri e figli]
[named pipes è limitato a processi padri,figli,nipoti]
- Quale delle seguenti affermazioni sulla comunicazione tra processi in Linux è vera?
Per far comunicare qualunque coppia di processi è necessario metterli in pipeling da shell
Usando la syscall pipe, è possibile far comunicare qualunque coppia di processi
Usando le socket si può far comunicare qualsiasi coppia di processi
Usando le named pipes, è possibile far comunicare solo processi parenti(ad es., padre con figlio)
Usando le socket si può far comunicare qualsiasi coppia di processi
- Si supponga di avere il seguente frammento di codice: FILE *stream = fopen(NOMEFILE, “w”); Dire quale frammento di codice ha lo stesso effetto.
int fd = open(NOMEFILE, O_WRONLY | O_CREAT, 0666);
int fd = open(NOMEFILE, O_WRONLY | O_TRUNC);
int fd = open(NOMEFILE, O_WRONLY);
int fd = open(NOMEFILE, O_WRONLY | O_CREAT | O_TRUNC, 0666);
int fd = open(NOMEFILE, O_WRONLY | O_CREAT | O_TRUNC, 0666);
- Quale delle seguenti affermazioni sulle syscall di Linux che riguardano i files è falsa?
> Chiamando la syscall select, è possibile monitorare un insieme di file descriptor, ed essere notificati non appena ce n’è uno che è diventato disponibile per un’operazione di lettura o scrittura
Per richiedere un lock su un file (o su una porzione di esso), occorre chiamare la syscall ioctl
È possibile usare la syscall select sia in modo bloccante che in modo non bloccante
Le syscall ioctl e fcntl ammettono 2 o 3 argomenti, a seconda dell’operazione richiesta
Per richiedere un lock su un file (o su una porzione di esso), occorre chiamare la syscall ioctl
- Quale delle seguenti affermazioni sui segnali Linux è vera?
> Tutti i segnali, se non opportunamente catturati, provocano la terminazione del processo, con l’eccezione del segnale STOP
Per un processo è sempre possibile ridefinire il comportamento di un qualsiasi segnale
È possibile per un qualunque processo inviare un segnale ad un qualsiasi altro processo dello stesso utente
Nessuna delle altre affermazioni è vera
È possibile per un qualunque processo inviare un segnale ad un qualsiasi altro processo dello stesso utente
- Quale delle seguenti affermazioni sui segnali Linux è vera?
> Tutti i segnali, se non opportunamente catturati, provocano la terminazione del processo, con l’eccezione del segnale STOP
Per un processo è sempre possibile ridefinire il comportamento di un qualsiasi segnale
È possibile per un qualunque processo inviare un segnale ad un qualsiasi altro processo dello stesso utente
Nessuna delle altre affermazioni è vera
È possibile per un qualunque processo inviare un segnale ad un qualsiasi altro processo dello stesso utente
- Quale delle seguenti affermazioni sugli errori delle syscall di Linux è vera?
> Per stampare su stderr la spiegazione di un errore verificatosi in una syscall, il cui nome sia contenuto nella variabile syscall_name (di tipo char *), si può effettuare la seguente chiamata: perror(“Si è verificato il seguente errore nella chiamata a %s”, syscall_name);
Per stampare su stdout la spiegazione di un errore verificatosi in una syscall si può effettuare la seguente chiamata: prinf(“%s\n”, strerror(errno));
Per stampare su stdout la spiegazione di un errore verificatosi in una syscall è sufficiente chiamare perror
Per stampare su stdout la spiegazione di un errore verificatosi in una syscall è necessario scrivere uno switch sulla variabile globale errno
Per stampare su stdout la spiegazione di un errore verificatosi in una syscall si può effettuare la seguente chiamata: prinf(“%s\n”, strerror(errno))
- La stringa Informatica9000 ha un match con la seguente REGEX:
Informatica9000$
^Informatica900$
Informatica9[0^3]
[^IKU]nformatica
Informatica9000$
- Quali delle seguenti affermazioni sui comandi della bash è vera?
> Il comando cat stringa può essere usato per scrivere una stringa su stdout
Eseguendo il comando echo date
viene stampata la data e l’ora corrente (secondo l’orologio di sistema)
Il comando man cmd restituisce in sequenza tutte le pagine di manuale per il comando cmd contenute nelle varie sezioni del manuale
Il comando clear può essere usato per pulire completamente lo schermo: dopo l’esecuzione, il terminale non conterrà alcuna scritta
Eseguendo il comando echo date
viene stampata la data e l’ora corrente (secondo l’orologio di sistema)
- Relativamente alla programmazione bash, la variabile IFS:
> Nessuna delle opzioni è vera
È l’acronimo di Internal Field Splitting
Rappresenta una variabile contenente la sequenza di tutti i caratteri utilizzati per la separazione in parole (word splitting)
Rappresenta il carattere utilizzato per la separazione in parole (word splitting)
Rappresenta una variabile contenente la sequenza di tutti i caratteri utilizzati per la separazione in parole (word splitting)
- Quale delle seguenti affermazioni sul Linguaggio C è vera?
Richiede che i programmi siano sempre scritti in file con estensione .c
Richiede che ogni modulo sia scritto in un file separato, come nel Java
È stato definito come linguaggio Open Source da Dennis Ritchie
È stato definito presso i laboratori di ricerca di una compagnia telefonica americana
È stato definito presso i laboratori di ricerca di una compagnia telefonica americana
- Quale delle seguenti affermazioni sulle funzioni malloc, calloc, realloc e free è falsa?
> Le due chiamate calloc(N, sizeof(int)) e realloc(NULL, Nsizeof(int)) hanno sempre lo stesso effetto
Le due chiamate malloc(Nsizeof(int)) e realloc(NULL, N*sizeof(int)) hanno sempre lo stesso effetto
Il primo argomento di realloc, quando non NULL, deve contenere il risultato di una precedente chiamata a malloc, calloc o realloc
I risultati di malloc, calloc e realloc possono essere passati alla funzione free per poter essere riallocati da future malloc, calloc e/o realloc
Le due chiamate calloc(N, sizeof(int)) e realloc(NULL, N*sizeof(int)) hanno sempre lo stesso effetto
- Quale delle seguenti affermazioni sulle funzioni malloc, calloc, realloc e free è falsa?
> I risultati di malloc e calloc possono essere passati alla funzione free per poter essere riallocati da future malloc e/o calloc
Le due chiamate malloc(N*sizeof(int)) e calloc(N, sizeof(int)) hanno sempre lo stesso effetto
La memoria allocata con malloc e/o calloc viene comunque liberata quando il processo termina, indipendentemente dal fatto di aver o no chiamato la free su ogni zona di memoria allocata
La memoria allocata da malloc e/o calloc si trova sullo heap
Le due chiamate malloc(N*sizeof(int)) e calloc(N, sizeof(int)) hanno sempre lo stesso effetto
- Quale dei seguenti sistemi operativi non è un antenato di Linux?
Unix
Le altre risposte contengono tutte degli antenati di Linux
MacOSX
MULTICS
MacOSX
- Si consideri il comando: find Doc* ( -name ‘Doc*’ -a -type d ) -o -newer Documenti -exec touch ‘{}’ \;
> Nessuna delle altre opzioni è vera
L’azione non è specificata correttamente, quindi la bash restituirà un messaggio d’errore
Il comando stampa su schermo tutte le directory il cui nome comincia con Doc e che siano state modificate più recentemente della directory Documenti
Il comando modifica tutti i tempi(atime, mtime e ctime) di tutte le directory il cui nome comincia con Doc e che siano state modificate più recentemente dalla directory Documenti
Nessuna delle altre opzioni è vera
- Quale delle seguenti affermazioni sulla syscall fork è falsa?
> Ritorna 2 valori diversi a seconda che si tratti del processo padre o del processo figlio
Genera una copia esatta del processo chiamante, con alcune eccezioni; tra queste ultime vi è lo stack delle chiamate (che quindi non è copiato)
Genera una copia esatta del processo chiamante, con alcune eccezioni; tra queste ultime vi è il PID (che quindi non è copiato)
Genera una copia esatta del processo chiamante, con alcune eccezioni; tra queste ultime vi è il PPID (che quindi non è copiato)
Genera una copia esatta del processo chiamante, con alcune eccezioni; tra queste ultime vi è lo stack delle chiamate (che quindi non è copiato)