מכונה וירטואלית
מתוך ויקיפדיה, האנציקלופדיה החופשית
בעולם המחשבים, מכונה וירטואלית היא תוכנה היוצרת סביבה הנחוצה להפעלתה של תוכנה אחרת, מבלי שיהיה צורך במימוש פיזי של סביבה זו. מכונה וירטואלית משחררת את התוכנה המתבססת עליה מתלות בחומרה מסוימת, משום שכל חומרה שעליה תמומש המכונה הווירטואלית תאפשר את הפעלת התוכנה.
תוכן עניינים |
[עריכה] מכונה וירטואלית למערכות הפעלה
חברת IBM הייתה ראשונה (בשנת 1972) ליישם את רעיון של מכונה וירטואלית במחשבים מרכזיים מסדרת 370, במערכת ההפעלה VM שמאז עברה הרבה מהדורות ונמצאת עד היום בשימוש בגרסה הקרויה z/VM. מערכת הפעלה זו מסוגלת להריץ תחתיה אלפי עותקים של מערכות הפעלה אחרות: MVS, VSE, LINUX ואף את מערכת ההפעלה VM בעצמה. כל מערכות ההפעלה האורחות מקבלות שרותים ממערכת ההפעלה VM, ומתנהגות כאילו בוצעו במחשב אמיתי.
[עריכה] מכונה וירטואלית לשפת תכנות
על מנת להריץ תוכנה על מחשב, יש לתרגם אותה משפת התכנות שבה נכתבה, לשפה אותה המחשב מסוגל להבין - שפת מכונה. בדרך כלל שפות המכונה מכילות מספר קטן של פקודות, וכל פקודה בהן מיוצגת על ידי רצף של אפסים ואחדות בלבד, מה שהופך כתיבת תוכניות בצורה ישירה בשפת מכונה למלאכה טכנית ומייגעת. על כן, רוב התוכנות נכתבות בשפות מתוחכמות יותר ונוחות יותר לשימוש, ולאחר מכן מתורגמות לשפת מכונה בידי תוכנה מיוחדת הנקראת מהדר (קומפיילר). התהליך בו לוקח המהדר תוכנית הכתובה בשפת תכנות כלשהי ובונה ממנה תוכנה בשפת מכונה הניתנת להרצה על המחשב נקרא הידור.
מכיוון שלמחשבים שונים יש שפות מכונה שונות, תוכנה שהודרה בידי מהדר כך שתפעל על מחשב אחד אינה שמישה במחשב אחר, בעל שפת מכונה שונה. זוהי בעיה של ניידות (פורטביליות), ושימוש במכונות וירטואליות הוא פתרון אפשרי לבעיה זו.
הדרך שבה מתגברות מכונות וירטואליות על בעית הפורטביליות היא על ידי כך שהתוכנית מהודרת לשפת ביניים, במקום לשפת מכונה. בזמן ריצה, המכונה הוירטואלית נכנסת לפעולה, ומתרגמת את שפת הביניים לשפת מכונה, בהתאם למחשב ולמערכת ההפעלה המותקנת עליו. כלומר, אם תוכניתן כתב תוכנית בג'אווה, בעת ההידור התוכנית תתורגם לשפת ביניים, שאותה מסוגלת המכונה הווירטואלית של ג'אווה להבין בלי תלות במחשב ובמערכת ההפעלה עליה היא מותקנת. בעת הרצת התוכנה, המכונה הווירטואלית תתרגם את התוכנית לשפה שהמחשב עליו היא רצה מבין. לפיכך ניתן להעביר תכניות מהודרות בין מחשבים שונים ולקבל אותה תוצאה בסיום הריצה. המכונה הווירטואלית תבטיח שהתוכנית תתבצע כראוי על כל אחד משני המחשבים.
מכונה וירטואליות, לפיכך, היא תוכנית מחשב, המקבלת כקלט הוראות הכתובות בשפת ביניים, מתרגמת אותן לשפת מכונה ומריצה אותן. להבדיל ממהדר, אשר מתרגם את התוכנית כולה בטרם ניתן יהיה להריץ אותה, המכונה הווירטואלית מבצעת את התרגום תוך כדי ההרצה עצמה, בדומה למפרש. חשוב להדגיש כי המכונה הוירטואלית לא מתרגמת שפה עילית לשפת ביניים. שלב זה מבוצע על ידי המהדר בשלב הידור התוכנית.
ג'אווה היא דוגמה בולטת לשפת תכנות המתבססת על מכונה וירטואלית. תוכנית מחשב שנכתבה בשפת ג'אווה מהודרת לא לשפת מכונה, שנועדה מטבעה לחומרה מסוימת, אלא ל- BYTE CODE המתבצע על-גבי מכונה וירטואלית - (Java Virtual Machine (JVM. זו התכונה המאפשרת לתוכנית ג'אווה לרוץ על כל מערכות הפעלה בעלת JVM, מטלפונים סלולרים, ועד למחשבי על. כך לדוגמה, יישומון ג'אווה המשולב בדף HTML יכול להתבצע במערכות ההפעלה Windows, Mac OS, לינוקס ואחרות, ללא כל צורך בהתאמה ספציפית לאחת ממערכות ההפעלה, משום שבכל אחת ממערכות ההפעלה רץ היישומון על המכונה הווירטואלית JVM.
ארכיטקטורת NET. של מיקרוסופט מכילה אף היא רכיב החוצץ בין התוכנית המתבצעת לבין מערכת ההפעלה, המכונה Common Language Runtime (בקיצור CLR), ושפתו נקראת Common Intermediate Language (בקיצור CIL, "שפת ביניים משותפת"). רכיב זה מהווה למעשה מכונה וירטואלית, המפרידה בין החומרה לתוכנה. רכיב זה מאפשר לפתח בשפות שונות, כל עוד השפה מהודרת לקובץ היכול לרוץ על ה־CLR.
[עריכה] יתרונות וחסרונות
פורטביליות הינה אחת מהבעיות הקשות עימן מתמודד עולם המחשוב כיום. מדי שנה מוצאים סכומים ניכרים על מנת להתמודד עימה. מכונה וירטואלית, מבחינה זו, פותרת בעיה זו. גם אם יומצא מחשב חדש אין צורך להדר את התוכנית מחדש. יש לכתוב מכונה וירטואלית עבור אותו מחשב, ומרגע זה הוא יוכל להריץ את כל התוכניות שהודרו למכונה וירטואלית מסוג זה.
יחד עם זאת, תכניות המורצות על ידי מכונה וירטואלית איטיות יותר, וזאת בשל הצורך לתרגם את התוכנית לשפת מכונה בכל הרצה. על אף התקדמות רבה בשנים האחרונות, תכניות שאמורות לפעול בזמן אמת עדיין מתורגמות לשפת מחשב על מנת לשפר את ביצועיהן. אמנם ברבות מהשפות המבוססות על מכונה וירטואלית ניתן להדר את התוכנית ישירות לשפת מכונה (ולא לשפת ביניים), אך בכך אובדת תכונת הפורטביליות של השפה, החשובה מאד. על אף האמור, הקצאת זכרון, לדוגמה, מתבצעת מהר יותר באמצעות מכונה וירטואלית.
בנוסף, מאחר ורוב התכניות והספריות (DLL) הקיימות היום מתורגמות כבר לשפת מחשב, שילובן בשפה המבוססת על מכונה וירטואלית חיונית, אך אינה דבר פשוט כלל ועיקר וקיימים מנגנונים מסובכים על מנת להתמודד עם בעיה זו.