Méthodes de partage de la mémoire réelle

Nous avons vu dans les pages précédentes comment gagner de la place en mémoire pour un processus, l'utilisateur simple, puis les problèmes du multiprogramming et de la gestion des parties de mémoire.
Nous allons ici avoir une vue d'ensemble des différentes techniques employées pour partager la mémoire entre les processus.

Partition fixe (Static Partition Specification)

Ce type de partage de la mémoire utilise des emplacements de tailles déterminées par le système d'exploitation (Fixed Partition Multiprogramming). Attention que ces tailles de partitions ne peuvent être modifiées une fois que le système d'exploitation est lancé.
Cette technique fixe la taille des partitions avant l'accomplissement des tàches, c'est pour cette raison qu'elle porte aussi le nom de Static Partition Specification.

Le système d'exploitation veillera donc à nous procurer différentes tailles de partitions pour stocker les processus.
Pour 32K de Mp, le système peut par exemple répartir la mémoire de cette manière : système résident = 10K, petits processus = 4K, processus moyens = 6K, gros processus = 12K.

Chaque partition ne peut contenir qu'un seul processus, qui nécessite une certaine quantité de mémoire.

Pour gérer la position en mémoire des processus en fonction de leur taille, nous avons une file par partition. Dans la file, nous retrouverons tous les processus de même taille en attente de pouvoir accéder à la partition.

Il existe certains problèmes avec ce type de gestion :

  • Si le processus n'occupe pas toute la taille de la partition, nous avons un gaspillage de la mémoire.
  • Si tous les processus qui se présentent nécessitent le même type de partition, une file sera encombrée, et les autres files peuvent être vides, ce qui est aussi un gaspillage de la mémoire.

 

Protection de la mémoire

Même dans le cas de l'utilisateur simple, nous avons vu que nous devions nous prémunir des risques d'accès par un programme à des cellules mémoires du système d'exploitation.

Un système de protection était mis en place, par exemple gràce à un registre de séparation qui contenait l'adresse de la limite du système d'exploitation.

Le système de protection est identique dans ce cas, mais nous utilisons deux registres :

  • un registre pour l'adresse de début de la partition (low boundary).
  • un registre pour l'adresse de la fin de la partition (high boundary).

Remarques :

  • Ce système n'est valable que dans le cas de l'utilisation d'adresses relatives.
  • Les registres de début et de fin portent aussi les noms de registre de base et registre d'étendue.
  • Ce système à 2 registres permet une relocation des processus en cours d'exécution.

 

Partition variable

Dans un système de gestion par partitions de tailles fixes le gaspillage d'espace mémoire est assez important.

Une solution est d'adapter la taille des partitions aux besoins des processus. C'est pourquoi nous parlons de multiprogrammation par partitions variables.

Fragmentation de la mémoire

Il existe deux types de fragmentation :

  • interne : le processus n'utilise pas tout l'espace de la partition. Une partie de la mémoire est inutilisée dans la partition.
  • externe : si aucun processus ne se présente avec une taille qui correspond à la partition, cet espace mémoire reste inutilisé.

Fragmentation externe

Au moment où un processus qui occupait une partition libère cet emplacement mémoire, il laisse un "trou" libre pour un autre processus.

Le problème est qu'il existe peu de chances que le processus suivant ait la même taille. Il s'en suit une fragmentation externe importante.

Coalescing holes

Une solution à cette fragmentation est de grouper les espaces mémoire libres. En effet, comme le système a défini une partition pour un processus, au moment où le processus quitte la mémoire les frontières de cette partition subsistent.

Si deux processus contigus libèrent la mémoire, nous nous retrouvons avec deux partitions contiguës libres, chacune est peut-être trop petite pour le nouveau processus. Il serait plus logique de dire que si plusieurs espaces libres sont contigus, ils forment en réalité un espace libre unique, et dans cet espace le nouveau processus peut accéder à la mémoire.

Cette technique porte le nom de coalescing holes. Aucun déplacement n'est effectué en mémoire, seules les limites des emplacements libres sont modifiées.

Compactage (Storage compaction)

La compaction n'est effectuée que si l'on utilise les registres de base et d'étendue.

La technique réside dans le déplacement des processus en mémoire pour les rendre contigus, en haut de la mémoire (juste après le système d'exploitation).

Il résulte de ce compactage des données vers le haut une place libre unique dans le bas de la mémoire.

 

Algorithmes de placement en mémoire

Gestion des partitions de tailles variables

Comme nous ne travaillons plus avec des partitions fixes, des politiques de gestion de placement des processus en mémoire doit être adoptée par le système d'exploitation.

First-fit strategy

Cette technique est celle du premier emplacement mémoire trouvé.

Le système d'exploitation garde en mémoire une table des espaces mémoire vides pour en assurer la gestion. Dans le cas d'une politique first-fit, la table n'est pas triée par ordre de taille, mais correspond à la disposition réelle de la mémoire.

Quand un job se présente en mémoire, le système parcourt le tableau jusqu'au moment où il rencontre un emplacement vide de taille égale ou supérieure à la place nécessaire. Au premier emplacement qui correspond, le processus est placé en mémoire.

Comme les emplacements dans la table correspondent naturellement à la disposition réelle de la mémoire, nous assistons à un effet de tassement des processus vers le haut de la table.

Cet algorithme est le plus rapide, mais ne fournit pas le meilleur rendement car dès qu'un emplacement vide est de taille suffisante pour le processus, ce dernier y est placé, même si il n'occupe qu'une petite partie de cet emplacement. Il en résulte un gaspillage (fragmentation interne).

Best-fit strategy

Cette technique est celle du premier meilleur emplacement mémoire.

La table des espaces mémoire vides est triée en fonction de la taille des espaces libres, de manière ascendante.

La méthode pour insérer le nouveau processus est la même, mais comme le tableau est trié par ordre croissant d'espace libre le premier emplacement trouvé est celui qui correspond le plus aux besoins.

Worst-fit strategy

Cette technique est celle du pire emplacement.

La table est triée ici du plus grand espace mémoire libre au plus petit.

Ce qui signifie que quand un processus se présente, il est automatiquement placé dans le premier emplacement, car c'est le plus grand. Si cet emplacement ne convient pas, aucun emplacement ne conviendra avant que d'autres processus libèrent plus de mémoire.

La philosophie ici est que si on place un processus dans l'emplacement mémoire le plus grand, il est fort probable que l'emplacement restant puisse encore héberger un autre processus. Ce qui n'est pas le cas si l'espace restant est calculé au plus juste.

Next-fit strategy

Cette technique est celle du prochain emplacement.

Il s'agit d'une variante de la technique first-fit, mais ici la recherche ne démarre pas du début du tableau, mais bien de l'emplacement mémoire qui suit celui qui vient d'être utilisé.

Le but de cette technique est de répartir les jobs sur toute l'étendue de la mémoire pour éviter l'effet de tassement (une partie de la mémoire qui n'est jamais utilisée).

 

Document créé le 07/05/04 05:12, dernière modification le 28/06/17 14:26
Source du document imprimé : https://www.gaudry.be/systeme-exploitation-memoire-partage.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.