IA32 मैनुअल से हवाला देते हुए (खंड 3 ए, अध्याय 8.2: स्मृति आदेश):
लिखने-वापस संचित करने योग्य के रूप में परिभाषित स्मृति क्षेत्रों के लिए एक एकल प्रोसेसर प्रणाली में, स्मृति आदेश मॉडल का अनुसरण का सम्मान करता है सिद्धांतों [..पढ़ता]
- पुस्तकें दूसरे के साथ पुनर्क्रमित नहीं कर रहे हैं
- लिखता बड़े पढ़ता
- स्मृति को लिखता अन्य लेखन के साथ पुनर्क्रमित नहीं कर रहे हैं,
CLFLUSH
के साथ निष्पादित
- राईट के अपवाद के साथ साथ पुनर्क्रमित नहीं कर रहे हैं निर्देश
- गैर-अस्थायी चाल निर्देशों ([यहां निर्देशों की सूची] के साथ निष्पादित स्ट्रीमिंग स्टोर्स (लिखते हैं))
- स्ट्रिंग ऑपरेशंस (से ई धारा 8.2.4.1)
- रीड को अलग-अलग स्थानों पर पुराने लिखने के साथ पुन: व्यवस्थित किया जा सकता है लेकिन पुराने स्थान के साथ समान स्थान पर नहीं लिखा जाता है।
- पढ़ता है या राईट आई/ओ निर्देश, बंद कर दिया निर्देश, या serializing निर्देश
- साथ पुनर्क्रमित नहीं किया जा सकता पुस्तकें पारित नहीं हो सकता
LFENCE
और MFENCE
निर्देश
- लिखता
SFENCE
और MFENCE
निर्देश
नोट पारित नहीं हो सकता : "एक एकल प्रोसेसर सिस्टम में" थोड़ा भ्रामक है। प्रत्येक नियम (लॉजिकल) प्रोसेसर के लिए व्यक्तिगत रूप से समान नियम होते हैं; मैनुअल कई प्रोसेसर के बीच अतिरिक्त ऑर्डरिंग नियमों का वर्णन करने के लिए चला जाता है। यह प्रश्न से संबंधित के बारे में केवल थोड़ा कि
संक्षेप में, जब तक आप, लिखने-वापस करने के लिए स्मृति (जो सभी स्मृति क्या तुमने कभी जब तक आप एक ड्राइवर या ग्राफिक्स प्रोग्रामर नहीं कर रहे हैं के रूप में देखेंगे) लिख रहे हैं के रूप में सबसे x86 निर्देश लगभग अनुक्रमिक रूप से सुसंगत हैं - केवल एक x86 सीपीयू निष्पादित कर सकता है, बाद में (स्वतंत्र) लिखने से पहले निष्पादित करने के लिए पढ़ता है। लिखने की बाधाओं के बारे में मुख्य बात यह है कि उनके पास lock
उपसर्ग (अंतर्निहित या स्पष्ट) है, जो सभी रीडरिंग को रोकता है और यह सुनिश्चित करता है कि एक बहु-प्रोसेसर सिस्टम में सभी प्रोसेसर द्वारा ऑपरेशन को उसी क्रम में देखा जाता है।
इसके अलावा, लिखने वाली मेमोरी में, पढ़े कभी भी पुन: व्यवस्थित नहीं होते हैं, इसलिए पढ़ने की बाधाओं की कोई आवश्यकता नहीं है। हालिया x86 प्रोसेसर में स्ट्रीमिंग स्टोर्स और लिखने-संयुक्त मेमोरी (आमतौर पर मैप किए गए ग्राफिक्स मेमोरी के लिए उपयोग किया जाता है) के लिए एक कमजोर स्मृति स्थिरता मॉडल है। यही वह जगह है जहां विभिन्न fence
निर्देश खेल में आते हैं; वे किसी भी अन्य मेमोरी प्रकार के लिए जरूरी नहीं हैं, लेकिन लिनक्स कर्नेल में कुछ ड्राइवर लिखने-संयुक्त मेमोरी से निपटते हैं, इसलिए उन्होंने इस तरह अपने पढ़ने-बाधा को परिभाषित किया है। मॉडल प्रति मेमोरी प्रकार ऑर्डर करने की सूची वॉल्यूम में धारा 11.3.1 में है। आईए -32 मैनुअल के 3 ए। लघु संस्करण: लिखें-थ्रू, लिखें-बैक और लिखें-संरक्षित सट्टा पढ़ने (ऊपर वर्णित नियमों का पालन करने) की अनुमति दें, अप्राप्य और मजबूत असुरक्षित मेमोरी में मजबूत ऑर्डर गारंटी है (कोई प्रोसेसर रीडरिंग नहीं, पढ़ता/लिखता है तुरंत एमएमआईओ के लिए उपयोग किया जाता है) और लिखें संयुक्त मेमोरी में कमजोर ऑर्डरिंग है (यानी आराम से आदेश देने वाले नियम जिन्हें बाड़ की आवश्यकता है)।
स्रोत
2010-11-20 22:00:22
अगर मैं साझा मेमोरी को लिखता हूं और 'लॉक' कहता हूं; addl $ 0,0 (%% esp) 'या 'sfence', क्या मुझे स्मृति पढ़ने से पहले अन्य प्रक्रिया/धागे में' lfence' को कॉल करने की आवश्यकता है? या क्या लॉक/स्फेन्स निर्देश स्वयं ही गारंटी देता है कि अन्य सीपीयू डेटा देखते हैं? – Hongli
हां, उपसर्ग गारंटी लॉक करें कि निर्देश का परिणाम तुरंत ग्लोबली दिखाई देता है। –
मान लीजिए कि सीपीयू एसएसई का समर्थन करता है लेकिन एसएसई 2 नहीं। मैं 'sfence' का उपयोग करता हूं लेकिन' lfence' का उपयोग नहीं कर सकता। क्या मुझे 'लॉक का उपयोग करने की ज़रूरत है; रीड बाrier के रूप में जोड़ें, या क्या मैं एक पढ़ने बाधा का उपयोग नहीं कर सकता? – Hongli