Newsgroup: it.comp.programmare.win32
Titolo: Gestione memoria?

Salve a tutti. Qualcuno sa dirmi come Windows 95 gestisca la memoria?
Mi spego meglio. Se Win 9x e' a 32 bit, dovrebber girare in modalità
protetta in modo da indirizzare la memoria linearmente, giusto? Ma allora
perché per funzionare ha bisogno del driver HIMEM.SYS?
Inoltre c'è qualche differenza ad allocare memoria usando la funzione
GlobalAlloc, anzi che la standard malloc?
Grazie a tutti.

 wrote in message
7m5qe4$hb6$1...@nslave1.tin.it...



La gestione della memoria da parte di Win9x sui processori Intel,
al livello di dettaglio maggiore possibile non e' affatto semplice
(e talvolta neppure molto ben documentata).
Per una descrizione ad alto livello della gestione della memoria
in Win32 si consigliano i primi capitoli dei Richter, Advanced Windows,
in cui spiega come si possa chiedere al sistema operativo di
gestire lo spazio di indirizzamento del processo
(VirtualAlloc,VirtualQuery, pagine di guardia, flag sulle pagine)
e come abbia senso usare l'heap del proprio processo.
HIMEM.SYS viene usato per la modalita' virtuale x86 e per il boot.
L'implementazione di malloc e' strettamente dipendente da chi
ha scritto il RunTime del tuo compilatore C.
Sull'implementazione Microsoft malloc e' praticamente una chiamata
a HeapAlloc(GetProcessHeap(),flags,size), adeguatamente wrappata.
Altri potrebbero scegliere di implementarla diversamente.
GlobalAlloc() ha due modi di funzionare: con GMEM_MOVEABLE ti viene
restituito un handle ad un blocco di memoria, senza un puntatore.
In entrambi i casi (trascurando la traduzione handle-puntatore,
che viene fatta con un look-up ad una struttura dati interna)
GlobalAlloc() finisce per chiamare HeapAlloc().
BTW, non e' del tutto vero, nel senso che la vera chiamata per allocare
memoria dall'heap di processo e' RtlHeapAlloc, ma HeapAlloc e
RtlHeapAlloc fanno praticamente la stessa cosa.
Sent via Deja.com 
http://www.deja.com/
Share what you know. Learn what you don't.

spazio fisico che hai ..... il risultato ?  CRASH
Non so se win95 va in crash, pero` le cose in linea di principio
non vanno cosi`. Paginazione e memoria virtuale sono due tecniche
complementari, ma non dipendenti l'una dall'altra (nel senso che che
al posto della paginazione puoi utilizzare la segmentazione o come
nel caso di windows una tecnica mista segmentazione+paginazione,
oppure puoi non utilizzare la memoria virtuale).
La gerarchia "memoria virtuale-memoria centrale" ha il compito di
ottimizzare il sistema per l'esecuzione di piu` processi concorrenti
in modo che in ram ci siano porzioni significative di quanti piu`
processi possibili.
La paginazione (o altra tecnica) ha diverse funzioni volte in generale
a migliorare le performance del sistema.
La disabilitazione della memoria virtuale, costringe il sistema a mantenere
in ram ogni porzione di ogni processo in esecuzione, con la
conseguenza che il numero di processi in esecuzione deve essere tale che
la somma delle dimensioni dei loro spazi logici deve essere non maggiore
allo spazio fisico che ora e` costituito dalla ram (e non dal file di swap).
Non e` vero che gli spazi logici dei processi vengono a coincidere
sullo stesso spazio fisico (il sistema sa quali pagine logiche si
trovino in certe pagine fisiche), altrimenti la rilocazione a che serve?
Paolo
-----------------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------------------------