2009-07-26 11 views
17

कर्नेल पक्ष पर मेमोरी बाधाओं को सेट करना आसान है: मैक्रोज़ एमबी, डब्लूएमबी, आरएमबी इत्यादि हमेशा लिनक्स कर्नेल हेडर के लिए धन्यवाद में हैं।उपयोगकर्ता स्पेस में मेमोरी बाधाएं? (लिनक्स, x86-64)

उपयोगकर्ता पक्ष पर इसे कैसे पूरा करें?

उत्तर

5

आप full memory barrier जीसीसी के परमाणु निर्मित के लिए देख रहे हैं।

कृपया ध्यान दें संदर्भ मैं यहाँ दिया कहते हैं पर विस्तार,

[निम्न] builtins इंटरफ़ेसइंटेल इटेनियम प्रोसेसर-विशिष्ट आवेदन बाइनरी में वर्णित के साथ संगत होना करने का इरादा कर रहे हैं, खंड 7.4 । इस प्रकार, वे "__builtin_" उपसर्ग का उपयोग करने के सामान्य जीसीसी अभ्यास से निकलते हैं, और आगे यह कि वे अधिभारित होते हैं जैसे कि वे कई प्रकारों पर काम करते हैं।

+0

मैं इस विषय से बहुत परिचित नहीं हूं। क्या यह एक प्रोसेसर विशिष्ट कार्यक्षमता है? (चूंकि आपका उदाहरण एक Itanium है ...) –

+0

सामान्य रूप से, उपयोगकर्ताओं को प्लेटफॉर्म का लाभ नहीं लेना चाहिए- और संकलक-विशिष्ट कार्यक्षमता जब मानक, क्रॉस-प्लेटफ़ॉर्म तंत्र समान प्रभाव प्राप्त करने के होते हैं। POSIX धागे (pthreads) लाइब्रेरी का उपयोग करने के लिए वास्तव में क्या emg-2 की आवश्यकता है। –

+0

@ माइकल, मैं पूरी तरह से आपकी राय से सहमत हूं। मंच विशिष्ट नोट्स को हाइलाइट करने का यही कारण है। – nik

7

पॉज़िक्स defines a number of functions मेमोरी बाधाओं के रूप में कार्य करने के रूप में। मेमोरी स्थानों को समवर्ती रूप से एक्सेस नहीं किया जाना चाहिए; इसे रोकने के लिए, सिंक्रनाइज़ेशन का उपयोग करें - और वह सिंक्रनाइज़ेशन बाधा के रूप में भी काम करेगा।

+1

सिंक्रनाइज़ेशन की आवश्यकता नहीं है जब आवश्यक सभी लॉक हो और मुफ्त एक लेखक/एक पाठक कतार प्रतीक्षा करें। पॉज़िक्स पुस्तकालयों में एमएफएसी/लेंस/स्फेन्स ऑपरेशंस AFAIK प्रदान नहीं करते हैं। –

+2

आपने लॉक फ्री ऑपरेशन के लिए नहीं पूछा था; आपने उपयोगकर्ता स्थान में स्मृति बाधाओं के लिए कहा था। POSIX उन्हें है; उन्हें "pthread_mutex_lock", "pthread_mutex_unlock" कहा जाता है, आदि। आप उनके पीछे मॉडल पसंद नहीं कर सकते हैं, लेकिन यह * आपके प्रश्न का आधिकारिक उत्तर है। –

2

लिनक्स x64 का अर्थ है कि आप इंटेल मेमोरी बाधा निर्देशों का उपयोग कर सकते हैं। आप, लिनक्स हेडर में उन लोगों के समान मैक्रो में उन्हें लपेट सकता है यदि उन मैक्रो उचित या अपने कोड के लिए सुलभ नहीं हैं

+0

मुझे लगता है कि यह वास्तव में सबसे अच्छा विकल्प है। मुख्य दोष विशिष्ट कंपेलरों और अतीत/भविष्य/गैर-इंटेल प्रोसेसर की आवश्यक रखरखाव है। –

+0

तो आप क्या चाहते हैं? आपको पोर्टेबल समाधान पसंद नहीं है, और आपको प्रोसेसर विशिष्ट पसंद नहीं है। –

0

हाल ही में एक क्यूटी वितरण के include/arch/qatomic_*.h हेडर शामिल हैं (LGPL) आर्किटेक्चर का एक बहुत के लिए कोड और सभी प्रकार की मेमोरी बाधाएं (अधिग्रहण, रिलीज, दोनों)।

2

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

http://www.hpl.hp.com/research/linux/qprof/download.php4

4

उपयोग libatomic_ops। http://www.hpl.hp.com/research/linux/atomic_ops/

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

1

लिनक्स कर्नेल के लिए परिभाषित बाधाओं को उधार लेना, बस उन मैक्रोज़ को अपने हेडर फ़ाइल में जोड़ें: http://lxr.linux.no/#linux+v3.6.5/arch/x86/include/asm/barrier.h#L21। और निश्चित रूप से, लिनक्स डेवलपर्स को अपने स्रोत कोड में क्रेडिट दें।

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