Carmi Merimovich

כרמי מרימוביץ

אתר אישי

כתובת וירטואלית 32, כתובת פיזית 32, גודל דף 4MB

כתובת וירטואלית נראית כך:
32 bit virtua address

גודל דף הוא 4MB ולכן שדה ההיסט ברוחב 22 ביטים (222= 4 \times 220 = 4M). ולכן יש עשרה ביטים בשדה מספר דף וירטואלי.
32 bit virtua address parts

כיון שגודל דף וירטואלי וגודל דף פיזי שווים, כתובת פיזית נראית כלהלן:
32 bit physical address

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

בכל כניסה צריך מקום ל-10 ביטים עבור ppn, ובנוסף לדגלים. אנחנו נשתמש בכניסה ברוחב 4 בתים במקרה זה. נניח שכניסה בטבלת התרגום נראית כך:
Page table entry

נשאר לנו פריט אחד וזה מבנה האוגר ב-mmu שמצביע על טבלת התרגום. על פניו מדובר פשוט באוגר ברוחב 32 ביטים שמכיל את כתובת תחילת הווקטור. וזה אכן המצב בהגבלה אחת. כיון שההיסט מתחילת הווקטור הוא מספר הקטן מ-4096 אזי 12 הביטים הימניים של הכתובת חייבים להיות מאופסים. הגבלה זו תחסוך לנו חיבור בחישוב כתובת התא הנחוץ.
Page table address register

העובדה שהביטים הנמוכים הינם תמיד מאופסים גרמה לזה שיש מעבדים שבהם האוגר לא מכיל כתובת אלא את מספר הדף הפיזי בו נמצאת הטבלה:
Another page table address register

יש לשיטה הזו יתרונות לא צפויים כפי שנראה בהמשך.

דוגמא

הטבלה ארוכה מכדי שנרשום אותה פה... נניח שטבלת התרגום מתחילה בכתובת ABCDE000.

לאיזו כתובת פיזית תתורגם הכתובת הוירטואלית F713ABCD?
נתרגם לבינרית:
F713ABCD משמע ה-vpn הוא 3DC. ה-vpn הינו אינדקס לווקטור, ולצורך גישה לזכרון צריך לחשב את הכתובת. לכן צריך להכפיל את האינדקס פי 4. זה יותר קל בבינרית: ‎ 11 1101 11 002 × 410 = 1111 0111 00002 = F7016

אז עכשיו צריך להסתכל בזכרון בכתובת ABCDEF70. נניח שזה התוכן:
dec00001

ה-valid הוא אמת. לכן לשדה ppn, שערכו 1101111011, יש משמעות והוא יחליף את ה-vpn של הכתובת הוירטואלית F713ABCD. כלומר נקבל:
DED3ABCD parts

ובהקסה הכתובת הפיזית היא DED3ABCD.