3. Gestion de la mémoire#

Une requête d’accès en lecture ou en écriture sur le segment de valeurs associé à un objet JEVEUX provoque, s’il n’y figure pas déjà, un chargement en mémoire du contenu du segment de valeurs associé. L’adresse mémoire d’un objet JEVEUX correspond à sa position relative dans le tableau ISZON. Au préalable, il est nécessaire d’effectuer une allocation dynamique, à l’aide de la routine JJALLS pour insérer le segment de valeurs. Lorsque la requête d’allocation échoue, le système refusant d’allouer une zone mémoire, un mécanisme de libération est déclenché, il peut entraîner des accès disque lorsque des zones associées à des segments de valeurs doivent être écrites sur le fichier associé à la base. Le nouveau segment de valeurs est alloué avec une tolérance de 8 entiers qui correspondent à l’espace minimum associé à un segment de valeurs (1 entier par descripteur). Lorsque la recherche de place mémoire échoue, on provoque un arrêt de l’application en erreur <S> (arrêt par le superviseur avec sauvegarde des concepts créés).

Un appel à la fonction système LOC à travers la routine JXLOCS permet d’obtenir l’adresse relative du début du segment de valeurs par rapport au tableau ISZON en utilisant la valeur de la position de référence du début de la zone mémoire obtenue dans JXALLM et stockée dans le commun /ILOCJE/. C’est l’usage de la routine JJALTY qui permet d’aiguiller sur le tableau Z. et d’obtenir suivant le type l’adresse par rapport à la bonne référence.

L’allocation d’un segment de valeurs associé à un objet de type dont la longueur est supérieure à l’unité d’adressage utilisée (par exemple pour le type CHARACTER *24) ne permet pas automatiquement de s’aligner par rapport au tableau ISZON, il est parfois nécessaire de se décaler de quelques mots. La valeur de ce décalage est stockée dans le deuxième descripteur précédant le segment de valeurs et la taille effective du segment de valeurs est ajustée en tenant compte de son type associé.

Il reste ensuite à actualiser les descripteurs associés au segment de valeurs, cette opération est réalisée par la routine JJECRS.

Recherche de place disponible

L’appel à la routine JEDISP permet de connaître au moment de l’appel, la taille des zones mémoire disponibles, elle effectue la recherche en parcourant l’ensemble de la segmentation mémoire et dépose au fur et à mesure la taille des zones libres ou déchargeables dans un tableau fourni par argument d’appel.

Vérification de la mémoire

Les écrasements mémoire qui affectent les descripteurs (état ou statut) ou le chaînage avant peuvent être détectés en utilisant la routine JXVERI. Cette routine examine un à un les descripteurs des segments de valeurs en mémoire. Un message d’erreur fatale est émis lors de la détection d’une anomalie, sinon la routine reste muette.