• Shuffle
    Toggle On
    Toggle Off
  • Alphabetize
    Toggle On
    Toggle Off
  • Front First
    Toggle On
    Toggle Off
  • Both Sides
    Toggle On
    Toggle Off
  • Read
    Toggle On
    Toggle Off
Reading...
Front

Card Range To Study

through

image

Play button

image

Play button

image

Progress

1/66

Click to flip

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.