7 คะแนน โดย GN⁺ 2023-08-14 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • You’re the OS เป็นเกมที่ผู้เล่นรับบทเป็นระบบปฏิบัติการ คอยจัดการ CPU core, process, memory page และ swap space เพื่อป้องกันไม่ให้ผู้ใช้รีบูตเครื่อง
  • ลูปการเล่นพื้นฐานคือการจัดสรร process ที่ว่างอยู่ให้กับ CPU และนำ process ที่กำลังทำงานออก โดย process ที่ถูกปล่อยทิ้งไว้นานจะผ่าน starvation stage ก่อนถูกยุติ
  • เมื่อเวลาผ่านไป จำนวน process และแรงกดดันด้านหน่วยความจำจะเพิ่มขึ้น จนผู้เล่นต้องจัดการ memory swapping ด้วยตัวเอง โดยย้าย page บนดิสก์กลับเข้า RAM
  • ตัวเกมพัฒนาด้วย Python/Pygame และสร้างบิลด์ WebAssembly ด้วย pygbag ทำให้เล่นบนเบราว์เซอร์ได้
  • แม้จะไม่ใช่การจำลองระบบปฏิบัติการอย่างแม่นยำ แต่หากอธิบายข้อสมมติให้ชัดเจน ก็สามารถใช้ช่วยอธิบาย process scheduling และสถานการณ์ RAM ไม่พอได้

ไอเดียเกมที่ให้คุณเป็นระบบปฏิบัติการ

  • เกมนี้เริ่มจากแนวคิดที่ให้ผู้เล่นเป็นระบบปฏิบัติการ คอยจัดการ CPU core, process, memory page และ swap space
  • เป้าหมายคือจัดสรรเวลา CPU ให้กับ process เพื่อไม่ให้ผู้ใช้รู้สึกว่าระบบช้าเกินไป และสลับ memory page เมื่อจำเป็น
  • เพื่อให้เหมาะกับเกม 2D แบบเรียบง่าย จึงเลือกใช้ Pygame แทนการใช้เกมเอนจินเต็มรูปแบบ
    • อีกเหตุผลหนึ่งคืออยากกลับมาใช้ Python อีกครั้ง
    • Pygame สามารถคอมไพล์เป็น WebAssembly ผ่าน pygbag ได้ จึงเหมาะกับการรันบนเบราว์เซอร์
  • ระยะเวลาพัฒนาอยู่ที่หลายสัปดาห์ซึ่งกระจายอยู่ภายในช่วง 8 เดือน

การจัดตาราง process และเงื่อนไขจบเกม

  • แกนหลักของการเล่นคือการจัดการ process และ CPU
    • คลิก process ที่ว่างอยู่เพื่อจัดสรรให้กับ CPU ที่พร้อมใช้งาน
    • คลิก process ที่กำลังทำงานเพื่อนำออกจาก CPU นั้น
  • process ที่ว่างอยู่จะค่อย ๆ ผ่าน ระดับ starvation 6 ขั้น ซึ่งแสดงด้วยสีและอีโมจิ
    • หากอยู่ในขั้นสุดท้ายนานเกินไป ผู้ใช้จะยุติ process นั้น
    • เมื่อมี process ถูกยุติครบ 10 ตัว ผู้ใช้จะรีบูตผู้เล่นซึ่งเป็นระบบปฏิบัติการ และเกมจะจบลง
  • หากต้องการอยู่รอดให้นานขึ้น แต่ละ process ต้องได้รับเวลา CPU เพียงพอก่อนจะผ่านทุกขั้นของ starvation

I/O และ memory swapping

  • process ที่กำลังทำงานอาจกลายเป็นสถานะ blocked ขณะรอ I/O event
    • process ที่ blocked จะทำให้เวลา CPU สูญเปล่า จึงมักควรนำออกจาก CPU
    • I/O event จัดการได้ด้วยการคลิกปุ่มที่เปลี่ยนรูปร่างเมื่อเหตุการณ์เกิดขึ้น
  • เมื่อเวลาผ่านไป จะมี process เพิ่มขึ้นมากกว่าเดิม ทำให้ความยากสูงขึ้น
  • หลังจากจุดหนึ่ง หน่วยความจำรวมที่ทุก process ใช้จะมากกว่า RAM ทำให้ต้องมี การสลับ page ระหว่าง RAM กับดิสก์
    • หาก process ที่กำลังทำงานพยายามเข้าถึง page ที่อยู่บนดิสก์ ตัว process และ page นั้นจะกะพริบ
    • ผู้เล่นต้องดูสัญญาณนี้แล้วสลับ page ที่จำเป็น
  • process ที่กำลังรอ page บนดิสก์จะยังคงอยู่ในสถานะ blocked จนกว่า page นั้นจะกลับเข้า RAM
    • หาก blocked นานเกินไป ก็อาจยังคงผ่านขั้น starvation ต่อไปและสุดท้ายถูกยุติได้

ระดับความยากและการตั้งค่าแบบกำหนดเอง

  • เกมนี้มี ระดับความยาก หลายระดับ
  • ความยากมีผลต่อจำนวน CPU, ขนาด RAM, จำนวน process ที่มีอยู่ตั้งแต่เริ่มเกม และความน่าจะเป็นของ I/O event
  • ใน โหมดกำหนดเอง สามารถปรับค่าต่าง ๆ เหล่านี้แยกจากกันได้

คุณค่าด้านการเรียนรู้และข้อจำกัด

  • เกมนี้เป็น เกม ก่อนสิ่งอื่นใด และออกแบบโดยให้ความสำคัญกับความเล่นได้มากกว่าความสมจริง
  • มีหลายส่วนที่ไม่ได้ถ่ายทอดระบบปฏิบัติการจริงอย่างแม่นยำ
    • เกมไม่ได้คาดหวังให้ผู้เล่นตอบสนองได้เร็วเท่าคอมพิวเตอร์จริง
    • process ใช้ memory page น้อยกว่าที่ process ทั่วไปในโลกจริงใช้มาก
    • โครงสร้างที่ผู้ใช้สามารถรัน process ใหม่ได้ไม่สิ้นสุดเป็นกลไกเกมเพื่อเพิ่มความยาก
  • แม้จะไม่ได้สร้างขึ้นเพื่อการศึกษาโดยตรง แต่หากย้ำให้ชัดว่าไม่ใช่การจำลองอย่างแม่นยำ ก็อาจมีคุณค่าในการแนะนำหลักการของระบบปฏิบัติการ
    • ใช้เป็นตัวอย่างอธิบาย process scheduling และ memory swapping ได้
    • ช่วยให้เห็นว่าการมี CPU core มากขึ้นหมายถึงอะไร และจะเกิดอะไรขึ้นเมื่อ RAM ไม่พอ

การคอมไพล์เป็น WebAssembly และการเผยแพร่

  • การคอมไพล์เป็น WebAssembly ทำได้ง่ายกว่าที่คาดไว้ ต้องขอบคุณ เอกสาร pygame-web
    • ขั้นตอนหลักคือการติดตั้ง pygbag และแก้โค้ดตามที่เอกสารระบุ
  • ปัญหาใหญ่ที่สุดคือไลบรารี pygame-emojis ที่ใช้เรนเดอร์อีโมจิทำงานร่วมกับ pygbag ไม่ได้
    • จึงดาวน์โหลดไฟล์ SVG จาก OpenMoji
    • แล้วปรับขนาดด้วย GIMP และส่งออกเป็น PNG เพื่อนำมาใช้
  • เวอร์ชันเบราว์เซอร์จะปรับขนาดให้พอดีกับ viewport ของเบราว์เซอร์ โดยคงสัดส่วนเดียวกับเวอร์ชันเดสก์ท็อปไว้เป็นหลัก
    • หากเวอร์ชันเดสก์ท็อปใช้หน้าต่างขนาดเล็กกว่า ภาพอาจดูยืดขยาย
    • เนื่องจากเกมนี้เป็นสไตล์เรโทร ความเป็นพิกเซลจึงไม่ได้รู้สึกเป็นปัญหาร้ายแรง
  • สามารถเล่นเกมผ่านเบราว์เซอร์ได้บน itch.io
  • ซอร์สโค้ดเผยแพร่อยู่บน GitHub

1 ความคิดเห็น

 
GN⁺ 2023-08-14
ความคิดเห็นบน Hacker News
  • ไอเดียที่น่าจะเจ๋งคือ เกมจัดเรียงข้อมูลบนดิสก์ (defragmentation) โดยพื้นฐานคือ Tetris แบบจัดวางเป็นวงกลม ยิ่งส่งบล็อกข้อมูลที่ใช้บ่อยไปไว้แทร็กด้านนอก และส่งไฟล์เก่าหรือไฟล์ประเภทอาร์ไคฟ์ไปไว้แทร็กด้านใน ก็ยิ่งได้คะแนนมากขึ้น
    เมื่อก่อนผมชอบดูเครื่องมือจัดเรียงข้อมูลแบบกราฟิกเคลื่อนไหวราวกับเวทมนตร์ และถ้ามีเกมจัดเรียงข้อมูลออกมา ผมก็อยากลองเล่นจริง ๆ

    • Wilmot's Warehouse แทบจะเป็นเกมแบบนี้เลย
      เป็นเกม 2D มุมมองจากด้านบน คุณอยู่คนเดียวในโกดังโล่งขนาดใหญ่ ทุก ๆ ช่วงเวลาหนึ่ง รถบรรทุกจะขนของหลายอย่างมาวางไว้ด้านหลัง และที่เคาน์เตอร์ด้านหน้าจะมีคนหลายคนมาขอของเฉพาะอย่าง สิ่งที่ต้องทำคือจัดวางของในโกดังเพื่อให้ตอบคำขอได้เร็วที่สุด จะจัดตามสี ฟังก์ชัน ชื่อ หรือวิธีใดที่เหมาะกับตัวเองก็ได้
      ยิ่งเกมดำเนินไป รถบรรทุกก็ยิ่งนำของหลากหลายชนิดมาให้ และมักมีของจำนวนมากที่คร่อมหลายหมวดหมู่ คำขอก็ซับซ้อนขึ้นเรื่อย ๆ ตอนท้ายเกมจะมีไทม์แลปส์ให้ดูว่าโกดังเปลี่ยนไปอย่างไรตลอดทั้งเกม ทำให้เห็นกลยุทธ์ที่ค่อย ๆ วิวัฒน์ไปตามเวลา
      ทำออกมาค่อนข้างดีและเรียบง่าย จริง ๆ แล้วผมรู้จักเกมนี้ผ่านหนึ่งในผู้พัฒนาที่คอมเมนต์บน HN
    • https://defrag.lolalabs.com/
    • ยังมี https://classic.csunplugged.org/activities/community-activit... และ https://www.itgsnews.com/the-defragmentation-game-lesson-pla... ก็น่าดูเช่นกัน
      https://boardgamegeek.com/boardgame/376284/defrag
      https://www.defraggame.com
      เมื่อก่อนจำได้ว่าเคยเล่นเกมเก่า ๆ อีกสองสามเกมที่จำลองเรื่องนี้โดยตรงยิ่งกว่านี้ แต่ไม่รู้ว่าคนอื่นจะหาเจอไหม
    • ตอนทำอุปกรณ์อิเล็กทรอนิกส์ ผมเคยรู้สึกคล้าย ๆ กันกับ การจัดวางและเดินลาย PCB
    • เพิ่มเดิมพันขึ้นอีกหน่อย ให้ใช้ ไดรฟ์จริง เป็นเครื่องบูชายัญสำหรับเกมไปเลย
  • ลองจินตนาการแบบ Ender's Game ว่า ผู้เล่นระดับท็อป กำลังจัดสรรหน่วยความจำของโครงสร้างพื้นฐานสำคัญที่ไหนสักแห่งโดยไม่รู้ตัว ก็น่าสนใจดี

    • ได้กลิ่นอาย Severance
    • “เพื่อสมัครให้เสร็จสมบูรณ์ โปรดบอกเราว่าในภาพนี้มีป้ายหยุดหรือไม่ รีบหน่อยนะ รถไร้คนขับ ของเราต้องใช้ข้อมูลนี้”
      https://xkcd.com/1897/
  • แค่อ่านเว็บไซต์นี้ไปครึ่งประโยค ผมก็เข้าใจทันที
    นี่เป็นหนึ่งในวิธีที่ดีที่สุดในการทำความเข้าใจปัญหาแบบนี้ “ตอนนี้คุณคือ ตัวจัดการหน่วยความจำ แล้ว ขอให้โชคดี”
    ไอเดียดีมากจริง ๆ น่าจะตกแต่งให้น่ารักแล้วทำเป็นเหมือนเกมจำลองบริหารร้านอาหารได้ เพียงแต่ร้านอาหารคือคอมพิวเตอร์ และลูกค้าคือทรัพยากร
    Human Resource Machine ก็ยอดเยี่ยมในแง่นี้เหมือนกัน จำได้ว่ามีช่วงหนึ่งที่คิดว่า “เดี๋ยวนะ เมื่อกี้ฉันเพิ่งสร้าง linked list ไปหรือเปล่า?”

    • Human Resource Machine ดีจริง ๆ ภรรยาผมเล่นเกมนั้นกับภาคต่อจนจบ แล้วถึงขั้น เปลี่ยนอาชีพไปสายโค้ดดิ้ง เลย
  • จริง ๆ แล้วผมมองว่าชีวิตมนุษย์ค่อนข้างเหมือน ระบบปฏิบัติการ แบบหนึ่ง เราใช้ชีวิตโดยต้องจัดการงาน ทรัพยากร อินพุต/เอาต์พุต ที่เก็บข้อมูล แคช และสถานะทุกวัน
    แดชบอร์ดเป็นเครื่องมือจำเป็นของระบบปฏิบัติการ และในระดับมนุษย์มันก็คือสิ่งอย่างธนาคาร รายการสิ่งที่ต้องทำ ปฏิทิน และกล่องจดหมายเข้า ดังนั้นแนวคิด “พัฒนาตัวเอง” จำนวนมากจึงแปลเป็นแนวปฏิบัติที่ดีของระบบปฏิบัติการได้อย่างเป็นระเบียบ เช่น FIFO หรือ LIFO สำหรับการจัดการการจัดสรร การวางแผนล่วงหน้าเพื่อคลาย deadlock การจัดการ concurrency และ garbage collection แบบทันเวลา

    • ทำให้นึกถึงหนังสือที่แนะนำคือ Algorithms to Live By นิดหน่อย
      [0] https://algorithmstoliveby.com/
    • มนุษย์มักชอบเปรียบสมองกับเทคโนโลยี
      ตัวอย่างเช่น ในยุคที่เฟืองเป็นเทคโนโลยีล้ำสมัย ก็มีคนจินตนาการว่ามีเฟืองหมุนอยู่ในหัว และเปรียบการคิดกับการเคลื่อนไหวของเฟือง ผมว่ายังเห็นการสื่อแบบนั้นเป็นครั้งคราวในการ์ตูนอะไรทำนองนั้น
    • สิ่งที่ใกล้เคียงกับสิ่งที่เราคิดว่าเป็นระบบปฏิบัติการมากกว่า อาจเป็น ระบบประสาทอัตโนมัติ ก็ได้ มันช่วย abstract การทำงานระดับต่ำของ wetware
      https://en.m.wikipedia.org/wiki/Autonomic_nervous_system
    • อารยธรรมคือ ระบบปฏิบัติการแบบกระจาย! ได้ยินมาจาก Joscha Bach
    • ถ้าจะเปรียบการช่วยตัวเองกับระบบปฏิบัติการ มันคืออะไรนะ? ล้างแคช?
  • อ้างอิงไว้ว่าเรื่องนี้ถูกโพสต์บน HN เมื่อวันที่ 30 กันยายน แต่แทบไม่ได้รับความสนใจเลย และคนโพสต์ก็ลบคอมเมนต์ของตัวเองไปแล้ว
    ตอนนั้นผมก็เขียนไว้เหมือนกันว่า นี่เป็นแนวคิดที่ดีจริง ๆ น่าจะเพิ่มเลเวลเข้าไป เช่น แบ่งเลเวลเป็นไมโครคอนโทรลเลอร์ในผลิตภัณฑ์ที่น่าสนใจ สมาร์ตโฟน โหลดบาลานเซอร์หรือ API server ของบริษัท SaaS อะไรทำนองนั้น เพื่อค่อย ๆ แนะนำแนวคิดทีละอย่าง แบบนั้นก็จะกลายเป็นคอร์สระบบปฏิบัติการระดับมหาวิทยาลัยได้เลย
    น่าจะใส่การเขียนโปรแกรมเล็กน้อยเพื่อทำอัตโนมัติ และเจาะลึกไปถึง อัลกอริทึมแคชของระบบปฏิบัติการ ด้วย LRU ก็ดีนะ เป็นคอร์สที่น่าจะเรียนจบได้ก่อนจบมัธยมปลาย
    https://news.ycombinator.com/item?id=36938032

  • เป็นไอเดียที่เจ๋ง แต่ยากเกินไปสำหรับผม แม้แต่ในโหมดปกติ แค่เริ่มเกมไป 20 วินาทีก็ต้องคลิกอย่างบ้าคลั่งแล้ว และถึงจะวน process ที่ติดค้างอยู่ process สีแดง ก็ยังสะสมขึ้นเรื่อย ๆ
    บาง process ตายไปเพราะ event I/O ไม่เคยมาถึงเลย โหมดง่ายก็ดูเหมือนจะเหมือนกัน หรืออาจจะยากกว่าด้วยซ้ำ ยังไปไม่ถึงจุดที่หน่วยความจำกลายเป็นปัญหาเลย และด้วยความเร็วแบบนี้ก็ไม่อยากไปถึงด้วย
    อาจเป็นเพราะผมแก่แล้วก็ได้ และผมเข้าใจว่าการเป็นระบบปฏิบัติการมันเครียด แต่งานของผมก็เครียดอยู่แล้ว ผมไม่อยากได้งานเพิ่มอีกงานหนึ่ง
    ถ้าเริ่มต้นง่าย ๆ แล้วค่อย ๆ ไต่ระดับขึ้น โดยยังอยู่แค่ถัดออกไปจาก comfort zone ของผมเล็กน้อยด้วยจังหวะที่ผ่อนปรนกว่านี้ มันน่าจะเป็นเกมที่สนุกมาก

    • ผมก็เจอปัญหาแบบเดียวกัน คือ process รอ event I/O แล้วมันไม่เคยมาถึงจน process ตาย process ที่ตายทั้งหมดตายในสถานะนั้น พอเกิดแบบนี้แล้วดูเหมือนจะไม่มีทางป้องกันได้
    • คอมพิวเตอร์มีไว้ให้ช่วยทำงานซ้ำ ๆ แทนเราโดยไม่ต้องกลัวไม่ใช่เหรอ :)
  • เกมแบบนี้มีอนาคตที่แข็งแรง
    เกมที่สร้างนวัตกรรมเกินกว่าขอบเขตที่เกมเอนจินอย่าง Unity หรือ Unreal ให้ได้ กำลังมุ่งไปในทิศทางที่โดยการออกแบบแล้วมีโอกาสสำเร็จมากกว่าสิ่งที่ออกมาในยุคนี้
    ถ้าสร้างเกมสายเนิร์ดสุด ๆ ที่อยู่นอกขอบเขตจนผู้ใช้เอนจินแตะต้องไม่ได้ คุณก็จะอยู่คนละลีก เกมจะดูเละเทะแค่ไหนก็ได้ ขอแค่สนุกและใช้งานได้
    เกมอินดี้ ตายไปแล้วในความหมายของเกมอินดี้เมื่อ 5 ปีก่อน ตอนนี้ของแบบนี้แหละคือเกมอินดี้แบบใหม่ GG อ้างอิงจากผมซึ่งเป็นนักพัฒนาอินดี้ที่ล้มเหลวและเคยออกเกมเชิงพาณิชย์มาแล้ว 2 เกมขึ้นไป
    น่าเสียดายที่ Zachtronics หยุดไปแล้ว พวกเขานำหน้าอยู่เสมอ

    • ผมอาจพลาดอะไรไปก็ได้ แต่เกมประเภทเดียวกันดูเหมือนจะได้รับความนิยมต่อเนื่องมาหลายสิบปีแล้ว ผมก็ไม่แน่ใจว่าเกมพวกนั้นมีโอกาสสำเร็จน้อยลงหรือเปล่า และก็ไม่มั่นใจว่า “คุณคือระบบปฏิบัติการ!” มีโอกาสสำเร็จมากกว่าด้วย
      แล้วเกมนี้ก็น่าจะทำด้วย Unity ได้เหมือนกัน
    • ไม่มีเหตุผลอะไรที่ทำสิ่งนี้ด้วย Unity หรือ Unreal ไม่ได้ ภายในขีดจำกัดด้านการคำนวณ เอนจินพวกนั้นทำได้แทบทุกอย่างตามตัวอักษร
    • เกมนี้เกินกว่าขอบเขตที่ Unity ให้ได้ในแง่ไหน?
    • ขึ้นอยู่กับว่า “สำเร็จ” หมายถึงอะไร ถ้าหมายถึง ทำกำไร ก็คงไม่ใช่ เกมที่ออกห่างจาก flow ที่เอนจินซึ่งถูกปรับให้เหมาะกับสิ่งที่ตลาดต้องการรองรับอย่างมาก มีแนวโน้มจะล้มเหลวบ่อยกว่าเกมที่อยู่ใน flow นั้น
      ถ้าหมายถึง “กลายเป็นฮิตที่ทะลุคาดและเปลี่ยนทิศทางของวงการเกม” ไม่ว่าฝั่งไหนความน่าจะเป็นก็ต่ำมาก แต่เกมนอกกรอบอาจมีโอกาสนั้นสูงกว่า
      โอกาสตีโฮมรันสูงกว่า แต่โอกาสถูกเอาต์ก็สูงกว่า และโอกาสตีได้เป็น hit ก็ต่ำกว่า
    • ไม่ค่อยเข้าใจว่าหมายถึงอะไร เกมเนิร์ด มีมาตลอด และเพราะมันเนิร์ดเกินไป โดยทั่วไปจึงไม่ค่อยประสบความสำเร็จใหญ่โต
      ช่วงไม่กี่ปีมานี้ก็มีเกมสายเนิร์ดเทคนิคหลายเกม แต่ไม่มีเกมไหนที่เรียกได้ว่าเป็นฮิต บางทีคุณอาจทำเกมของตัวเองได้ แต่ฐานผู้ชมเล็กโดยธรรมชาติ เพดานความสำเร็จก็เลยถูกจำกัดไปด้วย ผมไม่คิดว่าสิ่งนี้จะเปลี่ยนในอนาคต
      น่าจะเป็นไปในทางตรงข้ามมากกว่า คนรุ่นใหม่ดูจะเนิร์ดน้อยลง และห่างจากหัวข้อกับเทคโนโลยีระดับต่ำมากขึ้น
  • เมื่อเกมยากขึ้นด้วยอัตราการใช้งานที่สูงขึ้น ควรสามารถ “ซื้อ” อัปเกรดเพื่ออัตโนมัติงานซ้ำ ๆ เล็ก ๆ ได้ด้วยโทเคนที่ได้จากการบรรลุ milestone หรือเป้าหมายด้านประสิทธิภาพ ให้ความรู้สึกคล้าย Universal Paperclips
    จากนั้นก็โยน workload พยาธิสภาพ ที่ขัดขวาง automation ง่าย ๆ เข้ามา ทำให้ผู้ใช้ต้องแก้เองด้วยมือ แล้วผู้ใช้ก็ซื้อ automation ที่ดีขึ้นอีกนิด แต่ก็ถูก workload ที่พยาธิสภาพยิ่งขึ้นอีกนิดขวางอีก วงจรการดำเนินเกมก็จะสมบูรณ์แบบ

    • ถ้าซื้อ memory allocator ได้ก็คงดี หรือมีตัวเลือกให้เขียนขึ้นมาเองด้วยก็ดี
  • อีกไม่นานระบบปฏิบัติการก็คงมี ภาษาสคริปต์ ให้เพื่อทำงานอัตโนมัติได้สินะ?
    อ๋อ เข้าใจแล้ว...

    • ใช้ C interpreter แล้วก็ลอกโค้ด Linux มาเลย... หรือไม่ก็ทำกลับกัน
  • เจ๋งมาก ทำให้นึกถึงเกมที่โพสต์เมื่อสัปดาห์ที่แล้ว เกี่ยวกับ Defcon หรือเปล่านะ? เป็นเกมที่มีบล็อกสี่เหลี่ยมคล้ายบล็อก Tetris ที่มี opcode อยู่ข้างในหล่นลงมา แล้วผู้ใช้ต้องจัดวางลำดับแบบ Rube Goldberg เพื่อผสมตัวเลขที่ใหญ่ที่สุดเข้าไปใน register หน่วยความจำ “score”