IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

Limite de la mémoire virtuelle [Turbo Pascal]


Sujet :

Turbo Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2002
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Limite de la mémoire virtuelle
    Salut
    Je voudrais quelques petites explications au niveau de la limite de la mémoire virtuelle.
    Je sais que la mémoire comprend 3 parties : La pile(16 ko) + le tas (0 à 640 ko) + le segment des données (64 ko). Alors 3 questions :
    1) mémoire virtuelle et la RAM, c'est la même chose ?
    2) si oui, pourquoi une telle limitation ? Mon PC a par exemple 64 MO de RAM, le reste sert à quoi ?
    3) est-ce juste pour gagner de la place que les pointeurs sont utilisés ?
    Merci pour les explications. Je mélange un peu tout dans ma tête...
    the matrix has you....

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    avril 2002
    Messages
    2 448
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : avril 2002
    Messages : 2 448
    Points : 4 223
    Points
    4 223
    Par défaut
    Il me seble que la mémoire virtuelle désigne en réalité un espace du disque dur qui est utilisé comme zone mémoire quand la mémoire conventionnelle est saturée.
    La RAM, c'est bien beau, mais on peut pas l'utiliser comme ça... En mode réel, on peut accéder à 1 Mo de mémoire : la mémoire est accédée à travers des "segments" de 64 ko chacun, chaque segment est repéré ( dans un programme ) par un pointer de segment ( ce sont des registres du processeurs : CS pour la partie code du programme, DS pour les données du programme, SS pour la pile, ES, FS, et GS pour les trucs supplémentaires... ). Chaque segment fait 64 ko, on peut donc dire qu'il y a ( en mode réel ) 16 segments disponibles... Donc on ne peut accéder qu'à 1 Mo de mémoire ( il existe cependant des techniques pour accéder au reste de la RAM, voir le cours d'Haypo sur l'utilisation de la mémoire XMS )... En mode protégé, on pourra accéder à la totalité de la mémoire soit dans ton cas, à 64 MO.
    Les pointeurs sont utilisés pour accéder à la mémoire dynamique, ce qu'on appelle également le tas. L'avantage du tas, c'est qu'il peut faire jusqu'à 640 ko, contrairement au segment de code, qui lui ne peut pas excéder 64 ko. On voit vite la différence quand il faut faire de gros tableaux ou pour la programmation objet... Les pointeurs permettent ainsi de libérer de la place dans le segment de code, qui peut alors servir pour stocker d'autres variables...
    Si tu as d'autres questions, n'hésite pas !!
    Je crois que j'ai été complet... Désolé si j'ai oublié des lettres, mais j'ai un clavier merdique....
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2002
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci pour les explication sur les pointeurs.
    Mais le concept de mémoire m'échappe toujours.
    un cas concret. je cree un tableau de N dimensions de valeurs reelles, le compilo me marque "structure too large", je comprend en gros que je n'ai plus de mémoire.....
    C'est quoi cette mémoire, ou se trouve t'elle physiquement dans le pc.
    t'aurais pas un bouquin ou un site à me conseiller?
    merci
    the matrix has you....

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    avril 2002
    Messages
    2 448
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : avril 2002
    Messages : 2 448
    Points : 4 223
    Points
    4 223
    Par défaut
    Quand tu obtiens le message "Structure too large", ça ne veut pas dire que tu n'as plus de mémoire, mais que la structure que tu décris est trop large, car elle dépasse 64 ko en mémoire. Sous Turbo Pascal, on ne peut accéder avec qu'une variable que à 64 ko ( je m'explique parce que c'est pas très clair ) : le segment de données comme je t'ai dit, est contenu dans un bloc de 64 Ko, qui est pointé par DS. On peut mettre jusqu'à 64 ko de données dans ce bloc : seulement, si tu décris une structure trop large, les données ne peuvent plus rentrer dans ces 64 ko, et donc le compilateur signale une erreur. Prenons un exemple : un réel est stocké en mémoire sur 6 octets, donc le nombre maximal de réels que tu pourra stocker en mémoire est 65536/6, ce qui nous donne approximativement 10922, tu ne pourras pas en rentrer plus !! ( et je crois d'ailleurs que c'est un peu moins car il y a 16 octets réservés dans le segment de données ).
    Ainsi si tu déclares un tableau de réel indicé de 1 à 10922 tu obtiendras une erreur "Structure too large" !
    La mémoire dans un ordinateur, c'est un circuit logique où des informations sont stockées bit par bit : ce sont des composants électroniques donc c'est pas très intéressant de savoir ça pour programmer... Sache que la mémoire est un des éléments clés de l'ordinateur, que sans elle rien n'est possible ( aucun programme ne tournerait suffisament rapidement pour être efficace ). La mémoire se trouve sur des barettes-mémoire que tu peux trouver sur ta carte mère, ou carrément dans des puces situées sur ta carte mémoire...
    Pour le site, désolé je n'en connait pas, mais tu peux regarder sur les sites du type "comment ça marche"...
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2002
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci pour les détails....
    J'ai trouvé le reste des infos dans un bookain de win98.
    Mode reel, on ne peut acceder qu'à 1 MO de mémoire et en mode protégé on peut aller jusqu'à 16 MO je crois.
    cela dit tu avais raison
    ce sont des composants électroniques donc c'est pas très intéressant de savoir ça pour programmer...
    J'ai quand meme enrichi ma culture en info...
    merci encore
    a+
    the matrix has you....

  6. #6
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : mars 2002
    Messages : 1 212
    Points : 3 360
    Points
    3 360
    Par défaut
    Ah ! L'organisation mémoire ! C'est toujours un grand sujet de conversation.

    En fait, tout remonte aux premiers âges de l'informatique dites "grand-public". Les premiers ordinateurs à être véritablement distribués fonctionnement en 16 bits, autrement dit avec des processeur n'utilisant que des registres 16 bits. Qu'est-ce qu'un registre ? On peut dire pour simplifier qu'il s'agit d'une petite zone dans laquelle le processuer va stocker des données chiffrées importante pour lui, et très faciles d'accès. Ces registres faisant 16 bits, il ne pouvaient contenir que 65536 valeurs différentes (de 0 à 65535, ou bien de -32768 à 32767). Seulement voilà, la mémoire, zone où l'on peut s'étendre (en peu comme un cahier de brouillon) a vite vu ses besoin augmenter. Imagine toi devoir résoudre un devoir de maths de 4 pages sur un post-it ?

    Il a donc fallu trouver une méthode "d'adressage", une manière d'accès à cette méoire, qui corresponde avec le format des processeurs d'alors. On a donc décidé de diviser la mémoire en segments (partie de la mémoire) de 64 Ko, soit 65536 octets. En fait, l'adressage fonctionne un peu comme le plan mathématique. Alors qu'on à l'ahibute de fonctionner en abscisse et ordonnée, le PC, pour sa part, va se situer en utiliser un segment, et un offset. Il faut pour cela se représenter la mémoire comme une pile d'assiettes. Le segment va être le numéro de l'assiette, et l'offset (ou déplacement en français), va être la position sur l'assiette.

    Chaque segment (assiette) possède un numéro unique, et un programme à le droit à certain nombre de segments (d'assiettes) sur lesquelles il va pouvoir écrire ses données, et son code exécutable (ce qu'il doit faire). Les programmes les plus basiques, les programmes COM, n'ont le droit qu'à un seul segment (une seule assiette, les pauvres !!!) dans lequel ils doivent tout stocker : données, code, et la pile (zone temporaire de stockage).
    Les programmes EXE, pour leur part, ont droit un plusieurs assiettes. Et chaque compilateur va imposer des restrictions sur la répartion données, code et pile.
    Ici, nous parlons de Turbo Pascal. Aveclui, tu auras le droit à un segment de données (une assiette, une !), un segment pour la pile (et une assiette de plus...), et un segment pour chaque module de code. J'entends par module unité et programme principal. Donc, chaque unité à le droit à une assiette pour s'étaler.

    Maintenant, il faut bien voir que le Dos à l'origine ne connaît que 640 Ko de mémoire (la mémoire basse, dite mémoire conventionnelle). Par la suite, on a ajouté un petite zone, allant gratter jusqu'à 1 Mo, pour pouvoir stocker des drivers et autres pilotes de périphériques Dos (dans la mémoire haute, sous 1 Mo).

    Donc, il faut savoir que quand tu lances ton PC, le Dos ne voit que les 640 Ko dit "de base". Il faut retirer à ces 640 Ko la place mémoire utilisée par Dos lui-même, plus les différents TSR. Bref, en général, il te reste un peu plus de 500 Ko d'utilisable pour lancer des programmes. Lorsque tu vas charger ton prog en mémoire, son code avec être copié en mémoire, d'où un perte sèche pouvant aller jusqu'à plus de 300 Ko. Bref, il te reste la plupart du temps en 300 et 400 Ko de libre pour ce que l'on appelle le tas, la zone de mémoire basse libre.

    Il faut donc que tu te débrouille pour garder toutes tes données dites "statiques" dans 64 Ko, bref, sur une assiette. Si jamais tu as besoin de plus d'une assiette, alors il faut utiliser des variables dites "dynamiques", qui seront placées sur la tas (un petit tas d'assiettes ). Seulement voilà. Si Turbo Pascal connaît exactement le segment de données (l'adresse de l'assiette est placée dans un registre que l'on nomme DS), le segment de pile (registre SS) et le segment de code en cours (registre CS), ce n'est pas le cas de toutes les variables dynamiques ! Il ne connaît que l'adresse de départ.

    Par conséquent, il est nécessaire de stocker à un endroit connu (sur le segment de donnnées) l'adresse des variables disposées dans la tas : un pointeur. Le pointeur "pointe" dans le tas. C'est simplement un couple (segment, offset), qui permet de savoir où est situé en mémoire ses données dynamiques.

    Jusqu'ici, je n'ai parlé que de ce que l'on appelle le "mode réel". A celui-ci j'ajoute le "mode protégé", qui est bien plus complexe à décrire. Disons qu'en gradant toujours le système de registres 16 bits; on arrive à accéder à 16 Mo de mémoire, au lieu de 640 Ko... C'est déjà mieux. Mais il y a longtemps maintenant, on est passé au 32 bits, ce qui permet d'accéder à 4 Go de mémoire... Tout un programme !


    Il ne faut pas confondre le Dos et Windows. Seul Windows utilise le principe de mémoire virtuelle, qui consiste à simuler de la mémoire vive avec de l'espace disque. Dos n'est pas au courant...

    Par contre, il est possible d'utiliser la mémoire XMS ou EMS, qui, elle, permet d'accéder à 64 Mo de mémoire.

    En espérant avoir été clair.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2002
    Messages : 12
    Points : 11
    Points
    11
    Par défaut

    Voila ce que j'appelle des explications claires et nettes. cette fois j'ai pigé le truc.Juste un dernier détail: C'est quoi un TSR?
    Merci encore...
    the matrix has you....

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    mars 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 107
    Points : 279
    Points
    279
    Par défaut
    Tu as eu droit a une belle tartine ...

    Pour en revenir au sujet initial, j'ai lu un jour, que les TSR, c'était des outils system.
    Voila, désolé, je n'ai pas trop de doc là dessus, pas comme Hdd34 ... c'est tout ce que je peut faire pour toi.

    @++ Mathieu
    Chaque jour, l'homme crée des choses plus grandes, meilleures et sûres, et chaque jour, la nature crée des idiots plus performants. Pour l'instant, je pense que la nature gagne.

  9. #9
    ALT
    ALT est déconnecté
    Membre chevronné
    Avatar de ALT
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    octobre 2002
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : octobre 2002
    Messages : 1 177
    Points : 2 103
    Points
    2 103
    Par défaut TSR
    Bonjour
    Terminate and Stay Resident

    Ce sont des programmes qui sont actifs (& chargés [au moins partiellement] en mémoire, c'est à dire résidents), même quand ils ont terminé leur exécution.
    Exemples :
    - les pilotes de périphériques
    - les applications qui se lançaient à l'activation d'une combinaison de touches : certains grapheurs, qui permettaient de réaliser un petit graphique à partir d'une feuille de calcul ; des outils tels PcTools, qui étaient chargés en mode résident & qui pouvaient être appelés à tout moment...
    - etc.

    Ce n'était pas du multitâche, puisque ces programmes ne s'exécutaient pas vraiment en permanence, encore moins simultanément, mais ils interceptaient les événements système (appui sur une touche, en général, mais aussi demande d'impression...) & y répondaient.
    Donc, tous les pilotes de périphériques étaient du style TSR.

    Avantages :
    -simplicité de mise en oeuvre
    - faible encombrement mémoire (une toute petite partie du code exécutable est chargée en mémoire en permanence, le reste est chargé à la demande).

    Inconvénients :
    - de nombreux conflits, en particulier de gestion des interruptions.
    - l'ordre de chargement des TSR en RAM avait son importance pour la place mémoire réellement utilisée, réduire certains conflits...

    Je ne détaillerai pas le fonctionnement de ces machins, car c'est plutôt complexe si on doit tout expliquer dès le départ.

    Mais je crois avoir écrit ici l'essentiel.

    Cordialement
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2002
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci.
    au risque de paraitre inculte,
    combien de "choses" sont finalement chargées en mémoire lorsqu'une ou plusieurs applications tournent sous windows?
    the matrix has you....

  11. #11
    ALT
    ALT est déconnecté
    Membre chevronné
    Avatar de ALT
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    octobre 2002
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : octobre 2002
    Messages : 1 177
    Points : 2 103
    Points
    2 103
    Par défaut
    Bonjour

    combien de "choses" sont finalement chargées en mémoire lorsqu'une ou plusieurs applications tournent sous windows?
    Bah ! J'ai peut-être oublié de préciser que ce principe était réservé au DOS (système monotâche).

    Il est possible qu'il y en ait sous W9x, puisque la base reste quelque chose qui ressemble furieusement au DOS. Mais je pense que l'essentiel se trouve dans la surcouche multitâche de W9x. Donc, ce sont plutôt des programmes classiques chargés en mémoire & susceptibles de fonctionner simultanément (principe du multitâche).

    Quant à savoir quel est l'encombrement mémoire dans le cas où une ou plusieurs appli. est ou sont chargée(s) en mémoire, ben... ça dépend des appli. ! Certains utilitaires permettent de mesurer ce genre de choses... à condition de leur faire confiance (car ils utilisent souvent une fonction du système qui indique le total de la mémoire utilisée. Quelle est la fiabilité de cette fonction ?)

    Cordialement
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2002
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci pour toutes ces brillantes explications,
    j'ai l'air moins inculte maintenant............
    the matrix has you....

  13. #13
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : mars 2002
    Messages : 1 212
    Points : 3 360
    Points
    3 360
    Par défaut
    Le multitâche sous Windows est une fiction pour le moment... Il va peut-être devenir réalité avec les systèmes multiprocesseurs.

    En attendant, nous n'avons que du pseudo-multitâche. Windows ne fait qu'affecter un petite portion de temps à chaque programme, et l'interrompt dès qu'il le juge nécessaire. Toutefois, un programme peur recquérir une petite exception de la part de Windows, qui accorde alors à celui-ci plus de temps... Et qui peut donc bloquer totalement Windows !

    Le principe des TSR est bien évidemment repris sous Windows : il s'agit de tous les pilotes de périphériques, toute l'armada de VXD et compagnie ne sont que des TSR, mais on ne les appelle pas comme ça, voilà tout.

    Les TSR sont des programmes Dos. Les "pilotes virtuels de périphériques" sont des programmes Windows (warf... on ne dit plus un aveugle mais un non-voyant... Enfin bref).

    Si tu veux avoir une idée des TSR en mémoire sous Dos, tape ceci :

    MEM /C /P

    Voilà chef !

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/02/2013, 01h20
  2. Limite mémoire - mémoire virtuelle - vecteurs
    Par couillotte dans le forum Programmation d'OS
    Réponses: 1
    Dernier message: 18/12/2008, 22h30
  3. Limiter la taille de la mémoire virtuelle
    Par HWICE dans le forum Windows XP
    Réponses: 2
    Dernier message: 13/09/2007, 04h00
  4. mémoire virtuelle minimale insuffisante
    Par sempire dans le forum Windows XP
    Réponses: 16
    Dernier message: 15/10/2003, 17h29
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo