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

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

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.