हार्डवेयर एब्सट्रेक्शन

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

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

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

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

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

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

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

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

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

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

CP/M (CP/M BIOS), DOS (DOS BIOS), सोलारिस (ऑपरेटिंग सिस्टम), Linux, BSD, macOS और कुछ अन्य पोर्टेबल ऑपरेटिंग सिस्टम में भी HAL होता है, भले ही इसे स्पष्ट रूप से निर्दिष्ट नहीं किया गया हो। कुछ ऑपरेटिंग सिस्टम, जैसे लिनक्स, में चलते समय एक डालने की क्षमता होती है, जैसे ऑपरेटिंग सिस्टम के लिए अनुकूली डोमेन वातावरण। नेटबीएसडी ऑपरेटिंग सिस्टम को व्यापक रूप से एक साफ हार्डवेयर एब्स्ट्रैक्शन परत के रूप में जाना जाता है जो इसे अत्यधिक पोर्टेबल होने की अनुमति देता है। इस प्रणाली के भाग के रूप में हैं /,, और अन्य उपप्रणालियाँ। लोकप्रिय बसें जो एक से अधिक वास्तुकला पर उपयोग की जाती हैं, उन्हें भी अमूर्त कर दिया जाता है, जैसे कि उद्योग मानक वास्तुकला, विस्तारित उद्योग मानक वास्तुकला, परिधीय घटक इंटरकनेक्ट, पीसीआईई इत्यादि, जिससे ड्राइवरों को न्यूनतम कोड संशोधन के साथ अत्यधिक पोर्टेबल होने की इजाजत मिलती है।

परिभाषित एचएएल वाले ऑपरेटिंग सिस्टम विभिन्न हार्डवेयर में अधिक आसानी से पोर्टेबल होते हैं। यह अंतः स्थापित प्रणाली  के लिए विशेष रूप से महत्वपूर्ण है जो दर्जनों विभिन्न प्लेटफार्मों पर चलते हैं।

माइक्रोसॉफ्ट विंडोज़
Windows NT कर्नेल में हार्डवेयर और कार्यकारी सेवाओं के बीच कर्नेल स्थान में एक HAL होता है जो ntoskrnl.exe|NTOSKRNL.EXE फ़ाइल में शामिल होता है %WINDOWS%\system32\hal.dll के अंतर्गत। यह विंडोज़ एनटी कर्नेल-मोड कोड को विभिन्न प्रकार के प्रोसेसर, विभिन्न मेमोरी प्रबंधन इकाई आर्किटेक्चर और विभिन्न I/O बस आर्किटेक्चर के साथ विभिन्न सिस्टमों में पोर्टेबिलिटी की अनुमति देता है; जब उन प्रणालियों पर लागू निर्देश सेट के लिए संकलित किया जाता है, तो अधिकांश कोड उन प्रणालियों पर बिना बदलाव के चलता है। उदाहरण के लिए, सिलिकॉन ग्राफ़िक्स  इंटेल x86-आधारित वर्कस्टेशन आईबीएम पीसी संगत वर्कस्टेशन नहीं थे, लेकिन एचएएल के कारण, विंडोज 2000 उन पर चलने में सक्षम था।

Windows Vista और Windows Server 2008 के बाद से, उपयोग किया गया HAL स्वचालित रूप से Windows Vista स्टार्टअप प्रक्रिया के दौरान निर्धारित होता है।

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

एंड्रॉइड
Android (ऑपरेटिंग सिस्टम) ने Android Oreo|संस्करण 8.0 Oreo पर एक HAL पेश किया जिसे विक्रेता इंटरफ़ेस (कोडनेम प्रोजेक्ट ट्रेबल) के रूप में जाना जाता है। यह एंड्रॉइड ओएस फ्रेमवर्क से निम्न-स्तरीय कोड को हटा देता है, और फर्मवेयर अपडेट के विकास को आसान बनाने के लिए उन्हें एंड्रॉइड के भविष्य के संस्करणों का समर्थन करने के लिए आगे संगत बनाया जाना चाहिए। प्रोजेक्ट ट्रेबल से पहले एंड्रॉइड विभिन्न गैर-मानकीकृत विरासत एचएएल पर निर्भर था। हलियम एक एंड्रॉइड-आधारित एचएएल है जिसका उपयोग कई मोबाइल ऑपरेटिंग सिस्टम जैसे उबंटू टच और ल्यूनओएस द्वारा एंड्रॉइड प्री-इंस्टॉल वाले स्मार्टफोन पर चलाने के लिए किया जाता है।

यह भी देखें

 * बेसिक इनपुट/आउटपुट सिस्टम (BIOS)
 * एकीकृत एक्सटेंसिबल [[फर्मवेयर इंटरफ़ेस]] (UEFI)
 * फर्मवेयर
 * उन्नत कॉन्फ़िगरेशन और पावर इंटरफ़ेस (एसीपीआई)
 * डिवाइस ट्री
 * बोर्ड सहायता पैकेज (बीएसपी)
 * डिवाइसकिट
 * हाइकु डिवाइस किट
 * एचएएल (सॉफ्टवेयर)
 * हार्डवेयर पर निर्भर सॉफ्टवेयर (एचडीएस)
 * नैनोकर्नेल
 * पिकोकर्नेल
 * सुरक्षा अंगूठी