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

טבלת המקטעים הכללית (באנגלית: 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 ===
האיור מעט לא מדויק ואם יש ניגוד בינו לבין התוכן בפסקה - הטעות היא בתרשים ולא בתוכן הפסקה}}
המבנה של כל תא ב-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
* 

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

== ביאורים ==

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