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

אין תקציר עריכה
מ (←‏יתרונות וחסרונות: clean up, replaced: הינה ← היא באמצעות AWB)
[[קובץ:VM_Monitor.svg|ממוזער|שמאל|300px|ארכיטקטורה טיפוסית של מכונה וירטואלית.]]
[[קובץ:VirtualBox2.png|ממוזער|שמאל|300px|חלונות המכונה הווירטואלית [[VirtualBox]] (חלון כחול וחלון לבן) על רקע משטח העבודה המרכזי של המחשב (חום). בחלון הכחול יש סביבת עבודה של מערכת הפעלה שונה מזו שיש בכלל המחשב.]]
ב[[מדעי המחשב]], '''מכונה וירטואלית''' היא [[תוכנה]] היוצרת סביבה הנחוצה להפעלתה של תוכנה אחרת, מבלי שיהיה צורך במימוש פיזי של סביבה זו. מכונה וירטואלית משחררת את התוכנה המתבססת עליה מתלות ב[[חומרה]] מסוימת, משום שכל חומרה שעליה תמומש המכונה הווירטואלית תאפשר את הפעלת התוכנה.
 
מכונה וירטואלית מאפשרת להריץ כמה [[מערכת הפעלה|מערכות הפעלה]] שונות על מחשב אחד, ואף בו זמנית. כך לדוגמה ניתן להריץ מערכת הפעלה [[לינוקס]] על מערכת הפעלה [[חלונות]] ולהפך. מכונה וירטואלית למערכת הפעלה במחשב אישי מקלה את השימוש הסימולטני בתוכנות וחומרות התואמות מערכות הפעלה שונות. מכונה כזו מתפקדת כחלון המדמה מחשב אישי עם מערכת הפעלה השונה מזו של שאר המחשב. האלטרנטיבות למכונה הווירטואלית הן התקנה של מספר מערכות ההפעלה על המחשב הפיזי ואיתחול המחשב בכל פעם שרוצים לשנות סביבת עבודה (מסורבל מאוד), החלפה של חלק מהחומרות והתוכנות כך שכל היישומים יתאמו אותה מערכת הפעלה (יקר ולפעמים בלתי אפשרי) או קניית מחשב נוסף (יקר).
 
מכונה וירטואלית למערכת הפעלה חוסכת זמן וכסף, גם כאשר משתמשים בה ב[[ניסוי וטעייה]] לצורך לימוד או חקר תחזוקת מחשבים. כאשר מכונה וירטואלית כזו מתקלקלת בשל ניסוי לא מוצלח, ניתן על נקלה למחוק אותה ולהגדיר מכונה וירטואלית חדשה במקומה, מכיוון שהמכונה הווירטואלית מסתכמת למעשה בקובץ או מספר קובצי מחשב, תמיד ניתן לגבות קבצים אלו ולשכתב מחדש את המכונה הווירטואלית, זאת במקום לתקן או להחליף מחשב . שימוש נפוץ נוסף במכונה וירטואלית, הוא לבחינה של בתי תוכנה לתוכנה חדשה שהם מפיצים בסביבה נקייה, כדי לדמות תנאים שעלולים לשרור במחשבי לקוחות. כמו כן משתמש יכול לבחון תוכנה חדשה כאשר יש חשש לסיכון, אם בשל באגים או קוד זדוני שעלול לפגוע במחשב, בשל כך שהמכונה הווירטואלית רצה בסביבה "מנותקת" ממערכת ההפעלה הראשית.
 
===במחשבים מרכזיים ובשרתים===
[[Java]] היא דוגמה בולטת ל[[שפת תכנות]] המתבססת על מכונה וירטואלית. [[תוכנית מחשב]] שנכתבה בשפת Java [[מהדר|מהודרת]] לא ל[[שפת מכונה]], שנועדה מטבעה לחומרה מסוימת, אלא ל-[[bytecode]] המתבצע על-גבי מכונה וירטואלית - (Java Virtual Machine ([[JVM]]. זו התכונה המאפשרת לתוכנית Java לרוץ על כל מערכת הפעלה בעלת JVM, מטלפונים סלולרים ועד למחשבי על. כך לדוגמה, [[יישומון]] Java המשולב בדף [[HTML]] יכול להתבצע ב[[מערכת הפעלה|מערכות ההפעלה]] [[Windows]], [[Mac OS]], [[גנו/לינוקס|לינוקס]] ואחרות, ללא כל צורך בהתאמה לאחת ממערכות ההפעלה, משום שבכל אחת ממערכות ההפעלה רץ היישומון על המכונה הווירטואלית JVM.
 
ארכיטקטורת [[NET.]] של [[מיקרוסופט]] מכילה אף היא רכיב החוצץ בין התוכנית המתבצעת לבין מערכת ההפעלה, המכונה Common Language Runtime (בקיצור CLR), ושפתו נקראת Common Intermediate Language (בקיצור [[CIL]], "שפת ביניים משותפת"). רכיב זה מהווה למעשה מכונה וירטואלית, המפרידה בין החומרה לתוכנה. רכיב זה מאפשר לפתח בשפות שונות, כל עוד השפה מהודרת לקובץ היכול לרוץ על ה־CLR.
 
===יתרונות וחסרונות===
ניידות היא אחת מהבעיות הקשות עימן מתמודד עולם המחשוב כיום. מדי שנה מוציאים סכומים ניכרים על מנת להתמודד עימה. מכונה וירטואלית, מבחינה זו, פותרת בעיה זו. גם אם יומצא מחשב חדש אין צורך להדר את התוכנית מחדש. יש לכתוב מכונה וירטואלית עבור אותו מחשב, ומרגע זה הוא יוכל להריץ את כל התוכניות שהודרו למכונה וירטואלית מסוג זה.
 
יחד עם זאת, תוכניות המורצות על ידי מכונה וירטואלית איטיות יותר, וזאת בשל הצורך לתרגם את התוכנית לשפת מכונה בכל הרצה.
על אף התקדמות רבה בשנים האחרונות, תוכניות שאמורות לפעול בזמן אמת עדיין מתורגמות לשפת מחשב על מנת לשפר את ביצועיהן. אמנם ברבות מהשפות המבוססות על מכונה וירטואלית ניתן להדר את התוכנית ישירות לשפת מכונה (ולא לשפת ביניים), אך בכך אובדת תכונת הניידות של השפה, החשובה מאד. על אף האמור, הקצאת זיכרון, לדוגמה, מתבצעת מהר יותר באמצעות מכונה וירטואלית.