7 points par GN⁺ 2023-08-14 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2023-08-14
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

    • Wilmot's Warehouse est en fait ce genre de jeu
      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://defrag.lolalabs.com/
    • Il y a aussi https://classic.csunplugged.org/activities/community-activit..., et https://www.itgsnews.com/the-defragmentation-game-lesson-pla... vaut aussi le détour
      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
    • J’ai eu une impression similaire avec le routage et le placement de PCB quand je fabriquais de l’électronique
    • Faisons monter les enchères : que le jeu utilise un vrai disque comme offrande sacrificielle
  • 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

    • Ça fait penser à Severance
    • « Pour finaliser votre inscription, dites-nous si cette image contient un panneau stop. Dépêchez-vous, notre voiture autonome en a besoin. »
      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 ? »

    • Human Resource Machine est vraiment très bon. Après avoir terminé ce jeu et sa suite, ma femme a même fini par faire une reconversion dans le développement
  • 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

    • Ça me rappelle un peu un livre que je recommande, Algorithms to Live By
      [0] https://algorithmstoliveby.com/
    • Les humains aiment souvent comparer le cerveau à la technologie
      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
    • Ce qui se rapproche davantage de ce que nous appelons un système d’exploitation pourrait être le système nerveux autonome. Il abstrait les opérations de bas niveau du matériel humide
      https://en.m.wikipedia.org/wiki/Autonomic_nervous_system
    • La civilisation est un système d’exploitation distribué ! Je tiens ça de Joscha Bach
    • Quelle serait l’analogie, côté système d’exploitation, pour la masturbation ? Vider le cache ?
  • 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

    • J’ai eu le même problème de processus qui mouraient en attendant un événement d’entrée/sortie qui ne venait jamais. Tous les processus morts sont morts dans cet état. Quand ça arrive, il ne semble pas y avoir moyen de l’éviter
    • Les ordinateurs existent justement pour faire les tâches répétitives à notre place sans s’effrayer :)
  • 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

    • J’ai peut-être raté quelque chose, mais il me semble que des jeux du même genre sont populaires depuis des décennies. Je ne sais pas si ces jeux ont moins de chances de réussir, ni si « c’est toi le système d’exploitation ! » en a davantage
      Et ce jeu me semble faisable aussi avec Unity
    • Il n’y a aucune raison pour laquelle on ne pourrait pas faire ça avec Unity ou Unreal. Dans les limites du calcul disponible, on peut littéralement tout faire avec ces moteurs
    • En quoi ce jeu dépasse-t-il ce qu’Unity peut offrir ?
    • Tout dépend de ce qu’on entend par « succès ». Si cela veut dire être rentable, probablement pas. Les jeux qui s’éloignent beaucoup des flux pris en charge par des moteurs optimisés pour ce que le marché demande ont plus de chances d’échouer que ceux qui restent dedans
      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
    • Je ne vois pas trop où tu veux en venir. Les jeux de geeks ont toujours existé et, justement parce qu’ils sont trop geeks, ils ne rencontrent généralement pas un grand succès
      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

    • Ce serait bien de pouvoir acheter un allocateur mémoire. Et d’avoir aussi l’option d’en écrire un soi-même
  • Bientôt, le système d’exploitation fournira un langage de script pour automatiser les tâches, non ?
    Ah, je vois...

    • Utilisons un interpréteur C pour simplement copier le code de Linux... ou faisons l’inverse
  • 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 »