Swap, traduisez fichier d'échange








télécharger 34.26 Kb.
titreSwap, traduisez fichier d'échange
date de publication02.02.2018
taille34.26 Kb.
typeDocumentos
ar.21-bal.com > loi > Documentos
Description de la mémoire

La mémoire physique sur un système se divise en deux catégories :

  • la mémoire vive : composée de circuit intégrés, donc très rapide

  • la mémoire de masse : composée de supports magnétiques (disque dur, bandes magnétiques...), beaucoup plus lente

La mémoire physique sert de zone de stockage temporaire pour les programmes et données que vous utilisez. De façon générale, plus la quantité de mémoire est importante, plus vous pouvez lancer d'applications simultanément. D'autre part, plus celle-ci est rapide plus votre système réagit vite, il s'agit donc (pour le système d'exploitation) de l'organiser au mieux pour en tirer le maximum de performances.

La gestion de la mémoire

La gestion de la mémoire est un difficile compromis entre les performances (temps d'accès) et la quantité (espace disponible). On désire en effet tout le temps avoir le maximum de mémoire disponible, mais l'on souhaite rarement que cela se fasse au détriment des performances.
La gestion de la mémoire doit de plus remplir les fonctions suivantes :

  • permettre le partage de la mémoire (pour un système multi-tâches) ;

  • permettre d'allouer des blocs de mémoire aux différentes tâches ;

  • protéger les espaces mémoire utilisés (empêcher par exemple à un utilisateur de modifier une tâche exécutée par un autre utilisateur) ;

  • optimiser la quantité de mémoire disponible, notamment par des mécanismes d'extension de la mémoire.

L'extension de la mémoire

Il est possible d'étendre la mémoire de deux manières :

  • En découpant un programme en une partie résidente en mémoire vive et une partie chargée uniquement en mémoire lorsque l'accès à ces données est nécessaire.

  • En utilisant un mécanisme de mémoire virtuelle, consistant à utiliser le disque dur comme mémoire principale et à stocker uniquement dans la RAM les instructions et les données utilisées par le processeur. Le système d'exploitation réalise cette opération en créant un fichier temporaire (appelé fichier SWAP, traduisez "fichier d'échange") dans lequel sont stockées les informations lorsque la quantité de mémoire vive n'est plus suffisante. Cette opération se traduit par une baisse considérable des performances, étant donné que le temps d'accès du disque dur est extrêmement plus faible que celui de la RAM. Lors de l'utilisation de la mémoire virtuelle, il est courant de constater que la LED du disque dur reste quasiment constamment allumée et dans le cas du système Microsoft Windows qu'un fichier appelé "win386.swp" d'une taille conséquente, proportionnelle aux besoins en mémoire vive, fait son apparition.




Les mécanismes de découpage de la mémoire

La mémoire centrale peut-être découpée de trois façons :

  • la segmentation : les programmes sont découpés en parcelles ayant des longueurs variables appelées «segments».

  • la pagination: elle consiste à diviser la mémoire en blocs, et les programmes en pages de longueur fixe.

  • une combinaison de segmentation et de pagination: certaines parties de la mémoires sont segmentées, les autres sont paginées.

Pages et les erreurs de page

La page (aussi nommée « page mémoire » ou « page virtuelle ») est un bloc mémoire contigu et de taille fixe de mémoire virtuelle.

La mémoire virtuelle permet d’adresser et utiliser une page, autrement absente de la mémoire virtuelle. Lorsqu’un programme essaie d’accéder un espace mémoire d’une page, un message d’exception appelé une erreur de page est levé. Le matériel ou le système d’exploitation est informé de cette page absente et la transfère de la mémoire virtuelle à la mémoire

La piles (stack) et le tas (heap)

Le tas n'a pas de vocation particuliere et est un bloc de mémoire allouable au byte près. Dans le tas, des bloc mémoires peuvent être alloués ou supprimés, laissant des « trous » inutilisés. Si un récupérateur de mémoire (garbage collector) ne passe pas en arrière pour compacter l’espace laissé vacant, la performance se dégrade et on peut manquer plus rapidement de mémoire. Néanmoins, l’espace mémoire du tas est essentiel pour contenir des nouvelles informations non prévues.

La pile est de la mémoire paginée (réserve par page de 4 Ko) et a pour seule utilisateur le registre pointeur de pile (ESP pour Extended Stack Pointer). Au démarrage, il y a obligatoirement une pile de crée avec le programme. La pile est particulièrement efficace par sa simplicité : On ne peut qu’empiler ou dépiler de la pile, les blocs mémoire sont toujours contigus, ne laissant pas de « trous » contrairement au tas.

Adressage

On parle d’une architecture 32-bits lorsque les mots manipulés par le processeur ont une largeur de 32 bits, ce qui leur permet de varier entre les valeurs 0 et 4 294 967 295 pour un mot non signé (232), et entre −2 147 483 648 et 2 147 483 647 pour un mot signé (232-1). Avec la version 64-bits de Windows, la mémoire maximale n’est pas 264, mais limitée par la version de Windows. Par exemple, pour Windows 7, on aura

  • Starter, Home Basic: 8GB

  • Home Premium: 16GB

  • Professional, Enterprise, Ultimate: 192GB

Lorsque le mot de 32 bits sert à coder l’adresse d’un élément, il peut adresser une mémoire de taille 4 Go. Donc un système d'exploitation Microsoft Windows de 32 bits ne pourra pas utiliser plus de 4 Go de RAM.



Selon le type de référence demandé (entier, caractère, entier long, flottant double, …), l’adresse mémoire réfère à l’adresse la plus basse en mémoire .

0x00000C800F2B-0x00000C800F24 : 3041 C042 D043 B544

Si on réfère au caractère à l’adresse 0x00000C800F24, on parlera de la lettre « D » (0x44). Le caractère suivant sera « μ » pour 0xB5. Celui d’après sera la lettre « C ». Notons au passage que la lettre « C » se trouve en réalité à l’adresse 0x00000C800F26.

Pour un entier, nous aurons à l’adresse 0x00000C800F24 la valeur 46404 (0xB544).

Pour un entier long, ce sera 3494098244 (0xD043B544).

Finalement, pour un flottant double, on aura 3.06601592743e-76 pour 0x3041C042D043B544.

Ainsi, comme nous l’avons vu au premier cours, l’interprétation de la valeur à une adresse donnée variera en fonction du type de donnée à examiner.

Utilisation de la mémoire par un programme

Préparation du code

Dans l’exemple suivant, voyons comment un programme est utilisé en mémoire. Prenons le code simple qui suit :

#include

static void display(int i, int *ptr);

 

int main(void)

{

int x = 5;

   int *xptr = &x;

   printf("Dans le MAIN():\n");

printf("La valeur de x est %d et est à l’adresse %p.\n", x, &x);

printf("Le pointeur xptr pointe à l’adresse %p qui contient la valeur %d.\n", xptr, *xptr);

display(x, xptr);

return 0;

}

 

void display(int y, int *yptr)

{

char var[7] = "ABCDEF"; 

printf("Dans la function DISPLAY():\n");

printf("La valeur de y est %d et est à l’adresse %p.\.\n", y, &y);

printf("Le pointeur yptr pointe à l’adresse %p qui contient la valeur %d.\n", yptr, *yptr);

}
À la compilation, le code est fragmenté en objet distinct. Les appels de code hors du programme principal sont énumérés dans une table de relocalisation. Dans le code plus haut, nous en avons deux exemples hors du MAIN() :

  1. le code pour la fonction DISPLAY()

  2. le code pour la fonction PRINTF de la librairie STDIO

Comme l’assemblage en langage machine ôte toute référence d’étiquettes (comme DISPLAY() ou PRINTF), la table de relocalisation est ajoutée au programme principal pour lui rappeler de faire appel à ces autre objets étrangers.

elocation record and symbol table

Ainsi, à la phase finale de la compilation, l’éditeur de liens (linker) résoudra ces références en remplaçant (certains diront en fusionnant) l’étiquette de ces objets par le code véritable ou l’adresse du code de ces objets. On parle alors de liens statiques car définis à la création de l’exécutable.

Dans certains cas, les objets ne seront pas fusionnés avec le code. Au lieu de cela, des instructions particulières seront insérées dans votre code afin d’informer celui-ci d’appeler le code manquant au moment de son exécution. On parle de liens dynamiques. C’est généralement le cas des programmes qui font appel aux DLLs. Nous verrons les DLL dans un cours prochain.

Exécution du code statique

Lorsque le code est exécuté, il est avant tout chargé en mémoire. Généralement, le programme est composé de 5 zones :

  1. le code aussi appelé segment texte : les instructions, « l’intelligence » de votre programme est chargé en mémoire, juste au dessus de noyau de système d’exploitation;

  2. les constantes et variables initialisées : toute variable, constante ou tableau de longueur fixe et non-nulles sont mise après le code;

  3. les variables non-initialisées : vient ensuite les variables non-initialisées délibérément;

  4. le tas (heap) : bloc mémoire non défini mais utilisable par le code pour des demandes à la volée. Les demandes d’espace mémoire sont toujours répondues par la disponibilité du tas. Des commandes comme malloc(), new, free() et delete empruntent ou restituent l’espace du tas. Si l’espace n’est jamais restitué, on manquera d’espace mémoire à un moment donné. On parlera alors des applications qui ont des fuites ou pertes de mémoire.

  5. La pile : utilisé pour les variables temporaires qui sont utilisées comme paramètre par une fonction ainsi que les adresses de retour une fois cette fonction terminée. Par exemple, void display(int y, int *yptr)dans notre exemple plus haut. La pile ne peut être accédée que par la technique « dernier arrivé, premier sorti » (LIFO – Last in, first out), soit en empilant ou en dépilant de sur cette pile.
    La pile commence à la dernière adresse mémoire et descend progressivement vers le tas.

ttp://www.tenouk.com/modulew_files/ccompilerlinker005.png

Exercices

  1. Donner la représentation binaire de l’entier long 3494098249?


  2. Retrouvez la valeur du caractère à la même adresse mémoire que l’entier long précédent.


  3. Donner un exemple d’utilisation du tas avec l’entier long défini en 1).


  4. Expliquer pourquoi et dans quelle zone mémoire les éléments suivant devraient être chargés :

    1. CONST PI ; // π

    2. Double sqrt(double x); // racine carrée

  5. Que se passe-t-il quand un programme utilise la récursivité? (Il appelle une sous-routine plusieurs fois de suite.)

similaire:

Swap, traduisez fichier d\Contrat = instrument qui permet de réaliser des opérations économiques...

Swap, traduisez fichier d\Pourquoi echangeons-nous ? Pour la plupart des choses, nous ne pouvons...
«faire plaisir» à l’autre (ce qui n’est pas l’enjeu de l’échange lorsque, par exemple, on achète une baguette de pain). Ainsi, «l’échange»...

Swap, traduisez fichier d\P ce fichier a été télécharger depuis le site

Swap, traduisez fichier d\Figure Le fichier Client sur le cluster Hadoop

Swap, traduisez fichier d\Echange de bonnes pratiques

Swap, traduisez fichier d\Réseau d’échange et de coopération

Swap, traduisez fichier d\Système d'échange des données du pes

Swap, traduisez fichier d\Système d'échange des données du pes

Swap, traduisez fichier d\Projet mundus acp : bourses d’échange

Swap, traduisez fichier d\Programme d’échange avec le rotary club international








Tous droits réservés. Copyright © 2016
contacts
ar.21-bal.com