انتقل إلى المحتوى الرئيسي

إدارة ذاكرة Windows

مقدمة​

إدارة الذاكرة هي واحدة من الوظائف الأكثر حيوية في نظام التشغيل. إنها تتيح لكل عملية أن تعتقد أنها تمتلك كل الذاكرة بمفردها، بينما تشارك ذاكرة RAM الفعلية بين جميع العمليات.

المفاهيم الأساسية​

الذاكرة الفعلية مقابل الافتراضية​

النوعالوصفالخصائص
الذاكرة الفعلية (RAM)الذاكرة المادية المثبتةمحدودة، سريعة
الذاكرة الافتراضيةتجريد يوفره نظام التشغيلوهم الذاكرة غير المحدودة

لماذا الذاكرة الافتراضية؟​

  1. عزل العمليات: كل عملية لها فضاء خاص بها
  2. الحماية: لا يمكن لعملية الوصول إلى ذاكرة عملية أخرى
  3. المرونة: توفر ذاكرة أكثر من RAM الفعلية
  4. التبسيط: لا تحتاج البرامج إلى إدارة RAM مباشرة

فضاء العناوين الافتراضي​

بنية 32 بت مقابل 64 بت​

البنيةالفضاء الكليفضاء المستخدمفضاء النواة
32 بت4 جيجابايت2 جيجابايت (أو 3 جيجابايت مع /3GB)2 جيجابايت (أو 1 جيجابايت)
64 بت256 تيرابايت نظري128 تيرابايت128 تيرابايت

تنظيم ذاكرة العملية​

عناوين عالية
+------------------+
| Kernel Space | <- غير قابل للوصول في وضع المستخدم
+------------------+
| Stack | <- المكدس (ينمو للأسفل)
| | |
| v |
| |
| ^ |
| | |
| Heap | <- الكومة (تنمو للأعلى)
+------------------+
| Data (BSS) | <- متغيرات غير مهيأة
+------------------+
| Data (Init) | <- متغيرات مهيأة
+------------------+
| Code | <- تعليمات قابلة للتنفيذ
+------------------+
| Reserved | <- منطقة محمية (مؤشر NULL)
+------------------+
عناوين منخفضة (0x0)

التقسيم​

المفهوم​

يقوم التقسيم بتقسيم الذاكرة إلى كتل ذات حجم ثابت:

  • الصفحة: كتلة من الذاكرة الافتراضية (4 كيلوبايت افتراضيًا على Windows)
  • الإطار: كتلة من الذاكرة الفعلية المقابلة
  • جدول الصفحات: هيكل يربط الصفحات بالإطارات

التشغيل​

العنوان الافتراضي          جدول الصفحات          العنوان الفعلي
[رقم الصفحة|الإزاحة] --> [رقم الإطار] --> [رقم الإطار|الإزاحة]

حالات الصفحة​

الحالةالوصف
حرغير مخصص، متاح
محجوزمحجوز ولكن غير ملتزم
ملتزممخصص وقابل للاستخدام
مشتركمشترك بين العمليات

ملف الصفحة (ملف التبادل)​

ما هو ملف الصفحة؟​

عندما تكون RAM غير كافية، يقوم Windows بنقل الصفحات قليلة الاستخدام إلى القرص في الملف pagefile.sys.

التكوين​

# عرض التكوين الحالي
Get-WmiObject Win32_PageFileUsage | Select-Object Name, CurrentUsage, PeakUsage

# عرض الحجم المكون
Get-WmiObject Win32_PageFileSetting | Select-Object Name, InitialSize, MaximumSize

التأثير على الأداء​

الحالةالأداء
الصفحة في RAMالوصول: ~100 نانوثانية
الصفحة على القرص (SSD)الوصول: ~100 ميكروثانية (أبطأ بـ 1000 مرة)
الصفحة على القرص (HDD)الوصول: ~10 مللي ثانية (أبطأ بـ 100000 مرة)

أنواع ذاكرة Windows​

مجموعة العمل​

مجموعة الصفحات الموجودة حاليًا في RAM لعملية معينة.

# عرض مجموعة العمل للعمليات
Get-Process | Sort-Object WorkingSet64 -Descending |
Select-Object -First 10 Name, @{N='WorkingSet(MB)';E={[math]::Round($_.WorkingSet64/1MB,2)}}

البايتات الخاصة​

الذاكرة المخصصة حصريًا لعملية (غير قابلة للمشاركة).

# عرض البايتات الخاصة
Get-Process | Sort-Object PrivateMemorySize64 -Descending |
Select-Object -First 10 Name, @{N='PrivateBytes(MB)';E={[math]::Round($_.PrivateMemorySize64/1MB,2)}}

البايتات الافتراضية​

الحجم الكلي لفضاء العناوين الافتراضي للعملية.

الشحنة الملتزمة​

إجمالي الذاكرة "الموعودة" لجميع العمليات (يمكن أن تتجاوز RAM الفعلية).

# عرض الشحنة الملتزمة العامة
Get-CimInstance Win32_OperatingSystem |
Select-Object @{N='CommitTotal(GB)';E={[math]::Round($_.TotalVirtualMemorySize/1MB,2)}},
@{N='CommitUsed(GB)';E={[math]::Round(($_.TotalVirtualMemorySize - $_.FreeVirtualMemory)/1MB,2)}}

الملفات المربوطة بالذاكرة​

المفهوم​

يسمح بربط ملف مباشرة في فضاء العناوين لعملية.

الفوائد​

  • الوصول إلى الملف كأنه ذاكرة
  • مشاركة فعالة بين العمليات
  • إدارة تلقائية بواسطة نظام التشغيل

الاستخدام في PowerShell​

# إنشاء ملف مربوط بالذاكرة
Add-Type -AssemblyName System.IO.MemoryMappedFiles

$mmf = [System.IO.MemoryMappedFiles.MemoryMappedFile]::CreateNew(
"MonPartage", # الاسم
1024 # الحجم بالبايت
)

# كتابة البيانات
$accessor = $mmf.CreateViewAccessor()
$accessor.Write(0, [byte]65) # كتابة 'A' في الموضع 0

# قراءة البيانات
$value = $accessor.ReadByte(0)
Write-Host "القيمة المقروءة: $([char]$value)"

# تنظيف
$accessor.Dispose()
$mmf.Dispose()

الكومة​

المفهوم​

منطقة ذاكرة للتخصيص الديناميكي أثناء التشغيل.

مدير الكومة في Windows​

يوفر Windows عدة أنواع من الكومة:

  • كومة العملية: الكومة الافتراضية للعملية
  • كومة خاصة: كومة تنشئها التطبيق
  • كومة منخفضة التجزئة (LFH): محسنة للتخصيصات الصغيرة

عرض الأكوام​

# استخدام VMMap أو Process Explorer لعرض أكوام عملية
# أو عبر المصحح

المكدس​

المفهوم​

منطقة ذاكرة للمتغيرات المحلية واستدعاءات الدوال.

الخصائص​

  • حجم ثابت لكل خيط (1 ميجابايت افتراضيًا على Windows)
  • النمو نحو العناوين المنخفضة
  • وصول سريع جدًا (LIFO)

تجاوز المكدس​

خطأ عندما يتجاوز المكدس حجمه الأقصى (تكرار لا نهائي، إلخ).


أدوات تحليل الذاكرة​

مدير المهام​

  • علامة التبويب الأداء > الذاكرة
  • علامة التبويب التفاصيل > أعمدة الذاكرة

مراقب الموارد​

resmon.exe

علامة التبويب الذاكرة لعرض مفصل.

مستكشف العمليات (Sysinternals)​

procexp.exe
  • عرض > إظهار اللوحة السفلية
  • عرض > عرض اللوحة السفلية > DLLs أو Handles

VMMap (Sysinternals)​

vmmap.exe

تحليل مفصل لفضاء العناوين لعملية.

RAMMap (Sysinternals)​

rammap.exe

عرض شامل لاستخدام RAM الفعلية.


حماية ذاكرة Windows​

DEP (منع تنفيذ البيانات)​

يمنع تنفيذ التعليمات البرمجية في مناطق البيانات.

# التحقق من حالة DEP
Get-CimInstance Win32_OperatingSystem | Select-Object DataExecutionPrevention_*

ASLR (عشوائية تخطيط فضاء العناوين)​

عشوائية عناوين التحميل لتصعيب الاستغلالات.

CFG (حارس تدفق التحكم)​

التحقق من أهداف استدعاءات الدوال غير المباشرة.

Credential Guard​

عزل بيانات الاعتماد في بيئة افتراضية.

# التحقق مما إذا كان Credential Guard نشطًا
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard |
Select-Object SecurityServicesRunning

تداعيات الأمان​

الهجمات المتعلقة بالذاكرة​

الهجومالوصفالحماية
تجاوز المخزن المؤقتتجاوز المخزنDEP، ASLR، canaries
الاستخدام بعد التحريرالاستخدام بعد التحريركومة آمنة
كشف الذاكرةتسرب بيانات الذاكرةالتهيئة
تفريغ بيانات الاعتمادسرقة بيانات الاعتماد في الذاكرةCredential Guard

الطب الشرعي للذاكرة​

تحتوي الذاكرة على معلومات قيمة:

  • العمليات الجارية
  • الاتصالات الشبكية
  • بيانات الاعتماد بالنص الواضح (إذا لم تكن محمية)
  • تاريخ الأوامر
  • البرمجيات الخبيثة بدون ملفات

التمارين​

  1. استخدم Get-Process لسرد 10 عمليات تستهلك أكبر قدر من الذاكرة
  2. افتح VMMap وحلل عملية من اختيارك
  3. تحقق من تكوين ملف الصفحة الخاص بك
  4. حدد ما إذا كان DEP وASLR نشطين على نظامك

المراجع​