7 Punkte von GN⁺ 2023-08-14 | 1 Kommentare | Auf WhatsApp teilen
  • You’re the OS ist ein Spiel, in dem Spieler die Rolle eines Betriebssystems übernehmen, CPU-Kerne, Prozesse, Speicherseiten und Swap-Speicher verwalten und verhindern müssen, dass der Nutzer neu startet
  • Der grundlegende Ablauf besteht darin, inaktive Prozesse einer CPU zuzuweisen und aktive Prozesse wieder zu entfernen; zu lange vernachlässigte Prozesse durchlaufen Starvation-Stufen und werden schließlich beendet
  • Mit der Zeit steigen die Zahl der Prozesse und der Speicherdruck, sodass man sogar Memory Swapping selbst erledigen muss, um Seiten von der Festplatte zurück in den RAM zu holen
  • Die Umsetzung basiert auf Python/Pygame; mit pygbag wurde ein WebAssembly-Build erstellt, der auch im Browser läuft
  • Es ist keine exakte Betriebssystemsimulation, kann aber bei klarer Einordnung genutzt werden, um Prozess-Scheduling und Situationen mit knappem RAM zu erklären

Die Idee für ein Spiel, in dem man das Betriebssystem ist

  • Das Spiel geht von der Idee aus, dass der Spieler zum Betriebssystem wird und CPU-Kerne, Prozesse, Speicherseiten und Swap-Speicher verwaltet
  • Ziel ist es, Prozessen CPU-Zeit zuzuteilen, damit der Nutzer das System nicht als zu langsam empfindet, und bei Bedarf Speicherseiten auszulagern
  • Für ein einfaches 2D-Spiel fiel die Wahl auf Pygame statt auf eine vollständige Game Engine
    • Auch der Wunsch, wieder einmal Python zu verwenden, war ein Grund für diese Entscheidung
    • Pygame lässt sich über pygbag nach WebAssembly kompilieren, was für die Ausführung im Browser vorteilhaft ist
  • Die Entwicklungszeit betrug über einen Zeitraum von 8 Monaten verteilt einige Wochen

Prozess-Scheduling und Bedingung für das Spielende

  • Die zentrale Interaktion im Spiel ist die Verwaltung von Prozessen und CPU
    • Klickt man auf einen inaktiven Prozess, wird er einer verfügbaren CPU zugewiesen
    • Klickt man auf einen aktiven Prozess, wird er von der jeweiligen CPU entfernt
  • Inaktive Prozesse durchlaufen mit der Zeit 6 Starvation-Stufen, die durch Farbe und Emoji angezeigt werden
    • Verweilt ein Prozess in der letzten Stufe zu lange, beendet der Nutzer diesen Prozess
    • Sobald 10 Prozesse beendet wurden, startet der Nutzer den Spieler als Betriebssystem neu, und das Spiel endet
  • Um lange zu überleben, muss jeder Prozess genug CPU-Zeit bekommen, bevor er alle Starvation-Stufen durchläuft

I/O und Memory Swapping

  • Aktive Prozesse können in einen blocked-Zustand geraten, während sie auf I/O-Ereignisse warten
    • Blockierte Prozesse verschwenden CPU-Zeit, daher ist es besser, sie von der CPU zu entfernen
    • I/O-Ereignisse werden behandelt, indem man auf einen Button klickt, dessen Form sich beim Eintreten des Ereignisses ändert
  • Mit der Zeit erscheinen immer mehr Prozesse, wodurch der Schwierigkeitsgrad steigt
  • Ab einem bestimmten Punkt benötigt die Gesamtheit der Prozesse mehr Speicher, als RAM vorhanden ist, sodass Page Swapping zwischen RAM und Festplatte erforderlich wird
    • Wenn ein aktiver Prozess auf eine Seite zugreifen will, die sich auf der Festplatte befindet, blinken der Prozess und die entsprechende Seite
    • Anhand dieser Anzeige muss man die benötigte Seite einwechseln
  • Ein Prozess, der auf eine Seite auf der Festplatte wartet, bleibt im blocked-Zustand, bis diese Seite wieder im RAM ist
    • Dauert der blocked-Zustand zu lange an, kann der Prozess weiter die Starvation-Stufen durchlaufen und schließlich beendet werden

Schwierigkeitsgrad und benutzerdefinierte Einstellungen

  • Das Spiel bietet mehrere Schwierigkeitsstufen
  • Der Schwierigkeitsgrad wirkt sich unter anderem auf die Zahl der CPUs, die RAM-Kapazität, die Zahl der zu Beginn vorhandenen Prozesse und die Wahrscheinlichkeit von I/O-Ereignissen aus
  • Im Custom Mode lassen sich diese Einstellungen jeweils unabhängig voneinander anpassen

Pädagogischer Wert und Grenzen

  • Dieses Spiel ist in erster Linie ein Spiel und wurde mit Vorrang auf Spielbarkeit statt Realismus entworfen
  • Es gibt Aspekte, die echte Betriebssysteme nicht exakt abbilden
    • Es wird nicht erwartet, dass der Spieler so schnell reagiert wie ein echter Computer
    • Prozesse verwenden deutlich weniger Speicherseiten als typische reale Prozesse
    • Dass der Nutzer endlos neue Prozesse startet, ist ein Spielmechanismus zur Erhöhung des Schwierigkeitsgrads
  • Das Spiel wurde nicht für Bildungszwecke entwickelt, kann aber wertvoll sein, um Prinzipien von Betriebssystemen einzuführen, sofern klar ist, dass es keine exakte Darstellung ist
    • Es kann als Beispiel zur Erklärung von Prozess-Scheduling und Memory Swapping dienen
    • Es kann zeigen, was mehr CPU-Kerne bedeuten und was passiert, wenn der RAM knapp wird

WebAssembly-Kompilierung und Veröffentlichung

  • Die WebAssembly-Kompilierung war dank der pygame-web-Dokumentation einfacher als erwartet
    • Die wichtigsten Schritte waren die Installation von pygbag und die Übernahme der in der Dokumentation beschriebenen Codeänderungen
  • Das größte Problem war, dass die für das Emoji-Rendering verwendete Bibliothek pygame-emojis nicht zusammen mit pygbag funktionierte
    • Stattdessen wurden SVG-Dateien von OpenMoji heruntergeladen
    • Sie wurden mit GIMP in der Größe angepasst, als PNG exportiert und verwendet
  • Die Browser-Version behält grundsätzlich dasselbe Seitenverhältnis wie die Desktop-Version bei und skaliert sich an den Browser-Viewport an
    • Wenn die Desktop-Version eine kleinere Fenstergröße verwendet, kann die Darstellung gestreckt wirken
    • Da das Spiel im Retro-Stil gehalten ist, wirkte die Pixelung nicht gravierend
  • Das Spiel kann auf itch.io im Browser gespielt werden
  • Der Quellcode ist auf GitHub veröffentlicht

1 Kommentare

 
GN⁺ 2023-08-14
Hacker-News-Kommentare
  • Als coole Idee fällt mir ein Defragmentierungs-Spiel ein. Im Grunde Tetris in kreisförmiger Anordnung: Häufig genutzte Datenblöcke kommen auf die äußeren Spuren, alte Dateien oder Archivdateiformate auf die inneren Spuren, und je besser man das macht, desto mehr Punkte gibt es.
    Früher habe ich es geliebt, grafischen Defragmentierungs-Tools dabei zuzusehen, wie sie sich wie von Zauberhand bewegten, und ein Defragmentierungs-Spiel würde ich wirklich gern ausprobieren.

    • Wilmot's Warehouse ist im Grunde genau so ein Spiel.
      Es ist ein 2D-Spiel aus der Draufsicht, und man ist allein in einem großen, leeren Lagerhaus. In regelmäßigen Abständen lädt ein Lkw hinten verschiedene Waren ab, während vorne am Tresen einige Leute nach bestimmten Dingen fragen. Deine Aufgabe ist es, die Waren im Lager so anzuordnen, dass du Anfragen möglichst schnell bedienen kannst. Du kannst sie nach Farbe, Funktion, Name oder nach einem System sortieren, das für dich passt.
      Je weiter das Spiel fortschreitet, desto vielfältigere Waren bringt der Lkw, viele davon fallen typischerweise in mehrere Kategorien, und auch die Anfragen werden immer komplexer. Am Ende wird in einem Zeitraffer gezeigt, wie sich das Lager über das gesamte Spiel hinweg verändert hat, sodass man sehen kann, wie sich die eigene Strategie im Lauf der Zeit entwickelt hat.
      Ziemlich gut gemacht und schlicht. Ich bin tatsächlich über einen der Entwickler in einem HN-Kommentar darauf gestoßen.
    • https://defrag.lolalabs.com/
    • Es gibt auch https://classic.csunplugged.org/activities/community-activit..., und https://www.itgsnews.com/the-defragmentation-game-lesson-pla... ist ebenfalls sehenswert.
      https://boardgamegeek.com/boardgame/376284/defrag
      https://www.defraggame.com
      Ich erinnere mich, früher auch ein paar ältere Spiele gespielt zu haben, die noch direktere Nachbildungen davon waren, aber ich weiß nicht, ob jemand anders sie finden kann.
    • Beim Entwickeln von Elektronik hatte ich bei PCB-Routing und Platzierung ein ähnliches Gefühl.
    • Erhöhen wir den Einsatz und lassen das Spiel echte Laufwerke als Opfer verwenden.
  • Wie in Ender's Game: Man kann sich gut vorstellen, dass Top-Spieler unwissentlich Speicher für irgendeine kritische Infrastruktur irgendwo zuweisen.

    • Hat Severance-Vibes.
    • „Um die Registrierung abzuschließen, teilen Sie uns bitte mit, ob auf diesem Bild ein Stoppschild zu sehen ist. Bitte beeilen Sie sich, unser autonomes Fahrzeug braucht das.“
      https://xkcd.com/1897/
  • Nachdem ich einen halben Satz auf dieser Website gelesen hatte, war ich sofort vollständig überzeugt.
    Das ist eine der besten Arten, solche Probleme zu verstehen. „Ab jetzt bist du der Speichermanager. Viel Glück.“
    Wirklich eine großartige Idee. Man könnte das niedlich aufziehen und wie eine Restaurant-Management-Simulation gestalten. Nur dass das Restaurant der Computer ist und die Gäste die Ressourcen sind.
    Human Resource Machine war in dieser Hinsicht ebenfalls großartig. Ich erinnere mich, dass ich irgendwann dachte: „Moment, habe ich gerade eine verkettete Liste gebaut?“

    • Human Resource Machine ist wirklich gut. Nachdem meine Frau dieses Spiel und den Nachfolger durchgespielt hatte, wechselte sie sogar beruflich ins Programmieren.
  • Eigentlich sehe ich das menschliche Leben als eine Art Betriebssystem. Wir beschäftigen uns jeden Tag mit Tasks, Ressourcen, Ein- und Ausgabe, Speicher, Cache und Zustand.
    Dashboards sind ein unverzichtbares Werkzeug eines Betriebssystems, und auf menschlicher Ebene sind das Dinge wie Bankkonto, To-do-Liste, Kalender und Posteingang. Deshalb lassen sich viele Konzepte der „Selbstoptimierung“ sauber in Best Practices für Betriebssysteme übersetzen: zum Beispiel FIFO oder LIFO für Allokationsmanagement, Vorausplanung zum Auflösen von Deadlocks, Parallelitätsmanagement und Just-in-time-Garbage-Collection.

    • Erinnert mich ein wenig an das empfehlenswerte Buch Algorithms to Live By.
      [0] https://algorithmstoliveby.com/
    • Menschen vergleichen das Gehirn gern mit Technologie.
      Als Zahnräder zum Beispiel Hightech waren, stellten sich manche Leute beim Denken Zahnräder im Kopf vor und verglichen den Denkprozess mit der Bewegung von Zahnrädern. In Comics und Ähnlichem sieht man diese Darstellung, glaube ich, immer noch manchmal.
    • Näher an dem, was wir als Betriebssystem betrachten, ist vielleicht das autonome Nervensystem. Es abstrahiert die Low-Level-Funktionen der Wetware.
      https://en.m.wikipedia.org/wiki/Autonomic_nervous_system
    • Zivilisation ist ein verteiltes Betriebssystem! Habe ich von Joscha Bach gehört.
    • Was wäre die Betriebssystem-Analogie zu Masturbation? Cache leeren?
  • Zur Einordnung: Das wurde am 30. September auf HN gepostet, bekam aber überhaupt keine Aufmerksamkeit, und der Poster hat seinen eigenen Kommentar gelöscht.
    Ich habe es damals auch geschrieben: Es ist ein wirklich gutes Konzept. Es wäre schön, Level hinzuzufügen. Man könnte die Level zum Beispiel nach Mikrocontrollern in interessanten Produkten, Smartphones, Load Balancern oder API-Servern eines SaaS-Unternehmens aufteilen und so die Konzepte Schritt für Schritt einführen. Daraus würde ein Betriebssystemkurs auf Hochschulniveau.
    Ein bisschen Programmierung für Automatisierung einzubauen und dann tief in Caching-Algorithmen von Betriebssystemen einzusteigen, wäre gut. LRU ist schön. Das wäre ein Kurs gewesen, den man vor dem Schulabschluss hätte abschließen können.
    https://news.ycombinator.com/item?id=36938032

  • Coole Idee, aber für mich viel zu schwierig. Selbst im normalen Modus klicke ich schon 20 Sekunden nach Spielbeginn wie verrückt, und selbst wenn ich die blockierten Prozesse rotieren lasse, stapeln sich die roten Prozesse
    Manche Prozesse sind gestorben, weil das I/O-Event einfach nie kam. Der Easy Mode scheint genauso oder sogar noch schwieriger zu sein. Ich komme nicht einmal an den Punkt, an dem Speicher zum Problem wird, und bei diesem Tempo will ich da auch gar nicht hin
    Vielleicht werde ich einfach alt, und ich verstehe, dass es stressig ist, ein Betriebssystem zu sein, aber mein Job ist schon stressig genug. Ich will nicht noch einen weiteren Job
    Wenn es anfangs leichter beginnen und sich dann steigern würde, aber in einem nachsichtigeren Tempo, das knapp außerhalb meiner Komfortzone bleibt, könnte es ein sehr unterhaltsames Spiel werden

    • Ich hatte dasselbe Problem: Prozesse starben, während sie auf ein I/O-Event warteten, das nie kam. Alle toten Prozesse sind in diesem Zustand gestorben. Wenn das passiert, scheint es keine Möglichkeit zu geben, es zu verhindern
    • Dafür gibt es Computer: damit sie wiederkehrende Arbeit übernehmen, ohne Angst davor zu haben :)
  • Solche Spiele haben eine starke Zukunft
    Spiele, die über das hinaus innovieren, was Game Engines wie Unity oder Unreal bieten können, bewegen sich konstruktionsbedingt in eine Richtung, die erfolgreicher sein dürfte als vieles, was heutzutage erscheint
    Wenn man ein Ultra-Nerd-Spiel baut, das so weit außerhalb des Bereichs liegt, dass Engine-Nutzer es nicht anfassen können, spielt man in einer anderen Liga. Das Spiel darf ruhig chaotisch aussehen, solange es Spaß macht und benutzbar ist
    Indie Games sind tot, zumindest im Sinne von Indie Games vor fünf Jahren. Das hier ist jetzt das neue Indie Game. GG. Nebenbei: Ich bin ein gescheiterter Indie-Entwickler mit mehr als zwei kommerziellen Titeln
    Schade, dass Zachtronics aufgehört hat. Sie waren immer ihrer Zeit voraus

    • Vielleicht übersehe ich etwas, aber Spiele dieses Typs scheinen seit Jahrzehnten durchgehend beliebt zu sein. Ich weiß nicht, ob solche Spiele heute geringere Erfolgschancen haben, und ich bin auch nicht sicher, ob „Du bist das Betriebssystem!“ bessere Erfolgschancen hat
      Außerdem könnte man dieses Spiel meiner Meinung nach auch in Unity bauen
    • Es gibt keinen Grund, warum man das nicht in Unity oder Unreal bauen könnte. Innerhalb der Rechengrenzen kann man mit diesen Engines buchstäblich alles bauen
    • Inwiefern geht dieses Spiel über das hinaus, was Unity bieten kann?
    • Hängt davon ab, was mit „Erfolg“ gemeint ist. Wenn es heißt: Gewinn machen, dann vermutlich nicht. Spiele, die weit von den Abläufen abweichen, die von Engines unterstützt werden, die auf die Marktnachfrage optimiert sind, werden wahrscheinlich häufiger scheitern als Spiele innerhalb dieses Rahmens
      Wenn es heißt: „ein unerwarteter Durchbruch werden, der die Richtung von Spielen verändert“, dann sind die Chancen in beiden Fällen extrem gering, aber ein Spiel außerhalb der Schublade könnte dafür die besseren Chancen haben
      Die Chance auf einen Home Run ist höher, aber auch die Chance auf ein Aus; die Chance auf einen einfachen Hit ist niedriger
    • Ich bin mir nicht sicher, worauf du hinauswillst. Nerd-Spiele gab es schon immer, und weil sie zu nerdig sind, werden sie meistens nicht wirklich groß
      Auch in den letzten Jahren gab es mehrere Tech-Nerd-Spiele, aber nichts, was man als Hit bezeichnen würde. Man kann damit vermutlich sein eigenes Spiel bauen, aber das Publikum ist von Natur aus klein, und damit ist auch die Erfolgsobergrenze begrenzt. Ich glaube nicht, dass sich das künftig ändern wird
      Eher im Gegenteil. Jüngere Generationen scheinen weniger nerdig zu werden und sich weiter von Low-Level-Themen und -Technologien zu entfernen
  • Wenn das Spiel bei hoher Auslastung schwieriger wird, sollte man mit Tokens, die man durch das Erreichen von Meilensteinen oder Performance-Zielen verdient, Upgrades „kaufen“ können, die kleine wiederkehrende Aufgaben automatisieren. Ein bisschen wie Universal Paperclips
    Danach wirft man dem Nutzer pathologische Workloads hin, die einfache Automatisierung aushebeln und manuell gelöst werden müssen. Dann kauft der Nutzer etwas bessere Automatisierung, bleibt aber wieder an etwas pathologischeren Workloads hängen. So ergibt sich die Gameplay-Loop

    • Es wäre schön, wenn man einen Speicher-Allokator kaufen könnte. Noch besser wäre es, wenn es auch die Option gäbe, selbst einen zu schreiben
  • Bald wird das Betriebssystem doch sicher eine Skriptsprache bereitstellen, damit man die Arbeit automatisieren kann, oder?
    Ah, ich verstehe ...

    • Nehmen wir einen C-Interpreter und kopieren einfach Linux-Code hinein ... oder machen es umgekehrt
  • Sehr cool. Erinnert mich an ein Spiel, das letzte Woche gepostet wurde. Hatte es etwas mit Defcon zu tun? Es war ein Spiel, in dem rechteckige Blöcke wie Tetris-Steine mit Opcodes herunterfallen, und der Nutzer musste eine Rube-Goldberg-artige Sequenz anordnen, die die größte Zahl in ein „Score“-Speicherregister mischt