Section courante

A propos

Section administrative du site

L'interpréteur P-Code

Les programmes OS-9 Pascal compilés sous forme de P-Code peuvent être exécutés de manière interprétative en utilisant soit "PascalN", l'interpréteur normal, ou "PascalS", un interpréteur d'échange (ou "mémoire virtuelle") pouvant exécuter des programmes très volumineux.

À propos des interpréteurs P-Code

Une fois que vous avez compilé avec succès votre programme OS-9 Pascal, vous pouvez l'exécuter à l'aide d'un interpréteur "P-Code". Il lit la représentation du P-Code écrite par le compilateur sur le "PCODEF" (ou tout autre nom que vous avez peut-être donné) et exécuter le programme OS-9 Pascal. Il comprend également des fonctionnalités spéciales de sorte que si une erreur se produit lorsque le programme est en cours d'exécution, le type d'erreur, le nom de la procédure incriminée et la ligne de déclaration du programme source correspondante peuvent être identifiés.

Le système OS-9 Pascal comprend deux interpréteurs de P-Code différents : PascalN étant l'interpréteur normal, et OS-9 Pascal étant l'interpréteur d'échange ou "mémoire virtuelle". Le PascalN est préféré pour exécuter la plupart des programmes car il est le plus rapide. Le OS-9 Pascal est utilisé uniquement dans les cas où le programme compilé est trop volumineux pour tenir dans la mémoire de votre ordinateur. L'appel de l'interpréteur est simple : il suffit de taper son nom suivi du nom du fichier P-Code à exécuter. Par exemple :

pascaln pcode-filename
pascals pcode-filename

Dans l'exemple ci-dessus, le pcode-filename peut être le nom d'un fichier P-Code dans le répertoire de données courant ou une liste de chemins vers un fichier P-Code dans un autre répertoire.

Description détaillée des lignes de commande de l'interpréteur P-Code

La ligne de commande OS-9 utilisée pour appeler PascalN ou PascalS peut contenir une ou plusieurs des options suivantes :

Le format des lignes de commande PascalN ou PascalS est :

OS9:PascalN Pcodefile [Run-Time Options] [: Params]
OS9:PascalS Pcodefile [Run-Time Options] [: Params]

Les paramètres entre "[" et "]" sont facultatifs.

Chemins d'entrée/sortie standard

Les trois chemins d'entrée/sortie standard associés à tout programme OS-9 sont également utilisés par les interprètes. Les chemins OS-9 pour l'entrée standard, la sortie standard et l'erreur/état standard sont associés aux fichiers standard intégrés de Pascal appelés "INPUT", "OUTPUT" et "SYSERR". Ces trois fichiers sont toujours automatiquement ouverts par l'interpréteur de P-Code pour être utilisés par votre programme OS-9 Pascal. Si la ligne de commande ayant appelé l'interpréteur n'a pas redirigé les entrées/sorties, les chemins par défaut utilisés sont généralement le terminal de l'utilisateur. Le fichier standard INPUT est ouvert en lecture, le fichier standard OUTPUT est ouvert en écriture et le fichier standard SYSERR est ouvert en mode mise à jour (lecture et écriture). Ces fichiers peuvent être utilisés pour des entrées/sorties interactives ou pour accéder à des fichiers de stockage de masse. Voici quelques exemples d'appels d'interpréteurs avec redirection d'entrée/sortie :

pascals </d0/user5/indata s20k >/P
pascaln </t2 >/t2 >>/t2 L10000 E4000
pascals >/dl/reports/printfile S10k E1000

Options d'exécution

La ligne de commande de l'interpréteur peut éventuellement inclure une liste d'options d'exécution affectant les performances de l'interpréteur et les rapports statistiques. Ils définissent généralement les tailles d'allocation de mémoire et/ou permettent la génération du rapport de statistiques de mémoire. L'utilisation de tampons d'échange de code virtuel, pouvant être affectés par ces paramètres, est décrite ci-dessous.

Lors de l'utilisation des interpréteurs PascalN et PascalS, la directive "#memsize" de l'intepréteur de commande n'a aucun effet sur la mémoire allouée. L'allocation de mémoire peut être spécifiée en utilisant l'une des deux méthodes. La première consiste à utiliser les options de compilation pour incorporer les requêtes dans le code. Il est particulièrement utile pour rendre un programme sous forme P-Code facile à exécuter pour les utilisateurs ne connaissant pas toutes les options d'exécution de OS-9 Pascal. La mémoire est allouée automatiquement, sans intervention de l'utilisateur, lorsqu'elle est initialement demandée via la méthode de compilation. La deuxième méthode consiste à utiliser les options d'exécution pour demander de la mémoire à partir de la ligne de commande.

Il existe un certain nombre d'options d'allocation de mémoire d'exécution pouvant être spécifiées lors de l'utilisation de l'un ou l'autre des interpréteurs pour exécuter un programme sous forme de P-Code. Les options sont utilisées pour contrôler l'allocation de mémoire pour la zone LOCAL STACK, la zone EXTENDED STACK, la zone HEAP STORAGE initiale et, lors de l'utilisation de OS-9 Pascal, la zone SWAP BUFFER. Un seul caractère est utilisé pour sélectionner l'une des zones de mémoire. Le caractère de sélection est ensuite suivi d'une valeur entière représentant la quantité de mémoire que vous souhaitez allouer à cette zone. Les valeurs entières peuvent être sous l'un des deux formats suivants :

Le caractère de sélection et les zones de mémoire qu'ils définissent sont indiqués ci-dessous avec une brève description de leur utilisation :

Caractère Nom Description
"L" ou "l" LOCAL STACK Pile local
"E" ou "e" EXTENDED STACK Pile étendue
"H" ou "h" DYNAMIC HEAP Tas dynamique
"S" ou "s" SWAP BUFFERS Échange de tampon

Voici quelques exemples d'options d'exécution :

PascalN pcodef L10000 E500
PascalN pcodef e300 h200 L400
PascalS pcodef L1000 S20K H1000

Chaîne de caractères de paramètres

La ligne de commande peut éventuellement inclure une chaîne de 80 caractères maximum, étant mise à la disposition du programme en cours d'exécution dans un tableau spécial appelé «SYSPARAM».L'option peut être utilisée pour transmettre à votre programme OS-9 Pascal des informations telles que les valeurs d'initialisation, les noms de fichiers,... Il s'agit d'une fonctionnalité de OS-9 Pascal et non d'une fonction Pascal standard. Le tableau dans lequel ces données sont transmises au programme est prédéfini comme :

sysparam :ARRAY [0..79] OF char;

Le programme peut accéder à sysparam comme s'il était spécifiquement défini. La chaîne de caractères de paramètres commence par un caractère ":" (n'étant pas transmis au programme) suivi de 80 caractères maximum. Les caractères supplémentaires sont ignorés. Si moins de 80 caractères sont donnés, ou si aucune chaîne de caractères de paramètres n'est donnée, des caractères d'espacement seront fournis pour remplir le tableau. La chaîne de caractères de paramètres ne peut pas inclure de caractères de contrôle ou l'un des caractères ayant une signification spéciale pour le OS-9 Shell (< > #; ou !) Voici des exemples :

pascaln pcodef :ce message est transmis au programme
pascaln sales.analysis >/p :Rapport pour la boutique quelconque
pascals translate :channel5,channel8,noprint

Fichiers utilisés par les interpréteurs

Comme mentionné précédemment, l'interpréteur lira le P-Code du programme OS-9 Pascal à partir du nom de fichier que vous spécifiez sur la ligne de commande. Le fichier "SUPPORT", contenant la bibliothèque de support du langage machine pour pratiquement toutes les parties du système OS-9 Pascal, est requis par PascalN et PascalS et sera automatiquement chargé à partir du répertoire d'exécution courant. Vous pouvez également le précharger en utilisant la commande OS-9 "load support" pour gagner du temps si vous utilisez constamment les interpréteurs.

Le fichier "PASCALERRS" doit également se trouver dans le répertoire d'exécution. Le PASCALERRS contient toutes les chaînes de caractères de message d'erreur d'exécution. Si ce fichier n'est pas trouvé dans le répertoire d'exécution, toute erreur d'exécution n'imprimera que le numéro d'erreur sans la description textuelle normale d'accompagnement. De plus, si PASCALERRS n'est pas dans le répertoire d'exécution, la procédure standard SYSREPORT ne fonctionnera pas correctement.

Choisir entre PASCALS et PASCALN

Le PascalN doit être utilisé pour exécuter des programmes P-Code à moins que la taille combinée du programme lui-même et de sa zone de données ne soit trop grande pour tenir dans la mémoire disponible dans votre système. Il fonctionne plus vite que PascalS et est un peu plus petit.

Le PascalS vous permet d'exécuter des programmes beaucoup plus volumineux dans l'intervalle de plus de 10 000 instructions source. En général, la capacité de PascalS à exécuter n'importe quel programme OS-9 Pascal est principalement limitée par la quantité de mémoire requise pour l'entreposage des variables globales et locales. La capacité à exécuter des programmes très volumineux est basée sur une technique appelée «échange de code virtuel». Le programme de taille maximale possible que PascalS peut exécuter est de 254 procédures dans le bloc externe; chacun contenant jusqu'à 32767 octets de P-Code (environ 8,3 mégaoctets), cependant, cela est pratiquement limité par la quantité d'espace disque disponible.

Comment fonctionne l'échange de code virtuel

Malgré son nom intimidant, le fonctionnement de l'échange de code virtuel est assez facile à comprendre. Il est également simple à utiliser, car PascalS le fait automatiquement sans presque aucun effort particulier de votre part. En fait, la principale raison pour laquelle son fonctionnement interne est décrit ici est que vous puissiez comprendre les facteurs affectant son efficacité et sa vitesse. L'échange de code virtuel est particulièrement important car deux parties principales du système OS-9 Pascal (le compilateur et le convertisseur de code natif) sont également des programmes P-Code exécutés sur PascalS.

Tous les programmes P-Code, qu'ils soient exécutés ou non par PascalS, sont automatiquement découpés en pages de «mémoire virtuelle» de 256 octets par le compilateur. Le PascalS copie ces pages du fichier PCODEF (ou équivalent) dans un fichier de disque temporaire. Bien sûr, une seule instruction P-Code peut être exécutée à la fois, donc théoriquement seule la page contenant l'instruction courante doit réellement être présente dans la "vraie" mémoire, et toutes les autres pages peuvent rester sur le disque jusqu'à ce qu'elles soient nécessaires. L'effet de mémoire virtuelle est obtenu car le fichier disque contenant les pages virtuelles peut être plus volumineux que la quantité réelle de mémoire réelle disponible.

Étant donné que les opérations de lecture de disque prennent un temps relativement long, le PascalS tente de conserver autant de pages en mémoire réelle que possible dans une zone divisée en blocs de 256 octets appelés «tampons d'échange». Afin de réduire davantage le nombre d'opérations de disque nécessaires, le PascalS tente de conserver les pages consultées le plus fréquemment dans les tampons d'échange. Si toutes, ou presque toutes, les pages peuvent tenir dans les tampons d'échange en même temps, le PascalS peut fonctionner presque aussi vite que PascalN. À l'autre extrême, si un pourcentage relativement faible des pages tient dans les tampons d'échange, beaucoup plus d'opérations de lecture de disque seront nécessaires pour que PascalS s'exécute plus lentement.

En mettant tout cela ensemble, il s'ensuit logiquement que les trois principaux facteurs affectant la vitesse des OS-9 Pascal sont :

Il y a toujours un minimum absolu de 8 tampons d'échange. Au-delà de cela, le nombre minimum dépend de l'utilisation de constantes de chaîne de caractères dans le programme OS-9 Pascal car les procédures utilisant des constantes de chaîne de caractères ont des pages spéciales allouées dans le fichier P-Code pour contenir les chaînes de caractères. Lorsqu'une procédure s'exécute et fait référence à une chaîne de caractères, la page de codes contenant la chaîne de caractères doit être échangée en mémoire comme une page de codes normale. Tant que cette procédure est toujours active, c'est-à-dire jusqu'à ce que la fin de la procédure soit atteinte et qu'un retour de la séquence de procédure soit exécuté, toutes les pages de constantes de chaîne de caractères ayant été échangées pour la procédure doivent rester verrouillées en mémoire. Si un programme n'utilisait aucune chaîne de caractères du tout, ce programme pourrait être exécuté en utilisant seulement les 8 tampons d'échange minimum. Il existe une méthode simple pour savoir s'il y a suffisamment de tampons d'échange disponibles - exécutez simplement le programme. S'il n'y a pas assez de tampons d'échange, PASCALS donnera un message d'erreur spécifique le indiquant. L'option d'exécution "S" peut être utilisée pour attribuer explicitement plus de tampons d'échange.

Lors de l'allocation de tampons d'échange, vous constaterez généralement que les performances augmentent de manière grumeleuse à mesure que davantage de tampons d'échange sont alloués. Si, par exemple, un programme s'exécute en, disons, 5 minutes avec 16 tampons d'échange, vous pouvez constater qu'il s'exécute en 4,5 minutes avec 18 tampons, 4 minutes avec 20 tampons et 2 minutes avec 21 tampons. Dans ce cas, un seuil est atteint entre 20 et 21 tampons. Ces seuils sont différents pour différents programmes et éventuellement pour différentes exécutions du même programme. Ils dépendent de la structure d'imbrication des procédures, de la taille des P-Code des différentes procédures et des instructions exécutées dans le programme. Pour de meilleures performances, la règle consiste simplement à allouer autant de mémoire que possible pour les tampons d'échange.



Dernière mise à jour : Samedi, le 11 juillet 2020