זיכרון וירטואלי

מתוך WikiBook

קפיצה אל: ניווט, חיפוש

זיכרון וירטואלי הוא טכניקה לניהול והקצאה של זכרון המחשב שתפקידה לאפשר למספר תוכנות שונות לרוץ על המחשב, כאשר כל אחת מהתוכנות רואה מרחב זיכרון (בדרך כלל של 4GB) ששייך אך ורק לה, גודלו של מרחב זה איננו תלוי בזכרון הפיזי.

המנגנון נוצר על מנת לאפשר ולהקל על ריצה של מס' תוכנות שנמצאות על אותו הזיכרון הפיסי. בעת כתיבת התוכנה, לא ניתן לדעת היכן זו תימצא במחשבו של המשתמש, ולכן לכאורה אין דרך שבה התוכנה תדע לגשת לזיכרון, שכן היא לא יודעת את כתובות הנתונים שברצונה לקבל. בעזרת הזכרון הוירטואלי, כל תוכנה "רואה" מרחב זכרון משלה, והיא ניגשת לנתונים ולפקודות בו, באמצעות כתובות וירטואליות. מרחב זה מכיל בין השאר את שירותי מערכת ההפעלה הממופים תמיד לאותן כתובות.

החומרה במעבד המחשב מתרגמת את הכתובות הוירטואליות לכתובות הפיסיות האמיתיות, שבעזרתן אפשר להגיע לנתונים, אותם התוכנה צריכה.

לכל תוכנה שרצה במחשב ישנן טבלאות תרגום כתובות (מכתובת וירטואלית לכתובת פיסית) שנמצאות בזכרון המחשב, טבלאות אלו מנוהלות לרוב על ידי מערכת ההפעלה. על מנת לתרגם את הכתובת הוירטואלית, מעבד המחשב ניגש לטבלאות של התוכנית הרצויה ושולף מתוכן את הכתובת הפיסית המתאימה לכתובת הוירטואלית שהתוכנה סיפקה לו.

לכן, אם שתי תוכנות תיגשנה אל אותה כתובת וירטואלית, תרגום הכתובת לכתובת פיסית יהיה שונה לכל תוכנה, ושתיהן תיגשנה לנתונים שונים, בעלי כתובות פיסיות שונות.


מרחב הזכרון של כל תוכנה מחולק למקטעי זכרון רציפים בגודל של כמה KB שנקראים דפים (Pages) (במעבדי אינטל, גודל כל דף הוא 4KB). כל רשומה בטבלת התרגום מכילה כתובת פיסית של דף כלשהו, ששייך לתוכנה.

מערכת ההפעלה מקצה רק את הדפים שהתוכנה צריכה, ושאר הטבלה נשארת ריקה. כך, למרות שהתוכנה "רואה" מרחב זכרון גדול (למשל 4GB) למעשה יכול להיות מוקצה לה הרבה פחות זכרון (למשל עשרות KB).

בעזרת שיטה זו, תוכנות יכולות גם לשתף זכרון, על ידי כך שמערכת ההפעלה מקצה לשתי תוכנות את אותו הדף. שיטה זו היא שיטה נוחה ליצירת תקשורת בין שתי תוכנות. שיטה זו גם חוסכת במקום בזכרון למשל אם שתי התוכנות קוראות מאותו קובץ.

הגישה לזכרון הפיסי

במחשב קיימים בדרך כלל שני סוגי זכרון:

RAM -רכיב הזכרון העיקרי לעבודה המשרת את המעבד. ניתן גם לכתוב עליו וגם לקרוא ממנו. מיועד לאיחסון הוראות ונתונים הדרושים למעבד (זכרון זה חייב אספקת חשמל כדי לשמור עליו נתונים). זכרון קטן ומהיר, אך נדיף (בעת כיבוי המחשב מה שלא נשמר-נעלם). גדלים של RAM מקובלים: 512MB, 1024MB, 2048MB, 4096MB

דיסק קשיח - גדול ואיטי בהרבה (המידע נשמר באמצעים מגנטיים, ואינו דורש חשמל כדי לשמור על הנתונים) לעיתים יש אמצעי זיכרון נוספים כמו CD או דיסקטים אולם הם לא בשימוש לרוב בנושא זה.

כאשר המעבד ניגש לקרא או לכתוב נתון בזכרון, הוא ניגש לזכרון RAM של המחשב. אם המידע הרצוי לא קיים ב-RAM, החומרה מעלה פסקה הקוראת למערכת ההפעלה, כדי שזו תביא את הנתון הרצוי מהדיסק, קריאה זו נקראת "Page Fault".

על מנת לייעל את המערכת, ולקבל מהירויות גדולות יותר, כאשר מערכת ההפעלה מתבקשת להביא מידע מהדיסק קשיח, היא מביאה חבילה שלמה של נתונים בגודל של כמה KB (הגודל תלוי במערכת), חבילה זו נקראת דף (Page).

על מנת לפנות מקום לדף החדש, מערכת ההפעלה מעבירה דף אחר, ישן יותר (שלא נמצא בשימוש בזמן האחרון) מה-RAM חזרה אל הדיסק.

תרגום כתובות כדי להפוך כתובת וירטואלית לכתובת פיזית, המעבד ניגש אל טבלאות מיוחדות המכונות "טבלאות דפים" שמכילות מידע עבור התרגום. מכיוון שלכל תהליך שרץ יש כמות גדולה מאוד של דפים ולרוב רק חלק קטן מהם בשימוש, לרוב בנויה טבלת הדפים במספר רמות כדי לצמצם את כמות הזיכרון שהיא תופסת: הרמה הראשונה מכילה הצבעות על דפי הטבלאות של הרמה השניה, והרמה השנייה מכילה הצבעות לדפים שמרכיבים את מרחב הזכרון של התוכנה.

בשל הצורך לבצע תרגום של הכתובות, ומכיוון שטבלאות הדפים שמורות בזכרון המחשב, כל גישה לזיכרון הוירטואלי דורשת מספר גישות לזיכרון הפיזי - גישה אחת או יותר אל טבלאות הדפים כדי למצוא את הכתובת הפיזית, וגישה אחרונה לכתובת הפיזית עצמה כדי להביא את הנתון המבוקש. כדי לצמצם את העלות הגבוהה של גישה לזיכרון, מעבדים מודרניים מכילים רכיב מטמון מהיר בשם TLB (Translation Lookaside Buffer) על המעבד עצמו שמכיל כמות מסוימת של תרגומים כתובות שהתבצעו לאחרונה, וכל בקשה לתרגום כתובת מחפשת ראשית את התרגום ברכיב זה, מה שמהיר פי כמה מגישות לזיכרון. חסרונו של ה-TLB הוא בגודלו הקטן יחסית.

זיכרון וירטואלי (וירטואלי - לא ריאלי, לא בפועל אלא בפוטנציה, לא ממשי אלא מדומה. החוויה הוירטואלית הופכת את המחשב לחלק מהמשתמש - הוא רואה, שומע, חש ובסך הכל נטמע בחוויה הממוחשבת. למשל, אפשר להעביר התרחשות של ניתוח באמצעות מסכים מתאימים, אזניות וכפפות, והמנתח יכול לבצע את הניתוח ממרחק).

זכרון וירטואלי הוא טכניקה להגדלה משמעותית של זיכרון המחשב (הזיכרון המשמש את המעבד העומד לרשותה של תוכנית מחשב בעת שהיא מתבצעת). הזיכרון הווירטואלי גדול במידה ניכרת מהזיכרון הפיזי העומד לרשות המחשב, והוא נוצר באמצעות כתיבת תוכן הזיכרון הווירטואלי על גבי הדיסק הקשיח, כשרק חלקו הפעיל של זיכרון זה נמצא בזיכרון הפיזי (ומתחלף בהתאם לצורך).

הגישה לדיסק הקשיח איטית מאוד יחסית לגישה לזיכרון הפיזי, ולכן מימוש זיכרון וירטואלי אשר לא יפגע אנושות בביצועי המחשב מצריך ניהול יעיל שלו על-ידי מערכת הפעלה. הצורך בזיכרון וירטואלי נובע מהעובדה שככל שהתוכנות מתקדמות הן דורשות יותר ויותר מקום ביזכרון ה- RAM (זיכרון קטן ומהיר אשר חייב אספקת חשמל כדי לשמור עליו נתונים) דבר שמביא לעומס עד כדי כך שלפעמים זיכרון ה- RAM יגיע למלוא הקיבולת שלו. ניהול הזיכרון הווירטואלי על-ידי מערכת ההפעלה נעשה באופן שבו התוכניות המתבצעות במחשב (ומשתמשות בזיכרון) כלל אינן חשות בכך שזהו זיכרון וירטואלי אולם משתמש הקצה יבחין בהאטה בזמני התגובה של המחשב.

למעשה חסום גודלו של הזיכרון הווירטואלי רק על ידי נפח הזיכרון המצוי ב- Hard Disk. כאשר מילה במחשב של 32 סיבית, למשל, משמשת לרישום הכתובת, מאפשר הדבר זיכרון שגודלו עד 4GB, שהיה במשך שנים רבות הרחק מעבר לגודל הזיכרון הפיזי המרבי. למעשה יש לשמור על יחס סביר בין גודלו של הזיכרון הווירטואלי וגודל הזיכרון הפיזי שעליו הוא נשען, כדי לא להגיע לירידה חמורה בביצועי המחשב.


נעבור עתה לזיכרון הראשוני.

[[1]]

פרקי ספר הלימוד