أعماق ذاكرة Windows (الجزء 2) — حياة الصفحة الفعلية: خمس قوائم وحقيقة ملف الصفحات

· · Windows, إدارة الذاكرة, ملف الصفحات, Working Set, Standby, RAMMap, مراقبة الأداء

في المقالة السابقة، «أعماق ذاكرة Windows (الجزء 1) — اللحظة التي يصبح فيها العنوان الافتراضي ذاكرة RAM فعلية»، تتبعنا حتى لحظة تخصيص معالج خطأ الصفحة صفحة فعلية عند أول لمس لصفحة مُثبَتة (Commit). فأين تذهب تلك الصفحة الفعلية بعد إخراجها من Working Set؟

كثيرًا ما تُختصر الشرح إلى «تُطرد إلى ملف الصفحات»، لكن في الواقع توجد عدّة حالات قبل ذلك وبعده. الصفحة غير المعدّلة يمكن أن تنتقل إلى Standby مع بقاء محتواها. الصفحة المعدّلة تنتظر أولًا إعادة الكتابة على Modified. عند إعادة الاستخدام قد تمرّ بـ Free أو Zeroed، وإذا احتيج المحتوى نفسه من جديد يمكن أن تعود من Standby بخطأ ليّن (soft fault).

تتخذ هذه المقالة قاعدة PFN محورًا وتتبع كيف تتحرّك صفحة فعلية واحدة عبر Active وModified وStandby وFree وZeroed. قراءة الأرقام نفسها تفترض مقالة المقدّمة «What Does Windows’ “Memory Usage” Actually Mean? — Correctly Reading Working Set, Private Bytes, Commit, and the Page File».

«أعماق ذاكرة Windows» — الأجزاء الثلاثة كلّها

  1. الجزء 1: العناوين الافتراضية وأخطاء الصفحات
    نتبع متى تحصل صفحة افتراضية مُثبَتة على RAM فعلية.
  2. الجزء 2 (هذه المقالة): حياة الصفحة الفعلية
    نتبع انتقالات حالة صفحة تغادر Working Set، ودور ملف الصفحات.
  3. الجزء 3: كائنات القسم والنسخ عند الكتابة
    نتبع الآلية التي تتشارك بها DLL وتعيينات الملفات والذاكرة المشتركة الصفحات الفعلية.

السؤال الذي يجيب عنه الجزء 2 واحد فقط.

هل تختفي الصفحة الفعلية التي تغادر Working Set، أم تذهب إلى القرص، أم تبقى في RAM؟

القرّاء المقصودون مطوّرون ومشغّلون يريدون أن يفهموا من الآلية لماذا يكون Available مرتفعًا وStandby مرتفعًا أيضًا، والسلوك بعد تقليم Working Set، وإعداد ملف الصفحات، وضغط الذاكرة. المتطلّبات Windows 10/11 أو إصدار حالي من Windows Server، والخلفية المطلوبة أساسيات Working Set وCommit والأخطاء الليّنة/الصلبة. الصعوبة متوسّطة؛ نستخدم مصطلحات داخلية مثل PFN وقوائم الصفحات، لكن نركّز على ما يمكن رصده بـ RAMMap وPerfMon دون منقّح نواة.

1. الخلاصة أوّلًا

للبدء، هذه النقاط سهلة القراءة خطأً.

  • الصفحة التي تغادر Working Set لا تختفي بالضرورة فورًا.
    الصفحة النظيفة تبقى على Standby ويمكن أن تعود دون قراءة القرص إذا احتيج المحتوى نفسه.
  • الصفحة المعدّلة لا يمكن إعادة استخدامها فورًا.
    المحتوى الخاص يصبح قابلًا لإعادة الاستخدام بعد إمكان كتابته إلى ملف الصفحات؛ والملف المعيَّن بعد إمكان كتابته إلى الملف المقابل؛ وهكذا.
  • Available يتضمّن Standby.
    Standby ذاكرة مؤقتة ما زالت تحمل محتوى، وفي الوقت نفسه مرشّح إعادة استخدام يمكن أخذه فورًا عند الحاجة.1
  • الكتابة إلى ملف الصفحات ليست دفعة تبدأ فقط بعد نفاد RAM بالكامل.
    تتقدّم في الخلفية وفق قائمة Modified وضغط الذاكرة.23
  • ملف الصفحات ليس مجرّد «RAM بطيئة».
    يوسّع Commit Limit، ويصبح مخزن الدعم للصفحات الخاصة المعدّلة، ويدعم تفريغات التعطل.4
  • تعطيل ملف الصفحات لا يصلح تسرّب ذاكرة.
    ينخفض Commit Limit، وقد تُفقد خيارات استخدام RAM بفعالية والقدرة على التقاط التفريغات.

في جملة واحدة: قبل أن يتجاهل Windows صفحة، يتحقّق من احتمال الحاجة إليها من جديد وممّا إذا وُجد مكان يمكن منه استعادة المحتوى الأصلي.

2. قاعدة PFN — دفتر الحساب من جانب RAM الفعلية

مثّلت PTE التي رأيناها في الجزء 1 الترجمة من صفحة افتراضية إلى صفحة فعلية. دفتر الحساب الذي ينظر إلى هذا من جانب الصفحة الفعلية ويتبع «لأيّ شيء تُستخدم صفحة RAM هذه الآن» هو قاعدة PFN. PFN اختصار Page Frame Number: RAM الفعلية مرقّمة بوحدات الصفحة.

يتتبّع إدخال PFN مفهوميًا المعلومات التالية.

  • الحالة الحالية للصفحة الفعلية
  • عدّاد المراجع وعدّاد المشاركة
  • PTE المقابلة
  • ما إذا كانت معدّلة
  • أيّ قائمة صفحات تنتمي إليها
  • معلومات تتعلّق بعقدة NUMA والأولوية

في WinDbg يعرض !pfn معلومات PFN معيّن، ويعرض !memusage استخدام الذاكرة الفعلية ومجاميع كل قائمة صفحات.56 إن أردت رصد العالم نفسه دون منقّح نواة، يتوفّر Sysinternals RAMMap. Use Counts يعرض الغرض وقائمة الصفحات، وPriority Summary يعرض Standby حسب الأولوية، وPhysical Pages يعرض الاستخدام لكل صفحة.7

3. ربط الحالات الخمس في رسم واحد

تعالج هذه المقالة تدفّق الصفحة الفعلية كالحالات الخمس التالية مبسّطة. بدقّة، لدى Windows الحالي حالات وقوائم غير مرسومة هنا — Standby حسب الأولوية، وTransition، وBad، وغيرها — وActive يشير أقلّ إلى «قائمة Active» واحدة منه إلى حالة الإشارة من Working Set أو نحوه عبر PTE صالح. ومع ذلك هذا الرسم أكثر من مفيد لقراءة سلوك ذاكرة التطبيق.

رسم مبسّط لصفحة Windows فعلية تتحرّك عبر Active وModified وStandby وFree وZeroed

الشكل 1: صفحة مشار إليها في Working Set تنتقل إلى Standby إن كانت نظيفة وإلى Modified إن كانت متّسخة. يمكن أن يعود المحتوى نفسه؛ وغرض آخر يعيد استخدام الصفحة مباشرة أو يمرّ بـ Free/Zeroed استعدادًا لتخصيص يتطلّب أصفارًا.

مصدر Mermaid للشكل 1 ```text flowchart LR zeroed["Zeroed\nمصفّرة"] -->|أول Touch| active["Active / Valid\nمشار إليها في Working Set"] active -->|قص clean| standby["Standby\nمرشّحة لإعادة الاستخدام مع المحتوى"] active -->|قص dirty| modified["Modified\nتنتظر الكتابة العكسية"] modified -->|اكتملت الكتابة| standby standby -->|عودة بخطأ صفحة ليّن| active standby -->|تجاهل الهوية القديمة| free["Free\nغير مصفّرة"] standby -->|إعادة استخدام مباشرة لغرض آخر| active free -->|لتخصيص يحتاج أصفاراً| zeroed ```

أهمّ نقطة في هذا الرسم أن مغادرة Working Set وفقدان المحتوى ليسا الشيء نفسه. كذلك، عندما تُؤخذ صفحة Standby لغرض آخر، لا تمرّ بالضرورة عبر Free/Zeroed بالترتيب. إن سُلّمت لوضع المستخدم كصفحة خاصة demand-zero جديدة، يجب محو المحتوى القديم؛ وإن ستُكتب الصفحة كلّها كما في وجهة قراءة ملف، يمكن إسقاط هوية Standby وإعادة استخدام الصفحة مباشرة.

4. Active / Valid — صفحة فعلية يمكن الإشارة إليها الآن

تُشار إلى صفحة Active/Valid من Working Set لعملية أو من فضاء النظام عبر PTE صالح. يصل إليها المعالج بالترجمة العادية للعناوين، لذا الوصول نفسه لا يحتاج خطأ صفحة.

غير أنّه لا ضمان أن تبقى الصفحة Active. للحفاظ على ذاكرة متاحة ينظر مدير الذاكرة إلى حجم Working Set ومدى حداثة استخدام الصفحة وعوامل مشابهة، ويقلّم الصفحات المرشّحة. توثيق Microsoft لـ Working Set يشرح أيضًا أن مدير الذاكرة يزيل صفحات من Working Set لإنشاء ذاكرة متاحة.8

4.1. التقليم ليس تحريرًا

ما يغيّره تقليم Working Set أساسًا هو حالة الإقامة القابلة للإشارة فورًا عبر PTE صالح. ميّز الأربعة التالية كأحداث منفصلة.

  • الإزالة من Working Set
  • تحرير Commit
  • تحرير نطاق عنوان افتراضي
  • فقدان البيانات الأصلية

تشغيل EmptyWorkingSet أو «Trim Working Set» لأداة ليس بديلًا عن VirtualFree أو تحرير الكومة. إن لمست الصفحة نفسها من جديد تعود بخطأ ليّن من Standby أو خطأ صلب من مخزن دعم. لذا «صغّرت Working Set» لا تعني «أصلحت التسرّب».

5. الصفحة النظيفة تذهب إلى Standby

حتّى بعد إزالة الصفحة من Working Set، إن طابق محتواها الملف الأصلي أو كان لها مخزن دعم آمن أصلًا، يمكن وضعها على Standby. أمثلة تمثيلية:

  • شيفرة EXE/DLL غير معدّلة
  • ملف معيَّن في الذاكرة غير معدّل
  • صفحة خاصة كُتبت بالفعل
  • بيانات باقية في ذاكرة الملفات المؤقتة

تحافظ صفحة Standby على تطابقها مع المحتوى السابق. عندما تحتاج العملية نفسها أو عملية أخرى ذلك المحتوى، إن لم تُعاد استخدام الصفحة بعد، يكفي خطأ ليّن يعيد ربط PTE لاستعادتها.

من الجهة الأخرى، إن احتاج تخصيص آخر صفحة فعلية، يمكن التخلّي عن هوية Standby القديمة وإعادة استخدام الصفحة. إن كانت وجهة إعادة الاستخدام صفحة خاصة لوضع المستخدم تتطلّب تهيئة صفرية، تُعدّ صفحة Zeroed؛ وإن ستُكتب الصفحة كلّها بمحتوى ملف أو نحوه، يمكن إعادة تعيينها مباشرة دون تصفير.

هذا الوجهان هما تحديدًا سبب كون Standby ذاكرة مؤقتة وAvailable في آن.

5.1. لماذا يتضمّن Available Standby

يمثّل MEMORYSTATUSEX.ullAvailPhys الذاكرة الفعلية التي يمكن إعادة استخدامها فورًا دون كتابة إلى القرص، وهو مجموع Standby وFree وZeroed.1

قوائم الصفحات الثلاث التي تكوّن Availableالذاكرة الفعلية المتاحة مجموع Standby وFree وZeroed؛ صفحات Active المشار إليها في Working Set غير مضمّنةغير مضمّنةStandby(مرشّح إعادة استخدام يحفظ محتواه)Available(ذاكرة فعلية متاحة)Free(غير مستخدمة، غير مصفّرة)Zeroed(غير مستخدمة ومصفّرة)Active(مشار إليها في Working Set)

الشكل 2: Available مجموع Standby وFree وZeroed. Standby التي ما زالت تحمل محتواها تُحسب أيضًا «متاحة».

لذا لا تناقض عندما يعرض مدير المهام «Free منخفض، لكن Cached/Standby مرتفع وAvailable كافٍ». Windows لا يترك RAM الحرّة خاملة؛ يترك الملفات والشيفرة المستخدمة حديثًا على Standby لتعاد استخدامها سريعًا كذاكرة مؤقتة عند الحاجة، ويأخذها إن احتاجها غرض آخر.

لا تستنتج «Free منخفض، إذن ينقصنا الذاكرة فورًا»؛ انظر Available وCommit والأخطاء الصلبة وتأخير المعالجة معًا.

6. الصفحة المتّسخة تنتظر على Modified

عندما يكتب تطبيق إلى صفحة، لم يعد ذلك المحتوى يطابق مخزن الدعم الأصلي. الكتابة فوق تلك الصفحة المتّسخة لغرض آخر تفقد البيانات. لذا تنتظر صفحة معدّلة أُخرجت من Working Set إعادة الكتابة على Modified.

وجهة إعادة الكتابة تعتمد على نوع الصفحة.

نوع الصفحة وجهة إعادة الكتابة النموذجية
صفحة خاصة مُثبَتة ملف الصفحات
ملف معيَّن قابل للكتابة ملف البيانات المقابل
بيانات متّسخة في ذاكرة الملفات المؤقتة ملف البيانات المقابل
صفحة EXE/DLL نظيفة لا حاجة لإعادة الكتابة. يمكن إعادة القراءة من الصورة الأصلية

توثيق Microsoft لملف الصفحات يشرح أيضًا أن ملفات .dll و.exe والملفات العادية الموجودة أصلًا على القرص لا تحتاج كتابة مرّة أخرى إلى ملف الصفحات، وأن البيانات المعدّلة بلا نسخة قرص أصلية هي ما يصبح مرشّحًا لملف الصفحات.2

6.1. Modified Page Writer

Modified Page Writer عامل نظام يمسح الصفحات المتّسخة المدعومة بملف الصفحات التي يتتبّعها مدير الذاكرة ويكتبها إلى ملف الصفحات.3 في جانب الملف المعيَّن توجد مسارات مثل Mapped Page Writer تتعاون مع نظام الملفات ومدير الذاكرة المؤقتة للكتابة إلى الملف المقابل.

النقطة المهمّة هنا أن الكتابة ليست مخطط «لا تفعل شيئًا حتّى تصبح RAM صفر بايت». يعدّ Windows في الخلفية صفحات يمكن إعادة استخدامها لاحقًا وفق قائمة Modified وAvailable وحالة ملف الصفحات وعوامل مشابهة. عندما تنتهي إعادة الكتابة ولا توجد مراجع صالحة أخرى، تتقدّم الصفحة إلى Standby بمحتواها كما هو.

مسارات إعادة كتابة صفحة معدّلةصفحة معدّلة تغادر Working Set تنتظر على قائمة Modified؛ للصفحة الخاصة إن وُجد ملف صفحات يكتبها Modified Page Writer إلى ملف الصفحات، وصفحة ملف معيَّن تُكتب إلى ملف البيانات المقابل بواسطة Mapped Page Writer أو نحوه، ثم تتقدّم إلى Standby بمحتواها كما هوصفحة خاصة(عند تكوين ملف صفحات)صفحة ملف معيَّنصفحة معدّلة غادرت Working Setانتظار إعادة الكتابة على قائمة ModifiedModified Page Writer يكتب إلى ملف الصفحاتMapped Page Writer أو نحوه يكتب إلى الملف المقابلبعد إعادة الكتابة، إلى Standby بالمحتوى كما هو

الشكل 3: وجهة إعادة الكتابة تُحدَّد بنوع الصفحة، والمساران يتقدّمان في الخلفية. على نظام معطّل فيه ملف الصفحات لا وجهة إعادة كتابة لجانب الصفحة الخاصة، لذا تبقى الصفحات الخاصة المعدّلة في RAM.

6.2. فصل إخراج الصفحات عن الإدخال/الإخراج الخاص بملف الصفحات

العدادات التالية سهلة الخلط؛ أكّد معانيها.

  • Memory\\Page Writes/sec: عدد عمليات إدخال/إخراج الكتابة للصفحات الصادرة لتحرير ذاكرة فعلية
  • Memory\\Pages Output/sec: عدد الصفحات المكتوبة إلى القرص بتلك الكتابات
  • Memory\\Page Reads/sec: عدد عمليات إدخال/إخراج القراءة من القرص الصادرة لحلّ أخطاء صلبة
  • Memory\\Pages Input/sec: عدد الصفحات التي دخلت RAM من تلك القراءات

لاحظ أن Page Writes/sec وPages Output/sec ليسا عدّادين يحدّدان ملف الصفحات وحده. يمكن أن يرتفعا أيضًا على مسار إعادة كتابة صفحات متّسخة مدعومة بملف، مثل الملفات المعيَّنة. بالمقابل، جانب الإدخال لا يميّز أيضًا ملف الصفحات وDLL وEXE والملفات المعيَّنة في الذاكرة.2 إن أردت تحديد إدخال/إخراج خاص بـ pagefile.sys فلا تقدّر من هذه العدادات الأربعة وحدها؛ سجّل File I/O وDisk I/O بـ ETW/WPA وأكّد الملف المستهدف بمطابقة FileObject وFileName.9

نقطة أخرى: الكتابة أولًا إلى ملف الصفحات لا تعني القراءة فورًا من القرص. إن لم يُوصَل إلى الصفحة يمكن إخراج الصفحة المعاد كتابتها من RAM وإعطاء الذاكرة الفعلية لصفحات تُستخدم أكثر.

7. الفرق بين Standby وFree وZeroed

7.1. Standby

حالة ما زالت تحفظ التطابق مع المحتوى السابق.

  • إن احتيج المحتوى نفسه يمكن أن تعود بخطأ ليّن
  • إن احتاجها غرض آخر يمكن التخلّي عن الهوية القديمة وإعادة استخدامها
  • توجد قوائم Standby حسب الأولوية

7.2. Free

فُقد التطابق الصالح مع المحتوى السابق، والصفحة قابلة للتخصيص. غير أن النمط البتّي القديم قد يبقى في الصفحة. تسليمها لوضع المستخدم كما هي يخاطر بتسريب معلومات العملية السابقة.

7.3. Zeroed

المحتوى أصفار، ويمكن تسليم الصفحة بأمان كصفحة وضع مستخدم جديدة. خطأ demand-zero في الجزء 1 كان حالة تمثيلية للحصول على صفحة Zeroed متاحة وربطها بـ PTE. الإعداد من Free إلى Zeroed يتم وفق الطلب وحالة النظام.

لذا رغم أن «Free» و«Zeroed» تبدوان غير مستخدمتين، تختلفان في الجاهزية المتعلّقة بالأمان.

8. مخزن ضغط الذاكرة — إنشاء وجهة أخرى داخل RAM

من Windows 10 فصاعدًا، عند ضغط الذاكرة يمكن لمدير الذاكرة في بعض الحالات ضغط صفحات قليلة الاستخدام في RAM بدل كتابتها إلى القرص فورًا. مجموعة الصفحات المضغوطة تلك هي مخزن الضغط.

في تنفيذ Windows 10 المبكّر حُسب مخزن الضغط داخل Working Set لعملية System، لكن على Windows الحالي يظهر في قوائم عمليات المنقّح كعملية Memory Compression مخصّصة. لذا عند التحقيق في مقدار الضغط الحالي لا تتبع Working Set لعملية System وحده. الغرض نفسه — إبقاء مزيد من التطبيقات في الذاكرة الفعلية وتقليل إدخال/إخراج القرص — لم يتغيّر.1011

لكن ضع النقاط التالية في بالك.

  • الصفحات المضغوطة ما زالت تستخدم RAM
  • للضغط وفكّه تكلفة معالج
  • الضغط لا يمحو وعد Commit
  • لا ترتيب ثابت «دائمًا اضغط ثم ملف الصفحات»
  • تتغيّر السياسة بنوع الصفحة والضغط وتاريخ الوصول

«قيد الاستخدام (مضغوط)» في مدير المهام لا يعني أن الضغط أفرغ الذاكرة الفعلية بالكامل. مخزن الضغط ليس ميزة تجعل ملف الصفحات غير ضروري؛ يضيف خيارًا يستخدم المعالج لتقليل الإدخال/الإخراج بين RAM والتخزين.

9. الدور الحقيقي لملف الصفحات

لملف الصفحات ثلاثة أدوار على الأقل.

ثلاثة أدوار لملف الصفحاتملف الصفحات يوسّع Commit Limit ويصبح مخزن دعم للصفحات الخاصة المعدّلة قليلة الوصول ويصبح وعاء تفريغ تعطل النظامملف الصفحاتتوسيع Commit Limit(هامش في جانب السقف)مخزن دعم للصفحات الخاصة المعدّلةوعاء تفريغ تعطل النظام

الشكل 4: دور ملف الصفحات ليس «RAM بطيئة» فقط. حتّى عندما يكون الاستخدام 0 ما زال يدعم السقف والتفريغات.

9.1. توسيع Commit Limit

يُحدَّد Commit Limit للنظام تقريبًا بـ RAM زائد مجموع كل ملفات الصفحات. بلا ملف صفحات ينخفض Commit Limit إلى مستوى أصغر قليلًا من RAM المثبّتة. عندما يبلغ Commit Total السقف يفشل Commit جديد ويمكن أن يؤدّي إلى إنهاء غير طبيعي للتطبيق أو متاعب نظام.4

هذا أمر مختلف عن «كم غيغابايت مكتوب الآن في pagefile.sys». ملف الصفحات أيضًا هامش في جانب السقف يدعم وعد Commit.

9.2. دعم الصفحات الخاصة المعدّلة

إن دُعمت الصفحات الخاصة المعدّلة قليلة الوصول بملف الصفحات يمكن إخراج تلك الصفحات الفعلية من RAM وإعطاؤها للشيفرة والبيانات المستخدمة كثيرًا.4 تعطيل ملف الصفحات يقلّل خيار إخراج مثل هذه الصفحات من RAM. لا يمكن القول ببساطة «سريع لأن الإخراج إلى القرص لا يحدث».

9.3. دعم تفريغات تعطل النظام

لإنتاج Memory.dmp عند تعطل النظام تحتاج ملف صفحات أو ملف تفريغ مخصّصًا يمكنه دعم طريقة التفريغ التي اخترتها.2 التفريغ الكامل للذاكرة وتفريغ ذاكرة النواة والتفريغ التلقائي للذاكرة تختلف في المقدار المطلوب.

في بيئة تحقق في الأعطال، حذف ملف الصفحات فقط لتوفير المساحة قد يعني غياب الدليل حين تحتاجه أكثر. لطرق الجمع انظر أيضًا «جمع crash dumps لتطبيقات Windows: متى تبدأ بـ WER أو ProcDump أو WinDbg».

10. الحجم المناسب ليس موحّدًا

لا ينبغي تقرير حجم ملف الصفحات من صيغة ثابتة مثل «1.5 ضعف RAM» وحدها. تشرح Microsoft أن الحجم المناسب يختلف لكل نظام في النقطتين التاليتين ولا يمكن تعميمه.2

  1. ذروة System Commit Charge
  2. تفريغ تعطل النظام الذي تحتاجه

عمليًا فكّر بهذا الترتيب.

10.1. ابدأ من الإدارة بالنظام كأساس

افتراضي Windows إدارة بالنظام. ينمو وينكمش وفق RAM المثبّتة وطلب Commit ومتطلّبات تفريغ التعطل ونحوها. ما لم يكن قيد خاص أو نتيجة قياس، البدء من هنا هو الخيار الآمن.

10.2. قِس ذروة Commit تحت حمل تمثيلي

اجمع العدادات التالية في PerfMon لفترة طويلة.

  • Memory\\Committed Bytes
  • Memory\\Commit Limit
  • Memory\\% Committed Bytes In Use
  • Memory\\Modified Page List Bytes
  • Paging File(*)\\% Usage
  • Memory\\Available MBytes
  • Memory\\Page Reads/sec
  • Memory\\Page Writes/sec

ضمّن الذروات الفعلية في فترة الجمع — معالجة نهاية الشهر، والنسخ الاحتياطي، والبناء، وعدّة مستخدمين معًا، ونحو ذلك.

نسبة استخدام ملف الصفحات العالية وحدها لا تثبت مشكلة أداء تخزين. لكن الالتصاق بالسقف تحذير من سعة غير كافية. انظر معًا ما إذا كان Commit يقترب من السقف، وما إذا كان مقدار كبير من Modified ينتظر، وما إذا كان القرص مشبعًا.2

10.3. قرّر متطلّب التفريغ أوّلًا

قرّر ما إذا كنت تحتاج تفريغ ذاكرة كاملًا، أو يكفي تفريغ ذاكرة النواة، أو ستستخدم ملف تفريغ مخصّصًا. إن غيّرت إلى حجم ثابت يجب أن يلبّي ليس فقط ذروة Commit بل متطلّب التفريغ أيضًا.

11. انظر بنفسك

11.1. النظر إلى قوائم الصفحات في RAMMap

ابدأ RAMMap كمسؤول وافتح Use Counts أوّلًا.7 العناصر التي يُنظر إليها التالية.

  • Active
  • Standby
  • Modified
  • Modified no write
  • Free
  • Zeroed

يتيح Priority Summary تأكيد أن Standby مقسوم حسب الأولوية. Processes يعرض Working Set لكل عملية؛ File Summary وFile Details يتيحان تتبع بيانات الملفات الموجودة في RAM.

كتجربة اقرأ ملفًا محليًا كبيرًا نسبيًا مرّة، أنهِ القراءة ثم Refresh. قد تبقى صفحات ذلك الملف في File Summary أو جانب Standby. قراءة الملف نفسه مرّة أخرى يمكن أن تستعيد صفحات لم تُعاد استخدامها بعد بلا إدخال/إخراج قرص، أو بقليل منه. تختلف النتائج بضغط الذاكرة ومضاد الفيروسات وحجم الملف، لذا انظر اتجاه انتقال الحالة لا مجموعة أرقام واحدة.

لاحظ أن قائمة Empty في RAMMap تغيّر حالة النظام اصطناعيًا. لا تفرّغ Standby كتحسين أداء إنتاجي؛ استخدمه فقط على بيئة اختبار معزولة.

11.2. فصل Commit وTouch بـ Testlimit

Testlimit أداة Sysinternals تحاكي نقص موارد الذاكرة والمقابض والعمليات والخيوط ونحوها. شغّل أوّلًا ما يلي على الثنائي الذي لديك وأكّد الإصدار والاستخدام المعروضين.

.\\testlimit64.exe -?

ما يلي يستهدف Testlimit v5.24. في صياغة v5.24 الرسمية يخصّص -m [MB] المقدار المحدّد من الذاكرة، و-d [MB] يخصّص وTouch، و-e [seconds] فاصل التخصيص، و-c [count] عدد التخصيصات. حدّد -c أخيرًا. إن اختلف ما تراه محليًا ففضّل ذلك الاستخدام.12

بعد ذلك جرّب صغيرًا على آلة افتراضية قابلة للرمي.

# -m 64: تخصيص 64 ميبيبايت، -e 1: فاصل ثانية واحدة، -c 8: التوقّف بعد 8 مرّات
.\\testlimit64.exe -m 64 -e 1 -c 8

# العدد والفاصل نفسيهما، مع -d بحيث يُجرى Touch لكل منطقة
.\\testlimit64.exe -d 64 -e 1 -c 8

أثناء التشغيل سجّل ما يلي في الوقت نفسه.

  • «ملتزم X/Y» في مدير المهام
  • Active وModified وStandby في RAMMap
  • Memory\\Committed Bytes
  • Memory\\Commit Limit
  • Memory\\Available MBytes
  • Memory\\Modified Page List Bytes

إن استنسخت نفاد Commit فعلًا فلا تفعله على جهاز المضيف؛ زد العدد خطوة بخطوة على آلة افتراضية بلقطة. تشغيل يخصّص تلقائيًا حتّى السقف يمكن أن يجمد الشاشة وينهي عمليات بشكل غير طبيعي ويفقد السجلات. الغرض ليس زعزعة نظام التشغيل؛ هو رصد أن الاقتراب من Commit Limit يجعل Commit جديدًا يفشل.

12. أربع قراءات خاطئة يُتجنَّب في الممارسة

12.1. «Standby مرتفع، إذن تسرّب ذاكرة»

Standby ذاكرة مؤقتة قابلة لإعادة الاستخدام ومضمّنة في Available. احكم على التسرّب بما إذا استمرّ خط أساس Commit الخاص بالعملية وتفصيل التخصيص في النمو حتّى بعد انتهاء الحمل.

12.2. «قصّ Working Set سيصلح التسرّب»

التقليم يغيّر الإقامة فقط؛ لا يحرّر Commit ولا تخصيصًا افتراضيًا. عند إعادة الوصول تعود الصفحة بخطأ.

12.3. «استخدام ملف الصفحات 0، إذن غير ضروري»

يدعم ملف الصفحات ليس فقط مقدار الكتابة الحالي بل Commit Limit وتفريغات التعطل. تقرير حذفه من الاستخدام اليومي وحده يفقد هامش الذروة والدليل عند العطل.

12.4. «ضغط الذاكرة أوّلًا، ثم دائمًا ملف الصفحات»

الضغط ليس أنبوبًا تسلسليًا ثابتًا. يختار Windows ديناميكيًا وفق نوع الصفحة وكفاءة الضغط وحمل المعالج وضغط الذاكرة ووجود مخزن دعم.

13. الخلاصة

  • قاعدة PFN دفتر حساب يتتبّع ملكية الصفحة الفعلية ومراجعها وتعديلها وحالة قائمة الصفحات.
  • الصفحة النظيفة التي تغادر Working Set تبقى على Standby ويمكن أن تعود بخطأ ليّن إن احتيج المحتوى نفسه.8
  • الصفحة المتّسخة تنتظر على Modified وتُكتب إلى ملف الصفحات إن كانت خاصة، أو إلى الملف المقابل إن كانت معيَّنة، وهكذا.3
  • Available مجموع Standby وFree وZeroed؛ Standby الكبير وحده ليس نقص ذاكرة.1
  • ضغط الذاكرة يضغط صفحات في RAM لتقليل الإدخال/الإخراج، لكنّه لا يمحو أدوار Commit وملف الصفحات.10
  • ملف الصفحات يدعم Commit Limit والصفحات الخاصة المعدّلة وتفريغات تعطل النظام.42
  • الحجم المناسب تحدّده ذروة Commit ومتطلّبات التفريغ؛ لا يُقرَّر بمضاعف موحّد.2
  • تقليم Working Set وتفريغ Standby ليسا إصلاح تسرّب ذاكرة.

يتبع في الجزء 3، «كائنات القسم والنسخ عند الكتابة: ما هي DLL وتعيينات الملفات حقًا».

نتبع لماذا تظهر صفحات الملفات وDLL الباقية على Standby من عدّة عمليات كالصفحة الفعلية نفسها.

مقالات ذات صلة

مجالات الاستشارة ذات الصلة

تتعامل شركة كومورا سوفت ذ.م.م. مع تحقيقات ضغط ذاكرة تطبيقات Windows ونفاد Commit والصفحات ونمو Working Set وتصميم جمع تفريغات التعطل.

روابط مرجعيّة

  1. Microsoft Learn, MEMORYSTATUSEX structure. حول كون ullAvailPhys ذاكرة فعلية يمكن إعادة استخدامها فورًا دون كتابة إلى القرص، وكونها مجموع قوائم Standby وFree وZeroed.  2 3

  2. Microsoft Learn, How to determine the appropriate page file size for 64-bit versions of Windows. حول اعتماد الحجم المناسب على ذروة Commit ومتطلّبات تفريغ التعطل وعدم إمكان التعميم؛ وقائمة Modified واستخدام ملف الصفحات والعدادات المرتبطة وملف الصفحات المدار بالنظام.  2 3 4 5 6 7 8

  3. Microsoft Learn, Data corruption on IO write. حول كون Modified Page Writer عامل نظام لمدير الذاكرة يمسح صفحات متّسخة مدعومة بملف الصفحات ويكتبها.  2 3

  4. Microsoft Learn, Introduction to page files. حول إخراج ملف الصفحات الصفحات المعدّلة قليلة الوصول من RAM، وتوسيع Commit Limit، ودعم تفريغات تعطل النظام.  2 3 4

  5. Microsoft Learn, !pfn (WinDbg). حول إمكان عرض حالة إدخال PFN محدّد ومراجعه وعنوان PTE وأكثر. 

  6. Microsoft Learn, !memusage (WinDbg). حول إمكان جمع استخدام الذاكرة الفعلية وحالات الصفحات مثل Zeroed وFree وStandby وModified وActive. 

  7. Microsoft Learn, RAMMap - Sysinternals. حول عرض Use Counts وProcesses وPriority Summary وPhysical Pages وFile Summary وFile Details في RAMMap غرض الذاكرة الفعلية وقوائم الصفحات.  2

  8. Microsoft Learn, Working Set. حول تقليم مدير الذاكرة Working Set لإنشاء ذاكرة متاحة، وحول إمكان حلّ صفحات تبقى في Transition أو Working Set لعملية أخرى بخطأ ليّن.  2

  9. Microsoft Learn, FileIo_Name class. حول امتلاك أحداث File I/O في ETW FileObject وFileName، بحيث يمكن مطابقة FileObject مع أحداث Disk I/O لتحديد الإدخال/الإخراج إلى الملف المستهدف. 

  10. Windows Insider Blog, Announcing Windows 10 Insider Preview Build 10525. حول تنفيذ مخزن الضغط المبكّر في Windows 10 الذي وضع مجموعة الصفحات المضغوطة في RAM داخل Working Set لعملية System وقلّل الكتابة إلى القرص.  2

  11. Microsoft Learn, Find Process ID (PID) in Windows. حول أمثلة قوائم عمليات Debugging Tools for Windows الحالية التي تعرض عملية Memory Compression بمعرّف منفصل تحت System. 

  12. Microsoft Learn, Testlimit - Sysinternals. حول صياغة Testlimit v5.24 الرسمية حيث يخصّص -m ذاكرة، و-d يخصّص وTouch، و-e فاصل التخصيص، و-c عدد التخصيصات، مع تحديد -c أخيرًا. 

أحدث المقالات التي تشترك في نفس الوسوم. عمّق فهمك بمواضيع مرتبطة.

ترتبط هذه المقالة بشكل طبيعي بصفحات الخدمات التالية.

الأسئلة الشائعة

أسئلة شائعة حول موضوع هذه المقالة.

هل تُكتب الصفحة في ملف الصفحات فور مغادرتها Working Set؟
لا. الصفحة غير المعدّلة تنتقل إلى Standby بمحتواها كما هو وتصبح ذاكرة مؤقتة يمكن إعادة استخدامها فورًا. الصفحة المعدّلة تنتقل إلى Modified، وبعد كتابتها عند الحاجة إلى ملف الصفحات أو الملف المقابل تتقدّم إلى حالة قابلة لإعادة الاستخدام مثل Standby.
هل يتضمّن «متاح» في مدير المهام ذاكرة Standby؟
نعم. الذاكرة الفعلية المتاحة التي يبلّغ عنها Windows هي مجموع Standby وFree وZeroed. تحتفظ Standby بمحتوى قديم، لكن لأنّه يمكن إعادة استخدامها فورًا لغرض آخر عند الحاجة تُحسب ذاكرة متاحة.
هل تبدأ الكتابة إلى ملف الصفحات فقط بعد نفاد RAM بالكامل؟
لا. يكتب Windows في الخلفية الصفحات المعدّلة قليلة الوصول وفق قائمة Modified وحالة الذاكرة المتاحة. ليست آلية بسيطة تنتظر النفاد المطلق ثم تطرد كل شيء دفعة واحدة.
هل تعطيل ملف الصفحات يجعل Windows أسرع؟
لا يمكن الجزم بذلك عمومًا. التعطيل يخفض Commit Limit، ويصعّب إخراج الصفحات المعدّلة قليلة الوصول من RAM، ويؤثّر أيضًا في تفريغات تعطل النظام. عادةً تُترك بإدارة النظام ويُقرر بالقياس لذروة Commit ومتطلّبات التفريغ.
إذا وُجد ضغط الذاكرة، هل يصبح ملف الصفحات غير ضروري؟
لا يصبح غير ضروري. مخزن الضغط يضغط الصفحات في RAM لتقليل الإدخال/الإخراج، لكن الصفحات المضغوطة ما زالت تستخدم ذاكرة فعلية ولا تحلّ محل ضمان Commit. الاختيار بين الضغط والإخراج إلى القرص سياسة ديناميكية لمدير الذاكرة.

الملف الشخصي للمؤلف

صفحة الملف الشخصي لمؤلف المقالة.

غو كومورا

مؤسّس شركة كومورا سوفت ذ.م.م.

يركّز على تطوير برامج ويندوز، والاستشارات التقنية، والتحقيق في الأخطاء، ويتميّز في المشاريع التي تبقى فيها الأصول القديمة ناشطة، وفي تشخيص الأعطال التي يصعب تحديد سببها.

العودة إلى المدونة