मुझे पता है कि जब एक पेज कैश पेज को संशोधित किया जाता है, तो इसे गंदे के रूप में चिह्नित किया जाता है और इसे राइटबैक की आवश्यकता होती है, लेकिन तब क्या होता है:
परिदृश्य: फ़ाइल / एप्लिकेशन / EXE, जो एक निष्पादन योग्य फ़ाइल है, पृष्ठ कैश में पूरी तरह से पृष्ठांकित है (इसके सभी पृष्ठ कैश / मेमोरी में हैं) और प्रक्रिया पी द्वारा निष्पादित किया जा रहा है।
निरंतर रिलीज तो एक नया निष्पादन योग्य के साथ बदल देता है / क्षुधा / EXE।
मान 1: मैं यह मानता हूं कि P (और किसी और को फ़ाइल डिस्क्रिप्टर के साथ पुराने निष्पादन योग्य का उल्लेख करते हुए) प्रक्रिया का उपयोग पुराने, मेमोरी / एप्स / EXE में बिना किसी समस्या के करना जारी रखेगा, और कोई भी नई प्रक्रिया जो उस पथ को निष्पादित करने की कोशिश करेगी नया निष्पादन योग्य।
अनुमान 2: मेरा मानना है कि यदि फ़ाइल के सभी पृष्ठों को स्मृति में मैप नहीं किया जाता है, तो यह तब तक ठीक रहेगा जब तक कि फ़ाइल में पेज की आवश्यकता वाले पेज की गलती नहीं होती है, जिन्हें प्रतिस्थापित किया गया है, और शायद एक segfault होगा?
प्रश्न 1: यदि आप फ़ाइल के सभी पन्नों को mmtouch की तरह लगाते हैं, तो क्या इससे परिदृश्य बदल जाता है?
प्रश्न 2: यदि / apps / EXE एक दूरस्थ NFS पर है, तो क्या इससे कोई फर्क पड़ेगा? (मुझे नहीं लगता)
कृपया मेरी 2 मान्यताओं को सही या मान्य करें और मेरे 2 प्रश्नों का उत्तर दें।
मान लेते हैं कि यह एक CentOS 7.6 बॉक्स है, जिसमें कुछ 3.10.0-957.el7 कर्नेल है
अद्यतन: इसके बारे में आगे सोचते हुए, मुझे आश्चर्य है कि अगर यह परिदृश्य किसी भी अन्य गंदे पृष्ठ परिदृश्य से अलग नहीं है ..
मुझे लगता है कि नई बाइनरी लिखने वाली प्रक्रिया एक रीड करेगी और सभी कैश पेज प्राप्त करेगी क्योंकि यह सभी पृष्ठांकित है, और फिर उन सभी पृष्ठों को गंदा किया जाएगा। यदि उन्हें झुलाया जाता है, तो वे केवल बेकार पृष्ठ होंगे जो कोर मेमोरी पर कब्जा कर लेते हैं क्योंकि रिफ गणना शून्य हो जाती है।
मुझे संदेह है कि जब वर्तमान में निष्पादित कार्यक्रम समाप्त हो जाते हैं, तो कुछ भी नया बाइनरी का उपयोग करेगा। यह मानते हुए कि यह सब सही है, मुझे लगता है कि यह केवल दिलचस्प है जब फ़ाइल में से कुछ में ही पृष्ठांकित है।