Simple Virtual Machine est une machine virtuelle multi-thread et extensible sous license GPLv3.
La Simple Virtual Machine est un projet open-source permettant d'écrire des applications avec :
L'élément central du projet est la machine virtuelle elle-même. C'est elle qui compile directement le fichier d'application et le code machine, intègre les extensions et exécute le code de l'application.
En plus de la machine, sont fournies :
La machine est versionnée XX.YY.AAAAMMJJ où :
En plus de la machine virtuelle, un autre binaire est fourni : il permet d'écrire des extensions en C ou en C++ pour la machine virtuelle dans un format de fichier regroupant les éléments de la machine associés au code C ou C++ qui leur correspond.
Le générateur produit un script shell qui peut être exécuté par Bash et qui lui-même créera un répertoire contenant :
Au lieu de proposer des exemples ici, qui demeureraient abscons sans une explication poussée, il est plutôt recommandé de suivre directement les didacticiels, qui présentent pas à pas les syntaxes et les sémantiques associées des fichiers sources de la machine et du générateur d'extension.
Pour télécharger l'archive et la compiler, il vous faudra les outils standards de compilation. Sous gentoo, ces outils sont installés de base dans le système. Sur une debian-like, il faudra build-essential, flex, bison, libtool et autotools-dev pour pouvoir compiler la machine virtuelle.
Une installation très classique consiste à décompresser l'archive de la machine, puis d'exécuter dans le répertoire de l'archive :
./configure
make -j
sudo make install
Toutes les instructions sont indiquées dans le fichier INSTALL
de l'archive.
Comme alternative, il est possible d'utiliser un conteneur Docker avec la machine et les extensions installées avec une de ces commandes :
docker run -it pappysvm/svm
podman run -it pappysvm/svm
Les dernières versions utilisables sont :
Les versions du projet sont élaborées en fonction des changements dans le projet :
Pour installer une extension, il faut en premier avoir installé la machine virtuelle. Puis l'installation de l'extension se fait en deux commandes (ici, l'extension array
est prise en exemple) :
svm_plugin -fi array.svm_plugin | bash
./svmpluginarray/plugin_install -m
Quelques fichiers de description d'extensions :
Ces fichiers sont à utiliser avec le générateur d'extensions, puis à compiler et installer sur le système selon votre convenance.
Pour une prise en main plus rapide et plus souple de la machine, ces didacticiels peuvent aider :
didacticiel_fr_000_prerequis.html
didacticiel_fr_001_invocation_application.html
didacticiel_fr_002_invocation_application_avec_debugueur.html
didacticiel_fr_003_ecriture_application_simple.html
didacticiel_fr_004_interaction_simple_avec_debugueur.html
didacticiel_fr_005_sauts.html
didacticiel_fr_006_manipulations_basiques_memoire.html
didacticiel_fr_007_adresses_memoire_et_pointeurs.html
didacticiel_fr_008_tableaux.html
didacticiel_fr_009_structures_de_controle.html
didacticiel_fr_010_arret.html
didacticiel_fr_011_booleens.html
didacticiel_fr_012_fonctions.html
didacticiel_fr_013_allocation_et_liberation_memoire.html
didacticiel_fr_014_memoire_globale.html
didacticiel_fr_015_interruptions_logicielles.html
didacticiel_fr_016_instructions_extension.html
didacticiel_fr_017_types_interruptions_extension.html
didacticiel_fr_018_points_entree_extension.html
didacticiel_fr_019_interaction_avancee_avec_debugueur.html
didacticiel_fr_020_drapeaux.html
didacticiel_fr_021_bibliotheques.html
didacticiel_fr_022_interruptions_materielles.html
didacticiel_fr_023_entrees_sorties.html
didacticiel_fr_024_fonctions_recursives.html
didacticiel_fr_099_application.html
didacticiel_fr_101_processeur.html
didacticiel_fr_102_memoire.html
didacticiel_fr_103_noyau.html
didacticiel_fr_104_sequenceur.html
didacticiel_fr_105_processus.html
didacticiel_fr_106_ordonnanceurs.html
didacticiel_fr_107_systeme.html
didacticiel_fr_108_base.html
didacticiel_fr_200_generation_extension.html
didacticiel_fr_201_ecriture_extension.html
didacticiel_fr_202_interactions_machine.html
didacticiel_fr_203_variables_svm.html
didacticiel_fr_204_instructions.html
didacticiel_fr_205_valeurs.html
didacticiel_fr_206_interruptions.html
didacticiel_fr_207_processeur.html
didacticiel_fr_208_memoire.html
didacticiel_fr_209_code.html
didacticiel_fr_210_types.html
didacticiel_fr_211_noyaux.html
didacticiel_fr_212_sequenceurs.html
didacticiel_fr_213_processus.html
didacticiel_fr_214_ordonnanceurs.html
didacticiel_fr_215_structures.html
didacticiel_fr_216_fonctions.html
didacticiel_fr_217_synchronisation.html
didacticiel_fr_218_debugueur.html
didacticiel_fr_219_extensions.html
didacticiel_fr_220_aide.html
didacticiel_fr_221_fichiers_et_patchs.html
didacticiel_fr_222_tests.html
didacticiel_fr_299_publication.html
Ces didacticiels sont donnés en français ou en anglais, sur des sujets plus ou moins variés.
Pour accélérer vos développements, des petites bibliothèques écrits en langage machine sont disponibles :
Elles sont données en l'état, sans aucune garantie de fonctionnement avec une version de la machine virtuelle ne correspondant pas à la date indiquée sur l'archive des bibliothèques.
Le projet n'étant pas terminé, des petites contributions seront appréciées :
Pour une question sur le projet, une amélioration possible, un rapport de bug, envoyez-moi un email à l'adresse projet.svm [chez] pappy.tf, merci !
Cette page de Julien Bruguier est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé.