2011-06-10 21 views
6

पर काम नहीं करते हैं पिछले रीडिंग से यह लगता है कि अधिकतर 32 बिट ड्राइवर 64 बिट पर काम नहीं करेंगे।क्यों 32 बिट ड्राइवर 64 बिट

पूरी तरह से वैचारिक स्तर पर, मुझे 32 बिट ड्राइवरों का उपयोग करते समय अतिरिक्त 'कमरा' होने के रूप में 64 बिट मशीन दिखाई देती है, इसलिए यह निर्धारित करने की कोशिश कर रहा है कि वे अक्सर काम क्यों करेंगे। जिसमें कहा गया है

धक्का और स्टैक पर पॉप्स x86-64 पर this विकी लेख (मुझे उपयोगकर्ता के अंतरिक्ष से आने वाले)

मैंने पढ़ लिया है 8-बाइट प्रगति में हमेशा से रहे हैं, और संकेत दिए गए 8 बाइट्स विस्तृत कर रहे हैं ।

मैं यह देख सकता हूं कि 32 बिट ड्राइवर 64 बिट पर असफल हो सकता है क्योंकि यह एक पॉप() जो ड्राइवर की उम्मीद के मुकाबले दो गुना अधिक पॉप करता है।

जो मैंने अभी उल्लेख किया है वह पूरी तरह से चिह्न से बाहर हो सकता है क्योंकि मैं उपयोगकर्ता-स्थान लड़का हूं, या अन्यथा, कुछ व्यावहारिक उदाहरण (कोड या आम आदमी स्पष्टीकरण) क्यों हैं जब 32 बिट ड्राइवर चलते हैं 64 बिट पर?

उत्तर

6

बस रखें, आप 32-बिट पॉइंटर में 64-बिट पता स्टोर नहीं कर सकते हैं। इसलिए यदि आपके कोड में ऑपरेटिंग सिस्टम को आगे और आगे पॉइंटर्स पास करना शामिल है, क्योंकि डिवाइस ड्राइवर आमतौर पर करते हैं, तो यह ठीक से खत्म नहीं होगा।

ड्राइवर अक्सर फ़ाइस्कल डिवाइस (जैसे डिस्क) और मेमोरी के बीच डेटा ले जाने के बारे में होते हैं। ड्राइवर से एक्स डिस्क क्षेत्रों को स्मृति में वाई

64-बिट ओएस पर, वाई 64 बिट पता होगा, इसलिए आपका 32-बिट ड्राइवर इसे संभाल नहीं सकता है। और निश्चित रूप से यह मुद्दा है कि पॉइंटर पास का आकार दो बार अपेक्षा करता है, इसलिए यदि यह चलाया जाता है तो यह संभवतः गलत गलती पर मुद्रित होगा ...

+0

तो ड्राइवर कुछ मेमोरी आवंटन के लिए पूछ सकता है जिस पर ओएस एक पता वापस लौटाएगा कि यह (ड्राइवर) पता/पॉइंट-टू नहीं कर सकता है? – wal

+0

@wal। हां, लेकिन ऊपर की तरह, सरल चीजें भी गलत हो जाती हैं। – Roddy

4

याद रखें कि ड्राइवर हार्डवेयर से बात करने के लिए हैं। क्या होगा यदि 32 बिट ड्राइवर कोड को मेमोरी एरिया में लोड किया गया था जो कि 4gigabytes से अधिक है जहां से हार्डवेयर के memory-mapped registers हैं? ड्राइवर कोड स्मृति में scribbling होगा कि खुद के साथ या हार्डवेयर को चलाने के लिए कुछ भी नहीं है।

+0

यदि ड्राइवर को 32 बिट के रूप में चिह्नित किया गया था (केवल 4 जीग से कम पते में लोड किया गया था, तो वह किराया कैसे होगा? – wal

+0

32 बिट कोड अभी भी 32 बिट मोड में चलाया जाएगा। यह जादुई रूप से 64 बिट मोड में अनुवाद नहीं किया जाएगा। यह अनिवार्य रूप से वही स्थिति है जैसे 32 बिट 386+ प्रोसेसर पर वर्चुअल 86 मोड में 16 बिट कोड चल रहा है। कुल वातावरण 64 बिट है, लेकिन 32 बिट भाग 32 बिट सैंडबॉक्स में चलाया जाता है। –

+0

यकीन है, लेकिन यह अभी भी चल रहा है। (32 बिट मोड में सभी) – wal

0

x86-64 प्रोसेसर विशेषाधिकार प्राप्त (कर्नेल) मोड में 32 बिट कोड नहीं चला सकते हैं। संगतता मोड केवल उपयोगकर्ता स्थान के लिए उपलब्ध है।

+0

असल में वे मैकोज़ एक्स 10.5 में अभ्यास कर सकते हैं, जहां आप 64-बिट ऐप्स (इम्यूलेशन के बिना) चलाते हैं, कर्नेल 32-बिट है। – LocoDelAssembly

+1

वे 32 बिट कर्नेल चला रहे हैं और उपयोगकर्ता स्थान पर 64 बिट पर स्विच कर रहे हैं। 64 बिट कर्नेल में 32 बिट ड्राइवर चलाने से यह अलग है। –

0

मेरा 2 सेंट मूल्य। माइक्रोसॉफ्ट उन्नयन या पैच जारी करते समय गड़बड़ी के बारे में एक चूहे नहीं देता है।

विशेष रूप से लीगेसी हार्डवेयर x64 पीढ़ी ओएस के साथ संगत होने के बारे में। मैं यहां वैज्ञानिक हार्डवेयर के असंख्य लोगों के बारे में बात कर रहा हूं, जिसमें केवल 32 बिट ड्राइवर हैं जो उस हार्डवेयर के साथ अनुपयोगी और असमर्थित हैं, इस प्रकार लैब्स XP चला रहे हैं या सर्वोत्तम 7 x86 पर हैं। इसी प्रकार उपभोक्ताओं ने बायोमेट्रिक स्कैनर और विभिन्न चिकित्सा उपकरणों को कैसे खरीदा है।

x64 पथ विरासत 32 बिट हार्डवेयर को समायोजित करने के लिए डिज़ाइन किया जाना चाहिए था।