सभी प्रोसेसर जो x64 निर्देश सेट (जिसे x86_64 या amd64 के रूप में भी जाना जाता है) का समर्थन करते हैं, x86 अनुदेश सेट (जिसे i386 या i686 भी कहा जाता है, जो कड़ाई से x86 के विशिष्ट संस्करण बोल रहे हैं ) का समर्थन करते हैं। वही ARM A64 (ARMv8 में दिखने वाला नया 64-बिट इंस्ट्रक्शन सेट) और A32 ("क्लासिक" 32-बिट इंस्ट्रक्शन सेट के लिए नाम ), SPARC64 और SPARC के लिए जाता है , और मैं MIPS64 और MIPS के लिए विश्वास करता हूं । तो इन सभी आर्किटेक्चर परिवारों पर, यदि कोई प्रोसेसर 64-बिट कोड चला सकता है, तो यह 32-बिट कोड भी चला सकता है।
लिनक्स कर्नेल 64-बिट कर्नेल के साथ 32-बिट यूजरलैंड कोड चलाने का समर्थन करता है (ऊपर वर्णित सभी वास्तुकला परिवारों पर, मुझे लगता है)। कर्नेल सजातीय होना चाहिए (सभी 64-बिट या सभी 32-बिट), और प्रत्येक प्रक्रिया सजातीय होनी चाहिए, लेकिन आपके पास 64-बिट कर्नेल पर 32-बिट और 64-बिट प्रक्रियाओं का मिश्रण हो सकता है। आक्षेप संभव नहीं है: 32-बिट कर्नेल के साथ, आप 64-बिट प्रक्रिया नहीं चला सकते हैं।
यह लिनक्स में एक डिज़ाइन पसंद है, जो 64-बिट इंस्टॉलेशन पर मौजूदा 32-बिट बायनेरिज़ को चलाने की इच्छा से प्रेरित है। अन्य यूनिक्स वेरिएंट ने अलग-अलग विकल्प बनाए हैं: सोलारिस 32-बिट कर्नेल पर 64-बिट प्रोग्राम के साथ-साथ दूसरे तरीके से भी चल सकता है, जबकि ओपनबीएसडी 64-बिट कर्नेल पर 32-बिट प्रोग्राम नहीं चला सकता है।
आप प्राप्त कर सकते हैं सीपीयू के बारे में जानकारी में /proc/cpuinfo
। यदि आपके x86 CPU में lm
ध्वज है, तो यह 64-बिट CPU है।
डिफ़ॉल्ट रूप से, uname -m
या arch
आर्किटेक्चर दिखाता है कि कर्नेल के लिए संकलित किया गया था। लिनक्स प्रक्रिया के "व्यक्तित्व" को personality
सिस्टम कॉल के साथ सेट कर सकता है । आप setarch
कमांड के साथ एक अलग व्यक्तित्व में एक उपप्रकार चला सकते हैं ; setarch i686 someprogram
या linux32 someprogram
निर्दिष्ट प्रोग्राम को ऐसे वातावरण में चलाता है, जहाँ uname -m
रिटर्न i686
करते समय setarch amd64 someprogram
या linux64 someprogram
निर्दिष्ट प्रोग्राम को ऐसे वातावरण में चलाता है जहाँ uname -m
रिटर्न देता है amd64
।
file /sbin/init
आपको बताता है कि init
कार्यक्रम किस वास्तुकला के लिए संकलित है। यद्यपि एक इंस्टॉलेशन में 32-बिट और 64-बिट निष्पादन योग्य मिश्रण करना संभव है, आमतौर पर सभी कोर ओएस प्रोग्राम एक ही वास्तुकला से होते हैं, क्योंकि इसे प्रबंधित करना बहुत आसान है।
$HOSTYPE
एक बैश वैरिएबल है और आपको बताता है कि bash
प्रोग्राम को किस आर्किटेक्चर के लिए संकलित किया गया था।
getconf LONG_BIT
क्या आप जानते हैं कि 32-बिट या 64-बिट प्रोग्राम को संकलित करने के लिए डिफ़ॉल्ट C कंपाइलर सेट किया गया है या नहीं। एक अधिक सटीक परीक्षण एक प्रोग्राम को संकलित करना और चलाना है जो प्रिंट sizeof(void*)
या sizeof(size_t)
- कॉलिंग getconf
केवल इस बारे में जानकारी दे सकता getconf
है कि डिफ़ॉल्ट कंपाइलर क्या है।