Macchine digitali

Cinema, Peperoncini, Navi Spaziali, Barbecue, Fisica Quantistica… TUTTO!
Post Reply
User avatar
Mano[FA]
oO Team
oO Team
Posts: 2158
Joined: Oct 2004
Location: UK

Macchine digitali

Post by Mano[FA] » 30/01/2009 15:36

Mi permetto di improvvisare una "lezioncina" per farci conoscere i nostri amati PiCCi. Per qualcuno sara' banale, per altri, spero, gradita.

I computer sono macchine digitali. Tutto cio' che sanno fare e' registrare, elaborare e trasformare numeri. Inoltre, per rappresentare qualunque numero, un computer usa solo due cifre: 0 e 1. Tutto, ma proprio tutto, per un computer e' solo usa serie di 0 e 1.
Questo lo avrete sicuramente gia' sentito, cosi' come saprete che tutta la materia e' fatta di elettroni, protoni e neutroni (la mia conoscenza della fisica delle particelle e' ferma attorno agli anni '30). Eppure, immaginare come tre particelle elementari possano originare l'infinita variabilita' di cio' che esiste, noi compresi, e' estremamente difficile. Quasi come credere che, davvero, un computer sa solo macinare una serie di 0 e 1.

Lasciamo la fisica ai fisici e proviamo a capire i nostri amati PC piu' da vicino. Usiamo qualche semplice esempio. I file. Se tutto e' una serie di 0 e 1 allora anche i file, OGNI file, deve essere una serie di 0 e 1.
Creiamo il piu' modesto di tutti i file. Un file di testo. Se usate Windows aprite Notepad (non Word o WordPad, ma Notepad) e scrivete una semplice parola.

ciao

ora salvatelo come file1.txt
Se usate un altro sistema operativo (io ad esempio sto usando Linux) usate un editor di testi (vim, emacs, nano, gedit...) e fate lo stesso.
Bene. Guardate la sua dimensione (tasto destro -> proprieta'). 4 Byte. Ogni Byte e' formato, molti ricorderanno, da 8 bit: i famosi 0 e 1.
Linux ha un piccolo programmino - xxd - per leggere i bit di cui un file e' fatto. (Con Windows potrebbe funzionare installare cygnus). Proviamo a vedere cosa succede se lo "leggiamo" con xxd

Code: Select all

xxd -b file1.txt
0000000: 01100011 01101001 01100001 01101111 ciao

Eureka!
Ma cosa vuol dire?
0000000:
Ci dice che sta riportando dal primo carattere (i PC iniziano a contare da 0)

01100011 01101001 01100001 01101111
La serie di 0 e 1 che ha trovato! Ci mette uno spazio ogni 8 caratteri per facilitarci la lettura.

ciao
la "traduzione" usando la piu' semplice delle tabelle: ASCII (ne parliamo tra poco)

siccome per noi leggere 0 e 1 e' difficile (e occupano un sacco di spazio) possiamo chiedere di leggere quelle cifre 8 alla volta e trasformarli in numeri esadecimali (in base 16). A ben guardare e' il comportamento di "default" di xxd (e quello che fa cygnus in Windows)

Code: Select all

xxd file1.txt
0000000: 6369 616f ciao

molto piu' compatto. I Byte adesso sono raggruppati a due a due (63 69 61 6f)

Potremmo, leggendo i numeri di 8 in 8, convertirli in base 10:

0000000: 99 105 97 111 ciao

"OK. Adesso ci credo. Il file era solo una serie di 0 e 1. Ma come fa Notepad a sapere che quella serie di 0 e 1 vuol dire ciao?"
Semplice, usa una tabella tipo questa e converte ogni byte (un numero in base 2 rappresentato da 8 cifre) nel simbolo giusto. Come poi venga rappresentato a schermo e' tutt'altra faccenda di cui non ci occupiamo. Sono comunque trasformazione di numeri! I pixel del vostro schermo avranno un'intensita' rappresentabile con un numero.

Praticamente Notepad legge tutti gli 0 e 1 in un file, ne prende 8 alla volta (non esistono spazi) e usa una tabella per convertire ogni numero (un byte, 8 bit) in un simbolo da farci vedere. Fa il processo inverso quando salva un file.
Domanda: E se noi scriviamo quattro 1 (1111), come salvera' il file?
Presto detto:
00110001 00110001 00110001 00110001
che in esadecimale si legge:
31 31 31 31.
Ricordate: il nostro 1, quello che vediamo a schermo, e' un simbolo come tanti altri. Il sistema deve essere coerente, non puo' fare delle eccezioni per 0 e 1, anche loro DEVONO occupare 8 bit.

Lo spazio e "l'andare a capo" hanno anche loro i rispettivi codici (c'e' un codice anche per il "bip" che a volte il PiCCi emette). A dire il vero, nel mondo Windows il simbolo di nuova linea e' codificato da due byte: 00001101 00001010 (0d 0a in esadecimali). Quindi se Notepad trova 00001101, si assicura che poi ci sia 00001010 e "va a capo". Se invece trova un numero di cui non esiste un simbolo (tipo 00000001), stampa un quadratino (vi sara' capitato anche quello...) o uno spazio.

Con Notepad potete aprire ogni tipo di file (sono TUTTI stringhe di 0 e 1, giusto?) Aprite un file non di testo con Notepad (un'immagine, una canzone...) e lui tradurra' tutti gli 0 e 1 leggendoli 8 alla volta e usando la stessa tabella. Non aspettatevi di vedere niente di intellegibile!

Spero fino qui mi abbiate seguito. Se e' tutto chiaro, quello che segue sara' banale.
Proviamo con un file piu' "difficile". Un'immagine.
Qui trovate un archivio (non posso caricare file bmp...) con 2 file: uno piccolissimo, ciao.bmp, che e' formato da 12x3 pixel, ciascuno dei quali o e' bianco o e' nero. Siccome 36 pixel occupano poco spazio sullo schermo, ne ho fatta una copia ingrandita per farvi vedere com'e' (ciao2.bmp). Scaricatelo e visualizzate i due files.
files.zip
contiene due immagini
(2.23 KiB) Downloaded 18 times
La dimensione e' ragguardevole (1114 bytes) per un'immagine di 36 pixel, questo perche' contiene una serie di informazioni aggiuntive (grandezza dell'immagine, colori dei pixel, standard usati e tecnicismi vari che vi risparmio), ma arriviamo alla parte interessante, verso la fine del file, guardiamone i bit!

Code: Select all

xxd -b ciao.bmp
...
11111111 00000000 11111111 00000000 11111111 00000000
11111111 00000000 11111111 00000000 00000000 00000000
00000000 11111111 11111111 00000000 11111111 00000000
00000000 00000000 11111111 00000000 11111111 00000000
11111111 00000000 11111111 00000000 11111111 00000000
00000000 00000000 11111111 00000000 00000000 00000000

Questi sono gli ultimi 36 byte (216 bit, gli spazio li ho aggiunti per leggibilita') del nostro file.
Ora guardate l'immagine e partite dal pixel nell'angolo in basso a destra e andate orizzontalmente.
Il loro colore e':

BIANCO NERO BIANCO NERO BIANCO NERO
BIANCO NERO BIANCO NERO NERO NERO
....
... NERO BIANCO NERO NERO NERO

Trasformate BIANCO in 11111111 e NERO in 00000000 ed avete la serie di cui sopra!

Quindi ogni programma sa come interpretare una serie di file, sa come l'informazione e' stata codificata in 0 e 1 e quindi sa come ricodificarla!

Semplice, dopotutto!

Quindi, OGNI file e' davvero una serie di 0 e 1 e, come dicevamo e come vi hanno sempre detto, TUTTO, per un PC e' solo una serie di 0 e 1.

Se avete puntualizzazioni o domande fate pure...

User avatar
ayakuccia_o.O
Moderator
Moderator
Posts: 2373
Joined: Feb 2003
Location: Sestri Levante (GE)

Post by ayakuccia_o.O » 30/01/2009 19:54

a me è iniziato a venire il mal di testa dopo le prime 2 righe di topic... :fuso:

skazzo
Veteran
Veteran
Posts: 1243
Joined: Aug 2003
Location: Sestri Levante (GE)

Post by skazzo » 30/01/2009 19:55

ayakuccia_o.O wrote:a me è iniziato a venire il mal di testa dopo le prime 2 righe di topic... :fuso:
del resto al mondo esistono solo 10 tipi di persone: quelle che capiscono il codice binario e quelle che non lo capiscono




scusate... è vecchia ma ci stava ^^

User avatar
Shauron_o.O
Veteran
Veteran
Posts: 1703
Joined: Jan 2007
Location: Napoli
Contact:

Post by Shauron_o.O » 30/01/2009 20:05

io sta farse l'ho capita 2mesi fa :P
cmq grazie mano,usero il tuo post come tesina all'esame per sistemi :laugh: :laugh:
Image

Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests