फर्मवेयर में प्रोग्राम निष्पादन कैसे होता है?


9

मैंने फर्मवेयर डोमेन में काम करने वाले लोगों से सुना है कि फर्मवेयर को नियंत्रित करने वाला कोई ऑपरेटिंग सिस्टम नहीं है (उदाहरण के लिए USB ड्राइव में फर्मवेयर)। बाहरी कमांड के इंतजार में लूप में एक सिंगल थ्रेड चल रहा है, और यह एक व्यवधान के लिए प्रारंभ बिंदु है, इसके बाद ISR और नियंत्रण हार्डवेयर तक सभी तरह से प्रवाहित होता है। लेकिन मूल रूप से हार्डवेयर का वह हिस्सा क्या है जो फर्मवेयर कोड को निष्पादित कर रहा है? क्या कोई सीपीयू है या क्या यह ASIC आधारित कोड है जो डिवाइस संचालित होने तक चालू है। मैं एक नियमित सीपीयू-ओएस आधारित प्रणाली से एक फर्मवेयर के प्रतिमान को समझने में विफल रहता हूं।


यदि संभव हो तो कोई फर्मवेयर का उदाहरण ले सकता है, जो सीपीयू मेक और किसी भी अन्य हार्डवेयर और सॉफ़्टवेयर विवरण का संकेत देता है। उदाहरण एसडी कार्ड, यूएसबी, एचडीडी कंट्रोलर्स आदि में फर्मवेयर हो सकते हैं
अभिजीत के राव

जवाबों:


13

कोई प्रतिमान बदलाव नहीं है; दोनों स्थितियों में एक CPU सॉफ्टवेयर / फर्मवेयर को निष्पादित कर रहा है।

फर्मवेयर और सॉफ्टवेयर एक ही चीज हैं; एकमात्र अंतर यह है कि यह कैसे संग्रहीत किया जाता है। सॉफ्टवेयर आमतौर पर एक मास-स्टोरेज डिवाइस (जैसे, डिस्क ड्राइव) पर स्टोर किया जाता है और निष्पादित होने से पहले अस्थिर मेमोरी (जैसे, DRAM) में लोड किया जाता है। सॉफ्टवेयर को बदलना आसान है, बस उस फाइल को अलग से बदल कर।

फ़र्मवेयर को आमतौर पर नॉनवॉलिस्टिक मेमोरी (जैसे, FLASH) में सीधे सीपीयू से अधिक या कम कनेक्ट किया जाता है। इसे संशोधित करना कठिन है (इसलिए "फर्म") और इसे निष्पादन के लिए एक अलग मेमोरी में स्थानांतरित किया जा सकता है या नहीं।

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


9

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

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


6

आपके प्रश्न में कुछ गलत धारणाएं हैं।

फर्मवेयर सिर्फ एक निश्चित रूप में सॉफ्टवेयर है, जो एक सादे (राइट-वीक या यहां तक ​​कि मास्क-प्रोग्राम्ड) रॉम में उपयोग किया जाता है, अब ज्यादातर फ्लैश (पुन: लिखने योग्य) रॉम में होता है। कुछ प्रणालियों पर यह फर्मवेयर एकमात्र सॉफ्टवेयर है, दूसरों पर (एक नियमित पीसी की तरह) इसका मुख्य कार्य अन्य सॉफ्टवेयर को लोड करना है।

कोई एप्लिकेशन OS के नियंत्रण में चल सकता है, या यह बिना OS के चल सकता है। बाद की स्थिति को अक्सर 'नंगे धातु' कहा जाता है: आवेदन इसके बीच कुछ भी नहीं चलता है हार्डवेयर 'धातु'। उदाहरण के लिए, ओएस द्वारा किए गए ओएस-ओएस स्थिति में होने वाले कार्य, उदाहरण के लिए फ़ाइल सिस्टम हैंडलिंग और मल्टी-थ्रेडिंग के लिए प्रावधान, अभी भी एक नंगे-धातु प्रणाली में मौजूद हो सकते हैं, लेकिन एप्लिकेशन के साथ लिंक किए गए पुस्तकालयों के रूप में ।

सॉफ्टवेयर में बहुत सारे अलग-अलग आर्किटेक्चर हो सकते हैं। एक बहुत ही सरल रूप है 'इनपुट प्राप्त करें, प्रोसेसिंग करें, आउटपुट लिखें' लूप। अधिक जटिल रूपों में मतदान, व्यवधान या बहु-सूत्रण शामिल हो सकते हैं। ओएस-निर्भर और नंगे-धातु दोनों अनुप्रयोग इन सभी आर्किटेक्चर का उपयोग कर सकते हैं।

ये तीन मुद्दे स्वतंत्र हैं: उदाहरण के लिए फर्मवेयर नंगे धातु चला सकते हैं और एक बहु-थ्रेडेड आर्किटेक्चर का उपयोग कर सकते हैं। या फर्मवेयर एक ऑपरेटिंग सिस्टम है जो फ्लॉपी (सॉरी, फ्लैश कार्ड ..) से एक एप्लिकेशन को लोड करता है जो सरल गेट-टू-राइट लूप आर्किटेक्चर का उपयोग करता है।


5

OS और CPU अलग-अलग अवधारणाएँ हैं। हां, एक सीपीयू है, जो मशीन के दिल में हार्डवेयर का महत्वपूर्ण टुकड़ा है। यह फर्मवेयर मेमोरी से फर्मवेयर निर्देशों को प्राप्त करता है और उन्हें बाहर निकालता है। (आजकल छोटी प्रणालियों के लिए कई सीपीयू को समानांतर निष्पादन के लिए सामान्य है, वैसे, इसलिए सीपीयू के बारे में विशेष रूप से बोलना कुछ पुराना है ।)

फर्मवेयर सॉफ्टवेयर है जो गैर-वाष्पशील (या शायद केवल-पढ़ने के लिए) मेमोरी में संग्रहीत होता है। क्योंकि यह ऐसी मेमोरी में है, मशीन चालू होने पर फर्मवेयर उपलब्ध होता है। मशीन लगभग तुरंत फर्मवेयर को निष्पादित करना शुरू कर सकती है जब इसे चालू किया जाता है, या कुछ छोटे बूट प्रोग्राम (स्वयं फर्मवेयर) कुछ इलेक्ट्रॉनिक स्टोरेज से बड़े फर्मवेयर को खींच सकते हैं जैसे कि फ्लैश और इसे रैम में डाल दें, और फिर इसे निष्पादित करें। इन दिनों फ्लैश स्टोरेज का आधुनिक उपयोग है, इसलिए कभी-कभी आप अपग्रेड प्रक्रिया का हवाला देते हुए "नया फर्मवेयर चमकता" वाक्यांश सुन सकते हैं। फर्मवेयर को इस तरह आसानी से अपग्रेड करने योग्य नहीं होता है। यह एक एकीकृत सर्किट चिप पर आ सकता है, ताकि नए फर्मवेयर के लिए एक डिवाइस को अपडेट करने में एक सॉकेट से एक एकीकृत सर्किट ("EPROM चिप") को हटाने और एक नए में प्लग करना शामिल हो सकता है। पीसी BIOS ' इस तरह से अद्यतन किया जाता था, और अन्य उपकरणों के असंख्य। यह वास्तव में जहां शब्द से आया है। कुछ लोग "सॉफ़्टवेयर" प्रोग्राम को कॉल करने में असहज थे, अगर उन्हें इसे बदलने के लिए एक चिप या सर्किट बोर्ड को स्वैप करना था, जो हार्डवेयर अपडेट की तरह दिखता है। इसलिए "फर्मवेयर" को गढ़ा गया: सॉफ्टवेयर की तुलना में कुछ "कठिन"।

फर्मवेयर एक "पूर्ण विकसित" ऑपरेटिंग सिस्टम हो सकता है। उदाहरण के लिए, टमाटर वायरलेस राउटर के लिए लिनक्स-आधारित फर्मवेयर है:

http://www.polarcloud.com/tomato

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

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

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

चूंकि आप उत्सुक हैं, इसलिए आप वास्तव में कंप्यूटर आर्किटेक्चर पर कुछ पाठ्यपुस्तकों का आनंद ले सकते हैं, जैसे विलियम स्टालिंग्स, या हेनेसी और पैटरसन द्वारा।


4

सबसे बुनियादी स्तर पर, एक सीपीयू सिर्फ एक राज्य मशीन है जो निर्देशों के अनुक्रम के माध्यम से आगे बढ़ता है जो अपनी आंतरिक स्थिति को बदल देता है और / या कुछ आउटपुट का उत्पादन करता है। सार और इस अवधारणा को बहुत उच्च स्तर तक परिष्कृत करें और आपको नवीनतम डेस्कटॉप और मोबाइल प्रोसेसर प्रसाद फ्रू इंटेल मिलता है। लेकिन अंतर्निहित सिद्धांत काफी सरल है - आप लगभग एक दर्जन टीटीएल एकीकृत सर्किट के साथ एक बहुत ही मूल प्रोसेसर का निर्माण कर सकते हैं, और 1970 के दशक के मध्य से डेस्कटॉप कैलकुलेटर और ट्रैफिक लाइट कंट्रोलर्स में उपयोग के लिए डिज़ाइन किए गए माइक्रोप्रोसेसर, इससे अधिक जटिल नहीं थे। । जाहिर है, मूर के कानून ने इसे पूरे अन्य स्तर पर ले लिया है, और आधुनिक उच्च-प्रदर्शन वाले प्रोसेसर 35 साल पहले से अपने पूर्वजों के प्रति बहुत कम समानता रखते हैं।

फिर भी, अभी भी प्रोसेसर के लिए एक बहुत बड़ा बाजार है (जिसे आमतौर पर माइक्रोकंट्रोलर कहा जाता है) जो कि काटने के किनारे की तुलना में काफी कम जटिल हैं; उदाहरण के लिए, ये आपके USB ड्राइव पर मिलने वाले प्रोसेसर के प्रकार हैं। अपने प्रश्न को संबोधित करने के लिए - यह संभव है कि आपके द्वारा उल्लिखित उपकरणों के कुछ कार्यों को एक ASIC द्वारा संभाला जा सकता है, लेकिन अगर आपके सहकर्मी थ्रेड्स के बारे में बात कर रहे हैं और यह आम तौर पर बाधित करता है, तो संकेत मिलता है कि इसमें कुछ समय का सीपीयू शामिल है, शायद एक माइक्रोकंट्रोलर पर । ये वास्तव में पूरी तरह से कंप्यूटर हैं इस अर्थ में कि उनके पास एक ALU, रजिस्टर, एक प्रोग्राम काउंटर, एक स्टैक, आदि हैं, लेकिन वे बहुत कम शक्ति और बहुत सस्ती हैं, और इसके बजाय केवल कुछ दर्जन निर्देश हो सकते हैं। सैकड़ों x86 वास्तुकला।

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


1

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

आइए यह मत भूलो कि एक ऑपरेटिंग सिस्टम क्या है: एक प्रोग्राम जो हमेशा स्मृति में होता है जो कई कार्यों को सुरक्षित रूप से संभालने और शेड्यूल करने के लिए जिम्मेदार होता है। एक स्वतंत्र कार्य का वर्णन करने के लिए हम जिस शब्दावली का उपयोग करते हैं वह एक "प्रक्रिया" है। ओएस संसाधनों (हार्डवेयर, मेमोरी आदि) को सुरक्षित रूप से साझा करने और उनके निष्पादन को प्राथमिकता देने के लिए प्रक्रियाओं की अनुमति देता है, यह अंतर-प्रक्रिया संचार जैसी सुविधाएँ भी प्रदान करता है। यह सब कई समवर्ती कार्यों का समर्थन करने की आवश्यकता से उत्पन्न होता है। कुछ अनुमति स्तरों को घटाकर, CPU के लिए यह केवल निर्देश OS या कोई OS निष्पादित कर रहा है - यह अंतर नहीं जानता है।

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

किसी अन्य प्रक्रिया की मेमोरी स्पेस या सभी सीपीयू समय को हॉगिंग करने वाली किसी अन्य प्रक्रिया को कैप्चर करने और ट्रॉउंस करने की कोई चिंता नहीं है। ऐसा इसलिए है क्योंकि हम एक एकल प्रोग्राम लिख रहे हैं, जिसमें किसी भी समय सभी संसाधनों तक पहुंच है क्योंकि यह सिस्टम पर चलने वाला एकमात्र प्रोग्राम है और इस प्रकार हमें इसे प्रबंधित करने के लिए ओएस जैसे किसी अन्य प्रोग्राम की आवश्यकता नहीं है। फिर से, सीपीयू के लिए, यह सिर्फ मेमोरी से प्राप्त निर्देशों को निष्पादित कर रहा है, यह अंतर, ओएस या कोई ओएस नहीं बता सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.