วิดีโอเกมที่ให้คุณเป็นระบบปฏิบัติการ
(plbrault.com)- 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 ความคิดเห็น
ความคิดเห็นบน Hacker News
ไอเดียที่น่าจะเจ๋งคือ เกมจัดเรียงข้อมูลบนดิสก์ (defragmentation) โดยพื้นฐานคือ Tetris แบบจัดวางเป็นวงกลม ยิ่งส่งบล็อกข้อมูลที่ใช้บ่อยไปไว้แทร็กด้านนอก และส่งไฟล์เก่าหรือไฟล์ประเภทอาร์ไคฟ์ไปไว้แทร็กด้านใน ก็ยิ่งได้คะแนนมากขึ้น
เมื่อก่อนผมชอบดูเครื่องมือจัดเรียงข้อมูลแบบกราฟิกเคลื่อนไหวราวกับเวทมนตร์ และถ้ามีเกมจัดเรียงข้อมูลออกมา ผมก็อยากลองเล่นจริง ๆ
เป็นเกม 2D มุมมองจากด้านบน คุณอยู่คนเดียวในโกดังโล่งขนาดใหญ่ ทุก ๆ ช่วงเวลาหนึ่ง รถบรรทุกจะขนของหลายอย่างมาวางไว้ด้านหลัง และที่เคาน์เตอร์ด้านหน้าจะมีคนหลายคนมาขอของเฉพาะอย่าง สิ่งที่ต้องทำคือจัดวางของในโกดังเพื่อให้ตอบคำขอได้เร็วที่สุด จะจัดตามสี ฟังก์ชัน ชื่อ หรือวิธีใดที่เหมาะกับตัวเองก็ได้
ยิ่งเกมดำเนินไป รถบรรทุกก็ยิ่งนำของหลากหลายชนิดมาให้ และมักมีของจำนวนมากที่คร่อมหลายหมวดหมู่ คำขอก็ซับซ้อนขึ้นเรื่อย ๆ ตอนท้ายเกมจะมีไทม์แลปส์ให้ดูว่าโกดังเปลี่ยนไปอย่างไรตลอดทั้งเกม ทำให้เห็นกลยุทธ์ที่ค่อย ๆ วิวัฒน์ไปตามเวลา
ทำออกมาค่อนข้างดีและเรียบง่าย จริง ๆ แล้วผมรู้จักเกมนี้ผ่านหนึ่งในผู้พัฒนาที่คอมเมนต์บน HN
https://boardgamegeek.com/boardgame/376284/defrag
https://www.defraggame.com
เมื่อก่อนจำได้ว่าเคยเล่นเกมเก่า ๆ อีกสองสามเกมที่จำลองเรื่องนี้โดยตรงยิ่งกว่านี้ แต่ไม่รู้ว่าคนอื่นจะหาเจอไหม
ลองจินตนาการแบบ Ender's Game ว่า ผู้เล่นระดับท็อป กำลังจัดสรรหน่วยความจำของโครงสร้างพื้นฐานสำคัญที่ไหนสักแห่งโดยไม่รู้ตัว ก็น่าสนใจดี
https://xkcd.com/1897/
แค่อ่านเว็บไซต์นี้ไปครึ่งประโยค ผมก็เข้าใจทันที
นี่เป็นหนึ่งในวิธีที่ดีที่สุดในการทำความเข้าใจปัญหาแบบนี้ “ตอนนี้คุณคือ ตัวจัดการหน่วยความจำ แล้ว ขอให้โชคดี”
ไอเดียดีมากจริง ๆ น่าจะตกแต่งให้น่ารักแล้วทำเป็นเหมือนเกมจำลองบริหารร้านอาหารได้ เพียงแต่ร้านอาหารคือคอมพิวเตอร์ และลูกค้าคือทรัพยากร
Human Resource Machine ก็ยอดเยี่ยมในแง่นี้เหมือนกัน จำได้ว่ามีช่วงหนึ่งที่คิดว่า “เดี๋ยวนะ เมื่อกี้ฉันเพิ่งสร้าง linked list ไปหรือเปล่า?”
จริง ๆ แล้วผมมองว่าชีวิตมนุษย์ค่อนข้างเหมือน ระบบปฏิบัติการ แบบหนึ่ง เราใช้ชีวิตโดยต้องจัดการงาน ทรัพยากร อินพุต/เอาต์พุต ที่เก็บข้อมูล แคช และสถานะทุกวัน
แดชบอร์ดเป็นเครื่องมือจำเป็นของระบบปฏิบัติการ และในระดับมนุษย์มันก็คือสิ่งอย่างธนาคาร รายการสิ่งที่ต้องทำ ปฏิทิน และกล่องจดหมายเข้า ดังนั้นแนวคิด “พัฒนาตัวเอง” จำนวนมากจึงแปลเป็นแนวปฏิบัติที่ดีของระบบปฏิบัติการได้อย่างเป็นระเบียบ เช่น FIFO หรือ LIFO สำหรับการจัดการการจัดสรร การวางแผนล่วงหน้าเพื่อคลาย deadlock การจัดการ concurrency และ garbage collection แบบทันเวลา
[0] https://algorithmstoliveby.com/
ตัวอย่างเช่น ในยุคที่เฟืองเป็นเทคโนโลยีล้ำสมัย ก็มีคนจินตนาการว่ามีเฟืองหมุนอยู่ในหัว และเปรียบการคิดกับการเคลื่อนไหวของเฟือง ผมว่ายังเห็นการสื่อแบบนั้นเป็นครั้งคราวในการ์ตูนอะไรทำนองนั้น
https://en.m.wikipedia.org/wiki/Autonomic_nervous_system
อ้างอิงไว้ว่าเรื่องนี้ถูกโพสต์บน HN เมื่อวันที่ 30 กันยายน แต่แทบไม่ได้รับความสนใจเลย และคนโพสต์ก็ลบคอมเมนต์ของตัวเองไปแล้ว
ตอนนั้นผมก็เขียนไว้เหมือนกันว่า นี่เป็นแนวคิดที่ดีจริง ๆ น่าจะเพิ่มเลเวลเข้าไป เช่น แบ่งเลเวลเป็นไมโครคอนโทรลเลอร์ในผลิตภัณฑ์ที่น่าสนใจ สมาร์ตโฟน โหลดบาลานเซอร์หรือ API server ของบริษัท SaaS อะไรทำนองนั้น เพื่อค่อย ๆ แนะนำแนวคิดทีละอย่าง แบบนั้นก็จะกลายเป็นคอร์สระบบปฏิบัติการระดับมหาวิทยาลัยได้เลย
น่าจะใส่การเขียนโปรแกรมเล็กน้อยเพื่อทำอัตโนมัติ และเจาะลึกไปถึง อัลกอริทึมแคชของระบบปฏิบัติการ ด้วย LRU ก็ดีนะ เป็นคอร์สที่น่าจะเรียนจบได้ก่อนจบมัธยมปลาย
https://news.ycombinator.com/item?id=36938032
เป็นไอเดียที่เจ๋ง แต่ยากเกินไปสำหรับผม แม้แต่ในโหมดปกติ แค่เริ่มเกมไป 20 วินาทีก็ต้องคลิกอย่างบ้าคลั่งแล้ว และถึงจะวน process ที่ติดค้างอยู่ process สีแดง ก็ยังสะสมขึ้นเรื่อย ๆ
บาง process ตายไปเพราะ event I/O ไม่เคยมาถึงเลย โหมดง่ายก็ดูเหมือนจะเหมือนกัน หรืออาจจะยากกว่าด้วยซ้ำ ยังไปไม่ถึงจุดที่หน่วยความจำกลายเป็นปัญหาเลย และด้วยความเร็วแบบนี้ก็ไม่อยากไปถึงด้วย
อาจเป็นเพราะผมแก่แล้วก็ได้ และผมเข้าใจว่าการเป็นระบบปฏิบัติการมันเครียด แต่งานของผมก็เครียดอยู่แล้ว ผมไม่อยากได้งานเพิ่มอีกงานหนึ่ง
ถ้าเริ่มต้นง่าย ๆ แล้วค่อย ๆ ไต่ระดับขึ้น โดยยังอยู่แค่ถัดออกไปจาก comfort zone ของผมเล็กน้อยด้วยจังหวะที่ผ่อนปรนกว่านี้ มันน่าจะเป็นเกมที่สนุกมาก
เกมแบบนี้มีอนาคตที่แข็งแรง
เกมที่สร้างนวัตกรรมเกินกว่าขอบเขตที่เกมเอนจินอย่าง Unity หรือ Unreal ให้ได้ กำลังมุ่งไปในทิศทางที่โดยการออกแบบแล้วมีโอกาสสำเร็จมากกว่าสิ่งที่ออกมาในยุคนี้
ถ้าสร้างเกมสายเนิร์ดสุด ๆ ที่อยู่นอกขอบเขตจนผู้ใช้เอนจินแตะต้องไม่ได้ คุณก็จะอยู่คนละลีก เกมจะดูเละเทะแค่ไหนก็ได้ ขอแค่สนุกและใช้งานได้
เกมอินดี้ ตายไปแล้วในความหมายของเกมอินดี้เมื่อ 5 ปีก่อน ตอนนี้ของแบบนี้แหละคือเกมอินดี้แบบใหม่ GG อ้างอิงจากผมซึ่งเป็นนักพัฒนาอินดี้ที่ล้มเหลวและเคยออกเกมเชิงพาณิชย์มาแล้ว 2 เกมขึ้นไป
น่าเสียดายที่ Zachtronics หยุดไปแล้ว พวกเขานำหน้าอยู่เสมอ
แล้วเกมนี้ก็น่าจะทำด้วย Unity ได้เหมือนกัน
ถ้าหมายถึง “กลายเป็นฮิตที่ทะลุคาดและเปลี่ยนทิศทางของวงการเกม” ไม่ว่าฝั่งไหนความน่าจะเป็นก็ต่ำมาก แต่เกมนอกกรอบอาจมีโอกาสนั้นสูงกว่า
โอกาสตีโฮมรันสูงกว่า แต่โอกาสถูกเอาต์ก็สูงกว่า และโอกาสตีได้เป็น hit ก็ต่ำกว่า
ช่วงไม่กี่ปีมานี้ก็มีเกมสายเนิร์ดเทคนิคหลายเกม แต่ไม่มีเกมไหนที่เรียกได้ว่าเป็นฮิต บางทีคุณอาจทำเกมของตัวเองได้ แต่ฐานผู้ชมเล็กโดยธรรมชาติ เพดานความสำเร็จก็เลยถูกจำกัดไปด้วย ผมไม่คิดว่าสิ่งนี้จะเปลี่ยนในอนาคต
น่าจะเป็นไปในทางตรงข้ามมากกว่า คนรุ่นใหม่ดูจะเนิร์ดน้อยลง และห่างจากหัวข้อกับเทคโนโลยีระดับต่ำมากขึ้น
เมื่อเกมยากขึ้นด้วยอัตราการใช้งานที่สูงขึ้น ควรสามารถ “ซื้อ” อัปเกรดเพื่ออัตโนมัติงานซ้ำ ๆ เล็ก ๆ ได้ด้วยโทเคนที่ได้จากการบรรลุ milestone หรือเป้าหมายด้านประสิทธิภาพ ให้ความรู้สึกคล้าย Universal Paperclips
จากนั้นก็โยน workload พยาธิสภาพ ที่ขัดขวาง automation ง่าย ๆ เข้ามา ทำให้ผู้ใช้ต้องแก้เองด้วยมือ แล้วผู้ใช้ก็ซื้อ automation ที่ดีขึ้นอีกนิด แต่ก็ถูก workload ที่พยาธิสภาพยิ่งขึ้นอีกนิดขวางอีก วงจรการดำเนินเกมก็จะสมบูรณ์แบบ
อีกไม่นานระบบปฏิบัติการก็คงมี ภาษาสคริปต์ ให้เพื่อทำงานอัตโนมัติได้สินะ?
อ๋อ เข้าใจแล้ว...
เจ๋งมาก ทำให้นึกถึงเกมที่โพสต์เมื่อสัปดาห์ที่แล้ว เกี่ยวกับ Defcon หรือเปล่านะ? เป็นเกมที่มีบล็อกสี่เหลี่ยมคล้ายบล็อก Tetris ที่มี opcode อยู่ข้างในหล่นลงมา แล้วผู้ใช้ต้องจัดวางลำดับแบบ Rube Goldberg เพื่อผสมตัวเลขที่ใหญ่ที่สุดเข้าไปใน register หน่วยความจำ “score”
https://news.ycombinator.com/item?id=37083309