Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème mémoire virtuelle

19 réponses
Avatar
Utilisateur 1
Bonjour,

Lorsque je démarrage, un jeu, j'ai le message suivant : ce programme
exige un minimum de 3 Mo de mémoire virtuelle pour fonctionner.

Quelles solutions ?

Merci.

9 réponses

1 2
Avatar
Pascal Hambourg
Salut,

Nicolas George a écrit :
"Az Sam" , dans le message <4cb2c345$0$4038$, a
écrit :
Expanded Memory souvent traduite en fr par Mémoire Paginée, puis avec le
pagefile des Windows : fichier de mémoire virtuelle.



Sauf que les deux n'ont absolument rien à voir l'un avec l'autre. Mais
bon...



"Absolument", c'est peut-être un peu fort. Si je ne m'abuse, l'émulation
de la mémoire paginée se fait grâce aux mécanismes de gestion de la
mémoire virtuelle du processeur. Mais pour une application, les deux
n'ont effectivement rien à voir.
Avatar
Jean-Claude BELLAMY
"Az Sam" a écrit dans le message de groupe de discussion :
4cb2020f$0$9944$

"Utilisateur 1" a écrit dans le message de
news:4cb0ade4$0$7691$
Bonjour,

Lorsque je démarrage, un jeu, j'ai le message suivant : ce programme
exige un minimum de 3 Mo de mémoire virtuelle pour fonctionner.

Quelles solutions ?





booter sur un MS-Dos correctement configuré avec l'EMS de l'époque du
programme.



OUH LA LA!
Il y a de la "confuse" dans l'air !!!!

La mémoire paginée de EMS et la mémoire paginée de VMM (Virtual Memory
Manager) n'ont ABSOLUMENT AUCUN RAPPORT !
(sauf le qualificatif de "paginée")

Un programme DOS "traditionnel", fonctionnant dans ce qu'on appelle le "mode
réel", ne peut pas adresser plus de 2^20 octets soit 1 Mo. (les processeurs
8088 et 8086 ayant un bus d'adressage sur 20 bits)

Cependant, même dans ce mode il existe (a existé!) des moyens de contourner
cette limite.

Mémoire paginée (mode réel)
========================== Pour cela les PC de l'époque (1985 environ) pouvaient être dotés d'extension
mémoire, insérée sur un slot ISA, à laquelle on accédait par le biais d'une
interruption logicielle (int 67h).
Cela a fait l'objet d'une "norme" appelée EMS = Expanded Memory System (à ne
pas confondre avec XMS=Extended Memory System), créée conjointement par
Lotus, Intel et Microsoft (d'où son autre nom de "LIM")


Cette extension de mémoire ne pouvait pas dépasser 32 Mo (énorme à
l'époque!), et elle était "vue" uniquement par paquets (ou "pages, d'où le
nom de "mémoire paginée") de 16 ko (4 à la fois au maximum, soit 64 ko),
situé dans une "fenêtre" de même taille située quelque part dans la partie
"haute" de la mémoire vive (entre 640ko et 1Mo).
Cette fenêtre devait évidemment être libre au départ (pas de drivers ou TSR
logés dedans)

Les applications devaient évidemment avoir été écrites en conséquence, en
faisant appel aux fonctions de cette int67h.
Les plus célèbres furent "Lotus 1-2-3" et "Microsoft Multiplan" (2 tableurs
DOS)
(Personnellement j'en ai écrites quelques unes)
Si une appli avait besoin de stocker un tableau de 2 Mo p.ex., elle
chargeait les 4 1ères pages de la mémoire EMS dans la fenêtre prévue pour,
écrivait les données des 64 1ers ko, puis chargeait les 4 pages suivantes,
et ainsi de suite (donc 32 fois de suite)

Ensuite, quand sont apparus les processeurs 80386 et les OS 32 bits, pouvant
gérer jusqu'à 4 Go de mémoire (2^32), ce système est devenu obsolète.
Cependant, si l'OS est DOS, il y a toujours moyen de faire fonctionner ces
applis à l'aide du driver EMM386, qui permet de faire croire qu'on a de la
mémoire EMS à partir de la mémoire étendue (XMS, située au delà de 1Mo, voir
ci-dessous)
Il y a une redirection (bidirectionnelle) d'une fenêtre de 64 ko comprise
dans la zone 640ko-1Mo vers des fenêtres de 64 ko de la mémoire étendue.
Cela est réalisé avec la commande
device=emm386.exe EMS FRAME=xxxx RAM=xxxx-xxxx
(il y a une vingtaine de paramètres possibles!)

Vu que les applis nécessitant de l'EMS sont devenues aussi courantes que les
cercueils à trois places (;-)), on a utilisé
EMM386 non pas pour émuler de l'EMS, mais pour offrir un espace mémoire
supplémentaire (dans la même zone 640ko-1Mo) à certains drivers ou
programmes résidents.
D'ou le fameux paramètre "NOEMS", associé à la directive "DOS=UMB" du
config.sys

NB: Compaq avait sorti un DOS permettant cette émulation même avec un 80286
grâce au driver "EMM286.EXE", que j'ai eu l'occasion d'utiliser sur un
portable SLT286 (en 1988).


Mémoire étendue (mode protégé)
=============================
Le système précédent n'était pas spécialement pratique !
Il avait par contre le mérite de fonctionner avec n'importe quel processeur,
même un 8088.

Vu que depuis pas mal de temps les processeurs 32 bits sont la règle (mon
1er 80386, 32 bits, date de 1988), il a été prévu, pour les applis DOS un
peu volumineuses, d'utiliser l'adressage non pas sur 20 bits, mais sur 24
puis 32 bits.

NB: Cette RAM dite "étendue" (XMS = eXtended Memory System), située au-delà
du 1er Mo, a remplacé la RAM paginée.
Mais le mécanisme d'accès est devenu totalement différent (bus Mémoire et
non plus bus d'E/S).

Le mode protégé sous DOS a été appelé "DPMI" (DOS protected mode interface).
Pour cela il faut commencer par envoyer une instruction au processeur qui le
fait fonctionner en mode "protégé" (c'est, entre autres, une des premières
choses que fait un OS tel que Windows ou Linux au démarrage).

Sous DOS on utilise une appli pour cela, appelée "DOS extender", dont le
plus célèbre est "DOS4GW.EXE" (sous copyright de "Rational Systems", devenu
"Tenberry Software" http://www.tenberry.com/dos4g/index.htm), qui va mettre
en place une API basée sur l'interruption logicielle int31h.
Généralement, on passe l'appli finale en paramètres à DOS4GW.
Puis l'appli DOS va accéder à la mémoire étendue par le biais d'appel à
l'int31h.

Par exemple, des "partition managers" tels que "Partition Magic" ou "Paragon
Partition Manager" l'utilis(ai)ent dans leur version "DOS".
Egalement des compilateurs DOS (Borland, Microsoft, ...)

Mémoire virtuelle (à partir de Windows NT 3.1 et Windows 95)
============================================= La mémoire virtuelle est l'ENSEMBLE de toute la mémoire dans laquelle l'OS
peut travailler.
Elle est composée de :
- la mémoire vive (RAM), installée physiquement dans l'ordinateur
- la mémoire paginée (swap), constituée d'un (gros!) fichier
sur une ou plusieurs (dans le cas des Windows de la famille NT)
partition(s) d'un (des) disque(s) dur(s) physique(s) de l'ordinateur.
On appelle souvent cette mémoire de swap "mémoire virtuelle",
mais c'est un abus de langage.

La gestion de la mémoire est effectuée de concert entre l'OS (grâce au "VMM"
= Virtual Machine Manager, incorporé - sous Win9x - dans le driver virtuel
VMM32.VXD) et le processeur lui-même.

Le VMM permet aux applications d'adresser plus de mémoire qu'il n'y a de RAM
physique, grâce à un mécanisme de "pagination".

Par exemple: si on n'a que 1 Go de RAM, le VMM peut faire croire aux applis
qu'il y a en réalité 3 Go de mémoire, ou plus, en fonction de ce qui est
nécessaire.

Il crée un fichier de "swap" (Þ pagination, =d'échange) sur le disque dur,
("386spart.par" sous Windows 3.x, "win386.swp" sous Windows 9x,
"pagefile.sys" sous NT) , dans lequel il stocke/recopie des morceaux de
mémoire qui normalement résident en RAM. Ces morceaux de code et données de
4 ko chacun sont appelés "pages".

Codes et données sont chargés en "mémoire virtuelle", qui désigne la réunion
de la RAM et du Fichier de swap. Si une page, stockée sur disque, est
demandée par un processus, le microprocesseur génère une "page fault"
(malgré son nom, une "défaillance de page" n'est pas réellement une
"faute"), et la page est alors recopiée en RAM.

En d'autres termes : chaque fois qu'une page du fichier de swap est demandée
en RAM, le VMM procède à un échange (swap) entre cette page demandée (au
départ sur disque) et une autre page (au départ en RAM), moins "urgente" que
la première (parce qu'appartenant à une appli en arrière-plan à cet
instant).



==========================================================
En prime, petit tableau récapitulatif sur la mémoire physique

PREALABLE IMPORTANT :
Utiliser une police à espacement FIXE ("courier" p.ex.) pour afficher cette
cartographie de la mémoire :


Mémoire sur carte séparée (8086) :
================================= 32Mo +--------------------------------------------+
EMS | expanded memory board | >---+ (8086)
0 +--------------------------------------------+ |
|
Mémoire sur la carte-mère : /
=========================== /
nMo +--------------------------------------------+ |
XMS | extended memory (1Mo-nMo*) | >---+ (80x86)
+- - - - - - - - - - - - - - - - - - - - - - + |
HMA | high memory area (FFFF:0010-FFFF:FFFFh) | |
1Mo +============================================+ |
UMB | upper memory area (640 ko-1 Mo) | |
+- - - - - - - - - - - - - - - - - - - - - - + |
| expanded memory page frame (64 ko) | <---+
| partagée en 4 sous-fenêtres de 16 ko |
+- - - - - - - - - - - - - - - - - - - - - - +
| |
640ko +--------------------------------------------+
| |
| conventional memory (0K-640K) |
| |
0 +--------------------------------------------+


UMB : "upper memory block". Zone de mémoire comprise dans la plage 640 ko-1
Mo utilisée pour y stocker des programmes résidents et/ou des drivers,
libérant ainsi d'autant la zone 0-640 ko pour les programmes utilisateurs.

HMA : "high memory area" . C'est un bloc de 64 ko, situé juste au-dessus du
1er Mo, accessible en mode RÉEL grâce à un BUG de l'adressage des
processeurs x86 quand la broche A20 est activée.
On accède à cette zone quand on donne une adresse de la forme
FFFF:0010-FFFF:FFFF, ce qui sollicite la 21ème broche ("A20", d'où le nom du
driver ) du bus d'adresses du processeur.
(cf article http://support.microsoft.com/kb/95555 de la KB de MS)
Utilisé généralement pour y stocker une partie du DOS.




Voila, le cours est fini, vous pouvez aller jouer! ;-)



--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Avatar
Az Sam
"Nicolas George" <nicolas$ a écrit dans le message de
news:4cb2c868$0$12671$
"Az Sam" , dans le message <4cb2c345$0$4038$, a
écrit :
Expanded Memory souvent traduite en fr par Mémoire Paginée, puis avec le
pagefile des Windows : fichier de mémoire virtuelle.



Sauf que les deux n'ont absolument rien à voir l'un avec l'autre. Mais
bon...




oui c'est tout le pb de cette boite de dialogue qui annonce "3MB de mémoire
virtuelle" en fait elle demande certainement 3MB de mémoire paginée telle
que décrite a l'époque et dont JCB nous gratifie de son cours :-)

--
Cordialement,
Az Sam.
Avatar
Az Sam
"Jean-Claude BELLAMY" a écrit dans le
message de news:4cb2d961$0$32447$

"Az Sam" a écrit dans le message de groupe de discussion :
4cb2020f$0$9944$

"Utilisateur 1" a écrit dans le message de
news:4cb0ade4$0$7691$
Bonjour,

Lorsque je démarrage, un jeu, j'ai le message suivant : ce programme
exige un minimum de 3 Mo de mémoire virtuelle pour fonctionner.

Quelles solutions ?





booter sur un MS-Dos correctement configuré avec l'EMS de l'époque du
programme.



OUH LA LA!
Il y a de la "confuse" dans l'air !!!!





merci pour ton copier coller de ce vieux cours. Il ya longtemps qu'on ne
l'avait plus vu ;-)

La confusion vient de cette boite de dialogue. Enfin AMA. Et c'est pour cela
que j'indique a utilisateur_1 la piste du MS-DOS.
Ce type de boite de dialogue (injure box selon toi) est très fréquent avec
de vieux programmes que l'on lance depuis XP.

Mais si le programme n'est pas un vieux trucs écris pour MS-DOS, alors la
boite de dialogue est tout autant confondante avec cette valeur de 3MB de
mémoire virtuelle où tout le monde s'est engouffré.

La question c'est peut être : quelle application ?

--
Cordialement,
Az Sam.
Avatar
Nicolas George
Pascal Hambourg , dans le message <i8ukfl$2nh9$, a
écrit :
"Absolument", c'est peut-être un peu fort. Si je ne m'abuse, l'émulation
de la mémoire paginée se fait grâce aux mécanismes de gestion de la
mémoire virtuelle du processeur.



Je dirais plutôt que l'émulation de la mémoire paginée et la gestion de la
mémoire virtuelle du processeur se font toutes les deux en utilisant le même
mécanisme (à savoir la MMU).
Avatar
Utilisateur 1
Le 10/10/2010 11:16, Williamhoustra a écrit :
Utilisateur 1 a formulé ce samedi :
Bonjour,

Lorsque je démarrage, un jeu, j'ai le message suivant : ce programme
exige un minimum de 3 Mo de mémoire virtuelle pour fonctionner.

Quelles solutions ?



Ca ressemble à un message comme quoi la mémoire virtuelle n'est pas
attribuée, ou qu'il n'y a vraiment plus de place dans la partition. Elle
est où et tu lui en as mis combien ? Il est rappelé qu'il est bien de
réserver une partition pour la mémoire virtuelle, de linuxienne façon,
où le fichier remplit toute la place (- 5 Mo, je n'ai jamais compris
pourquoi)





j'ai deux partitions
dans les 2 cas, c'est coché "taille gérée par le système"
Avatar
Williamhoustra
Le 11/10/2010, Utilisateur 1 a supposé :

j'ai deux partitions
dans les 2 cas, c'est coché "taille gérée par le système"



C'est le plus simple, mais ce n'est pas le meilleur, car Windows va
devoir faire de la place en permanence pour gonfler et dégonfler ce
fichier d'échange qui va se trouver fragmenté un max ce qui n'est pas
bien optimisé.

Comme je l'ai dit le mieux est de lui réserver une partition. Si ce
n'est pas possible, choisir une partition existante où il y a de la
place, la défragmenter complètement et ensuite créer le fichier
d'échange avec une taille fixe. Comme ça il sera optimisé.
Avatar
Williamhoustra
Après mûre réflexion, Jean-Claude BELLAMY a écrit :

Un programme DOS "traditionnel", fonctionnant dans ce qu'on appelle le "mode
réel", ne peut pas adresser plus de 2^20 octets soit 1 Mo. (les processeurs
8088 et 8086 ayant un bus d'adressage sur 20 bits)

Cependant, même dans ce mode il existe (a existé!) des moyens de contourner
cette limite.



Jeunesse ! On faisait même ça avec des Amstrad ! La limite
d'adressage (du Z80 : 8 bits de données, 16 bits d'adressage)) était
encore plus basse 64 k (soit dix fois moins que les PC) et l'Amstrad
CPC 128 utilisait son jeu de mémoire supplémentaire (donc 64 k aussi)
pour "swapper" ses données dans la mémoire haute organisée en banques.
Avatar
promer
In news:4cb356b8$0$20693$,
Williamhoustra typed:
C'est le plus simple, mais ce n'est pas le meilleur, car Windows
va devoir faire de la place en permanence pour gonfler et dégonfler
ce fichier d'échange qui va se trouver fragmenté un max ce qui
n'est pas bien optimisé.

Comme je l'ai dit le mieux est de lui réserver une partition. Si
ce n'est pas possible, choisir une partition existante où il y a de
la place, la défragmenter complètement et ensuite créer le fichier
d'échange avec une taille fixe. Comme ça il sera optimisé.



il n'est pas nécessaire de le mettre dans une partition à part si sa taille
est fixée
il ne risquera pas la fragmentation une fois créé, puisque la fragmentation
touche les fichiers ajoutés après que d'autres aient été supprimés (ils sont
fragmentés sur l'espace libéré par les fichiers supprimés), pas les fichiers
qui existent déjà

au sujet de la défragmentation, sur des disques relativement rapides, cela
ne sert pas à grand chose, disons que la différence ne se sent pas, c'est
sûr sur du 5.400tr/mn avec des temps d'accès pourris ça va se voir (le cas
des laptops qui ont des disques lents pour ne pas pomper la batterie, de
toute façon généralement ceux qui ont des portables s'en contrefoutent des
performances vu qu'ils sont généralement beaucoup plus lents que leur
machine, pour la plupart de ces personnes ce qui compte c'est la quantité
d'espace disque et de ram sur les étiquettes, à la façon de ceux qui
prennent un appareil photo sur simple critère du nombre de pixels dont on se
fout complètement au passage puisque même 3mpx c'est déjà de trop sans tenir
compte de la qualité du capteur qui est un des critères primordiaux, longue
parenthèse à ferme maintenant), et là pourquoi pas défragmenter de temps à
autres, mais sur des 10.000tr/mn disposant de grands espaces voire des
7.200tr/mn et qui ont des bons temps d'accès, pour un utilisateur moyen
franchement c'est à peine perceptible à moins de désinstaller supprimer des
dizaines de milliers d'applications ou de fichiers par mois..

pour conclure, un fichier d'échange de taille fixe, où bon te semble, tu ne
verras pas de différence
le mieux, 4gb de ram et un fichier d'échange de la taille que tu veux (même
suffisamment petite par exemple 2gb) histoire d'en avoir un car parfois il
est requis bien qu'inutile dans le principe
1 2