La gestion du stockage qui ne produit pas de fragmentation interne est : la gestion du stockage segmenté. Dans la méthode de gestion du stockage segmenté, l'espace d'adressage du travail est divisé en plusieurs segments, et chaque segment définit un ensemble d'informations logiques. Chaque segment est adressé à partir de 0 et utilise un espace d'adressage continu. L'espace d'adressage de l'ensemble du travail est bidimensionnel car il est divisé en plusieurs segments.
Une gestion du stockage qui ne produit pas de fragmentation interne est : une gestion du stockage segmentée. Seule la gestion du stockage paginé présente une fragmentation interne, tandis que la gestion du stockage segmenté présente une fragmentation externe.
Gestion du stockage de pagination
La gestion du stockage de pagination consiste à diviser l'espace d'adressage logique d'un processus en plusieurs tranches de taille égale. On l'appelle page ou page, et chaque page est numérotée, à partir de 0, comme la page 0, la page 1, etc.
En conséquence, l'espace mémoire est également divisé en plusieurs blocs de stockage de même taille que la page, appelés blocs (physiques) ou cadres de page (frames), et ils sont également numérotés, comme le bloc 0#, 1 #blocs etc. Lors de l'allocation de mémoire à un processus, plusieurs pages du processus sont chargées en unités de bloc dans plusieurs blocs physiques qui peuvent ne pas être contigus. Étant donné que la dernière page du processus ne tient souvent pas en un seul morceau, une fragmentation inutilisable se forme, appelée « fragmentation sur la page ».
Gestion du stockage segmenté
Le but de l'introduction de la gestion du stockage segmenté est principalement de satisfaire les utilisateurs (programmeurs) dans les exigences de programmation et d'utilisation, certaines d'entre elles difficiles à rencontrer avec d’autres méthodes de gestion du stockage. En conséquence, cette approche de gestion du stockage est devenue aujourd’hui la base de toutes les approches de gestion du stockage.
Dans la méthode de gestion du stockage segmenté, l'espace d'adressage du travail est divisé en plusieurs segments, et chaque segment définit un ensemble d'informations logiques. Par exemple, il existe le segment de programme principal MAIN, le segment de sous-programme X, le segment de données D, le segment de pile S, etc. Chaque segment a son propre nom. Par souci de simplicité, un numéro de segment peut généralement être utilisé à la place du nom du segment. Chaque segment est adressé à partir de 0 et utilise un espace d'adressage continu. La longueur du segment est déterminée par la longueur du groupe d'informations logique correspondant, la longueur de chaque segment est donc différente. L'espace d'adressage de l'ensemble du travail est bidimensionnel car il est divisé en plusieurs segments. Autrement dit, son adresse logique se compose du numéro de segment (nom du segment) et de l'adresse dans le segment.
L'adresse dans l'adresse segmentée a la structure suivante :
Dans cette structure d'adresse, un travail peut avoir jusqu'à 64 000 segments, chacun La longueur maximale d'un segment est de 64 Ko. La méthode de segmentation a été prise en charge par de nombreux compilateurs et le compilateur peut générer automatiquement plusieurs segments en fonction du programme source. Par exemple, le compilateur Pascal peut créer des sections distinctes pour les variables globales, la pile d'appels de procédure utilisée pour stocker les paramètres et adresses de retour correspondants, la partie code de chaque procédure ou fonction, les variables locales de chaque procédure ou fonction, etc. De même, le compilateur Fortran peut créer des sections distinctes pour les blocs communs et allouer une section distincte pour les tableaux. Le chargeur charge tous ces segments et attribue à chaque segment un numéro de segment.
La méthode de gestion du stockage segmenté est introduite principalement pour répondre à la série suivante de besoins des utilisateurs et des programmeurs :
1) Programmation pratique
Habituellement, les utilisateurs divisent leurs tâches en plusieurs segments selon des relations logiques. Chaque segment est adressé à partir de 0 et a son propre nom et sa propre longueur. Par conséquent, l'adresse logique à laquelle vous souhaitez accéder est déterminée par le nom du segment (numéro de segment) et le décalage au sein du segment (adresse intra-segment). Par exemple, les deux instructions suivantes utilisent le nom et l'adresse du segment :
LOAD 1, [A] 〈D〉
STORE 1, [B] | ;
Parmi elles, la signification de la première instruction est de lire la valeur de l'unité D du segment A dans le registre 1 ; la signification de la dernière instruction est de stocker le contenu du registre 1 dans l'unité C du segment ; B. .
2) Partage d'informations
Lors du partage de programmes et de données, il est basé sur l'unité logique d'information. Par exemple, partagez certaines routines et fonctions. La « page » dans le système de radiomessagerie n'est qu'une unité physique (bloc) pour stocker des informations, qui n'a pas de signification complète et n'est pas pratique pour le partage ; cependant, un segment est une unité logique d'informations ; Il en ressort que pour réaliser le partage de segments, on espère que la gestion du stockage pourra être adaptée au mode d'organisation des segments du programme utilisateur.
3) Protection des informations
La protection des informations protège également les unités logiques d'informations. Par conséquent, la gestion segmentée peut réaliser la fonction de protection des informations plus efficacement et plus facilement.
4) Croissance dynamique
Dans les applications pratiques, certains segments, notamment le segment de données, continueront de croître au cours de l'utilisation, et il est impossible de savoir exactement comment le segment de données va croître à l'avance . Quel âge a-t-il ? Les autres méthodes de gestion du stockage mentionnées ci-dessus sont difficiles à faire face à cette situation de croissance dynamique, mais la méthode de gestion du stockage segmentée peut mieux résoudre ce problème.
5) Lien dynamique
La liaison dynamique signifie que plusieurs segments du programme cible ne sont pas liés entre eux avant l'exécution du travail. Pour exécuter, chargez d'abord le programme cible correspondant au programme principal dans la mémoire et démarrez l'exécution. Lorsqu'un certain segment doit être appelé pendant le processus en cours, le segment (programme cible) est chargé dans la mémoire et lié. On peut voir que les liens dynamiques nécessitent également des segments comme unité de gestion.
Pour plus de connaissances connexes, veuillez visiter : Site Web PHP chinois !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!