FONDAMENTI DI
INFORMATICA
LORENZO BRACCIALE
[email protected]
IL PROGRAMMA
•  Sistemi operativi
•  Introduzione all’utilizzo di Linux
•  Cenni teorici informatica
•  Programmazione C
•  Le basi del linguaggio
•  Algoritmi (base)
•  Programmazione di rete (base)
MATERIALE
Libro di testo: Deitel & Deitel: “Il linguaggio C”
LEZIONE TIPICA
¾ h Teoria
¾ h Pratica (portare sempre il computer)
MAILING LIST
[email protected]
IL LINGUAGGIO C
Ideato e realizzato ~1970
Prestazioni elevate
•  Sistemi Operativi, Embedded, Sistemi Real Time o per le TLC
Standard
•  ANSI e ISO
•  Nostro standard di riferimento: INCITS/ISO/IEC 9899-1999,
chiamato C99
•  Ultimo standard: C11
Portabile
•  Il C non dipende dall’hardware (standard internazionale)
•  ma alcune funzioni implementate possono dipendere dal sistema
operativo e/o dall’hardware
•  Con una progettazione adeguata è possibile realizzare
programmi portabili
PERCHÈ IL C
http://www.embedded.com/electronics-blogs/barr-code/4027479/Real-men-program-in-C
THE MARCH OF PROGRESS
1536 pages
911 pages
266 pages
274 pages
src: E. Roberts : The Dream of a Common Language: The Search for Simplicity and Stability in Computer Science Education
INTRODUZIONE
LORENZO BRACCIALE
[email protected]
CHE COS’E’
L’INFORMATICA?
“L'informatica non riguarda i computer più di quanto l'astronomia riguardi
i telescopi”
E. Dijkstra
•  Scienza che studia
•  Fondamenti teorici dell’informazione
•  Computazione
•  Implementazione su elaboratori elettronici
•  …campo molto vasto
•  Due anime:
•  Tecnologica: computer e sistemi
•  Metodologica: gestione e processamento dell’informazione
IL COMPUTER
•  Macchina programmabile per la rappresentazione, la
memorizzazione, l’elaborazione e la trasmissione delle
informazioni
•  Distinzione tra:
•  Hardware: parte fisica (elettronica, meccanica etc)
•  Software: parte logica (programmi)
•  Definizione cambiata nel tempo, attualmente macchina che:
•  Riceve degli input
•  Produce degli output
•  Processa l’informazione
•  Puo’ memorizzare dell’informazione
•  Ha dei meccanismo di controllo
•  Un cellulare, un modem wifi, un laptop
BREVE STORIA DEI
COMPUTER
•  1823: Charles Babbage inventò la
macchina differenziale;
•  In 1936 Alan Turing definì la Macchina
di Turing, una macchina ideale che
manipola i dati contenuti su un nastro
di lunghezza infinita, secondo un
insieme prefissato di regole ben
definite (strumento teorico)
•  Nella seconda guerra mondiale, venne
inventato Colossus, il primo computer
elettronico programmabile
•  1948: il “manchester baby”: primo
computer basato sull’architettura di
John Von Neumann (more later) che
memorizza programmi e dati nella
stessa memoria.
BREVE STORIA DEI
COMPUTER
•  1947 : Invenzione del transistor
•  1958 : Invenzione del circuito integrato
•  1965 : Primo personal computer –
Programma 101 (prodotto da Olivetti
inventato da P.G. Perotto)
•  1971 : Una giovane società chiamata
Intel produceva il primo
microprocessore
•  L’intel 4004 conteneva circa 2300
transistor su un singolo chip
•  oggi circa un miliardo per chip
•  1981 : Inizio diffusione personal
computer su larga scala
1982
PROGRAMMA
Programma: Sequenza di istruzioni che il computer
esegue e di decisioni che il computer prende per
svolgere una certa attività
Programmazione: L’attività di progettare o
realizzare un programma
ALGORITMO
•  Si dice algoritmo la descrizione di un metodo di soluzione
di un problema che
•  sia eseguibile
•  sia priva di ambiguità arrivi ad una conclusione in un
tempo finito
•  Un computer può risolvere soltanto quei problemi per i
quali sia noto un algoritmo
•  Dato un algorimo, si puo’ realizzarlo (implementarlo)
attraverso un programma
ESEMPIO DI
ALGORITMO
Problema: dato un numero, scoprire se è un multiplo di 11
Algorimo 1:
1.  Definiscono una variabile X che è il numero immesso
2.  Valuta una condizione:
Se X=11 allora restitutisci VERO
Se X < 11 restituisci FALSO
SE X > 11, sottrai 11 e torna al passo 2
Algorimo 2:
Somma le cifre pari del numero e comparale con la somma delle
cifre dispari
Se sono uguali, restituisci VERO, altrimento FALSO
Diversi algoritmi che risolvono lo stesso problema
Cosa cambia?
EFFICIENZA
•  Gli algoritmi sono parametrici
•  Dati degli input, ci restituiscono degli output
•  Risolvono instanze diverse dello stesso problema
• 
Esempio precedente: l’algoritmo accetta qualunque numero
intero
•  Alcuni algoritmi risolvono lo stesso problema in modo più
efficiente di altri
•  consumano meno risorse (memoria, capacità di calcolo)
•  E’ particolarmente importante valutare la scalabilità
dell’algoritmo con i dati di ingresso, misurata con la
complessità
•  Notazione “big o” (nasconde fattori costanti e potenze di
ordine minore)
•  Esempio: eliminazione di Gauss : O(n3)
•  Alcuni problemi hanno complessità O(2n)…
MODELLO DI VON
NEUMANN
Architettura di riferimento usata
nella maggior parte dei computer in
uso oggi
•  ma concepita 70 anni fa!
5 componenti fondamentali:
1.  CPU
2.  Unità di memoria (RAM)
3.  Unità di input (ad es. tastiera,
HardDisk, CDRom)
4.  Unità di output (ad ed. monitor,
HardDisk)
5.  Bus
EDVAC 1951 – computer per il
quale è stata progettata
inizialmente l’architettura
CPU
•  Central Processing Unit
•  Quando fatto su un solo chip di silicio (circuito
integrato): microprocessore
•  Obiettivo: eseguire una sequenza di istruzioni
memorizzate chiamata programma
•  Ciclo di Esecuzione
1.  Prelievo Istruzione dalla Memoria (fetch)
2.  Decodifica Istruzione (decode)
3.  Esecuzione Istruzione (execute)
4.  Scrittura risultato (writeback)
•  Ogni Processore e’ caratterizzato da un proprio
linguaggio macchina
PER COSTRUIRE UN
PROCESSORE…
•  Abbiamo bisogno almeno di:
•  Qualche registro: aree di memoria dove possiamo
immagazzinare alcuni dati
•  Una ALU (Arithmetic Logic Unit): esegue i calcoli, ha
dei registri al suo interno
•  Un unita’ di controllo: coordina i componenti,
•  “Il cervello nel cervello”
•  fornisce segnali di controllo e di sincronizzazione
•  Dirige il flusso dati da/verso la CPU
•  Qualche bus per muovere i dati da un componente
all’altro
REGISTRI
•  PC (Program Counter): registro contatore delle istruzioni,
contiene l’indirizzo della prossima istruzione da eseguire
•  IR (Instruction Register): registro delle istruzioni, contiene
l’istruzione che deve essere eseguita (codificata)
•  MAR (Memory Address Register): registro di indirizzamento
della memoria, contiene l’indirizzo della cella di memoria che
deve essere acceduta o memorizzata
•  MDR (Memory Data Register): registro dati di memoria, dato
che è stato prelevato dalla memoria o che deve essere
memorizzato
•  PSW (Processor Status Word): parola di stato del
processore; contiene informazioni, opportunamente
codificate, circa l’esito dell’ultima istruzione che è stata
eseguita
DISPOSITIVI DI INPUT
•  Tastiera
•  Mouse
•  Hard Disk
•  DVD-ROM
•  Microfono
•  etc
DISPOSITIVI DI
OUTPUT
•  Monitor
•  Stampante
•  Hard Disk
•  Casse acustiche
•  etc
BUS
• 
La struttura di interconnessione più
comune
• 
• 
percorsi di comunicazione tra due o
più dispositivi
•  mezzo di trasmissione condiviso
usualmente di tipo broadcast
Diversi tipi:
• 
• 
• 
Il bus dati (bidirezionale) consente di
leggere/scrivere informazioni sulla
memoria o sulle unità periferiche
Il bus indirizzi va dalla CPU alla
memoria o alle periferiche
consentendo di scegliere dove
scrivere o leggere i dati.
Il bus di controllo (bidirezionale)
serve per coordinare e controllare il
traffico di informazioni che viaggiano
sugli altri due bus.
MEMORIA
•  Memoria Primaria: Memoria Centrale
•  Contiene istruzioni/dati dei programmi in esecuzione
•  ...in formato binario Volatile
•  RAM – Random Access Memory
• 
• 
• 
E’ possibile accedere a diversi elementi non in ordine (random
access)
•  Un CD/Musicassetta/HardDisk ad esempio non lo
permette
Tempo di accesso costante
SRAM, DRAM,
etc.
•  Veloce (~10-100ns) e relativamente costosa
•  Dimensioni contenute (fino a qualche Gigabyte)
•  Memoria Secondaria: Dischi, CD, etc..
•  Memoria di lungo periodo - non volatile
•  Tempo di accesso maggiori (~ms e piu’), economica
VELOCITÀ DELLE
MEMORIE
•  Per velocizzare l’esecuzione dei programmi, tra
processore e RAM viene inserita una memoria
particolarmente veloce dove tenere i dati usati più spesso
(MEMORIA CACHE)
•  I livello: presente nel microprocessore
•  II livello: esterna
•  La presenza di più memorie con caratteristiche diverse
nasce da un compromesso tra costo ed efficienza
Dispositivo
Temp di accesso
RAM
~10 – 100 ns
Hard Disk
~10ms
Registri processore
~1ns
Memoria Cache
~10ns
LA MEMORIA
CENTRALE
• 
Composta di celle, o locazioni, a loro volta composte da un numero
fisso di bit
• 
Cella elementare di memoria può memorizzare solo due valori: 0 o 1,
cifra binaria (binary digit -> bit)
• 
• 
• 
• 
Tipicamente cella=1 byte (8 bit)
Ogni locazione e’ associata ad un indirizzo nell’intervallo [0,1,...,M-1]
•  M dimensione della memoria
•  La memoria e’ vista come un vettore di byte
La CPU (ma non solo) accede alle informazioni in scrittura/lettura
tramite indirizzo della cella
•  Indirizzi a m bit: spazio di indirizzamento 2m
•  Non
necessariamente M=2m
Operazioni: Lettura/Scrittura
• 
• 
Lettura: Prelevare il contenuto di una cella di memoria
Scrittura: Sostituire il contenuto di ina cella di memoria
LA MEMORIA
VIRTUALE
• 
Astrae le memorie presenti
• 
• 
Alcuni accessi sulla memoria fisica
Altri su hard disk
• 
• 
Processore e programmi si
riferiscono ad indirizzi virtuali
• 
Tradotti in indirizzi reali da MMU
(memory management unit)
• 
• 
• 
“swap”
componente hardware
se non trova l’indirizzo, solleva
un “page fault” ed il sistema
operativo cerca l’indirizzo
sull’hard disk
Memoria organizzata in “pagine”
• 
• 
molte pagine piccole: problemi
lookup
poche pagine grandi:
frammentazione (pagine
parzialmente vuote)