नेटिव गेस्ट निष्पादन
Windows x86-64 पर गेस्ट का मशीन कोड सीधे चलता है। हर गेस्ट pthread को एक होस्ट वर्कर चलाता है, और हर अवरोधक कॉल के बाद FS बेस लौटाया जाता है क्योंकि Windows उसे नहीं रखता।
10 अक्टूबर 2026 तक के रिपॉज़िटरी नोट्स
हर गेस्ट थ्रेड के लिए एक वर्कर
डिस्पैचर हर गेस्ट pthread के लिए एक होस्ट वर्कर शुरू करता है, उस थ्रेड का TLS स्थापित करता है, और System V आर्ग्युमेंट रजिस्टर के साथ माँगे गए पते पर गेस्ट में प्रवेश करता है। Join, detach, yield, sleep, नेस्टेड कॉलबैक और scePthreadExit सब इसी पथ से लौटते हैं। HLE थ्रेड तभी पूरा होता है जब गेस्ट निष्पादन उस कॉन्टेक्स्ट को छोड़ दे।
ब्रिज जाँचता है कि प्रवेश बिंदु निष्पादन योग्य है और स्टैक तथा TLS मैप हैं। यह Windows के अस्थिर-रहित रजिस्टर, MXCSR और x87 कंट्रोल शब्द सहेजता है, गेस्ट स्टैक पर जाता है, गेस्ट FS बेस स्थापित करता है, और प्रवेश बिंदु को कॉल करता है। सिंक्रोनस scePthreadExit एक नेटिव निकास से बाहर जाता है जो गेस्ट फ़्रेम फेंक देता है और डिस्पैचर के इंटरप्ट देखने से पहले होस्ट FS लौटाता है।
Windows FS बेस गिरा देता है
FS एक बार स्थापित करना काफ़ी नहीं है। Windows उपयोगकर्ता द्वारा लिखे FS बेस को कॉन्टेक्स्ट स्विच के पार नहीं रखता। एक नींद के बाद rdfsbase फिर शून्य पढ़ता है। गेस्ट कोड System V कन्वेंशन के तहत अपनी थ्रेड-स्थानीय स्टोरेज FS में रखता है, इसलिए अगली FS-सापेक्ष पहुँच पता शून्य के पास फ़ॉल्ट करती। गेस्ट में कुछ ग़लत नहीं है। होस्ट ने वह रजिस्टर गिरा दिया जिस पर भरोसा करने का गेस्ट को हक़ है।
इसलिए डिस्पैचर अवरोधक कॉल के बाद FS लौटाता है। प्रतीक्षाएँ अनुक्रम-सजग futex इस्तेमाल करती हैं ताकि अनलॉक और पार्क के बीच आया जागरण एक बार ही खपे, और प्रसारण पुराने अनुक्रम को देखने वाले हर प्रतीक्षक को दिखता रहे। अगर तय जागरण इतिहास कभी भर जाए, तो डिस्पैचर ज़्यादा जगाता है और HLE को ऑब्जेक्ट दोबारा जाँचने देता है। समयबद्ध नींदें एक निजी, न जगाई जा सकने वाली देरी इस्तेमाल करती हैं ताकि कोई असंबंधित जागरण ऑडियो वर्कर को व्यर्थ घूमने वाला न बना दे।
फ़ॉल्ट और दूसरे ऑपरेटिंग सिस्टम
फ़ॉल्ट करने वाला गेस्ट थ्रेड सीमित रखा जाता है। डायग्नॉस्टिक्स संभव हो तो पते को किसी मॉड्यूल और सिंबल से जोड़ते हैं, और प्रक्रिया को किसी अनसँभाले होस्ट अपवाद से मरना नहीं पड़ता। PS5_CPU_WAIT_DIAGNOSTICS=1 विस्तृत प्रतीक्षा ट्रेस फिर चालू करता है। सामान्य खेल में यह बंद रहता है क्योंकि एक साथ प्रिंट करते कई रुके वर्कर ख़ुद एक फ़्रेम अटका सकते हैं।
नेटिव निष्पादन को Windows x86-64 और RDWRFSGSBASE प्रोसेसर सुविधा चाहिए। Linux और macOS बिल्ड डिकोडर, लोडर और HLE फिर भी कम्पाइल करते हैं, और नेटिव ब्रिज को असमर्थित बताते हैं। गेस्ट बाइनरी x86-64 मशीन कोड हैं। उनकी व्याख्या नहीं होती।
क्या लागू है
- Windows पर नेटिव x86-64 गेस्ट निष्पादन, हर गेस्ट pthread के लिए एक होस्ट वर्कर।
- System V कॉल, गेस्ट स्टैक, और अवरोधक कॉल के बाद लौटाया गया FS।
- अनुक्रम-सजग प्रतीक्षाएँ, सीमित फ़ॉल्ट, और होस्ट लौटाने वाला pthread निकास।
- Linux और macOS पर बिना नेटिव निष्पादन के निरीक्षण, डिकोड और HLE।
क्या अब भी बाक़ी है
- कोई इंटरप्रेटर नहीं है। Windows x86-64 के अलावा होस्ट गेस्ट नहीं चलाते।
- जो CPU FS और GS बेस नहीं लिख सकता वह नेटिव ब्रिज में नहीं जा सकता।
- विस्तृत प्रतीक्षा डायग्नॉस्टिक्स डिफ़ॉल्ट रूप से बंद हैं क्योंकि उनकी प्रिंटिंग खेल अटकाती है।
संबंधित तंत्र
ये पेज क्या हैं