خارج الذاكرة

عرض شاشة نفاد الذاكرة على نظام يعمل بنظام Linux Mint 9 (kernel 2.6.32)

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

تاريخ

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

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

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

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

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

استعادة

ستحاول نوى أنظمة التشغيل مثل لينكس التعافي من هذا النوع من حالة OOM عن طريق إنهاء عملية واحدة أو أكثر، وهي آلية تُعرف باسم OOM Killer . [1] [2] قدم لينكس 4.6 (تم إصداره في مايو 2016) تغييرات في مواقف OOM، مما أدى إلى تحسين الكشف والموثوقية. [3] [4] تم تنفيذ وعي cgroup في OOM killer في نواة لينكس 4.19 التي تم إصدارها في أكتوبر 2018، والتي تضيف القدرة على قتل cgroup كوحدة واحدة. [5]

بسبب التأخر في تفعيل OOM Killer على بعض أنظمة Linux، [6] هناك العديد من الشياطين وتصحيحات النواة التي تساعد في استعادة الذاكرة من حالة OOM قبل فوات الأوان.

  • earlyoom[7]
  • nohang[8]
  • systemd-oomd
  • تصحيحات نواة PSI (معلومات توقف الضغط) والخادم المصاحب لها oomd، تم دمج التصحيحات في نواة Linux 4.20. [9] [10]

حدود الذاكرة لكل عملية

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

ستواجه العملية التي تتجاوز الحد الأقصى لكل عملية ثم تحاول تخصيص المزيد من الذاكرة حالة خطأ. على سبيل المثال، سترجع الدالة القياسية في لغة C لتخصيص الذاكرة، , القيمة NULL ، ويجب أن يتعامل التطبيق الذي يتصرف بشكل جيد مع هذا الموقف. malloc()

مراجع

  1. ^ قاتل OOM في لينكس
  2. ^ "كيفية تكوين برنامج Linux Out-of-Memory Killer" . تم الاسترجاع في 19 فبراير 2015 .
  3. ^ "نحو معالجة أكثر قابلية للتنبؤ بها وموثوقية لمشكلة نفاد الذاكرة [LWN.net]". lwn.net .
  4. ^ "Linux_4.6 - Linux Kernel Newbies". kernelnewbies.org .
  5. ^ "Linux_4.19 - Linux Kernel Newbies". kernelnewbies.org .
  6. ^ "نواة لينكس - هل من الممكن أن نجعل قاتل OOM يتدخل في وقت سابق؟". مستخدم خارق . تم الاسترجاع في 7 مارس 2021 .
  7. ^ rfjakob (7 مارس 2021)، rfjakob/earlyoom، GitHub ، تم الاسترجاع في 7 مارس 2021
  8. ^ أفراموف، أليكسي (5 مارس 2021)، hakavlad/nohang، GitHub ، تم الاسترجاع في 7 مارس 2021
  9. ^ "linux-psi.git - Linux resource pressure metrics". git.cmpxchg.org . تم الاسترجاع في 7 مارس 2021 .
  10. ^ facebookincubator/oomd، حاضنة فيسبوك، 3 مارس 2021 ، تم الاسترجاع في 7 مارس 2021
  • معالجة نفاد الذاكرة
  • تم أرشفة المقال "تقليل استخدام الذاكرة لإنشاء عمليات فرعية للتطبيق" في 12 يونيو 2006 على موقع Wayback Machine بواسطة Greg Nakhimovsky
  • مقالة "ترويض قاتل OOM" بقلم جولدوين رودريجيز
  • مقالة "عندما ينفد مخزون الذاكرة في لينكس" بقلم موليادي سانتوسا
  • ورقة بحثية بعنوان "التعامل مع أخطاء "نفاد الذاكرة"" أرشيف 2021-02-25 على موقع Wayback Machine بقلم جون بويلاند
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=خارج_الذاكرة&oldid=1243110893"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate