Sizi işletim sistemi yapan video oyunu
(plbrault.com)- You’re the OS, oyuncunun işletim sistemi rolünü üstlenerek CPU çekirdeklerini, süreçleri, bellek sayfalarını ve takas alanını yönettiği, kullanıcının sistemi yeniden başlatmasını engellemeye çalıştığı bir oyun
- Temel akış, boşta bekleyen süreçleri CPU’ya atamak ve aktif süreçleri kaldırmak üzerine kurulu; uzun süre ihmal edilen süreçler starvation aşamalarından geçerek sonlandırılıyor
- Zaman ilerledikçe süreç sayısı ve bellek baskısı artıyor; diskteki sayfaları RAM’e geri döndürme şeklindeki bellek takasını da doğrudan yönetmek gerekiyor
- Uygulama Python/Pygame tabanlı; pygbag ile WebAssembly derlemesi oluşturularak tarayıcıda da çalıştırılabilir hâle getirilmiş
- Kesin bir işletim sistemi simülasyonu olmasa da, varsayımlar açıkça belirtildiğinde süreç zamanlama ve RAM yetersizliği durumlarını anlatmak için kullanılabilir
İşletim sistemi olduğunuz bir oyun fikri
- Oyun, oyuncunun bir işletim sistemi olup CPU çekirdeklerini, süreçleri, bellek sayfalarını ve takas alanını yönettiği fikrinden yola çıkıyor
- Amaç, kullanıcının sistemin fazla yavaş olduğunu hissetmemesi için süreçlere CPU zamanı ayırmak ve gerektiğinde bellek sayfalarını takas etmek
- Basit bir 2D oyuna uygun olması için tam bir oyun motoru yerine Pygame seçilmiş
- Python’ı yeniden kullanmak istemek de seçim nedenlerinden biriymiş
- Pygame, pygbag üzerinden WebAssembly’ye derlenebildiği için tarayıcıda çalıştırma açısından avantajlı
- Geliştirme süresi, 8 aya yayılmış birkaç haftalık dağınık bir çalışma olmuş
Süreç zamanlama ve oyunun bitiş koşulları
- Oyunun temel etkileşimi süreç ve CPU yönetimi
- Boşta bekleyen bir sürece tıklayınca kullanılabilir bir CPU’ya atanıyor
- Aktif bir sürece tıklayınca ilgili CPU’dan kaldırılıyor
- Boşta bekleyen süreçler zamanla renk ve emojiyle gösterilen 6 aşamalı bir starvation düzeyinden geçiyor
- Son aşamada çok uzun kalırsa kullanıcı o süreci sonlandırıyor
- 10 süreç sonlandırılınca kullanıcı, işletim sistemi olan oyuncuyu yeniden başlatıyor ve oyun bitiyor
- Uzun süre hayatta kalmak için her sürecin tüm starvation aşamalarından geçmeden önce yeterli CPU zamanı alması gerekiyor
I/O ve bellek takası
- Aktif süreçler, I/O olayını beklerken blocked durumuna geçebiliyor
- Blocked süreçler CPU zamanını boşa harcadığı için CPU’dan kaldırmak daha iyi
- I/O olayları, olay gerçekleştiğinde şekli değişen bir düğmeye tıklanarak işleniyor
- Zaman geçtikçe daha fazla süreç ortaya çıkıyor ve zorluk artıyor
- Bir noktadan sonra tüm süreçlerin kullandığı bellek RAM’den fazla hâle geliyor ve RAM ile disk arasında sayfa takası gerekiyor
- Aktif bir süreç diskteki bir sayfaya erişmeye çalışırsa süreç ve ilgili sayfa yanıp sönüyor
- Bu işarete bakarak gerekli sayfayı takas etmek gerekiyor
- Diskteki bir sayfayı bekleyen süreç, o sayfa RAM’e dönene kadar blocked durumda kalıyor
- Blocked durumu çok uzun sürerse süreç starvation aşamalarından geçmeye devam edip sonunda sonlandırılabiliyor
Zorluk ve özel ayarlar
- Oyunda birden çok zorluk seviyesi var
- Zorluk; CPU sayısını, RAM kapasitesini, başlangıçta var olan süreç sayısını ve I/O olayı olasılığı gibi değerleri etkiliyor
- Özel modda bu ayarlar ayrı ayrı değiştirilebiliyor
Eğitsel değer ve sınırlar
- Bu oyun her şeyden önce bir oyun; gerçekçilikten çok oynanabilirlik öncelenerek tasarlanmış
- Gerçek işletim sistemini birebir yansıtmayan yönleri var
- Oyuncunun gerçek bir bilgisayar kadar hızlı tepki vermesi beklenmiyor
- Süreçler, gerçek hayattaki tipik süreçlere göre çok daha az bellek sayfası kullanıyor
- Kullanıcının sürekli sınırsız yeni süreç çalıştırdığı yapı, zorluğu artırmaya yönelik bir oyun mekaniği
- Eğitim amacıyla yapılmış olmasa da, birebir doğru bir tasvir olmadığı açıkça belirtilirse işletim sistemi ilkelerini tanıtmak için değerli olabilir
- Süreç zamanlama ve bellek takası için örnek olarak kullanılabilir
- Daha fazla CPU çekirdeğine sahip olmanın ne anlama geldiğini ve RAM yetersiz olduğunda neler yaşandığını gösterebilir
WebAssembly derleme ve dağıtım
- WebAssembly derlemesi, pygame-web belgeleri sayesinde beklenenden kolay olmuş
- Ana adımlar pygbag kurulumu ve belgelerde belirtilen kod değişikliklerini uygulamak
- En büyük sorun, emoji render etmek için kullanılan pygame-emojis kütüphanesinin pygbag ile birlikte çalışmamasıymış
- Bunun yerine OpenMoji üzerinden SVG dosyaları indirilmiş
- GIMP ile boyutları ayarlanıp PNG olarak dışa aktarılmış ve kullanılmış
- Tarayıcı sürümü, temel olarak masaüstü sürümüyle aynı oranı koruyup tarayıcı viewport’una göre yeniden boyutlanıyor
- Masaüstü sürümü daha küçük bir pencere boyutu kullanırsa ekran uzatılmış görünebilir
- Oyun retro tarzda olduğu için pikselleşme ciddi rahatsızlık vermemiş
- Oyun itch.io üzerinden tarayıcıda oynanabiliyor
- Kaynak kod GitHub üzerinde yayımlanmış
1 yorum
Hacker News yorumları
Harika olabilecek bir fikir olarak aklıma birleştirme oyunu geliyor. Temelde dairesel yerleşimli bir Tetris; sık kullanılan veri bloklarını dıştaki izlere, eski dosyaları ya da arşiv dosyası türlerini içteki izlere gönderdikçe daha çok puan kazanıyorsun.
Eskiden grafik arayüzlü birleştirme araçlarının sihirli gibi hareket etmesini izlemeyi severdim; bir birleştirme oyunu çıksa gerçekten denemek isterim.
Üstten bakışlı 2D bir oyun ve büyük, boş bir depoda tek başınasın. Belirli aralıklarla bir kamyon arkaya çeşitli eşyalar bırakıyor; öndeki tezgahta ise birkaç kişi belirli eşyalar istiyor. Yapman gereken, istekleri olabildiğince hızlı karşılayabilmek için depodaki eşyaları yerleştirmek. Renge, işleve, ada ya da sana uyan başka bir yönteme göre düzenleyebilirsin.
Oyun ilerledikçe kamyon daha çeşitli eşyalar getiriyor; bunların çoğu genellikle birden fazla kategoriye giriyor ve istekler de giderek karmaşıklaşıyor. En sonda, tüm oyun boyunca deponun nasıl değiştiğini bir time-lapse olarak gösteriyor; böylece stratejinin zaman içinde nasıl evrildiğini görebiliyorsun.
Oldukça iyi yapılmış ve sade. Aslında HN yorumlarında geliştiricilerinden biri sayesinde öğrendim.
https://boardgamegeek.com/boardgame/376284/defrag
https://www.defraggame.com
Eskiden bunlardan daha doğrudan bir benzetim gibi olan birkaç eski oyun daha oynadığımı hatırlıyorum, ama başkası bulabilir mi bilmiyorum.
Ender's Game gibi, en üst düzey oyuncuların farkında olmadan bir yerlerdeki kritik altyapının belleğini ayırdığını hayal etmek güzel olurdu.
https://xkcd.com/1897/
Bu web sitesini yarım cümle okur okumaz tamamen ikna oldum.
Böyle bir problemi anlamanın en iyi yollarından biri bu. “Artık bellek yöneticisi sensin. Bol şans.”
Fikir gerçekten çok iyi. Sevimli bir görsellikle restoran işletme simülasyonu gibi de yapılabilir bence. Yalnız restoran bilgisayar, müşteriler de kaynaklar olur.
Human Resource Machine de bu açıdan harikaydı. Bir noktada “Dur, az önce ben bir bağlı liste mi yaptım?” diye düşündüğümü hatırlıyorum.
Aslında insan hayatının bir tür işletim sistemine yakın olduğunu düşünüyorum. Her gün görevler, kaynaklar, girdi/çıktı, depolama, önbellek ve durumla uğraşarak yaşıyoruz.
Gösterge paneli işletim sisteminin vazgeçilmez aracıdır; insan ölçeğinde bunun karşılığı banka, yapılacaklar listesi, takvim, gelen kutusu gibi şeylerdir. Bu yüzden pek çok “kişisel gelişim” kavramı, işletim sistemlerinin en iyi uygulamalarına temiz biçimde çevrilebilir. Örneğin tahsis yönetimi için FIFO veya LIFO, kilitlenmeleri kırmak için önceden planlama, paralelliği yönetme, tam zamanında çöp toplama gibi.
[0] https://algorithmstoliveby.com/
Örneğin dişlilerin ileri teknoloji olduğu zamanlarda, düşünme eylemini dişlilerin hareketine benzeterek kafasının içinde dişlilerin döndüğünü hayal eden insanlar vardı. Çizgi filmler gibi yerlerde bu ifadeyi hâlâ ara sıra görüyoruz sanırım.
https://en.m.wikipedia.org/wiki/Autonomic_nervous_system
Bu arada bu, 30 Eylül'de HN'ye konmuştu ama hiç ilgi görmedi; paylaşan kişi de kendi yorumunu sildi.
O zaman da yazmıştım: gerçekten iyi bir konsept. Seviyeler eklenirse güzel olur. Örneğin ilginç bir ürünün içindeki mikrodenetleyici, akıllı telefon, bir SaaS şirketinin yük dengeleyicisi ya da API sunucusu gibi seviyelere ayrılırsa kavramlar tek tek tanıtılabilir. Böylece üniversite düzeyinde bir işletim sistemleri dersine dönüşür.
Otomasyon için biraz programlama eklenip işletim sistemi önbellek algoritmalarına kadar derine inilse iyi olur. LRU iyidir. Liseden mezun olmadan önce bitirebilmiş olmayı isteyeceğim türden bir ders olurdu.
https://news.ycombinator.com/item?id=36938032
Harika bir fikir ama benim için fazla zor. Normal modda bile oyun başladıktan 20 saniye sonra çılgınca tıklamaya başlıyorum; takılmış süreçleri döngüye alsam da kırmızı süreçler birikiyor.
Bazı süreçler, giriş/çıkış olayı bir türlü gelmediği için öldü. Kolay mod da aynı gibi, hatta belki daha zor. Belleğin sorun olduğu noktaya bile gelemiyorum; bu hızda gelmek de istemem.
Yaşlanmış olabilirim ve işletim sistemi olmanın stresli olduğunu anlıyorum ama işim zaten stresli. Bir iş daha istemiyorum.
Başta kolay başlayıp giderek yükselen, ama konfor alanımın hemen dışında kalacak kadar daha hoşgörülü bir tempo olursa çok eğlenceli bir oyun olabilir.
Bu tür oyunların güçlü bir geleceği var.
Unity veya Unreal gibi oyun motorlarının sağlayabileceği kapsamın ötesinde yenilik yapan oyunlar, tasarım gereği günümüzde çıkanlara kıyasla başarı ihtimali daha yüksek bir yöne gidiyor.
Motor kullanıcılarının dokunamayacağı kadar alanın dışında kalan aşırı inek işi oyunlar yaparsanız farklı bir ligde olursunuz. Oyun berbat görünse de eğlenceli ve kullanılabilir olması yeterli.
Bağımsız oyun, 5 yıl önceki anlamıyla bağımsız oyun olarak öldü. Artık yeni bağımsız oyun bu. GG. Bu arada iki veya daha fazla ticari oyun çıkarmış başarısız bir bağımsız geliştiriciyim.
Zachtronics'in durması üzücü. Onlar her zaman öndeydi.
Ayrıca bu oyun Unity ile de yapılabilir gibi duruyor.
“Beklenmedik bir sıçrama yapıp oyunların yönünü değiştiren bir hit olmak” anlamındaysa, iki tarafta da olasılık son derece düşük; ama kalıpların dışındaki bir oyunun bu olasılığı daha yüksek olabilir.
Home run olasılığı daha yüksek, ama strike out olasılığı da daha yüksek; tek vuruşluk isabet yapma olasılığı daha düşük.
Son yıllarda da birkaç teknik inek işi oyun vardı ama hit denebilecek bir şey yoktu. Muhtemelen kendi oyununu yapabilirsin, ama izleyici kitlesi doğası gereği küçük olduğundan başarının üst sınırı da sınırlı. Bunun ileride değişeceğini de sanmıyorum.
Hatta tersinin olması daha olası. Genç nesiller daha az inekleşiyor ve düşük seviye konularla teknolojilerden daha da uzaklaşıyor gibi.
Oyun yüksek kullanım oranlarında zorlaştıkça, dönüm noktalarına veya performans hedeflerine ulaşarak kazanılan token'larla küçük tekrar eden işleri otomatikleştiren yükseltmeleri “satın” alabilmek gerekir. Universal Paperclips gibi.
Sonra basit otomasyonu bozan patolojik iş yükleri atılır ve kullanıcının bunları elle çözmesi gerekir. Kullanıcı biraz daha iyi otomasyon satın alır, ama sonra yine biraz daha patolojik bir iş yüküne takılır. Böylece oyun ilerleme döngüsü tamamlanır.
Yakında işletim sistemi işleri otomatikleştirebilmek için bir betik dili sunar herhalde, değil mi?
Ha, anladım...
Çok havalı. Geçen hafta paylaşılan oyunu hatırlattı. Defcon ile ilgili miydi? İşlem kodları içeren Tetris blokları gibi karelerin düştüğü, kullanıcının en büyük sayıyı “skor” bellek yazmacına karıştıran Rube Goldberg tarzı diziler yerleştirmesi gereken bir oyundu.
https://news.ycombinator.com/item?id=37083309