الفريق العربي للهندسة العكسية

نسخة كاملة : 1.3 مفهوم الآلة الافتراضية Virtual Machine
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .

R333T

[صورة مرفقة: dark.jpg]
 رحلة في عالم الأسمبلي   dance
 
https://www.youtube.com/playlist?list=PL..._swadKSPga

# الفصل 0 : تمهيد # الفصل 1 : المفاهيم الأساسية في لغة الassembly  
[صورة مرفقة: mqdefault.jpg]
 

https://www.youtube.com/watch?v=XHTdwcLDDYg


مفهوم الآلة الافتراضية Virtual Machine
طريقة فعّالة لشرح كيفية ارتباط hardware و software في الكمبيوتر تُسمى مفهوم virtual machine. لشرح هذا المفهوم، دعونا نبدأ بوظيفة الكمبيوتر الأساسية، وهي تنفيذ البرامج.

يمكن للكمبيوتر بشكل عام تنفيذ البرامج المكتوبة بلغته الأصلية native machine language. 
كل تعليمة في هذه اللغة بسيطة بما يكفي لتنفيذها باستخدام عدد صغير نسبيًا من الدوائر الإلكترونية. لغرض البساطة، سنطلق عليها اسم L0.

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

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


الآلات الافتراضية:
بدلاً من استخدام اللغات فقط، من الأسهل التفكير في إطار كمبيوتر وهمي (hypothetical)، أو آلة افتراضية (virtual machine)، على كل مستوى.
يمكننا تعريف الآلة الافتراضية (VM) بشكل غير رسمي على أنها برنامج يقوم بمحاكاة وظائف بعض الكمبيوترات الفعلية (physical) أو الافتراضية الأخرى.
يمكن للآلة الافتراضية VM1، كما سنطلق عليها هنا، تنفيذ الأوامر المكتوبة بلغة L1. يمكن للآلة الافتراضية VM0 تنفيذ الأوامر المكتوبة بلغة L0:
 
[صورة مرفقة: Untitled.png]

يمكن بناء كل آلة افتراضية سواء من hardware أو software. 
يمكن للأشخاص كتابة برامج لآلة الافتراضية VM1، وإذا كان من العملي تنفيذ VM1 ككمبيوتر فعلي، يمكن تنفيذ البرامج مباشرة على الأجهزة. أو يمكن تفسير/ترجمة البرامج المكتوبة بـ VM1 وتنفيذها على الآلة VM0.
لا يمكن أن تكون الآلة VM1 مختلفة جذرياً عن VM0 لأن الترجمة أو التفسير سيكونا مستغرقين للغاية من الوقت. 
ماذا لو كانت لغة VM1 لا تدعم بما فيه الكفاية ودية للمبرمجين لتكون مفيدة في التطبيقات؟ 
في هذه الحالة، يمكن تصميم آلة افتراضية أخرى، VM2، والتي يمكن فهمها بسهولة أكبر. 
يمكن تكرار هذه العملية حتى يمكن تصميم آلة افتراضية VMn لدعم لغة قوية وسهلة الاستخدام.

لغة البرمجة جافا مبنية على مفهوم virtual machine.
يتم ترجمة البرنامج المكتوب بلغة جافا بواسطة Java compiler إلى Java byte code. 
يعد هذا الأخير لغة منخفضة المستوى يتم تنفيذها بسرعة أثناء التشغيل بواسطة برنامج يعرف باسم آلة جافا افتراضية Java virtual machine (JVM).
تتم تنفيذ JVM على العديد من أنظمة الكمبيوتر المختلفة، مما يجعل البرامج بلغة جافا غالباً ما تكون مستقلة عن النظام.


الآلات المحددة

لنربط هذا بالكمبيوترات الفعلية واللغات، باستخدام أسماء مثل المستوى 2 لـ VM2 والمستوى 1 لـ VM1، كما هو موضح في الشكل 1-1.

يمثل الأجهزة الرقمية للكمبيوتر digital logic المستوى 1 للآلة. 
فوق هذا يأتي المستوى 2، والمسمى بالبنية التعليمية للتعليمات instruction set Architecture (ISA).
هذا هو المستوى الأول الذي يمكن للمستخدمين عادةً كتابة البرامج فيه، على الرغم من أن البرامج تتكون من قيم ثنائية binary تُسمى لغة الآلة machine language.

بنية التعليمات (المستوى 2)  Instruction Set Architecture
تصمم شركات تصنيع رقائق الكمبيوتر داخل المعالج مجموعة من التعليمات لأداء العمليات الأساسية، مثل التحرك move، الجمع add، أو الضرب multiply.
تُعرف هذه المجموعة من التعليمات أيضًا باسم لغة الآلة machine language.
تُنفذ كل تعليمة لغة الآلة إما مباشرة بواسطة أجهزة الكمبيوتر أو بواسطة برنامج مدمج في رقاقة المعالج المسمى بالميكروبرنامج microprogram.

لغة التجميع (المستوى 3) Assembly Language
فوق مستوى ISA، توفر لغات البرمجة طبقات ترجمة لجعل تطوير البرمجيات بمقياس كبير عمليًا.
تستخدم لغة الAssembly، التي تظهر على مستوى 3، نقاط مؤشرية (mnemonics) قصيرة مثل ADD، SUB، وMOV، والتي يمكن ترجمتها بسهولة إلى مستوى ISA.
يتم ترجمة (assemble) برامج لغة الassembly بشكل كامل إلى لغة الmachine قبل بدء تنفيذها.

لغات البرمجة عالية المستوى (المستوى 4)
في المستوى 4 توجد لغات البرمجة عالية المستوى مثل C، C++، وJava.
تحتوي البرامج في هذه اللغات على تعليمات قوية تترجم إلى عدة تعليمات لغة الassembly.
يمكنك رؤية مثل هذه الترجمة، على سبيل المثال، عن طريق فحص ملف القائمة الذي أنشأه compiler ل C++. 
يتم تجميع الcode بلغة الassembly تلقائيًا بواسطة الcompiler إلى لغة الmachine.



الإختبارات  Heart Heart Heart

1- في كلماتك الخاصة، اشرح مفهوم الآلة الافتراضية.
هي مجموعة من الطبقات التي تسمح بفك تشفير لغة التجميع إلى لغة الآلة.

2- لماذا تعتقد أن البرامج المترجمة غالبًا ما تُنفذ بسرعة أكبر من البرامج المفسرة؟
البرامج المترجمة تعمل بسرعة أكبر، بسبب تنفيذ الكود مباشرة على الآلة. البرامج المفسرة تفسر وتنفذ التعليمات واحدة تلو الأخرى.

(صحيح/خطأ): عند تشغيل برنامج مفسر مكتوب بلغة L1، يتم فك تشفير وتنفيذ كل تعليمة من تعليماته بواسطة برنامج مكتوب بلغة L0.
صحيح

4- شرح أهمية الترجمة عند التعامل مع لغات على مستويات آلة افتراضية مختلفة.
يتم ترجمة البرنامج L1 بأكمله إلى برنامج L0، الذي يعمل بعد ذلك على أجهزة الكمبيوتر.

على أي مستوى تظهر لغة التجميع في المثال الذي يظهر في هذا القسم؟
على المستوى 3 من مستويات الآلة الافتراضية المحددة.


ما الأداة البرمجية التي تسمح لبرامج جافا المترجمة بالتشغيل على أي كمبيوتر تقريبًا؟
آلة جافا الافتراضية (JVM).

اسم الأربعة مستويات للآلة الافتراضية المذكورة في هذا القسم، من الأقل إلى الأعلى.

المنطق الرقمي، بنية التعليمات، لغة التجميع، لغة البرمجة العالية المستوى.

لغة البرمجة العالية المستوى.
لغة التجميع، 
، بنية التعليمات،
المنطق الرقمي


لماذا لا يكتب المبرمجون التطبيقات بلغة الآلة؟
لغة الآلة صعبة الفهم، وتقديم الكود صعب قراءته وكتابته.

تستخدم لغة الآلة على أي مستوى من الآلة الافتراضية التي تظهر في الشكل 1-1؟
المستوى 2 - بنية التعليمات.

التصريحات على مستوى لغة التجميع في الآلة الافتراضية تُترجم إلى التصريحات على أي مستوى آخر؟
المستوى 2 - بنية التعليمات.

 
flower