कर्नल
कर्नल[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 असेंबलर प्रारूप/वाक्यविन्यास में लिखा गया है):
CHROUT = $ffd2 ; CHROUT is the address of the character output routine
CR = $0d ; PETSCII code for Carriage Return ; hello: ldx #0 ; start with character 0 by loading 0 into the x index register next: lda message,x ; load byte from address message+x into the accumulator beq done ; if the accumulator holds zero, we're done and want to branch out of the loop jsr CHROUT ; call CHROUT to output char to current output device (defaults to screen) inx ; increment x to move to the next character bne next ; loop back while the last character is not zero (max string length 255 bytes) done: rts ; return from subroutine ; message: .byte "Hello, world!" .byte CR, 0 ; Carriage Return and zero marking end of string
यह कोड स्टब नियोजित करता है CHROUT
दिनचर्या, जिसका पता पते पर मिलता है $एफएफडी2
(65490), डिफ़ॉल्ट आउटपुट डिवाइस (जैसे, प्रकाशन चित्रपट) पर टेक्स्ट स्ट्रिंग भेजने के लिए।
नाम
कर्नल को कर्नेल के रूप में जाना जाता था[6] पीईटी दिनों से कमोडोर के अंदर, लेकिन 1980 में रॉबर्ट रसेल ने अपनी नोटबुक में इस शब्द को कर्नेल के रूप में गलत लिखा। जब कमोडोर यांत्रिकी लेखक नील हैरिस और एंडी फिंकेल ने रसेल के नोट्स एकत्र किए और उन्हें वीआईसी-20 प्रोग्रामर के मैनुअल के आधार के रूप में उपयोग किया, तो गलत वर्तनी उनके साथ चली गई और अटक गई।[7] प्रारंभिक कमोडोर मिथक के अनुसार, और दूसरों के बीच लेखक/प्रोग्रामर जिम बटरफील्ड द्वारा रिपोर्ट किया गया, कर्नल शब्द 'कीबोर्ड एंट्री रीड, नेटवर्क, और लिंक' के लिए खड़ा एक संक्षिप्त (या, अधिक संभावना है, एक संक्षिप्त नाम) है, जो वास्तव में इसकी भूमिका को देखते हुए अच्छी समझ में आता है। बर्कले सॉफ्टवर्क्स ने बाद में 8-बिट होम कंप्यूटरों के लिए अपने जीयूआई ओएस के मुख्य दिनचर्या का नामकरण करते समय इसका उपयोग किया: जीईओएस (8-बिट प्रचालन तंत्र) कर्नल।
डिवाइस-स्वतंत्र आई/ओ
आश्चर्यजनक रूप से, कर्नल ने एक उपकरण-स्वतंत्र आई /ओ एपीआई को लागू किया जो पूरी तरह से बेल लैब्स के यूनिक्स या प्लान 9 से भिन्न नहीं है। जबकि कोई यथोचित तर्क दे सकता है कि इन बाद वाली प्रणालियों में सब कुछ एक फाइल है, अन्य आसानी से दावा कर सकते हैं कि सब कुछ पूर्व में एक जीपीआईबी-डिवाइस है।
उस समय 6502 आर्किटेक्चर की सीमाओं के कारण, आई /ओ चैनल खोलने के लिए तीन सिस्टम कॉल की आवश्यकता होती है। पहला आमतौर पर तार्किक फ़ाइल नाम को इसके माध्यम से सेट करता है एसईटीएनएएम
सिस्टम कॉल। दूसरी कॉल, एसईटीएलएफएस
, संचार करने के लिए जीपीआईबी/आईईईई-488 उपकरण पता स्थापित करता है। आखिरकार खुला
वास्तविक लेनदेन करने के लिए कहा जाता है। आवेदन तो उपयोग किया चकिन
और चाकआउट
सिस्टम क्रमशः एप्लिकेशन के वर्तमान इनपुट और आउटपुट चैनल सेट करने के लिए कॉल करता है। अनुप्रयोगों में समवर्ती खुली फ़ाइलों की संख्या हो सकती है (कुछ सिस्टम-निर्भर सीमा तक; उदाहरण के लिए, सी64 एक बार में दस फ़ाइलों को खोलने की अनुमति देता है)। उसके बाद, सीएचआरआईएन
और CHROUT
वास्तव में क्रमशः इनपुट और आउटपुट के संचालन के लिए उपयोगी साबित होते हैं। बंद
फिर एक चैनल बंद कर देता है।
निरीक्षण करें कि आई / ओ चैनल बनाने के लिए कोई सिस्टम कॉल मौजूद नहीं है, क्योंकि सामान्य परिस्थितियों में उपकरणों को गतिशील रूप से बनाया या नष्ट नहीं किया जा सकता है। इसी तरह, यूनिक्स में आईओसीटीएल() जैसे आई / ओ नियंत्रण कार्यों को करने के लिए न तो खोज करने के लिए कोई साधन मौजूद है और न ही। वास्तव में, कर्नल यहाँ योजना-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