Section courante

A propos

Section administrative du site

 Système d'exploitation  Utilisation  Tutoriel  Annexe  Aide 
Amiga
Apple
CP/M / DOS
CoCo
Cray
Mainframe
Mobile
OS/2
TRS-80
UNIX
Windows
Autres
AmigaDOS
AmigaOS
MorphOS
Apple DOS
System 1.0
System 1.1
System 2.0
System 3.0
System 3.1
System 3.2
System 3.3
System 4.0
System 4.1
System 4.2
System 4.3
System 6.0
System 7.0
System 7.1
System 7.5
System 7.6
Mac OS 8.0
Mac OS 8.1
Mac OS 8.5
Mac OS 8.6
Mac OS 9.0
Mac OS 9.1
Mac OS 9.2
Mac OS X
Mac OS X Server
Apple DOS
Caldera DR-DOS 7
CP/M
CP/M-80
CP/M-86
DOS
DR-DOS
FreeDOS
IBM DOS 4
IBM DOS 5
MS-DOS
PC DOS
PTS-DOS
DR-DOS 5
DR-DOS 6
DR-DOS 7
MS-DOS 1.25
MS-DOS 2.0
MS-DOS 2.11
MS-DOS 3.0
MS-DOS 3.20
MS-DOS 3.21
MS-DOS 3.3
MS-DOS 4
MS-DOS 5
MS-DOS 6
MS-DOS 6.2
MS-DOS 7.10
PC DOS 1.0
PC DOS 1.1
PC DOS 2.0
PC DOS 2.1
PC DOS 3.0
PC DOS 3.1
PC DOS 3.2
PC DOS 3.3
PC DOS 4.0
PC DOS 4.01
PC DOS 5.0
PC DOS 6.1
PC DOS 6.3
PC DOS 7.0
PC DOS 2000
FLEX
OS-9
COS
UNICOS
OpenVMS
OS/390
OS/400
VAX/VMS
z/OS
Android OS
Bada
EPOC
PalmOS
Citrix Multiuser
eComStation
OS/2 Version 1
OS/2 Version 1.1
OS/2 Version 1.2
OS/2 Version 1.3
OS/2 Version 2
OS/2 Version 2.1
OS/2 Warp 3
OS/2 Warp 4
LDOS
MultiDOS
NEWDOS
TRSDOS
AIX
FreeBSD
HP-UX
Linux
QNX
SkyOS
Solaris (SunOS)
UNIX
XENIX
ReactOS
Windows 95
Windows 98
Windows Me
Windows NT 4.0 Server
Windows 2000 Professionnel
Windows 2000 Server
Windows XP
Windows Server 2003
Windows Server 2003 R2
Windows Server 2008
Windows Server 2008 R2
Windows Server 2012
Windows Server 2012 R2
Windows Server 2016
Windows Server 2019
Windows Vista
Windows 7
Windows 8
Windows 10
Windows 11
FLEX
KolibriOS
Inferno
Medos-2
Oberon
Plan 9
p-System
RDOS
Introduction
Les premiers pas
Algol 68C et son système d'exécution
Préface
Notes légal
Dictionnaire
Recherche

Algol 68C et son système d'exécution

Le compilateur, lui-même écrit en Algol 68C, produit une sortie dans un langage intermédiaire appelé Zcode. Le Zcode est ensuite converti en langage machine au moyen d'un traducteur. Des paramètres associés au compilateur permettent de choisir la forme exacte du Zcode de manière à ce qu'il soit, dans certaines limites, bien adapté à l'ordinateur pour lequel la compilation est effectuée. Le compilateur ALGOL68C contient une fonction spéciale permettant de préserver l'environnement - notamment l'état de la pile - tel qu'il existe à un moment particulier de la compilation et de le rétablir ultérieurement. Ce mécanisme a été prévu pour que la compilation séparée des sections du programme soit possible.

Comme dans le cas d'autres langages, il est nécessaire, pour que le code généré puisse s'exécuter, qu'un certain nombre de routines standard soient présentes en mémoire. Celles-ci constituent le système d'exécution. Tout le système d'exécution, à l'exception d'une très petite partie, est écrit en Algol 68C. Cependant, le niveau le plus bas, contenant environ 220 instructions et connu sous le nom de MC, est écrit en langage assembleur. Il fournit les services de support, tels que l'allocation de tas et de piles, devant être présents pour que tout code compilé puisse s'exécuter. MC fait partie d'un segment appelé MIN contenant également une section de code pour supporter les opérations de déplacement des capacités et pour gérer les segments de capacité. Il est écrit en Algol 68C avec quelques instructions de code machine interpolées, notamment des instructions pour effectuer des opérations propres au CAP. Par exemple, il contient le corps de la procédure moveoa.p du Algol 68C contenant les instructions CAP pour le déplacement des capacités, à savoir MOVECAP et MOVECAPA. Il s'agit d'un exemple d'un dispositif parfois appelé write-around. Les fonctions disponibles dans le code machine, mais inconnues du compilateur d'un langage de haut niveau, peuvent être rendues disponibles par le biais d'appels de procédure dans le langage. D'autres instructions machine en plus de MOVECAP sont traitées de la même manière ; par exemple, l'appel de procédure Algol 68C :

  1. enter(proc, a, b, c, d)

est exécuté par une écriture autour constituée d'instructions machine chargeant les paramètres numériques a, b, c, d dans les registres B1, B2, B3, B4 puis entrent dans la procédure protégée PROC. On suppose qu'avant d'appeler la procédure d'entrée, le programmeur Algol 68C aura utilisé un appel à movecap pour placer sur la pile C les capacités qu'il souhaite passer en paramètres.

MIN constitue un segment du système d'exécution. Un autre segment, appelé SER, prend en charge le passage de messages et d'autres services de coordination. Un troisième segment, USE, contient un certain nombre d'écritures de niveau supérieur. L'une d'entre elles permet au programmeur d'écrire un appel à DIRMAN comme suit :

  1. dirman(a, b, c, d)

au lieu de la forme moins pratique et élégante :

  1. enter(dirman a, b, c, d).

D'autres offrent des fonctionnalités similaires pour STOREMAN. USE implémente également les appels de transput Algol 68C.

Chaque procédure protégée dans le système CAP est écrite et compilée comme un programme Algol 68C complet et inclut sa propre instance du système d'exécution, ou autant de celle-ci que nécessaire. Naturellement, le code lui-même est partagé. Les puissantes fonctionnalités incluses dans le système Algol 68C pour préserver et rétablir les environnements de compilation ont été d'une importance cruciale dans la conception et la mise en ouvre du système de compilation des procédures protégées, et sans elles, il aurait été difficile d'atteindre le même degré d'élégance et d'efficacité.

MAKEPACK est utilisé par le système Algol 68C pour placer les fonctionnalités des segments contenant le système d'exécution et d'un segment contenant le code compilé dans le segment de capacité P de la procédure protégée. Une procédure protégée typique est construite selon le plan suivant :

  1. BEGIN
  2.  # initialisation du code #
  3. END;
  4. DO # à l'infini #
  5. CASE firstargument IN
  6.  # code pour l'exécution des services offerts par la procédure protégée #
  7. ESAC;
  8.  return(result)
  9. OD;

Lorsqu'une procédure protégée est entrée pour la première fois après avoir été extraite du système de fichiers, le contrôle entre au début et le code d'initialisation est exécuté. Ce code peut être assez long et comprendra des opérations pour la configuration des canaux de messages. Il est suivi d'une instruction DO indéfinie contenant une instruction CASE activée sur le premier des paramètres entiers avec lesquels la procédure protégée est appelée ; c'est ce paramètre spécifiant la nature de l'opération. Le contrôle passe ainsi à la section appropriée du code dans l'instruction CASE et, une fois celle-ci exécutée, une procédure appelée retour est entrée. Cette procédure est implémentée dans la section MC du système d'exécution et provoque une sortie de la procédure protégée au moyen d'une instruction RETURN. Avant de faire cela, cependant, elle établit un lien de telle manière que, lorsque la procédure protégée est à nouveau entrée, le contrôle passe à un point immédiatement après l'appel à la procédure de retour par laquelle elle est partie. L'effet est que, lorsqu'une procédure protégée est appelée pour la première fois, le contrôle entre au début, mais les appels suivants reprennent là où le dernier s'est arrêté. Cela fournit ce qui est en fait un mécanisme de coroutine.

Certains services sont fournis par des procédures exécutées dans des processus indépendants. Le processus est normalement arrêté et réveillé par un message lorsque ses services sont requis. Les procédures destinées à être utilisées de cette manière sont construites selon le plan suivant :

  1. BEGIN
  2.  # initialisation du code #
  3. END;
  4. DO # à l'infini #
  5. WHILE messages (input) = 0 DO waitevent OD;
  6.  # recevoir un message avec reply(a, b, c, d) ; #
  7. CASE a IN
  8.  # code for performing services offered by the protected procedure #
  9. ESAC;
  10.  return reply(p, q, r, s) ;
  11. OD;

La décision de fournir ou non un service donné par le biais d'un processus indépendant est souvent quelque peu arbitraire. Le fait que les deux implémentations aient une structure très similaire permet d'effectuer relativement facilement un changement si nécessaire.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mardi, le 30 juillet 2024