Use LEFT and RIGHT arrow keys to navigate between flashcards;
Use UP and DOWN arrow keys to flip the card;
H to show hint;
A reads text to speech;
66 Cards in this Set
- Front
- Back
Un Sistema di Elaborazione dell’Informazione (o Elaboratore Elettronico o Computer) è |
Una macchina digitale, elettronica, automatica e programmabile capace di effettuare trasformazioni o elaborazioni su dati. |
|
Software è |
Le istruzioni (il programma) che l’elaboratore esegue. |
|
Firmware è |
Insieme di microprogrammi che svolgono operazioni più o meno complesse nei singoli componenti. Può essere modificato solo con tecniche speciali. es: BIOS, risiede nella ROM, esegue nella CPU al boot. |
|
Notazione Posizionale nel Linguaggio C |
Ai numeri espressi in base 2 viene messo il prefisso 0b Ai numeri espressi in base 8 viene messo il prefisso 0 Ai numeri espressi in base 16 viene messo il prefisso 0x Ai numeri espressi in base 10 non viene messo alcun prefisso. |
|
Endianess |
Little Endian: i Byte più significativi del numero stanno nei Byte di indirizzomaggiore. (LSB, Least Significant Byte first). Big Endian: i Byte più significativi del numero stanno nei Byte di indirizzo Minore.(MSB, Most Significant Byte first). |
|
DefinizioneWord o Parola |
E’ un blocco di byte in memoria aventi la stessadimensione dell’ampiezza in byte del Bus dei Dati. Indica quanti bytepossono essere trasferiti, al massimo, con un'unica operazione delbus tra CPU e memoria. |
|
Sintassi strutture packed |
typedef struct struttura { uint32_t i; uint8_t c; } __attribute__(( packed )) STRUTTURA; |
|
Ciclo di Neumann |
Fetch instruction from memory Decode instruction Evaluate address Fetch operands from memory Execute operation Store result |
|
Ciclo di data path |
Caricare registri di input alla ALU Far lavorare la ALU Spostare il risultato in un registro o in memoria |
|
Accesso Diretto alla memoria – DMA |
Il trasferimento dei dati, dal disco alla memoria, effettuato dal DMA non coinvolge la CPU tranne che: Quando la CPU ordina al DMA lo spostamento del blocco dati. Quando il DMA avvisa la CPU dell’avvenuto trasferimento. |
|
Registri IP/PC, PS, SS, CS, DS |
Instruction pointer/Program counter: prossima istruzione da eseguire (offset rispetto al CS) Program Status (chiamato anche status register) Stack segment: punta a inizio stack Code segment: punta a inizio segmento codice Data segment: punta all'inizio dei dati |
|
Stato di un processo in esecuzione |
Lo stato di un processo in esecuzione ad un determinante istante e' univocamente rappresentato come il contenuto della memoria da questo utilizzata e lo stato dei suoi registri. |
|
Modello di compilazione del linguaggio C |
Preprocessing Compilazione (in assembly) Linker (mette insieme le librerie e l'object code) Eseguibile |
|
Variabili Globali e Specificatore extern |
potrà essere acceduta da tutte le funzioni che stanno nello stesso file masempre sotto alla dichiarazione della variabile stessa potrà essere acceduta da tutte le funzioni che stanno in altri file in cuiesiste una dichiarazione extern per la stessa variabile |
|
Variabili Globali e specificatore Static |
La variabile definita static potrà ancora essere acceduta dalle funzioni nelsuo modulo, ma da nessun altro modulo |
|
Cosa succede definendo una variabile static all'interno di una funzione? |
Viene collocata non nello stack ma in un'area di memoria permanente, e inizializzata solo alla prima entrata in funzione, dopo la quale manterra' il valore assegnatoli successivamente anche tra piu' chiamate della funzione |
|
Cosa sono i activation record in C |
Fornisce informazioni riguardo la funzione a cui appartiene, come i parametri, il valore di ritorno e l'indirizzo di ritorno. Vengono collocate nella stack |
|
Particolarita' riguardo la valutazione dell'operatore sizeof |
Viene valutato a tempo di compilazione e non di esecuzione |
|
A cosa servono i prototipi di funzione in C |
A dare visibilita' alla funzione nel caso in cui questa viene chiamata precedentemente alla sua dichiarazione nel codice Informare il compilatore come trattare il dato restituito dalla funzione e anche come trattare i paremetri ad essa passati |
|
Funzioni con numero di argomenti variabile |
Libreria: stdarg.h Parametri: (int narg, ...) Variabile: va_list nomevar; Funzioni: va_start(va_list, narg), va_arg(va, tipo di arg) - ne prende uno alla volta, va_end(va_list) |
|
Operatori sui bit in C |
& - and | - or ^ - xor ~ - not (complemento ad uno) >> - shift a destra << - shift a sinistra |
|
opzione -D gcc |
Definisce un simbolo, in tale modo -DNOMESIMBOLO, se viene scritto -DNOMESIMBOLO=VALORE allora viene anche assegnato il valore di VALORE al simbolo NOMESIMBOLO E' anche possible creare macro con -D'NOMEMACROCONARGOMENTI(ARG)=CORPO;MACRO;' |
|
opzione -E gcc |
Effettuare solo la fase di preprocessing, mandando sullo stdout il codice sorgente generato dal preprocessore |
|
opzione -S gcc |
gcc trasforma il codice sorgente c in corrispondente codice assembly |
|
opzione -c gcc |
ordina di compilare il modulo specificato |
|
opzione -o gcc |
-o nomefile ordina di mettere il risultato della fase realizzata da gcc, sia il nome di un modulo oggetto generato in fase di compilazione che il nome del eseguibile generato in fase in linking |
|
opzione -I (i) gcc |
-IPERCORSO specifica il percorso assoluto o relativo per raggiungere i file di intestazione (gli include) e puo' essere usata piu' volte |
|
opzione -L gcc |
-LPERCORSO specifica il percorso assoluto o relativo dove gcc trovera' le librerie fornite dall'utente, puo' essere usata piu' volte |
|
opzione -l gcc (L minuscola) |
-lNOMERISTRETTOLIBRERIA serve per indicare quali librerie usare tramite il loro nome "ristretto" e non lungo per esempio -lmath o -lpthread |
|
opzioni -Wl,-soname,nomelibreria e -Wl,-rpath,RunTimeLibDir gcc |
Il primo (-soname) serve per creare librerie dinamiche, il secondo per specificare dove si trovano librerie dinamiche che non si trovano nella directory predefinita |
|
Librerie statiche in C |
Quando il linker crea una copia di tutte le librerie utilizzate per l'eseguibile generato, generando un eseguibile piu' grande che pero' evita dipendenze sulla libreria a runtime. .a in linux e .lib in windows |
|
Librerie dinamiche in C |
Il linking con la libreria avviene a run time quando sia la libreria che l'eseguibile vengono caricarti in memroia. Nel eseguibile viene messo soltanto il nome della libreria. Nel caso che la libreria sia gia' in memoria non serve ricaricarla. .so in linux e .dll in windows |
|
Gerarchia livelli in un computer moderno |
Livello 5: Application level/Problem-oriented language level Livello 4: Assembly language level Livello 3: Operating system machine level Livello 2: ISA Livello 1: Microarchitecture level Livello 0: Hardware |
|
Livelli di privilegio (rings) della CPU |
Specificano che operazioni (e su cosa) puo' eseguire la CPU, varia in base al processo in esecuzione. Ciascun processo mantiene uno stack per ciascun livello di privilegio dellaCPU (per gestire le interrupt ad esempio). |
|
Servizi messi a disposizione dal SO |
Gestione della protezione Gestione della CPU Gestione della memoria Gestione I/O Fornitura chiamate di sistema (system calls) |
|
Modalita' di gestione della protezione della CPU/Memoria |
Modalita' kernel e modalita' utente, protezione della cpu, limita le istruzioni ISA Modalita' protezione della memoria |
|
Cos'e' un processo |
E' una istanza in memoria di un programma eseguibile |
|
Cosa fa il loader |
Prende un programma e lo lancia, generando un processo. Crea i segmenti di memoria necessari all'esecuzione (code segment, data segment, stack utente/sistema) Passa eventuali parametri da riga di commando alla main, e poi passa la prima istruzione del main alla CPU che comincia a lavorare |
|
Cosa sono i interrupt |
Servono ai programmi affinche' possono ottenere sistemi dal SO |
|
Cos'e' il cambio di contesto dopo una interrupt |
Il processore passa in modalita' kernel e salva tutte le informazioni che identificano lo stato del processo in memoria, successivamente gestisce l'interrupt |
|
Cosa sono i system calls |
Sono le interrupt |
|
Tipi di eccezioni |
Trap: viene fermata l'esecuzione, gestita e quindi portata a buon fine Fault: fermata l'esecuzione, viene avviata la gestione e alla fine l'istruzione viene rieseguito (page fault) Abort: Causata da un errore irremediabile, il processo termina (segmentation "fault") |
|
Interrupt sincroni/asincroni |
Sincroni (software): esplicitamente chiamati dalla CPU mediante INT n Asincroni (hardware): scatenati da una periferica che segnala alla CPU che ci sta da gestirlo |
|
Interrupt mascherabili/non mascherabili |
Sono mascherabili o no le interrupt in base a se bisogna gestirle immediatamente oppure no |
|
Cos'e' lo scheduler |
E' un componente del SO che si occupa nel alternare l'esecuzione dei task da parte della CPU in modo che ogni task venga eseguito |
|
Come funziona lo scheduler |
L'esecuzione della CPU viene suddivisa in quanti temporali chiamati time slice Allo scadere del time slice del processo (o thread) corrente questo viene interrotto e l'esecuzione passa ad un altro processo (o thread) A operazione di I/O il processo viene messo in waiting e intanto la CPU va ad un altro processo |
|
Ciclo di vita di un processo |
1: New, caricato dal loader 2: Ready, aspetta il turno ad usare la CPU 3: Running, esegue calcoli grazie alla CPU 4: Waiting, aspetta I/O 5: Terminated, termina 2-3-4 ciclici |
|
IEEE |
Institute of Electrical and Electronics Engineers |
|
POSIX |
Portable Operating System Interface |
|
Tipi dato POSIX portabili |
seguiti da _t int8_t int16_t int32_t uint8_t uint16_t uint32_t e altri |
|
Bash - Variabili locali e d'ambiente |
Variabili locale: non vengono trasmesse da shell a subshell Variabili d'ambiente: trasmesse da shell a subshell, la subshell riceve una copia che se cambiata non cambia quella nella shell originale |
|
Bash - Comando per visualizzare variabili d'ambiente |
env, possono essere caricati subito all'avvio della shell da alcuni file tra cui: /etc/profile .bash_profile .bash_login.profile .bashrc |
|
Bash - Comando set |
Permette di visualizzare tutte le variabili attualmente dichiarate, sia d'ambiente che locali Con parametri + flag e' possibile modificare il funzionamento di alcuni comandi bash |
|
Bash - Comando unset |
Permette di eliminare una variabile esistente |
|
Bash - Variabili inesistenti e variabili vuoti |
Una variabile inesistente e' una variabile che non e' mai stata dichiarata, una variabile vuota invece e' una variabile che ha come valore una stringa vuota |
|
Bash - Riferimenti indiretti a variabili sintassi |
varA=pippo nomevar=varA echo ${!nomevar} # stampa pippo |
|
Bash - Command substitution and escape Quoting con " " e ' ' |
echo "Dear ${USER} the files are a[[:digit:]]B and the date is: `date`" => Dear vittorio the files are a[[:digit:]]B and the date is: Tue, Sep 15, 2015 12:35:44 PM echo 'Dear ${USER} the files are a[[:digit:]]B and the date is: `date`' => Dear ${USER} the files are a[[:digit:]]B and the date is: `date` |
|
Bash - IFS |
IFS = Internal Field Separator La variabile contiene i caratteri che sono i separatori delle parole |
|
Bash - PID di un processo lanciato in background |
Lo trovo nella variabile $! subito dopo averlo lanciato (viene sovrascritto da altri processi lanciati in background) e il processo in background si lancia con & alla fine |
|
Bash - Comando per separare processo in background da quello che lo ha lanciato |
disown - senza parametro disown e' applicato a $! |
|
Bash - Parameter expansion |
Pseudo regexp e varie modifiche simili su stringhe |
|
Thread - Definizione |
Singolo flusso (thread) di istruzioni che il processore puo' far eseguire contemporaneamente con il resto del processo (incluso altri suoi thread). |
|
Differenze tra thread e processi |
I thread di un processo condividono il suo data e code segment (non ne hanno uno proprio) ma hanno uno stack loro, e anche un IP (/PC) e valori di registri propri. |
|
Thread safety - cos'e' e perche' serve? |
I risultati delle azioni di un thread non devono andare a modificare in modo inaspettato il comportamento di un altro thread o processo gia' in esecuzione concorentemente, se lo fa lo deve fare in mutua esclusione. |
|
Semafori POSIX - Named/unnamed |
Named sono system wide, peremettono di sincronizzare thread e processi anche non imparentati: sem_open Unnamed invece tra thread o processi imparentati: sem_init |
|
Semafori POSIX - Operazioni atomiche |
Che operano in mutua esclusione, non possono provocare cambiamenti che non possono essere verificati dai altri processi/thread coinvolti. |