Casino online









Mercato forex






Fondamenti di informatica



In questo breve tutorial spiegherò alcune cose riguardo al data storing, ossia a come i dati vengono immagazzinati in memoria, scendendo a livello più basso di come un normale utente è abituato. Parlerò di basi numeriche, di suddivisione in bit, di endianness e di altri interessanti ammenicoli informatici.


Codifica binaria ed esadecimale
Le basi numeriche più usate nel campo del data storing sono la binaria e l'esadecimale. La prima perchè permette di scendere a livello della macchina e di ispezionare a fondo le informazioni; la seconda perchè permette di far stare in meno spazio i byte (il massimo valore raggiungibile da un byte è 255, ossia esadecimale FF... si risparmia un carattere per visualizzarlo), ma soprattutto per ragioni di praticità a me oscure.
Nella base binaria, le cifre disponibili sono due: 0 e 1. Non ci sono decine, centinaia e migliaia (ossia potenze di dieci), ma duine, quartine e ottine (ossia potenze di due, dato che siamo in base 2). Se, infatti, in decimale il numero 145 assume il significato di 1 centinaio + 4 decine + 5 unità, allora in binario il numero 101 assumerà il significato di 1 quartina, 0 duine e 1 unità (ossia 4 + 1 = 5). Esattamente come in decimale, la n-esima cifra a sinistra sarà moltiplicata per 2n-1:
11001 = 
1 * 24 + 1 * 23 + 0 * 22 + 0 * 21 + 1 * 20 = 
16 + 8 + 0 + 0 + 1 =
25
Nei successivi tutorial, i numeri in base 2 saranno evidenziati in blu.
In base 16, invece, ci sono, ovviamente, 16 cifre disponibili: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e ed f. Le lettere rappresentano gli interi decimali (notare il gioco di parole) da 10 a 15. Anche qui non ci sono migliaia, centinaia e decine, ma gruppi dal nome impronunciabile di 4096, 256 e 16. Ad esempio, il numero a5b assumerà il significato di 10 256ine + 5 esadecine + 11 unità. Esattamente come in decimale, la n-esima cifra a sinistra sarà moltiplicata per 16n-1:
2a7e = 
2 * 163 + 10 * 162 + 7 * 161 + 14 * 160 = 
8192 + 2560 + 112 + 14 = 
10878
Nei successivi tutorial, i numeri in base 16 saranno evidenziati in verde.


Byte, bit, word, nybble... facciamo un po' di ordine
L'unità minima di informazione che il compuer riesce a processare è il bit, che da solo può assumere i valori 0 e 1. L'insieme di 4 bit è un nybble, unità di misura usata molto poco, che può assumere valori da 0 (0000) a 15 (1111). L'insieme di 8 bit, o due nybble, è il byte, il pacchetto d'informazione per eccellenza, che può assumere valori da 0 (00000000) a 255 (11111111). Altre unità di misura comunemente usate in data storing sono la word (2 bytes = 4 nybbles = 16 bits) e la double word o dword (= 2 words = 4 bytes = 8 nybbles = 32 bits). A tutte queste unità, che sono in qualche modo multipli del bit, è possibile associare uno qualsiasi dei prefissi stabiliti dal Sistema Internazionale (SI) o dall'Institute of Electrical and Electronics Engineers (IEEE). Facendo un rapido ripasso:

SI IEEE
Prefisso (sigla) Fattore Prefisso (sigla) Fattore
Kilo (k) 103 Kibi (ki) 210
Mega (M) 106 Mebi (Mi) 220
Giga (G) 109 Gibi (Gi) 230
Tera (T) 1012 Tebi (Ti) 240
Peta (P) 1015 Pebi (Pi) 250
Exa (E) 1018 Exbi (Ei) 260


Endianness
"It is allowed on all hands, that the primitive way of breaking eggs, before we eat them, was upon the larger end; but his present majesty's grandfather, while he was a boy, going to eat an egg, and breaking it according to the ancient practice, happened to cut one of his fingers. Whereupon the emperor his father published an edict, commanding all his subjects, upon great penalties, to break the smaller end of their eggs. The people so highly resented this law, that our histories tell us, there have been six rebellions raised on that account; wherein one emperor lost his life, and another his crown. These civil commotions were constantly fomented by the monarchs of Blefuscu; and when they were quelled, the exiles always fled for refuge to that empire. It is computed that eleven thousand persons have at several times suffered death, rather than submit to break their eggs at the smaller end. Many hundred large volumes have been published upon this controversy: but the books of the Big-endians have been long forbidden, and the whole party rendered incapable by law of holding employments."
Jonathan Swift, Gulliver's Travels, Book 1, Chapter IV

Traduzione:
"È evidente da tutti i punti di vista che il primitivo modo di rompere le uova prima di mangiarle era dalla parte dell'estremità più grande; ma, quando era ragazzo, al nonno di sua maestà, volendo mangiarsi un uovo e rompendolo secondo quell'antica pratica, accadde di tagliarsi un dito. Dopodiché, l'imperatore suo padre pubblicò un editto ordinando a tutti i suoi sudditi sotto la minaccia di grandi pene di rompere le uova dalla parte dell'estremità più piccola. La gente si risentì in tal modo che - la nostra storia ce lo dice - ci furono sei ribellioni scoppiate con questa giustificazione; un imperatore perse la vita, e un altro la corona. Questi moti di popolo erano costantemente fomentati dai monarchi dell'isola di Blefuscu; e quando loro [i ribelli] venivano repressi, gli esiliati andavano sempre a rifugiarsi presso quell'impero. È calcolato che 1100 persone, in più occasioni, preferirono sopportare la morte, piuttosto che sottomettersi a rompere le uova alla parte piccola. Molte centinaia di libri importanti furono pubblicati circa questa controversia: ma i libri dei Big-endians sono stati dimenticati a lungo, e la totalià di essi fu resa incapace dalla legge di mantenere un impiego."

Da questa bella storiella tratta dai viaggi di Gulliver, romanzo di Jonathan Swift, possiamo trarre due importanti conclusioni: È da qui infatti che derivano i termini Big-Endian e Little-Endian e, quindi, anche il concetto di Endianness, che ora cercherò di spiegare.
Quando un byte viene posto nella memoria, i suoi bit non sempre vengono scritti nell'ordine logico in cui si trovano, ma seguono un altro tipo di ordine, che varia a seconda della famiglia di processori a cui la macchina appartiene. In genere, tutti gli Intel usano il modo Little-Endian, mentre Motorola e IBM usano il Big-Endian. In quest'ultimo, il bit più significativo viene posto all'inzio del byte. Dato che si indica il bit più significativo con Most Significant Bit (MSB) e quello meno significativo con Least Significant Bit (LSB), il byte avrà questa struttura, dove ogni numero rappresenta un bit:
MSB 7 6 5 4 3 2 1 0 LSB
|---|             |---|
Il MSB è quel bit che rappresenta il valore più alto. Ad esempio, nel numero 101101 (45), il MSB è il primo 1, che rappresenta 1 * 24. Infatti, ammettiamo che questo numero venga trasferito da un computer ad un altro e che, per un motivo sconosciuto, si perda parte dell'informazione: sarebbe più conveniente perdere il primo bit (ottenendo 001101=13) o l'ultimo (ottenendo 101100=44)? Indubbiamente la seconda, poiché si ha un errore molto più piccolo (44 invece che 45). L'architettura Big-Endian, quindi, pone i MSB all'inizio.
Il sistema Little-Endian pone i MSB alla fine, arrivando a soluzioni piuttosto strane. Considerate una word in Little-Endian: l'ordine dei bit quale sarà?
LSB 8 9 10 11 12 13 14 15 MSB     LSB 0 1 2 3 4 5 6 7 MSB
|---|      Byte 1      |----|     |---|   Byte 2    |---|
Come si vede dallo schema, ogni byte va per proprio conto. Il motivo per cui viene usato il Little-Endian mi è oscuro...





 

The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.