9

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

यदि पुन: निर्धारित होता है, तो "शेड्यूल()" कहां कॉल किया जाता है? Mm/swap_state.c में कोड को पढ़ना मुझे यह संकेत नहीं देता है कि यह कब होता है (या अगर) ऐसा होता है।

उत्तर

7

यदि कोई पृष्ठ भौतिक स्मृति में नहीं है, तो पृष्ठ को पढ़ने तक प्रक्रिया अवरुद्ध हो जाती है, मुझे लगता है कि आप गलत जगह शेड्यूल देख रहे हैं पृष्ठ गलती हैंडलर या जो कुछ भी कॉल करता है, वह होना चाहिए। section 9.4. "Page Fault Exception Handler" of "Understanding the Linux Kernel" book में अधिक जानकारी नहीं है, मैं बोली:

handle_mm_fault() फ़ंक्शन VM_FAULT_MINOR या VM_FAULT_MAJOR अगर यह प्रक्रिया के लिए एक नया पृष्ठ फ्रेम का आवंटन करने में सफल रहा। मान VM_FAULT_MINOR इंगित करता है कि पृष्ठ फॉल्ट में को वर्तमान प्रक्रिया को अवरुद्ध किए बिना संभाला गया है; इस प्रकार का पृष्ठ दोष को मामूली गलती कहा जाता है। मूल्य VM_FAULT_MAJOR इंगित करता है कि पृष्ठ दोष मौजूदा प्रक्रिया मजबूर सोने के लिए

+0

वहाँ do_page_fault में एक might_sleep() कॉल() (मिमी/fault.c) है हो सकता है कि प्रक्रिया का कारण होगा "रोका जा करने के लिए "बाद में - जैव जमा करने के बाद। – dividebyzero

+1

@dividebyzero no 'may_sleep()' अंक फ़ंक्शन जो सो सकते हैं, मुझे लगता है कि आप 'cond_resched()' – iabdalkader

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