1. الـ memory segmentation آلية إدارة ذاكرة قديمة بدأت من معالج Intel 8086 عام 1978، رغم قدمها واستخدامها فقط عندما يعمل المعالج كـ 16 بت في وضع الـ real-mode، إلا أن فهمها مهم لأن الـ segment registers مثل gs و fs لاتزال مستخدمة ولن يتضح معناها إلا بالرجوع لاستخدامها الأصلي…
2. الفكرة في الـ segmented memory بشكل عام أنك لا تشير مباشرة للعنوان في الذاكرة، لكن تستخدم offset من بداية عنوان قابل للتغير يسمى بالـ base address ويمثّل عنوان بداية الـ segment، هكذا يمكننا أن نغير مكان البرنامج وأجزاءه لأي مكان في الذاكرة فقط بتغيرر عنوان بداية الـ segment…
3. في معالجات Intel الـ 16 بت أو عندما يكون المعالج في وضع الـ real-mode في بداية تشغيله هناك ستة segment registers وهي cs/ds/ss/es/fs/gs.
كون المعالج 16 بت، فأقصى حجم ذاكرة هو 64KB، لكن إضافة الـ segmentation يزيد حجم الذاكرة لـ 1MB، لكن هذه كانت فائدة إضافية وليست فقط الهدف…
4.عندما يتم تفعيل الـ protected-mode ويصبح المعالج 32 بت، بدلاً من أن تخزن الـ segment registers عناوين مباشرة، أصبحت تخزن indexes ويتغير اسمها إلى segment selector registers، ولغرض الحماية لم يعد المُستخدم في الـ ring-3 قادر على تغيير قيمها كما هو الحال في الـ real-mode…
5. الـ segment selector حجمه كما كان، 16 بت، أول بتين تحدد الصلاحية، قيمته 0b11 في الـ user-mode أو 0b00 في الـ kernel-mode (هناك تفاصيل إضافية لكنها لا تهم فلا تستخدمها أنظمة التشغيل الحالية).
البت الثالث لو كان 0 فإن الـ index يشير لـ GDT ولو كان 1 فإنه LDT، ستجده دائماً 0…