मान लें कि हमें पृष्ठ कैश किए गए फ़ाइल के पता स्थान से struct page
मिल गया है।किसी संरचित पृष्ठ से संबंधित डेटा का भौतिक पता कैसे प्राप्त करें?
हम इस struct page
से 4 केबी डेटा का प्रारंभिक भौतिक पता कैसे प्राप्त कर सकते हैं?
मुझे लगता है कि data
पॉइंटर struct sk_buff
के अंदर कुछ होना चाहिए, लेकिन मुझे यह नहीं मिला।
जवाब के लिए संपादित करें
धन्यवाद चटाई और llya।
उत्तर देखने के बाद, मुझे लगता है कि पहली समस्या यह पहचानना है कि struct page
ZONE_NORMAL
या ZONE_HIGHMEM
में स्थित है या नहीं।
फ़ाइल I/O के दौरान, जब हमें कैश किए गए पृष्ठ नहीं मिलते हैं, तो हम पहले page_cache_alloc_cold()
का उपयोग करके एक नया पृष्ठ आवंटित करेंगे। page_cache_alloc_cold()
अंततः alloc_pages()
पर कॉल करेगा जो ऐसा लगता है कि यह ZONE_HIGHMEM
(जो x86 में है, कर्नेल मेमोरी एरिया PAGE_OFFSET
+ 896M) से शुरू हो जाएगा।
तो
- मुझे लगता है कि चटाई के जवाब
ZONE_NORMAL
- मान लीजिए हम
kmap()
का उपयोग struct पृष्ठ से संबद्ध 4KB डेटा के शुरू भौतिक पता खोजने के लिए पृष्ठों के लिए उपयुक्त है, यह है कि हम चाहिए सही है भौतिक पता खोजने के लिए(unsigned long)(&page)-PAGE_OFFSET
का उपयोग करें जहां संरचना को स्वयं स्टोर करता है?
कृपया सही करें।
'mem_map' सरणी में किसी आइटम के रूप में' पृष्ठ' के बारे में सोचें। –