• Aucun résultat trouvé

Partitionnement de la mémoire

Dans le document CHAPITRE 4 (Page 24-29)

Unité centrale

1.8. GESTION DE LA MÉMOIRE PRINCIPALE 1 Exigences de la gestion de mémoire

1.8.2 Partitionnement de la mémoire

La tâche principale de la gestion de la mémoire est de charger des programmes en mémoire pour qu’ils soient exécuté par la CPU. De nos jours, dans tous nos systèmes nous parlons de la mémoire virtuelle.

Cette méthode est basée sur deux principes de gestions, la SEGMENTATION et la PAGINATION.

Mais avant de discuter de la mémoire virtuelle et de sa gestion, nous allons parler de techniques plus simples. L’une de ces techniques, le partitionnement, a été utilisée sous plusieurs formes. Les deux autres techniques de base, pagination simple et segmentation simple ne sont pas utilisées sous cette forme. Cependant, nous nous en servirons à titre d’exemples sans prendre en considération la mémoire virtuelle en tant que telle.

1.8.2.1 Partitionnement fixe (statique)

Dans toutes les méthodes de gestion de la mémoire, nous pouvons assumer que les OS occupent une partie fixe de la mémoire principale et que le reste de la mémoire est disponible. Le méthode la plus simpliste est le partitionnement fixe. Il peut existé sous 2 formats, des partitions de même grandeur ou de grandeur différente.

Si un programme est ≤ que la grandeur des partitions il sera chargé dans une des partitions disponibles.

Si on veux charger un autre programme en mémoire, mais qu’aucune place n’est disponible, nous devrons alors transférer un programme afin de permettre de charge le nouveau.

De plus, si un programme est plus gros que la grandeur des partitions de la mémoire le programmeur devra utiliser la méthode overlaying. Tous les programmes chargé en mémoire, même ceux qui sont plus petits que la grandeur d’une partition, utilisent l’espace totale de la partition, ce qui cause de la fragmentation interne.

Nous pouvons diminuer l’impact de ces 2 problèmes en implantant des partitions de grandeurs différentes. La figure 14 nous montre un partitionnement qui vas jusqu'à 16 MB.

Figure 14 : Exemple de partitions fixes

1.8.2.2 Algorithme de placement

Lorsqu’un nouveau programme est prêt à être charger en mémoire le système doit alors décider dans quelle partition il va pouvoir le charger. Dans le cas d’un partitionnement de dimension égale (fig. 14a), il va choisir un des programmes qui n’est plus en mode actif et le remplacer, étant donné que la dimension du programme ou de la partition n’a pas d’influence sur le choix. Dans le cas de partition de dimensions différentes, plusieurs possibilités s’offrent au système. Nous allons voir que deux méthodes existent : une file par partition ou une file pour tous les partitions.

Si nous avons une file par partition, le choix de la partition se fera avant même de vérifier la disponibilité. Le système va choisir la partition qui se rapproche le plus du programme et mettre le programme en attente dans la file de cette partition. Le désavantage est que même s’il reste encore d’autres partitions non utilisées, le système ne va pas les utiliser. Si, en revanche, nous avons une file pour toutes les partitions, le système va essayer de charger le programme dans la partition libre la plus petite. Si toutes les partitions sont prises, une décision sera alors prise sur quel programme devra être déchargé.

Figure 15 : Algorithme de placement, partition fixe

1.8.2.3 Partitionnement dynamique

Afin de corriger les problèmes reliés au partitionnement fixe, une autre méthode a été inventée. Le partitionnement dynamique permet d’avoir un nombre différent et de différentes dimensions pour combler les besoins du système. Quand un programme est chargé en mémoire, on lui alloue la quantité exacte de mémoire dont il a besoin.

Nous pouvons voir à la figure 16 (ci-dessous), le processus d’allocation dynamique des partitions. Cette technique utilise un nombre variable de partitions de dimensions variables. Quand un programme est chargé en mémoire, on lui alloue l’espace nécessaire. Cette technique n’est plus utilisée de nos jours.

Elle a été remplacée par des techniques plus sophistiquées. L’allocation dynamique cause avec le temps ce qu’on appelle la fragmentation externe. On peut voir qu’au fur et à mesure que des programme sont chargés et retirés de la mémoire, il se crée des trous entre les programme. Il a donc été nécessaire de mettre ne place une technique de “compaction” (algorithme de ramasse-miettes). Le système va déplacer des programmes en mémoire de façon à combler les trous entre les programmes de manière à offrir de plus grands espaces continues de mémoire. Notons que la compaction coûte beaucoup de temps processeur.

Figure 16 : Partionnement dynamique

<

1.8.2.4 Algorithme de placement

Étant donnée que la compaction de la mémoire nous faire perdre beaucoup de temps CPU, il est donc important d’implanter de bon algorithmes de placement afin de bien remplir les trous. Nous allons voir trois méthodes :

1. Best-Fit (meilleur place) 2. First-Fit (première place) 3. Next-Fit (prochaine place).

La meilleure place choisi l’espace disponible qui a la dimension la plus proche du programme à charger.

Le première place, commence à vérifier la mémoire en partant d’en haut et va placer le programme dans la première espace qui peut recevoir le programme, sans se soucier de l’espace perdu. La prochaine place commence à vérifier la mémoire à partir du dernier programme placé et va allouer la prochaine

espace qui peut recevoir le programme à charger. La figure 17, nous montre l’application des 3 méthodes.

Figure 17 : Algorithme de placement, partition dynamique

Question : Laquelle de ces trois méthodes est la meilleure ?

Réponse : Tout dépend de l’ordre dans lequel les programmes sont chargés et déchargés. On peut cependant dire que le First-Fit est non seulement le plus simple à implanter, il est aussi le meilleur et le plus rapide. Le next-fit va fréquemment allouer la mémoire à la fin de la mémoire. La plus grosse partie de l’espace mémoire qui est libre est normalement à la fin de la mémoire physique, qui va donc être rapidement fractionnée en petites parties, on aura donc besoin de compacter souvent la mémoire. Le Best-fit, contrairement à se que son nom veut dire est la pire des méthodes. En utilisant cette méthode nous allons nous retrouver avec plein de petites espaces, toutes trop petites pour recevoir des programmes et nous devrons compacter la mémoire beaucoup plus souvent.

1.8.2.5 Le “Buddy System”

Voici un bon compromis entre les avantages et désavantages du partitionnement fixe et dynamique.

Cette méthode considère que la mémoire est un bloc d’une grandeur de 2U. Lorsqu’une requête d’allocation est faite, le système vérifie la grandeur et alloue l’espace disponible ou la divise en deux parties égales. Lorsque les blocs se libèrent ils vont être regroupés pour redevenir un seul bloc.

L’algorithme est comme suit :

• Débuter avec un seul block de taille 2U

• Sur une requête pour un block de taille S

1. si 2u1 <S≤2u alors allouer le block entier de taille 2U

2. Sinon partager ce block deux compagnons (buddies), chacun de taille 2U-1 3. Si 2u2 <S ≤2u1 alors allouer un des deux buddies

Dans le document CHAPITRE 4 (Page 24-29)

Documents relatifs