"मैप" का क्या अर्थ है?


10

मैंने विभिन्न सीएस शिक्षा सामग्रियों में कई बार शब्द का सामना किया है:

  1. L2 CS162 (UC बर्कले):

    मेमोरी-मैप्ड I / O

  2. L4 CS162 (UC बर्कले):

    मेमोरी मैप की गई फाइलें

  3. L24 CS61 (UC बर्कले):

    "मेमोरी मैप्ड I / O": डिवाइस कंट्रोल / डेटा रजिस्टर सीपीयू एड्रेस स्पेस में मैप किया जाता है

  4. यहां तक ​​कि, "मैपिंग" के बाद, मुझे लेख Map_ (उच्च-ऑर्डर_फंक्शन) मिला , लेकिन यह मेरे लिए बहुत स्पष्ट नहीं था।
  5. इससे भी अधिक, विकिपीडिया लेखbitmap को पढ़ने के संदर्भ में अर्थ को समझने की कोशिश की :

    कुछ सरणी सेट {0}, 1} में कुछ डोमेन (लगभग हमेशा पूर्णांक की एक सीमा) से मानों की मैपिंग होती है।

    मुझे यकीन नहीं है, लेकिन ऊपर के संदर्भ में यह मुझे डेटा रूपांतरण के बारे में लगता है।

  6. बाद में एक सीएस पुस्तक पढ़ने के बाद, मुझे केवल यह अनुच्छेद मिला लेकिन इसने मेरे लिए "मैपिंग" का अर्थ नहीं समझाया:

    मेमोरी मैपिंग लिनक्स (यूनिक्स के अन्य रूपों के साथ) एक वर्चुअल मेमोरी क्षेत्र की सामग्री को डिस्क पर एक ऑब्जेक्ट, मेमोरी मैपिंग के रूप में ज्ञात एक प्रक्रिया के साथ जोड़कर आरंभ करता है।

  7. मुझे एक खोज परिणाम के रूप में MapReduce भी मिला : जहां मानचित्र को "समानांतर कंप्यूटिंग में एक मुहावरा के रूप में समझाया गया है जहां एक अनुक्रम के सभी तत्वों पर एक सरल ऑपरेशन लागू किया जाता है, संभवतः समानांतर में"।

मैं अभी भी इस शब्द को लेकर उलझन में हूं। क्या कोई समझा सकता है कि मैंने जिन संदर्भों का उल्लेख किया है उनमें "मानचित्र" का क्या अर्थ है?

जवाबों:


14

तो, "मैप" शब्द के दो अलग-अलग उपयोग हैं, कि मैं यहां अनपैक करूंगा।

  1. पहला बहुत जेनेरिक है, जहाँ मानचित्र का अर्थ "संबद्ध करना," विशेष रूप से एक फ़ंक्शन के माध्यम से है। अगर हम कहते हैं " मैप्स प्रत्येक x टू 2 x ", तो हम कह रहे हैं maps x । च ( x )चएक्स2एक्स∀एक्स।च(एक्स)=2एक्स

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

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

  2. कार्यात्मक प्रोग्रामिंग और डेरिवेटिव (जैसे मेप्रेड्यूस) में, नक्शा एक संरचना में परिवर्तन को लागू करने के लिए संदर्भित करता है।

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

    लेकिन, यह घटना काफी सामान्य है। हास्केल में, एक डेटा संरचना जो इस तरह के ऑपरेशन को स्वीकार करती है, उसे फ़नकार कहा जाता है , और ऑपरेशन को कहा जाता है FMAP (ऐतिहासिक कारणों के लिए, सूची नक्शे के साथ टकराव से बचने के लिए)।

    ये सभी श्रेणी सिद्धांत से एक फ़नकार की अवधारणा के माध्यम से संबंधित हैं , जो "मानचित्र" ऑपरेशन को स्वीकार करने वाली संरचनाओं का एक अमूर्तन है।


4
( Functorलिंक नाम में टाइपो - एक संपादन का सुझाव देने के लिए बहुत कम।)
— Mat

बहुत स्पष्ट और उत्कृष्ट व्याख्या। हालाँकि मुझे समझ नहीं आया कि 'परिमित कार्य' का क्या अर्थ है।
— कैस

1
@Kais 'फंक्शन फंक्शन' का इस्तेमाल आमतौर पर एक फंक्शन के लिए किया जाता है, जिसके लिए कोई भी तत्व अनंत तक मैप नहीं किया जाता है। मुझे लगता है कि जेमाइट इस बात को उजागर करना चाहता था कि एरे मूल रूप से निहित मूल्यों के लिए (वैध) सूचकांकों के सेट की मैपिंग है।
— माइकल हॉफ

2
दो उपयोग वास्तव में एक ही चीज के पहलू हैं। mapसमारोह एक परिणाम के प्रत्येक तत्व का इनपुट के लिए इसी तत्व के साथ जुड़ा हुआ है देता है। भेद यह है कि पहला उपयोग मौजूदा संबंध का वर्णन करता है, जबकि दूसरा एक ऐसे ऑपरेशन को संदर्भित करता है जो संबंध बनाता है।
— बारमर

1
टाइपो: Fucntor
— Barmar

8

निम्नलिखित में मैं एक बुनियादी समझ प्रदान करने के लिए तकनीकी सटीकता का त्याग करते हुए कई तरीकों से सटीक से कम होने जा रहा हूं। यह स्पष्ट है कि आपने कई तकनीकी स्रोतों को पढ़ा है और सामग्री की बहुत ही तकनीकीता आपके लिए यह समझना मुश्किल बना रही है कि एक काफी बुनियादी और सरल अवधारणा क्या है।

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

एक सड़क का नक्शा वास्तविक दुनिया में एक विशेष इलाके या क्षेत्र की तस्वीर है जिसमें नक्शे पर लिखी रेखाएं और रेखाचित्र और शब्द वास्तविक भौतिक सड़कों और इमारतों के अनुरूप हैं। सड़क के नक्शे और वास्तविक इलाके में चित्रित इलाके के प्रतिनिधित्व के बीच एक से एक संबंध है।

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

प्रश्न में कई उदाहरणों में सहायक तंत्र के साथ एक प्रतिनिधित्व बनाना शामिल है ताकि एक व्यक्ति प्रतिनिधित्व का उपयोग कर सके और तंत्र उस व्यक्ति के कार्यों का अनुवाद करता है जो अंतर्निहित कार्यक्षमता के लिए आवश्यक है जो प्रतिनिधित्व के पहलू से छिपा हुआ है।

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

मेमोरी मैप्ड डिवाइस I / O एक डिवाइस प्रोग्रामिंग इंटरफेस को मेमोरी एड्रेस से लिखकर या मेमोरी एड्रेस से पढ़कर सरल बनाया जा सकता है। इन लेखन और पढ़ने की क्रियाओं का अनुवाद अंतर्निहित मेमोरी मैप्ड डिवाइस I / O कार्यक्षमता के द्वारा अनुरोधित सेवा या कार्रवाई को करने के लिए आवश्यक वास्तविक डिवाइस विशिष्ट क्रियाओं में किया जाता है।

एक बिट मैप बिट्स का एक सेट है जो किसी अन्य सेट के मूल्यों को एक से एक पत्राचार प्रदान करता है। उदाहरण के लिए CreateFile()Win32 API के फ़ंक्शन में कई बिट मैप तर्क हैं जो विभिन्न प्रकार की फ़ाइल विशेषताओं को इंगित करने के लिए उपयोग किए जाते हैं। एक बिट मैप में विशिष्ट बिट्स एक विशिष्ट फ़ाइल व्यवहार के अनुरूप होते हैं जैसे कि "केवल पढ़ने के लिए खोलें" या "हमेशा नई खाली फ़ाइल बनाएं"। विशेष स्थिरांक प्रदान किए जाते हैं जो वास्तविक तर्कों को निर्दिष्ट करने के लिए द्विआधारी बिट संचालन का उपयोग करके संयुक्त होते हैं। CreateFile फ़ंक्शन और रीडिंग या राइटिंग के लिए फ़ाइल खोलने पर उदाहरण स्रोत कोड देखें ।


महान व्याख्या। हालाँकि इससे संबंधित Memory mapped file I/O, क्या यह मानक फ़ाइल i / o (fopen, fgetc ..) का विकल्प है? प्रदर्शन की तुलना में रैम की प्रकृति की तुलना में प्रदर्शन का लाभ क्या है?
— कैस

1
@ कैस मेमोरी मैप्ड फ़ाइल I / O (MMF) मानक फ़ाइल API कॉल का उपयोग करने का एक विकल्प है। MMF का उपयोग करने के लिए प्रदर्शन लाभ हो भी सकता है और नहीं भी। यह वास्तव में इस बात पर निर्भर करता है कि एमएमएफ के मैकेनिक फाइल सामग्री का उपयोग करने के तरीके के साथ-साथ फ़ाइल कितनी बड़ी है। एमएमएफ I / O बड़े ब्लॉक में मेमोरी में फ़ाइल के पृष्ठ क्षेत्रों। आप फ़ाइल एपीआई के साथ कुछ समान कर सकते हैं और एक महत्वपूर्ण प्रदर्शन अंतर बना सकते हैं। मानक फ़ाइल एपीआई I / O के साथ कर्नेल स्पेस से मेमोरी बफ़र्स के बीच बहुत अधिक नकल होती है, जो अक्सर उपयोगकर्ता स्थान पर MMF के साथ बायपास होती है।
— रिचर्ड चैम्बर्स

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

1
@ इसलिए यदि आप फ़ाइल I / O API को एक संकेत प्रदान कर सकते हैं तो आप अपने एप्लिकेशन के प्रदर्शन में सुधार कर सकते हैं जो फ़ाइल I / O API का उपयोग कर रहा है जब फ़ाइल I / O एक प्रदर्शन अड़चन है। और मेमोरी मैप्ड फ़ाइल I / O का उपयोग करना विशेष रूप से ज्यादातर अनुक्रमिक पहुंच और संचालन के साथ मदद कर सकता है जो कि एक एमएमएफ पृष्ठ आकार के भीतर हैं। GNU C gnu.org/software/libc/manual/html_node/… के साथ निम्न URL I / O के बारे में इस URL की सामग्री और लिंक देखें, जो GNU के कुछ निम्न स्तरीय यांत्रिकी का वर्णन करता है।
— रिचर्ड चैंबर्स

1
@ क्या मैंने setbuf()बड़ी फ़ाइल I / O बफर सेट करने के लिए फ़ंक्शन का उपयोग करके C मानक लाइब्रेरी फ़ाइल API के साथ महत्वपूर्ण प्रदर्शन सुधार देखे हैं । स्टोरेज डिवाइस तक पहुँच को कम करने के लिए आप जो कुछ भी कर सकते हैं वह बोनस हो जाता है। डिस्क ड्राइव की संख्या को कम करने के लिए, एक बड़ा अंतर बना सकते हैं, हालांकि कई प्रभाव हैं जो आप इस बारे में बहुत कुछ नहीं कर सकते हैं जैसे कि डिस्क प्लैटर पर डेटा कैसे व्यवस्थित किया जाता है, प्लेटर्स की रोटेशन गति, सिर की गति गति, रोकने का कैशिंग डेटा, कितनी अच्छी तरह से कैश हिट इलेक्ट्रो-मैकेनिकल डिस्क, आदि पर जा रहा है
— रिचर्ड चैम्बर्स

1

मानचित्रण केवल डेटा की एक इकाई को डेटा की दूसरी इकाई के साथ जोड़ने की प्रक्रिया है। मैपिंग का इरादा मैप किए गए डेटा तक सरलीकृत पहुंच की अनुमति देना है। उदाहरण के लिए, क्लासिक आईबीएम-संगत सिस्टम में, मेमोरी एड्रेस 0xB8000 वीडियो कार्ड की वीडियो मेमोरी में मैप किया गया था। इस मेमोरी में लिखने से स्क्रीन की सामग्री अपडेट हो जाएगी, और इससे पढ़ने से स्क्रीन की सामग्री पुनः प्राप्त होगी। फाइल मैपिंग, डिवाइस मैपिंग और यहां तक ​​कि डेटा-स्ट्रक्चर मैपिंग (आमतौर पर मैप, हाशप या डिक्शनरी कहा जाता है), डेटा की एक इकाई को डेटा की एक इकाई के साथ जोड़ने के सभी तरीके हैं।

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

दूसरा लाभ यह है कि यह स्मृति आवश्यकताओं को कम कर सकता है। उदाहरण के लिए, एक Map<Integer, SomeDataType>"विरल सरणी" का उत्पादन कर सकते हैं, जो उपयोगी है जहाँ आप एक ऐसा सरणी चाहते हैं जिसमें अधिकतर अमान्य / अप्रयुक्त डेटा होंगे, और निकट-रैखिक समय में पहुँचा जा सकता है। यह एक लिंक्ड सूची (जहां यह लेता हे (तुलना में कहीं अधिक कुशल हो सकता है n उपयोग करने के लिए) समय n वें तत्व)।

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


स्पष्टीकरण के लिए धन्यवाद। हालाँकि मुझे समझ नहीं आया कि "विरल सरणी" का क्या मतलब है, और यह कैसे अधिक कुशल है।
— कैस

@ कैस एक विरल सरणी एक सूची है जिसमें अधिकतर शून्य मान होते हैं। स्मृति में सभी मूल्यों को संग्रहीत करने के बजाय, एक विरल सरणी केवल स्मृति में गैर-शून्य मान संग्रहीत करती है। ऐसा करने से, यह केवल एक बार में सभी मेमोरी को आवंटित करने की तुलना में अधिक कुशल है। अंतरिक्ष को बचाने के क्रम में स्पार्स सरणियों को आमतौर पर लगभग 75% खाली होना चाहिए। वर्चुअल मेमोरी अक्सर इस तरह से भी काम करती है, जहां ओएस केवल मेमोरी के "गंदे" पन्नों को संग्रहीत करता है, साथ ही फाइल सिस्टम भी है जो आपको केवल गैर-शून्य मानों के क्षेत्रों को संग्रहीत करने की अनुमति देता है।
— phyrfox
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.