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

**טבלת המקטעים הכללית** (באנגלית: **Global Descriptor Table,** או בקיצור **GDT** ) היא מבנה נתונים המשמש מעבדים ממשפחת Intel x86 (החל מ־Intel 80286 ) ומגדירה תכונות ומאפיינים של מקטעי זיכרון שונים, כמו כתובת הבסיס של המקטע, גודל המקטע, הרשאות של המקטע ועוד.
ה-GDT מהווה את אחד ההבדלים העיקריים בין Protected mode  ל-Real mode , בעודה מאפשרת להגדיר הגבלות גישה לאזורים מסוימים בזיכרון.
## תיאור
ה-GDT היא טבלה (מערך), שכל תא בו הוא בגודל 8 בתים. כל ערך בטבלה מתייחס למקטע אחר בזיכרון (מתאר מקטע ), ל-Task state segment  (מבנה שמחזיק מידע על משימה (task ) ספציפית), ל-Call gate , או לטבלת מקטעים מקומית .

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

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

## מבנה
### x86-64
שמאל|ממוזער|580x580 פיקסלים|מבנה ה-GDT במערכת עם ארכיקטורת x86-64
המבנה של כל תא ב-GDT במערכת הפעלה עם ארכיטקטורת x86-64 הוא קבוע, והגודל שלו הוא 64 סיביות. מתאר המקטע כולל את השדות הבאים:
# **כתובת בסיס** (Base Address) - הכתובת שבה מתחיל מקטע הזיכרון. האורך הכולל של שדה זה הוא 32 סיביות, והוא מפוצל לשני חלקים: סיביות 16–39 וסיביות 56–63 (כאשר סיבית 0 היא הסיבית הראשונה).
# **גבול המקטע** (Segment Limit) - הכתובת האחרונה הזמינה במקטע. אורך שדה זה הוא 20 סיביות, והוא מפוצל לשני חלקים: 16 הסיביות הראשונות, יחד עם סיביות 48–51 (כאשר סיבית 0 הסיבית הראשונה) מהווים את גבול המקטע. גודל הזיכרון לא מושפע רק מכתובת הבסיס ומגבול המקטע, אלא גם משדה ה-Granuality (ראו בהמשך).
# **בית הגישה** - סיביות 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 עבור כל מקטע תקין.
# **דגלים** - סיביות 52–55. הערך של הסיבית הראשונה בשדה זה הוא תמיד 0. הסיבית השנייה דלוקה רק כאשר מתאר המקטע מתאר מקטע של קוד 64-סיביות. הסיבית השלישית עוסק בגודל המקטע. אם הוא 0, הסגמנט הוא בעל ערך 16 ביט, ואם הוא 1, הסגמנט הוא בעל ערך 32 ביט. הסיבית האחרונה היא שדה ה-Granularity. אם ערך הסיבית הוא 0, אז השדה של גבול המקטע הוא ביחידות של בתים, ואילו אם הוא 1, אז הוא ביחידות של דפים (pages) בגודל 4K.

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

## הערות שוליים

## ביאורים

קטגוריה:מבני נתונים