Newsgroup: it.comp.aiuto
Titolo: RAM

Esiste qualcuno che mi sappia spiegare definitivamente
cosa sono e dove si trovano
Memoria Convenzionale
Memoria Estesa
Memoria Memoria alta
Memoria Espansa
(particolarmente la differenza tra memoria espansa ed estesa)
Grazie

(particolarmente la differenza tra memoria espansa ed estesa)
La memoria estesa e' uscita dopo l'espansa ed non usa mappature strane
che fanno perdere tempo...
Ahhhhhhhh, che bella l'architettura M680x0 :)
o   oooooo	Gian Uberto Lauri
      o    o	
sa...@maya.dei.unipd.it
     o o

Memoria Espansa
E` stato il primo tentativo di superare la barriera del primo MB di RAM;
usa[va] un misto di soluzioni software e hardware (specifiche LIM - Lotus,
Intel & Microsoft) e in pratica si usava rimappando segmenti da 64 KB nello
spazio di indirizzi del primo MB (ossia, scrivevi in XYZ, ma l'hardware 
rimappava il tutto altrove. Ovviamente prima istruivi il sistema perche'
compisse esplicitamente le operazionei di mappatura: un po' diverso dalla
gestione a memoria virtuale...).
Saluti,
Luca Polo.
-- 
+-----------------------------------------++---------------------------+
| Luca Polo   : 
ja...@gest.unipd.it
        || System administrator,     |
| (finger 
ja...@berica.gest.unipd.it
 for   || Ist. di Ing. Gestionale,  |
| address and phone numbers)              || Universita` di Padova.    |

Grazie
Ciao a tutti,
per meglio comprendere l'argomento penso possa essere utile una breve premessa.
L'architettura del PC originale (quello presentato dall'IBM nell'estate 1981)
era basata sul processore 8088 che (assieme al fratello 8086) dispone di 20
linee d'indirizzamento per la memoria ed è quindi in grado d'indirizzare
               2^20 =  1048576 locazioni di memoria,
pari per definizione a 1 Mb. In questo Mb dovevano quindi risiedere RAM e ROM
(BIOS, ROM di eventuali schede aggiuntive, ecc.); l'IBM decise di riservare gli
ultimi 384 Kb alle ROM e lasciare i restanti 640 Kb
              640 Kb = 1 Mb - 384 Kb = 1024 Kb - 384 Kb
alla RAM, la quale era disponibile sia al sistema operativo (in pratica il DOS,
visto che il CP/M fu presto abbandonato, e da qui il termine 'memoria DOS' con
cui si è soliti chiamare questi 640 Kb) sia ai programmi applicativi.
In tali 640 Kb, detti anche 'memoria convenzionale', dovevano risiedere anche
alcune importanti informazioni di sistema, come i vettori d'interrupt cui fu
riservato il primo segmento (1 segmento = 64 Kb nell'architettura Intel iApx86
cui appartiene l'8086/8088), i dati transienti e di configurazione del BIOS (da
non confondersi con la CMOS che è tutt'altra cosa), alcune strutture dati del
DOS, il kernel del DOS e, quando necessario, il 
COMMAND.COM
 (l'interprete dei
comandi DOS, quello per intenderci che è in esecuzione quando ci si trova al
prompt). In definitiva, di questi 640 Kb complessivi ne restano liberi
all'utente un po' meno: circa 500 Kb, quantità comunque molto variabile in
dipendenza dei device driver installati e di tante altre cose.
Ad ogni modo questi circa 500 Kb parevano, all'epoca, veramente tanti. Purtroppo
poco dopo ci si rese conto che non era cosí: i programmatori iniziavano a starci
un filo stretti e si cominciò a macchinare un metodo per aggirare questo limite.
Venne inventata la memoria ESPANSA. Essa consiste[va] in chip di memoria montati
su una scheda da inserirsi nel PC; questa memoria *non* era indirizzabile dal
processore 8086/8088 (che, si rammenti, per i suoi limiti intrinseci può gestire
1Mb) ma veniva trasferita a piccoli blocchi dall'elettronica della scheda in una
zona della RAM classica (quindi accessibile al processore) ampia di solito 64Kb,
detta buffer della memoria espansa o frame buffer, grazie ad opportuni driver di
gestione Expanded Memory Manager (EMM) operanti secondo le specifiche Expanded
Memory Specification (EMS). I vantaggi consistevano nel poter accedere a piú di
1Mb di RAM (sino a 32Mb, se ricordo bene); gli svantaggi nella lentezza che per
forza di cose derivava da un metodo cosí intricato. Comunque moltissimi
programmi applicativi ricorsero alle specifiche EMS e questo sistema prese piede
molto alla svelta.
Con la presentazione del processore 80286 l'Intel risolse il problema alla
radice fornendo un'architettura in grado d'indirizzare 24 linee, per un totale
di 16 Mb
                        2^24 = 16777216 -> 16 Mb
La memoria oltre il primo Mb venne chiamata 'memoria ESTESA' ed è quindi
radicalmente diversa da quella espansa (non tanto come elettronica dei chip, è
ovvio, quanto come impiego); peccato che per utilizzare questo nuovo
indirizzamento il processore debba funzionare in una modalità diversa da quella
dell'8086/8088 (quest'ultima venne detta 'modalità reale') ed incompatibile con
essa: la modalità 'protetta'. Per ovvie ragioni di compatibilità il 286 può
operare sia in modalità protetta che reale. Quindi, per trarre pieno vantaggio
dalle nuove funzioni del 286, era necessario riscrivere tanto il software
applicativo che, soprattutto, il sistema operativo. La Microsoft decise di
pensare ad un s.o. nuovo (XENIX, Windows, OS/2) e mantenere il DOS cosí com'era
o con poche modifiche. Altre case iniziarono a proporre adattamenti dello Unix e
altri s.o.
A questo punto l'inerzia del mercato frenò moltissimo lo sviluppo e la
diffusione di software di moderna concezione e continuò ad usare per anni i
vecchi standard EMS piuttosto che i nuovi eXtended Memory Specification (XMS)
con i quali si offriva un modo per accedere alla memoria estesa. Inizialmente
l'unico vantaggio fu la possibilità di non montare piú alcuna scheda di memoria
espansa e di simularne la presenza tramite quella estesa: a tal scopo è
necessario installare un gestore di memoria espansa (es. EMM386, QEMM, ecc.) che
intercetti le chiamate rivolte alla scheda e, in risposta, trasferisca dati
dalla memoria estesa al frame buffer della memoria espansa; con questo trucco i
vecchi programmi credono di disporre ancora di memoria espansa, ma in realtà
stanno utilizzando quella estesa con un metodo cervellotico ma funzionante (e
lento).
Sempre in cerca di ogni possibile byte di RAM, i programmatori si resero conto
che sfruttando una peculiarità dell'architettura dei processori è possibile
accedere al primo segmento (64 Kb) oltre il primo Mb di RAM senza passare in
modalità protetta: tale segmento prese il nome di 'memoria ALTA' che non va
confusa con i 384 Kb del primo Mb in cui risiedono BIOS, ROM ed altro (vedi
sopra). Da qui, per di piú, nasce la questione della linea A20, ma questo è un
altro discorso.
Altri pensarono invece che i 384 Kb delle ROM potevano non essere sempre tutti
impiegati: fra una ROM e l'altra esistono blocchi non usati che si possono
impiegare come RAM. Vengono chiamati Upper Memory Blocks (UMB) e possono essere
gestiti da buoni driver, come HIMEM.SYS o, a mio parere meglio, QEMM.
Caricando programmi TSR un po' in memoria alta un po' negli UMB si evita di
occupare memoria convenzionale e ciò permette di rendere disponibili quasi tutti
i teorici 640 Kb. Con trucchi simili si può addirittura oltrepassare questo
limite ed arrivare ai 700 Kb e oltre.
L'avvento dell'80386 migliorò la situazione per quanto riguarda la velocità nel
gestire il passaggio protetta-reale ed introdusse la modalità virtuale, tutte
cose belle ed utili ma che necessitano, per essere sfruttate al meglio, d'un
s.o. adeguato.
Oggigiorno sono state sviluppate moltissime tecniche, come i rimappaggi, che
consentono di spremere sempre piú bytes, tuttavia si tratta di compromessi che
hanno SEMPRE lo svantaggio della lentezza e, talvolta, dell'inaffidabilità o
dell'incompatibilità. Questo è uno dei motivi per cui *l'unico* modo per spazzar
via tutta questa problematica è passare ad un sistema operativo MODERNO (es.
Windows NT, Unix, OS/2 e simili) che operi sempre in modalità protetta e faccia
uso normale della memoria estesa. 
Comunque, in sintesi:
MEMORIA CONVENZIONALE (O MEMORIA DOS)
  I primi 640 Kb circa di RAM.
MEMORIA DOS LIBERA
  Parte dei 640 Kb effettivamente disponibili ai programmi.
MEMORIA ESPANSA
  Memoria fisica (vecchi computer) o simulata tramite memoria estesa (nuove
architetture) utilizzabile tramite specifiche EMS o standard LIM.
MEMORIA ESTESA
  Memoria fisica oltre il primo Mb disponibile su processori 80286 (20 linee
d'indirizzamento = max 16 Mb), su 80386 (32 linee = max 4 Gb) o successivi;
utilizzabile secondo specifiche XMS o sistemi operativi adeguati.
MEMORIA ALTA
  Segmento di 64 Kb situato subito dopo il primo Mb di memoria, utilizzabile in
DOS per caricare programmi TSR e simili allo scopo di liberare un po' di memoria
convenzionale.
UPPER MEMORY BLOCKS (UMB)
  Vari blocchi di memoria situati nei 384 Kb in origine destinati alle sole ROM;
stessi usi della memoria alta.
Per finire, vorrei sottolineare che con s.o. di concezione moderna non ha piú
senso parlare di memoria espansa, alta, UMB e tutte queste storie. Esiste solo
memoria, utilizzabile attraverso chiamate al s.o. che si occupa anche di evitare
pericolose sovrapposizioni ed altro. Come nei Mac, negli Amiga, nelle
Workstation, ecc.
Vogliano i tecnici perdonare la mia semplificazione.
Spero di essere stato, oltre che noioso, utile.
Ciao.
  Marco
          ------------------
Sistemista Aule di Calcolo facoltà di Scienze
Università di Milano
e-mail:   
c...@imiucca.csi.unimi.it
                 "Non si volta chi a stelle è fisso"
                                Leonardo da Vinci

Grazie.
Quanto al 'definitivamente', decidi tu, volendo l'argomento puo'
essere ulteriormente approfondito, comunque:
CONVENZIONALE
E' la memoria convenzionale del sistema, i primi 640KB, che possono
essere utilizzati dai programmi eseguiti in MS-DOS, PC-DOS ecc. senza
alcuna specifica istruzione (tralascio il discorso segmentazione,
offset ecc.)
ESTESA
E' fisicamente installabile solo con processori 286 o superiori ed
identifica tutta la memoria al di sopra dei 640KB, quindi anche i
famosi 384KB.
I programmi, a differenza della convenzionale, necessitano di
particolari istruzioni per riconoscere gli indirizzi piu' alti della
memoria estesa, e di un gestore della memoria estesa che si faccia
carico della stessa, impedendo che piu' programmi scrivano
contemporaneamente negli stessi indirizzi.
Lotus, Intel, Microsoft e AST si sono accordate per definire delle
specifiche comuni, divenute 'normativa standard' e denominate XMS
(eXtended Memory Specification), la cui ultima versione dovrebbe
essere la 2.0
Il gestore Microsoft conforme a dette specifiche e' HIMEM.SYS, quindi
questo e' il driver da caricare nel config.sys per aver accesso alla
memoria estesa secondo le specifiche XMS.
MEMORIA ESPANSA
E' nata molto prima della estesa ed era implementata, nei 286, su
apposite schede da inserire nello slot a 16 bit e sul relativo
gestore, un driver fornito insieme alla scheda.
Col tempo le stesse main board 286, in particolare quelle col chipset
SUNTAC e frequenze di clock 16-20 Mhz, hanno implementato il tutto su
main.
Oggi c'e' un particolare gestore che utilizza memoria estesa per
emulare memoria espansa, quindi nell'ordine vanno caricati:
- gestore memoria estesa
- gestore/simulatore memoria espansa.
I programmi possono utilizzare questa memoria espansa emulata come se
fosse memoria espansa fisica.
Sia le vecchie schede che gli attuali gestori di memoria espansa sono
conformi alle specifiche LIM/EMS 3.2 o 4.0
(LotusIntelMicrosoft/Extended Memory Specification)
Un programma sviluppato in modo da poter utilizzare memoria espansa
non ha accesso diretto alle informazioni in essa contenute: e' il
gestore che si incarica di una sorta di swapping delle memoria a
pagine.
La memoria espansa e' cioe' suddivisa in segmenti di 16KB chiamati
PAGINE. Qundo il programma necessita di informazioni contenute nella
memoria espansa, il gestore effettua il mapping oppure copia la
relativa pagina in un'area apposita chiamata PAGE FRAME. La page
frame, naturalmente, si trova nell'area di memoria superiore ed e'
accessibile grazie al gestore di memoria superiore (sic!).
Gli indirizzi della Page frame sono 14 e vanno da COOOh a 9000h,
mentre l'indirizzo del segmento di base per la page frame va da 8000h
a 9000h e da C000h a E000h, con incrementi di 400h.
E' facile intuire come la memoria espansa sia molto piu' lenta di
quella estesa.
Col programma Debug del DOS puoi divertirti ad impartire i seguenti
comandi:
Debug: XA  (Allocate Expanded Memory)
     : XD  (Deallocate Expanded Memory)
     : XM  (Map Expanded Memory Pages)
     : XS  (Display Expanded Memory Status)
Il gestore che utilizza memoria estesa per emulare memoria espansa e',
in MS-DOS, EMM386. Esistono poi altri gestori di terze parti, che in
genere riportano sempre nel nome la sigla EMM (QEMM386 ecc.)
Tali gestori si occupano anche di quella che tu chiami Memoria Memoria
Alta.
AREA DI MEMORIA SUPERIORE
Sono i primi 384KB di memoria estesa, cioe' quella parte della memoria
riservata in genere ad uso esclusivo del sistema e delle periferiche
che ne fanno uso.
Una volta avviati tutti i driver hardware ed effettuato lo shadowing
del bios e del video, rimangono inutilizzate alcune parti di
quest'area di memoria superiore: queste parti sono chiamate BLOCCHI DI
MEMORIA SUPERIORE o UMB (Upper Memory Blocks).
Il gestore di memoria espansa, oppurtunamente istruito/configurato,
recupera questi spezzoni di memoria e li rende disponibili per driver
software, TSR ecc.
Non e' detto che l'intero driver/TSR sia allocato in UMB, parte di
esso potrebbe essere caricato nei primi 640KB: il comando dos=umb nel
config.sys, aggiunto a dos=high, indica a MS-DOS di mantenere un
legame tra memoria convenzionale e memoria superiore, diversamente il
programma non potrebbe essere 'spezzettato'. Questo consente un
ulteriore risparmio di memoria convenzionale.
Esistono poi altri sistemi proprietari di gestione della memoria
estesa, come il DPMI (Dos Protected Mode Interface), sviluppato per la
versione 3.0 di Windows, il VCPI (Virtual Control Program Interface)
ed altri ormai caduti in disuso.
I commenti, su simile architettura, ve li risparmio, con una nota di
rammarico per quei sistemisti che trovano 'libidinoso' tale bailamme
di codice, solo perche' cammuffato dietro due o tre iconcine... 
Ciao.
mp
 -----------------------------------------------------------------------
 Maurizio Paganelli                        Tel.   +39 544 433566
 via Pietro degli Onesti, 57               Fax    +39 544 212306
 48100 Porto Fuori RA                                        
 Italy                                     E-mail 
mpaga...@linknet.it
 -----------------------------------------------------------------------

Ma con Windows 95 e con Windows NT come e' gestita la RAM ?


Il metodo di indirizzamento (alla buon'ora) e' il flat.
