(C) Yohai Devir January מבנה מחשבים ספרתיים תרגול מס ' 12: זיכרון וירטואלי ב - VAX מבוסס על תרגולים מאת מורן גביש ואורן קצנגולד
(C) Yohai Devir January במערכת עם הרבה תהליכים עלולות טבלאות התרגום בזיכרון הפיזי למלא את כל הזיכרון, כך שלא ישאר מקום נוסף עבור מסגרות ו / או עבור טבלאות התרגום עצמן. הבעיה
(C) Yohai Devir January הפתרון זיכרון משני דיסק דף מתוך PT SPT PT זיכרון פיזי SBR CPU P0 PT P1 PT מרחבים מדומים של תהליכים מרחב מדומה של system P0 BR P1 BR 3 2
(C) Yohai Devir January 20064
(C) Yohai Devir January 20065
(C) Yohai Devir January 20066
(C) Yohai Devir January נתון
(C) Yohai Devir January כניסת PTE מתאימה לדף של P1
(C) Yohai Devir January כניסת PTE מתאימה לדף של S0
(C) Yohai Devir January עותק של הדף המבוקש ממרחב S0
(C) Yohai Devir January מצביע
(C) Yohai Devir January עותק של הדף המבוקש ממרחב P1
(C) Yohai Devir January הנתון פיזית (כעת ניתן לקרוא אותו)
(C) Yohai Devir January נחלק את הזיכרון הפיזי לשניים, חלק גדול למסגרות וחלק קטן לטבלת תרגום אחת ויחידה, SPT = System Page Table, הממפה את המרחב הוירטואלי של ה -system. ה SBR = System Base Register מצביע על תחילת טבלת ה -SPT. היתרון בשמירת טבלאות התרגום בזיכרון הוירטואלי הוא שהן נשמרות בזיכרון המשני, וכך נותר מקום בזיכרון הפיזי למספר רב יותר של מסגרות.
(C) Yohai Devir January נחלק את הזיכרון המשני לשניים : מרחב מדומה של system, ומרחבים מדומים של התהליכים. טבלאות התרגום עצמן מחולקות לדפים, אותם ניתן להביא למסגרות של הזיכרון הפיזי. בצורת מימוש זו, לצורך חיפוש נתון ישנן 3 גישות לזיכרון הפיזי : 1. ל -SPT. 2. לדף מתוך טבלת התרגום ( דף מתוך המרחב הוירטואלי של ה - system). 3. לדף של הנתון עצמו ( דף מתוך מרחב וירטואלי של התהליך ). ייתכנו שני Page Faults בגישה לנתון יחיד : כאשר הדף של טבלת התרגום לא נמצא בזיכרון הפיזי, וכאשר הדף של התהליך עצמו איננו בזיכרון הפיזי.
(C) Yohai Devir January איך נראית כתובת וירטואלית ב VAX? גודל כתובת וירטואלית : 32 סיביות גודל מרחב כתובות וירטואלי 2 32 בתים = 4GB. גודל עמוד / מסגרת : 512 בתים. Address space 0 – Process / 1 – System 0/1 Address space Virtual Page Number (VPN) Offset Bit 31Bit 30Bits 9-29Bits 0-8 סיבית ה -MSB של הכתובת המציינת האם ניגשים למרחב הוירטואלי של ה -system (S0) או למרחב וירטואלי של תהליך. MSB=0 - הכתובת הוירטואלית הנה במרחב וירטואלי של התהליך. MSB=1 - הכתובת הוירטואלית במרחב הוירטואלי של ה -system שמשותף לכל התהליכים.
(C) Yohai Devir January לכל תהליך יש שני מרחבים וירטואליים הנקראים P0 ו -P1 וכן טבלאות תרגום P0PT ו -P1PT בהתאמה, אחד עבור זיכרון סטטי ואחד עבור זיכרון דינמי. הסיבית Address space מציינת לאיזה מרחב וירטואלי מתייחסים P0 או P1. MSB+2MSB: 00 - המרחב הוירטואלי P0 של התהליך המרחב הוירטואלי P1 של התהליך המרחב הוירטואלי S0 של ה -system, משותף לכל התהליכים לא קיים. ל -system, בניגוד לתהליך אין שני מרחבים וירטואליים, אלא S0 בלבד. תרגום הכתובות הוירטואליות יעשה באמצעות טבלאות תרגום ( הנמצאות במרחב המדומה של ה -system)
(C) Yohai Devir January ייחודו של התהליך הפעיל : מערכת ההפעלה " תדאג " ש -P0BR ו -P0BR יצביעו אל תחילת טבלאות התרגום שלו ( בכל רגיסטר מאוחסנת כתובת וירטואלית במרחב ה - system - סיביות ה MSB הן "10" - למה ?). עדכון הכתובות בשני רגיסטרים אלה מתבצע context switch. מבנה כתובת פיזית: גודל כתובת פיזית: לכל היותר 30 סיביות. גודל מקסימאלי של זיכרון פיזי : 2 30 = 1GB. Physical Frame Number (PFN)offset 21 bit9 bit
(C) Yohai Devir January מבנה כניסה בטבלת תרגום (PTE): PFN(Not used)ModifiedProtection CodeValid bit
(C) Yohai Devir January תהליך מציאת נתון ב -VAX: תחילה נבצע פעולות חישוב על מנת למצוא את כתובת הכניסה המתאימה בטבלת ה -SPT: נחלק את הכתובת הוירטואלית של הנתון המבוקש לשדות VPN ו - Offset. נמצא את הכניסה המתאימה בטבלת התרגום ( הוירטואלית ) ע " י החישוב PTE_Address = PxBR + VPN*(Size of One PTE). כתובת ה -PTE במרחב ה -system היא כתובת וירטואלית, ולכן המעבד לא יכול לגשת אליה. נפרק אותה לשדות VPN - Offset ונחשב את כתובת ה -PTE בטבלת ה -SPT באופן דומה לחישוב כניסת ה -PTE של טבלת התרגום : כניסת ה -PTE = ( גודל כניסה ב -SPT) * VPN + SBR. ההבדל הוא בכך ש -SPT יושבת בזיכרון הפיסי ולכן כעת ניתן לגשת ל - PTE.
(C) Yohai Devir January גישה 1: ניגש לטבלת ה -SPT בזיכרון הפיזי לכניסת ה -PTE שמצאנו. גישה 2: מתוך ה -PTE שקיבלנו בגישת הזיכרון הראשונה נחלץ את שדה ה -PFN ( לאחר שוידאנו Valid) ובעזרתו נמצא את הכתובת הפיסית של הדף מתוך טבלת התרגום של התהליך. ע " י שרשור ה -offset ל -PFN נקבל כתובת פיסית לגישת זיכרון שניה - גישה ל -PTE מתוך טבלת התרגום PxPT. גישה 3: הגישה האחרונה היא לנתון עצמו. מתוך ה -PTE ( שקיבלנו בגישת זיכרון 2) מחלצים את ה -PTE ומשרשרים לו את ה -offset מהכתובת הוירטואלית הראשונית.
(C) Yohai Devir January מה קורה אם הדף של התהליך לא בזיכרון ? SPT M=1 PFN V=1 PFN דף מתוך PT דף ממרחב התהליך אם היה Page Fault בגישה לדף של התהליך עצמו, מערכת ההפעלה צריכה לדאוג להביא את הדף, תוך עדכון סיבית Valid=1 בדף של טבלת התרגום וסיבית Modified=1 ב - SPT ( למה ?) רק כאשר נפנה את הדף של טבלת התרגום חזרה לזיכרון המשני ( למרחב המדומה של system ) אז נעתיק אותו מכיוון שהתבצע בו עידכון.
(C) Yohai Devir January דוגמא מספרית - גישה לכתובת המדומה - VAX-11/780 נתונה הכתובת הוירטואלית הבאה (בהקסדצימלי): 0x7F0051F4. יש להפוך את הכתובת לבינארי: Offset (9 bits) = 0x1F4 VPN (21 bits) הביט השמאלי ביותר (ה-msb) הוא 0 הכתובת הוירטואלית נמצאת במרחב התהליכים. הביט השני משמאל הוא 1 הכתובת הוירטואליות נמצאת במרחב הוירטואלי P1 של התהליך. ה-VPN הוא מספר הדף המבוקש במרחב P1, ולמעשה זהו מספר הכניסה בטבלת התרגום שבמרחב ה-system.
(C) Yohai Devir January VPN*4 = = 0x7E00A0 + P1 Base Register + 0x8F (Given on register P1BR) ============= Virtual ad. of P1PTE 0x900100A0 כדי למצוא את הכתובת של כניסת התרגום יש לבצע את החישוב : PTE_Address = PxPR + VPN*(Size of One PTE) באופן הבא : כך קיבלנו את הכתובת הוירטואלית של כניסת התרגום שבמרחב ה-system: 0x900100A0
(C) Yohai Devir January יש להפוך את הכתובת לבינארי: Offset (9 bits) = 0x0A0 VPN (21 bits) הביט השמאלי ביותר (ה-msb) הוא 1 הכתובת הוירטואלית נמצאת במרחב ה- system. ה-VPN הוא מספר הדף המבוקש במרחב S0, ולמעשה זהו מספר הכניסה בטבלת ה-SPT שבזכרון הפיזי. כך קיבלנו את הכתובת הוירטואלית של כניסת התרגום שבמרחב ה-system: 0x900100A0
(C) Yohai Devir January VPN*4 = = 0x SPT Base Register + 0x (Given on register SBR) ============= Physical ad. of S0 PTE 0x (contains: 0x940001C0) כדי למצוא את הכתובת של כניסת התרגום יש לבצע את החישוב : PTE_Address =SBR + VPN*(Size of each PTE in SPT) באופן הבא :
(C) Yohai Devir January יש להפוך את הכתובת לבינארי: FPN (21 bits) SPT יושבת בזיכרון הפיזי ולכן ניתן לגשת לכניסת התרגום וזוהי הגישה הראשונה לזיכרון הפיזי. בכניסת תרגום זו נמצאת הכתובת הפיזית של הדף השייך לטבלת התרגום של P1: תוכן כניסת התרגום ב- SPT: 0x940001C0. יש לשרשר את ה -offset השני שיש בידנו ( מתוך הכתובת הוירטואלית השניה – 0A0), וכך נקבל את הכתובת הפיזית של הכניסה בטבלת התרגום של P1: גישה לכתובת הפיזית של הכניסה בטבלת התרגום של P1 היא הגישה השניה לזיכרון הפיזי. בכניסת תרגום זו נמצאת הכתובת הפיזית של הדף הפיזי בו נמצא הנתון המבוקש. נניח שנתון שתוכן כניסת התרגום הנ"ל ב- P1PT: 0x94000B2F
(C) Yohai Devir January בתרגום לבינארי: FPN (21 bits) יש לשרשר את ה -offset הראשון שיש בידנו ( מתוך הכתובת הוירטואלית של ה נתון – 1F4), וכך נקבל את הכתובת הפיזית של הנתון המבוקש : גישה לכתובת הפיזית של הנתון המבוקש היא הגישה השלישית לזיכרון הפיזי.