FONDAMENTI DI
INFORMATICA
LORENZO BRACCIALE
[email protected]
IL PROGRAMMA
•  Sistemi operativi
•  Introduzione all’utilizzo di Linux
•  Concetti teorici base informatica
•  Programmazione C
• 
• 
• 
• 
Le basi del linguaggio
Strutture dati
Algoritmi (base)
Varie
MATERIALE
Libro di testo: Deitel & Deitel: “Il linguaggio C”
slides: http://tinyurl.com/fondinf2015
LEZIONE TIPICA
¾ h Teoria
¾ h Pratica (portare sempre il computer)
Ricevimento: giovedì dopo lezione
MAILING LIST
[email protected]
Iscrizione tramite: http://lists.uniroma2.it
rfc1855
INSTALLARE LINUX
•  Scaricare linux
•  Distribuzione consigliata: xubuntu > 14.04.3
•  Installarlo
•  Partizione nativa
• 
Un bootloader vi farà scegliere all’avvio quale sistema
operativo usare
•  Macchina virtuale
• 
• 
VirtualBox (free software, multipiattaforma,
www.virtualbox.org)
VMWare (commerciale, Windows/OSX)
•  Live CD/DVD
• 
• 
Basta inserire il cd/dvd e riavviare il computer
Attenzione! ogni riavvio tutti i dati saranno persi (se non
salvati ad es. su una chiavetta esterna)
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
Popolare
(src: http://www.langpop.com/)
•  Il C è vicino al linguaggio macchina per capire come “ragiona”
•  …ma abbastanza astratto da permettere programmi anche molto complessi
•  Usato molto per progetti hardware e device con risorse limitate (embedded)
http://iel.ucdavis.edu/publication/WhyC.html
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
“NON VOGLIO FARE IL
PROGRAMMATORE!”
LA RIVOLUZIONE
INDUSTIALE
Popolazione del
mondo (miliardi)
LA RIVOLUZIONE
INDUSTRIALE
LA RIVOLUZIONE
DIGITALE
Charlie chaplin: tempi moderni
Amazon warehouse: kiva system robot
LA RIVOLUZIONE
DIGITALE: LAVORI
“there’s never been a worse time to be a worker with only ‘ordinary’ skills
and abilities to offer, because computers, robots, and other digital
technologies are acquiring these skills and abilities at an extraordinary
rate.”
The Second Machine Age: Work, Progress, and Prosperity in a Time of Brilliant Technologies."
SETTORI
RIVOLUZIONATI: KODAK
VS INSTAGRAM
140 000 impiegati
13 impiegati nel 2012
Bancarotta nel Febbraio
2012
Comprata da facebook a 1
mld di dollari
SETTORI SPARITI:
IL LAVORO
The probability of
computerization for the
U.S. Bureau of Labor
Statistics 2010
occupational categories,
along with the share in
low, medium and high
probability categories.
The probability axis can
also be seen as a rough
timeline, where highprobability occupations
are likely to be
substituted by computer
capital relatively soon.
Note that the total area
under all curves is equal
to total U.S.
employment.
Credit: Carl Benedikt Frey and
Michael A. Osborne
LA LEGGE DI MOORE
“The complexity for
minimum component
costs has increased at
a rate of roughly a
factor of two per year.
Certainly over the short
term this rate can be
expected to continue, if
not to increase. Over
the longer term, the
rate of increase is a bit
more uncertain,
although there is no
reason to believe it will
remain nearly constant
for at least 10 years.”
(G. Moore 1965)
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
•  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
1983
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 (senza usare
divisioni e moltiplicazioni)
Algorimo 1:
1. 
2. 
Definiscono una variabile X che è il numero immesso
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 confrontale con la somma delle cifre
dispari
1782 à 1+8 = 7+2
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)…
ALTRI ALGORITMI…
(IBM) Deep Blue vs Kasparov: 1996
ALTRI ALGORITMI…
Capcha
ALTRI ALGORITMI…
IBM Watson : 2011 Jeopardy!
Sistema per rispondere a domande formulate in linguaggio naturale
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 (hw e sw)
• 
• 
percorsi di comunicazione tra due o
più dispositivi
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
• 
• 
• 
Volatile
RAM – Random Access Memory
• 
• 
• 
• 
...in formato binario
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)