Doğrudan bellek, esnek bellek ve havuzlar
Misafir adresleri gerçek ana sistem adresleridir. Doğrudan bellek, bu alana eşlenen seyrek, paylaşılan bir fiziksel havuzdur; MemoryPool aynı destek üzerinde ayırma, taahhüt ve toplu işlemler ekler.
10 Ekim 2026 tarihine kadarki depo notları
Misafir adresi ana sistem adresidir
Misafir x86-64 kodu yerel olarak çalışır ve mutlak adresler içerir; bu yüzden PS5PCEM işlemi rastgele bir ayırmaya taşıyamaz. Bellek modülü, herhangi bir modül yüklenmeden önce konsol düzenini ayırır. Sistem tarafından yönetilen pencere 0x40000'den başlar ve 32 GiB'ın hemen altına kadar uzanır. Ardından sisteme ayrılmış ve aygıt pencereleri gelir. Windows ve Linux'ta kullanıcı penceresi 0x10_0000_0000'dan 0xFC_0000_0000'a uzanır: 944 GiB adres alanı. macOS bu pencereyi daha yukarıdan başlatır ve 560 GiB alır.
Bu aralıklar taahhüt edilmiş RAM değil, ayırmalardır. Sayfalar bir eşleme oluşturulduğunda 16 KiB'lık birimlerle taahhüt edilir; eşlemeyi kaldırmak, dış ayırma kalırken onların taahhüdünü geri alır. Başka bir ana sistem ayırması kullanımlar arasında misafir adresini çalamaz.
Doğrudan ve esnek bellek
Doğrudan bellek, misafirin fiziksel video belleğine verdiği addır. Oyun bir fiziksel aralık ayırır, sonra onu eşler. İki adım ayrıdır. Eşleme, fiziksel aralığın tamamının ayrıldığını denetler, CPU ve GPU korumasını çevirir ve ya tam sabit adresi taahhüt eder ya da hizalanmış bir boşluk arar. Aynı fiziksel konum birkaç sanal adrese eşlenebilir ve bu takma adlar tek bir seyrek destek nesnesini paylaştıkları için tutarlıdır.
Oyunun zaten ayırdığı bir aralığa yapılan sabit bir eşleme, ayırmanın içinde taahhüt edilir. Önce ayırmayı serbest bırakmak, oyunun henüz eşlemediği parçalar üzerindeki hakkını düşürürdü. Fiziksel bellek, oyunun istediği biçimde serbest bırakılır; bu ortada bir boşluk veya birkaç ayırmayı kapsayan bir aralık olabilir. Esnek bellek aynı adres alanı tablosunu, platform varsayılanı 4 GiB'lık bir bütçeyle kullanır ve kullanıcı penceresine düşmeden önce sistem tarafından yönetilen pencereyi 0x02_0000_0000'dan itibaren arar.
MemoryPool ve Windows taahhüdü
Altı libkernel MemoryPool dışa aktarması sanal bir alan ayırır, fiziksel kapasiteyi genişletir, paylaşılan desteği taahhüt eder ve taahhüdünü geri alır, sıralı toplu işlemler çalıştırır ve blok istatistiklerini bildirir. Bağışlanmış bloklar taahhüt edilmişken sıradan doğrudan bellek olarak eşlenemez veya serbest bırakılamaz. Toplu taahhüt, taahhüdü geri alma, koruma ve tür değişiklikleri çalışır. Toplu MOVE desteklenmiyor olarak kalır ve blokların taşındığını varsaymak yerine hata döndürür.
Windows'ta hizalanmış doğrudan bellek görünümleri 64 KiB'lık bölüm görünümlerini paylaşır. Böylece geçici yüklemeler, geri okumalar ve 16 KiB'lık misafir sayfalarının her biri kendi, sürekli büyüyen taahhüt yükü hâline gelmez. Bir ayırmanın sorguları misafirin 72 baytlık sanal sorgu kaydını kullanır ve özgün koruma bitleriyle yarı açık aralıklar bildirir.
Uygulananlar
- 16 KiB'lık sayfalarla taahhüt edilen ve ayırmadan vazgeçmeden serbest bırakılan sabit misafir adres pencereleri.
- Tek bir doğrudan bellek fiziksel konumunun tutarlı takma adları.
- 4 GiB varsayılan bütçeli esnek bellek ile sabit, üzerine yazmayan ve kısmi eşleme kaldırma.
- MOVE dışında MemoryPool ayırma, genişletme, taahhüt, taahhüdü geri alma, istatistikler ve sıralı toplu işlemler.
Hâlâ eksik olanlar
- MemoryPool toplu MOVE açıkça desteklenmiyor.
- Oyunun sahip olmadığı bir aralığın serbest bırakılması hâlâ hatadır.
- Ayırmalar sanaldır. Yalnızca oyunun eşlediği sayfalar ana sistem taahhüdü tüketir.
İlgili mekanizmalar
Bu sayfalar nedir