Questions Flashcards
Cosa sono le API?
Sono interfacce offerte dal SO ai programmi di alto livello per utilizzare le system call.
Le system call cambiano da SO a SO, quindi cambiano le implementazioni delle funzioni API per adattarle al SO, ma i nomi delle funzioni rimangono gli stessi.
A cosa serve in comando ‘strace’ da linea di comando?
Serve a vedere quali system call sono usate da un programma in esecuzione.
Descrivere gli step del modello di compilazione per il C.
Preprocessor: processa le direttiva al preprocessore ed elimina i commenti.
Compiler: prende in input l’output del preprocessore e lo trasforma un modulo oggetto
Assembler: trasforma il codice assembly in codice oggetto.
Linker: prende in input i file oggetto e li collega per generare file eseguibile
Definire i vari tipi di variabile.
Locali: la durata di vita è pari alla durata di vita del blocco di istruzioni in cui è dichiarata.
Formali: variabili passate agli argomenti delle funzioni.
Globali: dichiarate fuori dalle funzioni, possono essere accedute da tutte le funzioni di quel file e da tutte quelle in altri file in cui esiste una dichiarazione extern per la stessa variabile.
Per proteggere la variabile da accessi esterni necessita di dichiarazione static
Cos’è una struttura dati pacchettizzata.
È una struttura che evita lo spreco in memoria di spazio, occupando solo lo spazio necessario per contenere i singoli membri della struttura e non a multipli di WORD
Una stessa struttura dati ha la stessa dimensione in tutti i processori?
Perché?
No, dipende, quanto sono grandi i tipi di dato di quel processore e da se è pacchettizzata o meno
In un programma C scrivo una funzione in cui dichiaro un vettore di elementi i cui elementi sono un tipo di struttura dati ‘struct A’.
Guardando come viene allocato in memoria quel vettore, può accadere che tra un elemento ed il successivo, dello stesso vettore, ci siano byte non occupati dalla struttura dati di tipo ‘struct A’? Perché?
Sì, se la sua dimensione è un multiplo di WORD, ovvero se la struttura dati non è pacchettizzata
In linguaggio C, se un programma è costituito da più moduli, è possibile che una stessa funzione sia implementata in due diversi moduli senza che provochi un errore nella generazione del programma eseguibile? Perché?
No, in fase di Linking viene segnalata una ridefinizione.
Lascia però compilare perché il modulo singolarmente è valido.
Però se in uno dei due moduli tale funzione è dichiarata static, non è una ridefinizione, poiché static rende la funzione invisibile agli altri moduli
A cosa serve l’opzione -I del preprocessore e -L e -l del compilatore?
-I specifica il percorso dei file.h.
-L specifica il percorso delle librerie fornite dall’utente.
-l ‘nomedellalibreria’ specifica di utilizzare la libreria indicata dal nome ristretto ‘nomedellalibreria’’
Differenza tra librerie statiche e librerie dinamiche.
Librerie statiche: collegate al programma prima della sua effettiva esecuzione, nella fase di preprocessing dove prendere il file.h e lo copia dove c’è l’include.
Librerie dinamiche: collegate in due fasi.
La prima controlla che si possano collegare le librerie richieste al programma (compiler time).
La seconda a run time, un programma dedicato le carica in memoria e le collega al programma in esecuzione.
Cos’è un target fittizio?
Un target fittizio, detto ‘.phony’, è un target che non è un file e ha come scopo solo l’esecuzione di una sequenza di azioni.
Bisogna indicarli in fondo al Makefile ed elencarli come:
.PHONY: nomi-target.
Organizzazione della memoria usata dalla parte utenti dei processi.
Stack: contiene i record ti attivazione delle chiamate a funzione
Heap: contiene la parte di memoria allocata dinamicamente.
Data: contiene le variabili globali.
Text: contiene il collegamento alle istruzioni macchina
Che cos’è un task?
È il contesto in cui vengono eseguiti i processi.
Ogni processo ha un proprio task .
Un task mantiene in memoria lo stato di esecuzione di un processo, le informazioni sui segmenti di memoria utilizzati, e sul valore corrente dei registri principali.
Un task può avere più stack a sua disposizione?
Perché sì o perché no?
Sì, ogni livello di privilegio del SO gode di uno stack di esecuzione, in questo modo, ogni livello viene mantenuto come componente atomico che non influenza gli altri.
Perché ogni task viene differenziato nei vari livelli a cui opera. (così operazioni indipendenti non interferiscono tra loro)
Che differenza c’è un programma è un processo?
Un processo è l’istanzazione in memoria di un programma.
Un programma può essere:
-un file binario eseguibile
-un processo
-una applicazione
Inoltre un processo è un’entità attiva mentre un programma un’entità passiva
Quanti stack ha a disposizione un processo?
Ha a disposizione uno stack per ogni livello di privilegio del kernel(4) più uno per ogni thread del processo.
Cos’è una system call?
È una chiamata a sistema, quando un processo deve effettuare una operazione per cui non ha i permessi effettuato una chiama al SO il quale prende il controllo, cambia i livelli di sicurezza del processore, effettua l’operazione, dopodiché ristabilisce il ring di sicurezza precedente e restituisce il controllo al processo che aveva effettuato la system call
Descrivi il meccanismo delle system call.
Una system call è implementata nella routine di gestione di un certo interrupt n.
Viene invocata eseguendo una istruzione INT n.
Interrupt ed eccezioni
Le eccezioni sono sincrone rispetto alla CPU:
-TRAP: l’istruzione viene sospesa e portata a buon fine solo dopo la gestione del trap
-FAULT: l’istruzione viene interrotta, gestita l’eccezione e poi rieseguita l’istruzione dall’inizio.
-ABORT: viene causata da un errore irrimediabile, quindi l’istruzione viene abortita ed il processo killato.
Gli interrupt posso essere sincroni o asincroni (dovuti dall’hw), mascherabili e non mascherabili
Differenza tra interrupt sincroni e asincroni.
Sincroni (sw) sono chiamati dalla CPU, gli asincroni (hw) sono scatenati da periferiche che mediante il BUS avvisa la CPU che è avvenuto qualcosa da gestire
Disegnate il diagramma di stato dei processi.
Lo scheduler processa le richieste di accesso ad una risorsa condivisa, ossia stabilisce un ordine per l’esecuzione di tali richieste.
Lo scheduler a longo termine seleziona i processi che possono entrare nella ready queue.
Lo scheduler a breve termine seleziona quali processi posso passare dallo stato di ready allo stato di running.
New->(loader lo carica)->Ready->Esecuzione –>exit–>termina
Nella bash, qual è la differenza tra variabili locali e variabili d’ambiente?
Le variabili locali sono visibili solo dalla Shell che le ha create, le variabili d’ambiente vengono ereditate dalle subshell, se la subshell le modifica non vengono modificata quelle del padre, ma solo la copie ereditate
Nella bash qual è la differenza tra una variabile vuota ed una variabile che non esiste?
È possibile eliminare una variabile?
Variabile vuota, ovvero che non è inizializzata, se non esiste vuol dire che non è stata creata
Per eliminare una variabile con il comando ‘unset nomevariabile’
Cos’è la funzione di autocompletamento della bash?
Funzionalità per facilitare l’inserimento dei comandi.
Basta scrivere le prime lettere del comando e poi premere TAB.