मुझे पता है कि सिस्टम कॉल इंटरफ़ेस निम्न स्तर पर लागू किया गया है और इसलिए आर्किटेक्चर / प्लेटफॉर्म पर निर्भर है, न कि "सामान्य" कोड।
फिर भी, मैं स्पष्ट रूप से इस कारण को नहीं देख पा रहा हूं कि लिनक्स में सिस्टम कॉल 32-बिट x86 कर्नेल की संख्या क्यों है जो समान आर्किटेक्चर 64-बिट x86_64 में समान नहीं रखी जाती हैं? इस निर्णय के पीछे प्रेरणा / कारण क्या है?
मेरा पहला अनुमान है कि एक पृष्ठभूमि का कारण एक x86_64 सिस्टम पर 32-बिट अनुप्रयोगों को चलाने योग्य रखा गया है, ताकि सिस्टम कॉल नंबर के लिए एक उचित ऑफसेट के माध्यम से सिस्टम को पता चले कि उपयोगकर्ता-स्थान 32-बिट या 64-बिट है क्रमशः। हालांकि मामला यह नहीं है। कम से कम मुझे ऐसा लगता है कि x86_64 में सिस्टम कॉल नंबर 0 पढ़ा जा रहा है () इस विचार के साथ संरेखित नहीं किया जा सकता है।
एक और अनुमान लगाया गया है कि सिस्टम कॉल नंबरों को बदलने से सुरक्षा / सख्त पृष्ठभूमि हो सकती है, कुछ ऐसा जिसकी मैं खुद पुष्टि नहीं कर पा रहा था।
वास्तुकला पर निर्भर कोड भागों को लागू करने की चुनौतियों से अनभिज्ञ होने के नाते, मुझे अभी भी आश्चर्य है कि सिस्टम कॉल नंबरों को कैसे बदलना है , जब कोई आवश्यकता नहीं लगती है (जैसा कि 16-बिट रजिस्टर भी काफी हद तक स्टोर करेगा तो वर्तमान में ~ 346 नंबर सभी का प्रतिनिधित्व करने के लिए। कॉल), कुछ भी हासिल करने में मदद करेगा, ब्रेक कम्पैटिबिलिटी के अलावा (हालांकि लाइब्रेरी, लिबक के माध्यम से सिस्टम कॉल का उपयोग करके इसे कम करता है)।