290 likes | 500 Vues
מבנה מחשבים ספרתיים 234267. זיכרון וירטואלי ב- VAX מבוסס על תרגולים מאת מורן גביש ואורן קצנגולד. הבעיה. במערכת עם הרבה תהליכים עלולות טבלאות התרגום בזיכרון הפיזי למלא את כל הזיכרון, כך שלא ישאר מקום נוסף עבור מסגרות ו/או עבור טבלאות התרגום עצמן. 1. 1. 1. 2. 2. 2. 3. 3. 3. הפתרון.
E N D
מבנה מחשבים ספרתיים234267 זיכרון וירטואלי ב- VAX מבוסס על תרגולים מאת מורן גביש ואורן קצנגולד 234267 - January 2006
הבעיה במערכת עם הרבה תהליכים עלולות טבלאות התרגום בזיכרון הפיזי למלא את כל הזיכרון, כך שלא ישאר מקום נוסף עבור מסגרות ו/או עבור טבלאות התרגום עצמן. 234267 - January 2006
1 1 1 2 2 2 3 3 3 הפתרון זיכרון משני דיסק זיכרון פיזי מרחב מדומה של system מרחבים מדומים של תהליכים SBR SPT PT CPU P0 BR דף מתוך PT P0 PT P1 BR P1 PT 3 2 234267 - January 2006
P0 P1 S0 Memory 234267 - January 2006
P0 P1 S0 Memory P0PT P1PT SPT 234267 - January 2006
P0 P1 S0 P0PT P1PT Memory SPT 234267 - January 2006
P0 P1 נתון S0 P0PT P1PT Memory SPT 234267 - January 2006
P0 P1 S0 P0PT P1PT כניסת PTE מתאימה לדף של P1 Memory SPT 234267 - January 2006
P0 P1 S0 P0PT P1PT Memory SPT כניסת PTE מתאימה לדף של S0 234267 - January 2006
P0 P1 S0 P0PT P1PT Memory SPT עותק של הדף המבוקש ממרחב S0 234267 - January 2006
P0 P1 S0 P0PT P1PT Memory SPT מצביע 234267 - January 2006
P0 P1 S0 עותק של הדף המבוקש ממרחב P1 P0PT P1PT Memory SPT 234267 - January 2006
P0 P1 S0 הנתון פיזית (כעת ניתן לקרוא אותו) P0PT P1PT Memory SPT 234267 - January 2006
נחלק את הזיכרון הפיזי לשניים, חלק גדול למסגרות וחלק קטן לטבלת תרגום אחת ויחידה, • SPT = System Page Table, הממפה את המרחב הוירטואלי של ה-system. • ה SBR = System Base Register מצביע על תחילת טבלת ה-SPT. 234267 - January 2006
היתרון בשמירת טבלאות התרגום בזיכרון הווירטואלי הוא שהן לא חייבות לשהות במלואן בזכרון הפיזי, וגם לא חייבות להיות רצופות (אם רק חלק קטן מהכניסות בשימוש בפועל) • כך חוסכים מקום בזיכרון הפיזי למספר רב יותר של מסגרות נתונים.
נחלק את הזיכרון המדופדף לשניים: מרחב מדומה של system, ומרחבים מדומים של התהליכים. טבלאות התרגום עצמן מחולקות לדפים, אותם ניתן להביא למסגרות של הזיכרון הפיזי. • בצורת מימוש זו, לצורך חיפוש נתון ישנן 3 גישות לזיכרון הפיזי: • 1. ל-SPT • 2. לדף מתוך טבלת התרגום (דף מתוך המרחב הווירטואלי של ה-system). • 3. לדף של הנתון עצמו (דף מתוך מרחב וירטואלי של התהליך). • ייתכנו שני Page Faults בגישה לנתון יחיד: כאשר הדף של טבלת התרגום לא נמצא בזיכרון הפיזי, וכאשר הדף של התהליך עצמו איננו בזיכרון הפיזי. 234267 - January 2006
איך נראית כתובת וירטואלית ב VAX? • גודל כתובת וירטואלית: 32 סיביות • גודל מרחב כתובות וירטואלי 232 בתים = 4GB. • גודל עמוד/מסגרת: 512 בתים. סיבית ה-MSB של הכתובת המציינת האם ניגשים למרחב הוירטואלי של ה-system (S0) או למרחב וירטואלי של תהליך. MSB=0 - הכתובת הוירטואלית הנה במרחב וירטואלי של התהליך. MSB=1 - הכתובת הוירטואלית במרחב הוירטואלי של ה-system שמשותף לכל התהליכים. 234267 - January 2006
לכל תהליך יש שני מרחבים וירטואליים הנקראים P0 ו-P1 וכן טבלאות תרגום P0PT ו-P1PT בהתאמה, אחד עבור זיכרון סטטי ואחד עבור זיכרון דינמי.הסיבית Address space מציינת לאיזה מרחב וירטואלי מתייחסים P0 או P1.MSB+2MSB:00 - המרחב הוירטואלי P0 של התהליך.01 - המרחב הוירטואלי P1 של התהליך.10 - המרחב הוירטואלי S0 של ה-system, משותף לכל התהליכים.11 - לא קיים. ל-system, בניגוד לתהליך אין שני מרחבים וירטואליים, אלא S0 בלבד. • תרגום הכתובות הוירטואליות יעשה באמצעות טבלאות תרגום (הנמצאות במרחב המדומה של ה-system) 234267 - January 2006
ייחודו של התהליך הפעיל: • מערכת ההפעלה "תדאג" ש-P0BR ו-P0BR יצביעו אל תחילת טבלאות התרגום שלו (בכל רגיסטר מאוחסנת כתובת וירטואלית במרחב ה-system - סיביות הMSB הן "10" - למה?). • עדכון הכתובות בשני רגיסטרים אלה מתבצע context switch. מבנה כתובת פיזית: גודל כתובת פיזית: לכל היותר 30 סיביות. גודל מקסימאלי של זיכרון פיזי: 230 = 1GB. 234267 - January 2006
מבנה כניסה בטבלת תרגום (PTE): 234267 - January 2006
תהליך מציאת נתון ב-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. 234267 - January 2006
גישה 1: • ניגש לטבלת ה-SPT בזיכרון הפיזי לכניסת ה-PTE שמצאנו. • גישה 2: • מתוך ה-PTE שקיבלנו בגישת הזיכרון הראשונה נחלץ את שדה ה-PFN (לאחר שוידאנו Valid) ובעזרתו נמצא את הכתובת הפיזית של הדף מתוך טבלת התרגום של התהליך. • ע"י שרשור ה-offset ל-PFN נקבל כתובת פיזית לגישה השניה לזיכרון – גישה ל-PTE מתוך טבלת התרגום PxPT. • גישה 3: • הגישה האחרונה היא לנתון עצמו. • מתוך ה-PTE (שקיבלנו בגישת זיכרון 2) מחלצים את ה-PTE ומשרשרים לו את ה-offset מהכתובת הווירטואלית הראשונית. 234267 - January 2006
SPT PFN PFN M=1 V=1 דף מתוך PT דף ממרחב התהליך מה קורה אם הדף של התהליך לא בזיכרון? אם היה Page Fault בגישה לדף של התהליך עצמו, מערכת ההפעלה צריכה לדאוג להביא את הדף, תוך עדכון סיבית Valid=1 בדף של טבלת התרגום וסיבית Modified=1 ב- SPT (למה?) רק כאשר נפנה את הדף של טבלת התרגום חזרה לזיכרון המשני (במרחב המדומה שלsystem ) אז נעתיק אותו מכיוון שהתבצע בו עידכון. 234267 - January 2006
דוגמא מספרית - גישה לכתובת המדומה - VAX-11/780 נתונה הכתובת הוירטואלית הבאה (בהקסדצימלי): 0x7F0051F4. יש להפוך את הכתובת לבינארי: 0100 1111 000101010000 0000 11110111 VPN (21 bits) Offset (9 bits) = 0x1F4 הביט השמאלי ביותר (ה-msb) הוא 0 הכתובת הוירטואלית נמצאת במרחב התהליכים. הביט השני משמאל הוא 1 הכתובת הוירטואליות נמצאת במרחב הוירטואלי P1 של התהליך. ה-VPN הוא מספר הדף המבוקש במרחב P1, ולמעשה זהו מספר הכניסה בטבלת התרגום שבמרחב ה-system. 234267 - January 2006
כדי למצוא את הכתובת של כניסת התרגום יש לבצע את החישוב: • PTE_Address = PxPR + VPN*(Size of One PTE) באופן הבא: VPN*4 = 111 1110 0000 0000 1010 0000 = 0x7E00A0 + P1 Base Register + 0x8F830000 (Given on register P1BR) ============= Virtual ad. of P1PTE 0x900100A0 כך קיבלנו את הכתובת הוירטואלית של כניסת התרגום שבמרחב ה-system: 0x900100A0 234267 - January 2006
כך קיבלנו את הכתובת הוירטואלית של כניסת התרגום שבמרחב ה-system: 0x900100A0 יש להפוך את הכתובת לבינארי: 0000 1010000000000001 0000 00001001 VPN (21 bits) Offset (9 bits) = 0x0A0 הביט השמאלי ביותר (ה-msb) הוא 1 הכתובת הוירטואלית נמצאת במרחב ה- system. ה-VPN הוא מספר הדף המבוקש במרחב S0, ולמעשה זהו מספר הכניסה בטבלת ה-SPT שבזכרון הפיזי. 234267 - January 2006
VPN*4 = 0100000 0000 00100000 0000 = 0x200200 + SPT Base Register + 0x00001000 (Given on register SBR) ============= Physical ad. of S0 PTE 0x00201200 (contains: 0x940001C0) • כדי למצוא את הכתובת של כניסת התרגום יש לבצע את החישוב: • PTE_Address =SBR + VPN*(Size of each PTE in SPT) באופן הבא: 234267 - January 2006
SPT יושבת בזיכרון הפיזי ולכן ניתן לגשת לכניסת התרגום וזוהי הגישה הראשונה לזיכרון הפיזי. בכניסת תרגום זו נמצאת הכתובת הפיזית של הדף השייך לטבלת התרגום של P1: תוכן כניסת התרגום ב- SPT: 0x940001C0. • יש לשרשר את ה-offset השני שיש בידנו (מתוך הכתובת הוירטואלית השניה – 0A0), וכך נקבל את הכתובת הפיזית של הכניסה בטבלת התרגום של P1: יש להפוך את הכתובת לבינארי: 0000 1100 0001 0000 0000 0000 01001001 FPN (21 bits) 0000 10100000 1000 0011 0000 000000 גישה לכתובת הפיזית של הכניסה בטבלת התרגום של P1 היא הגישה השניה לזיכרון הפיזי. בכניסת תרגום זו נמצאת הכתובת הפיזית של הדף הפיזי בו נמצא הנתון המבוקש. נניח שנתון שתוכן כניסת התרגום הנ"ל ב- P1PT: 0x94000B2F 234267 - January 2006
בתרגום לבינארי: 1111 0010 1011 0000 0000 0000 01001001 FPN (21 bits) • יש לשרשר את ה-offset הראשון שיש בידנו (מתוך הכתובת הוירטואלית של הנתון – 1F4), וכך נקבל את הכתובת הפיזית של הנתון המבוקש: 0100 11111111 0101 0110 0001 000000 גישה לכתובת הפיזית של הנתון המבוקש היא הגישה השלישית לזיכרון הפיזי. 234267 - January 2006