एम्बेडेड सॉफ्टवेयर में डेडलॉक को रोकने में समय आरेखों की भूमिका

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

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

Kawaii-style infographic explaining how timing diagrams prevent deadlocks in embedded software, featuring pastel vector illustrations of the four Coffman conditions (mutual exclusion, hold and wait, no preemption, circular wait), a simplified timing diagram showing process lanes with resource blocks and wait states, and four prevention strategies (resource ordering, lock timeouts, reduced hold time, priority inheritance), designed with rounded shapes, soft colors, and cute icons for intuitive technical communication

एम्बेडेड संदर्भों में डेडलॉक तंत्र को समझना 🧩

किसी समाधान को लागू करने से पहले, समस्या को समझना आवश्यक है। डेडलॉक यादृच्छिक घटनाएं नहीं होती हैं; वे विशिष्ट तार्किक शर्तों का पालन करती हैं। एम्बेडेड सॉफ्टवेयर में, इन शर्तों को आमतौर पर इंटरप्ट सेवा रूटीन (ISRs), बैकग्राउंड कार्यों और हार्डवेयर ड्राइवरों के बीच बातचीत के कारण उत्पन्न किया जाता है।

चार आवश्यक शर्तें

एक डेडलॉक होने के लिए, चार शर्तों को एक साथ सत्य होना चाहिए। इन्हें अक्सर कॉफमैन शर्तों के रूप में जाना जाता है:

  • परस्पर अपनाना: कोई संसाधन साझा नहीं किया जा सकता है; केवल एक ही कार्य उसे एक समय में उपयोग कर सकता है।
  • रखो और इंतजार करो: एक कार्य कम से कम एक संसाधन को रखे हुए होता है, जबकि अन्य द्वारा धारित अतिरिक्त संसाधनों को प्राप्त करने का इंतजार कर रहा होता है।
  • पूर्वाधिकार नहीं: संसाधनों को किसी कार्य से जबरदस्ती नहीं लिया जा सकता है; उन्हें स्वेच्छा से छोड़ा जाना चाहिए।
  • चक्रीय प्रतीक्षा: एक समूह कार्यों का अस्तित्व होता है जहां प्रत्येक कार्य श्रृंखला में अगले कार्य द्वारा धारित संसाधन की प्रतीक्षा कर रहा होता है।

इनमें से किसी भी शर्त को हटाने से डेडलॉक रोका जा सकता है। समय आरेख मुख्य रूप से चक्रीय प्रतीक्षा और रखो और इंतजार करो स्थितियों को पहचानने में सहायता करते हैं, जिसमें संसाधन प्राप्ति और रिलीज के समय रेखा को दृश्याकृत किया जाता है।

क्यों एम्बेडेड सिस्टम नाजुक होते हैं ⚙️

सामान्य उद्देश्य वाले कंप्यूटिंग के विपरीत, एम्बेडेड सिस्टम अक्सर सीमित संसाधनों और कठोर समय सीमाओं के साथ संचालित होते हैं। निम्नलिखित कारक नाजुकता को बढ़ाते हैं:

  • साझा हार्डवेयर पेरिफेरल्स: एक ही SPI बस या GPIO पिन तक पहुंच के लिए एक से अधिक कार्यों की आवश्यकता हो सकती है।
  • प्राथमिकता उलटाना: उच्च प्राथमिकता वाले कार्य आवश्यक लॉक धारण कर रहे निम्न प्राथमिकता वाले कार्यों का इंतजार कर सकते हैं।
  • अनिर्णायक देरी: इंटरपट्स संसाधन लॉकिंग के प्रवाह को अप्रत्याशित क्षणों पर बाधित कर सकते हैं।

इन बातचीत को ट्रैक करने के लिए एक दृश्य उपकरण के बिना, संसाधन प्रबंधन में तार्किक त्रुटियां तब तक छुपी रह सकती हैं जब तक कि प्रणाली डेप्लॉय नहीं की जाती।

सॉफ्टवेयर विश्लेषण में समय आरेख को परिभाषित करना 📊

एक समय आरेख एक आलेखी प्रतिनिधित्व है जो समय के साथ दो या अधिक समानांतर प्रक्रियाओं के व्यवहार को दिखाता है। इसमें समय का प्रतिनिधित्व करने वाले क्षैतिज अक्ष के साथ घटनाओं को चित्रित किया जाता है और विशिष्ट अवस्थाओं के अवधि को दर्शाने के लिए ऊर्ध्वाधर रेखाओं का उपयोग किया जाता है।

समय आरेख के मुख्य घटक

एम्बेडेड सॉफ्टवेयर के लिए समय आरेख बनाते समय, विशिष्ट तत्वों को स्पष्ट रूप से परिभाषित किया जाना चाहिए:

  • प्रक्रिया रेखाएं: व्यक्तिगत कार्य, धागे या इंटरपट्स का प्रतिनिधित्व करने वाली क्षैतिज ट्रैक।
  • संसाधन ब्लॉक: रेखा पर खंड जो बताते हैं कि किसी कार्य को लॉक या संसाधन के बारे में कब रखा गया है।
  • प्रतीक्षा अवस्थाएं: अंतराल या विशिष्ट चिह्न जो बताते हैं कि किसी कार्य को किसी घटना के प्रतीक्षा में निलंबित कर दिया गया है।
  • बातचीत: विभिन्न प्रक्रिया ट्रैक को जोड़ने वाली तीर या रेखाएं जो संचार या डेटा स्थानांतरण को दिखाती हैं।

फ्लोचार्ट के विपरीत, जो तार्किक प्रवाह दिखाता है, एक समय आरेख दिखाता हैजब चीजें होती हैं। यह समयानुक्रमिक आयाम एक साथानुक्रमिकता समस्याओं का पता लगाने के लिए महत्वपूर्ण है।

समय के साथ साथानुक्रमिकता को दृश्य बनाना ⏱️

साथानुक्रमिकता के कारण जटिलता आती है क्योंकि घटनाओं का क्रम हमेशा निश्चित नहीं होता है। एक समय आरेख दुर्भाग्यपूर्ण परिस्थितियों को दर्ज करता है। कार्यों के क्रमिक क्रियान्वयन को परतों में रखने से � ingineers को ओवरलैप दिखाई देते हैं जो प्रतिस्पर्धा को दर्शाते हैं।

आरेख तत्व प्रतिनिधित्व अंतर्द्वंद्व के लिए महत्व
लॉक किया गया संसाधन समय रेखा पर छायांकित ब्लॉक स्वामित्व की अवधि दिखाता है; लंबे ब्लॉक प्रतिस्पर्धा के जोखिम को बढ़ाते हैं।
प्रतीक्षा कर रहा कार्य समतल रेखा या रुकावट यह दर्शाता है कि कोई कार्य अवरुद्ध है; अवधि संभावित देरी दिखाती है।
संसाधन अनुरोध उर्ध्वाधर त стрेला एक लॉक के प्रयास के क्षण को दिखाता है; ओवरलैप टकराव को इंगित करते हैं।
रिलीज इवेंट छायांकित ब्लॉक का अंत अन्य कार्यों के लिए उपलब्धता का संकेत देता है।

दृश्यीकरण के माध्यम से संभावित डेडलॉक का पता लगाना 🔍

टाइमिंग डायग्राम का प्राथमिक उपयोग चक्रीय निर्भरताओं को उजागर करने की क्षमता में है। जब कार्य A कार्य B का इंतजार करता है, और कार्य B कार्य A का इंतजार करता है, तो डायग्राम एक विशिष्ट पैटर्न दिखाता है जिसमें ब्लॉकिंग लाइनें कभी भी हल नहीं होती हैं।

चक्रीय प्रतीक्षा पैटर्न की पहचान करना

एक वैध प्रणाली में, संसाधन प्राप्ति श्रृंखलाओं का अंत अंततः होना चाहिए। डेडलॉक स्थिति में, डायग्राम एक लूप को उजागर करता है। उदाहरण के लिए:

  • कार्य 1 संसाधन X प्राप्त करता है।
  • कार्य 1 संसाधन Y प्राप्त करने का प्रयास करता है।
  • कार्य 2 संसाधन Y को धारण करता है।
  • कार्य 2 संसाधन X प्राप्त करने का प्रयास करता है।

टाइमिंग डायग्राम पर, यह कार्य 1 के समय रेखा के कार्य 2 के संसाधन Y के रिलीज के बाद बढ़ने के रूप में दिखाई देता है, जबकि कार्य 2 की समय रेखा कार्य 1 के संसाधन X के रिलीज के बाद बढ़ती है। ओवरलैपिंग प्रतीक्षा अवस्थाएं एक दृश्य “क्रॉस” बनाती हैं जो डेडलॉक को इंगित करती है।

प्राथमिकता उलटाव का पता लगाना

प्राथमिकता उलटाव तब होता है जब एक कम प्राथमिकता वाला कार्य एक उच्च प्राथमिकता वाले कार्य के लिए आवश्यक संसाधन को धारण करता है, जबकि एक मध्यम प्राथमिकता वाला कार्य कम प्राथमिकता वाले कार्य को प्रीमेप्ट करता है। इससे एक ऐसी स्थिति बनती है जहां उच्च प्राथमिकता वाला कार्य अनिश्चित काल तक प्रतीक्षा करता है।

एक टाइमिंग डायग्राम निष्पादन ब्लॉकों के क्रम के माध्यम से इसे उजागर करता है। आप एक मध्यम प्राथमिकता वाले कार्य को चलते हुए देखेंगे जबकि उच्च प्राथमिकता वाला कार्य कम प्राथमिकता वाले कार्य के इंतजार में ब्लॉक है। यह उलटाव कोड में अक्सर अदृश्य होता है लेकिन समय रेखा पर बहुत स्पष्ट दिखाई देता है।

जिटर और लेटेंसी का विश्लेषण करना

डेडलॉक केवल समय संबंधी समस्या नहीं है। अत्यधिक जिटर (समय में भिन्नता) या लेटेंसी (देरी) भी प्रणाली के विफल होने का कारण बन सकती है। टाइमिंग डायग्राम सीमाएं निर्धारित करने में मदद करते हैं। यदि किसी संसाधन को अधिकतम अनुमेय निष्पादन समय (WCET – सबसे बुरे मामले में निष्पादन समय) से अधिक समय तक धारण किया जाता है, तो प्रणाली डेडलाइन को मिस कर सकती है।

  • WCET विश्लेषण: डायग्राम एक कार्य द्वारा संसाधन को धारण करने के अधिकतम समय का अनुमान लगाने में मदद करता है।
  • डेडलाइन सत्यापन: सुनिश्चित करता है कि प्रतीक्षा कर रहे कार्यों को उनकी डेडलाइन समाप्त होने से पहले अनब्लॉक किया जाए।

समय विश्लेषण के उपयोग से रोकथाम के लिए रणनीतियां 🛠️

जब एक संभावित डेडलॉक टाइमिंग डायग्राम पर पहचान लिया जाता है, तो इसे रोकने के लिए विशिष्ट संरचनात्मक परिवर्तन किए जा सकते हैं। दृश्य डेटा इन निर्णयों को मार्गदर्शन करता है।

1. संसाधन क्रम निर्धारण प्रोटोकॉल

चक्रीय प्रतीक्षा रोकने के लिए सबसे प्रभावी तरीकों में से एक है संसाधन प्राप्ति पर एक वैश्विक क्रम को लागू करना। यदि प्रत्येक कार्य संसाधनों को एक ही क्रम में मांगता है (उदाहरण के लिए, संसाधन A संसाधन B से पहले), तो चक्रीय प्रतीक्षा गणितीय रूप से असंभव हो जाती है।

डायग्राम कैसे मदद करता है: अधिग्रहण क्रम को आरेखित करके, इंजीनियर यह सत्यापित कर सकते हैं कि कोई भी कार्य एक उच्च संख्या वाले संसाधन के बाद एक कम संख्या वाले संसाधन को नहीं प्राप्त करता है। डायग्राम इस क्रम के उल्लंघन को तुरंत दिखाता है।

2. लॉक समय सीमा तंत्र

समय सीमा के लागू करने से यह सुनिश्चित होता है कि कोई कार्य अनंतकाल तक प्रतीक्षा न करे। यदि एक निर्दिष्ट समय के भीतर लॉक प्राप्त नहीं किया जा सकता है, तो कार्य असफल हो जाता है या पुनः प्रयास करता है।

दृश्य जांच: समय आरेख में, इसे प्रतीक्षा अवस्था के लिए अधिकतम अवधि रेखा के रूप में दिखाया जाता है। यदि प्रतीक्षा ब्लॉक इस रेखा को पार कर जाता है, तो प्रणाली को जानकारी मिलती है कि एक रिकवरी तंत्र को सक्रिय करने की आवश्यकता है।

3. धारण समय को कम करना

जितना अधिक समय तक कोई संसाधन धारण किया जाता है, उतनी ही अधिक संभावना होती है कि इसके लिए प्रतिस्पर्धा हो। कार्यों को लॉक को जल्द से जल्द छोड़ना चाहिए।

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

4. प्राथमिकता उत्तराधिकार

प्राथमिकता उलटाव को रोकने के लिए, प्राथमिकता उत्तराधिकार जैसे प्रोटोकॉल निम्न प्राथमिकता वाले कार्य की प्राथमिकता को अस्थायी रूप से बढ़ाते हैं जो संसाधन को धारण कर रहे हैं, ताकि इसकी प्राथमिकता उच्चतम प्राथमिकता वाले कार्य के समान हो जो इसकी प्रतीक्षा कर रहा है।

आरेख प्रभाव: इससे आरेख में कार्यान्वयन ब्लॉक की ऊंचाई में परिवर्तन आता है। निम्न प्राथमिकता वाले कार्य का ब्लॉक लंबा हो जाता है (उच्च प्राथमिकता के कारण), लेकिन यह तेजी से पूरा होता है क्योंकि मध्यम प्राथमिकता वाले कार्यों द्वारा इसे प्रतिस्थापित नहीं किया जाता है।

सामान्य परिदृश्य और समाधान 💡

वास्तविक दुनिया के एम्बेडेड प्रणाली को समानांतरता के विशिष्ट पैटर्न का सामना करना पड़ता है। नीचे उभयनिष्ठ परिदृश्य दिए गए हैं जहां समय आरेख स्पष्टता प्रदान करते हैं।

परिदृश्य A: इंटरप्ट हैंडलर लॉक

ISRs अक्सर साझा डेटा संरचनाओं की रक्षा करने के लिए लॉक का उपयोग करते हैं। यदि एक ISR हार्डवेयर घटना के लिए प्रतीक्षा करते समय लॉक को धारण करता है, और एक कार्य भी उस इंटरप्ट हैंडलर के पूरा होने की प्रतीक्षा कर रहा है, तो एक डेडलॉक उत्पन्न होता है।

समस्या समय आरेख संकेत समाधान
ISR ब्लॉकिंग प्रतीक्षा अवस्था में ISR रेखा कार्य रेखा के साथ ओवरलैप होती है क्रिटिकल सेक्शन के दौरान इंटरप्ट को अक्षम करें या सॉफ्टवेयर कतारों का उपयोग करें।
साझा डेटा बहुत सारे ओवरलैपिंग लेखन ब्लॉक एटॉमिक ऑपरेशन का उपयोग करें या अलग बफर का उपयोग करें।

परिदृश्य B: डाइनिंग फिलॉसॉफर्स समस्या

यह प्राचीन समस्या में बहुत सारे कार्य साझा संसाधनों (चम्मचों) के लिए प्रतिस्पर्धा करते हैं। यदि प्रत्येक कार्य एक चम्मच उठाता है और दूसरे की प्रतीक्षा करता है, तो सभी अनंतकाल तक प्रतीक्षा करते रहेंगे।

आरेख दृश्यावली: आप सभी कार्यों के लिए समानांतर “उठाने” के बार देखेंगे, उसके बाद समानांतर “प्रतीक्षा” के बार दिखेंगे। आरेख दिखाता है कि प्रणाली पूरी तरह से रुक गई है।

रोकथाम: एक साथ संसाधन धारण करने वाले कार्यों की संख्या को सीमित करें। समय आरेख संसाधन के थकावट आने से पहले अधिकतम समानांतरता स्तर की गणना करने में मदद करता है।

परिदृश्य सी: असमान समय संचार

जब कार्य साझा मेमोरी के बजाय संदेशों के माध्यम से संचार करते हैं, तो मृतावस्था अभी भी हो सकती है यदि भेजने वाला एक ब्लॉक किए गए प्राप्तकर्ता की प्रतीक्षा करता है।

विश्लेषण:समय आरेख भेजने के घटना और प्राप्त करने के घटना के बीच के अंतर को दिखाते हैं। यदि प्राप्तकर्ता लॉक की प्रतीक्षा करते हुए ब्लॉक है, तो भेजने वाले के भेजने के ब्लॉक का अंत नहीं होता।

विकास में समय विश्लेषण को एकीकृत करना ⚙️

समय विश्लेषण को बाद में सोचने वाली बात नहीं होनी चाहिए। इसे प्रभावी बनाने के लिए डिज़ाइन चरण में एकीकृत किया जाना चाहिए।

1. कार्यान्वयन से पहले मॉडलिंग

कोड लिखने से पहले, सिस्टम आर्किटेक्चर का समय मॉडल बनाएं। कार्यों, उनकी प्राथमिकताओं और उनकी आवश्यक संसाधनों को परिभाषित करें। संघर्षों की जांच के लिए समय रेखा का सिमुलेशन करें। इससे त्वरित तर्क संबंधी त्रुटियों का पता चलता है।

2. रनटाइम मॉनिटरिंग

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

3. तनाव परीक्षण

प्रणाली को अधिकतम लोड की स्थिति में चलाएं। मृतावस्था अक्सर तभी दिखाई देती है जब सभी संसाधन एक साथ प्रतिस्पर्धा करते हैं। तनाव परीक्षण से उत्पन्न समय आरेख मान्यता के लिए सबसे मूल्यवान होते हैं।

प्रभावी समय आरेखों के लिए श्रेष्ठ प्रथाएं 📝

समय आरेखों से अधिकतम लाभ प्राप्त करने के लिए, इन दिशानिर्देशों का पालन करें:

  • विस्तार:आरेख को बहुत कच्चा न बनाएं। लॉक प्रतिस्पर्धा देखने के लिए व्यक्तिगत निर्देश या छोटे ब्लॉक आवश्यक हो सकते हैं।
  • स्थिरता:प्रोजेक्ट के सभी आरेखों में लॉक, प्रतीक्षा और इंटरप्ट के लिए स्थिर प्रतीकों का उपयोग करें।
  • परिसर:महत्वपूर्ण मार्गों पर ध्यान केंद्रित करें। हर फंक्शन का आरेख न बनाएं; संसाधन-भारी मॉड्यूल पर ध्यान केंद्रित करें।
  • दस्तावेज़ीकरण:आरेखों को टिप्पणी करें। विशिष्ट पंक्तियों को “महत्वपूर्ण” या “संसाधन सीमित” के रूप में चिह्नित करें ताकि भविष्य के रखरखाव के लिए मार्गदर्शन किया जा सके।
  • सहयोग:आरेखों को हार्डवेयर और सॉफ्टवेयर टीमों के साथ साझा करें। हार्डवेयर � ingineers इंटरप्ट लेटेंसी को स्पष्ट कर सकते हैं; सॉफ्टवेयर इंजीनियर कार्य तर्क को स्पष्ट कर सकते हैं।

चुनौतियाँ और सीमाएँ ⚠️

हालांकि शक्तिशाली, समय आरेख एक सोने की गोली नहीं हैं। इंजीनियरों को उनकी सीमाओं को समझना चाहिए।

  • राज्य विस्फोट:जटिल प्रणालियों में, संभावित समय विकल्पों की संख्या इतनी अधिक हो सकती है कि पूरी तरह से दृश्यमान नहीं किया जा सकता।
  • सारांश:आरेख हार्डवेयर विवरणों को छिपाते हैं। वास्तविक निष्पादन समय कैश गलती या बस अर्बिट्रेशन के कारण भिन्न हो सकता है।
  • मानवी त्रुटि: समय आरेख बनाने के लिए विशेषज्ञता की आवश्यकता होती है। कार्य के व्यवहार के गलत मान्यताओं के कारण गलत आरेख बनते हैं।

इन चुनौतियों के बावजूद, समानांतर विश्लेषण के लिए समय आरेख द्वारा प्रदान की जाने वाली दृश्य स्पष्टता अब तक अनुपम बनी हुई है। वे इंजीनियर को केवल तार्किक नहीं, बल्कि समयानुसार सोचने के लिए मजबूर करते हैं।

सिस्टम सुरक्षा के लिए अंतिम विचार ✅

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

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

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

Leave a Comment

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *