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)