זיכרון וירטואלי
מתוך ויקיפדיה, האנציקלופדיה החופשית
זיכרון וירטואלי הוא טכניקה לניהול והקצאה של זכרון המחשב שתפקידה לאפשר למספר תוכנות שונות לרוץ על המחשב, כאשר כל אחת מהתוכנות רואה מרחב זיכרון ששייך אך ורק לה, גודלו של מרחב זה איננו תלוי בזיכרון הפיזי.
המנגנון נוצר על מנת לאפשר ולהקל על ריצה של מספר תוכנות שנמצאות על אותו הזיכרון הפיזי. בעת כתיבת התוכנה, לא ניתן לדעת היכן זו תימצא במחשבו של המשתמש, ולכן לכאורה אין דרך שבה התוכנה תדע לגשת לזיכרון, שכן היא לא יודעת את כתובות הנתונים שברצונה לקבל. בעזרת הזיכרון הווירטואלי, כל תוכנה "רואה" מרחב זיכרון משלה, והיא ניגשת לנתונים ולפקודות בו, באמצעות כתובות וירטואליות. מרחב זה מכיל בין השאר את שירותי מערכת ההפעלה הממופים תמיד לאותן כתובות.
החומרה במעבד המחשב מתרגמת את הכתובות הווירטואליות לכתובות הפיזיות, שבעזרתן אפשר להגיע לנתונים, אותם התוכנה צריכה.
לכל תוכנה שרצה במחשב ישנן טבלאות תרגום כתובות (מכתובת וירטואלית לכתובת פיזית) שנמצאות בזכרון המחשב, טבלאות אלו מנוהלות לרוב על ידי מערכת ההפעלה. על מנת לתרגם את הכתובת הווירטואלית, מעבד המחשב ניגש לטבלאות של התוכנית הרצויה ושולף מתוכן את הכתובת הפיסית המתאימה לכתובת הווירטואלית שהתוכנה סיפקה לו.
לכן, אם שתי תוכנות תיגשנה אל אותה כתובת וירטואלית, תרגום הכתובת לכתובת פיסית יהיה שונה לכל תוכנה, ושתיהן תיגשנה לנתונים שונים, בעלי כתובות פיזיות שונות.
מרחב הזיכרון של כל תוכנה מחולק למקטעי זיכרון רציפים בגודל של כמה KB שנקראים דפים (Pages) (במעבדי אינטל, גודל כל דף הוא 4KB). כל רשומה בטבלת התרגום מכילה כתובת פיזית של דף כלשהו, ששייך לתוכנה.
מערכת ההפעלה מקצה רק את הדפים שהתוכנה צריכה, ושאר הטבלה נשארת ריקה. כך, למרות שהתוכנה "רואה" מרחב זכרון גדול (למשל 4GB) למעשה יכול להיות מוקצה לה הרבה פחות זיכרון (למשל עשרות KB).
בעזרת שיטה זו, תוכנות יכולות גם לשתף זיכרון, על ידי כך שמערכת ההפעלה מקצה לשתי תוכנות את אותו הדף. שיטה זו היא שיטה נוחה ליצירת תקשורת בין שתי תוכנות. שיטה זו גם חוסכת במקום בזיכרון למשל אם שתי התוכנות קוראות מאותו קובץ.
[עריכה] הגישה לזיכרון הפיזי
במחשב קיימים בדרך כלל שני סוגי זיכרון:
- RAM - קטן ומהיר (זכרון זה חייב אספקת חשמל כדי לשמור עליו נתונים)
- דיסק קשיח - גדול ואיטי בהרבה (המידע נשמר באמצעים מגנטיים, ואינו דורש חשמל כדי לשמור על הנתונים)
לעיתים יש אמצעי זיכרון נוספים כמו CD או דיסקטים אולם הם לא בשימוש לרוב בנושא זה.
כאשר המעבד ניגש לקרא או לכתוב נתון בזיכרון, הוא ניגש לזכרון RAM של המחשב. אם המידע הרצוי לא קיים ב-RAM, החומרה מעלה פסקה הקוראת למערכת ההפעלה, כדי שזו תביא את הנתון הרצוי מהדיסק, קריאה זו נקראת "Page Fault".
על מנת לייעל את המערכת, ולקבל מהירויות גדולות יותר, כאשר מערכת ההפעלה מתבקשת להביא מידע מהדיסק קשיח, היא מביאה חבילה שלמה של נתונים בגודל של כמה KB (הגודל תלוי במערכת), חבילה זו נקראת דף (Page).
על מנת לפנות מקום לדף החדש, מערכת ההפעלה מעבירה דף אחר, ישן יותר (שלא נמצא בשימוש בזמן האחרון) מה-RAM חזרה אל הדיסק.
[עריכה] תרגום כתובות
כדי להפוך כתובת וירטואלית לכתובת פיזית, המעבד ניגש אל טבלאות מיוחדות המכונות "טבלאות דפים" שמכילות מידע עבור התרגום. כיוון שלכל תהליך שרץ יש כמות גדולה מאוד של דפים ולרוב רק חלק קטן מהם בשימוש, לרוב בנויה טבלת הדפים במספר רמות כדי לצמצם את כמות הזיכרון שהיא תופסת: הרמה הראשונה מכילה הצבעות על דפי הטבלאות של הרמה השניה, והרמה השנייה מכילה הצבעות לדפים שמרכיבים את מרחב הזכרון של התוכנה.
בשל הצורך לבצע תרגום של הכתובות, ומכיוון שטבלאות הדפים שמורות בזכרון המחשב, כל גישה לזיכרון הווירטואלי דורשת מספר גישות לזיכרון הפיזי - גישה אחת או יותר אל טבלאות הדפים כדי למצוא את הכתובת הפיזית, וגישה אחרונה לכתובת הפיזית עצמה כדי להביא את הנתון המבוקש. כדי לצמצם את העלות הגבוהה של גישה לזיכרון, מעבדים מודרניים מכילים רכיב מטמון מהיר בשם TLB (Translation Lookaside Buffer) על המעבד עצמו שמכיל כמות מסוימת של תרגומים כתובות שהתבצעו לאחרונה, וכל בקשה לתרגום כתובת מחפשת ראשית את התרגום ברכיב זה, מה שמהיר פי כמה מגישות לזיכרון. חסרונו של ה-TLB הוא בגודלו הקטן יחסית.

