Une autre amélioration possible (et souvent retenue) est l'utilisation d'allocations non contigües : pagination et/ou segmentation.
L'allocation contiguë est très contraignante et entraîne généralement une fragmentation externe importante, qui de surcroît augmente avec le temps. Une solution consiste à découper en morceaux le processus, et d'allouer indépendemment pour chacun des morceaux une zone mémoire.
La mémoire logique (utilisable par le programmeur) est plus grande que la mémoire physique.
Processus i | 1 | 3 | 5 | ... | ||||||||||||
Processus j | 2 | 5 | 4 | ... |
Il faut gérer l'information :
Processus i | |
pages | cadres |
2 | 1 |
3 | 3 |
5 | 5 |
Processus j | |
pages | cadres |
1 | 2 |
10 | 5 |
13 | 4 |
Mémoire | |||
cadres | processus | ecriture | modifiée |
0 | |||
1 | i | x | x |
2 | j | x | |
3 | i | ||
4 | j | x | x |
5 | i,j |
Le partage des cadres par plusieurs processus permet :
Pour éviter une recherche (même dichotomique) dans la table des pages d'un processus, il est nécessaire d'avoir une table indicée par les pages, et donc un champ qui indique sa présence où non dans un cadre.
Une adresse logique est alors constituée de :
numéro de page | déplacement dans la page |
p | d |
(m-n) bits | n bits |
Le matériel nécessaire à la pagination (schéma page 269)
Supposons une mémoire de et une taille des pages de . La taille de la table des pages peut posséder entrées, et ne loge donc pas dans une page, elle est donc paginée.
Une amélioration consiste à utiliser une table de pages à plusieurs niveaux.
indice page principale | indice page secondaire | décalage | |
p1 | p2 | d | |
10 | 10 | 12 | pour un 80386 |
La page principale est en mémoire et seule les pages secondaires nécessaires également (entrées de la table primaire marquées présentes).
Une autre amélioration consiste à utiliser une mémoire associative. C'est une mémoire cache matérielle avec un nombre d'entrées restreint (32, 64), et qui permet d'associer en un seule cycle le numéro du cadre à un numéro de page, si l'entrée est présente. Ce dispositif est efficace s'il répond à 95/100 des requêtes.
Diminuer la taille des blocs va engendrer d'une part des sur-coûts de gestion des blocs; d'autre part un ralentissement des performances d'entrées-sorties.
Une fois de plus, il faut trouver le bon compromis.
C'est le traitement par logiciel des pages marquées absentes pendant le déroulement d'une instruction. Il faut :