Trò chơi điện tử nơi bạn trở thành hệ điều hành
(plbrault.com)- You’re the OS là một trò chơi nơi người chơi vào vai hệ điều hành, quản lý CPU core, process, memory page và swap space để ngăn người dùng khởi động lại máy
- Luồng chơi cơ bản là gán các process nhàn rỗi vào CPU và gỡ các process đang hoạt động ra; những process bị bỏ mặc quá lâu sẽ đi qua các giai đoạn starvation rồi bị kết thúc
- Càng về sau số lượng process và áp lực bộ nhớ càng tăng, buộc người chơi phải tự xử lý cả memory swapping để đưa các page trên đĩa trở lại RAM
- Phần triển khai dựa trên Python/Pygame, đồng thời dùng pygbag để tạo bản dựng WebAssembly nhằm chạy được cả trong trình duyệt
- Đây không phải là mô phỏng hệ điều hành chính xác, nhưng nếu nêu rõ các giả định thì vẫn có thể dùng để giải thích process scheduling và tình huống thiếu RAM
Ý tưởng về một trò chơi nơi bạn trở thành hệ điều hành
- Trò chơi bắt đầu từ ý tưởng để người chơi trở thành hệ điều hành và quản lý CPU core, process, memory page, swap space
- Mục tiêu là phân bổ thời gian CPU cho các process để người dùng không cảm thấy hệ thống quá chậm, đồng thời swap các memory page khi cần
- Tác giả chọn Pygame thay vì một game engine hoàn chỉnh để phù hợp với một trò chơi 2D đơn giản
- Một lý do khác là muốn quay lại sử dụng Python
- Pygame có thể biên dịch sang WebAssembly thông qua pygbag, nên thuận lợi cho việc chạy trong trình duyệt
- Thời gian phát triển là vài tuần rải rác trong vòng 8 tháng
Process scheduling và điều kiện kết thúc game
- Cơ chế điều khiển trung tâm của game là quản lý process và CPU
- Nhấp vào một process nhàn rỗi để gán nó vào một CPU còn trống
- Nhấp vào một process đang hoạt động để gỡ nó khỏi CPU đó
- Các process nhàn rỗi theo thời gian sẽ trải qua 6 mức starvation, được thể hiện bằng màu sắc và emoji
- Nếu ở quá lâu trong giai đoạn cuối, người dùng sẽ kết thúc process đó
- Khi 10 process bị kết thúc, người dùng sẽ khởi động lại người chơi trong vai hệ điều hành và game kết thúc
- Để sống sót lâu hơn, mỗi process phải nhận đủ thời gian CPU trước khi đi qua toàn bộ các giai đoạn starvation
I/O và memory swapping
- Các process đang hoạt động có thể trở thành trạng thái blocked khi chờ sự kiện I/O
- Process blocked làm lãng phí thời gian CPU, nên tốt hơn là gỡ nó ra khỏi CPU
- Có thể xử lý sự kiện I/O bằng cách nhấp vào nút đổi hình dạng khi sự kiện xảy ra
- Theo thời gian, ngày càng nhiều process xuất hiện làm độ khó tăng lên
- Từ một thời điểm nào đó, tổng lượng bộ nhớ mà tất cả process sử dụng sẽ vượt quá RAM, khiến việc swap page giữa RAM và đĩa trở nên cần thiết
- Nếu một process đang hoạt động cố truy cập một page nằm trên đĩa, process và page đó sẽ nhấp nháy
- Dựa vào dấu hiệu này để swap page cần thiết
- Process đang chờ page ở trên đĩa sẽ tiếp tục ở trạng thái blocked cho đến khi page đó trở lại RAM
- Nếu bị blocked quá lâu, nó vẫn tiếp tục đi qua các giai đoạn starvation và cuối cùng có thể bị kết thúc
Độ khó và thiết lập tùy chỉnh
- Trò chơi có nhiều mức độ khó
- Độ khó ảnh hưởng đến số lượng CPU, dung lượng RAM, số process tồn tại từ lúc bắt đầu, xác suất xảy ra sự kiện I/O, v.v.
- Trong chế độ tùy chỉnh, có thể điều chỉnh riêng từng thiết lập này
Giá trị giáo dục và giới hạn
- Trò chơi này trước hết là một trò chơi, và được thiết kế ưu tiên tính chơi được hơn là tính hiện thực
- Có những điểm không mô tả chính xác một hệ điều hành thực tế
- Tác giả không kỳ vọng người chơi phản ứng nhanh như máy tính thật
- Các process sử dụng ít memory page hơn rất nhiều so với process thông thường ngoài đời thực
- Cấu trúc để người dùng liên tục chạy vô hạn các process mới là một cơ chế gameplay nhằm tăng độ khó
- Dù không được tạo ra cho mục đích giáo dục, nếu làm rõ rằng đây không phải mô tả chính xác thì nó vẫn có thể có giá trị trong việc giới thiệu các nguyên lý của hệ điều hành
- Có thể dùng làm ví dụ để giải thích process scheduling và memory swapping
- Có thể cho thấy việc có nhiều CPU core hơn có ý nghĩa gì, và điều gì xảy ra khi thiếu RAM
Biên dịch WebAssembly và triển khai
- Việc biên dịch WebAssembly dễ hơn dự kiến nhờ tài liệu pygame-web
- Các bước chính là cài pygbag và áp dụng những chỉnh sửa mã được nêu trong tài liệu
- Vấn đề lớn nhất là thư viện pygame-emojis dùng để render emoji không hoạt động cùng pygbag
- Thay vào đó, tác giả tải các tệp SVG từ OpenMoji
- Dùng GIMP để thay đổi kích thước rồi xuất sang PNG để sử dụng
- Bản trình duyệt về cơ bản được co giãn để khớp viewport của trình duyệt trong khi vẫn giữ cùng tỷ lệ với bản desktop
- Nếu bản desktop dùng kích thước cửa sổ nhỏ hơn, màn hình có thể trông như bị kéo giãn
- Vì trò chơi theo phong cách retro nên hiện tượng rỗ pixel không bị cảm nhận là quá nghiêm trọng
- Có thể chơi game trên trình duyệt tại itch.io
- Mã nguồn được công khai trên GitHub
1 bình luận
Ý kiến trên Hacker News
Một ý tưởng có thể rất hay hiện ra trong đầu là game chống phân mảnh. Về cơ bản là Tetris bố trí theo vòng tròn, trong đó các khối dữ liệu thường dùng thì đưa ra các track bên ngoài, còn các tệp cũ hoặc dạng tệp lưu trữ thì đưa vào các track bên trong để được nhiều điểm hơn
Hồi trước tôi thích xem các công cụ chống phân mảnh dạng đồ họa di chuyển như có phép thuật, và nếu có game chống phân mảnh thì tôi thật sự muốn thử chơi
Đây là game 2D nhìn từ trên xuống, bạn ở một mình trong một nhà kho lớn trống trải. Cứ sau một khoảng thời gian, xe tải sẽ dỡ nhiều món hàng ở phía sau, còn ở quầy phía trước thì vài người yêu cầu những món cụ thể. Việc cần làm là sắp xếp đồ trong kho sao cho có thể xử lý yêu cầu nhanh nhất có thể. Bạn có thể tổ chức theo cách phù hợp với mình, như màu sắc, chức năng, tên gọi, v.v.
Càng chơi, xe tải càng mang đến nhiều loại đồ hơn; thường cũng có nhiều món thuộc nhiều danh mục, và các yêu cầu ngày càng phức tạp. Cuối cùng, game cho xem timelapse về việc nhà kho đã thay đổi ra sao trong suốt toàn bộ quá trình, để bạn thấy chiến lược của mình tiến hóa theo thời gian
Game làm khá tốt và đơn giản. Thực ra tôi biết đến nó qua một trong các nhà phát triển trong phần bình luận HN
https://boardgamegeek.com/boardgame/376284/defrag
https://www.defraggame.com
Tôi nhớ trước đây từng chơi vài game cũ mô phỏng trực tiếp hơn những game này, nhưng không chắc người khác có tìm được không
Như Ender's Game, sẽ rất thú vị nếu tưởng tượng những người chơi hàng đầu đang vô tình cấp phát bộ nhớ cho hạ tầng cốt lõi ở đâu đó
https://xkcd.com/1897/
Chỉ đọc nửa câu trên website này là tôi đã hoàn toàn bị thuyết phục
Đây là một trong những cách tốt nhất để hiểu dạng vấn đề này. “Giờ bạn là trình quản lý bộ nhớ. Chúc may mắn.”
Ý tưởng thật sự rất hay. Có thể trang trí cho dễ thương rồi làm giống một game mô phỏng quản lý nhà hàng. Chỉ có điều nhà hàng là máy tính, còn khách là tài nguyên
Human Resource Machine cũng xuất sắc ở khía cạnh này. Tôi nhớ có lúc đã nghĩ: “Khoan, mình vừa tạo ra một danh sách liên kết à?”
Thật ra tôi nghĩ đời sống con người gần giống một dạng hệ điều hành. Mỗi ngày chúng ta sống bằng cách xử lý tác vụ, tài nguyên, nhập/xuất, lưu trữ, cache và trạng thái
Dashboard là công cụ thiết yếu của hệ điều hành, và ở quy mô con người thì đó là những thứ như ngân hàng, việc cần làm, lịch và hộp thư đến. Vì vậy nhiều khái niệm “phát triển bản thân” có thể được chuyển dịch gọn gàng thành các best practice của hệ điều hành. Ví dụ như FIFO hoặc LIFO để quản lý phân bổ, lập kế hoạch trước để phá thế bế tắc, quản lý tính song song, và garbage collection đúng lúc
[0] https://algorithmstoliveby.com/
Ví dụ, khi bánh răng còn là công nghệ tiên tiến, có những người hình dung bánh răng quay trong đầu và ví hành vi suy nghĩ với chuyển động của bánh răng. Tôi nghĩ trong truyện tranh thỉnh thoảng vẫn thấy cách biểu đạt như vậy
https://en.m.wikipedia.org/wiki/Autonomic_nervous_system
Nhân tiện, bài này đã được đưa lên HN vào ngày 30 tháng 9 nhưng hoàn toàn không được chú ý, và người đăng cũng đã xóa bình luận của mình
Lúc đó tôi cũng đã viết rồi: đây là một concept thật sự hay. Sẽ tốt nếu thêm các cấp độ. Ví dụ chia cấp độ thành microcontroller trong một sản phẩm thú vị, smartphone, bộ cân bằng tải hoặc API server của một công ty SaaS, v.v., để có thể giới thiệu từng khái niệm một. Như vậy sẽ thành một khóa học hệ điều hành ở trình độ đại học
Sẽ hay nếu đưa vào một chút lập trình để tự động hóa, rồi đào sâu đến cả thuật toán cache của hệ điều hành. LRU thì tuyệt. Đây là kiểu khóa học mà lẽ ra tôi đã có thể hoàn thành trước khi tốt nghiệp trung học
https://news.ycombinator.com/item?id=36938032
Ý tưởng rất hay nhưng quá khó với tôi. Ngay cả ở chế độ thường, mới bắt đầu game được 20 giây là tôi đã phải nhấp chuột điên cuồng, và dù có xoay vòng các tiến trình bị kẹt thì tiến trình đỏ vẫn cứ chất đống
Một số tiến trình đã chết vì sự kiện nhập/xuất mãi không tới. Chế độ dễ cũng y như vậy, hoặc thậm chí có vẻ còn khó hơn. Tôi còn chưa đi tới điểm mà bộ nhớ trở thành vấn đề, và với tốc độ này thì tôi cũng chẳng muốn tới đó
Có thể là do tôi đã có tuổi, và tôi hiểu rằng trở thành hệ điều hành thì căng thẳng, nhưng công việc của tôi vốn đã căng thẳng rồi. Tôi không muốn thêm một công việc nữa
Nếu bắt đầu dễ hơn rồi tăng dần, nhưng với nhịp độ khoan dung hơn, chỉ ở ngay bên ngoài vùng thoải mái của tôi, thì đây có thể là một game rất thú vị
Những game như thế này có tương lai rất mạnh
Các game đổi mới vượt ra ngoài phạm vi mà những game engine như Unity hay Unreal có thể cung cấp đang đi theo một hướng có khả năng thành công cao hơn so với phần lớn thứ ra mắt ngày nay, xét về mặt thiết kế
Nếu làm một game siêu geek nằm ngoài vùng mà người dùng engine có thể chạm tới, bạn sẽ đứng ở một hạng đấu khác. Game trông có lộn xộn cũng được, miễn là vui và dùng được
Game indie đã chết nếu hiểu theo nghĩa game indie của 5 năm trước. Giờ những thứ như thế này mới là game indie mới. GG. Nói thêm, tôi là một nhà phát triển indie thất bại đã phát hành hơn 2 tựa game thương mại
Thật tiếc là Zachtronics đã dừng lại. Họ luôn đi trước
Và game này có vẻ cũng có thể làm bằng Unity
Nếu nghĩa là “trở thành một cú đột phá bất ngờ, một hit làm thay đổi hướng đi của game”, thì xác suất của cả hai phía đều cực thấp, nhưng game ngoài khuôn khổ có thể có xác suất cao hơn
Xác suất đánh home run cao hơn, nhưng xác suất bị loại cũng cao hơn, còn xác suất đánh trúng bóng an toàn thì thấp hơn
Những năm gần đây cũng có vài game geek về kỹ thuật, nhưng không có game nào đáng gọi là hit. Có lẽ bạn có thể làm game của riêng mình, nhưng tập khán giả vốn nhỏ nên trần thành công cũng bị giới hạn. Tôi cũng không nghĩ điều này sẽ thay đổi trong tương lai
Thậm chí khả năng ngược lại còn cao hơn. Thế hệ trẻ có vẻ ít geek hơn và ngày càng xa rời các chủ đề, công nghệ cấp thấp
Khi game trở nên khó hơn do mức sử dụng cao, người chơi nên có thể “mua” các nâng cấp tự động hóa những tác vụ lặp nhỏ bằng token kiếm được nhờ đạt các cột mốc hoặc mục tiêu hiệu năng. Cảm giác giống Universal Paperclips
Sau đó, game ném vào các workload bệnh hoạn cản trở tự động hóa đơn giản, buộc người dùng phải giải thủ công. Rồi người dùng mua tự động hóa tốt hơn một chút, nhưng lại bị chặn bởi workload bệnh hoạn hơn một chút. Như vậy là hoàn tất vòng lặp tiến trình của game
Chẳng mấy chốc hệ điều hành sẽ cung cấp một ngôn ngữ script để có thể tự động hóa công việc nhỉ?
À, hiểu rồi...
Rất tuyệt. Làm tôi nhớ tới game được đăng tuần trước. Có phải liên quan đến Defcon không? Đó là một game với các khối vuông giống block Tetris chứa opcode rơi xuống, và người dùng phải sắp xếp một chuỗi kiểu Rube Goldberg để trộn con số lớn nhất vào thanh ghi bộ nhớ “điểm số”
https://news.ycombinator.com/item?id=37083309