טבלת מקטעים כללית

מתוך ויקיפדיה, האנציקלופדיה החופשית

טבלת המקטעים הכלליתאנגלית: Global Descriptor Table, או בקיצור GDT ) היא מבנה נתונים המשמש מעבדים ממשפחת Intel x86 (החל מ־Intel 80286 (אנ')) ומגדירה תכונות ומאפיינים של מקטעי זיכרון שונים, כמו כתובת הבסיס של המקטע, גודל המקטע, הרשאות של המקטע ועוד. ה-GDT מהווה את אחד ההבדלים העיקריים בין Protected mode (אנ') ל-Real mode (אנ'), בעודה מאפשרת להגדיר הגבלות גישה לאזורים מסוימים בזיכרון.[1]

תיאור[עריכת קוד מקור | עריכה]

ה-GDT היא טבלה (מערך), שכל תא בו הוא בגודל 8 בתים. כל ערך בטבלה מתייחס למקטע אחר בזיכרון (מתאר מקטע (אנ')), ל-Task state segment (אנ') (מבנה שמחזיק מידע על משימה (task (אנ')) ספציפית), ל-Call gate (אנ'), או לטבלת מקטעים מקומית (אנ').

כל תא בטבלת המקטעים הוא כאמור בגודל של 8 בתים, וכולל בתוכו את השדות הבאים:

  1. כתובת הבסיס של מקטע הזיכרון
  2. כתובת הגבול של מקטע הזיכרון, שממנה ניתן להסיק על גודל הזיכרון
  3. הרשאות המקטע
  4. control bits

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

מבנה[עריכת קוד מקור | עריכה]

x86-64[עריכת קוד מקור | עריכה]

מבנה ה-GDT במערכת עם ארכיקטורת x86-64[א]

המבנה של כל תא ב-GDT במערכת הפעלה עם ארכיטקטורת x86-64 הוא קבוע, והגודל שלו הוא 64 סיביות. מתאר המקטע כולל את השדות הבאים:

  1. כתובת בסיס (Base Address) - הכתובת שבה מתחיל מקטע הזיכרון. האורך הכולל של שדה זה הוא 32 סיביות, והוא מפוצל לשני חלקים: סיביות 16-39 וסיביות 56–63 (כאשר סיבית 0 היא הסיבית הראשונה).
  2. גבול המקטע (Segment Limit) - הכתובת האחרונה הזמינה במקטע. אורך שדה זה הוא 20 סיביות, והוא מפוצל לשני חלקים: 16 הסיביות הראשונות, יחד עם סיביות 48–51 (כאשר סיבית 0 הסיבית הראשונה) מהווים את גבול המקטע. גודל הזיכרון לא מושפע רק מכתובת הבסיס ומגבול המקטע, אלא גם משדה ה-Granuality (ראו בהמשך).
  3. בית הגישה - סיביות 40–47 מהוות יחד את בית הגישה.
    Accessed bit - ביט שהופך ל-1 בכל פעם שניגשים למקטע.
    Readable bit/Writable bit: עבור מתאר מקטע שהוא מקטע קוד, זהו ביט קריאה, ואילו עבור מתאר מקטע שהוא מקטע של מידע, זהו ביט כתיבה. בהתאם לסוג הביט, כאשר הוא 1, הקריאה/הכתיבה מותרות (בהתאמה).
    Direction/Conforming bit - מטרת הסיבית השלישית בבית הגישה תלויה גם כן בסוג המקטע. עבור מקטע של מידע, הסיבית קובעת אם המקטע "גדל" כלפי מטה או כלפי מעלה. אם המקטע הוא מקטע של קוד: כאשר הביט הוא 0, הקוד יכול להתבצע רק מטבעת ההגנה (אנ') שנקבעה בשדה ה-DPL (שהוא גם חלק מבית הגישה). כאשר הביט הוא 1, הקוד יכול להתבצע בטבעת הגנה נמוכה יותר, כלומר עם הרשאות גבוהות יותר.
    ביט הרצה (Executable bit) - קובע האם המקטע הוא מקטע של קוד או מקטע של מידע (כאשר הביט דלוק, זהו מקטע של קוד).
    ביט סוג המתאר (Descriptor type bit) - קובע האם מתאר המקטע עוסק במקטע מערכת (כמו TSS או LDT), או האם זהו מקטע של קוד או מידע.
    DPL - שתי סיביות שמהוות יחד את מספר הטבעת (ring) הנדרשת עבור המקטע.
    Present bit - הערך של סיבית זו אמור להיות 1 עבור כל מקטע תקין.
  4. דגלים - סיביות 52–55. הערך של הסיבית הראשונה בשדה זה הוא תמיד 0. הסיבית השנייה דלוקה רק כאשר מתאר המקטע מתאר מקטע של קוד 64-סיביות. הסיבית השלישית עוסק בגודל המקטע. אם הוא 0, הסגמנט הוא בעל ערך 16 ביט, ואם הוא 1, הסגמנט הוא בעל ערך 32 ביט. הסיבית האחרונה היא שדה ה-Granularity. אם ערך הסיבית הוא 0, אז השדה של גבול המקטע הוא ביחידות של בתים, ואילו אם הוא 1, אז הוא ביחידות של דפים (pages) בגודל 4K.

טבלת מקטעים מקומית[עריכת קוד מקור | עריכה]

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

לקריאה נוספת[עריכת קוד מקור | עריכה]

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ עידן פסט, פיתוח מערכות הפעלה - חלק ב', Digital Whisper 31, 2012, עמ' 12

ביאורים[עריכת קוד מקור | עריכה]

  1. ^ האיור מעט לא מדויק ואם יש ניגוד בינו לבין התוכן בפסקה - הטעות היא בתרשים ולא בתוכן הפסקה