Le jeu vidéo dans lequel vous êtes le système d’exploitation
(plbrault.com)- You’re the OS est un jeu dans lequel le joueur incarne le système d’exploitation et gère les cœurs CPU, les processus, les pages mémoire et l’espace de swap afin d’empêcher l’utilisateur de redémarrer la machine
- La boucle de base consiste à attribuer les processus inactifs au CPU et à retirer les processus actifs, tandis que les processus laissés trop longtemps à l’abandon passent par un niveau de starvation avant d’être terminés
- Avec le temps, le nombre de processus et la pression mémoire augmentent, au point qu’il faut aussi gérer directement le swap mémoire, en ramenant dans la RAM les pages présentes sur le disque
- L’implémentation repose sur Python/Pygame et utilise pygbag pour produire un build WebAssembly exécutable dans le navigateur
- Ce n’est pas une simulation exacte d’un système d’exploitation, mais en posant clairement ses hypothèses, le jeu peut servir à expliquer l’ordonnancement des processus et les situations de manque de RAM
Idée d’un jeu où l’on devient le système d’exploitation
- Le jeu part de l’idée que le joueur devient le système d’exploitation et gère les cœurs CPU, les processus, les pages mémoire et l’espace de swap
- L’objectif est d’attribuer du temps CPU aux processus et de permuter les pages mémoire si nécessaire, afin que l’utilisateur ne trouve pas le système trop lent
- Pour un jeu 2D simple, Pygame a été choisi plutôt qu’un moteur de jeu complet
- L’envie de réutiliser Python a aussi pesé dans ce choix
- Pygame peut être compilé en WebAssembly via pygbag, ce qui le rend bien adapté à une exécution dans le navigateur
- Le développement s’est étalé sur quelques semaines dispersées au cours de 8 mois
Ordonnancement des processus et conditions de fin de partie
- Le cœur du gameplay repose sur la gestion des processus et du CPU
- En cliquant sur un processus inactif, on l’assigne à un CPU disponible
- En cliquant sur un processus actif, on le retire du CPU correspondant
- Les processus inactifs passent avec le temps par 6 niveaux de starvation, indiqués par des couleurs et des émojis
- S’ils restent trop longtemps au dernier niveau, l’utilisateur termine le processus concerné
- Une fois 10 processus terminés, l’utilisateur redémarre le joueur en tant que système d’exploitation, et la partie se termine
- Pour survivre le plus longtemps possible, chaque processus doit recevoir suffisamment de temps CPU avant d’avoir traversé tous les niveaux de starvation
E/S et swap mémoire
- Les processus actifs peuvent passer à l’état blocked en attendant un événement d’E/S
- Comme un processus blocked gaspille du temps CPU, il vaut mieux le retirer du CPU
- Les événements d’E/S se gèrent en cliquant sur des boutons dont l’apparence change quand l’événement se produit
- Avec le temps, davantage de processus apparaissent, ce qui augmente la difficulté
- À partir d’un certain moment, la mémoire totale utilisée par les processus dépasse la RAM, ce qui rend nécessaire le swap de pages entre la RAM et le disque
- Lorsqu’un processus actif tente d’accéder à une page située sur le disque, le processus et la page se mettent à clignoter
- Ce signal permet d’identifier les pages à permuter
- Les processus qui attendent une page située sur le disque restent à l’état blocked jusqu’à ce que cette page revienne en RAM
- Si l’état blocked dure trop longtemps, ils peuvent continuer à progresser dans les niveaux de starvation et finir par être terminés
Difficulté et réglages personnalisés
- Le jeu propose plusieurs niveaux de difficulté
- La difficulté influe sur le nombre de CPU, la capacité de RAM, le nombre de processus présents au démarrage, la probabilité des événements d’E/S, etc.
- En mode personnalisé, chacun de ces paramètres peut être ajusté indépendamment
Valeur pédagogique et limites
- Ce jeu est d’abord un jeu, conçu en privilégiant la jouabilité plutôt que le réalisme
- Certains aspects ne décrivent pas fidèlement un véritable système d’exploitation
- On n’attend pas du joueur qu’il réagisse aussi vite qu’un ordinateur réel
- Les processus utilisent bien moins de pages mémoire qu’un processus typique dans la réalité
- Le fait que l’utilisateur puisse lancer indéfiniment de nouveaux processus est un mécanisme de gameplay destiné à augmenter la difficulté
- Il n’a pas été créé dans un but pédagogique, mais à condition de bien préciser qu’il ne s’agit pas d’une représentation exacte, il peut avoir un intérêt pour présenter les principes des systèmes d’exploitation
- Il peut servir d’exemple pour expliquer l’ordonnancement des processus et le swap mémoire
- Il permet d’illustrer ce que signifie disposer de plus de cœurs CPU, et ce qui se passe quand la RAM vient à manquer
Compilation WebAssembly et déploiement
- La compilation WebAssembly a été plus simple que prévu grâce à la documentation de pygame-web
- Les étapes principales consistent à installer pygbag et à appliquer les modifications de code indiquées dans la documentation
- Le principal problème venait de la bibliothèque pygame-emojis utilisée pour le rendu des émojis, qui ne fonctionnait pas avec pygbag
- À la place, des fichiers SVG ont été téléchargés depuis OpenMoji
- Ils ont ensuite été redimensionnés avec GIMP puis exportés en PNG pour être utilisés
- La version navigateur redimensionne l’affichage pour s’adapter au viewport tout en conservant, par défaut, le même ratio que la version desktop
- Si la version desktop utilise une fenêtre plus petite, l’image peut paraître étirée
- Comme le jeu adopte un style rétro, cet effet de pixellisation n’a pas semblé trop gênant
- Le jeu peut être joué dans le navigateur sur itch.io
- Le code source est disponible sur GitHub
1 commentaires
Avis de Hacker News
Une idée qui pourrait être sympa me vient en tête : un jeu de défragmentation. En gros, un Tetris en disposition circulaire, où l’on gagne davantage de points en envoyant les blocs de données souvent utilisés vers les pistes extérieures, et les anciens fichiers ou les formats d’archives vers les pistes intérieures
J’adorais autrefois regarder les outils graphiques de défragmentation s’agiter comme par magie, et s’il existait un jeu de défragmentation, j’aurais vraiment envie de l’essayer
C’est un jeu 2D vu de dessus, où l’on se retrouve seul dans un grand entrepôt vide. À intervalles réguliers, un camion dépose plusieurs objets au fond, tandis qu’au comptoir à l’avant, quelques personnes demandent des objets précis. Le but est de disposer les objets dans l’entrepôt de façon à pouvoir répondre aux demandes le plus vite possible. On peut les organiser comme on veut : par couleur, par fonction, par nom, etc.
À mesure que la partie avance, les camions apportent des objets de plus en plus variés, souvent beaucoup d’objets qui relèvent de plusieurs catégories, et les demandes deviennent aussi de plus en plus complexes. À la fin, le jeu montre en timelapse comment l’entrepôt a évolué pendant toute la partie, ce qui permet de voir comment la stratégie a changé au fil du temps
C’est plutôt bien fait et simple. Je l’ai en fait découvert grâce à l’un des développeurs dans un commentaire sur HN
https://boardgamegeek.com/boardgame/376284/defrag
https://www.defraggame.com
Je me souviens avoir joué autrefois à quelques vieux jeux qui étaient des imitations encore plus directes que ceux-ci, mais je ne sais pas si quelqu’un d’autre arrivera à les retrouver
Comme dans Ender's Game, ce serait amusant d’imaginer que les meilleurs joueurs allouent sans le savoir la mémoire d’une infrastructure critique quelque part
https://xkcd.com/1897/
J’ai lu une demi-phrase de ce site et j’ai tout de suite été convaincu
C’est l’une des meilleures façons de comprendre ce genre de problème. « Maintenant, c’est toi le gestionnaire de mémoire. Bonne chance. »
L’idée est vraiment excellente. On pourrait l’enrober de façon mignonne et en faire une simulation de gestion de restaurant. Sauf que le restaurant serait l’ordinateur, et les clients seraient les ressources
Human Resource Machine était aussi excellent de ce point de vue. Je me souviens d’un moment où je me suis dit : « Attends, est-ce que je viens de créer une liste chaînée ? »
En fait, je pense que la vie humaine ressemble à une sorte de système d’exploitation. Chaque jour, nous gérons des tâches, des ressources, des entrées-sorties, du stockage, du cache et des états
Le tableau de bord est un outil essentiel d’un système d’exploitation ; à l’échelle humaine, cela correspond aux comptes bancaires, aux listes de tâches, au calendrier, à la boîte de réception, etc. C’est pourquoi beaucoup de concepts de « développement personnel » se traduisent proprement en bonnes pratiques de système d’exploitation. Par exemple, FIFO ou LIFO pour la gestion des allocations, la planification préalable pour casser les interblocages, la gestion du parallélisme, ou encore la collecte des déchets juste à temps
[0] https://algorithmstoliveby.com/
Par exemple, à l’époque où les engrenages étaient une technologie de pointe, certaines personnes imaginaient des rouages tournant dans la tête et comparaient l’acte de penser au mouvement des engrenages. On voit encore parfois ce genre de représentation dans les dessins animés, il me semble
https://en.m.wikipedia.org/wiki/Autonomic_nervous_system
Pour info, ceci avait été publié sur HN le 30 septembre, mais n’avait absolument pas attiré l’attention, et la personne qui l’avait posté a aussi supprimé son commentaire
Je l’avais déjà écrit à l’époque : c’est vraiment un très bon concept. Ce serait bien d’ajouter des niveaux. Par exemple, on pourrait avoir des niveaux comme le microcontrôleur dans un produit intéressant, un smartphone, l’équilibreur de charge ou le serveur d’API d’une entreprise SaaS, afin d’introduire les concepts un par un. Cela deviendrait alors un cours universitaire sur les systèmes d’exploitation
Ce serait bien d’y ajouter un peu de programmation pour l’automatisation, puis d’approfondir jusqu’aux algorithmes de cache des systèmes d’exploitation. LRU, c’est bien. C’est le genre de cours que j’aurais pu terminer avant la fin du lycée
https://news.ycombinator.com/item?id=36938032
Super idée, mais beaucoup trop difficile pour moi. Même en mode normal, je me retrouve à cliquer comme un fou au bout de 20 secondes de jeu, et même en faisant tourner les processus bloqués, les processus rouges s’accumulent
Certains processus sont morts parce que l’événement d’entrée/sortie n’est jamais arrivé. Le mode facile semble identique, voire encore plus difficile. Je n’arrive même pas au point où la mémoire devient un problème, et à ce rythme je n’en ai pas envie
C’est peut-être l’âge, et je comprends que devenir un système d’exploitation soit stressant, mais mon travail est déjà stressant. Je n’ai pas envie d’un autre boulot
Si le jeu commençait doucement puis montait progressivement, avec un rythme plus indulgent qui reste juste en dehors de ma zone de confort, il pourrait être très amusant
Ce genre de jeu a un bel avenir
Les jeux qui innovent au-delà de ce que peuvent offrir des moteurs comme Unity ou Unreal vont, par conception, dans une direction où ils ont plus de chances de réussir que ce qui sort aujourd’hui
Si vous faites un jeu d’ultra-geek situé tellement hors du champ que les utilisateurs de moteurs ne peuvent pas y toucher, vous jouez dans une autre ligue. Même si le jeu a l’air bancal, tant qu’il est amusant et utilisable, ça suffit
Le jeu indé est mort au sens où on l’entendait il y a 5 ans. Désormais, c’est ça le nouveau jeu indé. GG. Pour info, je suis un développeur indé raté qui a sorti au moins 2 titres commerciaux
C’est dommage que Zachtronics se soit arrêté. Ils avaient toujours une longueur d’avance
Et ce jeu me semble faisable aussi avec Unity
Si cela veut dire « devenir un succès inattendu qui perce et change la direction du jeu vidéo », alors la probabilité est extrêmement faible dans les deux cas, mais les jeux hors cadre peuvent avoir une probabilité un peu plus élevée
Ils ont plus de chances de faire un home run, mais aussi plus de chances d’être éliminés, et moins de chances de faire un simple coup sûr
Ces dernières années aussi, il y a eu plusieurs jeux pour geeks techniques, mais aucun qu’on puisse vraiment qualifier de hit. On peut probablement créer son propre jeu, mais le public étant intrinsèquement restreint, le plafond du succès l’est aussi. Je ne vois pas pourquoi cela changerait à l’avenir
C’est même plutôt l’inverse qui risque d’arriver. Les jeunes générations semblent devenir moins geeks et s’éloigner des sujets et technologies de bas niveau
À mesure que le jeu devient plus difficile avec un taux d’utilisation élevé, il devrait permettre d’« acheter » des améliorations, avec des jetons obtenus en atteignant des jalons ou des objectifs de performance, pour automatiser de petites tâches répétitives. Un peu comme Universal Paperclips
Ensuite, on lance des charges de travail pathologiques qui mettent en échec les automatisations simples et obligent l’utilisateur à les résoudre manuellement. Puis l’utilisateur achète une automatisation un peu meilleure, avant de se retrouver à nouveau bloqué par une charge de travail un peu plus pathologique. La boucle de progression du jeu est ainsi complète
Bientôt, le système d’exploitation fournira un langage de script pour automatiser les tâches, non ?
Ah, je vois...
Très cool. Ça me rappelle un jeu posté la semaine dernière. C’était lié à Defcon, je crois ? Des blocs rectangulaires façon Tetris contenant des opcodes tombaient, et l’utilisateur devait disposer une séquence façon Rube Goldberg pour mélanger le plus grand nombre dans un registre mémoire « score »
https://news.ycombinator.com/item?id=37083309