مقطع حالة المهمة
يُعدّ مقطع حالة المهمة ( TSS ) بنيةً في أجهزة الكمبيوتر التي تعمل بمعالجات x86 ، ويحتوي على معلومات حول مهمةٍ ما . ويستخدمه نظام التشغيل لإدارة المهام. وتحديدًا، تُخزَّن المعلومات التالية في مقطع حالة المهمة:
- حالة سجل المعالج
- أذونات منافذ الإدخال/الإخراج
- مؤشرات المكدس ذات مستوى الامتياز الداخلي
- رابط TSS السابق
- حالة التصحيح
- مؤشر مكدس الظل
ينبغي تخزين كل هذه المعلومات في مواقع محددة داخل نظام TSS كما هو موضح في المجلد 3 (أ)، الفصل 8 من كتيبات IA-32 .
موقع نظام مراقبة النقل
قد يوجد مقطع TSS في أي مكان في الذاكرة . يحتوي سجل القطاعات المسمى سجل المهام (TR) على مُحدد قطاع يشير إلى واصف قطاع TSS صالح موجود في جدول وصف القطاعات العام (GDT) (لا يجوز أن يوجد واصف TSS في جدول وصف القطاعات المحلي LDT ). لذلك، لاستخدام مقطع TSS، يجب على نواة نظام التشغيل القيام بما يلي:
- أنشئ مدخل وصف TSS في GDT
- قم بتحميل TR باستخدام محدد المقطع لهذا المقطع
- أضف المعلومات إلى نظام TSS في الذاكرة حسب الحاجة
لأغراض أمنية، يجب وضع TSS في ذاكرة لا يمكن الوصول إليها إلا من قبل النواة .
سجل المهام
سجل TR هو سجل ذو 16 بت يحتوي على مُحدد مقطع لـ TSS. يمكن تحميله باستخدام تعليمة LTR . تُعتبر LTR تعليمة ذات امتيازات وتعمل بطريقة مشابهة لعمليات تحميل سجلات المقاطع الأخرى. يتكون سجل المهمة من جزأين: جزء مرئي يمكن للمبرمج الوصول إليه، وجزء غير مرئي يتم تحميله تلقائيًا من مُعرّف TSS.
الولايات المسجلة
قد يحتوي سجل تبديل المهام (TSS) على قيم محفوظة لجميع سجلات x86 . يُستخدم هذا السجل لتبديل المهام . يقوم نظام التشغيل بتحميل سجل تبديل المهام بقيم السجلات التي تحتاجها المهمة الجديدة، وبعد تنفيذ تبديل المهام على مستوى العتاد (مثل استخدام تعليمة IRET )، يقوم معالج x86 بتحميل القيم المحفوظة من سجل تبديل المهام إلى السجلات المناسبة. تجدر الإشارة إلى أن بعض أنظمة التشغيل الحديثة، مثل ويندوز ولينكس [ 1 ]، لا تستخدم هذه الحقول في سجل تبديل المهام لأنها تُنفذ تبديل المهام برمجياً.
لاحظ أنه أثناء تبديل مهام الجهاز، يتم تحديث بعض حقول سجل TSS القديم بمحتويات سجلات وحدة المعالجة المركزية الحالية قبل قراءة القيم من سجل TSS الجديد . وبالتالي، فإن بعض حقول سجل TSS قابلة للقراءة والكتابة، بينما البعض الآخر للقراءة فقط.
- حقول القراءة/الكتابة : تتم قراءتها وكتابتها أثناء تبديل مهام الأجهزة.
- جميع السجلات ذات الأغراض العامة (
EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP) - جميع سجلات القطاعات (
CS,DS,ES,FS,GS,SS) - حالة التنفيذ الحالية (
EIP,EFlags) - الحقل
Linkفي نظام TSS الجديد ، إذا كان تبديل المهمة ناتجًا عنCALLأوINTبدلاً منJMP.
- جميع السجلات ذات الأغراض العامة (
- الحقول للقراءة فقط : تُقرأ فقط عند الحاجة، كما هو موضح.
- سجل التحكم 3 (
CR3)، المعروف أيضًا باسم سجل قاعدة دليل الصفحة (PDBR).- القراءة أثناء تبديل مهام الأجهزة.
- سجل جدول الواصفات المحلية (
LDTR)- القراءة أثناء تبديل مهام الأجهزة.
- أزواج المكدس الثلاثة ذات مستويات الامتياز (
SS0:ESP0,SS1:ESP1,SS2:ESP2)- اقرأ أثناء الانتقال بين المستويات
CALLأوINTلإنشاء مكدس جديد.
- اقرأ أثناء الانتقال بين المستويات
- مؤشر خريطة بتات منفذ الإدخال/الإخراج (
IOPB) وخريطة بتات منفذ الإدخال/الإخراج نفسها- اقرأ أثناء
INتنفيذOUTالتعليمات للتأكد من أنINSالتعليمات قانونية (انظر أذونات منفذ الإدخال/الإخراج أدناه).OUTSCPL > IOPL
- اقرأ أثناء
- مصيدة تصحيح الأخطاء (T)
- SSP
- سجل التحكم 3 (
في الواقع، هذا PDBRالحقل هو أول حقل تتم قراءته من TSS الجديد: نظرًا لأن مفتاح مهمة الأجهزة يمكنه أيضًا التبديل إلى تعيين جدول صفحات مختلف تمامًا ، فإن جميع الحقول الأخرى (وخاصة LDTR) تكون نسبية للتعيين الجديد.
أذونات منافذ الإدخال/الإخراج
تحتوي وحدة TSS على مؤشر 16 بت لخريطة بتات أذونات منافذ الإدخال/الإخراج للمهمة الحالية . تُحدد هذه الخريطة، التي عادةً ما يُنشئها نظام التشغيل عند بدء المهمة، المنافذ الفردية التي يجب أن يتمكن البرنامج من الوصول إليها. خريطة بتات الإدخال/الإخراج عبارة عن مصفوفة بتات لأذونات الوصول إلى المنافذ؛ إذا كان لدى البرنامج إذن بالوصول إلى منفذ، يُخزن الرقم "0" في فهرس البت المقابل، وإذا لم يكن لدى البرنامج إذن، يُخزن الرقم "1". إذا كان حد مقطع TSS أقل من خريطة البتات الكاملة، يُفترض أن جميع البتات المفقودة تساوي "1".
تعمل هذه الخاصية على النحو التالي: عندما يُصدر برنامجٌ ما تعليمة إدخال/إخراج x86، مثل IN أو OUT (راجع قوائم تعليمات x86 - مع ملاحظة وجود إصدارات بطول بايت، وكلمة، وكلمة مزدوجة)، يقوم الجهاز بفحص مستوى امتياز الإدخال/الإخراج (IOPL) للتأكد من إمكانية وصول البرنامج إلى جميع منافذ الإدخال/الإخراج. إذا كان مستوى الامتياز الحالي (CPL) للبرنامج أكبر عدديًا من مستوى امتياز الإدخال/الإخراج (IOPL) (أي أن البرنامج أقل امتيازًا مما يُحدده IOPL)، فلن يتمكن البرنامج من الوصول إلى جميع منافذ الإدخال/الإخراج. بعد ذلك، يتحقق الجهاز من خريطة بتات أذونات الإدخال/الإخراج في TSS للتأكد من إمكانية وصول البرنامج إلى المنفذ (المنافذ) المحدد في تعليمة IN أو OUT. إذا كانت جميع البتات ذات الصلة في خريطة بتات أذونات منفذ الإدخال/الإخراج غير مُفعّلة، يُسمح للبرنامج بالوصول إلى المنفذ (المنافذ)، ويُسمح بتنفيذ التعليمة. إذا تم ضبط أي من البتات ذات الصلة، أو إذا تجاوز أي منها حد مقطع TSS، فلن يتمكن البرنامج من الوصول، وسيُصدر المعالج خطأ حماية عامًا . تتيح هذه الخاصية لأنظمة التشغيل منح وصول انتقائي للمنافذ لبرامج المستخدم.
مؤشرات المكدس ذات المستوى الداخلي
يحتوي سجل حالة المكدس (TSS) على ستة حقول لتحديد مؤشر المكدس الجديد عند تغيير مستوى الامتياز. يحتوي الحقل SS0 على مُحدد مقطع المكدس لمستوى الامتياز الحالي (CPL=0)، بينما يحتوي الحقلان ESP0/RSP0 على قيمة ESP/RSP الجديدة لمستوى الامتياز الحالي (CPL=0). عند حدوث مقاطعة في الوضع المحمي (32 بت)، يبحث معالج x86 في سجل حالة المكدس (TSS) عن SS0 وESP0 ويُحمّل قيمهما في SS وESP على التوالي. يسمح هذا للنواة باستخدام مكدس مختلف عن برنامج المستخدم، كما يسمح بأن يكون هذا المكدس فريدًا لكل برنامج مستخدم.
تُعرف الميزة الجديدة المُضافة في امتدادات AMD64 باسم جدول مكدس المقاطعات (IST)، والذي يوجد أيضًا في جدول حالة المهمة (TSS) ويحتوي على مؤشرات منطقية للمكدس (القطاع + الإزاحة). إذا حدد جدول وصف المقاطعات مدخلًا في جدول مكدس المقاطعات (يوجد 7 مداخل)، فسيقوم المعالج بتحميل المكدس الجديد من جدول مكدس المقاطعات. يتيح ذلك استخدام مكدسات سليمة في حالة حدوث أخطاء جسيمة ( مثل NMI أو خطأ مزدوج ). سابقًا، كان مدخل الاستثناء أو المقاطعة في جدول وصف المقاطعات يشير إلى بوابة مهمة، مما يدفع المعالج إلى التبديل إلى المهمة التي تشير إليها بوابة المهمة. كانت قيم السجلات الأصلية تُحفظ في جدول حالة المهمة الحالي وقت حدوث المقاطعة أو الاستثناء. ثم يقوم المعالج بتعيين السجلات، بما في ذلك SS:ESP، إلى قيمة معروفة مُحددة في جدول حالة المهمة ويحفظ المُحدد في جدول حالة المهمة السابق. تكمن المشكلة هنا في أن تبديل المهام على مستوى الأجهزة غير مدعوم في AMD64.
رابط TSS السابق
هذا مُحدِّد ذو 16 بت يسمح بربط وحدة تبديل المهام هذه بالوحدة السابقة. يُستخدم هذا فقط لتبديل مهام الأجهزة. راجع أدلة IA-32 لمزيد من التفاصيل.
استخدام TSS في لينكس
على الرغم من إمكانية إنشاء وحدة تخزين مؤقتة (TSS) لكل مهمة قيد التشغيل على الحاسوب، فإن نواة لينكس تُنشئ وحدة تخزين مؤقتة واحدة فقط لكل معالج، وتستخدمها لجميع المهام. وقد تم اختيار هذا النهج لأنه يُسهّل نقل النظام إلى بنى معمارية أخرى (على سبيل المثال، لا تدعم بنية AMD64 تبديل المهام على مستوى الأجهزة)، ويُحسّن الأداء والمرونة. يستخدم لينكس فقط خريطة بتات أذونات منافذ الإدخال/الإخراج وميزات المكدس الداخلي لوحدة التخزين المؤقتة؛ أما الميزات الأخرى فهي ضرورية فقط لتبديل المهام على مستوى الأجهزة، وهو ما لا تستخدمه نواة لينكس. [ 2 ]
الاستثناءات المتعلقة بنظام إدارة النقل
يُطلق على متجه الاستثناء 10 في معالجات x86 اسم استثناء TSS غير الصالح (#TS). يُصدره المعالج عند حدوث خطأ في الوصول إلى TSS. على سبيل المثال، إذا حدثت مقاطعة في CPL=3 وتم نقل التحكم إلى CPL=0، يُستخدم TSS لاستخراج SS0 وESP0/RSP0 لتبديل المكدس. إذا كان سجل المهمة يحتوي على مُحدد TSS غير صالح، فسيتم توليد خطأ #TS. لا ينبغي أن يحدث استثناء TSS غير الصالح أثناء التشغيل العادي لنظام التشغيل، ويرتبط دائمًا بأخطاء في النواة أو عطل في الأجهزة.
لمزيد من التفاصيل حول استثناءات نظام TSS، انظر المجلد 3 (أ)، الفصل 6 من دليل IA-32 . [ 3 ]
نظام TSS في وضع x86-64
لا تدعم بنية x86-64 تبديل المهام على مستوى الأجهزة. ومع ذلك، لا يزال من الممكن استخدام TSS في جهاز يعمل في أوضاع 64 بت الموسعة. في هذه الأوضاع، يظل TSS مفيدًا لأنه يخزن ما يلي:
- عناوين مؤشر المكدس لكل مستوى من مستويات الامتياز.
- عناوين المؤشرات لجدول مكدس المقاطعات (يناقش قسم مؤشر المكدس الداخلي أعلاه الحاجة إلى ذلك).
- عنوان الإزاحة لخريطة بتات أذونات الإدخال/الإخراج.
كما يتم توسيع سجل المهام في هذه الأوضاع ليكون قادراً على استيعاب عنوان أساسي 64 بت .
مراجع
- ^ بوفيه، دانييل بيير. سيساتي، ماركو (2006). فهم نواة لينكس، الطبعة الثالثة أورايلي وسائل الإعلام . ص. 104. ردمك 978-0-596-00565-8تم الاطلاع عليه بتاريخ 23-11-2009 .
- ^ دانيال ب. بوفيه؛ ماركو سيساتي (2006). فهم نواة لينكس . أورايلي. ص. 104. ردمك 9780596554910تم الاطلاع عليه بتاريخ 25 فبراير 2014 .
- ↑ "دليل مطوري البرامج لهندسة Intel 64 و IA-32، المجلد 3أ" . تم الاطلاع عليه بتاريخ 21 مايو 2012 .
روابط خارجية
- برنامج تجريبي باستخدام TSSes
- معمارية X86
