# Introduction

Ce didacticiel est destiné aux nouveaux utilisateurs de la Simple Virtual Machine.

Dans ce didacticiel, vous allez arrêter prématurément l'exécution du code.

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

# Mise en place

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

    #!/usr/bin/env svm
    DESCRIPTION
    Shutdown example
    END
    LOG
    DEBUG "Shutdown" STYLE "default"
    PLUGIN "svmcom.so"
    OPTION -t FLAG test
    PROCESS "application"
    	CODE "main" INLINE
    		:com.message 1
    		:com.message 2
    		:com.message 3
    		:com.message 4
    		:com.message 5
    	END
    	MEMORY test
    END

# Arrêt naturel

Lancez l'application :

    ./arret.svm
    1
    2
    3
    4
    5

Toutes les instructions sont exécutées, puis la machine s'arrête, et rend la main au système.

Ce comportement, naturel a priori, est en fait très particulier : le processeur s'arrête automatiquement lorsqu'il n'a plus d'instruction a exécuter.

Un arrêt naturel de l'application survient lorsque le processeur n'a plus d'instruction a exécuter, à la fin du code.

# Arrêt du processeur

Modifiez le code de l'application :

Lancez maintenant l'application sans option, puis avec l'option -t :

    #!/usr/bin/env svm
    DESCRIPTION
    Shutdown example
    END
    LOG
    DEBUG "Shutdown" STYLE "default"
    PLUGIN "svmcom.so"
    OPTION -t FLAG test
    PROCESS "application"
    	CODE "main" INLINE
    		:com.message 1
    		:com.message 2
    		:shutdown :when @&test TRUE
    		:com.message 3
    		:com.message 4
    		:shutdown
    		:com.message 5
    	END
    	MEMORY test
    END

    ./arret.svm
    1
    2
    3
    4

    ./arret.svm -t
    1
    2

- L'instruction `:shutdown` permet d'arrêter le processeur.
- Une condition peut être ajoutée à l'instruction.

Dans toutes les applications que nous avons vues dans les didacticiels, un seul processeur était présent dans la machine : l'arrêt du processeur implique un arrêt automatique de la machine, avec un code de retour valant 0.

# Arrêt de la machine virtuelle

Dans certaines conditions, il peut être important de pouvoir arrêter la totalité de l'application. Cela peut être réalisé en demandant à la machine virtuelle de s'arrêter.

Modifiez le code, pour obtenir :

    #!/usr/bin/env svm
    DESCRIPTION
    Shutdown example
    END
    LOG
    DEBUG "Shutdown" STYLE "default"
    PLUGIN "svmcom.so"
    OPTION -t FLAG test
    PROCESS "application"
    	CODE "main" INLINE
    		:com.message 1
    		:com.message 2
    		:shutdown 1 :when @&test TRUE
    		:com.message 3
    		:com.message 4
    		:shutdown 0
    		:com.message 5
    	END
    	MEMORY test
    END

Et relancez l'application sans puis avec l'option -t, en ajoutant une commande shell affichant le code de retour de la machine :

    ./arret.svm ; echo "Result: $?"
    1
    2
    3
    4
    Result: 0

    ./arret.svm -t ; echo "Result: $?"
    1
    2
    Result: 1

- L'instruction `:shutdown code_de_retour` permet d'arrêter la machine virtuelle, même si plusieurs processeurs sont actifs.
- Le code passé à l'instruction sert de code de retour de la machine virtuelle au système d'exploitation sous-jacent.
- Une condition peut être ajoutée à l'instruction.

Pour rappel, le système d'exploitation considère que la machine virtuelle se termine sans erreur lorsque le code de retour est 0 et avec une erreur dans le cas contraire.

# Conclusion

Vous venez de voir comment arrêter l'exécution du code avant que celle-ci n'atteigne la fin du code.

L'instruction d'arrêt de la machine est à utiliser principalement lorsqu'il faut forcer un arrêt complet de l'application.

L'utilisation de l'instruction d'arrêt du processeur est beaucoup plus courante, notamment dans de grandes applications où l'arrêt naturel n'est plus suffisant.