מכונה וירטואלית – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
שורה 28:
==מכונה וירטואלית לשפת תכנות==
[[קובץ:Java-jvm.png|300px|ממוזער|סכימה שמדגימה מכונה וירטואלית ל-JAVA]]
על מנת להריץ [[תוכנה]] על מחשב, יש לתרגם אותה מ[[שפת תכנות|שפת התכנות]] שבה נכתבה, לשפה אותה המחשב מסוגל להבין - [[שפת מכונה]]. בדרך כלל שפות המכונה מכילות מספר קטן של פקודות, וכל פקודה בהן מיוצגת על ידי רצף של אפסים ואחדות בלבד, מה שהופך כתיבת תוכניות בצורה ישירה בשפת מכונה למלאכה טכנית ומייגעת. על כן, רוב התוכנות נכתבות בשפות מתוחכמות יותר ונוחות יותר לשימוש אנושי, ולאחר מכן מתורגמות לשפת מכונה בידי תוכנה מיוחדת הנקראת [[מהדר]]. התהליך בו לוקח המהדר תוכנית הכתובה בשפת תכנות כלשהי ובונה ממנה תוכנה בשפת מכונה הניתנת להרצה על המחשב נקרא '''הידור'''.
 
מכיוון שלמחשבים שונים יש שפות מכונה שונות, תוכנה שהודרה בידי מהדר כך שתפעל על מחשב אחד אינה שמישה במחשב אחר, בעל שפת מכונה שונה. זוהי בעיה של '''ניידותתאימות''', ושימוש במכונות וירטואליות הוא פתרון אפשרי לבעיה זו.
 
הדרך שבה מתגברות מכונות וירטואליות על בעיית הניידותתאימות היא על ידי כך שהתוכנית מהודרת לשפת ביניים, במקום לשפת מכונה. בזמן ריצה, המכונה הווירטואלית נכנסת לפעולה, ומתרגמת את שפת הביניים לשפת מכונה, בהתאם למחשב ולמערכת ההפעלה המותקנת עליו. כלומר, אם תוכניתןמתכנת כתב תוכנית ב-Java, בעת ההידור התוכנית תתורגם לשפת ביניים, שאותה מסוגלת המכונה הווירטואלית של Java להבין בלי תלות במחשב ובמערכת ההפעלה עליה היא מותקנת. בעת הרצת התוכנה, המכונה הווירטואלית תתרגם את התוכנית לשפה שהמחשב עליו היא רצה מבין. לפיכך ניתן להעביר תוכניות מהודרות בין מחשבים שונים ולקבל אותה תוצאה בסיום הריצהההרצה. המכונה הווירטואלית תבטיח שהתוכנית תתבצע כראוי על כל אחד משני המחשבים.
 
מכונה וירטואלית, לפיכך, היא [[תוכנית מחשב]], המקבלת כקלט הוראות הכתובות בשפת ביניים, מתרגמת אותן לשפת מכונה ומריצה אותן. להבדיל ממהדר, אשר מתרגם את התוכנית כולה בטרם ניתן יהיה להריץ אותה, המכונה הווירטואלית מבצעת את התרגום תוך כדי ההרצה עצמה, בדומה ל[[מפרש (תוכנה)|מפרש]]. חשוב להדגיש כי המכונה הווירטואלית לא מתרגמת שפה עילית לשפת ביניים. שלב זה מבוצע על ידי המהדר בשלב הידור התוכנית.