# 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
Process list
PROCESS application (D)
PROCESS application

    State: DSequencerCurrent kernel (Kernel main)Kernels:Kernel main (S)Kernel main (D)

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

- Un état d'exécution du processus qui a la même signification que celui des noyaux (ici, D indique que le processus est sur un point d'arrêt).
- Un séquenceur (vous pouvez cliquer sur le bouton séquenceur pour faire afficher l'état du séquenceur).
- Un noyau courant.
- Une liste de noyaux avec leur état respectif.
- Un nom qui permet de décrire l'objectif du code exécuté par tous les noyaux de la liste.

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.

- Dans un processus, il y a au plus une seule instruction en cours d'exécution à chaque moment de la vie du processus.
- Les données en mémoire accessibles uniquement depuis 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.