
AI-संचालित रिवर्स-इंजीनियरिंग रोसेटा (लिनक्स के लिए 2) की। अस्वीकरण: उपयोगकर्ता समझौते के कारण, मैं कोड को छू नहीं पाऊंगा। सब कुछ AI द्वारा किया गया है, इसलिए हो सकता है कि कार्यान्वयन गड़बड़ हो।
एप्पल की रोसेटा 2 बाइनरी अनुवाद तकनीक को समझने और दस्तावेज़ित करने का एक व्यापक रिवर्स-इंजीनियरिंग प्रयास।
नवंबर 2020 में, एप्पल ने अपने पहले Apple Silicon Macs की घोषणा की, जो Intel x86_64 प्रोसेसर से अपने स्वयं के ARM-आधारित M1 चिप्स की ओर एक ऐतिहासिक परिवर्तन था। यह एप्पल का तीसरा प्रमुख वास्तुकला परिवर्तन था:
प्रत्येक परिवर्तन के दौरान मौजूदा सॉफ़्टवेयर को चलाने के लिए एक बाइनरी अनुवाद समाधान की आवश्यकता थी। रोसेटा 2 अब तक का एप्पल का सबसे उन्नत बाइनरी अनुवाद प्रणाली है।
रोसेटा (2006-2011) एप्पल का पहला गतिशील बाइनरी अनुवाद सॉफ़्टवेयर था, जिसने PowerPC अनुप्रयोगों को Intel-आधारित Macs पर चलने में सक्षम बनाया।
रोसेटा को Mac OS X 10.7 (Lion) में हटा दिया गया, जिससे Intel परिवर्तन पूरा हुआ।
रोसेटा 2 एप्पल की उन्नत गतिशील बाइनरी अनुवाद तकनीक है जो Intel x86_64 Macs के लिए संकलित अनुप्रयोगों को Apple Silicon (ARM64) Macs पर चलाने में सक्षम बनाती है।
┌─────────────────────────────────────────────────────────────┐ │ User Application (x86_64) │ ├─────────────────────────────────────────────────────────────┤ │ Rosetta 2 Layer │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │ │ │ Translator │ │ Runtime │ │ System Call │ │ │ │ (AOT/JIT) │ │ Library │ │ Translation │ │ │ └─────────────┘ └─────────────┘ └─────────────────────┘ │ ├─────────────────────────────────────────────────────────────┤ │ macOS Kernel (ARM64) │ ├─────────────────────────────────────────────────────────────┤ │ Apple Silicon Hardware │ └─────────────────────────────────────────────────────────────┘
### मुख्य प्रौद्योगिकियाँ
1. **पूर्व-समय (AOT) अनुवाद**
- स्थापना के समय x86_64 बाइनरी को ARM64 में अनुवाद करता है
- बाद के तेज़ लॉन्च के लिए अनुवादित कोड को कैश में संग्रहीत करता है
- शुद्ध JIT अनुवाद की तुलना में रनटाइम ओवरहेड कम करता है
2. **समय-समय पर (JIT) अनुवाद**
- निष्पादन के दौरान ऑन-डिमांड कोड ब्लॉक का अनुवाद करता है
- डायनामिक रूप से लोड किए गए कोड और स्व-संशोधित कोड को संभालता है
- दक्षता के लिए अनुवाद कैश बनाए रखता है
3. **निर्देश सेट अनुवाद**
- x86_64 -> ARM64 निर्देश मैपिंग
- SSE/AVX -> NEON वेक्टर निर्देश अनुवाद
- x86_64 फ़्लैग -> ARM64 स्थिति कोड
4. **सिस्टम कॉल अनुवाद**
- x86_64 macOS syscalls को ARM64 समकक्ष में अनुवाद करता है
- विभिन्न कॉलिंग कन्वेंशन को संभालता है
- syscall सीमाओं के पार रजिस्टर स्थिति का प्रबंधन करता है
5. **रनटाइम समर्थन**
- CPU सुविधा पहचान एमुलेशन
- थ्रेड-लोकल स्टोरेज हैंडलिंग
- सिग्नल और अपवाद हैंडलिंग
---
## Apple macOS में Rosetta 2 कैसे प्रदान करता है
### स्थापना स्थान
Rosetta 2 यहाँ स्थित है:```
/Library/Apple/usr/libexec/oah/
├── rosetta # Main translator binary
├── rosettad # Rosetta daemon
└── librosetta.* # Runtime libraries
oah निर्देशिका का अर्थ है "पुराने आर्किटेक्चर हार्डवेयर" - यह PowerPC संक्रमण युग की निरंतरता है।
Apple Silicon Macs पर, Rosetta 2 डिफ़ॉल्ट रूप से स्थापित नहीं होता है। इसे दो तरीकों से ट्रिगर किया जाता है:
| घटक | विवरण |
|---|---|
RosettaLinux/rosetta | अनुवाद इंजन युक्त मुख्य ARM64 बाइनरी |
RosettaLinux/rosettad | अनुवाद सेवाओं का प्रबंधन करने वाला सिस्टम डेमॉन |
debugserver -> /usr/libexec/rosetta/debugserver | अनुवादित प्रक्रियाओं के लिए डिबगिंग समर्थन |
libRosettaRuntime | अनुवाद के दौरान लिंक की गई रनटाइम लाइब्रेरी |
translate_tool -> /usr/libexec/rosetta/translate_tool | अनुवादित बाइनरी बनाने के लिए अनुवाद उपकरण |
┌──────────────────────────────────────────────────────────────────┐ │ Phase 1: Binary Loading │ │ ─────────────────────────────────────────────────────────────── │ │ 1. Load x86_64 Mach-O binary │ │ 2. Parse segments, sections, symbols │ │ 3. Validate code signatures │ │ 4. Map into translation context │ └──────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────┐ │ Phase 2: AOT Translation │ │ ─────────────────────────────────────────────────────────────── │ │ 1. Disassemble x86_64 code sections │ │ 2. Translate instructions to ARM64 │ │ 3. Apply optimizations │ │ 4. Store in translation cache (~/.oah) │ └──────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────┐ │ Phase 3: Runtime Execution │ │ ─────────────────────────────────────────────────────────────── │ │ 1. Load translated ARM64 code │ │ 2. Set up x86_64 emulation context │ │ 3. Handle JIT translations for dynamic code │ │ 4. Translate syscalls on-the-fly │ └──────────────────────────────────────────────────────────────────┘
### मुख्य अनुवाद चुनौतियाँ
1. **रजिस्टर मैपिंग**
- x86_64 में 16 GPRs हैं; ARM64 में 31 GPRs हैं
- x86_64 फ्लैग्स रजिस्टर -> ARM64 NZCV फ्लैग्स
- RIP (निर्देश पॉइंटर) एमुलेशन
2. **मेमोरी ऑर्डरिंग**
- x86_64: मजबूत मेमोरी ऑर्डरिंग (TSO)
- ARM64: कमजोर मेमोरी ऑर्डरिंग
- शुद्धता के लिए मेमोरी बैरियर्स की आवश्यकता
3. **वेक्टर निर्देश**
- SSE (128-बिट) -> NEON (128-बिट) प्रत्यक्ष मैपिंग
- AVX (256-बिट) -> NEON जोड़ी एमुलेशन
- SIMD के लिए अलग अपवाद हैंडलिंग
4. **कॉलिंग कन्वेंशन्स**
- x86_64: पहले 6 आर्गुमेंट्स रजिस्टरों में (RDI, RSI, RDX, RCX, R8, R9)
- ARM64: पहले 8 आर्गुमेंट्स रजिस्टरों में (X0-X7)
- अलग स्टैक फ्रेम लेआउट
---
## यह प्रोजेक्ट