2010-07-15 12 views
6

लिखना मैं कुछ समय के लिए कर्नेल लिखना चाहता हूं। मेरे पास पहले से ही सी का पर्याप्त ज्ञान है और मैंने x86 असेंबलर में डब किया है। आप देखते हैं, मैं एक कर्नेल लिखना चाहता हूं जो सी में POSIX-compliant है ताकि * NIX अनुप्रयोगों को संभावित रूप से मेरे ओएस पर पोर्ट किया जा सके, लेकिन मुझे मानक POSIX कर्नेल फ़ंक्शंस पर कई संसाधन नहीं मिले हैं। मुझे फाइल सिस्टम संरचना, पर्यावरण चर, और the Open Group's POSIX page पर अधिक संसाधन मिल गए हैं।एक पॉज़िक्स-अनुरूप कर्नेल

दुर्भाग्यवश, मुझे कुछ भी नहीं मिला है कि कॉल और कर्नेल एक पॉज़िक्स-अनुरूप कर्नेल के पास क्या कार्य करता है (दूसरे शब्दों में, कर्नेल को किस प्रकार की आंतरिक संरचना को POSIX का पालन करना होगा)। अगर कोई उस जानकारी को पा सकता है, तो कृपया मुझे बताएं।

उत्तर

11

POSIX कर्नेल, कर्नेल-टू-यूजर स्पेस इंटरफेस, या यहां तक ​​कि libc, आंतरिक संरचना को परिभाषित नहीं करता है। दरअसल, विंडोज़ में भी एक पॉज़िक्स-अनुपालन उपप्रणाली है। बस सुनिश्चित करें कि आपके लिंक पर परिभाषित POSIX इंटरफेस किसी भी तरह पर काम करते हैं। नोट, हालांकि, POSIX को विशेष रूप से कर्नेल में लागू करने की आवश्यकता नहीं है - यदि आप चाहें तो अपने स्वयं के डिज़ाइन के सरल कर्नेल इंटरफेस का उपयोग करके आप सी लाइब्रेरी में चीजों को कार्यान्वित कर सकते हैं।

ऐसा इसलिए होता है कि बहुत सारे पॉज़िक्स अनुपालन ओएस (बीएसडी, लिनक्स, आदि) में उन कॉलों और कर्नेल परतों के बीच काफी करीबी संबंध हैं, लेकिन अपवाद हैं। उदाहरण के लिए, लिनक्स पर, write() कॉल कर्नेल में sys_write() फ़ंक्शन का आह्वान करते हुए प्रत्यक्ष सिस्कल है। हालांकि विंडोज़ पर, write() को एक पीओएसआईक्स समर्थन डीएलएल में कार्यान्वित किया गया है, जो फ़ाइल डिस्क्रिप्टर को एनटी हैंडल में अनुवाद करता है और NtWriteFile() पर कॉल करने के लिए कॉल करता है, जो बदले में ntoskrnl.exe में संबंधित सिस्टम कॉल का आह्वान करता है। तो चीजों को कैसे करना है, इस बारे में आपको बहुत सारी स्वतंत्रता है - जो चीजों को कठिन बनाता है, अगर कुछ भी :)

4

opengroup.org प्रत्येक प्रत्यारोपण के लिए कर्नेल सिस्कोल के बारे में निर्णय छोड़ देता है।
लिखना(), उदाहरण के लिए, जैसा कि कहा गया है, देखना और व्यवहार करना है, लेकिन नीचे जो भी कॉल करता है उसे परिभाषित नहीं किया जाता है। लिखने, पढ़ने, lseek जैसे कई कॉल कर्नेल के अंदर जो भी प्रवेश बिंदु चाहते हैं उसे कॉल करने के लिए स्वतंत्र हैं।

तो, नहीं, वास्तव में कुछ भी नहीं है जो कहता है कि कर्नेल में उपलब्ध अर्थशास्त्र के निर्धारित सेट के साथ आपको एक निश्चित कार्य नाम होना है। यह सिर्फ सी रनटाइम पुस्तकालय में उपलब्ध है।

+0

ठीक है, अब मैं समझता हूं। मुझे उम्मीद है कि मैं सही ढंग से POSIX कर्नेल लिखने में सक्षम हो सकता हूं। इसे साफ करने के लिए धन्यवाद! –