إدارة ذاكرة Windows
مقدمة
إدارة الذاكرة هي واحدة من الوظائف الأكثر حيوية في نظام التشغيل. إنها تتيح لكل عملية أن تعتقد أنها تمتلك كل الذاكرة بمفردها، بينما تشارك ذاكرة RAM الفعلية بين جميع العمليات.
المفاهيم الأساسية
الذاكرة الفعلية مقابل الافتراضية
| النوع | الوصف | الخصائص |
|---|---|---|
| الذاكرة الفعلية (RAM) | الذاكرة المادية المثبتة | محدودة، سريعة |
| الذاكرة الافتراضية | تجريد يوفره نظام التشغيل | وهم الذاكرة غير المحدودة |
لماذا الذاكرة الافتراضية؟
- عزل العمليات: كل عملية لها فضاء خاص بها
- الحماية: لا يمكن لعملية الوصول إلى ذاكرة عملية أخرى
- المرونة: توفر ذاكرة أكثر من RAM الفعلية
- التبسيط: لا تحتاج البرامج إلى إدارة 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 |
الطب الشرعي للذاكرة
تحتوي الذاكرة على معلومات قيمة:
- العمليات الجارية
- الاتصالات الشبكية
- بيانات الاعتماد بالنص الواضح (إذا لم تكن محمية)
- تاريخ الأوامر
- البرمجيات الخبيثة بدون ملفات
التمارين
- استخدم
Get-Processلسرد 10 عمليات تستهلك أكبر قدر من الذاكرة - افتح VMMap وحلل عملية من اختيارك
- تحقق من تكوين ملف الصفحة الخاص بك
- حدد ما إذا كان DEP وASLR نشطين على نظامك