**إدارة الذاكرة** (بالإنجليزية: Memory management)‏ هي عملية إستغلال ذاكرة الحاسوب بشكل أمثل بحيث يمكن الاستفادة من كل جزء من هذه الذاكرة دون إهدار أو تعطيل لهذه الأجزاء وبذلك يمكن تشغيل أكبر عدد ممكن من البرامج في آن واحد.

طرق إدارة الذاكرة
-----------------

### 1. إدارة الذاكرة بالتجزئة الثابتة

تستخدم هذه الطريقة فكرة تعدد البرامج وذلك من خلال تقسيم الذاكرة إلى أجزاء ثابتة الحجم قبل التنفيذ بحيث تختلف الأجزاء عن بعضها البعض في الحجم وذلك لإتاحة الفرصة لتحميل برامج بأحجام مختلفة إليها.وعادة ما يكون عدد الأجزاء ثابتاً ويحدد عدد الأجزاء درجة تعدد البرامج فمثلاً الذاكرة المبينة في الشكل (4-2) تتيح الفرصة لتحميل خمسة أعمال في نفس اللحظة الزمنية.

ويتم في هذه الإدارة تخصيص مسجلين لكل جزء تسمى مسجلات الحدود(Bound register) وذلك لحماية الأعمال والمحافظة على عدم تداخلها حيث يخزن في المسجل الأول عنوان البداية للجزء وفي المسجل الثاني يخزن عنوان النهاية لنفس الجزء وعند تنفيذ تعليمة لبرنامج معين يتم مقارنة العنوان الذي ترتبط به التعليمة بالقيم المخزنة في المسجل الأول والمسجل الثاني للتأكد من أن العنوان يقع في المدى المخصص للجزء الذي يحتفظ بالبرنامج المحدد.
ولتنفيذ عمليات التوطين في الذاكرة لنفترض وجود الأجزاء المبينة في الشكل (4-2)ولنفترض أنه في لحظة ما كانت هذه الأجزاء خالية من البرامج.
تتم عملية متابعة الذاكرة وتنفيذ عمليات التوطين والترحيل وذلك باستخدام جدول الحجز(allocation table) والذي يحتوي على مجموعة من المداخل:رقم الجزء، حجم الجزء، موقع الجزء، حالة الجزء مستخدم أو غير مستخدم.

لنفرض الآن أنه طلب تنفيذ الأعمال الآتية
Job 1 size = 40
Job 2 size =10
Job 3 size =200
لتحميل العمل الأول يتم البحث في جدول التوطين عن أول جزء حجمه أكبر أو يساوي الحجم 40 وبهذا يحمل هذا العمل في الجزء الثالث وتعدل حالة هذا الجزء إلى مستخدم وبهذه الطريقة يحمل العمل الثاني في الجزء الأول والعمل الثالث في الجزء الخامس وتظهر الذاكرة بعد عملية التحميل كما هو مبين في الشكل (5-2) وتبقى بهذا الفرصة مهيأة لتحميل عملين آخرين في الجزء الثاني والرابع

لاحظ إنه بعد عملية الحجز تم توطين الأعمال الثلاثة في الذاكرة، لاحظ أيضاً أن الجزء الأول يحتوي على فراغ غير مستغل حجمه 10k والجزء الثالث على فراغ حجمه 45k والجزء الخامس على فراغ حجمه 234k. وفي هذه الإدارة تبقى هذه الفراغات ضمن الجزء ولا يمكن استغلالها ويسمى هذا الفراغ بالفراغ الداخلي(internal fragment) فلو افترضنا الآن وجود عمل بحجم 250k ويحتاج هذا العمل للتنفيذ فإنه لن ينفذ بالرغم من وجود فراغات ومساحات حرة حجمها(مجموع)أكبر من حجم العمل المطلوب.
أما عملية الحجز فيمكن تلخيصها في الخطوات التالية:

1. طلب بتوطين عمل بحجم X بايت.
2. ابدأ بالجزء الأول في جدول التوطين وقارن حجم العمل بحجم الجزء إذا كانت حالته (Free) فإذا كان حجم الجزء أكبر أو يساوي حجم العمل يتم توطين هذا العمل في الجزء ويحدث حقل الحالة لهذا الجزء إلى مستخدم(allocated) وبهذا تنتهي عملية توطين العمل.

أما إذا كانت حالة الجزء مستخدم أو إذا كان حجم العمل أكبر من حجم الجزء فيتم الانتقال إلى الخطوة التالية:

1. يتم زيادة رقم الجزء بمقدار 1 وننفذ الخطوة السابقة.
2. إذا تم الوصول إلى نهاية جدول التوطين ولم يوطن العمل فيؤخر تنفيذه إذا كان هناك جزء

مشغول يسمح باستيعاب العمل أو يلغى تنفيذ العمل إذا كان حجمه أكبر من حجم أكبر جزء متوفر.أما عملية الترحيل فتتم بعد إنهاء تنفيذ العمل وحسب الآلية التالية:

1. حدد رقم الجزء المطلوب.
2. انتقل إلى رقم الجزء المطلوب في جدول التوطين وعدل حالة الجزء إلى حر(Free).
3. إذانتهى الجدول المطلوب ولم يصادف الرقم المطلوب فهذا يعني وجود خطأفي رقم الجزء المراد تحريره.

مزايا وعيوب إدارة الذاكرة بالتجزئة الثابتة:
من حسنات هذه الإدارة زيادة تعدد البرامج وذلك بإتاحة الفرصة لتحميل أكثر من عمل قابل للتنفيذ أما مساوئ هذه الإدارة فتنحصر في ما يلي:

1. وجود الفراغات الداخلية والتي تؤدي إلى ضياع وهدر جزء من الذاكرة وهدر وقت وحدة المعالجة المركزية في استعراض مواقع الجزء كاملة فيما فيها الفراغات.
2. تتطلب عملية التوطين والترحيل وقتاً لاستعراض جدول التوطين وإجراء عمليات التحديث اللازمة له.
3. تتطلب عملية التنفيذ إجراء عمليات المقارنة اللازمة للعناوين في الجزء مع القيم المخزنة في مسجلي الحدود الخاصة بالجزء.
4. بالرغم من تعدد البرامج إلا أن حجم العمل لا زال مقيداً بحجم أكبر جزء متوفر وكذلك ضرورة تماسك العمل في الجزء وضرورة تحميله بالكامل في الجزء المعني.
5. عملية التوطين تعتمد على أول مطابقة (First fit) فلو كان حجم الجزء الأول 200 وكانت حالته حرة وطلب توطين عمل بحجم 10 فهذا يعني توليد 190كيلوبايت غير مستغل.

### 2. إدارة الذاكرة بالتجزئة الحيوية (المتغيرة)

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

* أ ـ جدول المساحات المحجوزة (allocated area table)
* ب ـ جدول المساحات الحرة (Free area table)

و يتألف كل جدول من هذه الجداول من أربعة مداخل هي رقم الجزء أو المساحة الحرة، الحجم،الموقع، والحالة.
و تعتمد درجة تعدد البرامج على عدد البرامج التي يمكن تخزينها في الذاكرة وعادة ما يكون هذا العدد محدداً بحيث لا يجوز تجاوزه.
فلو افترضنا الذاكرة المبينة في الشكل (6-2)و افترضنا أن أكبر عدد من البرنامج الذي يمكن تحميله في الذاكرة هو 10فإن جدول المساحات المشغولة وجدول الأجزاء الحرة يظهر كما هو في الجدول (3-2)و(4-2)

لنفترض الآن طلب إدخال عمل جديد بحجم 25K
يتم البحث في جدول المساحات الحرة عن جزء حجمه أكبر أو يساوي حجم العمل المطلوب (في هذه الحالة الجزء الأول)ثم يحمل العمل في هذا الجزء بدءاً من الموقع 80و يعدل بعد هذا جدول المساحات المشغولة وجدول المساحات الحرة حيث يعدل المدخل الأول في جدول المساحات الحرة بتعديل الحجم إلى خمسة والموقع إلى 105.
و يبين الشكل(7-2)آلية التوطين في إدارة الذاكرة بالتجزئة المتغيرة.

أما عملية الترحيل فقد تصادف ثلاثة احتمالات هي:

1. العمل المراد ترحيله يقع بين عملين لا زالا تحت التنفيذ كما هو مبين في الشكل (8-2)

تنتج هذه الحالة مساحة حرة حجمها Xو موقعها هو Y

1. العمل المراد ترحيله يقع أعلى مساحة حرة كما هو مبين في الشكل (9-2)

بعد ترحيل العمل المطلوب فانه ينتج منطقة حرة موقعها هو N1و حجمها هو X-Z.أو قد تصادف الحالة التالية المبينة في الشكل (10-2)

و بعد ترحيل العمل المطلوب ينتج منطقة حرة موقعها هو موقع العمل المراد ترحيله وحجمها مساو لحجم العمل مضافًا إليه حجم المساحة الحرة.

1. العمل المراد ترحيله يقع بين مساحتين حرتين كما هو مبين في الشكل (11-2).

بعد عملية الترحيل يتم إنتاج منطقة حرة واحدة حجمها هو مجموع X1, X2, X3 وموقعها هو N1.ويبين الشكل (12-2) آلية تحرير العمل في إدارة الذاكرة بالتجزئة المتغيرة

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

* 1- لا زال حجم العمل متقيد بحجم الجزء المتوفر ولتنفيذ العمل يجب أن يكون العمل مخزناً بالكامل في الجزء ومتماسكاً.
* 2- هدر الوقت لمعالجة الجداول ومتابعة مسجلات الحماية (الحدود)وذلك لتغير قيمتها بين اللحظة والأخرى.
* 3- لا زالت مشكلة الفراغات موجودة ونسمي الفراغات هنا بالفراغات الخارجية وتنشأ هذه الفراغات عن وجود مساحات موزعة لا يستطيع أي منها استيعاب عمل محدد.

عتاد إدارة الذاكرة
------------------

في بيئة تعددية البرمجة حيث يكون العديد من البرامج مستقرة في الذاكرة يصبح من الصروري إزالة البرامج والبيانات على كامل أجزاء الذاكرة ليترك مساحة من الذاكرة للاستخدام من خلال برنامج معطى، وكذلك لمنع البرنامج من التغيير في برامج أخرى.
• الطلب على ذاكرة الكمبيوتر للتعامل مع تعددية البرمجية قد خلق ضرورة نظم إدارة الذاكرة.
• إن نظام إدارة الذاكرة عبارة عن مجموع الإجراءات العتادية والبرمجية لإدارة البرامج المتنوعة المستقرة في الذاكرة.
• إدارة الذاكرة البرمجي عبارة عن قسم من مجمل نظم التشغيل المتوفر في معظم الحواسب.
• نحن هنا الآن مهتمين بالوحدة العتادية المرتبطة مع نظام إدارة الذاكرة
• إن العناصر الأساسية لوحدة إدارة الذاكرة هي:
1. وسيلة ما من أجل تخزين ديناميكي الذي يطابق عنوان الذاكرة المنطقية بعنوان ذاكرة فيزيائي
2. استعداد للمشاركة في برامج مشتركة مخزنة في الذاكرة من قبل عدة مستخدمين
3. حماية المعلومات تجاه دخول غير شرعي من المستخدمين ومنع المستخدمين من تغيير وظائف نظام التشغيل
• إن النظام الديناميكي بإعادة التوضع عتاديا عبارة عن عملية مطابقة مشابهة لتلك في نظام أخذ الصفحات
• إن الصفحة التي عالجنا حجمها المستخدم في الذاكرة الافتراضية تسبب مشاكل محددة وصعوبات نظرا لحجم البرنامج والبنية المنطقية للبرامج.
إن من المناسب أكثر أن نقسم لبرامج والبيانات إلى مناطق منطقية تدعى مقاطع والمقطع عبارة عن مجموعة من التوابع وعناصر البيانات المرتبطة منطقيا والتي بدورها تكون مرتبطة ببرنامج ما.
المقاطع ممكن أن توجد من قبل مبرمج أو من قبل نظام التشغيل، وأمثلة عن المقاطع: الإجراءات الفرعية، مصفوفة من البيانات، جدول من الرموز، أو برنامج للمستخدم.
المشاركة لبرامج مشتركة عبارة عن مقطع متداخل للأنظمة متعددة البرمجة فعلى سبيل المثال: العديد من المستخدمين يأملون في ترجمة برامج الفورتران لديهم يجب أن يكون لديهم الإمكانية في مشاركة نسخة مشتركة وحيدة بدلا من أن يكون كل مستخدم لديه نسخة مستقلة في الذاكرة.
برامج النظام الأخرى الموجودة في الذاكرة تكون أيضا مشاركة من قبل جميع المستخدمين في الأنظمة المتعددة البرمجة بدون الضرورة لامتلاك نسخ متكررة القضية الثالثة في الأنظمة المتعددة البرمجة هي الحماية للبرنامج من تداخلات غير مرغوبة مع غيره إن العنوان المتولد من قبل برنامج متوضع في مقاطع يدعى العنوان المنطقي وهو مماثل تماما لما هو عليه في الذاكرة الافتراضية باستثناء أن مساحة العنوان المنطقي تكون مرتبطة بمقاطع متغيرة الطول بدلا من صفحات ثابتة الطول ووظيفة وحدة إدارة الذاكرة هي مطابقة العنوان المنطقي إلى آخر فيزيائي مشابه لذلك الذي في الذاكرة الافتراضية

المطابقة الصفحية المتموضعة في مقاطع
-----------------------------------

قد تم الإشارة حاليا للخصائص في الساحة المنطقية بأنها تستخدم مقاطع متغيرة الطول كل مقطع فيها يسمح له بالتوسع نظرا لمتطلبات البرنامج قيد التنفيذ حاليا، إحدى الطرق لتحديد طول المقطع هو من خلال ربطه مع عدد يمثل عدد مماثل من الصفحات ولمعرفة كيف يتم ذلك لنعتبر العنوان المنطقي الذي يظهر في الشكل:

العنوان المنطقي يقسم إلى ثلاثة حقول: حقل المقطع يحدد رقم المقطع وحقل الصفحة يحدد الصفحة داخل المقطع وحقل الكلمة يعطي الكلمة المحددة داخل الصفحة.
إن حقل الصفحة بـ (K) خانة يستطيع تحديد ما يزيد عن 2K صفحة.إن رقم المقطع ممكن أن يكون مرتبطا بصفحة واحدة فقط أو مع عدة صفحات وهكذا فإن طول المقطع سوف يختلف وفقا لرقم الصفحات المسندة له.

* + - المطابقة للعنوان المنطقي ليصبح عنوان فيزيائي تتم من خلال جدولين التاليين في الشكل:

نلاحظ أن رقم المقطع للعنوان المنطقي يحدد العنوان لجدول المقطع وكل مدخل في جدول المقطع عبارة عن عنوان مؤشر لقاعدة جدول الصفحة والتي بدورها تضاف لرقم الصفحة المعطى في العنوان المنطقي والمجموع يولد عنوان مؤشر لمدخل في جدول الصفحة. والقيمة التي توجد في جدول الصفحة تؤمن رقم البلوك في الذاكرة الفيزيائية والدمج لحقل البلوك مع حقل الكلمة يولد العنوان الفيزيائي المطابق النهائي إن جدولي المطابقة قد يخزنان في ذاكرتين صغيرتين منفصلتين أو في الذاكرة الرئيسية وفي كلا الحالتين فإن مرجعية الذاكرة في CPU سوف تتطلب ثلاث مراحل للتعامل مع الذاكرة الأول جدول المقطع والآخر من جدول الصفحة الثالث من الذاكرة الرئيسية. وهذا بدوره سوف يبطئ النظام بشكل ملاحظ بالمقارنة مع النظام التركيبي والذي يتطلب مرحلة واحدة للوصول إلى الذاكرة.
لتجنب الخسارة في السرعة، يستخدم مخزن الترجمة المؤقت لتخزين معظم المداخل المرجعية للجداول المستخدمة حاليا واختصارا تعرف بذاكرة TLB حيث أنه في أول مرة يتم فيها التعامل مع بلوك محدد يتم إدخال قيمته وكذلك المقطع المستجيب وعدد الصفحات كما هو في الشكل:

والنتيجة تنقل إلى الذاكرة الترابطية من أجل استخدامات مستقبلية.

مثال عددي
---------

إن المثال العددي يمكن أن يوضح الفكرة في عملية (MMU) وحدة إدارة الذاكرة. (20) خانة الثنائية التالية الموضحة في الشكل:

إن رقم المقطع يحدد من قبل 4 بتات والتي تحدد بدورها 1 بت من 16 مقطع محتمل إن 8 بتات ممكن أن تحدد حوالي 256 صفحة وحقل الكلمة ذات ال8 بت يفرض صفحة ذات حجم 256 كلمة هذه الإعدادات تسمح لكل مقطع بأن يمتلك أي عدد من الصفحات حتى 256 إن المقطع المحتمل الأصغري سوف يمتلك صفحة واحدة ب256 كلمة والاحتمال الأكبر للمقطع سوف يمتلك 256 صفحة بمعدل كلمات كلي: 256 \*256 = 64K كلمة.

الذاكرة الفيزيائية الموضحة في الشكل:

تتألف من 220 كلمة ب 32 خانة لكل منه، إن عنوان 20 خانة يقسم إلى حقلين: حقل 12 خانة وحقل 8 خانات وبالتالي الذاكرة الفيزيائية تقسم إلى 4096 بلوك ب256 كلمة لكل منها والصفحة في العنوان المنطقي تملك بلوك مقابل في الذاكرة الفيزيائية.
لنلاحظ أن كل من العنوان الفيزيائي والمنطقي يحتويان 20 خانة في حال غياب وحدة إدارة الذاكرة فإن العنوان ذا ال20 خانة من الCPU يمكن أن يستخدم للوصول للذاكرة الفيزيائية مباشرة.
لنعتبر برنامج محمل في الذاكرة الذي يتطلب خمس صفحات إن نظام التشغيل يمكن أن يسند لهذا البرنامج المقطع 6 وصفحات من 0 وحتى 4 كما هو في الشكل

إن مجال العنوان المنطقي الكلي من أجل البرنامج هو من 6000H إلى H(604FF).
عندما يحمل البرنامج إلى الذاكرة الفيزيائية فإنه يتوزع بين 5بلوكات في الذاكرة الفيزيائية حيث يجد نظام التشغيل مكانا فارغا.
التجاوب بين كل بلوك ذاكري ورقم صفحة منطقي يتم عندها إدخاله في الجدول.

المعلومات من هذا الجدول يتم إدخالها في مقطع وجداول الصفحة كما هو في الشكل:

الآن لنعتبر العنوان الفيزيائي المعطى في الشكل:

إن العنوان ذا ال20 خانة يجدول كرقم ب 5 خانات ست عشرية وهو يشير لرقم صفحة 7E من الصفحة 2 في المقطع 6 وإن قاعدة المقطع 6 في جدول الصفحة هي في العنوان 35 وهكذا نلاحظ أن المقطع 6 قد تم ربطه ب5 صفحات من العنوان 35 إلى العنوان 39 والصفحة 2 في المقطع 6 هي في العنوان 35+2 أي في 37 وهو عنوان البلوك الذاكري الموجود في جدول الصفحة سيكون 019.

الكلمة 7E في البلوك 19 تعطي ال20 خانة لعنوان الفيزيائي 0197E نلاحظ بأنه الصفحة 0 للمقطع 6 تطابق البلوك 12 والصفحة 1 تطابق البلوك 0 والذاكرة المترابطة التي تظهر في الشكل 24ب تظهر أن الصفحات 2 و 4 للمقطع 6 تم الربط لهما مسبقا وبالتالي رقم البلوك المتجاوب يخزن في الذاكرة الترابطية
وهكذا نلاحظ أن MMU أدى الوظيفة المطلوبة منه وهو مطابقة أي رقم من الصفحات لكل مقطع.

المراجع
-------

1. ↑  Detlefs، D.؛ Dosser، A.؛ Zorn، B. (يونيو 1994). "Memory allocation costs in large C and C++ programs" (PDF). *Software: Practice and Experience*. ج. 24 ع. 6: 527–542. CiteSeerX:10.1.1.30.3073. DOI:10.1002/spe.4380240602. مؤرشف من الأصل (PDF) في 2017-08-09.
2. ↑  Gibson، Steve (15 أغسطس 1988). "Tech Talk: Placing the IBM/Microsoft XMS Spec Into Perspective". *InfoWorld*. مؤرشف من الأصل في 2020-01-25.

محاضرات الدكتور:شادي الجندي <جامعة حلب \_سوريا>

| * ع
* ن
* ت
إدارة الذاكرة |
| --- |
| 
* مخطط التخصيص أحادي المستخدم

 |
| تنظيم الذاكرة اليدوي | 
* Static memory allocation
* C dynamic memory allocation
* new and delete (C++)

 |
| ذاكرة افتراضية | 
* Demand paging
* Page table
* تصحيف
* Virtual memory compression

 |
| المعدات | 
* وحدة إدارة الذاكرة (MMU)
* مخزن الترجمة المؤقت (TLB)
* Input–output memory management unit (IOMMU)

 |
| جمع القمامة | 
* Boehm garbage collector
* Concurrent mark sweep collector
* Finalizer
* Garbage
* Garbage-first collector
* Mark-compact algorithm
* Reference counting
* Tracing garbage collection
* Strong reference
* Weak reference

 |
| تجزئة الذاكرة | 
* Protected mode
* Real mode
* Virtual 8086 mode
* x86 memory segmentation

 |
| سلامة الذاكرة | 
* تجاوز سعة المخزن المؤقت
* Buffer over-read
* مؤشر متدلي
* Stack overflow

 |
| مشاكل | 
* تفرق البرامج
* تسرب الذاكرة
* ذاكرة غير قابلة للوصول

 |
| أخرى | 
* Automatic variable
* International Symposium on Memory Management
* Region-based memory management

 |

* أيقونة بوابةبوابة برمجة الحاسوب
* أيقونة بوابةبوابة تقانة المعلومات
* أيقونة بوابةبوابة علم الحاسوب

|  |  |
| --- | --- |
| مشاريع شقيقة | في كومنز صور وملفات عن: إدارة الذاكرة |



|  |  |
| --- | --- |
| ضبط استنادي: وطنية عدلها في ويكي بيانات | 
* الملف الاستنادي المتكامِل (GND)
* المكتبة القومية الإسرائيلية (J9U)
* مكتبة الكونغرس (LCNAF)

 |