Sommario FONDAMENTI DI INFORMATICA. Architettura di Von Neumann. Algoritmi e programmi ESERCITAZIONE PYTHON ARCHITETTURA DEI CALCOLATORI

Documenti analoghi
Architettura degli Elaboratori

Struttura di un elaboratore

ARCHITETTURA DI UN SISTEMA DI ELABORAZIONE

Capitolo 5 Elementi architetturali di base

Lezione 15. L elaboratore Elettronico

Il Ciclo Fetch-Decode-Execute. C Nyssen/Aberdeen College 2003

Il calcolatore. È un sistema complesso costituito da un numero elevato di componenti. è strutturato in forma gerarchica

ARCHITETTURA DI UN ELABORATORE! Ispirata al modello della Macchina di Von Neumann (Princeton, Institute for Advanced Study, anni 40).!

Il processore. Istituzionii di Informatica -- Rossano Gaeta

Architettura di un elaboratore. Il modello di von Neumann

Macchine Astratte. Luca Abeni. February 22, 2017

ARCHITETTURA DI UN ELABORATORE

Componenti di un processore

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche

Richiami sull architettura del processore MIPS a 32 bit

Elementi di informatica

Elaborazione dell informazione

2. Architettura di un calcolatore

Architettura dei calcolatori

Macchina di von Neumann/Turing

Architettura dei calcolatori

La macchina di Von Neumann

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

Architettura di un calcolatore e ciclo macchina. Appunti per la classe 3 Dinf

Richiami sull architettura del processore MIPS a 32 bit

Architettura dei Calcolatori elettronici

Sommario FONDAMENTI DI INFORMATICA. File e Python. Gestione di file. LINGUAGGIO Python Gestione dei file

L ARCHITETTURA DEI CALCOLATORI. Il processore La memoria centrale La memoria di massa Le periferiche di I/O

Architettura dei calcolatori. Architettura dei calcolatori. Cos'è un computer?

Architettura di una CPU

Corso di Alfabetizzazione Informatica 2001/2002. La CPU. F. Tortorella Università degli Studi. di Cassino

Calcolatori Elettronici Prof. Gian Luca Marcialis. Capitolo 4 Unità Centrale di Elaborazione Istruzioni Macchina

Architettura di un calcolatore

Elementi di informatica

Lezione 1: L hardware

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni

Architettura dei sistemi di elaborazione: La CPU: Architettura (parte1)

Corso di Fondamenti di Informatica Elementi di Architettura

Sistemi di Elaborazione delle Informazioni

Ingegneria Gestionale della logistica e produzione Prof. A. Palomba - Elementi di Informatica (J-Z) Componenti

Ciclo del Processore. Memoria

Programmazione A.A Architettura dei Calcolatori. ( Lezione V ) Componenti hardware e loro schema funzionale

ARCHITETTURA DI UN ELABORATORE

INFORMATICA GENERALE

Un esempio di ciclo macchina

Componenti principali

HSA HSA HARDWARE SYSTEM ARCHITECTURE. Livelli. Livello assemblativo. Livello di. Sistema Operativo. Livello di. linguaggio macchina.

Architettura di un processore basato su registri generali.

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Il Processore: l unità di controllo

Architettura del calcolatore

L unità di controllo di CPU a singolo ciclo

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni

Linguaggio Assembly e linguaggio macchina

Architettura hardware

Macchina di Riferimento: argomenti

Processore. Memoria I/O. Control (Parte di controllo) Datapath (Parte operativa)

Il linguaggio macchina

Componenti e connessioni. Capitolo 3

Architettura di un calcolatore: introduzione

Sistemi e reti CPU Concetti di base

Il CPU UNITA DI CALCOLI (ALU) UNITA DI CONTROLLO (CU) 1

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Fondamenti di Informatica.

Architettura di von Neumann

Architettura di von Neumann

Corso di Calcolatori Elettronici I A.A Il processore Lezione 18

Microelettronica Corso introduttivo di progettazione di sistemi embedded

ARCHITETTURA DI UN ELABORATORE

Linguaggio assembler e linguaggio macchina (caso di studio: processore MIPS)

Corso di Informatica

Organizzata secondo il modello della macchina di von Neumann definita nei tardi anni 40 all Institute for Advanced Study di Princeton.

Architettura di Von Neumann. Architettura di Von Neumann. Architettura di Von Neumann INFORMATICA PER LE DISCIPLINE UMANISTICHE 2 (13042)

Struttura del calcolatore

Il Modello di von Neumann (2) Prevede 3 entità logiche:

Architettura del Calcolatore. Danilo Ardagna Politecnico di Milano

Fondamenti Teorici. Antonio Pescapè e Marcello Esposito Parte Seconda v2.0

(a) INTRODUZIONE ALLE ARCHITETTURE E ALLA SIMULAZIONE VERILOG DI PROCESSORI

Architettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock. Prof. Andrea Sterbini

Linguaggio Assembly e linguaggio macchina

ARCHITETTURA DI UN CALCOLATORE ELETTRONICO

Il processore: unità di controllo

Sistemi di Elaborazione

Introduzione all'architettura dei Calcolatori

Architettura dei calcolatori e sistemi operativi. Il processore Capitolo 4 P&H

Corso di Laurea in Informatica

Architettura dei computer

Linguaggio Assembly e linguaggio macchina

Architettura dei Calcolatori. Macchina di von Neumann /2. Macchina di von Neumann /1. Architettura dei Calcolatori

HARDWARE 1.4a: (Processore)

Il processore: unità di elaborazione

ARCHITETTURA DI UN ELABORATORE

Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica. prof. ing. Corrado Santoro

Sistemi di numerazione

La CPU e la Memoria. Sistemi e Tecnologie Informatiche 1. Struttura del computer. Sistemi e Tecnologie Informatiche 2

Progettazione dell unità di elaborazioni dati e prestazioni. Il processore: unità di elaborazione. I passi per progettare un processore

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Informatica: Lez. 1. Andrea Payaro. (European Logistics Association)

ISA e linguaggio macchina

Università degli Studi di Cassino Corso di Fondamenti di Informatica Elementi di Architettura. Anno Accademico 2010/2011 Francesco Tortorella

Elementi di Architettura

Transcript:

Università degli Studi di Cagliari Corsi di Laurea in Ingegneria Chimica e Ingegneria Meccanica FONDAMENTI DI INFORMATICA http://www.diee.unica.it/~marcialis/fi A.A. 016/017 Sommario Funzionamento del calcolatore: ripasso Un calcolatore giocattolo Implementazione in Python Docente: Gian Luca Marcialis ESERCITAZIONE PYTHON ARCHITETTURA DEI CALCOLATORI Algoritmi e programmi Architettura di Von Neumann Ogni calcolatore mette a disposizione un certo numero (finito) di operazioni elementari su dati rappresentati in codifica binaria Qualsiasi algoritmo deve essere espresso come sequenza di operazioni elementari effettivamente eseguibili dal calcolatore (programma) es.: molti calcolatori non forniscono l operazione di estrazione della radice quadrata, ma solo le operazioni di somma e prodotto; l estrazione della radice quadrata deve essere espressa come sequenza di somme e prodotti 3 CPU Memoria centrale Bus di sistema Periferica 1 (I/O) Periferica (I/O)... Dispositivi di ingresso e uscita (I/O) 4

Schema di funzionamento della macchina di Von Neumann I programmi sono composti da istruzioni codificate in binario: istruzioni di elaborazione (ad es. operazioni numeriche) istruzioni di trasferimento di dati tra due componenti della macchina Il funzionamento della macchina di Von Neumann è un ciclo continuo: la CPU estrae le istruzioni e i dati dalla memoria principale......le decodifica (determina l operazione da eseguire e i gli operandi)......e le esegue Esecuzione di un programma: funzionamento elementare Si carica in memoria centrale il programma in codice binario il programma occupa una sequenza contigua di word di memoria Ogni istruzione è sottoposta, sequenzialmente, a un ciclo di esecuzione L ultima istruzione indica esplicitamente il termine delle operazioni ( halt ) 5 6 Registri della CPU coinvolti PC = Program Counter Contiene, all istante t, l indirizzo dell istruzione da eseguire all istante successivo IR = Instruction Register Contiene, all istante t, l istruzione in esecuzione ACC = Service Register o Accumulator Contiene dati parziali o finali trasferiti/da trasferire dalla/in memoria Possono essere più d uno Set di istruzioni Le istruzioni sono memorizzate in un area permanente (ROM), e sono indirizzate attraverso un «codice operativo», una stringa di bit che rappresenta quel che l istruzione deve fare Noi useremo codici operativi «simbolici» 7 8

Ciclo di esecuzione delle istruzioni Istruction Fetch (IF): Prelievo ( fetch ) delle istruzioni La CPU legge un istruzione dalla memoria M[PC] IR PC PC + 1 Istruction Decode (ID): Interpretazione delle istruzioni L istruzione viene decodificata per determinare quale azione è stata richiesta Il sistema separa l azione dagli operandi Operand Fetch (OD): Prelievo ( fetch ) dei dati L esecuzione dell istruzione potrebbe richiedere dei dati dalla memoria o da un dispositivo di I/O Execute (EX): Elaborazione dei dati Può essere richiesta l esecuzione di operazioni aritmetiche o logiche sui dati. I valori degli operandi sono trasferiti in registri locali della ALU Operand Store (OS): Scrittura dei dati Si può richiedere di trasferire i dati elaborati in memoria o ad un modulo di I/O. Registri locali ALU MBR Memoria Passaggio all istruzione successiva Un semplice esempio in linguaggio macchina Disponiamo di un modulo di memoria a 8 indirizzi Supponiamo che la nostra architettura disponga delle seguenti istruzioni Load XCarica in un registro di servizio (ACC) il valore all indirizzo X Add YSomma al contenuto di ACC il valore all indirizzo Y Store XMemorizza il contenuto di ACC nell indirizzo X Haltil ciclo di esecuzione termina 9 10 Un semplice esempio in linguaggio macchina Scriviamo un algoritmo per la somma di due numeri A e B che sono memorizzati rispettivamente in 4 e 5, e vogliamo che la somma sia memorizzata in 6 Una possibile soluzione è: Load 4 (carico in ACC il valore di A) Add 5 (gli sommo il valore di B) Store 6 (memorizzo il risultato in 110) Halt (l algoritmo termina) Il programma viene caricato nella memoria centrale a partire dalla prima locazione disponibile Parte quindi il ciclo di esecuzione delle istruzioni 11 Ciclo di esecuzione delle istruzioni: prelievo della prima istruzione Load 4 Add 5 Store 6 Halt 50 50 0 1 3 4 5 6 7 Modulo di memoria CPU PC 000 1 ACC IR Load 4 ALU 1

Ciclo di esecuzione delle istruzioni: intepretazione della prima istruzione Ciclo di esecuzione delle istruzioni: prelievo dell operando, elaborazione e risultato Registro Istruzione IR Load 4 0 1 Load 4 Add 5 Store 6 PC 001 3 Halt ACC Codice operativo (opcode): viene identificata una sequenza di segnali appropriata per attivare il trasferimento dati da memoria a registro E l indirizzo dell operando, verrà prelevato nella fase successiva 13 4 5 110 111 50 50 Modulo di memoria CPU 50 IR Load 100 ALU 14 Un simulatore in Python Implementare in Python un simulatore di calcolatore elettronico composto da PC, IR e ACC Una memoria a 64 parole Funzionalità: Legge un algoritmo nella forma di set di istruzioni da file Legge i dati, separati dalla parola-chiave «dati» Memorizza le istruzioni dall indirizzo 0 all indirizzo 31 Memorizza i dati dall indirizzo 3 al 63 Dopo di che avvia l esecuzione secondo la procedura vista nell esempio 15 Istruzioni del calcolatore Per iniziare, doteremo il calcolatore delle istruzioni-base: LOAD X STORE X ADD X HALT Volendo incrementare la sua capacità di calcolo, ne aggiungeremo altre all occorrenza, sempre sfruttando i registri a disposizione: Aggiungendo istruzioni di condizione e salto per implementare if-else e while 16

Esempio di file: «PCsum.txt» LOAD 3 ADD 33 STORE 34 HALT dati -5 Memoria 0 Load 3 1 Add 33 Store 34 3 Halt 3-5 33 34 17 Vista modulare Decodifica istruzione Esegui istruzione IR opcode, op opcode, op, M, PC, ACC (contesto) Avvia Nome del file Trasferisci programma in memoria Esegui ciascuna istruzione fino all istruzione «Halt» M File id, M File id Leggi istruzioni Leggi dati Salva risultato come stato della memoria 18 Progetto del calcolatore Ci serve prima di tutto una funzione di avvio, che ci permetta di «lanciare» il programma letto da file: Trasferimento dei dati def avvia(nomefile): PC=0 #contatore di programma ACC=0 #accumulatore o registro di servizio IR=0 #registro istruzione M=trasferisci(nomefile) #M è la memoria if M: #se la memoria non è 'vuota'... IR=M[PC] #preleva istruzione e depositala nel IR while IR!="HALT": PC=PC+1 opcode, op=decodifica(ir) M,PC,ACC=esegui(opcode,op,M,PC,ACC) #esecuzione IR=M[PC] #prelievo dell'istruzione successiva salvamemoria(m) 19 def trasferisci(nomefile): idf=open(nomefile,"r") M=leggi_istruzioni(idf) if M: #se la lettura è OK M=leggi_dati(idf,M) idf.close() return M Leggi istruzioni Leggi dati 0

Lettura delle istruzioni def leggi_istruzioni(idf): M=["Empty"] * 64 #memoria di 64 parole linea=idf.readline() if linea=="": return False i=0 linea=linea[0:len(linea)-1] while linea!="dati": M[i]=linea i=i+1 linea=idf.readline() linea=linea[0:len(linea)-1] return M 1 Lettura dei dati def leggi_dati(idf,m): i=3 #memorizzati dall'indirizzo 3 linea=idf.readline() while linea!="": M[i]=int(linea) #interi i=i+1 linea=idf.readline() return M Progetto del calcolatore Ci serve prima di tutto una funzione di avvio, che ci permetta di «lanciare» il programma letto da file: def avvia(nomefile): PC=0 #contatore di programma ACC=0 #accumulatore o registro di servizio IR=0 #registro istruzione M=trasferisci(nomefile) #M è la memoria if M: #se la memoria non è 'vuota'... IR=M[PC] #preleva istruzione e depositala nel IR while IR!="HALT": PC=PC+1 opcode, op=decodifica(ir) M,PC,ACC=esegui(opcode,op,M,PC,ACC) #esecuzione IR=M[PC] #prelievo dell'istruzione successiva salvamemoria(m) Decodifica dell istruzione def decodifica(istruzione): istruzione=istruzione.split() opcode=istruzione[0] #codice operativo if len(istruzione)>1: op=int(istruzione[1]) #operando else: op="" return opcode,op 3 4

Esecuzione dell istruzione implementazione della memoria «ROM» def esegui(opcode,op,m,pc,acc): if opcode=="load": ACC=M[op] elif opcode=="store": M[op]=ACC elif opcode=="add": ACC=ACC+M[op] #restituisce il nuovo "stato" return M,PC,ACC 5 Progetto del calcolatore Ci serve prima di tutto una funzione di avvio, che ci permetta di «lanciare» il programma letto da file: def avvia(nomefile): PC=0 #contatore di programma ACC=0 #accumulatore o registro di servizio IR=0 #registro istruzione M=trasferisci(nomefile) #M è la memoria if M: #se la memoria non è 'vuota'... IR=M[PC] #preleva istruzione e depositala nel IR while IR!="HALT": PC=PC+1 opcode, op=decodifica(ir) M,PC,ACC=esegui(opcode,op,M,PC,ACC) #esecuzione IR=M[PC] #prelievo dell'istruzione successiva salvamemoria(m) 6 Salvataggio dello stato del calcolatore def salvamemoria(m): address=0 idf=open("pcoutput.txt","w") for parola in M: idf.write("%d %s\n" % (address, str(parola))) address=address+1 Avvio! Avviamo il programma dall editor (RUN) Invochiamolo usando la funzione avvia() >>> avvia("pcsum.txt") idf.close() 7 8

Aggiunta di potere espressivo al nostro calcolatore Volendo fare esercizi più complessi, tipo implementazione del «massimo», possiamo dotare la memoria ROM (funzione esegui()) di più istruzioni Esercizio. Aggiungere le seguenti nella funzione esegui(): SUB X sottrae all ACC il valore M[X] INF pone il valore di ACC a 1 se ACC<0 BEQ X salta all istruzione di indirizzo X se ACC==0 JUMP X salta all istruzione di indirizzo X Nota bene: «saltare» significa alterare forzatamente il contenuto del PC, ovvero assegnarlo al valore X anziché al suo valore naturale (prossima istruzione da eseguire). Per esempio, implementare JUMP X significa imporre semplicemente: PC = X 9 L algoritmo del massimo in linguaggio macchina Adesso siamo pronti a implementare il famoso algoritmo del massimo: d=x-y if d<0 else: max=y max=x 0 LOAD 3 1 SUB 33 INF 3 BEQ 7 4 LOAD 33 5 STORE 34 6 JUMP 9 7 LOAD 3 8 STORE 34 9 HALT 30 Esempio di file per il massimo LOAD 3 SUB 33 INF BEQ 7 LOAD 33 STORE 34 JUMP 9 LOAD 3 STORE 34 HALT dati 5 31