यह पूछे जाने के बाद से थोड़ी देर हो गई है, लेकिन मुझे अनाथ सवालों से नफरत है :)
सबसे पहले, चलो एक आधुनिक x86 प्लेटफ़ॉर्म को सरल करते हैं और दिखाते हैं कि इसमें 0x00000000 से 0xFFFFFFFF तक पता स्थान के 32-बिट्स हैं। हम सभी विशेष / आरक्षित क्षेत्रों, TOLUD (निचले प्रयोग करने योग्य DRAM, इंटेल पार्लेंस के ऊपर) आदि को अनदेखा करेंगे, हम इस सिस्टम को मेमोरी मैप कहेंगे ।
दूसरा, पीसीआई एक्सप्रेस पीसीआई का विस्तार करता है । एक सॉफ्टवेयर दृष्टिकोण से, वे बहुत, बहुत समान हैं।
मैं आपके तीसरे स्थान पर जाऊंगा - कॉन्फ़िगरेशन स्पेस - पहले। कॉन्फ़िगरेशन स्थान को इंगित करने वाले किसी भी पते को सिस्टम मेमोरी मैप से आवंटित किया जाता है । एक PCI डिवाइस में 256 बाइट कॉन्फ़िगरेशन स्थान था - यह PCI एक्सप्रेस के लिए 4KB तक विस्तारित है। यह 4KB स्पेस सिस्टम मेमोरी मैप से मेमोरी एड्रेस की खपत करता है , लेकिन वास्तविक मान / बिट्स / कंटेंट को आमतौर पर पेरिफेरल डिवाइस पर रजिस्टरों में लागू किया जाता है। उदाहरण के लिए, जब आप वेंडर आईडी या डिवाइस आईडी पढ़ते हैं, तो लक्ष्य परिधीय उपकरण डेटा को वापस कर देगा भले ही उपयोग किया जा रहा मेमोरी एड्रेस सिस्टम मेमोरी मैप से हो।
आपने कहा कि ये "RAM में आवंटित" हैं - सच नहीं है, वास्तविक बिट्स / स्टेटफुल तत्व परिधीय डिवाइस में हैं। हालाँकि, उन्हें सिस्टम मेमोरी मैप में मैप किया जाता है। इसके बाद, आपने पूछा कि क्या यह सभी PCIe उपकरणों में रजिस्टरों का एक सामान्य सेट था - हाँ और नहीं। जिस तरह से पीसीआई कॉन्फिगरेशन स्पेस काम करता है, प्रत्येक सेक्शन के अंत में एक पॉइंटर होता है जो इंगित करता है कि क्या पढ़ा जाना "अधिक" है। एक नंगे न्यूनतम है जिसे सभी PCIe उपकरणों को लागू करना है, और फिर अधिक उन्नत उपकरण अधिक कार्यान्वित कर सकते हैं। कार्यात्मक संचालन के लिए यह कितना उपयोगी है, ठीक है, यह अनिवार्य और भारी उपयोग है। :)
अब, BARs (आधार पता रजिस्टर) के बारे में आपका प्रश्न मेमोरी स्पेस और I / O स्पेस में सेगमेंट करने के लिए एक अच्छा स्थान है। कुछ हद तक x86 सेंट्रिक होने के नाते, विनिर्देश प्रकार के अलावा, BAR आकार के विनिर्देशन की अनुमति देता है। यह एक डिवाइस को एक नियमित मेमोरी-मैप्ड BAR, या एक IO स्पेस BAR के लिए अनुरोध करने की अनुमति देता है, जो कि I / O स्पेस के 4K में से कुछ खाता है, जो एक x86 मशीन है। आप देखेंगे कि PowerPC मशीनों पर, I / O स्पेस बार बेकार हैं।
एक BAR मूल रूप से होस्ट को यह बताने के लिए डिवाइस का तरीका है कि उसे कितनी मेमोरी की आवश्यकता है, और किस प्रकार (ऊपर चर्चा की गई है)। अगर मैं 1MB मेमोरी-मैप स्पेस के लिए कहूं, तो BIOS मुझे 0x10000000 से 0x10100000 तक का पता दे सकता है। यह भौतिक रैम का उपभोग नहीं कर रहा है , बस पता स्थान (क्या आप अब देखते हैं कि 32-बिट सिस्टम उच्च-अंत GPU के साथ विस्तार कार्ड के साथ मुद्दों में क्यों चलते हैं जिनमें GB की RAM है?)। अब 0x10000004 को लिखने के लिए एक मेमोरी लिखने / पढ़ने के लिए PCI एक्सप्रेस डिवाइस पर भेजा जाएगा, और यह एक बाइट-वाइड रजिस्टर हो सकता है जो एल ई डी से जुड़ता है। इसलिए अगर मैं 0xFF को फिजिकल मेमोरी एड्रेस 0x10000004 पर लिखता हूं, तो यह 8 एलइडी को चालू करेगा। यह मेमोरी-मैप्ड I / O का मूल आधार है ।
I / O स्पेस समान रूप से व्यवहार करता है, सिवाय इसके कि यह एक अलग मेमोरी स्पेस, x86 I / O स्पेस में संचालित होता है। पता 0x3F8 (COM1) I / O स्पेस और मेमोरी स्पेस दोनों में मौजूद है और दो अलग-अलग चीजें हैं।
आपका अंतिम प्रश्न, संदेश एक नए प्रकार के व्यवधान तंत्र को संदर्भित करते हैं, संदेश लघु के लिए संकेतित रुकावट या एमएसआई। लीगेसी PCI डिवाइस में चार इंटरप्ट पिन, INTA, INTB, INTC, INTD थे। इन्हें आम तौर पर स्लॉट्स के बीच में स्वाइप किया जाता था जैसे कि INTA स्लॉट 0 पर INTA गया, फिर स्लॉट 1 पर INTB, फिर स्लॉट 2 पर INTC, स्लॉट 3 पर INTD, और फिर स्लॉट 4 पर INTA में वापस लौटा। इसका कारण यह है कि अधिकांश PCI उपकरणों ने केवल INTA को लागू किया और इसे स्वाइप करके, तीन उपकरणों का कहना है, प्रत्येक अंतरायन नियंत्रक के लिए अपने स्वयं के रुकावट संकेत के साथ समाप्त होगा। MSI पीसीआई एक्सप्रेस प्रोटोकॉल लेयर का उपयोग करते हुए सिग्नल को बाधित करने का एक तरीका है, और PCIe रूट कॉम्प्लेक्स (होस्ट) सीपीयू को बाधित करने का ध्यान रखता है।
यह उत्तर आपको मदद करने में बहुत देर कर सकता है, लेकिन शायद यह भविष्य के कुछ Googler / Binger की मदद करेगा।
अंत में, मैं आपको किसी भी आगे जाने से पहले PCI से एक अच्छा, विस्तृत परिचय प्राप्त करने के लिए Intel से इस पुस्तक को पढ़ने की सलाह देता हूं । एक अन्य संदर्भ लिनक्स डिवाइस ड्राइवर्स, LWN से एक ऑनलाइन ebook होगा ।