Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Introduzione all'architettura di computo di von Neumann: principi e componenti, Schemi e mappe concettuali di Elementi di Informatica

Una panoramica introduttiva sull'architettura di computo di von Neumann, che ha reso possibile la nascita dei primi calcolatori a programma memorizzato negli anni '40. Il testo copre il principio di unità di rappresentazione di dati e istruzioni, la gestione della fase fetch, la struttura della CPU, l'ISA CISC e RISC, la memoria cache e la memoria di massa. Inoltre, vengono presentati diversi tipi di computer e sistemi operativi.

Tipologia: Schemi e mappe concettuali

2020/2021

Caricato il 16/12/2021

Silviaaa01
Silviaaa01 🇮🇹

4.7

(6)

33 documenti

1 / 38

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
CORSO DI INFORMATICA ANNO SCOLASTICO 2020-2021 SECONDO SEMESTRE, 6 CFU
INTRODUZIONE
Il termine informatica
- È la fusione delle parole informazione e automatica
- indica l’insieme delle discipline che studiano gli strumenti per l’elaborazione automatica dell’informazione e i metodi per
un loro uso corretto ed efficace.
- è la scienza della rappresentazione e dell’elaborazione dell’informazione e ha la capacità di gestire ed elaborare grandi
quantità di dati in poco tempo.
- è la scienza degli algoritmi che descrivono e trasformano l’informazione: la loro teoria, analisi, progetto, efficienza,
realizzazione e applicazione (secondo l’ACM (Association for Computing Machinery))
- Studia le proprietà formali e matematiche degli algoritmi ed è importante perché consente di verificarne la correttezza e
l’esecuzione.
- studia la progettazione e la costruzione di linguaggi di programmazione che consentono di esprimere gli algoritmi e la
progettazione e costruzione di traduttori che trasformano i programmi in operazioni eseguibili sul calcolatore.
L’algoritmo è un procedimento per la risoluzione di un problema. Si dividono in algoritmi facili (bassa complessità), algoritmi
difficili o algoritmi di alta complessità di esecuzione. La Complessità è il tempo di esecuzione dell’algoritmo in funzione delle
dimensioni dell’input. Inoltre si dividono in algoritmi trattabili, algoritmi sicuramente poco trattabili e algoritmi intrattabili. I
problemi trattabili e intrattabili si dicono decidibili perché se prescindiamo dal tempo richiesto dalla loro soluzione, la soluzione
si trova sempre.
Gli strumenti che che eseguono gli algoritmi vengono invece chiamati calcolatori.
Una volta pronti gli algoritmi si passa alla programmazione cioè alla fase che consiste nel portare gli algoritmi dal livello
concettuale al livello pratico.
ALAN TURING:
Alan turing introdusse il concetto di procedura meccanica, dimostra nel 1936 che non
esiste un algoritmo in grado di decide se, dato un algoritmo A e un input (un dato x in
ingresso all’algoritmo), l’algoritmo A con x in ingresso termina dopo un numero finito
di passi oppure continua l’esecuzione indefinitamente. La macchina di Turing è un
dispositivo che, avendo a disposizione un nastro a quadretti arbitrariamente lungo,
sulla base del suo stato attuale e del simbolo racchiuso in uno dei quadretti del nastro
attualmente letto dalla macchina, decide di sostituire tale simbolo con un altro
simbolo, di spostare la sua attenzione su uno dei quadretti adiacenti e di cambiare il
suo stato. con questo modello di calcolo dedusse che ogni procedimento di calcolo è
riducibile a una sequenza di operazioni elementari di elaborazione di simboli
(lettura/scrittura).
INFORMATICA E FISICI:
L’analisi di un problema fisico si basa sulla formulazione di un modello
matematico, nella maggior parte delle volte il problema non e’ risolvibile
esplicitamente con semplici funzioni matematiche e quindi viene risolto con un
algoritmo che viene implementato su calcolatore mediante un adeguato linguaggio
di programmazione.
La storia dell’informatica:
Le prime testimonianze di strumenti per contare risalgono a 30.000 anni fa. I primi esempi di procedure di calcolo
automatico sono stati ritrovati in Mesopotamia su tavolette babilonesi risalenti al 1800-1600 a.C.
Il sogno di costruire macchine capaci di effettuare calcoli automatici risale al pensiero filosofico del ’600: Pascal e
Leibniz non solo affrontarono il problema, già studiato da Cartesio, di automatizzare il ragionamento logicomatematico,
ma si cimentarono nella realizzazione di semplici macchine per calcolare
La macchina differenziale, concepita da Babbage nel 1833, è il primo esempio di macchina programmabile di utilità
generale (per tabulare funzioni polinomiali).
Ada Augusta Byron, scrive il primo programma, per la macchina di Babbage.
lo stesso Babbage progetta la macchina analitica
Herman Hollerith (1890) sviluppa la macchina a schede perforate, per compiere le statistiche del censimento decennale
degli Stati Uniti. I dati venivano immessi su schede di cartone opportunamente perforate. Le schede venivano
successivamente contate da una sorta di pantografo che permetteva diversi tipi di elaborazioni. Si impiegarono due anni e
mezzo ad analizzare i dati, nonostante l’incremento di popolazione da 50 a 63 milioni.
la macchina a schede perforate venne poi usata per i censimenti in Austria, Norvegia e Russia. Hollerith decise di fondare
una società: la Computing Tabulating Recording Company che, nel 1923, divenne l’International Business Machine
(IBM).
1932: Konrad Zuse realizza una macchina elettromeccanica in grado di eseguire calcoli con controllo programmato, ed
introduce il sistema di numerazione binario.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26

Anteprima parziale del testo

Scarica Introduzione all'architettura di computo di von Neumann: principi e componenti e più Schemi e mappe concettuali in PDF di Elementi di Informatica solo su Docsity!

CORSO DI INFORMATICA ANNO SCOLASTICO 2020-2021 SECONDO SEMESTRE, 6 CFU

INTRODUZIONE

Il termine informatica

  • È la fusione delle parole informazione e automatica
  • indica l’insieme delle discipline che studiano gli strumenti per l’elaborazione automatica dell’informazione e i metodi per un loro uso corretto ed efficace.
  • è la scienza della rappresentazione e dell’elaborazione dell’informazione e ha la capacità di gestire ed elaborare grandi quantità di dati in poco tempo.
  • è la scienza degli algoritmi che descrivono e trasformano l’informazione: la loro teoria, analisi, progetto, efficienza, realizzazione e applicazione (secondo l’ACM (Association for Computing Machinery))
  • Studia le proprietà formali e matematiche degli algoritmi ed è importante perché consente di verificarne la correttezza e l’esecuzione.
  • studia la progettazione e la costruzione di linguaggi di programmazione che consentono di esprimere gli algoritmi e la progettazione e costruzione di traduttori che trasformano i programmi in operazioni eseguibili sul calcolatore. L’ algoritmo è un procedimento per la risoluzione di un problema. Si dividono in algoritmi facili (bassa complessità), algoritmi difficili o algoritmi di alta complessità di esecuzione. La Complessità è il tempo di esecuzione dell’algoritmo in funzione delle dimensioni dell’input. Inoltre si dividono in algoritmi trattabili, algoritmi sicuramente poco trattabili e algoritmi intrattabili. I problemi trattabili e intrattabili si dicono decidibili perché se prescindiamo dal tempo richiesto dalla loro soluzione, la soluzione si trova sempre. Gli strumenti che che eseguono gli algoritmi vengono invece chiamati calcolatori. Una volta pronti gli algoritmi si passa alla programmazione cioè alla fase che consiste nel portare gli algoritmi dal livello concettuale al livello pratico. ALAN TURING: Alan turing introdusse il concetto di procedura meccanica, dimostra nel 1936 che non esiste un algoritmo in grado di decide se, dato un algoritmo A e un input (un dato x in ingresso all’algoritmo), l’algoritmo A con x in ingresso termina dopo un numero finito di passi oppure continua l’esecuzione indefinitamente. La macchina di Turing è un dispositivo che, avendo a disposizione un nastro a quadretti arbitrariamente lungo, sulla base del suo stato attuale e del simbolo racchiuso in uno dei quadretti del nastro attualmente letto dalla macchina, decide di sostituire tale simbolo con un altro simbolo, di spostare la sua attenzione su uno dei quadretti adiacenti e di cambiare il suo stato. con questo modello di calcolo dedusse che ogni procedimento di calcolo è riducibile a una sequenza di operazioni elementari di elaborazione di simboli (lettura/scrittura). INFORMATICA E FISICI: L’analisi di un problema fisico si basa sulla formulazione di un modello matematico, nella maggior parte delle volte il problema non e’ risolvibile esplicitamente con semplici funzioni matematiche e quindi viene risolto con un algoritmo che viene implementato su calcolatore mediante un adeguato linguaggio di programmazione. La storia dell’informatica:
  • Le prime testimonianze di strumenti per contare risalgono a 30.000 anni fa. I primi esempi di procedure di calcolo automatico sono stati ritrovati in Mesopotamia su tavolette babilonesi risalenti al 1800-1600 a.C.
  • Il sogno di costruire macchine capaci di effettuare calcoli automatici risale al pensiero filosofico del ’600: Pascal e Leibniz non solo affrontarono il problema, già studiato da Cartesio, di automatizzare il ragionamento logicomatematico, ma si cimentarono nella realizzazione di semplici macchine per calcolare
  • La macchina differenziale, concepita da Babbage nel 1833, è il primo esempio di macchina programmabile di utilità generale (per tabulare funzioni polinomiali).
  • Ada Augusta Byron, scrive il primo programma, per la macchina di Babbage.
  • lo stesso Babbage progetta la macchina analitica
  • Herman Hollerith (1890) sviluppa la macchina a schede perforate, per compiere le statistiche del censimento decennale degli Stati Uniti. I dati venivano immessi su schede di cartone opportunamente perforate. Le schede venivano successivamente contate da una sorta di pantografo che permetteva diversi tipi di elaborazioni. Si impiegarono due anni e mezzo ad analizzare i dati, nonostante l’incremento di popolazione da 50 a 63 milioni.
  • la macchina a schede perforate venne poi usata per i censimenti in Austria, Norvegia e Russia. Hollerith decise di fondare una società: la Computing Tabulating Recording Company che, nel 1923, divenne l’International Business Machine (IBM).
  • 1932: Konrad Zuse realizza una macchina elettromeccanica in grado di eseguire calcoli con controllo programmato, ed introduce il sistema di numerazione binario.
  • durante la seconda guerra mondiale, fioriscono i progetti di elaboratori da utilizzarsi per scopi bellici, in particolare per la codifica delle comunicazioni militari: Red e Purple, di costruzione giapponese.; Enigma, varie versioni, realizzata dai tedeschi; Colossus, costruito dagli inglesi per la decifrazione dei messaggi tedeschi, alla cui progettazione e realizzazione collaborò Alan Turing, Primo computer realizzato con le valvole termoioniche.
  • Con l’invenzione del tubo a vuoto (1904), del transistor (1947) e, infine, dei circuiti integrati (1969), l’evoluzione dei computer divenne inarrestabile.
  • Dagli anni ’60 fino a qualche anno fa, la potenza di calcolo raddoppiava ogni 2-3 anni, l’efficienza energetica (o qualcosa del genere) ogni 18 mesi.
  • La costruzione dei primi calcolatori risale all’inizio degli anni ’40, grazie alla tecnologia elettronica; i primi esemplari venivano programmati mediante connessioni elettriche e commutatori (ENIAC: Electronic Numerical Integrator And Computer, IBM Automatic Sequence Controlled Calculator→Mark I).
  • Il nome di von Neumann è legato ai primi calcolatori a programma memorizzato, realizzati alla fine degli anni ’ (EDSAC, Whirlwind, IAS, UNIVAC).
  • Comincia a valere il principio di unitarietà di rappresentazione di dati e istruzioni, che vengono memorizzati, all’interno dell’elaboratore, in maniera indistinguibile.
  • La diffusione dei calcolatori a livello mondiale è avvenuta negli anni ’60 e ’70. L’informatica diventa fenomeno di massa nel 1981, anno in cui l’IBM introdusse un tipo particolare di elaboratore: il Personal Computer (PC). La particolarità dei PC consisteva nell’essere assemblati con componenti facilmente reperibili sul mercato, e quindi a basso costo.
  • Attualmente, il componente fondamentale del PC, il microprocessore, è utilizzato in tutti i settori applicativi. COMPUTER QUANTISTICO I modelli tradizionali come la macchina di Turing si basano su rappresentazioni "classiche" della memoria computazionale. Il computer quantistico può utilizzare una memoria che può trovarsi in una sovrapposizione di stati come ammesso dalla meccanica quantistica. Nel 1980 venne proposto il primo modello quantistico della macchina di Turing. Richard Feynman espresse l'idea che il computer quantistico avesse il potenziale di simulare cose che un computer classico non riesce a fare. Nel 1994, Peter Shor pubblicò un algoritmo quantistico che fattorizza gli interi in tempo polinomiale, esso dimostra che uno dei protocolli crittografici più usati al mondo è vulnerabile rispetto a un computer quantistico. CRITTOGRAFIA È un sistema matematico di trasformazione dell’informazione, informazione accessibile solo a chi è autorizzato ad accedervi. La crittografia si divide in:
  • Schemi a chiave segreta: implementazione complessa, sicuri
  • Schemi a chiave pubblica (RSA): gli interlocutori non si accordano su una chiave, sono semplici ma non sono completamente corretti. Si basa sulla fattorizzazione di numeri primi di un numero N di cifre. Descritto solo con N e d. Esempio RSA:
  1. P=5 q=
  2. N= p * q = 55. pq(N) = (p-1)*(q-1) = 40
  3. Prendo “e” t.c. “e” < pq(N) e comprimo (nessun divisore comune eccetto 1) con 40, e=
  4. Prendo d tale che d*e = 1 mod(pq(N)), d=
  5. Chiave pubblica (N,e)
  6. Chiave segreta (N,d) Nel 1946 Claude Shannon disse che un sistema crittografico a chiave segreta è totalmente sicuro se la chiave è: composta da numeri casuali, usata una sola volta, lunga quanto il messaggio (sistema di Vernam o cifrario perfetto).
  • Sitemi a chiave privata: i computer generano numeri pseudo – casuali. Qualsiasi canale privato tradizionale per quanto sicuro e protetto può essere intercettato.. In fisica classica si possono misurare le proprietà di un sistema senza perturbarlo
  • Sistemi a chiave pubblica: Un quantum computer sarebbe in grado di fattorizzare un numero in un tempo polinomiale (numero a 129 cifre, 2000 quantum bits, 8 secondi!) => Sicurezza non intrinseca. L’applicazione delle leggi della meccanica quantistica risolvono i problemi legati alla distribuzione di chiavi.
  • All’interno della CPU il contenuto del BUS dati viene copiato nel registro IR. Il program counter (PC) è un registro che contiene l’indirizzo dell’istruzione corretta. L’istruction register (IR) contiene l’istruzione corrente. Il registro program status word (PSW) contiene l’esito delle operazioni logico aritmetiche svolte dall’ALU. I passi dell’esecuzione di ciascuna istruzione nella CPU sono:
  1. Carica l’istruzione da memoria in IR, fase di fetch vista in precedenza.
  2. Incrementa PC, il registro punta all’istruzione successiva.
  3. Decodifica l’istruzione (Decode)
  4. Se l’istruzione usa un dato in memoria ne calcola l’indirizzo
  5. Carica l’operando in un registro
  6. Esegue l’istruzione (Execute)
  7. Torna al passo 1. per l’esecuzione dell’istruzione successiva Possiede un’architettura load/store semplice, le operazioni vengono eseguite su dati precedentemente caricati nei registri. Questo tipo di architetture richiedono i seguenti gruppi di istruzioni:
  • Aritmetico-logiche: utilizzarono gli operandi presenti nei registri per calcolare un risultato da salvare in un registro.
  • Trasferimento dati: tra i registri e la memoria
  • Salto: permettono di modificare il flusso di esecuzione delle operazioni possono essere non condizionati o condizionati. (AGGIUNGERE ESEMI SLIDE 19- 20 - 21 - 22 ARCHITETTURA) Presentazione di un sistema informatico: il tempo della CPU si colcola dal numero di cicli di clock necessari al processo per il periodo Tck o frequenza fck : tCPU = nck Tck = nck / fck un programma è una successione di ni istruzioni eseguite dalla CPU in un certo numero di cicli di clock nck. si definisce numero medio di cicli di clock per eseguire un’istruzione: CPI = nck / ni Si definisce il tempo CPU come: TCPU = CPIni /fck Le prestazioni di una CPU possono essere migliorate con:
  • la frequenza di clock che dipende dalla tecnologia di costruzione e dall’architettura della CPU • il numero medio di cicli di clock necessari per completare un’istruzione
  • il numero di istruzioni necessarie per completare un processo.
  • Esempio processo somma fra due contenuti della memoria, occorrono 4 istruzioni. Si può pensare un’architettura dove la procedura è eseguita con un’unica istruzione. Struttura della CPU Le CPU possono essere progettate in base a diversi set di istruzioni (Instruction Set Architecture, ISA) in particolare si possono identificare con:
  • CISC - Complex Instruction Set Computer:
  • HW in grado di svolgere istruzioni macchina complesse
  • Numero elevato di cicli di clock per eseguire un’istruzione
  • Un programma richiede l’uso di poche istruzioni
  • Ampio set di istruzioni
  • Esempi: Intel x86, personal computer
  • RISC - Reduced Instruction Set Computer:
  • Repertorio di istruzioni ristretto (alcune decine di istruzioni)
  • Istruzioni prevalentemente su registri
  • Una istruzione eseguita per ogni ciclo di clock
  • Architettura semplice load/store (vedi esempio precedente) L’architettura RISC ha avuto un grande successo negli anni 90 ma non è riuscita a soppiantare le CPU CISC dei personal computer. In questo settore prevalgono motivazioni diverse come la compatibilità con versioni precedenti (Intel x86).

Architettura ARM (Advanced RISC Machine). Negli ultimi le architetture RISC sono impiegate in processori per dispositivi portatili come smartphone, tablet grazie al basso consumo. Prestazioni di un sistema informatico: Numero di istruzioni in linguaggio macchina in un secondo:

  • Mega Instructions Per Second (MIPS)
  • MIPS = ni / TCPU x 10-^6 = fck / CPI x 10-^6 Numero di operazioni in virgola mobile eseguite in un secondo:
  • Mega Floating Point Operation per Second (MFLOPS)
  • MFLOPS = nFLOP / TCPU x 10 -^6
  • nFLOP numero di operazioni in virgola mobile svolte dal processo in esame. Struttura della CPU: Parallelismo Parallelismo: aumentare il numero di operazioni eseguite contemporaneamente per migliorare le prestazioni della CPU. Pipeline: operazioni elementari in cascata si evitano tempi morti come in una catena di montaggio Superpipeline (pipeline >20 stati) Superscalarità (più di una pipeline che il processore gestisce in parallelo) Multithreading (più unità di controllo per gestire diversi processi di elaborazione): Con una seconda unità di controllo, il processore si presenta come una coppia di processori. Multicore (più processori indipendenti nello stesso chip). LA MEMORIA CENTRALE La memoria centrale ospita i dati necessari per le operazioni svolte dalla CPU e alcuni dati trasferiti dalle periferiche I/O. Sono costituite da celle adiacenti ognuna caratterizzata di un indirizzo. Contiene sia programmi sia dati, è una memorizzazione binaria (bit) Cella (o locazione): unità indirizzabile:
  • byte: cella da 8 bit
  • word: insieme di k byte (k dipende dall’architettura) Indirizzo : tramite il quale la CPU accede al dato nella cella Indirizzi binari a n bit: spazio di indirizzamento 2n celle Esempio: Intel i7, architettura a 64 bit, registri e ALU a 64 bit, indirizzi a 64 bit, spazio indirizzabile 264 = 1.8 1019 celle. RAM :
  • La memoria funziona a cicli elementari di lettura o scrittura
  • In ciascun ciclo si specifica l’indirizzo di una cella
  • In una scrittura i dati vengono trasferiti nella cella
  • In una lettura i dati nella cella sono riportati sulle uscite dati
  • In ogni ciclo si può accedere una cella qualsiasi
  • RAM (Random Access Memory): ad accesso casuale MEMORIA CACHE:
  • La memoria è sempre più lenta della CPU e tende a rallentarla
  • Memorie veloci sono disponibili ma solo per piccole dimensioni
  • La Cache funziona alla velocità del processore, e quindi nasconde la ‘lentezza’ della memoria
  • Contiene le ultime porzioni di memoria acceduta: se la CPU vuole leggere una di esse evita un accesso a memoria MEMORIA DI MASSA: A differenza dalla memoria centrale si accede attraverso un’interfaccia di I/O Dischi e nastri magnetici

SISTEMA OPERATIVO

Esempi per PC:

  • Windows
  • UNIX
  • Mac OS
  • Solaris (Sun/Oracle machines)
  • Linux Esempi per smartphones/tablet:
  • Apple iOS
  • Windows Phone
  • BlackBerry OS
  • Nokia Symbian OS
  • Google Android L’esecutore Un calcolatore basato sull’architettura di von Neumann esegue un programma con le seguenti caratteristiche:
  • dati e istruzioni sono memorizzati in una memoria unica che premette sia la scrittura sia la lettura.
  • ogni elemento in memoria è caratterizzato da un indirizzo che ne specifica la posizione all’interno del banco di memoria.
  • le istruzioni vengono eseguite in modo sequenziale precedute e seguite da lettura e scrittura dei dati in memoria. Linguaggio macchina La CPU è in grado si eseguire istruzioni che sono scritte in linguaggio macchina (linguaggio rudimentale o a basso livello): poche istruzioni con al massimo due operandi. l’uso richiede notevoli conoscenze sulla struttura fisica del calcolatore. Ogni CPU è caratterizzata dal suo linguaggio macchina, classi di CPU compatibili sono in grado di eseguire lo stesso insieme di istruzioni (Esempio: Intel e AMD). Le operazioni che possono essere eseguite da un processore o computer sono molto elementari. Tuttavia un dispositivo di calcolo ne può eseguirne tante e in poco tempo. La CPU comprende un linguaggio molto distante dal linguaggio degli utenti e questo problema viene risolto introducendo un nuovo insieme di istruzioni più comodo da utilizzare. Traduzione e interpretazione: Per risolvere il problema viene introdotto un nuovo linguaggio L1 con un insieme di istruzioni più comodo da utilizzare.
  • Traduzione: il nuovo linguaggio L1 viene tradotto da un programma scritto in linguaggio macchina (L0) in un nuovo programma che può essere eseguito della CPU.
  • Interpretazione: Un programma scritto in linguaggio macchina interpreta i comandi del nuovo linguaggio L1 esaminato un’istruzione alla volta ed sostituendola con istruzioni in L0. Con questa tecnica non viene generato un nuovo programma. Le istruzioni di L1 sono trattate come dati dal programma interprete. Struttura a livelli Mediante la traduzione o interpretazione, un computer può usare una serie di linguaggi ciascuno più pratico da utilizzare del precedente, dove ciascun linguaggio utilizza il precedente come base E’ più semplice descrivere ogni livello come un ipotetico computer o macchina virtuale. sistema operativo Rappresenta un’infrastruttura software, è un’interfaccia fra l’infrastruttura hardware e l’utente o il software applicativo e serve a semplificare la gestione delle risorse del computer. Nel modello multilivello, il sistema operativo può essere visto come una

Macchina virtuale che virtualizza l’hardware sottostante offrendo una visione di esso più potente e semplice da utilizzare. Funzione del sistema operativo: rendere utilizzabili le risorse fisiche presenti nel sistema informatico, in particolare:

  • correttezza e precisione dell’elaborazione;
  • applicazioni accessibili da ogni luogo e in ogni momento;
  • affidabilità, disponibilità e sicurezza dei sistemi;
  • riservatezza dei dati;
  • interoperabilità fra dispositivi forniti da diversi produttori;
  • superare i problemi legati alla limitazione delle risorse. Svolge le seguenti attività di sevizio:
  • Esecuzione di applicazioni: caricamento dei programmi (istruzioni e dati) nella memoria centrale, gestione I/O e comunicazioni;
  • Accesso ai dispositivi di ingresso/uscita : maschera l’hardware dei dispositivi di I/O;
  • Archiviazione di dati e programmi: per la memoria di massa gestisce l’organizzazione logica dei dati (directory, file e operazioni di scrittura lettura);
  • Controllo di accesso: per sistemi a più utenti gestisce la protezione e risoluzione di conflitti.
  • Contabilizzazione: monitoraggio del sistema, tempo utilizzo CPU e memoria occupata;
  • Gestione dei malfunzionamenti: risolve e, se possibile, risolve problemi dovuti a malfunzionamento hardware o ad applicativi. Elementi di un sistema operativo: Sistema di gestione del processore; Sistema di gestione della memoria; Sistema di gestione delle periferiche; Sistema di gestione dei file (file system); Sistema di gestione degli utenti e dei relativi comandi (interprete comandi); Sistema di gestione della rete Multiprogrammazione: Programma a processo: Programma: entità statica composta dal codice eseguibile dal processore. Processo: entità dinamica che corrisponde al programma in esecuzione, composto da:
  • codice (il programma);
  • dati (quelli che servono per l’esecuzione del programma);
  • stato (a che punto dell’esecuzione ci si trova, cosa c’è nei registri, ...). Ad un programma (padre) possono essere associati più processi (figli). Esempio: programma di wordprocessing che continua ad operare sul testo mentre si sta stampando grazie ad un processo figlio incaricato della stampa.
  • Bit: 2 stati, 0 oppure 1
  • Byte: 8 bit ( 2^8 = 256 stati)
  • Word: 16 bit (32,64, dimensione naturale dei registri CPU, numero massimo dell’insieme di bit su cui la CPU può operare) In informatica le dimensioni di insiemi di codifica, memorie, dischi, file e database sono sempre espresse in potenze di 2.
  • 1MiB (mebibyte) contiene 220 = 1048576 bit
  • 1MB potrebbe indicare anche 1000000 bit
  • Differenza tra 1 Tibi e 1 TB è del 10%!
  • Per quello che riguarda le velocità di comunicazione si utilizza come unità di misura il bps (bit per second), pertanto: 1Mbps = 106 bit/s (senza ambiguità). CODIFICA DELLE ISTRUZIONI: sistemi di numerazioni posizionali: Il numero è scritto specificando le cifre in ordine ed il suo valore dipende dalla posizione relativa delle cifre. È necessario specificare le cifre del sistema di numerazione, il numero di cifre usato prende il nome di base. Esempio: 4243 = 4000 + 200 + 40

In generale, in un sistema di numerazione in base B la sequenza n di cifre CONVERSIONE DI BASE Divisioni successive: Conversione decimale a binario Rappresentazione dei numeri naturale (interi senza segno) Cifra più significativa: ck Cifra meno significativa: c 0 Cifre: ci appartenenti all’intervallo tra 0 e B-1 se B è minore/uguale a 10 altrimenti si aggiungono cifre alfanumeriche Numero di cifre del numero: n = k + 1

Numeri naturali nei computer: Conversione di bare:

  • Base B → Decimale: metodo diretto della somma
  • Decimale → Base B: metodo delle divisioni successive
  • Da base B1 → B2: Si passa prima da B1 a decimale con il metodo diretto e poi da base 10 a B2 con il metodo delle divisioni successive.
  • Se B1 e B2 sono una potenza una dell’altra, ad esempio 2 e 2n , è possibile la conversione diretta. Ogni cifra nella base B2 si ottiene per conversione diretta di n cifre nella rappresentazione in base B1. Codifica esadecimale Binario – esadecimale

Complemento a due in binario Complemento a due binario La rappresentazione in complemento a due del numero binario - (N) 2 si ottiene dalla codifica del numero (N) 2 nei seguenti modi:

  • Effettuando il complemento a 1 del numero di partenza (negazione di ogni cifra): si trasforma ogni 0 in 1 e ogni 1 in 0, poi aggiungendo 1 al numero ottenuto.
  • Oppure: a partire da destra, lasciando invariate tutte le cifre fino al primo 1 compreso, quindi invertendo il valore delle cifre rimanenti. Modulo/ segno e complemento a 2 con 3 bit Proprietà del complemento a 2- 1 Se si considera la notazione posizionale, si può notare che nella rappresentazione binaria in complemento a due il valore si può ottenere anche associando alla cifra più significativa un peso negativo, mentre tutte le altre cifre mantengono il peso originario positivo. Codifica binaria a 4 bit, modulo e segno complemento a 2: Proprietà del complemento a 2- 2 Data la rappresentazione in complemento a due di un numero su k bit, la rappresentazione dello stesso numero su k + 1 bit si ottiene aggiungendo (a sinistra) un bit uguale al precedente (estensione del segno):
  • rappresentazione di −6 su 4 bit: 1010
  • rappresentazione di −6 su 5 bit: 11010
  • rappresentazione di −6 su 8 bit: 11111010

addizione binaria: Sottrazione binaria: Aggiunger esempio pagina 44 codifica Overflow: L’overflow si ha quando il risultato di un’operazione non è rappresentabile correttamente con il numero di bit a disposizione. Se due operandi dello stesso segno danno un risultato di segno opposto vuol dire che c’è stato un overflow. Esempio: (01001110)c +(00111100)C2 =(10001010)C2. Questo corrisponde a: (78) 10 + (60) 10 = (−118) 10 !! Per evitare l’overflow occorre aumentare il numero di bit usati per rappresentare gli operandi. Moltiplicazioni e divisione binarie Shift di bit: moltiplicazione e divisione per 2n Moltiplicare per 2n corrisponde ad aggiungere n zero in coda al moltiplicando: 110011 ⇥ 10000 = 110011 0000(⇥16=2^4 ) Dividere per 2n corrisponde a scorrere il numero a destra di n posizioni; le cifre scartate costituiscono il resto: 110011 : 10000 = 11 , con resto di 11 Numeri razionali codifica di binario

Codifica in doppia precisione: Approssimazioni: Un numero può essere rappresentato da un calcolatore solo se la parte frazionaria è esprimibile come somma di un numero limitato di potenze di 2.

  • Esempi: 22.75 e 0. Arrotondamento: due numeri che differiscono meno di 2 - nm^ , dove nm numero di bit della mantissa, si considerano uguali. Un numero più piccolo del più piccolo numero rappresentabile è considerato come 0 (underflow error). Errori catastrofici quando gli operandi sono molto simili o molto diversi. SVILUPPO DI UN PROGRAMMA:

Algoritmo = descrizione della soluzione di un problema Programma = algoritmo scritto in modo che possa essere eseguito da un calcolatore (linguaggio di programmazione) Linguaggio macchina = linguaggio effettivamente “compreso” da un calcolatore, caratterizzato da:

  • istruzioni primitive semplici (e.g. max 2 operandi)
  • attenzione all’efficienza (costi, complessità, velocità)
  • difficile e noioso da utilizzare per un programmatore Due aspetti rilevanti:
  1. produrre algoritmi (cioè capire la sequenza di passi che portano alla soluzione di un problema)
  2. codificarli in programmi (cioè renderli comprensibili al calcolatore) Un insieme finito, ordinato di passi non ambigui che determinano un procedimento atto a risolvere in un tempo finito un problema o una classe di problemi utilizzando dati iniziali e ottenendo dei risultati. Più rigorosamente:
  • Finitezza: deve essere finito, cioè composto da un numero finito di istruzioni, ciascuna delle quali deve essere eseguita in tempo finito ed un numero finito di volte.
  • Generalità: deve fornire la soluzione per tutti i problemi appartenenti ad una data classe, ovvero deve essere applicabile a qualsiasi insieme di dati appartenenti al suo insieme di definizione e deve produrre risultati che appartengono al suo insieme di arrivo.
  • Non ambiguità: devono essere definiti in modo univoco i passi successivi da eseguire per ottenere i risultati voluti Proprietà degli algoritmi: Correttezza: L’algoritmo perviene alla soluzione del compito cui è preposto, senza difettare di alcun passo fondamentale. Efficienza: L’algoritmo perviene alla soluzione del problema usando la minima quantità di risorse fisiche come tempo di esecuzione, memoria. Codifica degli algoritmi:
  • Algoritmo formulato per essere comunicato tra esseri umani: sintetico e intuitivo codificato in linguaggi informali o semi-formali (linguaggio naturale, diagrammi di flusso, …)
  • Algoritmo formulato per essere eseguito automaticamente: preciso ed eseguibile codificato in linguaggi comprensibili dagli esecutori automatici (linguaggio macchina o linguaggio di programmazione di alto livello) Descrizione di un algoritmo: È necessario un linguaggio formale con cui esprimere proposizioni e che consenta di descrivere:
  • le istruzioni: operazioni che devono essere eseguite:
  • operazioni di input e output
  • operazioni aritmetico logiche
  • strutture di controllo
  • i dati: oggetti sui quali si devono eseguire le operazioni.
  • Numeri naturali, interi o reali
  • Caratteri alfanumerici
  • Dati logici o booleani
  • Array o vettore di n elementi
  • Matrici, liste… Criteri di classificazione dei dati: Visibilità da parte dell’utente: visibile (di ingresso o uscita), trasparente (dati temporanei di supporto). Variabilità nel tempo: costanti, variabili (acquisizione dall’esterno o assegnazione). Struttura: elementari (interi, alfanumerici, booleani, ...), strutturati (vettori, matrici, ...). Algoritmi e variabili: Gli algoritmi sono parametrici:
  • producono un risultato che dipende da un insieme di dati di partenza;
  • descrivono la soluzione non di un singolo problema, ma di una intera classe di problemi strutturalmente equivalenti.

La selezione: Questa struttura permette di scegliere tra due alternative la sequenza di esecuzione. È la struttura che permette, per esempio, di risolvere in modo completo il problema del calcolo del quoziente fra due numeri.La condizione espressa nella struttura Se permette di scegliere, in relazione al valore di verità o falsità, quale elaborazione svolgere. La sequenza contenuta nella parte Altrimenti potrebbe mancare se si volesse un risultato soltanto quando possibile: in tale caso se la condizione DIVISORE != 0 risultasse non verificata, non si effettuerebbe alcuna elaborazione. Preposizioni e predicati Le condizioni si esprimono attraverso proposizioni e predicati:

  • proposizione: costrutto che può avere valore vero o falso
  • predicato: proposizione contenente variabili, il suo valore dipende dal valore delle variabili L’interazione: La struttura iterativa permette di ripetere più volte la stessa sequenza di istruzioni finché non si verifica una determinata condizione. Esempio: algoritmo che calcoli e visualizzi i quadrati di una serie di numeri positivi. Si tratta di effettuare la stessa elaborazione (calcolo e visualizzazione del quadrato di un numero) su numeri diversi (acquisiti dalle istruzioni di ingresso). Variabili strutturate: Consentono di riferirsi a più valori reciprocamente correlati come se si trattasse di un’unica variabile (stesso nome).
  • vettori (array),
  • matrici (o array multidimensionali),
  • strutture,
  • liste Vettori o Array Analogamente a quello che succede in geometria (algebra lineare...)
  • Le variabili “semplici” sono dette scalari.
  • Una variabile vettore è una coppia <nome, insiemi di valori>
  • La dimensione di un vettore è il numero dei suoi elementi.
  • Tutti i valori devono appartenere ad uno stesso insieme di definizione e ciascun valore è individuato per mezzo del nome del vettore seguito da un numero tra parentesi, l’indice, che indica la posizione all’interno del vettore Matrici: Il concetto di matrice estende quello di vettore: ogni elemento è individuato per mezzo della sua posizione espressa da più indici. Si tratta di un vettore a più dimensioni. Rappresentazione di algoritmi: Sono sufficienti le istruzioni viste?
  • Teorema di Böhm/Jacopini (1966): qualunque algoritmo può essere implementato, in fase di programmazione, usando solo tre strutture di controllo: la sequenza, la selezione e l’iterazione.
  • Linguaggio naturale
  • Pseudocodice (v. slides precedenti)
  • Diagrammi di flusso
  • Linguaggio di programmazione Diagrammi di flusso Il linguaggio dei diagrammi a blocchi è un possibile formalismo per la descrizione di algoritmi; il diagramma a blocchi, o flowchart, è una rappresentazione grafica dell’algoritmo. Un diagramma a blocchi definisce il flusso di operazioni da eseguire. per realizzare la trasformazione dai dati iniziali ai risultati, descritta nell’algoritmo. Un particolare simbolo grafico, un blocco elementare, è associato ad ogni tipo di istruzione; ovvero, ogni istruzione è rappresentata all’interno di un blocco la cui forma grafica è determinata dal tipo di istruzione. I blocchi sono collegati tra loro da linee di flusso, munite di frecce, che indicano il susseguirsi di azioni elementari. Un diagramma a blocchi è un insieme di blocchi elementari composto da:
  • un blocco iniziale;
  • un blocco finale;
  • un numero finito n (n ≥ 1) di blocchi di azione e/o di blocchi di lettura/ scrittura;
  • un numero finito m (m ≥ 0) di blocchi di controllo. Selezione semplice e selezione a due vie