कर्नल

करनाल अपने 8 बिट गृह कम्प्यूटर ों में  केवल पढ़ने के लिये मेमोरी -रेजिडेंट ऑपरेटिंग सिस्टम कोर के लिए कमोडोर इंटरनेशनल का नाम है; 1977 के मूल कमोडोर पीईटी से, उसके बाद उसके उत्तराधिकारियों में उपयोग किए गए विस्तारित लेकिन संबंधित संस्करण: वीआईसी-20, कमोडोर 64, कमोडोर प्लस/4|प्लस/4, कमोडोर 16, और कमोडोर 128।

विवरण
कमोडोर 8-बिट मशीन 'करनाल में आईबीएम पीसी कॉम्पैटिबल्स (कमोडोर बेसिक रूटीन के विपरीत, रोम में भी स्थित) में बीआईओएस के बराबर निम्न-स्तर, क्लोज-टू-द-हार्डवेयर ओएस रूटीन सम्मिलित हैं। उच्च-स्तर, डिवाइस-स्वतंत्र आई / ओ कार्यक्षमता, और रैम में शाखा तालिका के माध्यम से उपयोगकर्ता-कॉल करने योग्य है जिसका केंद्रीय (सबसे पुराना) भाग, पिछड़े संगतता के कारणों के लिए, संपूर्ण 8-बिट श्रृंखला में काफी हद तक समान रहता है। करनाल रोम 8-बिट सीपीयू के 64 केबी एड्रेस स्पेस ($इ000–$एफएफएफएफ) के अंतिम 8 किलोबाइट पर कब्जा कर लेता है।

उपयोगकर्ता द्वारा लिखे गए रूटीन को इंगित करने के लिए जंप टेबल को संशोधित किया जा सकता है, उदाहरण के लिए एनिमेटेड ग्राफिक्स प्रदर्शित करने के लिए स्क्रीन डिस्प्ले रूटीन को फिर से लिखना या रैम में कैरेक्टर सेट को कॉपी करना। जंप टेबल का यह प्रयोग उस समय छोटे कंप्यूटरों के लिए नया था।

कार्ट्रिज पर वीआईसी-20 के लिए प्रकाशित एडवेंचर इंटरनेशनल गेम्स सॉफ्टवेयर का एक उदाहरण है जो करनाल का उपयोग करता है। क्योंकि वे केवल जंप टेबल का उपयोग करते हैं, गेम को डिस्क में मेमोरी डंप किया जा सकता है, एक कमोडोर 64 में लोड किया जा सकता है, और बिना किसी संशोधन के चलाया जा सकता है।

करनाल को आरम्भ में जॉन फेगन्स द्वारा कमोडोर पीईटी के लिए लिखा गया था, जिन्होंने बेसिक रूटीन को ऑपरेटिंग सिस्टम से अलग करने का विचार पेश किया था। इसे कई लोगों द्वारा विकसित किया गया, विशेष रूप से रॉबर्ट रसेल (इंजीनियर), जिन्होंने वीआईसी-20 और C64 के लिए कई सुविधाएँ जोड़ीं।

उदाहरण
करनाल का उपयोग करने का एक सरल, फिर भी विशिष्ट उदाहरण निम्नलिखित एमओएस यांत्रिकी  6502  सभा की भाषा  सबरूटीन द्वारा दिया गया है (सीसी65 असेंबलर प्रारूप/वाक्यविन्यास में लिखा गया है):

CHROUT = $ffd2; CHROUT कैरेक्टर आउटपुट रूटीन का पता है CR = $0d; कैरिज रिटर्न के लिए PETSCII कोड ;   नमस्ते: एलडीएक्स #0; एक्स इंडेक्स रजिस्टर में 0 लोड करके कैरेक्टर 0 से आरम्भ करें अगला: एलडीए संदेश, एक्स; संचायक में पता संदेश + x से बाइट लोड करें किया गया; यदि संचायक शून्य रखता है, तो हम कर चुके हैं और लूप से बाहर निकलना चाहते हैं जेएसआर क्रोट; आउटपुट चार को वर्तमान आउटपुट डिवाइस पर कॉल करें (डिफ़ॉल्ट स्क्रीन पर) आईएनएक्स; अगले वर्ण पर जाने के लिए x बढ़ाएँ अगला बनो; लूप बैक जबकि अंतिम वर्ण शून्य नहीं है (अधिकतम स्ट्रिंग लंबाई 255 बाइट्स) पूर्ण: आरटीएस; सबरूटीन से लौटें �;   संदेश: .बाइट हैलो वर्ल्ड प्रोग्राम#एक्यूमुलेटर + इंडेक्स रजिस्टर मशीन: Mओएस टेक्नोलॉजी 6502, CBM करनाल, ca65 असेंबलर|हैलो, वर्ल्ड! .बाइट सीआर, 0; कैरिज रिटर्न और स्ट्रिंग का शून्य अंकन अंत

यह कोड स्टब नियोजित करता है  दिनचर्या, जिसका पता पते पर मिलता है   (65490), डिफ़ॉल्ट आउटपुट डिवाइस (जैसे, डिस्प्ले स्क्रीन) पर टेक्स्ट स्ट्रिंग भेजने के लिए।

नाम
करनाल को कर्नेल के रूप में जाना जाता था पीईटी दिनों से कमोडोर के अंदर, लेकिन 1980 में रॉबर्ट रसेल ने अपनी नोटबुक में इस शब्द को कर्नेल के रूप में गलत लिखा। जब कमोडोर यांत्रिकी लेखक नील हैरिस और एंडी फिंकेल ने रसेल के नोट्स एकत्र किए और उन्हें वीआईसी-20 प्रोग्रामर के मैनुअल के आधार के रूप में उपयोग किया, तो गलत वर्तनी उनके साथ चली गई और अटक गई। प्रारंभिक कमोडोर मिथक के अनुसार, और दूसरों के बीच लेखक/प्रोग्रामर जिम बटरफील्ड द्वारा रिपोर्ट किया गया, करनाल शब्द 'कीबोर्ड एंट्री रीड, नेटवर्क, और लिंक' के लिए खड़ा एक संक्षिप्त (या, अधिक संभावना है, एक संक्षिप्त नाम) है, जो वास्तव में इसकी भूमिका को देखते हुए अच्छी समझ में आता है। बर्कले सॉफ्टवर्क्स ने बाद में 8-बिट होम कंप्यूटरों के लिए अपने जीयूआई ओएस के मुख्य रूटीन का नामकरण करते समय इसका उपयोग किया: जीईओएस (8-बिट ऑपरेटिंग सिस्टम) करनाल।

डिवाइस-स्वतंत्र आई / ओ
पर

आश्चर्यजनक रूप से, करनाल ने एक उपकरण-स्वतंत्र आई /ओ API को लागू किया जो पूरी तरह से बेल लैब्स के यूनिक्स या प्लान 9 से भिन्न नहीं है। जबकि कोई यथोचित तर्क दे सकता है कि इन बाद वाली प्रणालियों में सब कुछ एक फाइल है, अन्य आसानी से दावा कर सकते हैं कि सब कुछ पूर्व में एक जीपीआईबी-डिवाइस है।

उस समय 6502 आर्किटेक्चर की सीमाओं के कारण, आई /ओ चैनल खोलने के लिए तीन सिस्टम कॉल की आवश्यकता होती है। पहला आमतौर पर तार्किक फ़ाइल नाम को इसके माध्यम से सेट करता है  सिस्टम कॉल। दूसरी कॉल, , संचार करने के लिए GPIB/आईईईई-488 उपकरण पता स्थापित करता है। आखिरकार   वास्तविक लेनदेन करने के लिए कहा जाता है। आवेदन तो उपयोग  किया   और   सिस्टम क्रमशः एप्लिकेशन के वर्तमान इनपुट और आउटपुट चैनल सेट करने के लिए कॉल करता है। अनुप्रयोगों में समवर्ती खुली फ़ाइलों की संख्या हो सकती है (कुछ सिस्टम-निर्भर सीमा तक; उदाहरण के लिए, C64 एक बार में दस फ़ाइलों को खोलने की अनुमति देता है)। उसके बाद,   और   वास्तव में क्रमशः इनपुट और आउटपुट के संचालन के लिए उपयोगी साबित होते हैं।   फिर एक चैनल बंद कर देता है।

निरीक्षण करें कि आई / ओ चैनल बनाने के लिए कोई सिस्टम कॉल मौजूद नहीं है, क्योंकि सामान्य परिस्थितियों में उपकरणों को गतिशील रूप से बनाया या नष्ट नहीं किया जा सकता है। इसी तरह, यूनिक्स में ioctl जैसे आई / ओ नियंत्रण कार्यों को करने के लिए न तो खोज करने के लिए कोई साधन मौजूद है और न ही। वास्तव में, करनाल यहाँ योजना-9 दर्शन के बहुत करीब साबित होता है, जहाँ एक एप्लिकेशन इस तरह के मेटा या आउट-ऑफ-बैंड लेनदेन करने के लिए संकेतित डिवाइस के लिए एक विशेष कमांड चैनल खोलेगा। उदाहरण के लिए, डिस्क से फ़ाइल को हटाने (स्क्रैच) करने के लिए, उपयोगकर्ता आमतौर पर नामक संसाधन को खोलेगा  डिवाइस 8 या 9 पर, चैनल 15। कमोडोर 8-बिट दुनिया में स्थापित सम्मेलन के अनुसार, चैनल 15 बाह्य उपकरणों के लिए कमांड चैनल का प्रतिनिधित्व करता है, असाधारण मामलों सहित कमांड और परिणाम दोनों को संप्रेषित करने के लिए संदेश-पासिंग तकनीकों पर निर्भर करता है। उदाहरण के लिए, कमोडोर बेसिक में, वे ऐसे सॉफ़्टवेयर पा सकते हैं जो निम्नलिखित के विपरीत नहीं हैं: डिवाइस नंबर, प्रति स्थापित प्रलेखन, सीमा [0,16] तक सीमित हैं। हालाँकि, यह सीमा आईईईई-488 प्रोटोकॉल के विशिष्ट अनुकूलन से आई है और वास्तव में, केवल बाहरी बाह्य उपकरणों पर लागू होती है। सभी प्रासंगिक करनाल सिस्टम कॉल्स के साथ, प्रोग्रामर [32,256] की सीमा में किसी भी पते के साथ वर्चुअल डिवाइस को लागू करने के लिए सिस्टम कॉल को इंटरसेप्ट कर सकते हैं। संकल्पनात्मक रूप से, कोई डिवाइस ड्राइवर बाइनरी को मेमोरी में लोड कर सकता है, करनाल आई /ओ वैक्टर को पैच कर सकता है, और उस क्षण से आगे, एक नया (वर्चुअल) डिवाइस संबोधित किया जा सकता है। अब तक, इस क्षमता को सार्वजनिक रूप से कभी भी उपयोग के रूप में नहीं जाना जाता है, संभवतः दो कारणों से: (1) करनाल गतिशील रूप से डिवाइस आईडी आवंटित करने के लिए कोई साधन प्रदान नहीं करता है, और (2) करनाल एक स्थानापन्न बाइनरी छवि लोड करने के लिए कोई साधन प्रदान नहीं करता है। इस प्रकार, आई /ओ स्पेस और मेमोरी स्पेस दोनों में टकराव का बोझ उपयोगकर्ता पर पड़ता है, जबकि मशीनों की एक विस्तृत श्रृंखला में प्लेटफ़ॉर्म संगतता सॉफ़्टवेयर लेखक पर पड़ती है। बहरहाल, यदि वांछित हो तो इन कार्यों के लिए समर्थन सॉफ्टवेयर आसानी से लागू किया जा सकता है।

तार्किक फ़ाइल नाम प्रारूप संबोधित विशिष्ट डिवाइस पर निर्भर करता है। निस्संदेह, सबसे अधिक उपयोग किया जाने वाला उपकरण फ्लॉपी डिस्क सिस्टम है, जो एक समान प्रारूप का उपयोग करता है , जहाँ एम एक प्रकार का ध्वज है ($ निर्देशिका सूची के लिए, @ फ़ाइल को अधिलेखित करने की इच्छा को इंगित करने के लिए यदि यह पहले से मौजूद है, अन्यथा अप्रयुक्त है।), डी (वैकल्पिक) भौतिक डिस्क इकाई संख्या (0: या 1: के लिए) है। डुअल-ड्राइव सिस्टम, सिर्फ 0: 1541 जैसी सिंगल-डिस्क इकाइयों के लिए, एट अल।, जो 0 पर डिफॉल्ट करता है: यदि अनिर्दिष्ट छोड़ दिया जाता है),   लंबाई में 16 वर्णों तक का एक संसाधन नाम है (कुछ विशेष वर्णों को छोड़कर अधिकांश वर्णों की अनुमति है), और   विशेषताओं या झंडों की एक वैकल्पिक अल्पविराम से अलग की गई सूची है। उदाहरण के लिए, यदि उपयोगकर्ता एक प्रोग्राम फ़ाइल को अधिलेखित करना चाहता है जिसे कहा जाता है  , वे एक फ़ाइल नाम जैसे देख सकते हैं   डिवाइस 8 या 9 के संयोजन के साथ प्रयोग किया जाता है। इस बीच, आर एस-232 ड्राइवर (डिवाइस 2) के लिए एक फ़ाइल नाम में केवल चार वर्ण होते हैं, जो बाइनरी प्रारूप में एन्कोडेड होते हैं।

अन्य डिवाइस, जैसे कि कीबोर्ड (डिवाइस 0), कैसेट (डिवाइस 1), डिस्प्ले इंटरफ़ेस (डिवाइस 3), और प्रिंटर (डिवाइस 4 और 5), को कार्य करने के लिए किसी फ़ाइल नाम की आवश्यकता नहीं होती है, या तो उचित डिफ़ॉल्ट मानते हैं या बस उनकी आवश्यकता नहीं होती है बिलकुल।

बाहरी संबंध

 * Commodore करनाल History
 * Commodore 64 करनाल आई / ओ Monitor Utility