2         IL CALCOLATORE

2.1        Schema generale

Il calcolatore è un apparato che tratta informazioni, cioè le sposta da un tipo di memoria ad un altro, ad esempio dalla tastiera alla stampante, effettuando, in genere, delle trasformazioni su di esse. Il calcolatore è formato da diverse parti, lo schema sottostante ne è una esemplificazione.

 

(spiacente il disegno da Word a HTM è diventato una vera schifezza)

Figura 2‑1

2.2        L’Unità Centrale

L’Unità Centrale (CPU Central Processing Unit) è il “Cervello” del calcolatore: essa esegue memorizzate in sequenza, a meno che l’istruzione non sia un rimando (istruzione di salto) ad un'istruzione posta in un altro punto della memoria.

Le istruzioni che la CPU può eseguire sono di più tipi [1] :

·    Di spostamento da una parte della memoria ad un'altra.

·    Di gestione dei dispositivi esterni.

·    Aritmetiche.

·    Di conversion dei dati (da formato numerico a format stampabile,…).

·    Di salto o cambio della sequenza di esecuzione delle  istruzioni.

La CPU tratta la memoria in funzione del tipo di istruzioni, ad esempio per le istruzioni aritmetiche, la memoria è vista come un insieme di 2, 4 o 8 bytes, per trattare differenti tipi di numeri .

2.3        Le Memorie

2.3.1            Memoria centrale

La memoria centrale è una fila ordinata di elementi magnetici. La parte iniziale della memoria è magnetizzata in modo permanente, il resto perde la magnetizzazione quando si spegne il calcolatore. Fisicamente, quindi, la memoria è  realizzata con materiali diversi. Ogni elemento di memoria, detto bit, può assumere due stati fisici diversi a cui vengono assegnati i valori 0 ed 1. Il calcolatore vede la fila di bit in modo primario, come gruppi di 8 bits [2] , detti byte [3] , numerati da 0 in avanti. Tale numero è l’indirizzo della memoria.

Con 8 bits, si ottengono 256 (2^8) combinazioni diverse, da 00000000 à 11111111; a ciascuna combinazione, che può essere pensata come un numero fra 0 e 255, è stato associato un simbolo, sui mini-calcolatori e sui calcolatori personali, è stato adottato il codice ASCII . Fra i 256 simboli ci sono le lettere alfabetiche, i numeri decimali, dei segni e dei comandi per lo scambio di informazioni fra il calcolatore e apparati di memorizzazione delle informazioni come la stampante, il modem, ecc..

Per esempio, se all’indirizzo 100000-100006 della memoria ci sono 7 bytes con i valori numerici: 75,73,82,69,77,66,65 e il calcolatore li invia al video, o alla stampante, sul video o sulla carta si leggerà KIREMBA.

La memoria è quindi ciò che, nel calcolatore, contiene le informazioni, o dati, che sono elaborate secondo lo schema seguente:

 

 

 

 

 

 

 

Informazioni per

floppy disk, hard disk,

CD-ROM,

tastiera, mouse

modem, scheda di rete,

 

 

MEMORIE

 

 

 

 

 

 

Informazioni verso

floppy disk, hard disk,

video,

stampante,

modem, scheda di rete,

 

 

 

 

 

 

  

 

Figura 2‑2

La memoria contiene anche i programmi, cioè le istruzioni per trattare le informazioni. In particolare, è presente il Sistema Operativo (OS: Operating System), il programma che lavora direttamente con i dispositivi d’ingresso e di uscita delle informazioni. Ad esempio, quando in Word si preme il tasto K, l’OS riceve il numero della posizione di K sulla tastiera, lo traduce nel byte che ha valore 75 e le invia à Word. A sua volta Word richiama la funzione dell' OS che gestisce il video per poter visualizzare K.

2.3.2            Memoria condivisa o di transito

Più che di un tipo di memoria fisica particolare, la memoria condivisa o memoria cache  è una organizzazione a livello logico della memoria. Lo scopo è di essere intermediaria tra una memoria dello stesso tipo e una memoria più lenta, per esempio fra memoria centrale e disco. Quando si preleva un'informazione dal disco, questa è anche memorizzata nella memoria cache, quando si ha un'altra richiesta degli stessi dati, essi saranno prelevati dalla memoria cache, evitando il più lento accesso al disco.

Ci sono anche memorie cache nella CPU, per lo scambio di dati tra memoria e CPU.

2.3.3            Registri

Sono memorie specializzate, contenute nella CPU stessa e sono utilizzate per i calcoli aritmetici, la memorizzazione di indirizzi e di stati del calcolatore, o per memorizzare provvisoriamente dei dati. Il loro numero è esiguo e le dimensioni variano da 8 a 128 bit.

2.3.4            Stack

Lo stack è una porzione della memoria centrale gestita come una pila, vale a dire è accessibile solo il dato in cima ad essa; per accedere ai dati sottostanti occorre “buttare via” i dati soprastanti. L’operazione di immissione si chiama push, l’estrazione di una informazione si chiama pop.

2.4        Logica dei circuiti del calcolatore

Nelle memorie del calcolatore i dati sono rappresentati dai bit che fisicamente sono dispositivi che possono assumere due stati fisici diversi; più bit insieme formano ciò che il calcolatore interpreta come un numero o come un simbolo. Tali stati fisici sono generalmente riconducibili a due livelli di tensione diversi o, in altri termini, alla presenza o all’assenza di un segnale. I segnali sono facilmente manipolabili dall’unità centrale del calcolatore (CPU) tramite operazioni analoghe a quelle logiche: la trasformazione di un segnale nel suo opposto corrisponde al not; il dispositivo che ha in uscita il segnale 1 solo se i segnali in ingresso sono tutti ad 1 corrisponde all’ and  e così via.

Un dispositivo particolare del calcolatore è il clock, un orologio che a tempo prefissato [4] emette un segnale che è utilizzato per eseguire e sincronizzare le varie parti di un’istruzione. Il calcolatore utilizza i registri per mantenere l’indirizzo dell’istruzione che sta eseguendo (program counter) e per memorizzare stati della macchina (flags register).

2.4.1             I circuiti addizionatore e sottrattore

Per addizionare due numeri di n bit sarebbero necessari n+1 circuiti [5] con 2n variabili, di fatto l’addizionatore può essere scomposto in 2n+1 circuiti parziali ognuno dei quali opera sui tre variabili: i due bit corrispondenti nei due numeri da addizionare e il riporto dell’addizione dei due bit precedenti. La tabella di verità sottostante determina sia la variabile somma che la variabile riporto:

ai

bi

ri-1

si

ri

0

0

0

0

0

0

0

1

1

0

0

1

0

1

0

0

1

1

0

1

1

0

0

1

0

1

0

1

0

1

1

1

0

0

1

1

1

1

1

1

Figura 0‑3

 Da cui:

si = ¬ai¬biri-1 v ¬aibi¬ri-1 v ai¬bi¬ri-1 v aibiri-1

ri = ¬aibi ri-1 v ai¬biri-1 v aibi¬ri-1 v aibiri-1

r1    a2   b2

 

r0    a1   b1

 

rn-1    an   bn

 

Overflow o carry

 
 

 

 

 

 

 

 

 

 

 


 

Figura 0‑4

Se il risultato della somma è > di  2 n+1 – 1 si ha il valore 1 in rn tale valore, (carry), viene memorizzato in un  registro del calcolatore.

Poiché il risultato delle componente il circuito, tranne la prima, è funzione del risultato della componente precedente (per il segnale ri), il risultato finale si stabilizza dopo un certo tempo, per cui il prelievo avviene dopo un prefissato numero di cicli del clock; di fatto al momento opportuno un segnale in and con gli si, assume valore 1.

La sottrazione utilizza il circuito addizionatore trasformando i valori in ingresso, e precisamente:

Sia da eseguire a - b, con a e b aventi n cifre binarie.

Poniamo :

        i)      b = (2 n+1 – 1) – b’,  quindi b’ = (2 n+1 – 1) – b

       ii)      a – b = a -  (2 n+1 – 1) + b’

     iii)      = a + b’ -  2 n+1 + 1

da i) poiché (2 n+1 – 1) è formato da n 1, b’ equivale alla negazione di b, quindi per sottrarre occorre inviare ¬bi in ingresso, il +1 si ottiene inviando in r0 il valore 1, infine 2 n+1 si ignora, in quanto in binario è 1 seguito da n zeri, quindi al di fuori delle dimensioni dei numeri trattati.

2.5        I dischi magnetici

I dischi magnetici sono i principali supporti di memorizzazione permanenre delle informazioni in quanto hanno molti vantaggi:

·        le informazioni possono essere lette e scritte,

·        le informazioni sono disponibili velocemente,

·        si possono memorizzare grandi quantità di informazioni di tipi diversi: sia dati semplici, come una lettera, un foglio di calcolo de Excel, ecc., sia dati complessi detti archivi o file o basi di dati,

·        sono affidabili sia fiisicamente che logicamente (v. par. 2.8 )

2.5.1            Struttura fisica

Un disco fisso (hard disk) è formto da un certo numero di dischi sovrapposti; la superfice d'i ogni disco è magnetizzabile; la magnetizzazione è possibile solo su dei cerchi (tracks) concentrici e, dans les cercles sur des arques discontinues dites bloques. Un dispositif de lecture/enregistration peut se déplacer sur le cercles pour acceder aux données.

2.5.2            Struttura logica

Il disco contiene le informazioni organizzate in entità dette genericamente file o archivi, queste sono individuate da un nome. Le informazioni relative ai file e cioè nome, dimensione, localizzazione sul disco, data di creazione, di modifica, ecc., sono mantenute in una parte del disco detta directory.

La directory ha una struttura analoga a quella di un indice di libro o di un albero, cioè può contenere sia files che sottodirectory, ciò permette di organizzare i dati  in modo coerente.


2.6        Altri dispositivi

·        Tastiera: il mezzo principale per inserire le nostre idee nel calcolatore.

·        Video: lo strumento per vedere  ciò che il calcolatore fa con le nostre idee.

·        Mouse: dispositivo che aiuta a lavorare col calcolatore, soprattutto con i programmi che utilizzano la grafica come modo d’interazione con l’uomo.

·        Stampante: sono realizzate con tecnologie ad aghi, rumorose e lente, ma possono stampare più copie, a getto d’inchiostro, laser, plotter perr disegni di grande formato. Si possono assimilare a delle stampanti certi apparati che taigliano, incidono, ecc..

·        Scanner: per trasferire il contenuto di un foglio, di una foto, ecc. sul calcolatore, il risultato è una immagine grafica. Se l’immagine contiene delle informazioni scritte, se ne può estrarre il contenuto con un programma OCR (Optical Character Recognition) con più o meno precisione.

·        CD ROM: Il dispositivo è un disco abbastanza capiente che è letto (e scritto) con tecnologia laser. E' un mezzo poco costoso per distribuire programmi, manuali, enciclopedie, oltre naturalmente musica.

·        Nastro magnetico: è ideale, dati i costi e la capacità di memorizzazione, per archiviare grandi quantità di informazioni, soprattutto per copie di sicurezza e copie da conservare.

·         Modem: permette il collegament  fra due calcolatori, tramite una linea telefonica. La velocità di collegamento si misura in boudot, numero di bit per secondo. En genere è al di sotto dei 100 mila baudot.

·        Scheda di rete: permette il collegamento fra calcolatori entro brevi distanze (lo stesso edificio). Tale collegamento è detto rete locale. Una rete permette di ottimizzare le risorse, ad esempio, si possono condividere stampanti, collegamenti con calcolatori esterni, archivi e sistemi di salvataggio dei dati. La velocità di trasferimento delle informazioni è da qualche milione a qualche decina di milioni di bit per secondo.

·        E poi: microfoni, telecamere, DVD, …


2.7        Il sistema operativo

Il calcolatore esegue programmi che svolgono una gamma amplissima di attività: commerciali, lavori di ufficio, giochi, programmi tecnico scientifici di ricerca e progettazione, controllo di processi industriali, ecc…

Questa versalità di impiego, si basa su una serie di programmi indicati col nome generico di Sistema operativo (OS); questi permettono sostanzialmente l'interazione fra il calcolatore e chi lo utilizza. Nel tempo gli OS hanno aumentato le funzioni svolte, inglobando funzionalità rilevatesi di utilizzo comune, ad esempio i programmi di comunicazione fra computer diversi, sono ormai parte integrante degli OS.

Le principali parti di un OS sono:

§         Avvio (Bootstrap). E' la prima parte dell' OS che viene eseguita all'atto dell'accensione. Il bootstrap risiede  nella memoria centrale ROM; il suo compito è di eseguire una diagnosi iniziale del funzionamento del calcolatore e di fornire servizi di base per il collegamento con le principali periferiche (BIOS Basic Input Output System), ma soprattutto serve a prelevare, in genere da una posizione fissa del disco, altre funzionalità del OS.

·        Gestione dell'esecuzione dei programmi. Provvede ad eseguire i programmi dell'utilizzatore. E' in grado di far lavorare contemporanemente più programmi: il passaggio da un programma ad un altro avviene o a tempo, o quando il programma attivo è in attesa di completare una operazione di trasferimento dati da o verso un'unità periferica.

·      Gestione delle unità periferiche. Sono realizzate da programmi detti driver, poiché lo scambio di dati con le periferiche avviene in modo indipendente, in una certa misura dal tipo di periferica, ma totalmente indipendente rispetto alla marca della periferica, i drivers convertono i comandi, che sono essenzialmente richieste di dati o invio di dati, in quelli accettati dalla periferica reale.

Ogni programma ha una certa dimensione, data dall'ammontare delle istruzioni che lo compogono e dai dati su cui lavora, ad esempio un programma che genera 100 numeri a caso e poi li ordina, occuperà circa 500 bytes, un programma di word processing può occupare anche alcuni milione di bytes. L'OS provvede ad assegnare ad ogni programma, della memoria proporzionale alle sue necessità, quanto non può essere contenuto nella memoria centrale è memorizzato su disco (memoria virtuale). Quando il programma fa riferimento ad un dato che non è in memoria, l'OS libera una parte della memoria centrale portandola su memoria virtuale (swap) ed al suo posto porta il dato richiesto.


2.8        Sicurezza fisica dei dati

2.8.1            Protezione dagli errori

La protezione dagli errori e il controllo della correttezza dei dati è un problema generale, sia quando questi sono in memoria o su un dispositivo di archiviazione, sia quando sono trasferiti fra sistemi diversi. Gli errori sono dovuti essenzialmente a difetti dei dispositivi o disturbi sui mezzi di trasmissione.

Il controllo della correttezza dei dati scambiati, si ottiene con una ridondanza degli stessi. Qui di seguito alcune semplici tecniche utilizzate:

·        Controllo di parità : ogni carattere è formato da 8+1 bit e quest'ultimo ha valore 0 o 1 in modo che vi siano un numero pari di bit con valore 1.

·        Codici di controllo: le informazioni che identificano univocamente un oggetto, il numero di conto, la matricola del dipendente, ecc…, sono formate da due parti, la prima identifica l'oggetto vero e proprio, l'altra è un codice funzione della prima parte. Il codice di controllo intercetta errori di digitazione del codice, in particolare l'inversione di due cifre contigue, uno degli errori più frequenti. Un codice di controllo per campi numerici molto usato è il resto della divisione per 97.

·        Byte di controllo: ad ogni informazione, o insieme di informazioni è aggiunto un byte che può essere o la somma di tutti i byte dell'informazione modulo 256, o l'operazione logica XOR su tutti i byte dell'informazione.

Il controllo della correttezza dei dati è sufficiente se è possibile o poco costoso riottenere i dati errati, come nel caso di una trasmissione di dati fra due macchine (v. l'esempio della stampante qui sopra), ma se la velocità di trasmissione è bassa o non è possibile riottenere i dati, si utilizzano dei codici di correzione, cioè delle informazioni aggiuntive, tali da individuare errori e correggerli.

Una semplice tecnica è l'estensione del controllo di parità, essa, ma anche altre, si basa sulla bassa probabilità che ci siano più errori contemporaneamente. Si supponga di avere n2 bit, considerandoli non sequenzialmente (come di fatto fisicamente lo sono), ma disposti in quadrato, si calcoli il bit di parità di ogni riga e di ogni colonna; un errore in un  bit è segnalato dall'errore di parità nella riga e nella colonna in cui si trova.

Questa tecnica può correggere fino a n bit, a condizione che a due a due non siano sulla stessa riga o sulla stessa colonna. Se in una riga (o colonna), sono errati due bit, il bit di parità della riga (o della colonna) non  rileva l'errore, ma esso è rilevato dal bit di parità della colonna (o della riga); quindi il sistema non è in grado di correggere due errori "allineati", ma è in grado di ricoscere che c'è stato un errore. 

Hamming [6] ha dimostrato che è possibile costruire codici correttivi meno dispendiosi. L'idea di base è di avere m bit di informazione più altri k bit, ognuno dei quali è la parità di un'opportuno sottoinsieme degli m bit di informazione. Per individuare se è presente un errore si calcola un numero di controllo (checking number) c a partire da k, e precisamente per ogni bit di k, se esso verifica la parità (quindi non c'e' un errore), il corrispondente bit di c vale 0, altrimenti vale 1. Se c vale 0, non ci sono errori, altrimenti c contiene un valore che, per come sono stati scelti i sottoinsiemi di bit per il calcolo della parità, indica quale bit è errato. Quindi la dimensione di k deve essere tale da contenere i numeri da 1 a m + k [7] .

La determinazione dei k sottoinsiemi è immediata: il sottoinsieme βi contiene tutti i bit nel cui numero binario la posizione i-esima è 1, ad esempio β1 = {b1,b3,…,b2n+1…} in quanto nei numeri dispari il primo bit vale sempre 1.

La tabella sottostante, relativa a 7 bit, di cui 3 di parità, esemplifica la scelta dei sottonsiemi:

b7

b6

b5

b4

b3

b2

b1

 

1

1

1

1

0

0

0

β3 = {b4,b5,b6,b7}

1

1

0

0

1

1

0

β2 = {b2,b3,b6,b7}

1

0

1

0

1

0

1

β1 = {b1,b3,b5,b7}

Figura 0‑5

Si supponga che un errore nei dati, sia rilevato dagli insiemi β1 e β3, quindi il checking number è (101)2 = (5)10, che indica nel bit b5 il bit errato.

L'ultimo problema è quello di scegliere la posizione dei k bit di parità: si sceglieranno le posizioni il cui numero contiene un solo bit 1, cioè 1, 2, 4, …2n, … , in tal modo tutti i bit di controllo saranno indipendenti fra di loro.

Il sistema illustrato permette di scoprire e correggere un errore; se ci sono due errori, il sistema corregge in modo errato (vedere nell'esempio se sono errati b4 e b5). Per correggere 1 errore ed accorgersi se ci sono due errori, occorre aggiungere un ulterore bit di parità su tutti i bit (parità generale). Trascurando il caso di tre o più errori, eventi sempre più improbabili, si possono avere tre casi:

·        nessun errore: tutte le parità sono soddisfatte,

·        un solo errore: la parità generale non è soddisfatta, se il checking number è zero, l'errore è sulla parità generale, altrimenti è sul bit indicato dal checking number,

·        due errori: la parità generale è soddisfatta, il checking number è diverso da zero.

Una scelta accettabile, che bilancia ridondanza e maneggevolezza è l'utilizzo di 16 bit (due bytes), in cui 11 sono di informazione, 4 di controllo ed 1 di parità generale.

2.8.2            Tolleranza degli errori (fault tolerance)

La fault tolerance  è la capacità di un sistema di far fronte ad un difetto di hardware o di software. Il livello più basso di fault tolerance, consiste nella capacità di proseguire le operazioni in seguito a mancanza di corrente. Ai livelli più alti di fault tolerance ci sono i sistemi duplicati, in cui le operazioni sono eseguite in doppio (mirror ).

Nei dischi magnetici si utilizza una tecnica, detta RAID  (Redundant Array of Independent), che oltre alla tolleranza agli errori permette di ottenere maggiori velocità di lettura e o scrittura. Il RAID è una tecnologia che impiega due o più unità a disco ed è soprattutto utilizzata per i server.

Ci sono diversi livelli di RAID, i più comuni sono 0, 1, 3, and 5:

Livello 0: non ha nessun tipo di fault tolerance, permette solamente una scrittura ed un accesso più veloce ai dati in quanto questi sono "frammentati"  in modo che dati contigui sono scritti su dischi diversi, sfruttando la scrittura contemporanea di più testine; ovviamente anche la lettura è più veloce.

Livello 1: I dati sono duplicati su due dischi diversi. In lettura il controllore dei dischi legge dal disco che è accessibile in minor tempo. La fase di scrittura non comporta rallentamente, poichè i due dischi lavorano indipendentemente l'uno dall'altro.

Livello 3: Come il Livello 0, ma con un disco riservato alla correzione dei dati. Oltre alle buone prestazioni ha anche un certo livello di fault tolerance.

Livello 5: frammenta dati e codici di correzione su più dischi, ottenendo buoni risultati sia in termini di prestazioni che di sicurezza.

Per quanto riguarda la trasmissione via modem, la sicurezza dei dati è stata inizialmente assicurata tramite protocolli software come  Xmodem  e Kermit . Successivamente si sono affermati come standard i protocolli MNP  (Microcom Networking Protocol) sviluppati dal produttore di modem  Microcom, Inc. In particolare i protocolli MPN-4 che controlla gli errori, ed eventualmente riduce la velocità di trasmissione e MNP-5 che effettua una compressione dei dati aumentando di fatto la velocità di trasmissione.



[1] Nella teoria dei calcolatori è stato dimostrato che sono necessarie solo due istruzioni: la sottrazione e il salto condizionato dal risultato della sottrazione.

[2] In passato alcuni calcolatori hanno usato byte con 5 e 6 bit.

[3] In realtà ogni byte è formato da 9 o più bit essendo il nono bit il controllo di parità  degli altri 8, o, se più di uno, oltre ad intercettare gli errori di memoria, possono in qualche caso correggerli.

[4] la frequenza del clock dipende dal tipo di calcolatore, attualmente varia fra 108 e 109 volte al secondo.

[5] un circuito per ogni cifra più l’eventuale riporto.

[6] R.W. Hamming, Error Detecting and Error Correcting Codes The Bell System Technical Journal Vol. XXVI April 1950 No. 2

[7] Deve valere 2k  ≥ m + k +1 oppure k = int(log2(m + k))+1)