الـذاكـرة الافـتـراضيـّة
المعلوماتية >>>> عام
في الواقع هذا مشابهٌ تمامًا لما تقوم به أنظمةُ التشغيل الحديثة عند إدارتها للذاكرةِ وقيامها بمنحِ هذه الذاكرة للبرامج المختلفة التي تكون قيدَ التشغيل في الوقتِ نفسه. تستخدمُ البرامجُ فضاءً من عناوين الذاكرة الحاسوبيـّة لتخزينِ تعليماتها البرمجيـّة والبياناتِ التي تَـتَـعاملُ معها، بالـنّـسبةِ لهذه البرامج فإنّ عناوين الذاكرة التي تقوم بتخزينِ معلوماتها فيها تكونُ متجاورة ومتتابعة.
يقومُ نظامُ التشغيل بتقسيمِ هذه العناوين، وبالتّـالي مكان التخزين الذي يستخدمه البرنامج، إلى أجزاءٍ صغيرةٍ نسبيـًّا تُـدعى الصفحات (Pages)، وبعد ذلك يُوزّع هذه الأجزاء على أماكن مختلفة في الذاكرة الفيزيائيـّة الفعليـّة، ثم يربِـط بين العناوين المُتتابعة التي يستخدمها البرنامج والتي تُـسمّى عادةً «العناوين الافتراضية»، وبين العناوين الفيزيائية الفعلية التي تحوي هذه الأجزاء، حيثُ تُـسمّى هذه العملية بالربط بينَ الصفحاتِ الافتراضيـّةِ وبين الصفحاتِ الفيزيائيـّة، وذلك بالاعتمادِ على جدولٍ يقدّم هذا الربط و يُـدعى «جدول الصفحات-Page Table».
تحوي المعالجاتُ الحديثةُ ذات البنية X86 وحدةَ إدارة ذاكرة مُـتخصّصة (MMU)، تَـتَـولّى مهمةَ الربطِ هذه. كما تحوي هذه المعالجات ذاكرةً مؤقّـتـةً لتسريعِ عمليـّةِ الربط التي تُـسمّى (TLB (Translation Look-aside buffer.
إنّ تسميةَ العناوينِ الافتراضيـّةِ المُستخدمةِ هنا، لا تُعبـّر عن ذاكرةٍ افتراضية مرتبطةٍ بجهازٍ افتراضيٍ، وإنّـما عن ذاكرةٍ يُـقدّمها نظامُ التّـشغيلِ للبرنامجِ الذي يتمّ تنفيذه لتتوافق مع رؤية هذا البرنامج للذاكرة. بشكلٍ مماثلٍ يَـنطبقُ هذا الاسمُ والتوصيفُ تمامًا على حالةِ الأجهزةِ الافتراضية المُستضافة التي تحتاجُ إلى ذاكرةٍ رئيسيـّةٍ مُتتابعة يجب على مدير الأجهزة الافتراضية توفيرها من خلال الذاكرة الفيزيائية الفعلية المتوفرة لديه. وبما أنّـه يجبُ على الأجهزة الافتراضية المُستضافة أن توفّـرَ ذاكرةً «افتراضية» للبرامج التي تعمل عليها من خلال الذاكرة الافتراضية التي يوفّـرها لها مدير الأجهزة الافتراضية من الذاكرةِ الفيزيائيـّةِ الفعليـّةِ، فإنّـنا نلاحظُ أنّـنا أصبحنا أمام مستويين من الذاكرة الافتراضية كما هو موضح في الشكل التالي:
هنا يتكّـفلُ نظامُ التشغيل المُستضاف بإدارة عملية ربطِ عناوينِ الذاكرة الافتراضية للبرمجيات التي الـمُنـفّذة ضمنه إلى عناوين الذاكرة الممنوحة للجهاز الافتراضي، ولكنّ نظام التشغيل المُستضاف ليس لديه إمكانيةُ الوصول المباشرِ إلى الذاكرة الفيزيائية الفعليـّة، لذلك تُـضافُ عمليةُ ربطٍ أخرى لهذه العناوين، يتولّاها الـhypervisor لترجمةِ العناوين التي يطلبها نظام التشغيل في الجهاز الافتراضي المُستضاف إلى مكان تخزينها الفعلي في الذاكرة الفيزيائية.
لتجنّـب تراجع الأداءِ بسبب عمليـّة الترجمة المزدوجةِ اللازمةِ للوصولِ إلى كلّ عنصر بيانات من الذاكرة، فإنّه يمكنُ استخدامُ ما يُـسمّى بـ«جداول صفحات الظل-shadow page» لتسريع الربط. هنا يقومُ الـhypervisor بربطِ عناوين الذاكرة الافتراضية للبرمجيات التي تعملُ ضمنَ الجهازِ الافتراضي المُستضاف مباشرة إلى الذاكرة الفيزيائية الفعليـّة، كما هو موضح في الشكل.
يتمّ تحقيق عمليةُ الربط المباشرةِ هذه ببساطة من خلال قيام الـ hypervisor بإدارةِ جداولِ صفحات الظل بحيث يحتفظُ فيها بمعلومات الرّبط المباشرِ بين عناوين الذاكرة الافتراضية للبرمجيات ضمن الجهاز الافتراضي، وبين العناوينِ الفيزيائية الفعلية التي تحوي البيانات المطلوبة، وكلما قام نظام التشغيل المُستضاف بتغييرِ ربطِ الذاكرة الافتراضيـّة للبرامج يقومُ الـ hypervisor بتحديثِ جدول shadow page وقفًا لهذا التغيير.
تُـمكّـنُ تقنياتُ الجيلِ الثاني من العتاد الحاسوبي الداعمِ للحوسبة الافتراضية، مثل الجداول المتداخلة Nested page التي توفّـرُها معالجات AMD أو الجداول الموسعة Extended page التي توفّـرها معالجات Intel، الـ Hypervisor من تجنّـبِ جزءٍ من عبء إدارة الذاكرة باستخدام جدوال shadow page، وذلك من خلالِ توظيف طبقةٍ إضافية من جداول خاصة ضمن العتاد تدعى (super-TLB) تقوم بترجمةِ العناوينِ الافتراضية للبرامج على الأجهزة المُستضافة إلى عناوين الجهاز الافتراضي، ثمّ ترجمة عناوين الجهاز الافتراضي إلى العناوين الفيزيائية الفعلية مما يحققُ مكاسبًا كبيرةً في الأداء.
الأمر صعب أليس كذلك؟! هذه الحال دائمًا عندما يتعلّـقُ الأمرُ بالعلاقةِ المباشرة بين البرمجيات التي نستمتعِ باستخدامها وبين العتاد الحاسوبي المعقّـد. وهنا يزدادُ الأمرُ تعقيدًا مع وجود طبقةٍ أخرى من العتاد الحاسوبي هي الجهاز الافتراضي.
على كل حالٍ سيكونُ الأمر أسهل بعض الشيء عندما نتحدّث في مقالتنا القادمة عن أجهزةِ الإدخال والإخراج الافتراضية ،التي سيكتمل بها عقد جهازنا الافتراضي...
المصدر هنا