Introduction

Ce didacticiel est destiné aux utilisateurs sachant écrire un peu de code de la Simple Virtual Machine.

Dans ce didacticiel, vous allez explorer la plus grande unité d'exécution de la machine virtuelle.

Le temps de lecture de ce didacticiel est estimé à 10 minutes.

Mise en place

Pour commencer, créez le canevas de l'application dans le fichier exécutable processus.svm en utilisant ce code :

#!/usr/bin/env svm
DESCRIPTION
Process exploration
END
LOG
DEBUG "Process"
PLUGIN "svmcom.so"
PLUGIN "svmrun.so"
ARGUMENT STR value
PROCESS "application"
	CODE "main" INLINE
		:run.protected_call $"child" value
		:com.message "Parent: " @&value
		:shutdown
	:symbol child
		:debug BREAK
		:com.message "Child: " @&P
		:shutdown
	END
	MEMORY value
	SEQUENCER run.stack
END

Un conteneur de noyaux

Lancez l'application en mode débugueur avec un argument de votre choix. Puis dans le débugueur, depuis le menu principal ouvrez la liste des processus en cliquant sur "Processes", puis ouvrez le seul processus de la liste :

Process
Main menu
Breakpoints
Machine
Schedulers
Processes
Kernels
Events
Plugins
Windows list
Process list
PROCESS application (D)
PROCESS application
State: D
Sequencer
Current kernel (Kernel main)
Kernels:
Kernel main (S)
Kernel main (D)

Dans cette fenêtre processus, vous pouvez constater la présence de :

D'une manière plus globale, on retrouve le schéma vu autour du séquenceur : une liste de noyaux attachés à un séquenceur, avec un seul noyau actif nommé ici noyau courant. Cet ensemble n'est en réalité pas l'ensemble de la machine virtuelle, mais un conteneur d'exécution de code appellé processus.

Un processus est un ensemble de noyaux attachés à un séquenceur et exécutés l'un après l'autre.

Principe fondamental d'un processus

Comme tous les noyaux d'un processus sont attachés au même séquenceur, seul un d'entre eux est en cours d'exécution.

Cela signifie que l'ensemble du code au sein d'un processus, même étalé sur plusieurs noyaux, est toujours exécuté séquentiellement ! Cela implique que les données accessibles uniquement à l'intérieur d'un seul processus ne nécessitent pas de mécanisme de synchronisation.

Conclusion

Vous venez de voir que les noyaux attachés à un séquenceur sont en fait encapsulés dans un concept plus large appellé processus.

Un processus offre une structure d'exécution de code avec une garantie importante : cela permet d'éviter les inquiétudes liées aux accès concurrents aux données d'un processus.