הבדלים בין גרסאות בדף "מכונה וירטואלית"

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