Cours gestion du mémoire physique sur un système, tutoriel & guide de travaux pratiques en pdf.
Introduction
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 (secondaire) : composée de supports magnétiques (disque dur, bandes magnétiques…), qui est beaucoup plus lente que la mémoire vive.
La mémoire est une ressource rare. Il n’en existe qu’un seul exemplaire et tous les processus actifs doivent la partager. Si les mécanismes de gestion de ce partage sont peu efficaces l’ordinateur sera peu performant, quelque soit la puissance de son processeur. Celui-ci sera souvent interrompu en attente d’un échange qu’il aura réclamé. Si un programme viole les règles de fonctionnement de la mémoire, il en sera de même. Dans ce chapitre on va mettre l’accent sur la gestion de la mémoire pour le stockage des processus concurrents.
Gestion sans recouvrement ni pagination
La monoprogrammation : Le modèle de base
La représentation de base, pour un système monoprocesseur et mono tâche, est montrée dans figure suivante : il s’agit d’une partition contiguë.
En général, le système d’exploitation se trouve au niveau des premières adresses de la zone mémoire de la RAM. Pour des systèmes avec un SE embarqué (consoles de jeu, téléphones mobiles, etc) le système se trouve souvent dans une partie non modifiable (ROM).
Afin de garantir de façon transparente mais flexible, l’amorçage d’un système quelconque, on retrouve souvent une combinaison des deux approches (RAM et ROM). La ROM contient alors un système minimal permettant de piloter les périphériques de base (clavier — disque — écran) et de charger le code d’amorçage à un endroit bien précis. Ce code est exécuté lors de la mise sous tension de l’ordinateur, et le « vrai » système d’exploitation, se trouvant dans la zone d’amorçage sur le disque, est ensuite chargé, prenant le relais du système minimal.
La multipligrammation
Multiprogrammation avec partitions fixes
Partition fixes de tailles égales
Cette partition peut être faite une fois pour toute au démarrage du système par l’opérateur de la machine, qui subdivise la mémoire en partitions fixes de tailles égales. Chaque nouveau processus est placé dans une partition vide. Ceci engendrera le problème de fragmentation interne due au faite que si la taille de partition est supérieure à l’espace recueilli par un certain processus le reste de cette partition restera vide ce qui cause une perte d’espace mémoire.
Le sous système chargé de la gestion de mémoire met en place une structure des données appelée table des partitions ayant pour rôle l’indication de l’état (libre ou occupée) de chaque partition en identifiant chacune soit par son adresse soit par son numéro.
Partition fixes de tailles inégales
Dans ce cas la mémoire est subdivisée en partitions de tailles inégales. Chaque nouveau processus est placé dans la file d’attente de la plus petite partition qui peut le contenir. Cette façon de faire peut conduire à faire attendre un processus dans une file, alors qu’une autre partition pouvant le contenir est libre.
Il existe deux méthodes de gestion :
on crée une file d’attente par partition. Chaque nouveau processus est placé dans la file d’attente de la plus petite partition pouvant le contenir. Inconvénients :
– on perd en général de la place au sein de chaque partition
– il peut y avoir des partitions inutilisées (leur file d’attente est vide) on crée une seule file d’attente globale. Il existe deux stratégies :
– Dès qu’une partition se libère, on lui affecte la première tâche de la file qui peut y tenir. Inconvénient : on peut ainsi affecter une partition de grande taille à une petite tâche et perdre beaucoup de place
– Dès qu’une partition se libère, on lui affecte la plus grande tâche de la file qui peut y tenir. Inconvénient : on pénalise les processus de petite taille.
L’alternative à cette approche consiste à n’utiliser qu’une seule file d’attente: dès qu’une partition se libère, le système y place le premier processus de la file qui peut y tenir. Cette solution réduit la fragmentation interne de la mémoire.
Multiprogrammation avec partitions variables
Au lancement du système, on crée une seule zone libre de taille maximale. Lorsqu’on charge un programme, on le place dans une zone libre suffisante, et on lui alloue exactement la mémoire nécessaire. Le reste devient une nouvelle zone libre. Lorsqu’un programme s’achève, sa partition redevient libre, et peut éventuellement grossir une zone libre voisine. Il n’y a donc ce qu’on appelle fragmentation externe.
La solution la plus flexible est d’adopter un système avec des partitions de taille variable et un système de va-et-vient qui permet d’utiliser le disque comme mémoire secondaire et d’y stocker un nombre de processus inactifs ou en attente.
Gestion avec recouvrement sans pagination
Dès que le nombre de processus devient supérieur au nombre de partitions, il faut pouvoir simuler la présence en mémoire centrale (MC) de tous les processus pour pouvoir satisfaire au principe d’équité et minimiser le temps de réponse des processus. La technique du recouvrement permet de stocker temporairement sur disque des images de processus afin de libérer de la MC pour d’autres processus.
On pourrait utiliser des partitions fixes, mais on utilise en pratique des partitions de taille variable, car le nombre, la taille et la position des processus peuvent varier dynamiquement au cours du temps. On n’est plus limité par des partitions trop grandes ou trop petites comme avec les partitions fixes. Cette amélioration de l’usage de la MC nécessite un mécanisme plus complexe d’allocation et de libération.
Le va et vient
Conceptuellement le va-et-vient, ou swap, se comporte exactement comme la mémoire vive, à la différence près qu’on ne peut y exécuter des processus (pour exécuter un processus sur le swap, il faut le charger en mémoire vive), ainsi que quelques considérations liées au médium de stockage, qui impose un accès et un stockage par blocs, mais que l’on peut négliger.
Un processus qui est inactif (soit bloqué, soit prêt) peut donc être placé dans le swap. Les stratégies de choix des processus à écrire sur disque sont sensiblement identiques à celles mises en œuvre pour l’ordonnancement des processus. Il est à noter qu’il existe deux types de solution : soit on alloue une place fixe dans le swap, pour chaque processus créé, soit on utilise le swap comme une grande zone de stockage dans laquelle les processus sont écrits selon les besoins et à un endroit déterminé en fonction de l’occupation au moment de l’écriture.
Opérations sur la mémoire
Le compactage de la mémoire permet de regrouper les espaces inutilisés. Très coûteuse en temps UC, cette opération est effectuée le moins souvent possible. S’il y a une requête d’allocation dynamique de mémoire pour un processus, on lui alloue de la place dans le tas (heap) si le SE le permet, ou bien de la mémoire supplémentaire contiguë à la partition du processus (agrandissement de celle-ci). Quand il n’y a plus de place, on déplace un ou plusieurs processus:
– soit pour récupérer par ce moyen des espaces inutilisés,
– soit en allant jusqu’au recouvrement. A chaque retour de recouvrement (swap), on réserve au processus une partition un peu plus grande que nécessaire, utilisable pour l’extension de la partition du processus venant d’être chargé ou du processus voisin.
Il existe trois façons de mémoriser l’occupation de la mémoire : les tables de bits (bits maps), les listes chaînées et les subdivisions (buddy).
Comme on le voit sur le schéma suivant on distingue trois méthodes de compactage :
– La première consiste tout simplement à recopier de mémoire à mémoire le programme à déplacer. Elle monopolise le processeur pour effectuer la copie ;
– La seconde effectue une copie du programme à déplacer vers le disque, puis une seconde copie du disque vers la mémoire au nouvel emplacement. Curieuse a priori, cette méthode s’explique et se justifie si le transfert de mémoire à disque et de disque à mémoire est effectué par un canal d’E/S, processeur spécialisé dans les échanges, qui laisse donc le processeur libre pendant les transferts. La recopie coûte toutefois un certain ralentissement du processeur, par vol de cycles.
– La dernière méthode est encore plus curieuse, mais se déduit de la seconde. On utilise deux canaux d’E/S, et on les boucle. L’utilisation de deux canaux est plus coûteuse que l’usage..
Gestion du mémoire physique sur un système (1.61 MB) (Cours PDF)