sabato 12 gennaio 2013

Nozioni base sulla memoria (parte II)


Eccoci qui cari signori, come promesso, a continuare la "lezione" sulle nozioni riguardanti la MEMORIA.



SWAP


Quando la RAM è satura di dati operativi,ma il sistema necessita di ulteriore spazio di archiviazione viene utilizzato il disco fisso.
Generalmente il sistema operativo crea un file (nel caso di sistemi Windows) o una partizione (come fa ad esempio Linux) di memoria virtuale da utilizzare come fosse una sorta di RAM aggiuntiva. Questa memoria virtuale è detta SWAP, e la sua dimensione
solitamente è dinamica in base alle necessità.

Con il termine swap si intende, l'estensione della capacità della memoria volatile complessiva del computer, oltre il limite imposto dalla quantità di RAM installata, attraverso l'utilizzo di uno spazio su un altro supporto fisico, ad esempio il disco fisso.
A seconda del S.O. utilizzato è possibile avere file di swap, residenti nel normale file system, o partizioni di swap, cioè sezioni disco dedicate ed inizializzate con un particolare file system.

L'uso della partizione è generalmente migliore dal punto vista delle prestazioni, perché evita che lo swap vada soggetto alla frammentazione tipica di alcuni file system. Per contro, occupa
una delle (poche) partizioni disponibili sul disco fisso.

In pratica, se la memoria RAM libera non è più sufficiente a contenere tutte le informazioni che servono ai programmi, il sistema operativo si farà carico di spostare una certa quantità di dati (i più obsoleti) dalla memoria volatile a quella di massa, liberando una parte della RAM per permettere il corretto funzionamento dei
programmi. Nel momento in cui si rende necessaria tale operazione, le prestazioni del sistema crolleranno bruscamente.



MMU


In un sistema dotato di memoria virtuale, il processore e i programmi si riferiscono alla memoria centrale con indirizzi logici, virtuali, che vengono tradotti in indirizzi fisici reali da
una unità apposita, la MMU o Memory Management Unit che in genere è incorporata nei processori.

La MMU svolge i seguenti compiti:

Traduce l'indirizzo logico in indirizzo fisico
Controlla che l'indirizzo fisico corrisponda a
una zona di memoria fisicamente presente nella memoria centrale
Se invece la zona in questione è nello spazio
di swap, la MMU solleva una eccezione di page fault e il    processore si occupa dimcaricarla in memoria centrale, scartando una pagina già presente.


Questo meccanismo ha un prezzo in termini di prestazioni: la MMU impiega del tempo per tradurre l'indirizzo logico in indirizzo fisico, e
ce ne vuole molto di più per caricare una zona di memoria dallo spazio di swap: in ultima analisi quindi, implementare una memoria virtuale significa sacrificare potenza di calcolo per poter eseguire un maggior numero di processi contemporanei (il famosissimo Multitasking).



Memoria Virtuale


Esistono principalmente due modi di implementare un sistema di memoria virtuale: dividere la memoria in tante pagine identiche,
gestite dall'hardware, oppure lasciare che sia il programmatore e/o il compilatore a "segmentare" il proprio programma in più segmenti indipendenti. Entrambi i metodi presentano vantaggi e svantaggi: in questi ultimi tempi tuttavia il sistema più usato è la memoria paginata.




Memoria Paginata
Memoria Virtuale

Storia


All’inizio dell’era dei calcolatori, le memorie erano piccole e care. Il 650 IBM, il calcolatore scientifico più importante in quei tempi (fine anni ‘50) aveva solo 2000 parole di memoria.
In quei giorni i programmatori passavano il loro tempo cercando di comprimere i programmi in memorie piccolissime. Spesso si sceglieva un algoritmo più lento, ma più piccolo, solo perché il primo non stava in memoria e quindi non poteva essere eseguito.
La soluzione a questo problema era di usare una memoria secondaria, come un disco. Il programmatore divideva il programma in pezzi chiamati overlay ognuno dei quali poteva stare in memoria. Per eseguire il programma si inseriva il primo overlay e lo si
eseguiva; quando era finito, leggeva l’overlay successivo e lo chiamava, ecc.
Il programmatore era responsabile della divisione del programma in overlay, e doveva decidere dove doveva essere tenuto ogni overlay nella memoria secondaria, curare gli spostamenti degli overlay tra memoria centrale e secondaria e in generale gestire tutta l’elaborazione degli overlay senza nessun aiuto dall’elaboratore.

Nel 1961 un gruppo di studiosi di Manchester, proposero un metodo per l’esecuzione automatica della gestione degli overlay, senza
che il programmatore sapesse neppure che cosa stava succedendo.
Questo metodo, ora chiamato memoria virtuale ha l’ovvio vantaggio di liberare il programmatore da un sacco di lavoro
amministrativo.

Memoria Paginata


Con questo schema la memoria viene divisa in pagine tutte della stessa grandezza (4 o 8 KB): i programmi non hanno bisogno di sapere nulla su come è organizzata la memoria e non devono avere nessuna struttura interna particolare; l’esatta ubicazione e disposizione fisica della memoria che occupano non li riguarda e tutto il sistema di memoria virtuale è gestito dalla MMU attraverso un complesso sistema di registri associativi.

L’idea proposta dal gruppo di Manchester fu di separare i concetti di:
➡ Spazio di Indirizzamento
➡ Locazioni di memoria (spazio fisico
disponibile)

Un calcolatore con un campo di indirizzamento (bus) di 16 bit e con 4096 (4 KB) parole (es. byte) di memoria fisica può indirizzare 65536 parole di memoria. La ragione è che esistono 216 = 65536 indirizzi di 16 bit.
Il numero di parole indirizzabile dipende solo dal numero di bit nell’indirizzo e non è in alcuna relazione con la memoria fisica
disponibile.

L’idea di separare lo spazio di indirizzamento e gli indirizzi di memoria, è la seguente. In qualsiasi istante si può accedere direttamente a 4096 parole di memoria, ma queste non corrispondono necessariamente agli indirizzi da 0 a 4095.
Potremmo, per esempio “dire” al calcolatore che da ora in poi , tutte le volte che si dà l’indirizzo 4096, deve essere usata la parola 0; quando si dà il 4097, si deve usare la 1, ecc.



Page Fault


Cosa succede se un programma salta ad un indirizzo tra 8192 e 12287?
Nella macchina senza memoria virtuale il programma provoca una trap per l’errore e termina.
Nella macchina con memoria virtuale si verifica la seguente sequenza di passi:

* i contenuti della memoria centrale sono salvati in una memoria  secondaria;
le parole da 8192 a 12287 sono localizzate nella memoria secondaria;
le parole da 8192 a 12287 sono caricate in memoria centrale;
* la mappa degli indirizzi viene cambiata per rappresentare gli indirizzi da 8192 a 12287 sulle locazioni di memoria da 0 a 4095;
* l’esecuzione continua come nulla fosse.



Memoria Paginata


Questa tecnica per l’esecuzione dell’overlay automatico è chiamata paginazione e i pezzi di programma letti dalla memoria secondaria sono detti pagine.
Chiameremo spazio di indirizzamento virtuale gli indirizzi a cui il programma può fare riferimento e spazio di indirizzamento fisico gli
indirizzi di memoria effettivamente cablati. Una mappa di memoria mette in relazione gli indirizzi virtuali con quelli fisici.
I programmi sono scritti come se ci fosse abbastanza memoria centrale per l’intero spazio di indirizzamento virtuale, anche se ciò
non si verifica. I programmi possono caricare o memorizzare una qualsiasi parola nello spazio di indirizzamento virtuale, o saltare ad
un’istruzione localizzata in un posto qualsiasi entro uno spazio di indirizzamento virtuale, senza preoccuparsi che in realtà non ci sia
abbastanza memoria fisica.



Come funziona


Un requisito essenziale per una memoria virtuale è una memoria secondaria in cui tenere il programma completo. E’ più semplice
se si pensa alla copia del programma nella memoria secondaria come all’originale e ai pezzi portati nella memoria centrale come a delle copie. Naturalmente è importante tenere aggiornato l’originale. Quando si operano combiamenti alla memoria centrale, questi devono prima o poi essere riflessi nell’originale.
Lo spazio di indirizzamento virtuale è diviso in un certo numero di pagine di ugual dimensione, per es. 4 KB. Lo spazio di indirizzamento fisico è diviso in pezzi della stessa dimensione chiamati page frame. Da qui non mi spingo oltre visto la pesantezza dell'argomento.

Quindi cari miei in campana e alla prossima ed ultima parte.
Ciao da Dani!


venerdì 11 gennaio 2013

Addio Messenger


Giorno gente!
Una piccola conferma arrivata da Microsoft:


  • Il 15 Marzo Messenger chiude i battenti!




Il 15 marzo Messenger chiude e gli utenti sono invitati a passare a Skype, come ha annunciato Microsoft. Coloro che usano Messenger hanno ricevuto un’e-mail, che li ha informati della sospensione del servizio, il quale verrà chiuso in tutto il mondo, tranne che in Cina. Mentre si continuerà ancora per poco ad usare il proprio account, man mano si potrà effettuare il passaggio a Skype. Il colosso di Redmond ha specificato che gli utenti saranno guidati nello scoprire nuove modalità per rimanere in contatto, utilizzando sia i cellulari che il tablet e il PC.
Verrà infatti mostrato un apposito banner di notifica, mediante il quale gli utenti vengono invitati ad utilizzare Skype. Se si fa clic sul banner, si può scaricare e installare il software VoIP.
Al contrario, Messenger viene disinstallato in maniera automatica. Tutto ciò accade fino a metà marzo. A partire dal 15 di quel mese, gli utenti non potranno più accedere a Messenger.
E’ da specificare comunque che il banner in questione verrà visualizzato soltanto da chi utilizza una versione più recente del noto programma di messaggistica istantanea.
Chi si serve di un dispositivo Android può accedere a Skype utilizzando il proprio account Messenger, continuando a mantenere i propri contatti. Questa funzione per i dispositivi Android sarà disponibile a partire dalle prossime settimane, è messa a disposizione fin da ora invece per chi ha un iPhone.
Microsoft ha comprato Skype due anni fa e fin dall’inizio ha fatto sapere di avere grandi progetti riguardo a questa acquisizione. Qualche mese fa era stato annunciato che Windows Live Messenger sarebbe stato chiuso e Microsoft avrebbe puntato su Skype.
Le promesse a quanto pare sono state mantenute, anche perché l’azienda si è impegnata a promuovere un’integrazione di Skype nei suoi prodotti, anche in Office. Le prospettive future per Skype quindi sono molto invitanti, anche perché il servizio offre tantissime opportunità.
Non si tratta soltanto di comunicare per mezzo di messaggi istantanei, ma si possono fare anche videochiamate e telefonate via IP. Da non dimenticare neppure le videochiamate di gruppo, che sono disponibili per gli abbonati a Skype Premium.
Tra l’altro (e non è un elemento da sottovalutare) Skype è disponibile per PC, per Mac, per iPhone, iPad, Kindle Fire e Android. E Microsoft sta anche progettando di metterlo a disposizione per Windows Phone 8. Gli utenti quindi non potranno restare delusi dalle possibilità di continuare a rimanere in contatto con i loro amici.

Questo è quanto amici miei, tristi o felici, le cose d'ora in avanti andranno così....Che la casa di Redmon tiri fuori qualche sorpresina dal cilindro?
Ai posteri l'ardua sentenza...
A prestissimo!
Dani


lunedì 7 gennaio 2013

Nozioni base sulla memoria (parte I)


Sera signori...
Era un pò che non ci si sentiva, ma sapete tra una festa e l'altra.....
Comunque eccoci qui con una bella lezione sulla memoria del nostro beneamato pc:
- RAM
-Parity ed ECC
-Funzionamento
-Bus e Processori
-e così via....



  • Memoria

In generale

Le memorie di un computer sono quei dispositivi elettronici e meccanici che permettono la memorizzazione temporanea o
definitiva delle informazioni e dei risultati delle elaborazioni. La più importante è la cosiddetta Memoria Centrale (primary storage = memoria principale), composta dalla memoria RAM e ROM (oltre alla cache), collegata direttamente alla CPU.
Alla memoria Centrale si contrappone la cosiddetta Memoria di massa (o memoria secondaria), costituita dai dispositivi necessari
per l'archiviazione dei dati: essa si compone di dischi magnetici (Hard Disk, Floppy Disk, Zip, Jazz, ...), ottici (CD-Rom, DVD, ...) o magnetoottici che utilizzano un insieme delle due tecnologie.


RAM
Random Access Memory

La memoria RAM (Random Access Memory = memoria ad accesso casuale) è quella componente del PC dove vengono temporaneamente memorizzati i dati che devono essere utilizzati dalle applicazioni in uso, in modo che essi siano immediatamente
disponibili. Il processore infatti legge i dati memorizzati sull'hard disk e li carica temporaneamente nella memoria RAM, la
quale è molto più veloce del disco fisso.
In buona parte le prestazioni generali del computer dipendono dalla sua quantità: infatti maggiore è la memoria RAM disponibile,
minore sarà il numero delle volte che il processore dovrà leggere i dati dall'hard disk, operazione che rallenta l'elaborazione in
quanto i tempi di accesso alla RAM sono in nanosecondi, quelli del disco fisso in millisecondi! (1000 volte più lento)
La quantità di RAM attualmente necessaria per un buon funzionamento di un computer è di circa 2000/4000 MB. Essa è detta "ad accesso casuale" in quanto il processore è in grado di
leggere il contenuto della memoria in modo diretto, indipendentemente dal fatto che esso sia collocato all'inizio o alla fine della stessa e quindi con i medesimi tempi di accesso e lettura.
Tale memoria è detta anche volatile in quanto allo spegnimento del computer i dati in essa contenuti vengono cancellati, al contrario di
quanto invece accade con le memorie di massa. La RAM è costituita da piccoli chip installati su moduli chiamati Simm (Single Inline Memory Module) o su Dimm (Dual Inline Memory Module). I tempi di accesso sono di 60-70 nanosecondi per i moduli Simm
e di 10-12 nanosecondi per quelli Dimm. Questo è sempre valido, nonostante le RAM di oggi hanno dei valori TIMING ben diversi, sopratutto parlando nel caso specifico di unità RAM adatte al santo overclock.





Parity ed ECC

Per quanto riguarda invece la memoria con controllo di parità (o di tipo parity), si fa riferimento a quel particolare tipo di memoria che controlla che i dati vengano o meno corrotti durante la loro elaborazione e, se questo accade, segnala l'errore. Il controllo sui dati viene effettuato utilizzando un bit di controllo, detto parity bit, ed è per questo che ogni byte che proviene dalla memoria di tipo parity ha 9 bit e non 8.
La memoria parity segnala la presenza di un errore ma non fa nulla per correggerlo; per questo motivo è stata introdotta la memoria
ECC (Error Correcting Code) che salvaguardia l'integrità dei dati e corregge eventuali errori: per tale caratteristica la memoria ECC viene utilizzata per quelle applicazioni dove la salvaguardia dei dati è di essenziale importanza, quali ad esempio i server.



Funzionamento
Random Access Memory

La memoria RAM è formata da migliaia di piccole celle di memoria, ciascuna con capacità di un byte, ossia, come si è detto, una sequenza di 8 bit che, opportunamente combinati tra loro, possono rappresentare uno qualsiasi dei 256 caratteri ASCII.
Ogni cella di memoria si identifica tramite un indirizzo, allo stesso modo in cui ogni casa in cui abitiamo è identificata in maniera univoca da un indirizzo e da un numero. Per definire gli indirizzi delle celle il computer utilizza il bus di indirizzi: questo è costituito da un certo numero di linee di 1 bit ognuna, attraverso le quali viaggiano in parallelo gli indirizzi di memoria.
Per esempio, immaginiamo che un computer invii in un certo momento il bus di indirizzi di 8 bit:





Ogni linea invia 1 bit (uno 0 o un 1) e l'indirizzo che ne risulta è 10000011, che corrisponde al valore decimale 131. Più semplicemente, 10000011 è l'indirizzo della cella di memoria 131, la quale immagazzinerà un dato valore: è importante notare la differenza tra l'indirizzo di una cella di memoria (che identifica la posizione della cella nel complesso delle celle di memoria) ed il contenuto della cella (ossia uno dei 256 byte).
Immaginiamo adesso che un computer disponga di un bus di indirizzi di 2 linee: con sole 2 linee di 1 bit, il computer può fare
riferimento solo a 4 indirizzi di celle per volta: 00, 01, 10 e 11. E se ci sono solo 4 indirizzi, si può accedere solamente a 4 celle di memoria di 1 byte; cioè si può accedere a 4 byte, malgrado la presenza di una memoria RAM, per dire, di 8 Mb.
È chiaro che non esistono computer con un bus di indirizzi di 2 linee, ma l'esempio appena mostrato ci dice una cosa molto importante: una memoria capace non è sufficiente, in quanto, affinché questa possa essere interamente utilizzata dal computer, occorre anche un adeguato bus di indirizzi.



Bus e Processori

Una delle principali differenze tra i microprocessori riguarda proprio il numero di linee del bus di indirizzi, e l'evoluzione dei
microprocessori ha riguardato in primo luogo il bus di indirizzi. Il microprocessore 8086 (ed anche l'8088 a chi se li ricorda ancora...) aveva un bus di indirizzi di 20 bit (20 linee di 1 bit), sicché il numero massimo di indirizzi che si potevano identificare era 1.048.576 (220), vale a dire 1024Kb (1Mb, se si preferisce).
Si può dire, grosso modo, che i 1024Kb si dividono in due blocchi: i primi 640Kb - da 0 a 640Kb (di un tempo) - si chiamano memoria convenzionale e i rimanenti 384Kb - da 640Kb a 1024Kb - si chiamano memoria superiore (vedremo più avanti il significato di questi diversi tipi di memoria).
La seconda generazione di microprocessori, i 286 (vecchie glorie!!),  avevano un bus di indirizzi di 24 bit, il che permetteva di gestire 16Mb di memoria (224 = 16.777.216): i primi 1024Kb si suddividono come sopra; la memoria tra 1024Kb e i 16Mb viene denominata memoria estesa.
P.S.:
gli esempi che sto riportando, che altro non sono che la storia dell'informatica di quasi 30 ormai, sono sempre validi al fine di capire l'architettura e funzionamento. Tutto qui, quindi non sono impazzito...(anche se qualcuno lo sperava ahahhah...)

Torniamo a noi.
Il microprocessore 386DX aveva un bus di indirizzi di 32 bit, con il quale si potevano indirizzare fino a 4096MB di memoria. Anche
in questo caso la memoria che eccedeva i 1024Kb è detta memoria estesa. Il 386SX è stato pensato come soluzione intermedia tra il 286 e il 386DX: dal punto di vista delle applicazioni eseguibili è del tutto uguale al 386DX, solo ha una velocità inferiore ed una memoria massima indirizzabile di 16MB.
Il mitico 486, presentato nel 1991, è anch'esso un microprocessore a 32 bit, ma ha una velocità e una potenza notevolmente maggiori
rispetto al 386 in quanto incorpora un coprocessore matematico, cioè uno speciale chip che si occupa di svolgere ad alta velocità
le operazioni matematiche, alleggerendo il lavoro del microprocessore centrale.
Chi non ricorda il Pentium? Anch'esso, la quinta generazione dei
microprocessori, era a 32 bit; incorporava un coprocessore matematico, ma integrava più di 3 milioni di transistor, contro il
milione e mezzo circa del 486 e i 28.000 dell'8086 (il Pentium II ne conteneva  addirittura 7,5 milioni).
Concludendo questa prima parte (non proprio leggerina...):





Per stasera vi ho tartassato un pochino e direi che va bene così....
Domani andiamo avanti on la seconda parte.
Sera a tutti e grazie per la vostra preziosa attenzione.
Ciau dal solitissimo Dani!!