2011-12-28 16 views
7

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

+0

+1 महान सवाल! – Mehrdad

उत्तर

6

नहीं, वे एक साथ निष्पादित नहीं कर रहे थे।

COMMAND.COM में निवासी भाग था जो स्मृति में था और एक क्षणिक भाग जिसे इच्छा पर फेंक दिया जा सकता था।

जब आप कोई प्रोग्राम चलाते थे, तो आमतौर पर क्षणिक भाग के स्थान पर लोड हो जाता था और फिर चलाया जाता था। जब कार्यक्रम निकल गया, तो उसने निवासी भाग में कोड को कॉल करके ऐसा किया जो आवश्यक होने पर और क्षणिक भाग को फिर से लोड कर देगा।

तथ्य यह है कि कुछ कोड निवासी बने रहे हैं इसका मतलब है कि यह "चल रहा था"। इसी तरह, एमएस-डॉस (कर्नेल) के विशाल ट्रैक्ट लगातार स्मृति में रहे, फिर भी वे "चल रहे" नहीं थे, जब तक कि एक गैर-कर्नेल प्रोग्राम द्वारा स्पष्ट रूप से बुलाया न जाए।

अब थे बातें समवर्ती चलाने के लिए कहा जा सकता कर सकते हैं, डॉस व्यवधान या किसी तरह से, फिर बाहर निकलें में डॉस में टीएसआर (समाप्त और रहने निवासी) कार्यक्रमों के बहुत सारे है कि चल पाएंगे, हुक था, लेकिन कुछ स्मृति छोड़ने आवंटित (जहां उसका कोड था)।

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

4

जबकि अन्य प्रक्रिया चल रही है, कमांड लाइन प्रोसेसर नहीं चल रहा है: यह निलंबित है। डीओएस में उपलब्ध एकमात्र "मल्टीटास्किंग" सुविधा "Terminate and Stay Resident" थी।

+0

वास्तव में, उन्हें "प्रक्रियाओं" के रूप में वर्णित करने के लिए भी सही नहीं है। एक प्रक्रिया में निष्पादन संदर्भ होना चाहिए। (और निकटतम डॉस कभी मल्टीप्रोसेसिंग में आया था [पृष्ठभूमि प्रिंटिंग] (http://www.computerhope.com/printhlp.htm) सुविधा।) –

2

इससे कोई फर्क नहीं पड़ता कि आप डॉस या विंडोज या लिनक्स या बीएसडी चला रहे हैं या उस प्रोसेसर पर जो भी हो, वह सब वही है। उस समय आप इस चर्चा के प्रयोजनों के लिए एक निष्पादन इकाई थी, निर्देशों को निष्पादित करने वाला एक एकल कोर, ज्यादातर क्रम में। यदि वे निर्देश डीओएस या लिनक्स या विंडोज नाम पहनते हैं तो कोई फर्क नहीं पड़ता। बस निर्देश।

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

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

संक्षिप्त उत्तर, जब आपके पास फ़ंक्शन bob() होता है जो फ़ंक्शन ted() को कॉल करता है।

int bob (int something) 
{ 
...some code 
...more code 
    ted(); 
...some code 
...more code 
} 

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

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

+2

छोटा जवाब। डॉस के पास यह जानने के लिए जानकारी की एक सारणी थी कि क्या चल रहा था, आप एक समय में "एक समय में" एक से अधिक कार्यक्रम चलाने के लिए चाहते थे, आपको मूल रूप से अपना खुद का ऑपरेटिंग सिस्टम होना था, कुछ ऐसा जो इंटरप्ट्स को संभाला था और कार्यक्रमों के बीच स्विच किया गया था, टेबल जो कि यह सोचने के लिए इस्तेमाल किया जाता था कि यह एकमात्र चल रहा कार्यक्रम था। आमतौर पर समाप्त होने और निवासी रहने के रूप में जाना जाता है, tsr। –

संबंधित मुद्दे