कर्नल: Difference between revisions
No edit summary |
|||
Line 2: | Line 2: | ||
{{Distinguish|कर्नेल (बहुविकल्पी){{!}}कर्नेल}} | {{Distinguish|कर्नेल (बहुविकल्पी){{!}}कर्नेल}} | ||
कर्नल<ref>''Commodore 64 Programmer's Reference Guide''. Commodore Business Machines, Inc., 1982, p. 268</ref> अपने [[8 बिट]] [[ गृह कम्प्यूटर ]]ों में [[ केवल पढ़ने के लिये मेमोरी ]]-रेजिडेंट [[ऑपरेटिंग सिस्टम|प्रचालन तंत्र]] कोर के लिए [[कमोडोर इंटरनेशनल]] का नाम है; 1977 के मूल [[कमोडोर पीईटी]] से, उसके बाद उसके उत्तराधिकारियों में उपयोग किए गए विस्तारित लेकिन संबंधित संस्करण: [[VIC-20|वीआईसी-20]], [[कमोडोर 64]], कमोडोर प्लस/4|प्लस/4, [[कमोडोर 16]], और [[कमोडोर 128]]। | |||
== विवरण == | == विवरण == | ||
कमोडोर 8-बिट मशीन ' | कमोडोर 8-बिट मशीन 'कर्नल में आईबीएम पीसी कॉम्पैटिबल्स ([[कमोडोर बेसिक]] दिनचर्या के विपरीत, रोम में भी स्थित) में [[BIOS|बीआईओएस]] के बराबर निम्न-स्तर, क्लोज-टू-द-हार्डवेयर ओएस दिनचर्या सम्मिलित हैं। उच्च-स्तर, डिवाइस-स्वतंत्र आई /ओ कार्यक्षमता, और रैम में [[शाखा तालिका]] के माध्यम से उपयोगकर्ता-कॉल करने योग्य है जिसका केंद्रीय (सबसे पुराना) भाग, पिछड़े संगतता के कारणों के लिए,<ref>The KERNAL jump table, used to access all the subroutines in the KERNAL, is an array of JMP (jump) instructions leading to the actual subroutines. This feature ensures compatibility with user-written software in the event that code within the KERNAL ROM needs to be relocated in a later revision.</ref> संपूर्ण 8-बिट श्रृंखला में काफी हद तक समान रहता है। कर्नल रोम 8-बिट सीपीयू के 64 केबी एड्रेस स्पेस ($इ000–$एफएफएफएफ) के अंतिम 8 [[किलोबाइट]] पर अधिकार कर लेता है। | ||
उपयोगकर्ता द्वारा लिखे गए दिनचर्या को इंगित करने के लिए जंप टेबल को संशोधित किया जा सकता है, उदाहरण के लिए एनिमेटेड ग्राफिक्स प्रदर्शित करने के लिए चित्रपट प्रकाशन दिनचर्या को फिर से लिखना या रैम में कैरेक्टर सेट को नकल करना। जंप टेबल का यह प्रयोग उस समय छोटे कंप्यूटरों के लिए नया था।<ref>{{cite web|url=https://archive.org/stream/byte-magazine-1983-01-rescan/1983_01_BYTE_08-01_Looking_Ahead#page/n239/mode/2up|title=Exploring the VIC-20|date=January 1983}}</ref> | उपयोगकर्ता द्वारा लिखे गए दिनचर्या को इंगित करने के लिए जंप टेबल को संशोधित किया जा सकता है, उदाहरण के लिए एनिमेटेड ग्राफिक्स प्रदर्शित करने के लिए चित्रपट प्रकाशन दिनचर्या को फिर से लिखना या रैम में कैरेक्टर सेट को नकल करना। जंप टेबल का यह प्रयोग उस समय छोटे कंप्यूटरों के लिए नया था।<ref>{{cite web|url=https://archive.org/stream/byte-magazine-1983-01-rescan/1983_01_BYTE_08-01_Looking_Ahead#page/n239/mode/2up|title=Exploring the VIC-20|date=January 1983}}</ref> | ||
कार्ट्रिज पर वीआईसी-20 के लिए प्रकाशित [[एडवेंचर इंटरनेशनल]] गेम्स सॉफ्टवेयर का एक उदाहरण है जो | कार्ट्रिज पर वीआईसी-20 के लिए प्रकाशित [[एडवेंचर इंटरनेशनल]] गेम्स सॉफ्टवेयर का एक उदाहरण है जो कर्नल का उपयोग करता है। क्योंकि वे केवल जंप टेबल का उपयोग करते हैं, गेम को डिस्क में [[मेमोरी डंप]] किया जा सकता है, एक कमोडोर 64 में लोड किया जा सकता है, और बिना किसी संशोधन के चलाया जा सकता है।<ref name="kevelson198601">{{cite news | url=https://archive.org/stream/Ahoy_Issue_25_1986-01_Ion_International_US#page/n31/mode/2up |title=Speech Synthesizers for the Commodore Computers / Part II | work=Ahoy! | date=January 1986 |author=Kevelson, Morton |pages=32 |url-status=live |accessdate=17 July 2014}}</ref> | ||
कर्नल को आरम्भ में [[जॉन फेगन्स]] द्वारा कमोडोर पीईटी के लिए लिखा गया था, जिन्होंने बेसिक दिनचर्या को प्रचालन तंत्र से अलग करने का विचार प्रस्तुत किया था। इसे कई लोगों द्वारा विकसित किया गया, विशेष रूप से [[रॉबर्ट रसेल (इंजीनियर)]], जिन्होंने वीआईसी-20 और C64 के लिए कई सुविधाएँ जोड़ीं। | |||
== उदाहरण == | == उदाहरण == | ||
कर्नल का उपयोग करने का एक सरल, फिर भी विशिष्ट उदाहरण निम्नलिखित [[MOS Technology 6502|एमओएस यांत्रिकी 6502]] [[ सभा की भाषा ]] सबदिनचर्या द्वारा दिया गया है<ref>Many of the KERNAL subroutines (e.g., OPEN and CLOSE) were vectored through page three in RAM, allowing a programmer to intercept the associated KERNAL calls and add to or replace the original functions.</ref> (सीसी65 असेंबलर प्रारूप/वाक्यविन्यास में लिखा गया है): | |||
सीएचआरआउट = $<code>एफएफडी</code>2; सीएचआरआउट कैरेक्टर आउटपुट दिनचर्या का पता है | सीएचआरआउट = $<code>एफएफडी</code>2; सीएचआरआउट कैरेक्टर आउटपुट दिनचर्या का पता है | ||
Line 31: | Line 31: | ||
�; | �; | ||
संदेश: | संदेश: | ||
.बाइट हैलो वर्ल्ड प्रोग्राम#एक्यूमुलेटर + इंडेक्स रजिस्टर मशीन: एमओएस टेक्नोलॉजी 6502, सीबीएम | .बाइट हैलो वर्ल्ड प्रोग्राम#एक्यूमुलेटर + इंडेक्स रजिस्टर मशीन: एमओएस टेक्नोलॉजी 6502, सीबीएम कर्नल, सीए65 असेंबलर|हैलो, वर्ल्ड! | ||
.बाइट सीआर, 0; कैरिज रिटर्न और स्ट्रिंग का शून्य अंकन अंत | .बाइट सीआर, 0; कैरिज रिटर्न और स्ट्रिंग का शून्य अंकन अंत | ||
Line 37: | Line 37: | ||
== नाम == | == नाम == | ||
कर्नल को कर्नेल के रूप में जाना जाता था<ref>The [[kernel (operating system)|kernel]] is the most fundamental part of a program, typically an operating system, that resides in memory at all times and provides the basic services. It is the part of the operating system that is closest to the machine and may activate the hardware directly or interface to another software layer that drives the hardware</ref> पीईटी दिनों से कमोडोर के अंदर, लेकिन 1980 में रॉबर्ट रसेल ने अपनी नोटबुक में इस शब्द को कर्नेल के रूप में गलत लिखा। जब कमोडोर यांत्रिकी लेखक नील हैरिस और एंडी फिंकेल ने रसेल के नोट्स एकत्र किए और उन्हें वीआईसी-20 प्रोग्रामर के मैनुअल के आधार के रूप में उपयोग किया, तो गलत वर्तनी उनके साथ चली गई और अटक गई।<ref>''On The Edge: The Spectacular Rise and Fall of Commodore'', page 202.</ref> | |||
प्रारंभिक कमोडोर मिथक के अनुसार, और दूसरों के बीच लेखक/प्रोग्रामर [[जिम बटरफील्ड]] द्वारा रिपोर्ट किया गया, | प्रारंभिक कमोडोर मिथक के अनुसार, और दूसरों के बीच लेखक/प्रोग्रामर [[जिम बटरफील्ड]] द्वारा रिपोर्ट किया गया, कर्नल शब्द 'कीबोर्ड एंट्री रीड, नेटवर्क, और लिंक' के लिए खड़ा एक संक्षिप्त (या, अधिक संभावना है, एक [[संक्षिप्त नाम]]) है, जो वास्तव में इसकी भूमिका को देखते हुए अच्छी समझ में आता है। [[बर्कले सॉफ्टवर्क्स]] ने बाद में 8-बिट होम कंप्यूटरों के लिए अपने जीयूआई ओएस के मुख्य दिनचर्या का नामकरण करते समय इसका उपयोग किया: [[GEOS (8-बिट ऑपरेटिंग सिस्टम)|जीईओएस (8-बिट प्रचालन तंत्र)]] कर्नल। | ||
== डिवाइस-स्वतंत्र आई/ओ == | == डिवाइस-स्वतंत्र आई/ओ == | ||
आश्चर्यजनक रूप से, | आश्चर्यजनक रूप से, कर्नल ने एक उपकरण-स्वतंत्र आई /ओ एपीआई को लागू किया जो पूरी तरह से बेल लैब्स के [[यूनिक्स]] या प्लान 9 से भिन्न नहीं है। जबकि कोई यथोचित तर्क दे सकता है कि इन बाद वाली प्रणालियों में सब कुछ एक फाइल है, अन्य आसानी से दावा कर सकते हैं कि सब कुछ पूर्व में एक [[जीपीआईबी]]-डिवाइस है। | ||
उस समय 6502 आर्किटेक्चर की सीमाओं के कारण, आई /ओ चैनल खोलने के लिए तीन सिस्टम कॉल की आवश्यकता होती है। पहला आमतौर पर तार्किक फ़ाइल नाम को इसके माध्यम से सेट करता है <code>एसईटीएनएएम</code> सिस्टम कॉल। दूसरी कॉल, <code>एसईटीएलएफएस</code>, संचार करने के लिए जीपीआईबी/आईईईई-488 उपकरण पता स्थापित करता है। आखिरकार <code>खुला</code> वास्तविक लेनदेन करने के लिए कहा जाता है। आवेदन तो उपयोग किया <code>चकिन</code> और <code>चाकआउट</code> सिस्टम क्रमशः एप्लिकेशन के वर्तमान इनपुट और आउटपुट चैनल सेट करने के लिए कॉल करता है। अनुप्रयोगों में समवर्ती खुली फ़ाइलों की संख्या हो सकती है (कुछ सिस्टम-निर्भर सीमा तक; उदाहरण के लिए, सी64 एक बार में दस फ़ाइलों को खोलने की अनुमति देता है)। उसके बाद, <code>सीएचआरआईएन</code> और <code>सीएचआरआउट</code> वास्तव में क्रमशः इनपुट और आउटपुट के संचालन के लिए उपयोगी साबित होते हैं। <code>बंद</code> फिर एक चैनल बंद कर देता है। | उस समय 6502 आर्किटेक्चर की सीमाओं के कारण, आई /ओ चैनल खोलने के लिए तीन सिस्टम कॉल की आवश्यकता होती है। पहला आमतौर पर तार्किक फ़ाइल नाम को इसके माध्यम से सेट करता है <code>एसईटीएनएएम</code> सिस्टम कॉल। दूसरी कॉल, <code>एसईटीएलएफएस</code>, संचार करने के लिए जीपीआईबी/आईईईई-488 उपकरण पता स्थापित करता है। आखिरकार <code>खुला</code> वास्तविक लेनदेन करने के लिए कहा जाता है। आवेदन तो उपयोग किया <code>चकिन</code> और <code>चाकआउट</code> सिस्टम क्रमशः एप्लिकेशन के वर्तमान इनपुट और आउटपुट चैनल सेट करने के लिए कॉल करता है। अनुप्रयोगों में समवर्ती खुली फ़ाइलों की संख्या हो सकती है (कुछ सिस्टम-निर्भर सीमा तक; उदाहरण के लिए, सी64 एक बार में दस फ़ाइलों को खोलने की अनुमति देता है)। उसके बाद, <code>सीएचआरआईएन</code> और <code>सीएचआरआउट</code> वास्तव में क्रमशः इनपुट और आउटपुट के संचालन के लिए उपयोगी साबित होते हैं। <code>बंद</code> फिर एक चैनल बंद कर देता है। | ||
निरीक्षण करें कि आई / ओ चैनल बनाने के लिए कोई सिस्टम कॉल मौजूद नहीं है, क्योंकि सामान्य परिस्थितियों में उपकरणों को गतिशील रूप से बनाया या नष्ट नहीं किया जा सकता है। इसी तरह, यूनिक्स में [[ioctl|आईओसीटीएल]]() जैसे आई / ओ नियंत्रण कार्यों को करने के लिए न तो खोज करने के लिए कोई साधन मौजूद है और न ही। वास्तव में, | निरीक्षण करें कि आई / ओ चैनल बनाने के लिए कोई सिस्टम कॉल मौजूद नहीं है, क्योंकि सामान्य परिस्थितियों में उपकरणों को गतिशील रूप से बनाया या नष्ट नहीं किया जा सकता है। इसी तरह, यूनिक्स में [[ioctl|आईओसीटीएल]]() जैसे आई / ओ नियंत्रण कार्यों को करने के लिए न तो खोज करने के लिए कोई साधन मौजूद है और न ही। वास्तव में, कर्नल यहाँ योजना-9 दर्शन के बहुत करीब साबित होता है, जहाँ एक एप्लिकेशन इस तरह के मेटा या आउट-ऑफ-बैंड लेनदेन करने के लिए संकेतित डिवाइस के लिए एक विशेष कमांड चैनल खोलेगा। उदाहरण के लिए, डिस्क से फ़ाइल को हटाने (स्क्रैच) करने के लिए, उपयोगकर्ता आमतौर पर नामक संसाधन को खोलेगा <code>स0:द-फाइल-टू-आरएमवी</code> डिवाइस 8 या 9 पर, चैनल 15। कमोडोर 8-बिट दुनिया में स्थापित सम्मेलन के अनुसार, चैनल 15 बाह्य उपकरणों के लिए कमांड चैनल का प्रतिनिधित्व करता है, असाधारण मामलों सहित कमांड और परिणाम दोनों को संप्रेषित करने के लिए संदेश-पासिंग तकनीकों पर निर्भर करता है। उदाहरण के लिए, कमोडोर बेसिक में, वे ऐसे सॉफ़्टवेयर पा सकते हैं जो निम्नलिखित के विपरीत नहीं हैं: | ||
<syntaxhighlight lang="cbmbas"> | <syntaxhighlight lang="cbmbas"> | ||
70 ... | 70 ... | ||
Line 62: | Line 62: | ||
220 ... | 220 ... | ||
</syntaxhighlight> | </syntaxhighlight> | ||
डिवाइस नंबर, प्रति स्थापित प्रलेखन, सीमा [0,16] तक सीमित हैं। हालाँकि, यह सीमा आईईईई-488 प्रोटोकॉल के विशिष्ट अनुकूलन से आई है और वास्तव में, केवल बाहरी बाह्य उपकरणों पर लागू होती है। सभी प्रासंगिक | डिवाइस नंबर, प्रति स्थापित प्रलेखन, सीमा [0,16] तक सीमित हैं। हालाँकि, यह सीमा आईईईई-488 प्रोटोकॉल के विशिष्ट अनुकूलन से आई है और वास्तव में, केवल बाहरी बाह्य उपकरणों पर लागू होती है। सभी प्रासंगिक कर्नल सिस्टम कॉल्स के साथ, प्रोग्रामर [32,256] की सीमा में किसी भी पते के साथ वर्चुअल डिवाइस को लागू करने के लिए सिस्टम कॉल को इंटरसेप्ट कर सकते हैं। संकल्पनात्मक रूप से, कोई डिवाइस ड्राइवर बाइनरी को मेमोरी में लोड कर सकता है, कर्नल आई /ओ वैक्टर को पैच कर सकता है, और उस क्षण से आगे, एक नया (वर्चुअल) डिवाइस संबोधित किया जा सकता है। अब तक, इस क्षमता को सार्वजनिक रूप से कभी भी उपयोग के रूप में नहीं जाना जाता है, संभवतः दो कारणों से: (1) कर्नल गतिशील रूप से डिवाइस आईडी आवंटित करने के लिए कोई साधन प्रदान नहीं करता है, और (2) कर्नल एक स्थानापन्न बाइनरी छवि लोड करने के लिए कोई साधन प्रदान नहीं करता है। इस प्रकार, आई /ओ स्पेस और मेमोरी स्पेस दोनों में टकराव का बोझ उपयोगकर्ता पर पड़ता है, जबकि मशीनों की एक विस्तृत श्रृंखला में प्लेटफ़ॉर्म संगतता सॉफ़्टवेयर लेखक पर पड़ती है। बहरहाल, यदि वांछित हो तो इन कार्यों के लिए समर्थन सॉफ्टवेयर आसानी से लागू किया जा सकता है। | ||
तार्किक फ़ाइल नाम प्रारूप संबोधित विशिष्ट डिवाइस पर निर्भर करता है। निस्संदेह, सबसे अधिक उपयोग किया जाने वाला उपकरण फ्लॉपी डिस्क सिस्टम है, जो एक समान प्रारूप का उपयोग करता है <code>एमडी: नाम, एटीटीआरएस</code>, जहाँ एम एक प्रकार का ध्वज है ($ निर्देशिका सूची के लिए, @ फ़ाइल को अधिलेखित करने की इच्छा को इंगित करने के लिए यदि यह पहले से मौजूद है, अन्यथा अप्रयुक्त है।), डी (वैकल्पिक) भौतिक डिस्क इकाई संख्या (0: या 1: के लिए) है। डुअल-ड्राइव सिस्टम, सिर्फ 0: 1541 जैसी सिंगल-डिस्क इकाइयों के लिए, एट अल।, जो 0 पर डिफॉल्ट करता है: यदि अनिर्दिष्ट छोड़ दिया जाता है), <code>NAME</code> लंबाई में 16 वर्णों तक का एक संसाधन नाम है (कुछ विशेष वर्णों को छोड़कर अधिकांश वर्णों की अनुमति है), और <code>एटीटीआरएस</code> विशेषताओं या झंडों की एक वैकल्पिक अल्पविराम से अलग की गई सूची है। उदाहरण के लिए, यदि उपयोगकर्ता एक प्रोग्राम फ़ाइल को अधिलेखित करना चाहता है जिसे कहा जाता है <code>पीआरजीएफआईएलई</code>, वे एक फ़ाइल नाम जैसे देख सकते हैं <code>@0: पीआरजीएफआईएलई, पी</code> डिवाइस 8 या 9 के संयोजन के साथ प्रयोग किया जाता है। इस बीच, आर एस-232 ड्राइवर (डिवाइस 2) के लिए एक फ़ाइल नाम में केवल चार वर्ण होते हैं, जो बाइनरी प्रारूप में एन्कोडेड होते हैं।<ref>''Commodore 128 Programmers Reference Guide'', Commodore Business Machines, Inc., 1986, p. 382</ref> | तार्किक फ़ाइल नाम प्रारूप संबोधित विशिष्ट डिवाइस पर निर्भर करता है। निस्संदेह, सबसे अधिक उपयोग किया जाने वाला उपकरण फ्लॉपी डिस्क सिस्टम है, जो एक समान प्रारूप का उपयोग करता है <code>एमडी: नाम, एटीटीआरएस</code>, जहाँ एम एक प्रकार का ध्वज है ($ निर्देशिका सूची के लिए, @ फ़ाइल को अधिलेखित करने की इच्छा को इंगित करने के लिए यदि यह पहले से मौजूद है, अन्यथा अप्रयुक्त है।), डी (वैकल्पिक) भौतिक डिस्क इकाई संख्या (0: या 1: के लिए) है। डुअल-ड्राइव सिस्टम, सिर्फ 0: 1541 जैसी सिंगल-डिस्क इकाइयों के लिए, एट अल।, जो 0 पर डिफॉल्ट करता है: यदि अनिर्दिष्ट छोड़ दिया जाता है), <code>NAME</code> लंबाई में 16 वर्णों तक का एक संसाधन नाम है (कुछ विशेष वर्णों को छोड़कर अधिकांश वर्णों की अनुमति है), और <code>एटीटीआरएस</code> विशेषताओं या झंडों की एक वैकल्पिक अल्पविराम से अलग की गई सूची है। उदाहरण के लिए, यदि उपयोगकर्ता एक प्रोग्राम फ़ाइल को अधिलेखित करना चाहता है जिसे कहा जाता है <code>पीआरजीएफआईएलई</code>, वे एक फ़ाइल नाम जैसे देख सकते हैं <code>@0: पीआरजीएफआईएलई, पी</code> डिवाइस 8 या 9 के संयोजन के साथ प्रयोग किया जाता है। इस बीच, आर एस-232 ड्राइवर (डिवाइस 2) के लिए एक फ़ाइल नाम में केवल चार वर्ण होते हैं, जो बाइनरी प्रारूप में एन्कोडेड होते हैं।<ref>''Commodore 128 Programmers Reference Guide'', Commodore Business Machines, Inc., 1986, p. 382</ref> | ||
Line 73: | Line 73: | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
*[https://www.pagetable.com/?p=926 Commodore | *[https://www.pagetable.com/?p=926 Commodore कर्नल History] | ||
*[https://github.com/davervw/c64-io_monitor Commodore 64 | *[https://github.com/davervw/c64-io_monitor Commodore 64 कर्नल आई / ओ Monitor Utility] | ||
{{Operating system}} | {{Operating system}} |
Revision as of 16:48, 15 September 2023
कर्नल[1] अपने 8 बिट गृह कम्प्यूटर ों में केवल पढ़ने के लिये मेमोरी -रेजिडेंट प्रचालन तंत्र कोर के लिए कमोडोर इंटरनेशनल का नाम है; 1977 के मूल कमोडोर पीईटी से, उसके बाद उसके उत्तराधिकारियों में उपयोग किए गए विस्तारित लेकिन संबंधित संस्करण: वीआईसी-20, कमोडोर 64, कमोडोर प्लस/4|प्लस/4, कमोडोर 16, और कमोडोर 128।
विवरण
कमोडोर 8-बिट मशीन 'कर्नल में आईबीएम पीसी कॉम्पैटिबल्स (कमोडोर बेसिक दिनचर्या के विपरीत, रोम में भी स्थित) में बीआईओएस के बराबर निम्न-स्तर, क्लोज-टू-द-हार्डवेयर ओएस दिनचर्या सम्मिलित हैं। उच्च-स्तर, डिवाइस-स्वतंत्र आई /ओ कार्यक्षमता, और रैम में शाखा तालिका के माध्यम से उपयोगकर्ता-कॉल करने योग्य है जिसका केंद्रीय (सबसे पुराना) भाग, पिछड़े संगतता के कारणों के लिए,[2] संपूर्ण 8-बिट श्रृंखला में काफी हद तक समान रहता है। कर्नल रोम 8-बिट सीपीयू के 64 केबी एड्रेस स्पेस ($इ000–$एफएफएफएफ) के अंतिम 8 किलोबाइट पर अधिकार कर लेता है।
उपयोगकर्ता द्वारा लिखे गए दिनचर्या को इंगित करने के लिए जंप टेबल को संशोधित किया जा सकता है, उदाहरण के लिए एनिमेटेड ग्राफिक्स प्रदर्शित करने के लिए चित्रपट प्रकाशन दिनचर्या को फिर से लिखना या रैम में कैरेक्टर सेट को नकल करना। जंप टेबल का यह प्रयोग उस समय छोटे कंप्यूटरों के लिए नया था।[3]
कार्ट्रिज पर वीआईसी-20 के लिए प्रकाशित एडवेंचर इंटरनेशनल गेम्स सॉफ्टवेयर का एक उदाहरण है जो कर्नल का उपयोग करता है। क्योंकि वे केवल जंप टेबल का उपयोग करते हैं, गेम को डिस्क में मेमोरी डंप किया जा सकता है, एक कमोडोर 64 में लोड किया जा सकता है, और बिना किसी संशोधन के चलाया जा सकता है।[4]
कर्नल को आरम्भ में जॉन फेगन्स द्वारा कमोडोर पीईटी के लिए लिखा गया था, जिन्होंने बेसिक दिनचर्या को प्रचालन तंत्र से अलग करने का विचार प्रस्तुत किया था। इसे कई लोगों द्वारा विकसित किया गया, विशेष रूप से रॉबर्ट रसेल (इंजीनियर), जिन्होंने वीआईसी-20 और C64 के लिए कई सुविधाएँ जोड़ीं।
उदाहरण
कर्नल का उपयोग करने का एक सरल, फिर भी विशिष्ट उदाहरण निम्नलिखित एमओएस यांत्रिकी 6502 सभा की भाषा सबदिनचर्या द्वारा दिया गया है[5] (सीसी65 असेंबलर प्रारूप/वाक्यविन्यास में लिखा गया है):
सीएचआरआउट = $एफएफडी
2; सीएचआरआउट कैरेक्टर आउटपुट दिनचर्या का पता है सीआर = $0डी
; कैरिज रिटर्न के लिए पीईटीएससीआईआई कोड ; नमस्ते: एलडीएक्स #0; एक्स इंडेक्स रजिस्टर में 0 लोड करके कैरेक्टर 0 से आरम्भ करें अगला: एलडीए संदेश, एक्स; संचायक में पता संदेश + x से बाइट लोड करें किया गया; यदि संचायक शून्य रखता है, तो हम कर चुके हैं और लूप से बाहर निकलना चाहते हैं जेएसआर क्रोट; आउटपुट चार को वर्तमान आउटपुट डिवाइस पर कॉल करें (डिफ़ॉल्ट चित्रपट पर) आईएनएक्स; अगले वर्ण पर जाने के लिए x बढ़ाएँ अगला बनो; लूप बैक जबकि अंतिम वर्ण शून्य नहीं है (अधिकतम स्ट्रिंग लंबाई 255 बाइट्स) पूर्ण: आरटीएस; सबदिनचर्या से लौटें �; संदेश: .बाइट हैलो वर्ल्ड प्रोग्राम#एक्यूमुलेटर + इंडेक्स रजिस्टर मशीन: एमओएस टेक्नोलॉजी 6502, सीबीएम कर्नल, सीए65 असेंबलर|हैलो, वर्ल्ड! .बाइट सीआर, 0; कैरिज रिटर्न और स्ट्रिंग का शून्य अंकन अंत
यह कोड स्टब नियोजित करता है सीएचआरआउट
दिनचर्या, जिसका पता पते पर मिलता है $एफएफडी2
(65490), डिफ़ॉल्ट आउटपुट डिवाइस (जैसे, प्रकाशन चित्रपट) पर टेक्स्ट स्ट्रिंग भेजने के लिए।
नाम
कर्नल को कर्नेल के रूप में जाना जाता था[6] पीईटी दिनों से कमोडोर के अंदर, लेकिन 1980 में रॉबर्ट रसेल ने अपनी नोटबुक में इस शब्द को कर्नेल के रूप में गलत लिखा। जब कमोडोर यांत्रिकी लेखक नील हैरिस और एंडी फिंकेल ने रसेल के नोट्स एकत्र किए और उन्हें वीआईसी-20 प्रोग्रामर के मैनुअल के आधार के रूप में उपयोग किया, तो गलत वर्तनी उनके साथ चली गई और अटक गई।[7] प्रारंभिक कमोडोर मिथक के अनुसार, और दूसरों के बीच लेखक/प्रोग्रामर जिम बटरफील्ड द्वारा रिपोर्ट किया गया, कर्नल शब्द 'कीबोर्ड एंट्री रीड, नेटवर्क, और लिंक' के लिए खड़ा एक संक्षिप्त (या, अधिक संभावना है, एक संक्षिप्त नाम) है, जो वास्तव में इसकी भूमिका को देखते हुए अच्छी समझ में आता है। बर्कले सॉफ्टवर्क्स ने बाद में 8-बिट होम कंप्यूटरों के लिए अपने जीयूआई ओएस के मुख्य दिनचर्या का नामकरण करते समय इसका उपयोग किया: जीईओएस (8-बिट प्रचालन तंत्र) कर्नल।
डिवाइस-स्वतंत्र आई/ओ
आश्चर्यजनक रूप से, कर्नल ने एक उपकरण-स्वतंत्र आई /ओ एपीआई को लागू किया जो पूरी तरह से बेल लैब्स के यूनिक्स या प्लान 9 से भिन्न नहीं है। जबकि कोई यथोचित तर्क दे सकता है कि इन बाद वाली प्रणालियों में सब कुछ एक फाइल है, अन्य आसानी से दावा कर सकते हैं कि सब कुछ पूर्व में एक जीपीआईबी-डिवाइस है।
उस समय 6502 आर्किटेक्चर की सीमाओं के कारण, आई /ओ चैनल खोलने के लिए तीन सिस्टम कॉल की आवश्यकता होती है। पहला आमतौर पर तार्किक फ़ाइल नाम को इसके माध्यम से सेट करता है एसईटीएनएएम
सिस्टम कॉल। दूसरी कॉल, एसईटीएलएफएस
, संचार करने के लिए जीपीआईबी/आईईईई-488 उपकरण पता स्थापित करता है। आखिरकार खुला
वास्तविक लेनदेन करने के लिए कहा जाता है। आवेदन तो उपयोग किया चकिन
और चाकआउट
सिस्टम क्रमशः एप्लिकेशन के वर्तमान इनपुट और आउटपुट चैनल सेट करने के लिए कॉल करता है। अनुप्रयोगों में समवर्ती खुली फ़ाइलों की संख्या हो सकती है (कुछ सिस्टम-निर्भर सीमा तक; उदाहरण के लिए, सी64 एक बार में दस फ़ाइलों को खोलने की अनुमति देता है)। उसके बाद, सीएचआरआईएन
और सीएचआरआउट
वास्तव में क्रमशः इनपुट और आउटपुट के संचालन के लिए उपयोगी साबित होते हैं। बंद
फिर एक चैनल बंद कर देता है।
निरीक्षण करें कि आई / ओ चैनल बनाने के लिए कोई सिस्टम कॉल मौजूद नहीं है, क्योंकि सामान्य परिस्थितियों में उपकरणों को गतिशील रूप से बनाया या नष्ट नहीं किया जा सकता है। इसी तरह, यूनिक्स में आईओसीटीएल() जैसे आई / ओ नियंत्रण कार्यों को करने के लिए न तो खोज करने के लिए कोई साधन मौजूद है और न ही। वास्तव में, कर्नल यहाँ योजना-9 दर्शन के बहुत करीब साबित होता है, जहाँ एक एप्लिकेशन इस तरह के मेटा या आउट-ऑफ-बैंड लेनदेन करने के लिए संकेतित डिवाइस के लिए एक विशेष कमांड चैनल खोलेगा। उदाहरण के लिए, डिस्क से फ़ाइल को हटाने (स्क्रैच) करने के लिए, उपयोगकर्ता आमतौर पर नामक संसाधन को खोलेगा स0:द-फाइल-टू-आरएमवी
डिवाइस 8 या 9 पर, चैनल 15। कमोडोर 8-बिट दुनिया में स्थापित सम्मेलन के अनुसार, चैनल 15 बाह्य उपकरणों के लिए कमांड चैनल का प्रतिनिधित्व करता है, असाधारण मामलों सहित कमांड और परिणाम दोनों को संप्रेषित करने के लिए संदेश-पासिंग तकनीकों पर निर्भर करता है। उदाहरण के लिए, कमोडोर बेसिक में, वे ऐसे सॉफ़्टवेयर पा सकते हैं जो निम्नलिखित के विपरीत नहीं हैं:
70 ...
80 REM ROTATE LOGS CURRENTLY OPENED ON LOGICAL CHANNEL #1.
90 CLOSE 1
100 OPEN 15,8,15,"R0:ERROR.1=0:ERROR.0":REM RENAME FILE ERROR.0 TO ERROR.1
110 INPUT# 15,A,B$,C,D:REM READ ERROR CHANNEL
120 CLOSE 15
130 IF A=0 THEN GOTO 200
140 PRINT "ERROR RENAMING LOG FILE:"
150 PRINT " CODE: "+A
160 PRINT " MSG : "+B$
170 END
200 REM CONTINUE PROCESSING HERE, CREATING NEW LOG FILE AS WE GO...
210 OPEN 1,8,1,"0:ERROR.0,S,W"
220 ...
डिवाइस नंबर, प्रति स्थापित प्रलेखन, सीमा [0,16] तक सीमित हैं। हालाँकि, यह सीमा आईईईई-488 प्रोटोकॉल के विशिष्ट अनुकूलन से आई है और वास्तव में, केवल बाहरी बाह्य उपकरणों पर लागू होती है। सभी प्रासंगिक कर्नल सिस्टम कॉल्स के साथ, प्रोग्रामर [32,256] की सीमा में किसी भी पते के साथ वर्चुअल डिवाइस को लागू करने के लिए सिस्टम कॉल को इंटरसेप्ट कर सकते हैं। संकल्पनात्मक रूप से, कोई डिवाइस ड्राइवर बाइनरी को मेमोरी में लोड कर सकता है, कर्नल आई /ओ वैक्टर को पैच कर सकता है, और उस क्षण से आगे, एक नया (वर्चुअल) डिवाइस संबोधित किया जा सकता है। अब तक, इस क्षमता को सार्वजनिक रूप से कभी भी उपयोग के रूप में नहीं जाना जाता है, संभवतः दो कारणों से: (1) कर्नल गतिशील रूप से डिवाइस आईडी आवंटित करने के लिए कोई साधन प्रदान नहीं करता है, और (2) कर्नल एक स्थानापन्न बाइनरी छवि लोड करने के लिए कोई साधन प्रदान नहीं करता है। इस प्रकार, आई /ओ स्पेस और मेमोरी स्पेस दोनों में टकराव का बोझ उपयोगकर्ता पर पड़ता है, जबकि मशीनों की एक विस्तृत श्रृंखला में प्लेटफ़ॉर्म संगतता सॉफ़्टवेयर लेखक पर पड़ती है। बहरहाल, यदि वांछित हो तो इन कार्यों के लिए समर्थन सॉफ्टवेयर आसानी से लागू किया जा सकता है।
तार्किक फ़ाइल नाम प्रारूप संबोधित विशिष्ट डिवाइस पर निर्भर करता है। निस्संदेह, सबसे अधिक उपयोग किया जाने वाला उपकरण फ्लॉपी डिस्क सिस्टम है, जो एक समान प्रारूप का उपयोग करता है एमडी: नाम, एटीटीआरएस
, जहाँ एम एक प्रकार का ध्वज है ($ निर्देशिका सूची के लिए, @ फ़ाइल को अधिलेखित करने की इच्छा को इंगित करने के लिए यदि यह पहले से मौजूद है, अन्यथा अप्रयुक्त है।), डी (वैकल्पिक) भौतिक डिस्क इकाई संख्या (0: या 1: के लिए) है। डुअल-ड्राइव सिस्टम, सिर्फ 0: 1541 जैसी सिंगल-डिस्क इकाइयों के लिए, एट अल।, जो 0 पर डिफॉल्ट करता है: यदि अनिर्दिष्ट छोड़ दिया जाता है), NAME
लंबाई में 16 वर्णों तक का एक संसाधन नाम है (कुछ विशेष वर्णों को छोड़कर अधिकांश वर्णों की अनुमति है), और एटीटीआरएस
विशेषताओं या झंडों की एक वैकल्पिक अल्पविराम से अलग की गई सूची है। उदाहरण के लिए, यदि उपयोगकर्ता एक प्रोग्राम फ़ाइल को अधिलेखित करना चाहता है जिसे कहा जाता है पीआरजीएफआईएलई
, वे एक फ़ाइल नाम जैसे देख सकते हैं @0: पीआरजीएफआईएलई, पी
डिवाइस 8 या 9 के संयोजन के साथ प्रयोग किया जाता है। इस बीच, आर एस-232 ड्राइवर (डिवाइस 2) के लिए एक फ़ाइल नाम में केवल चार वर्ण होते हैं, जो बाइनरी प्रारूप में एन्कोडेड होते हैं।[8]
अन्य डिवाइस, जैसे कि कीबोर्ड (डिवाइस 0), कैसेट (डिवाइस 1), प्रकाशन इंटरफ़ेस (डिवाइस 3), और प्रिंटर (डिवाइस 4 और 5), को कार्य करने के लिए किसी फ़ाइल नाम की आवश्यकता नहीं होती है, या तो उचित डिफ़ॉल्ट मानते हैं या बस उनकी आवश्यकता नहीं होती है बिलकुल।
टिप्पणियाँ
- ↑ Commodore 64 Programmer's Reference Guide. Commodore Business Machines, Inc., 1982, p. 268
- ↑ The KERNAL jump table, used to access all the subroutines in the KERNAL, is an array of JMP (jump) instructions leading to the actual subroutines. This feature ensures compatibility with user-written software in the event that code within the KERNAL ROM needs to be relocated in a later revision.
- ↑ "Exploring the VIC-20". January 1983.
- ↑ Kevelson, Morton (January 1986). "Speech Synthesizers for the Commodore Computers / Part II". Ahoy!. p. 32. Retrieved 17 July 2014.
{{cite news}}
: CS1 maint: url-status (link) - ↑ Many of the KERNAL subroutines (e.g., OPEN and CLOSE) were vectored through page three in RAM, allowing a programmer to intercept the associated KERNAL calls and add to or replace the original functions.
- ↑ The kernel is the most fundamental part of a program, typically an operating system, that resides in memory at all times and provides the basic services. It is the part of the operating system that is closest to the machine and may activate the hardware directly or interface to another software layer that drives the hardware
- ↑ On The Edge: The Spectacular Rise and Fall of Commodore, page 202.
- ↑ Commodore 128 Programmers Reference Guide, Commodore Business Machines, Inc., 1986, p. 382