2012-04-29 56 views
14

मैं कम स्तर की चीजों के चारों ओर पोक करने के लिए बस एक छोटा कर्नेल लिख रहा हूं। अभी, यह वर्चुअल बॉक्स में बूट हो जाता है और मैं स्क्रीन पर टेक्स्ट प्रदर्शित कर सकता हूं, कुछ मेमोरी आवंटित कर सकता हूं, और अन्य वास्तव में बुनियादी चीजें। यह सी ++ और थोड़ा एएसएम में लिखा गया है।(लेखन कर्नेल) मैं इंटरप्ट डिस्क्रिप्टर तालिका को कैसे संशोधित करूं?

उन चीजों में से एक जो मैं खोजना चाहता था वह बहु-कार्यकलाप के पीछे तंत्र था। मैं यह समझ के रूप में, यह कुछ इस तरह चला जाता है:

  1. गिरी इंटरप्ट डिस्क्रिप्टर तालिका ताकि व्यवधान समय-समय पर जारी किया जाता है (उदाहरण के लिए एक millisecond) initializes और एक नियमित कर्नेल में परिभाषित कहता है।
  2. जब दिनचर्या कहा जाता है, तो यह कोड/डेटा सेगमेंट और स्टैक पॉइंटर को किसी अन्य प्रोग्राम के संदर्भ, "संदर्भ-स्विच" पर सेट करने का निर्णय ले सकता है।

तो, यह अवधारणा में सरल लग रहा था, लेकिन मुझे पता था कि विवरण बहुत बालों वाले होने जा रहे थे। मुझे लाइन पर कुछ चीजें मिली हैं, लेकिन शब्दावली बहुत भिन्न होती है, और उदाहरण उन संदर्भों से होते हैं जो मेरे पास नहीं हैं (जैसे कि लिनक्स कर्नेल के भीतर से)।

हालांकि, वर्णनकर्ता टेबल सेट करने के लिए जिस तरह से इस तरह प्रतीत हो रहा है:

  1. पीआईसी (outb और क्या-नहीं) यह प्रारंभ करने के लिए कुछ डेटा भेजें।
  2. मेमोरी में एक इंटरप्ट टेबल तैयार करें, जिसमें आप चाहते हैं कि दिनचर्या के फ़ंक्शन पॉइंटर्स के साथ, सावधान रहें कि फ़ंक्शन सिग्नल हैंडलर होने में सक्षम हैं।
  3. lidt के साथ तालिका लोड करें।

हालांकि, मुझे इन चीजों को विशेष रूप से करने पर बहुत कुछ नहीं मिल रहा है, या यह भी सही है या नहीं। क्या किसी के पास परेशान कर्नेल लेखक के लिए संसाधन हैं?

+0

दिलचस्प सवाल, यहां एक अच्छा समुदाय है: http://www.osdever.net/ यह नहीं कि यह आपके प्रश्न का सीधे उत्तर देता है, लेकिन वहां कुछ उपयोगी जानकारी है। –

+0

फिर भी बेहतर समुदाय (फोरम और विकी के साथ-साथ संबंधित आईआरसी चैनल - #osdev @ irc.freenode.net) के साथ osdev.org पर पाया जा सकता है। – Griwes

उत्तर

6

जब आपका पीसी बूट होता है, तो BIOS प्रोग्राम को इस तरह से प्रोग्राम करता है कि आईआरक्यू 15 आईआरक्यू 15 के माध्यम से int 0Fh int और int 70h int inth के माध्यम से int 8h तक बंधे हैं। यह असली पता मोड के लिए ठीक है, जिसमें BIOS संचालित होता है और एमएसडीओएस काम करता है।

लेकिन संरक्षित मोड में स्विच करते समय आपको इस मैपिंग को बदलने की आवश्यकता है क्योंकि int 0Fh (सबसे विशेष रूप से, #GP, #SS, #PF) के माध्यम से int 8 पर कुछ महत्वपूर्ण अपवाद हैं। आप इसे इसलिए चाहते हैं क्योंकि आप टाइमर और रीयल-टाइम घड़ी, कीबोर्ड और माउस, डिस्क और आई/ओ बंदरगाहों (सीरियल और समांतर) से आने वाले इन अपवादों और हार्डवेयर इंटरप्ट्स के बीच आसानी से अंतर करने में सक्षम होना चाहते हैं।

यह शायद पहला कदम है जिसे आपने रेखांकित किया है। तो, ऑनलाइन "पीआईसी इंटरप्ट रीमेपिंग" या उस तरह का कुछ देखें। साथ ही, 825 9 चिप (पीआईसी) के लिए कुछ चश्मा डाउनलोड करें ताकि आप क्या कर रहे हैं और यह वास्तव में कैसे काम करता है इसका बेहतर विचार हो। "हेल्पपीसी" एक अच्छा पुराना संदर्भ है जिसमें विभिन्न पीसी हार्डवेयर पर कुछ जानकारी शामिल है।

"पीसीजीपीई" (पीसी गेम प्रोग्रामिंग एनसाइक्लोपीडिया) और "आरबीआईएल" (राल्फ ब्राउन की इंटरप्ट सूची) भी हैं जो बहुत मदद कर सकते हैं।

आईवीटी/आईडीटी सेटअप इंटेल और एएमडी सीपीयू दस्तावेज़ में वर्णित है। यह सब वहाँ है। सबसे सुखद पढ़ा नहीं है, लेकिन सबसे विस्तृत और आधिकारिक।

घर-ब्रू ओएस शौकियों की कई वेबसाइटें हैं और जैसे, आप कोड के अधिक विवरण और स्निपेट पा सकते हैं।

+0

मैंने कुछ रीमेपिंग कोड पहले चारों ओर तैरते हुए देखा था। इसलिए, मैं संरक्षित और वास्तविक मोड पर एक विवरण को गलत समझा सकता हूं, लेकिन जैसा कि मैं इसे समझता हूं, कर्नेल वास्तविक मोड में चलता है, लेकिन उपयोगकर्ता प्रोग्राम चलाते समय संरक्षित मोड में स्विच कर सकता है। हालांकि, क्या यह एक संदर्भ स्विच पर वास्तविक मोड में स्विच नहीं करता है? यह बाधा से किया जाता है, है ना? संरक्षित कार्यक्रम कभी चलने से पहले एक बार इंटरप्ट को रीमेप करने की आवश्यकता होती है? – rovaughn

+0

आम तौर पर, यदि कोई स्विच है, तो यह वास्तविक से सुरक्षित है और यह केवल एक बार किया जाता है, बहुत जल्दी, जब कर्नेल शुरू होता है। –

6

इस प्रश्न का उत्तर यहां फिट करने के लिए बहुत बड़ा है।

  • JamesM's kernel development tutorial एक बहुत ही बुनियादी गिरी है कि इस को शामिल किया गया के विकास के बारे में बताएंगे: मैं दो संसाधनों है कि आप आवश्यक जानकारी दे देंगे का सुझाव देंगे। आप अध्याय 4 और 5 पर विशेष ध्यान देना चाहेंगे। यह पूर्ण कोड के साथ आता है।
  • OSDev.org संदर्भ सामग्री। आपको आवश्यक सभी तकनीकी जानकारी शामिल है। ट्यूटोरियल से अधिक विस्तृत और सटीक।

यदि आप वास्तव में इस सामग्री को समझना चाहते हैं तो मेरा सुझाव है कि आप ओएसडीव में लेखों को स्वयं सब कुछ लिखने का प्रयास करने के लिए पढ़ लें। बूटिंग, स्क्रीन आउटपुट, तस्वीर, और आईआरक हैंडलिंग के साथ शुरू करें। यदि आप फंस गए हैं तो ट्यूटोरियल का प्रयोग करें।

+0

जेम्स मोलॉय का ट्यूटोरियल वास्तव में अच्छा है, लेकिन इसे नए आने वालों के लिए अनुशंसित नहीं किया जाना चाहिए, क्योंकि यह बहुत अधिक स्पष्टीकरण के बिना कॉपी-पेस्ट होने के लिए बहुत अधिक कोड प्रदान करता है - शायद यह बदल जाएगा जब जेम्सएम श्रृंखला के नए संस्करण को रिलीज़ करेगा। नवागंतुकों के लिए, www.brokenthorn.com पर ट्यूटोरियल बहुत बेहतर हैं। – Griwes