Skip to main content

Vous pouvez accomplir de nombreuses tâches de programmation dans VOS et OpenVOS sans connaître les détails de la manière dont le système d'exploitation gère l'espace d'adressage de l'utilisateur. Mais il est amusant de connaître les détails, et parfois, pour accomplir une tâche, vous devez ajuster la configuration par défaut. Ce billet est une introduction à l'espace d'adressage utilisateur de VOS.

L'espace d'adressage de l'utilisateur VOS est divisé en 5 zones, chacune d'entre elles étant utilisée dans un but spécifique. Dans l'ordre, de l'adresse la plus basse (@0x) à l'adresse la plus haute (@7FFFFFFFx), il s'agit de la zone du module de programme, de la zone de mémoire virtuelle partagée allouée dynamiquement, du tas d'utilisateurs, de la pile d'utilisateurs et d'une petite zone réservée à l'utilisation par le système d'exploitation lui-même. Le schéma suivant montre l'ordre de ces zones. Il n'est pas à l'échelle. Ce diagramme est spécifique à l'implémentation de la série V (VOS version 15.0 et supérieure).

Espace d'adressage des utilisateurs d'OpenVOS
Module de programme
Mémoire virtuelle partagée
Le tas d'utilisateurs
(zone morte)
Pile d'utilisateurs
Données du système

La taille de la zone du module de programme est fixée à 128 Mo. La taille de la zone de données du système est fixée à un peu moins de 2 Mo. La taille des 3 autres zones peut être ajustée pour satisfaire les besoins du programme en cours. La taille par défaut de la zone de mémoire virtuelle partagée est de 896 Mo. Ainsi, les deux premières zones occupent 1 gigaoctet ou la moitié de l'espace d'adressage. La taille par défaut du tas d'utilisateurs varie quelque peu selon la version de VOS ou d'OpenVOS. Dans la version 17.0, la taille par défaut est de 64 Mo. La taille par défaut de la pile utilisateur est de 8 Mo. L'espace non utilisé entre le tas et la pile est appelé la zone morte. Comme le tas augmente (des adresses basses aux adresses hautes) et la pile diminue (des adresses hautes aux adresses basses), la zone morte peut être revendiquée par le tas ou la pile pour expansion. La quantité totale de mémoire virtuelle disponible pour le tas, la pile et les données système est de 1 gigaoctet supplémentaire. Au total, un processus utilisateur a accès à 2 gigaoctets de mémoire virtuelle.

La quantité totale d'espace de tas qui peut être utilisée est soumise à une limite administrative. Il en va de même pour l'espace de pile et pour la quantité totale d'espace (qui est la somme de l'espace du module de programme, de l'espace de mémoire virtuelle partagée, de l'espace de pile et de l'espace de pile). Les limites à l'échelle du module sont affichées à l'aide de la commande list_default_cmd_limits, et modifiées à l'aide de la commande update_default_cmd_limits. Les nouveaux processus héritent de ces valeurs pour l'ensemble du module. Une fois le processus lancé, leurs limites peuvent être consultées à l'aide de la commande list_process_cmd_limits et modifiées à l'aide de la commande update_process_cmd_limits.

Les valeurs limites de l'ensemble du processus sont ensuite utilisées pour initialiser les limites utilisées chaque fois qu'un programme est exécuté. Une fois qu'un programme est lancé, il peut appeler les sous-programmes s$get_current_cmd_limits et s$set_current_cmd_limits pour récupérer ou modifier les limites pour la durée de son exécution. De cette façon, un programme peut réserver plus d'espace pour sa pile que la valeur initiale par défaut du système, ou peut augmenter la quantité d'espace de pile qui est autorisée à être utilisée. Inversement, s'il craint d'utiliser trop d'espace, peut-être à cause d'une erreur de codage, il peut également diminuer la quantité d'espace qu'il peut utiliser.

Pour plus d'informations, lisez la description des commandes update_default_cmd_limits et bind.

 

2024 Stratus Technologies.