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


dispensa di diritto dell'informatica, Dispense di Diritto informatico

si tratta di una dispensa di diritto dell'informatica

Tipologia: Dispense

2017/2018

Caricato il 12/11/2018

mimmi91
mimmi91 🇮🇹

2.5

(4)

7 documenti

1 / 62

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
REGIONECALABRIA
UNIONEEUROPEA
FondoSocialeEuropeoAssessoratoIstruzione,Alta
FormazioneeRicerca
REPUBBLICAITALIANA
PORFSECALABRIA20072013‐ASSEIV
Università degli Studi Mediterranea
Reggio Calabria
Percorsi di Azzeramento e Potenziamento 2009
Dispensa del
Modulo di Informatica
(Percorso Umanistico)
ing. Gianluca Caminiti, ing. Giovanni Quattrone
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
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e

Anteprima parziale del testo

Scarica dispensa di diritto dell'informatica e più Dispense in PDF di Diritto informatico solo su Docsity!

REGIONE CALABRIA UNIONE EUROPEA Fondo Sociale Europeo Assessorato^ Istruzione,^ Alta Formazione e Ricerca

REPUBBLICA ITALIANA

POR FSE CALABRIA 2007 ‐ 2013 ‐ ASSE IV

Università degli Studi Mediterranea

Reggio Calabria

Percorsi di Azzeramento e Potenziamento 2009

Dispensa del

Modulo di Informatica

(Percorso Umanistico)

ing. Gianluca Caminiti, ing. Giovanni Quattrone

  • CAPITOLO 1 .......................................................................................................................
  • Cos’è l’informatica?
  • Problemi, algoritmi e programmi....................................................................................................................................
    • Il problema.....................................................................................................................................................................
    • L’algoritmo
    • Algoritmi equivalenti
    • Diagramma di flusso o diagrammi a blocchi
    • Programma e linguaggi di programmazione
  • Algebra di Boole..............................................................................................................................................................
    • La logica binaria
    • Congiunzione
    • Disgiunzione
    • Negazione
    • Tavole di verità
  • CAPITOLO 2 .....................................................................................................................
  • Hardware.........................................................................................................................................................................
  • Architettura dell’elaboratore.........................................................................................................................................
  • Macchina di Von Neumann
  • CPU..................................................................................................................................................................................
  • Memorie...........................................................................................................................................................................
    • Memoria Centrale
    • Memoria di massa
    • Hard Disk.....................................................................................................................................................................
    • Floppy Disk..................................................................................................................................................................
    • CD, DVD
    • Memorie Flash
  • Bus....................................................................................................................................................................................
    • Tipi di Bus
    • Bus dati
    • Bus indirizzi.................................................................................................................................................................
    • Bus di controllo............................................................................................................................................................
  • Dispositivi di Input/Output
  • Periferiche di Ingresso....................................................................................................................................................
    • Tastiera
    • Mouse, Touchpad.........................................................................................................................................................
    • Scanner
    • Lettore Ottico...............................................................................................................................................................
    • Webcam
    • Lettore Biometrico
    • Microfono
  • Periferiche di Uscita
    • Monitor
    • Scheda video
    • Stampante
    • Stampanti ad aghi.........................................................................................................................................................
    • Stampanti a getto di inchiostro.....................................................................................................................................
    • Stampanti laser.............................................................................................................................................................
  • Periferiche di Ingresso/Uscita
    • Scheda audio
    • Drive
    • Drive per schede di memoria
    • Pendrive USB
    • Touchscreen
  • Interfacce.........................................................................................................................................................................
    • Interfaccia USB............................................................................................................................................................
  • CAPITOLO 3 .....................................................................................................................
  • Rappresentazione numerica dell’informazione............................................................................................................
  • Rappresentazione in base diversa da
    • Conversione da base 2 a base 10..................................................................................................................................
    • Conversione da base 10 a base 2..................................................................................................................................
  • Rappresentazione di informazione numerica...............................................................................................................
    • Rappresentazione di numeri interi positivi
    • Binary-coded Decimal (BCD)
  • Rappresentazione di informazione testuale..................................................................................................................
    • La codifica ASCII
    • La codifica Unicode.....................................................................................................................................................
  • Rappresentazione di informazione grafica
    • Immagini monocromatiche
    • Immagini a colori aventi al più 256 colori
    • Immagini fotografiche
    • Caratteristiche generali delle immagini bitmap
  • Rappresentazione di informazione sonora
  • CAPITOLO 4 .....................................................................................................................
  • Software...........................................................................................................................................................................
    • Software di base...........................................................................................................................................................
    • Software applicativo
  • Sistemi Operativi
    • Struttura e funzioni
    • Il nucleo
    • Il gestore della memoria...............................................................................................................................................
    • Il gestore delle periferiche............................................................................................................................................
    • Il gestore dei file
    • L’interprete dei comandi..............................................................................................................................................
  • Software applicativo
  • CAPITOLO 5 .....................................................................................................................
  • Introduzione alle reti di calcolatori...............................................................................................................................
    • Perché implementare una rete?
  • Storia delle Reti...............................................................................................................................................................
    • Le origini
    • Arpanet
  • Tipi di reti........................................................................................................................................................................
    • Reti centralizzate..........................................................................................................................................................
    • Reti Peer-to-Peer..........................................................................................................................................................
    • Le reti client-server
  • Estensione delle reti
    • Le reti LAN (Local Area Network)
    • Le reti WAN (Wide Area Network).............................................................................................................................
  • Topologia delle reti
    • Topologia a Bus
    • Topologia a Stella
    • Topologia ad Anello
    • Reti miste o Topologie Ibride
  • Protocolli di Rete
  • TCP/IP
    • Cosa significa TCP/IP..................................................................................................................................................
    • TCP/IP è un modello a livelli.......................................................................................................................................
    • Regole del TCP/IP
  • Trasmissione....................................................................................................................................................................
    • Mezzi di trasmissione
    • Teoria della Trasmissione
    • Struttura dei pacchetti
  • Hardware delle reti LAN
    • Scheda di rete...............................................................................................................................................................
    • Firewall
    • Modem.........................................................................................................................................................................
    • HUB.............................................................................................................................................................................
    • Switch
    • Router
  • Internet

Capitolo 1

Cos’è l’informatica?

Il termine “informatica” proviene dalla lingua francese, esattamente da “INFORmation electronique ou automaTIQUE” ; tale termine intende che il trattamento dell’informazione avviene in automatico mediante un elaboratore. Da notare che in lingua inglese non esiste l’equivalente di “informatica” ma che al suo posto viene utilizzato il termine “ computer science ” che presuppone l’esistenza della figura di uno scienziato interessato all’approfondimento della conoscenza della tecnologia dell’elaborazione.

È altresì interessante notare il differente significato di origine tra le differenti lingue nel denominare lo strumento base dell’informatica:

  • Elaboratore , in italiano, per le sue numerose capacità di elaborazione.
  • Ordinateur , in francese, per evidenziare le evidenti capacità dell’elaboratore nell’organizzare i dati e le informazioni.
  • Computer , in inglese (letteralmente “calcolatore”) in discendenza delle calcolatrici, prima meccaniche, poi elettromeccaniche, poi elettroniche.

È importante tenere presente che, contrariamente a quanto si ritiene comunemente, quella dei computer non è affatto classificabile come intelligenza. L’elaboratore non fa altro che eseguire istruzioni preventivamente “impartitegli” da un essere umano. Ciononostante, il computer è ormai diventato insostituibile in numerosi campi della vita e della scienza, grazie alla sua velocità di calcolo e sua notevole flessibilità.

Oggi “informatica” è un termine di uso comune che si accompagna, si integra ed è di supporto a svariate discipline scientifiche e pervade pressoché qualunque “mezzo” o “strumento” di utilizzo comune quotidiano, tanto che oggigiorno quasi tutti siamo o siamo stati, in qualche modo, utenti di servizi informatici. Data l’ampiezza e la diffusione del termine “informatica” si rende necessario definire, sia pure a grandi linee, un quadro generale entro il quale comprendere la materia.

L’informatica non è soltanto la scienza che studia la tecnologia dei calcolatori (che sono soltanto degli strumenti); l’informatica è bensì la scienza che studia la rappresentazione, la memorizzazione, l’elaborazione e la trasmissione dell’informazione.

L’elaboratore elettronico (o “computer” o “calcolatore”) è uno strumento per la rappresentazione, la memorizzazione e l’elaborazione delle informazioni. L’elaboratore elettronico è uno strumento programmabile in quanto può essere predisposto per eseguire un particolare insieme di azioni, allo scopo di risolvere un problema.

Un elaboratore può essere pertanto utilizzato sia da utenti per eseguire software applicativo di svariata natura, come ad esempio:

  • per elaborare informazioni di vario genere (testo, audio, video, etc);
  • per memorizzare grossi archivi di dati, recuperarli velocemente e produrre informazioni;
  • per trasmettere e recuperare informazioni;
  • per risolvere problemi matematici;
  • per rappresentare ed elaborare informazioni che simulano l’ambiente reale.

Un algoritmo può essere informalmente definito come un procedimento che consente di ottenere un risultato atteso eseguendo, in un determinato ordine, un insieme di passi semplici corrispondenti ad azioni scelte solitamente da un insieme finito. Nel senso più ampio della parola, “algoritmo” è una ricetta di cucina, o la sezione del libretto delle istruzioni di una lavatrice che spiega come programmare un lavaggio. Di norma, comunque, la parola viene usata in contesti matematici e recentemente soprattutto informatici.

Una definizione più rigorosa e precisa di algoritmo è la seguente: un algoritmo è una sequenza logica di istruzioni elementari (ovvero che sono univocamente interpretabili) che, eseguite in un ordine stabilito, permettono di ottenere la soluzione di un problema in un numero finito di passi.

Da questa definizione si evincono le quattro proprietà fondamentali dell’algoritmo:

  1. La sequenza di istruzioni deve essere finita.
  2. Essa deve portare ad un risultato.
  3. Le istruzioni devono essere eseguibili materialmente.
  4. Le istruzioni devono essere espresse in modo non ambiguo.

Un esempio di “algoritmo da cucina” che illustra come preparare una frittata potrebbe essere il seguente:

Passo 1 : rompere 2 uova. Passo 2 : sbattere le uova per 3 minuti. Passo 3 : aggiungere 2 cucchiai di formaggio. Passo 4 : aggiungere sale e prezzemolo quanto basta. Passo 5 : friggere l’impasto ottenuto per 2 minuti.

Affermando che i passi costituenti di un algoritmo debbano essere “elementari” e “non ambigui”, si intende che essi siano specificati in modo immediatamente evidenti a chi sarà chiamato ad applicare l’algoritmo, ovvero il suo esecutore. Così, “rompere 2 uova” è sicuramente un passo legittimo, mentre il passo “aggiungere sale e prezzemolo quanto basta” lo può essere soltanto nel caso in cui è possibile assumere che l’esecutore sia in grado di risolvere da solo l’ambiguità di questa frase. Al contrario, un passo come “friggere l’impasto ottenuto per 2 minuti” non può considerarsi “semplice”; potrebbe però essere associato ad un rimando ad un’altra sezione che fornisce un algoritmo apposito che spieghi quali passi “elementari” sono necessari per effettuare la frittura dell’impasto. Questi potrebbero essere, ad esempio, “aggiungere olio nella padella”, “riscaldare l’olio sulla fiamma”, “inserire l’impasto nell’olio caldo”. Infine, notare che tale ricetta per essere “eseguibile materialmente” deve essere indirizzata solo a chi è provvisto di cucina, la quale è necessaria per riscaldare l’olio sulla fiamma.

Esistono numerosi modelli matematici di algoritmo. In generale, un algoritmo riceve un insieme di valori (chiamati dati in input ) e ne genera un altro (chiamati dati in output o soluzione ). Questa corrispondenza tra input e output rappresenta il problema risolto dall’algoritmo.

Ritornando all’esempio dell’algoritmo da cucina che descrive come preparare una frittata, i dati in input sono le 2 uova, il formaggio, il sale, il basilico e l’olio, il dato in output è la frittata intesa come prodotto finito dopo l’esecuzione dell’algoritmo. Notare che in tale algoritmo descritto i dati in input e i dati in output appaiono invariabili, nel senso che ogni volta che viene eseguito lo stesso algoritmo si ha a che fare con esattamente gli stessi dati. Tuttavia, generalmente in matematica ed in

informatica i “problemi” che si considerano sono quasi sempre caratterizzati da dati di ingresso variabili. Per esempio, il calcolo del massimo comune divisore fra due numeri è un esempio di “problema”, e i suoi dati di ingresso, variabili di volta in volta, sono i due numeri in questione. A un non matematico questa potrebbe apparire come una “famiglia di problemi” (il problema di calcolare il massimo comune divisore fra 10 e 15, il problema di calcolarlo fra 40 e 60, fra 35 e 95, e così via). Il matematico e l’informatico identificano con la parola “problema” l’intera famiglia e con “ istanza ” (o “caso particolare”) ciascuno dei quesiti specifici ottenuti fissando due particolari valori.

Data questa premessa, un algoritmo risolve un problema se è costituito da una sequenza di passi che, applicata indifferentemente a qualunque istanza del problema, produce in un tempo finito la soluzione desiderata. Questa idea riveste un’importanza fondamentale specialmente con l’avvento dell’informatica. Infatti, se per ottenere un certo risultato (risolvere un certo problema) esiste un procedimento infallibile, che può essere descritto in modo non ambiguo fino ai dettagli, e conduce sempre all’obiettivo desiderato in un tempo finito, allora esistono le condizioni per affidare questo compito ad un elaboratore , semplicemente descrivendo l’algoritmo in questione in un programma scritto in un opportuno linguaggio comprensibile alla macchina.

L’esecuzione di un algoritmo su un dato input richiede il consumo di una certa quantità di risorse; queste sono generalmente rappresentate dal tempo di calcolo impiegato e dallo spazio di memoria utilizzato. È importante saper valutare la quantità di risorse consumate proprio perché un consumo eccessivo può pregiudicare le possibilità di utilizzo di un algoritmo.

Lo studio di un algoritmo viene generalmente suddiviso in tre fasi:

  1. Sintesi : dato un problema, occorre individuare un algoritmo per risolvere il problema.
  2. Analisi : dato un algoritmo ed un problema, occorre dimostrare che l’algoritmo risolve il problema (correttezza) e valutare la quantità di risorse usate dall’algoritmo (complessità).
  3. Classificazione : data una quantità di risorse, occorre individuare la classe di problemi risolubili da algoritmi che usano al più tale quantità.

Algoritmi equivalenti

In generale, dato un problema non esiste un solo ed unico algoritmo che lo risolve. Due algoritmi si dicono equivalenti quando:

  • hanno lo stesso dominio di ingresso;
  • hanno lo stesso dominio di uscita;
  • in corrispondenza degli stessi valori nel dominio di ingresso producono gli stessi valori nel dominio di uscita, tuttavia pur producendo lo stesso risultato possono avere diversa efficienza e possono essere profondamente diversi.

Si consideri il seguente esempio: si vogliono moltiplicare tra loro due numeri. Un primo algoritmo potrebbe essere l’utilizzo delle somme successive, ad esempio:

12 × 12 = 12 + 12 + … + 12 = 144.

Un secondo algoritmo potrebbe essere l’utilizzo della tecnica di “somma e shift”:

  • Ogni diagramma di flusso si conclude con un’ellisse che contiene la parola fine.

Ad esempio se volessimo descrivere un algoritmo che permette di determinare in un mazzo di chiavi quella che apre un determinato lucchetto, potremmo utilizzare il diagramma di flusso illustrato nella seguente figura.

Programma e linguaggi di programmazione

Un programma è la descrizione di un algoritmo in un linguaggio adatto ad essere eseguito su un elaboratore. Un programma è pertanto una sequenza logicamente ordinata di istruzioni che produce soluzioni per una data classe di problemi. Il linguaggio utilizzato per descrivere l’algoritmo viene detto linguaggio di programmazione.

I linguaggi di programmazione, a differenza dei linguaggi umani, sono linguaggio formali, dotati di una sintassi (ovvero le regole di composizione dei simboli del linguaggio per ricavarne le istruzioni) e di una semantica (ovvero il significato delle istruzioni) ben definite che vanno rigorosamente rispettate.

Il termine programma deve essere tuttavia distinto da quello, più generico, di “software”. Un programma è infatti un oggetto software che può essere caricato nella memoria di un computer per essere eseguito. Altri oggetti software (come, ad esempio, le librerie) non godono di questa proprietà in quanto non possono essere “eseguiti” direttamente. Analogamente, il termine “programma” deve essere distinto anche da quello di “applicazione”. Quest’ultimo termine, infatti, viene usato normalmente per intendere un “servizio” che l’utente finale può usufruire, a prescindere dal fatto che questo sia realizzato da un programma solo o da una collezione di programmi.

Al giorno d’oggi è raro che un programma sia adatto ad essere eseguito direttamente da un elaboratore; infatti, di norma esso richiede una macchina virtuale che comprende l’hardware dell’elaboratore con l’aggiunta di uno o più livelli di software che contribuiscono a creare l’ambiente di esecuzione adatto per il programma stesso.

Il solo linguaggio che è direttamente compreso da un elaboratore, e quindi direttamente eseguibile da questo, è il linguaggio macchina.

I linguaggi macchina sono formati da istruzioni elementari, che vengono codificate in forma numerica e che consentono di effettuare operazioni aritmetiche, conversioni di bit e poco altro. Scrivere programmi in tale linguaggio è quindi estremamente difficoltoso: un’operazione basilare può richiedere anche tre o quattro istruzioni; avendo così la necessità di scrivere parecchio codice anche per i programmi più semplici. Il fatto che tale codice sia solamente numerico comporta inoltre grosse possibilità di errori e difficoltà nell’individuarne. È necessario inoltre avere continuamente a che fare con le caratteristiche fisiche della macchina in cui si programma: bisogna ad esempio specificare manualmente gli indirizzi di memoria in cui salvare le informazioni e i registri del processore in cui mantenere i dati temporanei.

Infine, ogni computer può comprendere solo il proprio linguaggio macchina, poiché esso è diverso da processore a processore. Esiste quindi anche lo svantaggio di dover riscrivere interamente un programma per farlo funzionare su piattaforme differenti.

Per tali ragioni, ormai dagli anni 50 si sono sviluppati linguaggi di programmazione più evoluti, contrapposti al linguaggio macchina, che sono facilmente comprensibili per il programmatore e sono anche in grado di rendere un programma portabile di piattaforma in piattaforma.

Possiamo pertanto suddividere i linguaggi di programmazione in livelli , a seconda di quanto essi sono vicini al linguaggio macchina ( linguaggi a basso livello ) o al linguaggio umano ( linguaggi ad alto livello ):

  1. Linguaggio macchina. Le operazioni disponibili sono soltanto quelle direttamente fornite dall’hardware; ogni operazione è codificata da una sequenza di bit e ogni dato è indicato dall’indirizzo binario della parola di memoria in cui è memorizzato. Un programma in linguaggio macchina è una sequenza di bit che viene direttamente interpretata dall’hardware.
  2. Linguaggio assembler. Le operazioni sono, come nel linguaggio macchina, soltanto quelle direttamente fornite dall’hardware, tuttavia nel linguaggio assembler queste sono indicate da nomi convenzionali, quindi sono facili da ricordare; inoltre, anche i dati sono di facile

espressioni nel calcolo proposizionale. Oggi, le algebre booleane trovano molte applicazioni, tra le quali la progettazione dei circuiti elettronici.

Gli operatori dell’algebra booleana possono essere rappresentati in vari modi. Spesso sono scritti semplicemente come AND, OR e NOT. In matematica spesso si usa “ + ” per OR e “ד per AND (poiché per alcuni versi queste operazioni sono analoghe alla somma ed al prodotto in altre strutture algebriche), mentre si rappresenta il NOT con una barra segnata sopra l’espressione che viene negata.

La logica binaria

Un computer è in grado di eseguire operazioni logiche utilizzando l’algebra di Boole. Tale algebra consiste di un insieme di regole per la valutazione della veridicità dei predicati. Un predicato è una condizione che può assumere soltanto due valori: “ vero ” e “ falso ”, che nell’algebra di Boole sono associati rispettivamente ai simboli “1” e “0”.

Un predicato può essere assimilato ad una frase. Ad esempio, se si considera il predicato “Mario mangia una mela”, esso può risultare “vero” (“1”) o “falso” (“0”) dipendentemente dal fatto che Mario stia effettivamente mangiando una mela o meno. Un’altro esempio di predicato può essere “Luigi cammina per la strada”. In genere i predicati con cui il sistema ed i programmi avranno a che fare, saranno del tipo “Il valore contenuto all’indirizzo di memoria 1034293 è 35” oppure “La somma dei valori contenuti agli indirizzi di memoria 2470234 e 2470238 è maggiore di 20”.

Le operazioni logiche di base sono tre: la congiunzione , la disgiunzione e la negazione.

Congiunzione

L’operazione di congiunzione logica, indicata in genere con i simboli “∧“ o “ד, è un’operazione binaria (ovvero ha due operandi) ed è equivalente alla congiunzione “ e ” nella valutazione della veridicità di una frase, tanto che viene denominata anche con il nome AND. Quindi il predicato

A /\ B

che rappresenta la congiunzione di due predicati A e B, risulterà vero soltanto quando lo saranno entrambi i predicati A e B.

L’operazione di congiunzione logica è pertanto così definita:

Disgiunzione

L’operazione di disgiunzione logica, indicata in genere con i simboli “∨“ o “+”, è un’operazione binaria (ovvero ha due operandi) ed è equivalente alla congiunzione “ o ” nella valutazione della veridicità di una frase, tanto che l’operazione viene denominata anche con il nome OR. Quindi il predicato

A ∨ B

che rappresenta la disgiunzione di due predicati A e B, risulterà vero quando lo sarà uno dei due predicati A o B.

L’operazione di disgiunzione logica è pertanto così definita:

Negazione

L’operazione di negazione logica, indicata in genere con il simbolo “⎯“(posto sopra il predicato considerato), è un’operazione unaria (ovvero ha un solo operando) ed è equivalente alla negazione “ non ” nella valutazione della veridicità di una frase, tanto che l’operazione viene denominata anche con il nome NOT. Quindi il predicato

che rappresenta la negazione di un predicato A, risulterà vero quando sarà falso il predicato A e falso quando il predicato A sarà vero.

L’operazione di negazione logica è pertanto così definita:

Tavole di verità

Le tabelle della verità sono tabelle matematiche usate nella logica per determinare se, una volta attribuiti i valori di verità alle proposizioni che la compongono, una determinata proposizione è vera o falsa.

Ad esempio, la seguente è una tabella di verità che rappresenta la funzione booleana v = ( x AND y ) OR ( x AND z ) OR ( y AND z ).

  1. CPU (Central Processing Unit) o Unità Centrale di Elaborazione. Essa ha lo scopo di eseguire i comandi e le funzioni fisiche rappresentati dai programmi. Si compone a sua volta di due parti: Unità Operativa , in cui uno dei sottosistemi più rilevanti è l’ALU (Arithmetic Logic Unit) ed Unità di Controllo (CU).
  2. Unità di memoria, che hanno il compito immagazzinare e permettere il recupero delle informazioni usate dall’hardware per il suo funzionamento (programmi, dati, ecc.). Si distingue in memoria principale (anche detta memoria “centrale”), intesa come memoria di lavoro e memoria secondaria (anche detta memoria “di massa”), intesa come memoria di archiviazione permanente;
  3. Unità di ingresso (input) e uscita (output), ovvero dispositivi tramite cui i dati sono inseriti (tipicamente dall’utente) nel calcolatore per essere elaborati, e dispositivi attraverso cui i dati elaborati possano essere restituiti all’utente;
  4. Bus, un canale di comunicazione che permette l’interconnessione di tutti i componenti dell’architettura.

La macchina di Von Neumann funziona secondo il seguente schema generale: le informazioni sono inserite dall’utente attraverso i dispositivi di input. Il bus trasmette tali informazioni in memoria (centrale), da dove la CPU può prelevarle (sempre sfruttando il bus come canale di collegamento) al fine di procedere alla loro elaborazione. Al termine di questo passo fondamentale, la CPU pone il risultato dell’elaborazione nuovamente nella memoria centrale per procedere poi con ulteriori letture di dati ed elaborazioni successive. La memoria di massa è utilizzata allorquando si desidera porre i risultati ottenuti dalla CPU in un luogo in cui possano rimanere permanentemente, ovvero per periodi di tempo anche successivi allo spegnimento del computer. Al termine di tutte le elaborazioni, quando si giunge alla determinazione del risultato finale, i dati ottenuti sono presentati all’utente sfruttando i dispositivi di output.

Si noti che nonostante tale schema sia stato sviluppato negli anni ‘40, esso è ancora attuale, difatti è diventato il paradigma per la progettazione dei moderni personal computer.

Adesso si farà qualche ulteriore considerazione sull’architettura di Von Neumann. Tipicamente, essa presenta una molteplicità di unità di ingresso o di uscita, che a volte si suole inserire in un’unica categoria, indicata col termine di “periferiche”. Inoltre, quando ci si riferisce all’unità di memoria spesso si intende la sola memoria principale (la memoria centrale, o RAM), mentre le memorie di massa (come ad esempio l’Hard Disk o i lettori di DVD) sono talvolta considerate semplici dispositivi di I/O. Il motivo di ciò è essenzialmente tecnologico e deriva dal fatto che i dati da elaborare devono comunque essere caricati in memoria centrale, siano essi provenienti dalla tastiera (che è un tipico dispositivo di input) o da un file residente sull’hard disk.

Nel seguito si considereranno in dettaglio le diverse componenti della macchina di Von Neumann.

CPU

L’unità centrale di elaborazione (Central Processing Unit, CPU) è realizzata mediante un microprocessore, cioè un circuito elettronico integrato ( chip ) comprendente un notevole numero di transistor (attualmente, decine o anche centinaia di milioni).

Il principale compito della CPU è quello di leggere dalla memoria centrale le istruzioni ed i dati, eseguire le istruzioni al fine di ottenere l’elaborazione dei dati ed infine scrivere in memoria i risultati ottenuti; tali risultati dell’esecuzione dipendono inoltre dal tipo di dato oggetto dell’istruzione e dallo stato interno della CPU stessa, che tiene anche traccia di come si evolve il flusso di esecuzione.

La CPU si compone di due parti:

  • una Unità Operativa, comprendente principalmente l’Unità Aritmetico-logica (ALU, da Arithmetic Logic Unit) che si occupa di eseguire le operazioni logiche derivanti dall’algebra di Boole, quelle di confronto fra i numeri e quelle aritmetiche;
  • una Unità di Controllo (CU, da Control Unit) che legge dalla memoria le istruzioni da eseguire, se occorre legge anche i dati associati all’istruzione letta, esegue l’istruzione e memorizza l’eventuale risultato, scrivendolo in memoria o in un registro della CPU.

Inoltre, la CPU contiene al suo interno un certo numero di registri , speciali memorie di limitata capienza cui è possibile accedere molto più rapidamente che alla memoria centrale. Si segnalano due registri importanti che sono il registro IP (Instruction Pointer) (detto anche PC, da Program Counter), che contiene l’indirizzo in memoria della prossima istruzione da eseguire, ed il registro di stato, che non contiene valori numerici convenzionali, ma segnala stati (cioè situazioni) particolari in cui la CPU si trova, come le informazioni sul risultato dell’ultima operazione eseguita.

Il funzionamento della CPU è strettamente connesso a quello della CU, che, dall’accensione del computer sino al suo spegnimento, esegue senza sosta una serie di operazioni cicliche denominate “Ciclo macchina”, o anche “Ciclo Fetch-Decode-Execute”. Il Ciclo macchina si compone, difatti, di tre fasi fondamentali:

  1. La fase di Fetch (caricamento) produce il caricamento della prossima istruzione da eseguire. L’istruzione si trova nella memoria centrale nella forma di un codice in linguaggio macchina (ovvero una sequenza di simboli binari, 0 oppure 1) che rappresenta le operazioni interpretabili da parte della CPU e dovrà essere eseguito dalla stessa utilizzando i registri e la ALU.
  2. La fase di Decode (decodifica delle istruzioni e preparazione degli operandi) raccoglie gli eventuali operandi necessari a svolgere l’istruzione corrente (es. gli addendi di una somma, un indirizzo di memoria da incrementare, ecc.).

Indirizzo della locazione Valore memorizzato (dimensione di 32 bit) 0 01010101010101010101010101010101 1 01111111010101010101111101010101 2 01010101010101010101111111110101 ... ...

La memoria si misura in multipli del byte. Si distinguono infatti il Kilobyte (KB), pari a circa 1000 byte (esattamente 2 10 =1024 byte), il Megabyte (MB), pari a circa un milione di byte (2^20 =10241024 byte), il Gigabyte (GB), pari a circa un miliardo di byte (2^30 =10241024* byte). Si noti che poiché il computer usa il sistema binario (basato sui simboli 0 e 1) i multipli del byte sono potenze di due. Ciò spiega, ad esempio, perché un MB (pari a 2^10 byte) sia differente da un milione di byte (che è pari a10^6 byte).

E’ possibile classificare la memoria in due grandi categorie: memoria centrale e memoria di massa. Queste saranno esaminate nel seguito.

Memoria Centrale

La memoria centrale è la memoria principale del computer ed è costituita dalla RAM. Essa è utilizzata come memoria di lavoro, ovvero come memoria veloce dove immagazzinare temporaneamente i dati che sono necessari per l’elaborazione.

La RAM (acronimo di Random-Access Memory, memoria ad accesso casuale) è una tipologia di memoria caratterizzata dal permettere l’accesso diretto a qualunque indirizzo di memoria con lo stesso tempo di accesso. Si distingue infatti dalle memorie ad accesso sequenziale, come ad esempio i nastri magnetici, in cui per accedere (cioè per leggere o scrivere) ad un dato che si trova in una certa posizione, è necessario percorrere prima tutte le posizioni che precedono quella cercata a partire dall’inizio della memoria.

La RAM è realizzata mediante circuiti elettronici integrati, e pertanto è molto veloce. Inoltre, si tratta di una memoria volatile , cioè essa perde il proprio contenuto allo spegnimento del computer.

All’interno della RAM sono memorizzati tipicamente i programmi che l’utente vuole eseguire (ad esempio software di videoscrittura) e i dati utilizzati da tali programmi (come i documenti).

Un altro tipo di memoria, spesso associata alla nozione di memoria centrale, è la memoria ROM (acronimo di Read-Only Memory, memoria a sola lettura) che è una memoria non volatile o anche detta permanente (memoria in grado di mantenere memorizzati i dati anche in assenza di alimentazione elettrica) contenente informazioni memorizzate dal costruttore e che sono necessarie per il buon funzionamento del computer (come ad esempio il BIOS, Basic Input-Output System, che contiene i programmi di avvio) e pertanto non devono essere modificate dall’utente.

La memoria cache (dal termine francese caché che significa “nascosto”) è un tipo di memoria non volatile come la RAM, ma molto più veloce (e quindi più costosa) di questa. Per tale ragione, la dimensione della memoria cache è tipicamente molto piccola in confronto a quella della RAM. La cache funge da intermediario fra CPU e RAM. Ad esempio, quando la CPU effettua un accesso (in lettura o scrittura) ai dati contenuti nella RAM, la porzione di memoria che li contiene è copiata nella cache. In tal modo, successive letture da parte della CPU degli stessi dati, o anche di dati spazialmente “vicini”, potranno avvenire sfruttando la copia presente in cache, cosa che avverrà in un intervallo di tempo sensibilmente inferiore a quello richiesto per leggere gli stessi dati dalla RAM. Nel caso tali dati non si trovino in cache, la ricerca degli stessi è ripetuta nella RAM (pagando un costo maggiore in termini di tempo).

La memoria cache riesce a migliorare le prestazioni della memoria centrale in quanto il suo funzionamento si basa su un principio generale, detto principio di località. Esso afferma che le informazioni usate più di recente dalla CPU (località temporale ) e quelle che si trovano in posizioni (intese come indirizzi di memoria) vicine (località spaziale ), saranno utilizzate in futuro dalla CPU con alta probabilità.

Memoria di massa

La memoria secondaria o memoria di massa , ha la caratteristica principale di essere “non volatile”, ovvero presenta la possibilità di memorizzare i dati permanentemente, cioè anche in assenza di alimentazione elettrica (per questo motivo è definita anche “memoria di archiviazione”). Essa ha un costo sensibilmente inferiore rispetto alla memoria centrale, ma è anche molto più lenta, ragion per cui nei moderni computer la RAM è utilizzata come memoria temporanea di lavoro, mentre la memoria di massa è finalizzata essenzialmente all’archiviazione dei dati e dei programmi.

I principali rappresentanti di questa categoria di memoria sono gli hard disk e i supporti di memorizzazione rimovibili come dischi floppy, CD, DVD, nastri magnetici, memorie flash, ecc. I più importanti fra tali supporti sono descritti nel seguito.

Hard Disk

L’ hard disk , anche chiamato disco rigido o disco fisso, è un dispositivo di memorizzazione di massa che utilizza uno o più dischi magnetici sovrapposti per l’archiviazione dei dati.

E’ costituito da uno o più dischi, rivestiti da una superficie di materiale ferromagnetico (cioè in grado di mantenere una polarizzazione magnetica permanente). I dischi sono sovrapposti e vengono mantenuti in rapida rotazione da un motore elettrico. Inoltre vi sono due testine per ogni disco (una per lato). Le testine sono usate per leggere e scrivere i dati, rispettivamente rilevando o modificando lo stato di magnetizzazione della superficie del disco. Ciascuna testina rimane sollevata sulla superficie del disco ad una distanza molto piccola (dell’ordine dei nanometri, cioè dei miliardesimi di metro) grazie al cuscino d’aria prodotto dalla rotazione degli stessi dischi. I valori di rotazione comunemente riscontrabili negli hard disk in commercio sono 5.400, 7.200, 10.000 e 15.000 giri al minuto. Chiaramente, ad una maggiore velocità di rotazione corrisponde una maggiore velocità di lettura/scrittura dei dati.

Il disco rigido è una delle tipologie di dispositivi di memoria di massa attualmente più utilizzate, caratterizzato da elevate prestazioni (velocità di trasferimento dei dati), affidabilità (resistenza ai guasti) e capacità (valori tipici si aggirano intorno ai 1000 Gigabyte). Le informazioni possono essere memorizzate sulla superficie del disco a seguito di un’operazione, detta formattazione , che organizza il cerchio di ciascun disco in corone circolari concentriche (tracce) e ciascuna traccia in settori. All’interno di questi ultimi sono memorizzate le informazioni.

Floppy Disk

Il floppy disk è costituito da un unico disco rivestito di materiale ferromagnetico, tipicamente conservato dentro un involucro di plastica flessibile (da cui il termine “floppy”) o rigida.

A differenza dall’hard disk, il floppy disk consiste del solo supporto di memorizzazione. Tutta la meccanica (motore, testine, ecc.) necessaria per le operazioni di lettura/scrittura è denominata drive e si annovera fra le periferiche di ingresso/uscita. Tipici valori di capacità sono dell’ordine dei Megabyte. I floppy disk sono importanti solo per ragioni di compatibilità con i vecchi computer, in quanto oggi sono stati sostituiti dalle memorie flash.

CD, DVD

Sono costituiti da un disco di plastica trasparente, incollato nella parte superiore ad un sottile foglio metallico. Le informazioni sono memorizzate come sequenze di “dossi” e “cunette” (in inglese