Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Emulateur  Annexe  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Référence des mots réservés (mots clefs)
Référence des procédures et des fonctions
Un aperçu du système OS-9 Pascal
L'interpréteur P-Code
L'éditeur de liaison OS-9 Pascal
Fonctions et procédures d'entrée/sortie OS-9 Pascal
Gestion des erreurs d'exécution
Écriture des procédures de langage assembleur
Conformité aux normes ISO
VCC
Références des codes d'erreur du OS-9 Pascal
Préface
Notes légal
Dictionnaire
Recherche

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.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Samedi, le 11 juillet 2020