Informatica Generale Marzia Buscemi buscemi@di.unipi.it Ricevimento: Giovedì ore 16.00-18.00, Dipartimento di Informatica, stanza 306-PS o per posta elettronica Pagina web del corso: http://www.di.unipi.it/~buscemi/IG07.htm (sommario delle lezioni in fondo alla pagina) dddd
Circuiti logici permettono l’elaborazione dei dati in un calcolatore (esecuzione di operazioni, etc.) realizzano elettronicamente il comportamento delle funzioni dell’algebra booleana sono di due tipi: circuiti combinatori (output solo in funzione dell’input, non hanno memoria del passato) circuiti sequenziali (output in funzione dell’input e dello stato precedente, hanno memoria del passato)
Circuiti combinatori X Y n m n m Circuiti combinatori: a partire da un input producono un certo output. Più precisamente: Input: X = x1,...,xn variabili N=2n sequenze I={I1,...,IN} Output: Y= y1,...,ym variabili M=2m sequenze O={O1,...,OM} Un circuito combinatorio realizza una funzione h : I O Es.: 0100...0 1010...1 m n X Y n m
Circuiti sequenziali f: I x S S f(Ih,Sk)=Shk nuovo stato L’output è determinato non solo dall’input ma anche dallo stato del circuito (che dipende dagli input che si sono verificati negli istanti precedenti): Input: X=x1,...,xn variabili N=2n sequenze I={I1,...,IN} Output: Y=y1,...,ym variabili M=2m sequenze O={O1,...,OM} Stato: Z=z1,...,zl variabili L=2l sequenze S={S1,...,SL} Un circuito sequenziale realizza le funzioni: f: I x S S f(Ih,Sk)=Shk nuovo stato g : I x S O g(Ii,Sj)=Oij output
Circuiti sequenziali 2 S1 Diagramma di stato 2. Tavola di flusso S2 I1/O1 I1 I2 I3 S1 S1/O1 S2/O1 S2 S1/O2 S2/O2 S3/O2 S3 S2/O3 S1 I2/O1 I1/O2 S2 I2/ O2 I3/O3 I3/O2 S3 stati instabili sull’input I3
Circuiti sequenziali Y X asincroni: le transizioni tra gli stati avvengono istantaneamente, cioè quando le condizioni sono verificate (il circuito può essere instabile) sincroni: le transizioni avvengono solo in certi istanti (istanti di marcatura), segnalati da un segnale d’input p (segnale di marcatura) circ. seq. sincrono stato S n m Y X l p
Circuiti sequenziali sincroni Registro: circuito sequenziale sincrono basilare valore dello stato è il valore d’input all’ultimo istante di marcatura valore dell’output uguale allo stato tutti i circuiti sequenziali sincroni si possono scrivere usando registri X Y p
Circuiti sequenziali sincroni 2 Ogni circuito sequenziale sincrono si può rappresentare così: CC1 (funzione di tranzione degli stati f) S n CC2 (funzione degli output g) m l l Y X R p
La Programmazione
La programmazione: gli argomenti che tratteremo Cos’è un programma Com’è organizzata la memoria nel calcolatore (memoria centrale e memoria di massa) Linguaggi di programmazione Linguaggio macchina e assembler Linguaggi ad alto livello: strutture di controllo (sequenza, selezione, ciclo, ...) tipologie di programmazione (imperativa, a oggetti) linguaggi per ipertesti Strutture dati (array, record) Algoritmi (pseudocodice o diagramma di flusso) Traduzione di linguaggi
Elaborazione dei dati (esecuzione) Algoritmi e programmi Elaborazione dei dati (esecuzione) Dati di input Dati di output Trasformazione dei dati di input e esecuzione passi specificati da un opportuno algoritmo Codificati opportunamente Umano (conosce l’algoritmo e scrive il programma) Calcolatore (esegue il programma) programma
Algoritmi e programmi 2 Algoritmo (def) : Programma (def) una sequenza di azioni non ambigue che trasformi i dati iniziali nel risultato finale utilizzando un insieme di azioni elementari che possono essere eseguite da un opportuno esecutore. Programma (def) specifica di un algoritmo utilizzando un linguaggio di programmazione non ambiguo e direttamente comprensibile dal computer
Tipi di memoria indirizzo 01 10 0000011 00000110 contenuto Memoria centrale (RAM): formata da celle (o locazioni), cioè elementi di un bit aggregati in gruppi di otto (memorizzano un byte di memoria). Registri: particolari celle di memoria, che contengono i dati che vengono elaborati N.B. La RAM è volatile indirizzo 01 10 0000011 00000110 contenuto
Tipi di memoria 2 Memoria di massa (dischi): i dati sono memorizzati in modo permanente I byte in memoria di massa non sono singolarmente indirizzabili e sono aggregati in sequenza dette files. 00101011 10010000 01110001 bytes
Linguaggi di programmazione 1 Le istruzioni di un programma vengono codificate (come i numeri, i caratteri, etc.) Linguaggio macchina: l’insieme dei valori binari che codificano tutte le possibili istruzioni di un processore specifico per ogni calcolatore non è portabile (se cambia l’indirizzo di una locazione bisogna cambiare il programma) difficile per l’umano (gestire lunghe sequenze di bit)
Linguaggi di programmazione 2 Linguaggio assembler versione simbolica del linguaggio macchina (operazioni, dati indicati con nomi mnemonici). Specifico per ogni calcolatore I programmi vengono scritti come file di testo e “tradotti” in linguaggio macchina da assemblatori 1. LOAD Y, R1; 2. ADD 2, R1; 3. STORE R1, X; 00010100 11001011 00010110 00000010 00010111 11001111 traduzione (assemblatore ) indirizzo di y indirizzo di x
Linguaggi di programmazione 3 Linguaggi di alto livello permettono di scrivere programmi senza usare linguaggio macchina o assembler sono più vicini all’uomo che alla macchina sono portabili (i programmi vengono tradotti in linguaggio macchina) sono di vari tipi: imperativi (C, Pascal), funzionali (Lisp, Haskell), orientati a oggetti (Java), etc. 1. LOAD Y, R1; 2. ADD 2, R1; 3. STORE R1, X; 00010100 11001011 00010110 00000010 00010111 11001111 x=y+2 linguaggio di alto livello linguaggio assembler linguaggio macchina
Variabili e costanti variabili:celle di memoria caratterizzate da identificatore e valore (assunto mediante assegnamenti) tipi di dato: indicano la gamma di valori che possono assumere (determinano lo spazio in memoria, prevengono errori di programmazione) booleano (0,1), intero (numero massimo di bit per evitare overflow dal calcolatore) reale (per rappresentare virgola mobile) carattere (in C 1 byte: codice ASCII o numero) costanti: valori fissi di ciascun programma