يعمل نظام Android الأساسي على أساس أنّ الذاكرة الحرة هي ذاكرة مهدرة. ويحاول استخدام كل الذاكرة المتاحة في جميع الأوقات. على سبيل المثال، يحتفظ النظام بالتطبيقات في الذاكرة بعد إغلاقها حتى يتمكّن المستخدم من التبديل إليها بسرعة. لهذا السبب، غالبًا ما تعمل أجهزة Android مع توفّر مساحة صغيرة جدًا من الذاكرة الحرة. تُعد إدارة الذاكرة أمرًا حيويًا لتخصيص الذاكرة بشكل سليم بين عمليات النظام المهمة والعديد من تطبيقات المستخدمين.
تتناول هذه الصفحة أساسيات طريقة تخصيص نظام التشغيل Android للذاكرة والتطبيقات التي يستخدمها المستخدم. وتوضّح أيضًا كيفية تفاعل نظام التشغيل مع حالات نقص الذاكرة.
أنواع الذاكرة
تحتوي أجهزة Android على ثلاثة أنواع مختلفة من الذاكرة: ذاكرة الوصول العشوائي (RAM) وذاكرة zRAM وسعة التخزين. يُرجى العِلم أنّ كلّاً من وحدة المعالجة المركزية ووحدة معالجة الرسومات يمكنهما الوصول إلى ذاكرة الوصول العشوائي نفسها.
الشكل 1: أنواع الذاكرة: ذاكرة الوصول العشوائي (RAM) وذاكرة الوصول العشوائي المضغوطة (zRAM) ومساحة التخزين
ذاكرة الوصول العشوائي هي أسرع أنواع الذاكرة، ولكنّ حجمها يكون محدودًا عادةً. عادةً ما تحتوي الأجهزة المتطورة على أكبر سعة من ذاكرة الوصول العشوائي.
zRAM هو قسم من ذاكرة الوصول العشوائي (RAM) يُستخدم كمساحة تبديل. يتم ضغط كل شيء عند وضعه في zRAM، ثم يتم فك ضغطه عند نسخه من zRAM. يزداد حجم هذا الجزء من ذاكرة الوصول العشوائي أو ينخفض عندما يتم نقل الصفحات إلى zRAM أو إخراجها منها. يمكن لمصنّعي الأجهزة ضبط الحد الأقصى للحجم.
تحتوي مساحة التخزين على جميع البيانات الثابتة، مثل نظام الملفات ورمز الكائن المضمّن لجميع التطبيقات والمكتبات والمنصة. تتوفّر سعة تخزين أكبر بكثير من نوعَي الذاكرة الآخرَين. في نظام التشغيل Android، لا يتم استخدام مساحة التخزين كمساحة تبديل كما هو الحال في عمليات تنفيذ Linux الأخرى، لأنّ الكتابة المتكررة يمكن أن تتسبب في تلف هذه الذاكرة وتقليل عمر وسيط التخزين.
صفحات الذاكرة
يتم تقسيم ذاكرة الوصول العشوائي إلى صفحات. ويبلغ حجم كل صفحة عادةً 4 كيلوبايت من الذاكرة.
يتم تصنيف الصفحات على أنّها مجانية أو مستخدَمة. الصفحات الحرة هي ذاكرة وصول عشوائي غير مستخدَمة. الصفحات المستخدَمة هي ذاكرة الوصول العشوائي التي يستخدمها النظام بشكل نشط، وهي مقسّمة إلى الفئات التالية:
- المخزَّنة مؤقتًا: الذاكرة التي يتم الاحتفاظ بنسخة احتياطية منها في ملف على مساحة التخزين (على سبيل المثال، الرموز أو الملفات التي يتم ربطها بالذاكرة). يتوفّر نوعان من الذاكرة المخزَّنة مؤقتًا:
- خاص: يملكه عملية واحدة ولا تتم مشاركته
- نظيف: نسخة غير معدَّلة من ملف على مساحة التخزين، ويمكن حذفها من خلال
kswapdلزيادة الذاكرة الحرة - Dirty: نسخة معدَّلة من الملف على مساحة التخزين، ويمكن نقلها إلى ذاكرة zRAM أو ضغطها فيها بواسطة
kswapdلزيادة الذاكرة الحرة
- نظيف: نسخة غير معدَّلة من ملف على مساحة التخزين، ويمكن حذفها من خلال
- مشترَكة: تستخدمها عمليات متعدّدة
- خاص: يملكه عملية واحدة ولا تتم مشاركته
- مجهول: الذاكرة غير المدعومة بملف على مساحة التخزين (على سبيل المثال،
التي تم تخصيصها بواسطة
mmap()مع ضبط العلامةMAP_ANONYMOUS)- Dirty: يمكن نقلها/ضغطها في zRAM بمقدار
kswapdلزيادة الذاكرة الخالية
- Dirty: يمكن نقلها/ضغطها في zRAM بمقدار
تختلف نسب الصفحات المجانية والمستخدَمة بمرور الوقت لأنّ النظام يدير ذاكرة الوصول العشوائي (RAM) بشكل نشط. المفاهيم المقدَّمة في هذا القسم أساسية لإدارة حالات نقص الذاكرة. يوضّح القسم التالي من هذا المستند هذه الميزات بتفصيل أكبر.
إدارة الذاكرة المنخفضة
يوفّر نظام التشغيل Android آليتَين أساسيتَين للتعامل مع حالات انخفاض مساحة الذاكرة، وهما: برنامج kernel swap daemon وبرنامج low-memory killer.
برنامج خفي لتبديل النواة
إنّ برنامج تبديل النواة (kswapd) هو جزء من نواة Linux، ويحوّل الذاكرة المستخدَمة إلى ذاكرة متاحة. يصبح البرنامج الخفي نشطًا عندما تنخفض مساحة الذاكرة المتوفّرة على الجهاز. تحتفظ نواة Linux بحدود دنيا وعليا لمساحة الذاكرة الحرة.
عندما تقل الذاكرة الحرة عن الحد الأدنى، يبدأ kswapd في استعادة الذاكرة. عندما تصل الذاكرة الحرة إلى الحدّ الأعلى، يتوقف kswapd عن استعادة الذاكرة.
يمكن لـ kswapd استعادة الصفحات النظيفة عن طريق حذفها لأنّها مخزّنة ولم يتم تعديلها. إذا حاولت إحدى العمليات الوصول إلى صفحة نظيفة تم حذفها، ينسخ النظام الصفحة من وحدة التخزين إلى ذاكرة الوصول العشوائي. تُعرف هذه العملية باسم تقسيم الذاكرة عند الطلب.
الشكل 2: تم حذف صفحة نظيفة تم الاحتفاظ بنسخة احتياطية منها في مساحة التخزين
يمكن لـ kswapd نقل الصفحات الخاصة المخزّنة مؤقتًا وغير النظيفة والصفحات المجهولة وغير النظيفة إلى zRAM،
حيث يتم ضغطها. سيؤدي ذلك إلى إخلاء مساحة من الذاكرة المتوفّرة في ذاكرة الوصول العشوائي (صفحات
مجانية). إذا حاولت عملية الوصول إلى صفحة غير نظيفة في zRAM، يتم فك ضغط الصفحة ونقلها مرة أخرى إلى ذاكرة الوصول العشوائي. إذا تم إنهاء العملية المرتبطة بصفحة مضغوطة، سيتم حذف الصفحة من zRAM.
إذا انخفض مقدار الذاكرة الحرة إلى ما دون حد معيّن، يبدأ النظام في إيقاف العمليات.
الشكل 3: نقل الصفحة المعدّلة إلى zRAM وضغطها
Low-memory killer
في كثير من الأحيان، لا يمكن لـ kswapd توفير مساحة تخزين كافية للنظام. في هذه الحالة، يستخدم النظام
onTrimMemory()
لإعلام التطبيق بأنّ الذاكرة أوشكت على النفاد وأنّه يجب تقليل عمليات التخصيص. إذا لم يكن ذلك كافيًا، يبدأ النواة في إيقاف العمليات لتحرير الذاكرة. ويتم ذلك باستخدام أداة إغلاق التطبيقات بسبب نقص الذاكرة (LMK).
لتحديد العملية التي سيتم إغلاقها، تستخدم خدمة LMK نتيجة "نفاد الذاكرة" تُعرف باسم
oom_adj_score
لتحديد أولوية العمليات الجارية. يتم إيقاف العمليات ذات النتيجة العالية أولاً. يتم أولاً إنهاء التطبيقات التي تعمل في الخلفية، ثم يتم إنهاء عمليات النظام. يسرد الجدول التالي فئات تسجيل LMK من الأعلى إلى الأدنى. سيتم أولاً إيقاف العناصر في الفئة التي حصلت على أعلى نتيجة، أي في الصف الأول:
الشكل 4. عمليات Android، مع عرض النتائج العالية في الأعلى والنتائج المنخفضة في الأسفل
في ما يلي أوصاف للفئات المختلفة في الجدول أعلاه:
التطبيقات التي تعمل في الخلفية: هي التطبيقات التي تم تشغيلها سابقًا وهي غير نشطة حاليًا. سيؤدي LMK أولاً إلى إغلاق التطبيقات التي تعمل في الخلفية، بدءًا بالتطبيق الذي يحتوي على أعلى قيمة
oom_adj_score.التطبيق السابق: هو تطبيق الخلفية الذي تم استخدامه مؤخرًا، وله أولوية أعلى (درجة أقل) من تطبيقات الخلفية الأخرى لأنّه من المرجّح أن ينتقل المستخدم إليه أكثر من أحد تطبيقات الخلفية.
تطبيق Home: هذا هو تطبيق المشغّل، وسيؤدي إغلاقه إلى اختفاء الخلفية.
الخدمات: تبدأ التطبيقات الخدمات وقد تشمل المزامنة أو التحميل إلى السحابة الإلكترونية.
التطبيقات المرئية: هي تطبيقات غير معروضة في المقدّمة ولكن يمكن للمستخدم رؤيتها بطريقة ما، مثل تشغيل عملية بحث تعرض واجهة مستخدم صغيرة أو الاستماع إلى الموسيقى.
التطبيق الذي يعمل في المقدّمة: هو التطبيق المستخدَم حاليًا. يبدو إيقاف التطبيق الذي يعمل في المقدّمة وكأنّه عُطل في التطبيق، ما قد يشير إلى المستخدم إلى حدوث مشكلة في الجهاز.
الخدمات الدائمة: هي الخدمات الأساسية للجهاز، مثل خدمات الاتصال الهاتفي وشبكة Wi-Fi.
النظام: عمليات النظام وبعد إيقاف هذه العمليات، قد يبدو أنّ الهاتف يعيد التشغيل.
التطبيقات الأصلية: العمليات المنخفضة المستوى جدًا التي يستخدمها النظام (على سبيل المثال،
kswapd).
يمكن لمصنّعي الأجهزة تغيير سلوك ميزة "هل أنت بخير؟".
احتساب استهلاك الذاكرة
يتتبّع النواة جميع صفحات الذاكرة في النظام.
الشكل 5. الصفحات المستخدَمة من خلال عمليات مختلفة
عند تحديد مقدار الذاكرة التي يستخدمها تطبيق، يجب أن يأخذ النظام في الاعتبار الصفحات المشتركة. ستتشارك التطبيقات التي تصل إلى الخدمة أو المكتبة نفسها صفحات الذاكرة. على سبيل المثال، قد تتشارك "خدمات Google Play" وتطبيق إحدى الألعاب في خدمة تحديد الموقع الجغرافي. ويصعِّب ذلك تحديد مقدار الذاكرة التي تستهلكها الخدمة بشكل عام مقارنةً بكل تطبيق.
الشكل 6. صفحات مشترَكة بين تطبيقَين (في الوسط)
لتحديد استهلاك الذاكرة لأحد التطبيقات، يمكن استخدام أي من المقاييس التالية:
- حجم مجموعة البيانات المقيمة (RSS): عدد الصفحات المشترَكة وغير المشترَكة التي يستخدمها التطبيق
- حجم المجموعة النسبي (PSS): عدد الصفحات غير المشترَكة التي يستخدمها التطبيق والتوزيع المتساوي للصفحات المشترَكة (على سبيل المثال، إذا كانت ثلاث عمليات تتشارك في 3 ميغابايت، تحصل كل عملية على 1 ميغابايت في حجم المجموعة النسبي)
- حجم المجموعة الفريدة (USS): عدد الصفحات غير المشترَكة التي يستخدمها التطبيق (لا يتم تضمين الصفحات المشترَكة)
تكون PSS مفيدة لنظام التشغيل عندما يريد معرفة مقدار الذاكرة التي تستخدمها جميع العمليات، لأنّه لا يتم احتساب الصفحات عدة مرات. يستغرق احتساب PSS وقتًا طويلاً لأنّ النظام يحتاج إلى تحديد الصفحات التي تتم مشاركتها وعدد العمليات التي تتم مشاركتها من خلالها. لا يميّز RSS بين الصفحات المشترَكة وغير المشترَكة (ما يسهّل عملية الاحتساب) وهو أفضل لتتبُّع التغييرات في تخصيص الذاكرة.
مراجع إضافية
- نظرة عامة على إدارة الذاكرة
- العمليات ودورة حياة التطبيق
- فهم استخدام الذاكرة في Android - عرض تقديمي من Google I/O
- الذاكرة والألعاب على Android - عرض تقديمي في مؤتمر Google I/O
- برنامج Android الخفي الذي يوقف العمليات عند انخفاض الذاكرة
مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عندما تكون JavaScript غير مفعّلة.
- وقت بدء تشغيل التطبيق