कर्नल

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

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

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

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

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

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

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

डिवाइस-स्वतंत्र I/O
पर

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

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

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

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

बाहरी संबंध

 * Commodore KERNAL History
 * Commodore 64 KERNAL I/O Monitor Utility