math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/carch17.docx · web viewאולם...

17
- ההההההההההה הה הx86_64 long mode - בבבבב בבב בב בx86_64 בבבבבב בבבב בב בבבב בבבב בבבבבבבב בבב בבבבבב בבבב בב בבבבב בבבבבב64 בבב, בבבבב בבבבב בבבב64 בבב. בבבבב בבבבבבב בבבב בבבבבב:

Upload: others

Post on 10-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

x86_64 long mode הארכיטקטורה של ה-

מנקודת ראות של הבנת מודלx86_64המסמך הזה דן ב- ביט,64התוכניתן וכן לרכישת הבנה של מערכת ההפעלה

ביט.64בעיקר עבודה במוד

רשימת האוגרים ברמת היישום:

AMD64 Architecture Programmers Manual Volume 1מקור:

Page 2: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

. הםx86האוגרים של המעבד המתמטי לא השתנו בהשוואה ל--ST(0) מוכרים גם בשמות FPR0-FPR7 ביט. האוגרים 80עדיין ST(7).

אוגרי המדיה נמצאים מחוץ לדיון בשלב זה.

לבין ה-x86הטבלה הבאה מסכמת את ההבדלים בין אוגרי ה-x86_64:ברמה היישום

AMD64 Architecture Programmers Manual Volume 1מקור:

Page 3: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

x86_64 אוגרי מערכת ב-

: long mode ב- x86_64 להלן קבוצת אוגרי המערכת של ה-

AMD64 Architecture Programmers Manual Volume 2מקור:

האוגרים הללו הם למטרות מאד ייחודיות או מתקדמות והבנתםאינו חיוני למטרות מסמך זה. נתרכז באוגרים המרכזיים.

Page 4: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

RFLAGS אוגר ה-

מכיל הרבה דגלים שגרתיים ברמת היישום, ארRFLAGSאוגר ה-חלק מביטים הם מהותיים ברמת המערכת.

AMD64 Architecture Programmers Manual Volume 2מקור:

x86_64 מודים ב-

עובד בשלושה מודים:x86_64ה-

1.System Management Mode (SMM)מוד מיוחד שתפקידו העיקרי הוא לאפשר לחומרה להריץ תוכנה במסגרת מילוי

תפקידו. מערכת ההפעלה עצמה לא אמורה להריץ קודמשלה במוד הזה )למרות שזה קורה לפעמים(.

Page 5: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

2.Compatibility Mode ביט שבו המעבד מתפקד32 – מוד .x86כאילו הוא בעצם

3.Long Mode ביט.64 – המוד החדש של ארכיטקטורת

Long ביט יכולות לעשות את המעבר מ-64מערכות הפעלה Mode-ל Compatibility Mode 32 וחזרה. אולם מערכות הפעלה

. Long Modeביט אינן יכולות לעבור ל-

הדיאגרמה הבאה ממחישה את הביטים שאחראים עלהמעברים:

Page 6: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

AMD64 Architecture Programmers Manual Volume 2מקור:

x86_64 מיעון ב-

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

ביט.64הפוינטרים הפכו להיות .1 השימוש באוגרי סגמנטים צומצם עד כדי כמעט מחיקה.2

אם כי לא לחלוטין.

הדיאגרמות הבאות אולי ממחישות זאת:

הדיאגרמה הבאה מראה את ההבדל בין שיטות Compatibility modeההתייחסות לזיכרון. בעוד שב-

המעבד מסווג את מרחב הכתובות הפעיל לקטגוריות ההתייחסות היא אחידה לכלLong Modeשימוש שונות, ב-מרחב הכתובות:

Page 7: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

AMD64 Architecture Programmers Manual Volume 1מקור:

הדיאגרמה הבאה ממחישה את ההבדל בהתייחסות לאוגרי הסגמנטים:

Page 8: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

ולבסוף, הדיאגרמה הבאה ממחישה את ההבדל בהמרה של פוינטר לכתובת הפוינטר הוא זוג סגמנט + היסט המומרCompatibility Modeפיזית. בעוד שב-

Longדרך טבלת המרה )סגמנטציה( לכתובת לינארית )וירטואלית(, הרי שב-Mode.הפוינטר מנוסח ישר בכתובת לינארית, ומומר ישר באמצעות הדפדוף

Page 9: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

long mode שיטת הגישה לזיכרון ב-

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

בדרך כלל ניתן להתעלם מאספקט הזה.

ברמת האסמבלי גישה אופיינית לזיכרון נראה משהו כמו

MOV [RDI],RAX

.כתובת אפקטיבית נקרא RDI של האוגר 64כאשר התוכן

ברמה העקרונית מדובר בהמרה של כתובת אפקטיבית )או שהוא מספרכתובת פיזית מוחלטת ביט ל64לינארית( מספר

ביט הוא52 ביט באמצעות מנגנון הדפדוף. מספר היעד 52עד מגבלה של מבנה הטבלאות.

יחד עם זאת, אכן ניתן לכתוב פקודות כגון

MOV SS:[RDI],RAX

Page 10: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

MOV DS:[RDI],RAX

למרות שזה יהיה כמעט חסר משמעות כי לא יהיה חישוב כתובתbaseדרך טבלת המרה )שעדיין קיימות( ולא יתבצעו בחישוב

הכתובת הלינארית בדיקות תקינות כלשהן, שכן עבור אוגרי המעבד מתעלם כמעט מכלcs, DS, SS, ESהסגמנט הרגילים

הואbaseהביטים בכניסות מטבלאות ההמרה וערך ה-אוטומטית אפס.

. ניתן לרשום פקודות כמו FS,GSחריג מהכלל הזה הם האוגרים

MOV FS:[RDI],RAX

MOV GS:[RDI],RAX

. לשני אוגרי הסגמנטשונה מאפס יהיה baseואז יתכן שה- שניתן לכתוב לתוכו באמצאות מקריםbase יש ערך FS,GSהללו,

.WRMSRפרטיים של פקודת מכונה מיוחדת

השורה התחתונה היא:

כפוינטר משמש RAX, RBX , …,R15כאשר אחד מאוגרי הכלליים (, התוכן שלוMOV [RAX],RCX בפקודת המכונה RAX)משהו כמו

הכתובת האפקטיביתlong mode. ב-כתובת אפקטיביתנקרא כתובת )הנקרא גם כתובת הוירטואליתשווה בדרך כלל ל

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

של אוגריsegment overrideלכתובת הלינארית הוא כאשר יש שלהם אינו אפס.base, וה-GS או FSהסגמנט

במילים אחרות, כתובות לינאריות הן מהצורה:

Linear Address = Effective Address

Linear Address = FS.base +Effective Address

Linear Address = GS.base + Effective Address

Page 11: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

הדיאגרמה הבאה ממחישה זאת:

AMD64 Architecture Programmers Manual Volume 2מקור:

הביטים העליונים של הכתובת הלינארית עוברות המרה לכתובת פיזית של הדף. יש מספר אפשרויות כמה ביטים בדיוק, כי יש

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

לקביעת ההיסט בתוך הדף הפיזי.

Page 12: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

מגבלות נוכחיות וכתובות כנוניות

יש תמיכה תאורטית למרחב כתובותlong mode ב-x86_64ב- בתים, מורחב1.8x1019 בתים סדר גודל של 264לינארי של

4.5x1015 בתים, סדר גודל של 252הכתובות הפיזי הנתמך הוא עד

בתים. זה כנראה איננו בהישג יד של הטכנולוגיה הקיימת וגם לא בטוח שיש צורך בכמות כזו של כתובות וזיכרון אלקטרוני

בעתיד המידי.

שיצאAMD של opteron, ה-long modeהמעבד הראשון שתמך ב- בתים )סדר248 תמך במרחב כתובות לינארי של 2003בשנת

בתים240 בתים( ומרחב כתובות פיזי של עד 2.8x1014גודל של בתים(. 1.09x1012)סדר גודל של

החומרות הקיימות בעת כתיבת שורות אלו תומכות בשני בתים.248המרחבים בגודל של עד

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

. 8G-1 עד ל-0זיכרון אלקטרוני, מרחב הכתובות הפיזי הוא מ-

כתובות קנוניות 264במצב הקיים אין טעם לתמוך במרחב כתובות לינארי בגודל

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

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

Canonical Addresses.

של כתובות קנוניות בזמן כתיבת שורות אלו הואהפורמט של כתובת לינארית קנונית חייבים להיות זהות47-63שהביטים

, בצורה דומה להרחבת מספר חסר סימן.1 או כולם 0– כולם הכתובות הגבוהות משמשותWindows במערכות מסוימות כמו

את מבנה הנתונים הגלובלי של מערכת ההפעלה.

Page 13: math.haifa.ac.ilmath.haifa.ac.il/.../lectures/lecture09/CArch17.docx · Web viewאולם מערכות הפעלה 32 ביט אינן יכולות לעבור ל-Long Mode. הדיאגרמה

56יתכן שמתי שהוא בעתיד מערכת הכתובות הקנוניות יורחב ל- ביט. הדיאגרמה הבאה ממחישה את היחס64ביט ולאחר מכן ל-

בין הכתובות הקנוניות לכלל הכתובות בשלושת המודלים:

Wikipediaמקור: