View Full Version : Superare il limite dei 3,25 GB di RAM tramite pagefile.sys: possibile?
E' noto che XP, Vista e Seven a 32 bit possono gestire al massimo 4 GB di RAM in teoria, in pratica il limite è inferiore e dipende dal PC, in genere il limite è di 3,25 GB.
Leggendo questo articolo sul sito della Microsoft (Comparison of 32-bit and 64-bit memory architecture for 64-bit editions of Windows XP and Windows Server 2003 (http://support.microsoft.com/kb/294418/en)) ho notato che il limite dei 4 GB riguarda anche la memoria virtuale, però il file pagefile.sys ha un limite di 16 TB (per XP, per le altre versioni non ho trovato informazioni).
Ho 2 domane a riguardo.
1) Che differenza c'è tra memoria virtuale, swap e il file pagefile.sys?
Fino ad adesso pensavo fossero la stessa cosa, ma visto l'articolo evidentemente non è così.
2) E' possibile con XP, Vista e Sever 32 bit superare il limite della RAM, tramite il pagefile.sys, cioè per esempio 3,25 GB (RAM) + 5 GB (pagefile.sys) = 8,25 GB (memoria totale)?
Anche se si avrà ovviamente un rallentamento consistente, visto che l'accesso all'hard disk è molto più lento di quello alla RAM, però se fosse possibile si eviterebbe almeno il blocco del sistema per memoria esaurita.
alecomputer
21-12-2009, 14:37
Qui trovi alcune risposte alla tue domande :
http://it.wikipedia.org/wiki/Paging
Il file pagefile.sys consigliano di settarlo a una dimensione doppia della ram fisica del pc , per evitare il messaggio "memoria insufficente " che appare in qualche occasione .
ronnydaca
22-12-2009, 00:27
Magari dico una fregnaccia, ma se il 4° gb di ram lo trasformiamo in ramdisk? mettendoci dentro il file di paging? o una parte? potrebbe essere quasi come avere 4gb?
Lo sò, è na ca.......a:D ma teoricamente i benefici quali sarebbero?
Io con il giga inutilizzato ho utilizzato ramdisk e ci ho collocato il readyboost,è poco ma fa qualcosa.
Il file di paging di 1Gb è praticamente inutile (troppo piccolo).
Qui trovi alcune risposte alla tue domande :
http://it.wikipedia.org/wiki/Paging
Il file pagefile.sys consigliano di settarlo a una dimensione doppia della ram fisica del pc , per evitare il messaggio "memoria insufficente " che appare in qualche occasione .
Ho letto la pagina indicata, forse ho le idee un po' più chiare, ma non sono sicuro, da quello che ho capito, riassumendo:
* pagefile.sys e swap sono la stessa cosa
* memoria virtuale = RAM + pagefile.sys (o swap) in uso
* pagefile.sys (o swap) = pagefile.sys (o swap) in uso + pagefile.sys (o swap) temporaneamente non in uso o non usato
se ciò fosse vero sarebbe plausibile una memoria virtuale di 4 GB reali (3,25 GB di RAM + 0,75 GB di pagefile.sys in uso), nel caso ci fosse la necessità di usare più memoria i dati temporaneamente non utili verrebbero spostati nel pagefile.sys non in uso liberando RAM e memoria virtuale, se tutto questo fosse vero la risposta alla mia domanda sarebbe, sì, è possibile superare il limite di 3,25 o 4 GB di memoria fino ad arrivare a 16 TB con sistemi a 32 bit (ovviamente sto parlando di memoria totale non RAM).
Sono gradite eventuali correzioni.
Provo a spiegarmi meglio con un esempio pratico, i valori che riporto sono indicativi, perché per esempio sarà molto difficile che quando la RAM è insufficiente vengano usati tutti o quasi i 3,25 GB disponibili, piuttosto che per esempio 3 GB o 2,5 GB, potrei scrivere cose errate, tuttavia lo scopo della domanda è proprio capire come funziona la gestione della memoria.
---Configurazione PC---
sistema operativo: 32 bit
RAM installata: 4 GB
RAM rilevata dal sistema operativo: 3,25 GB
dimensione fissa file pagefile.sys o swap: 5 GB
---Scenario 1---
memoria richiesta: 3 GB
memoria virtuale allocata: 3 GB
RAM usata: 3 GB
pagefile.sys o swap: 0 GB
---Scenario 2---
memoria richiesta: 4 GB
memoria virtuale allocata: 4 GB
RAM usata: 3,2 GB
pagefile.sys o swap: 0,8 GB
---Scenario 3---
memoria richiesta: 6 GB
memoria virtuale allocata: 4 GB
RAM usata: 3,2 GB
pagefile.sys o swap: 0,8 GB (in uso dalla memoria virtuale) + 2 GB (non in uso dalla memoria virtuale) = 2,8 GB
Nello scenario 1 il PC funziona senza problemi, però quando passo nello scenario 2 e 3 il PC rallenta perché usa l'hard disk come memoria aggiuntiva oppure si blocca?
Esatto, noterai importanti rallentamenti quando la ram fisica non sarà più sufficiente ed il sistema dovrà continuamente spostare aree di memoria dalla ram al disco e viceversa. Se hai un gioco che occupa 2GB (ad esempio) e apri altri programmi che richiedono complessivamente 3GB e li usi mentre il gioco è in pausa allora il sistema copierà la ram occupata dal gioco (non utilizzato in quel momento) nel disco. Se poi passi a riprendere a giocare, il sistema dovrà, copiare parte della ram occupata dai programmi nel disco e ricaricare dal disco stesso la parte relativa la gioco.. Tutto questo ti farà andare il pc a scatti
Pitagora
29-12-2009, 18:51
Guardate che il file di scambio non c'entra una mazza con la memoria fisica indirizzabile...
Puoi avere un file di scambio da 10 giga (auguri), e un sistema operativo a 32 bit che lo gestisce... Si pesca le informazioni dal disco ovunque siano e le piazza in RAM all'occorrenza nelle celle che può indirizzare... la dimensione del file di scambio non è discriminante... proprio per il motivo per cui è stato introdotto...
Questo è quello che speravo, tuttavia provando a fare una prova reale su XP per simulare lo scenario 2:
memoria richiesta: 4 GB
memoria virtuale allocata: 4 GB
RAM usata: 3,2 GB
pagefile.sys: 0,8 GB
quando la memoria richiesta raggiunge 3,5 GB non si avvia più nessuna applicazione, né si aprono i menu delle applicazioni, tuttavia il mouse e la tastiera funzionano correttamente, senza nemmeno rallentamenti, non capisco perché. :confused:
Un'altra domanda, nei sistemi operativi Windows non server a 32 bit la memoria virtuale ha sempre il limite di 4 GB, a differenza della RAM che può avere un limite inferiore dipendente dagli altri dispositivi da indirizzare (principalmente la/le schede video)?
Mr Burns
03-01-2010, 22:33
con win 32bit anche Dante direbbe: LASCIATE OGNI SPERANZA O VOI CHE CI PROVATE.....:D
Questo è quello che speravo, tuttavia provando a fare una prova reale su XP per simulare lo scenario 2:
memoria richiesta: 4 GB
memoria virtuale allocata: 4 GB
RAM usata: 3,2 GB
pagefile.sys: 0,8 GB
quando la memoria richiesta raggiunge 3,5 GB non si avvia più nessuna applicazione, né si aprono i menu delle applicazioni, tuttavia il mouse e la tastiera funzionano correttamente, senza nemmeno rallentamenti, non capisco perché. :confused:
Un'altra domanda, nei sistemi operativi Windows non server a 32 bit la memoria virtuale ha sempre il limite di 4 GB, a differenza della RAM che può avere un limite inferiore dipendente dagli altri dispositivi da indirizzare (principalmente la/le schede video)?
Per riportare la discussione in prima pagina...
nuovoUtente86
17-01-2010, 01:45
La memoria virtuale è la quantità di memoria che ogni processo (idealmente si può vedere come un programma in esecuzione, anche se non è detto che sia cosi) vede e può indirizzare(divisa idealmente a metà tra parte processo e parte kernel) indipendentemente dagli altri processi concorrenti e dall' hardware sottostante (ram effettivamente disponibile e scheda madre).Tale meccanismo è implementato con il concetto di swap ovvero l' utilizzo di una porzione della memoria di massa (indicato dal file di paging)per sopperire alla carenza di ram: in sostanza i dati eccedenti la ram vengono trasferiti, in unità di pagine, sul disco e a necessità (indicata dal page fault)riportati in ram e resi disponibili al processo proprietario. Quindi l' indirizzo effettivo di memoria è trasparente al processo ed è compito del MMU ricavarlo istantaneamente.
Ora un sistema a 32 bit può (per scelta commerciale più che tecnica dato che i bit di indirizzo disponibili a livello hw sono almeno 36 su piattaforma intel)indirizzare al più 4GB, da cui va sottratto il mapping delle periferiche che indirizzano nel medesimo spazio. E tale limite, nei sistemi home non è bypassabile in nessun modo: patch e PAE compreso(che funziona sui server), ne tantomeno con il ramdisk, dato che un programma utente non può indirizzare memoria non accessibile al SO.
Se il totale di memoria richiesta da tutti i programmi supera i 4 GB, il sistema operativo non può fornirgliela tramite lo swap sull'hard disk e quindi il sistema si blocca?
Se sì, quindi con 4 GB di RAM il pagefile.sys averlo impostato a 0, a 4 GB, a 10 GB o a qualsiasi altro valore non cambia nulla, perché comunque non lo userà comunque?
nuovoUtente86
18-01-2010, 12:04
i 4GB sono virtualmente allocati ad ogni processo e non in totale.
Se un processo necessità di una pagina di memoria che si trova sul file di paging sarà compito del sistema operativo (parte software) e del MMU (parte hardware) caricare la pagine dal disco alla memoria centrale e tradurre l' indirizzo virtuale in fisico affinche vi si possa accedere.
In realtà la divisione logica della memoria nei sistemi operativi Windows a 32bit è 2gb per il processo / 2gb per il kernel.
Un processo non può usare più di 2gb di ram.
Quei limiti possono essere impostati a 3gb/1gb passando un parametro al bootloader.
nuovoUtente86
18-01-2010, 14:08
già detto:
divisa idealmente a metà tra parte processo e parte kernel
sulla prima release di xp il rapporto era 3:1 successivamente con i Sp tornata a 2:2
i 4GB sono virtualmente allocati ad ogni processo e non in totale.
Se un processo necessità di una pagina di memoria che si trova sul file di paging sarà compito del sistema operativo (parte software) e del MMU (parte hardware) caricare la pagine dal disco alla memoria centrale e tradurre l' indirizzo virtuale in fisico affinche vi si possa accedere.
E' possibile avere una situazione del genere su Windows a 32 bit?
In RAM:
processo 1 -> 2 GB
Nel pagefile.sys:
processo 2 -> 2 GB
processo 3 -> 2 GB
processo 4 -> 1 GB
Tempo fa avevo letto da qualche parte che abilitando la modalità PAE era possibile in alcuni casi sfruttare i 4Gb anche su sistemi a 32 bit. Però andrebbe provato se funziona realmente, altro non so
Tempo fa avevo letto da qualche parte che abilitando la modalità PAE era possibile in alcuni casi sfruttare i 4Gb anche su sistemi a 32 bit. Però andrebbe provato se funziona realmente, altro non so
detto e ridetto 10000000 di volte.
Non funziona
E' possibile avere una situazione del genere su Windows a 32 bit?
In RAM:
processo 1 -> 2 GB
Nel pagefile.sys:
processo 2 -> 2 GB
processo 3 -> 2 GB
processo 4 -> 1 GB
con il pc che praticamente sarebbe piantato :D :D :D :D
detto e ridetto 10000000 di volte.
Non funziona
Beh per te saranno pure 1000000 o 100000000 volte che lo dici, ma per me è la prima volta che lo sento ;)
nuovoUtente86
20-01-2010, 15:05
E' possibile avere una situazione del genere su Windows a 32 bit?
In RAM:
processo 1 -> 2 GB
Nel pagefile.sys:
processo 2 -> 2 GB
processo 3 -> 2 GB
processo 4 -> 1 GB
No, il file di paging in realtà deve essere inversamente proporzionale alla RAM installata.
Forse mi sono spiegato male :(, riprovo riformulando la domanda in un altro modo.
In un PC con 4 GB di RAM, con gestione automatica della dimensione del pagefile.sys, con sistema operativo Windows 32 bit non server (quindi senza il PAE) in cui sono in esecuzione i seguenti processi con la relativa memoria richiesta:
processo 1: 2 GB
processo 2: 4 GB
processo 3: 1 GB
processo 4: 2 GB
Come potrebbero distribuirsi questi processi tra la RAM e il pagefile.sys?
Forse mi sono spiegato male :(, riprovo riformulando la domanda in un altro modo.
In un PC con 4 GB di RAM, con gestione automatica della dimensione del pagefile.sys, con sistema operativo Windows 32 bit non server (quindi senza il PAE) in cui sono in esecuzione i seguenti processi con la relativa memoria richiesta:
processo 1: 2 GB
processo 2: 4 GB
processo 3: 1 GB
processo 4: 2 GB
Come potrebbero distribuirsi questi processi tra la RAM e il pagefile.sys?
se i processi sono tutti attivi ti si pianta il pc perchè starebbe sempre a swappare tra ram e pagefile.sys
Se è attivo solo il 2 (gli altri iconizzati) tutti gli altri stanno nel pagefile.sys e verrebbero ripresi in ram quando verrebbro riattivati..
in entrambi i casi il pc sarebbe in pratica fermo o quasi
Se fosse attivo soltanto il processo 1, quindi avrei occupato 2 GB di RAM dal processo 1 e occupato 7 GB di pagefile.sys dai processi 2, 3, 4, con buone prestazioni (fino a quando non attivo gli altri)?
Se fosse attivo soltanto il processo 1, quindi avrei occupato 2 GB di RAM dal processo 1 e occupato 7 GB di pagefile.sys dai processi 2, 3, 4, con buone prestazioni (fino a quando non attivo gli altri)?
Non proprio, parte dei processi 2,3 e 4 rimarrebbero nella ram... Il sistema operativo occupa tutta la ram e poi swappa il resto quando non trova posto... il file sul disco è una risorsa da "estrema ratio" per il sistema operativo ma le prestazioni ne risentono moltissimo poichè l'accesso al disco è di almeno 3 ordini di grandezza più lento rispetto alla ram fisica
Le prestazioni rimangono accettabili fino a che la somma di tutti i processi caricati rimane al di sotto della quantità di ram fisica...Se superi il limite, lo swap comincia ad essere massiccio e le prestazioni decadono rapidamente all'aumentare della quantita di pagefile.sys utilizzato.
nuovoUtente86
28-01-2010, 12:32
se i processi sono tutti attivi ti si pianta il pc perchè starebbe sempre a swappare tra ram e pagefile.sys
Se è attivo solo il 2 (gli altri iconizzati) tutti gli altri stanno nel pagefile.sys e verrebbero ripresi in ram quando verrebbro riattivati..
in entrambi i casi il pc sarebbe in pratica fermo o quasi
non funziona esattamente cosi: la sostituzione delle pagine in ram segue algoritmi abbastanza complicati ed euristici, oltre che funzionare con il meccanismo di page-fault in fase di recupero(statico o dinamico-predittivo).
nuovoUtente86
28-01-2010, 12:37
Forse mi sono spiegato male :(, riprovo riformulando la domanda in un altro modo.
In un PC con 4 GB di RAM, con gestione automatica della dimensione del pagefile.sys, con sistema operativo Windows 32 bit non server (quindi senza il PAE) in cui sono in esecuzione i seguenti processi con la relativa memoria richiesta:
processo 1: 2 GB
processo 2: 4 GB
processo 3: 1 GB
processo 4: 2 GB
Come potrebbero distribuirsi questi processi tra la RAM e il pagefile.sys?dovresti avere un file di paging sproporzionato ed il sistama andrebbe in thrashing ovvero utilizzarebbe più tempo per la paginazione che per l' esecuzione dei thread.
Di questo ne sono consapevole, il mio era soltanto un esempio (più teorico che pratico) per capire in modo semplificato i limiti della memoria virtuale.
Non lo so, però penso che lo stesso processo in realtà possa torvarsi in parte in RAM e in parte nel pagefile.sys.
In teoria (in realtà è ovvio che il sistema diventa esageratamente lento molto prima per eccessivo scambio di dati tra RAM e pagefile.sys, cioè swap), in un sistema a 32 bit senza PAE potrei avere quindi in esecuzione al massimo (per riempire tutta la memoria) 4001 processi ognuno dei quali richiedente 4 GB di memoria (eccetto uno di 3,25 GB) per un totale di memoria virtuale di 16003,25 GB, essendo il limite del pagefile.sys di 16000 GB e della RAM mediamente di circa 3,25 GB (dipendente dalle altre cose da indirizzare nel PC), avrei una memoria virtuale massima di:
16000 GB (pagefile.sys) + 3,25 GB (RAM) = 16003,25 GB (memoria virtuale totale)?
e un numero massimo di processi (volendo per ognuno usare più memoria possibile):
16000 GB (pagefile.sys) / 4 GB (memoria virtuale massima per ogni processo) = 4000 processi
a cui si aggiunge il processo di 3,25 GB in RAM?
nuovoUtente86
29-01-2010, 00:09
Di questo ne sono consapevole, il mio era soltanto un esempio (più teorico che pratico) per capire in modo semplificato i limiti della memoria virtuale.
Non lo so, però penso che lo stesso processo in realtà possa torvarsi in parte in RAM e in parte nel pagefile.sys.
In teoria (in realtà è ovvio che il sistema diventa esageratamente lento molto prima per eccessivo scambio di dati tra RAM e pagefile.sys, cioè swap), in un sistema a 32 bit senza PAE potrei avere quindi in esecuzione al massimo (per riempire tutta la memoria) 4001 processi ognuno dei quali richiedente 4 GB di memoria (eccetto uno di 3,25 GB) per un totale di memoria virtuale di 16003,25 GB, essendo il limite del pagefile.sys di 16000 GB e della RAM mediamente di circa 3,25 GB (dipendente dalle altre cose da indirizzare nel PC), avrei una memoria virtuale massima di:
16000 GB (pagefile.sys) + 3,25 GB (RAM) = 16003,25 GB (memoria virtuale totale)?
e un numero massimo di processi (volendo per ognuno usare più memoria possibile):
16000 GB (pagefile.sys) / 4 GB (memoria virtuale massima per ogni processo) = 4000 processi
a cui si aggiunge il processo di 3,25 GB in RAM?
No frena. La memoria virtuale è proprio di ogni processo e non del sistema.
Ogni processo, in un sistema home, vede 4GB di memoria a sua disposizione, di cui 2GB sono a disposizione del kernel e gli altri 2 del processo nel quale spazio sarà allocata la sezione codice e i dati necessari.
Avere un file di paging enorme non serve perchè il sistema di bloccherebbe.
Il limite della ram, va ulteriormente diminuito, tenendo conto che parti vitali del sistema oltre che i driver ed eventuali buffer di I/O formano il pool non paginato, ovvero sono allocati in una zona non swappabile.
Appunto perché 4 GB sono disponibili per ogni processo e non per l'intero sistema, se il limite del file di paging è di 16 TB, non dovrebbero essere in teoria (in pratica non mi stupisco che il sistema si blocchi molto prima di raggiungere i 16 TB), solo in teoria 16 TB/4 GB=4000 processi ognuno con i suoi 4 GB di memoria virtuale massima (2 GB kernel e condivisi con gli altri processi + 2 GB privati del processo)?
Altrimenti, non riesco a capire perché la Microsoft riporta un limite di 16 TB di paging?
Nei 2 GB di memoria virtuale riservate per il kernel viene in parte occupato dal mapping delle periferiche come per la RAM?
Nel Task Manager (Win2000) ho notato che nella scheda "Processi" le colonna "Utilizzo memoria" e "Dimensione memoria virtuale" alcune volte è più grande la prima, mentre altre volte la seconda: quello che indica "Utilizzo memoria" a quale memoria effettivamente si riferisce?
Sono molto curioso di capire a fondo il funzionamento (e i limiti) della gestione della memoria di Windows, eventualmente anche con link sull'argomento, cercando in rete purtroppo ho visto che c'è abbastanza confusione a riguardo, con informazioni che si contraddicono e questo purtroppo non mi aiuta a chiarirmi le idee.
nuovoUtente86
29-01-2010, 20:53
Appunto perché 4 GB sono disponibili per ogni processo e non per l'intero sistema, se il limite del file di paging è di 16 TB, non dovrebbero essere in teoria (in pratica non mi stupisco che il sistema si blocchi molto prima di raggiungere i 16 TB), solo in teoria 16 TB/4 GB=4000 processi ognuno con i suoi 4 GB di memoria virtuale massima (2 GB kernel e condivisi con gli altri processi + 2 GB privati del processo)?
no. Il file di swap, indipendentemente dalla sua dimensione non è collegato alla memoria virtuale vista da ogni processo. Il file di paging è un surrogato della ram che condivide lo stesso tipo di unità minima ovvero la pagina.
Altrimenti, non riesco a capire perché la Microsoft riporta un limite di 16 TB di paging?è il limite massimo che il SO può gestire per lo swap.
Nei 2 GB di memoria virtuale riservate per il kernel viene in parte occupato dal mapping delle periferiche come per la RAM?
assolutamente no. Il memory mapping delle periferiche riferisce indirizzi reali e non virtuali.
Nel Task Manager (Win2000) ho notato che nella scheda "Processi" le colonna "Utilizzo memoria" e "Dimensione memoria virtuale" alcune volte è più grande la prima, mentre altre volte la seconda: quello che indica "Utilizzo memoria" a quale memoria effettivamente si riferisce?
Nel primo caso si ha swapping, nel secondo pagine condivise.
Grazie per le risposte, alcune cose ancora non mi sono completamente chiare.
Altrimenti, non riesco a capire perché la Microsoft riporta un limite di 16 TB di paging?
è il limite massimo che il SO può gestire per lo swap.
I 16 TB di paging il SO li vede soltanto oppure li usa effettivamente, cioè ci può essere paginato un processo da 4 GB e uno da 4 GB per un totale di 8 GB?
Nel primo caso si ha swapping, nel secondo pagine condivise.
Non ho capito. :confused:
Salve
Vi chiedo se è normale.
Sistema operativo Windows 7 Utimate 64bit
Memoria fisica installata (RAM) 4 GB
Memoria fisica totale 3,99 GB
Memoria fisica disponibile 2,64 GB
Memoria virtuale totale 7,98 GB
Memoria virtuale disponibile 6,48 GB
Spazio file di paging 3,99 GB
Tutto O.K.???
Saluti
Lino
Salve
Vi chiedo se è normale.
Sistema operativo Windows 7 Utimate 64bit
Memoria fisica installata (RAM) 4 GB
Memoria fisica totale 3,99 GB
Memoria fisica disponibile 2,64 GB
Memoria virtuale totale 7,98 GB
Memoria virtuale disponibile 6,48 GB
Spazio file di paging 3,99 GB
Tutto O.K.???
Saluti
Lino
Sì, di default viene creato un file di paging (Spazio file di paging 3,99 GB) pari alla quantità di ram installata (Memoria fisica installata (RAM) 4 GB)... il totale della memoria diventa così 8GB circa (Memoria virtuale totale 7,98 GB)
nuovoUtente86
31-01-2010, 23:36
Memoria virtuale totale 7,98 GB
è più corretto dire che la memoria virtuale vista da ogni processo è sempre 4GB come ampiamente spiegato prima, e lo spazio di mapping sarà quasi 8GB comprensivo di ram e file di swap cui allocare (o mettere in storage) le pagine, con algoritmi di rimpiazzo di cui sopra.
nuovoUtente86
01-02-2010, 14:31
Grazie per le risposte, alcune cose ancora non mi sono completamente chiare.
I 16 TB di paging il SO li vede soltanto oppure li usa effettivamente, cioè ci può essere paginato un processo da 4 GB e uno da 4 GB per un totale di 8 GB?
Non ho capito. :confused:
La paginazione non riguarda i processi, ma la memoria che essi utilizzano e quindi di norma è sempre inferiore ai 4GB
Ho capito, però i 16 TB di paging il SO li vede soltanto oppure li usa effettivamente?
Inoltre continuo a non capire nel Task Manager le colonne "Utilizzo memoria" e "Dimensione memoria virtuale" a quale memoria esattamente si riferiscono. :confused:
ramones1985
04-02-2010, 09:14
a me riconosce 2.97gb Windows Seven.........Vista sui 3.3gb ....mistero.....
nuovoUtente86
06-02-2010, 21:46
a me riconosce 2.97gb Windows Seven.........Vista sui 3.3gb ....mistero.....
hai una versione originale di Seven?
nuovoUtente86
06-02-2010, 21:50
Ho capito, però i 16 TB di paging il SO li vede soltanto oppure li usa effettivamente?
Inoltre continuo a non capire nel Task Manager le colonne "Utilizzo memoria" e "Dimensione memoria virtuale" a quale memoria esattamente si riferiscono. :confused:
Se il file di paging fosse settato a quella dimensione l' utilizzerebbe all' occorrenza, ma capisci da solo che sono quantità assurde.
L' utilizzo della memoria indica quanta porzione di memoria centrale il processo sta utilizzando (ovvero solo la parte in ram), mentre lo spazio virtuale (al massimo 4GB)comprende tutta la memoria indirizzata, compresa le pagine condivise in copy-on-write (http://www.microsofttranslator.com/BV.aspx?ref=CSSKB&from=en&to=it&a=http://support.microsoft.com/kb/103858/en-us?fr=1).
Anche se a volte quelle due colonne possono mostrare valori un po' fuorvianti...ovvero utilizzo memoria > di dimensione memoria virtuale
utilizzo memoria è il cosiddetto working set ovvero il totale della parte in ram data dalla parte privata (ws private) e dalla parte condivisibile (ws sharable) ovvero la parte di codice presente in dll ecc.. che possono essere condivise tra più processi.
dimensione virtuale non è esattamente il virtual size (cioè tutto lo spazio allocato al processo) che, per inciso, ci si aspetterebbe essere sempre maggiore del valore mostrato in utilizzo memoria.. ma si riferisce solo alla parte private bytes.
SE utilizzi process explorer (utility gratuita sysinternals di microsoft) puoi vedere bene in dettaglio questi valori
Riassumo per vedere se ho capito come funziona la memoria virtuale.
Per ogni processo la memoria virtuale è divisa così:
http://img22.imageshack.us/img22/5953/memoriavirtuale.th.jpg (http://img22.imageshack.us/my.php?image=memoriavirtuale.jpg)
E' corretto?
Ho provato a usare Process Explorer ed effettivamente è molto più chiaro di Task Manager (anche se non riporta per ogni processo l'uso del pagefile.sys), tuttavia alcune cose non mi tornano, per esempio ho un processo con:
Working set: 8556 KB
Working set private: 1648 KB
Working set shared: 3108 KB
Working set shareable: 6908 KB
Perché il totale è 8556 KB, anziché Working set private+Working set shared+Working set shareable, cioè 11664 KB?
Sembra riporti la somma di Working set private+Working set shareable, ma non capisco in ogni caso il motivo. :confused:
In System Information viene riportata la memoria allocata totale (attualmente 631 MB) e quella fisica totale (attualmente 665 MB, con cache di 715 MB): cosa indicano questi 2 dati?
workset shared è un sottovalore di ws sharable (ovvero è già compreso in questo valore). è la parte condivisa di quella globalmente condivisibile
Quindi ws= ws private + ws sharable
devi inoltre considerare che la quota sharable viene contata in ogni processo anche se la memoria viene occupata una volta sola.. cioè se viene caricata in memoria una libreria che viene letta da più processi ognuno dei processi mostrerà un certo valore di ws sharable (relativa a quella libreria) anche se nella realtà, nella maggior parte dei casi, la libreria è caricata una volta sola in memoria.
Per questo sommando i valori di memoria non sempre tornano i conti
Ho capito.
Perché la ws non shared (ws shareable - ws shared) appartiene al working set (cioè è in RAM) anziché sul disco (pagefile.sys) in modo da risparmiare spazio nella RAM, visto che quella parte presuppongo non sia ancora usata (non essendo al momento condivisa)?
non è usata da altri processi...
Appunto perché non è usata da altri processi, perché non è stata messa nel pagefile.sys per risparmiare spazio in RAM? :confused:
Appunto perché non è usata da altri processi, perché non è stata messa nel pagefile.sys per risparmiare spazio in RAM? :confused:
però il processo in questione potrebbe utilizzarla. Fa parte del suo workset
Inoltre fino a che c'è ram disponibile le pagine di memoria, anche se non utilizzate, non vengono messe subito nel pagefile.sys perchè se in seguito dovessero essere richiamate queste si troverebbero già in ram (meccanismo della cache)..
la scrittura/lettura su pagefile.sys è molto più lento dell'accesso in ram e tenere ram libera e pagefile.sys occupato è controproducente ai fini delle performance.
però il processo in questione potrebbe utilizzarla. Fa parte del suo workset
Però essendo memoria ws non shared (ws shareable - ws shared) contenuta nella ws sharable come fa' a usarla soltanto il processo stesso, senza condividerla, forse viene trasformata in ws private?
In System Information di Process Explorer viene riportata la memoria allocata totale (attualmente 631 MB) e quella fisica totale (attualmente 665 MB, con cache di 715 MB): cosa indicano questi 2 dati?
Però essendo memoria ws non shared (ws shareable - ws shared) contenuta nella ws sharable come fa' a usarla soltanto il processo stesso, senza condividerla, forse viene trasformata in ws private?
In System Information di Process Explorer viene riportata la memoria allocata totale (attualmente 631 MB) e quella fisica totale (attualmente 665 MB, con cache di 715 MB): cosa indicano questi 2 dati?
Non ne sono certo ma la memoria non shared dovrebbe essere la parte della memoria sharable che, al momento, non è usata da altri processi ma solo da quello in questione. Il wset, nella sua interezza, è la parte di memoria utilizzata da un processo
riguardo ai due valori la parte fisica riguarda solo la ram vera e propria. La commit charge (memoria allocata) è tutta la memoria utilizzata al momento e contiene anche la parte sul disco.
riguardo ai due valori la parte fisica riguarda solo la ram vera e propria. La commit charge (memoria allocata) è tutta la memoria utilizzata al momento e contiene anche la parte sul disco.
Perché io ho la prima a 715 MB e la seconda a 631 MB? Non dovrebbe essere il contrario? :confused:
Per riportare la discussione in prima pagina...
homoinformatico
26-02-2010, 10:54
detto e ridetto 10000000 di volte.
Non funziona
non è esatto
non funziona su xp sp1 e seguenti e su vista, ma funziona su xp liscio e win2003
però ci sono delle periferiche che hanno problemi con il remapping della memoria (tipo il controller via vt6421a) che potrebbero creare dei problemi (tipo sputtanare alcune centinaia di giga di dati con uno scandisk al boot :doh: )
Win2003 non è un SO desktop, bensì un SO server quindi è normale funzioni.
Su XP SP0 non mi aspettavo potesse funzionare, anche se come dici tu qualche problema con i driver c'è.
In System Information di Process Explorer viene riportata la memoria allocata totale (attualmente 631 MB) e quella fisica totale (attualmente 665 MB, con cache di 715 MB): non dovrebbe essere più alta la prima rispetto alla seconda?
Nella colonna "CPU Time" apparentemente sembrerebbe venga riportato il tempo che il processo ha usato la CPU espresso in ore:minuti:secondi:ms, tuttavia facendo una prova, quando il PC praticamente non fa nulla, ho notato che il "System Idle Process" ha un "CPU time" maggiore di quello che posso misurare con il mio orologio, nel caso fosse stato minore avrebbe avuto un senso in quanto un altro processo avrebbe potuto nel frattempo usare la CPU, perciò mi sorge il dubbio che venga misurato qualcos'altro.
In realtà cosa viene misurato?
Per riportare la discussione in prima pagina...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.