Yerel misafir yürütme
Windows x86-64'te misafirin makine kodu doğrudan çalışır. Her misafir pthread'ini bir ana sistem çalışanı taşır ve Windows FS tabanını korumadığı için her engelleyen çağrıdan sonra geri yüklenir.
10 Ekim 2026 tarihine kadarki depo notları
Misafir iş parçacığı başına bir çalışan
Dağıtıcı her misafir pthread'i için bir ana sistem çalışanı başlatır, o iş parçacığının TLS'ini kurar ve System V bağımsız değişken yazmaçlarıyla istenen adresten misafire girer. Join, detach, yield, sleep, iç içe geri çağırmalar ve scePthreadExit hep bu yoldan geri gelir. HLE iş parçacığı ancak misafir yürütmesi o bağlamdan çıktıktan sonra tamamlanır.
Köprü giriş noktasının yürütülebilir olduğunu, yığının ve TLS'in eşlendiğini denetler. Windows'un kalıcı yazmaçlarını, MXCSR'yi ve x87 denetim sözcüğünü kaydeder, misafir yığınına geçer, misafir FS tabanını kurar ve girişi çağırır. Eşzamanlı bir scePthreadExit, misafir çerçevelerini atan ve dağıtıcı kesmeyi görmeden önce ana sistem FS'ini geri yükleyen yerel bir kaçışla çıkar.
Windows FS tabanını düşürür
FS'i bir kez kurmak yetmez. Windows, kullanıcının yazdığı bir FS tabanını bağlam geçişleri arasında korumaz. Bir uykudan sonra rdfsbase yine sıfır okur. Misafir kodu iş parçacığına özel belleğini System V kuralına göre FS'te tutar; bu yüzden sonraki FS'e göreli erişim sıfır adresi yakınında hata verirdi. Misafirde yanlış bir şey yoktur. Ana sistem, misafirin güvenmeye hakkı olan bir yazmacı düşürmüştür.
Bu yüzden dağıtıcı engelleyen çağrılardan sonra FS'i geri yükler. Beklemeler diziyi bilen bir futex kullanır; böylece bir kilit açma ile park etme arasında gelen bir uyandırma bir kez tüketilir ve bir yayın eski diziyi gözlemlemiş her bekleyen için görünür kalır. Sabit uyandırma geçmişi bir gün dolarsa dağıtıcı fazladan uyandırır ve HLE'nin nesneyi yeniden denetlemesine izin verir. Zamanlanmış uykular özel, uyarılamaz bir gecikme kullanır; böylece ilgisiz bir uyandırma bir ses çalışanını boşa dönen bir döngüye çeviremez.
Hatalar ve diğer işletim sistemleri
Hata veren bir misafir iş parçacığı yalıtılır. Tanılama, mümkün olduğunda adresi bir modüle ve bir sembole bağlar ve işlemin işlenmemiş bir ana sistem istisnasıyla ölmesi gerekmez. PS5_CPU_WAIT_DIAGNOSTICS=1 ayrıntılı bekleme izini yeniden açar. Normal oyunda kapalıdır; çünkü aynı anda yazdıran birkaç park etmiş çalışan bir kareyi kendileri takabilir.
Yerel yürütme Windows x86-64 ve RDWRFSGSBASE işlemci özelliği gerektirir. Linux ve macOS sürümleri kod çözücüyü, yükleyiciyi ve HLE'yi yine derler ve yerel köprüyü desteklenmiyor olarak bildirir. Misafir ikili dosyaları x86-64 makine kodudur. Yorumlanmazlar.
Uygulananlar
- Windows'ta misafir pthread'i başına bir ana sistem çalışanıyla yerel x86-64 misafir yürütme.
- System V çağrıları, misafir yığınları ve engelleyen çağrılardan sonra geri yüklenen FS.
- Diziyi bilen beklemeler, yalıtılmış hatalar ve ana sistemi geri yükleyen pthread çıkışı.
- Linux ve macOS'ta yerel yürütme olmadan inceleme, kod çözme ve HLE.
Hâlâ eksik olanlar
- Yorumlayıcı yok. Windows x86-64 dışındaki ana sistemler misafiri çalıştırmaz.
- FS ve GS tabanlarını yazamayan bir CPU yerel köprüye giremez.
- Ayrıntılı bekleme tanılaması varsayılan olarak kapalı; çünkü yazdırması oyunu takıyor.
İlgili mekanizmalar
Bu sayfalar nedir