على مدار سنوات استخدام Windows ، اعتدت على إدارة المهام. من هناك ، قتلت مئات التطبيقات بسبب السلوك السيئ. هناك شاهد أي منهم يلتهم الموارد. حتى بدأت العمل مع الأجهزة التي تحتوي على مئات غيغا بايت من الذاكرة ، والتطبيقات لها طلبات مماثلة. يناقش هذا المقالة لماذا "إدارة المهام" لا تتبع الذاكرة بشكل جيد وما لاستخدامه في المقابل. أولا ، حول آلية تخصيص الذاكرة في ويندوز.
tl ؛ dr: يخفي مدير المهام معلومات حول الذاكرة المقسمة إلى صفحات والمساحة الافتراضية للعملية. استخدم أفضل مستكشف العمليات من حزمة Sysinternals.
تخصيص ويندوز
عند بدء عملية جديدة ، يقوم نظام التشغيل بتعيين مساحة عنوان مستمرة لهذه العملية. في أنظمة 32 بت ، يمكن أن تكون هذه المساحة 4 غيغابايت ، وعادة 2 غيغابايت للنواة ، والباقي لهذه العملية. ستتجاهل هذه المقالة استخدام الذاكرة الأساسية. في أنظمة 64 بت ، يمكن أن تنمو الذاكرة المحجوزة للعملية لتصل إلى 64 تيرابايت. ماذا ستفعل هذه العملية مع عدد قليل من تيرابايت من الذاكرة عندما يكون لدينا بالفعل 8 غيغابايت بائسة؟ تحتاج أولاً إلى فهم الذاكرة المحجوزة والمنقولة.
محجوزة ونقل الذاكرة
ليست كل أجزاء مساحة العنوان الضخمة هذه متساوية. يتم بالفعل دعم بعض أجزاء مساحة عنوان العملية إما بواسطة ذاكرة الوصول العشوائي الفعلية أو القرص (انظر أدناه). تعتبر الذاكرة المحجوزة ملتزم بها إذا كان نظام التشغيل يوفر لك هذه الذاكرة عند محاولة استخدامها. ما تبقى من مساحة العنوان ، وهذه هي الغالبية العظمى ، لا تزال متاحة للحجز. بمعنى أن نظام التشغيل قد لا يوفر لك دائمًا كتلة الذاكرة هذه للاستخدام: فقد يقوم بعمل نسخة على القرص (ملف المبادلة) ، على سبيل المثال ، أو قد لا يعرضها. في C ++ ، يتم حجز الذاكرة عن طريق استدعاء
VirtualAlloc . وبالتالي فإن الذاكرة المنقولة هي مورد محدود للأجهزة في نظام التشغيل. لنرى.
ملف تبديل نظام التشغيل
ملف المبادلة هو فكرة رائعة. في الأساس ،
يفهم نظام التشغيل أن بعض أجزاء الذاكرة لا يتم استخدامها بشكل خاص بواسطة التطبيق الخاص بك. لماذا تنفق الذاكرة الفعلية الحقيقية على ذلك؟ بدلاً من ذلك ، تكتب عملية kernel هذه القطعة غير المستخدمة إلى القرص. حتى يتحولون إليه مرة أخرى ، عندها فقط سيعود إلى الذاكرة.
للحصول على شرح أكثر تفصيلاً حول كيفية عمل الذاكرة في نظام Windows ، أوصي بمحاضرة
"أسرار إدارة الذاكرة" التي وضعها مارك روسينوفيتش.
تتبع الذاكرة
هناك الكثير لمشاهدته وتحليله. بمن تتصل؟ بالطبع ، إلى مدير المهام!
عادة ما تسمى ذاكرة RAM مجموعة العمل ، في حين أن جميع الذاكرة المخصصة عادة ما تسمى البايتات الخاصة. تخلط ملفات DLL التعريفات ، لذا تجاهلها في الوقت الحالي. بمعنى آخر:
Private Bytes [ ] = +
بشكل افتراضي ، يعرض Task Manager (مدير المهام) مجموعة العمل لأي عملية بالضبط:

وهذا هو الرقم الذي نظرت إليه طوال الوقت. كيف عرفت أن معلومات حول الذاكرة المنقولة في "إدارة المهام" موجودة في عمود "
Commit Size
". لم أتمكن من العثور على معلومات حول الذاكرة الافتراضية هناك.
يتيح لك مدير المهام إضافة معلومات حول الذاكرة المنقولة ، إذا نقرت بزر الماوس الأيمن على الأعمدة وحددت العنصر المقابلمقاييس الذاكرة الفعالة
لحسن الحظ ، هناك العديد من الموارد الأخرى لتتبع الموارد. يتم تثبيت PerfMon (مراقب النظام) على كل جهاز يعمل بنظام Windows ، والذي يوفر معلومات مفصلة للغاية حول كل عملية والنظام ككل:

ومن المثير للاهتمام ، يمكن لـ "مراقب النظام" فحص المقاييس ومقارنتها بالفعل على جهازي كمبيوتر أو أكثر على الشبكة. هذه أداة قوية للغاية ، لكن من الواضح أن مدير المهام سهل الاستخدام. أوصي
Process Explorer كحل وسيط:

بوم! Visual Studio ، لماذا لا تزال في وضع 32 بت (الانتباه إلى الحجم الظاهري)؟ لا يزال استخدام الذاكرة الذروة على جهاز الكمبيوتر الخاص بي بنسبة 89٪ من الحد الأقصى ممكنًا. هذا سوف يأتي في متناول اليدين في وقت لاحق.
إضافة: أشار العديد إلى أدوات مريحة أخرى ، بما في ذلك
VMMap و
RAMMap .
التصحيح على معلومات الذاكرة
لحسن الحظ ، هذه ليست بعض التوافه OS لا لزوم لها. ساعدتني المعلومات الفعلية حول استهلاك الذاكرة عدة مرات في تصحيح المشكلات المختلفة.
الشيء الأكثر أهمية هو العثور على الأجزاء التي
لم تمسها الذاكرة المخصصة. من المهم أيضًا تبادل البيانات: يتم نقل هذه الذاكرة ، ولكن نادرًا ما يتم استخدامها أو لا يتم استخدامها على الإطلاق.
حتى لو تم استخدام الذاكرة في بعض الأحيان ، فمن المهم أن نفهم أن هذا هو مورد باهظ الثمن ، لذلك يجب ألا تسير على هذا الطريق. سوف تظهر تسرب الذاكرة هنا.
لهذه الأسباب ، سمعت سابقًا اقتراحًا بحذف ملف الصفحة بالكامل ومساواة الذاكرة المخصصة بمجموعة العمل. ومع ذلك ، هذه هي فكرة ذات حدين. ثم لا يستطيع نظام التشغيل تفريغ الذاكرة في حالة التشغيل غير الصحيح للتطبيقات التي تحتفظ في بعض الأحيان بالذاكرة دون جدوى.