تبديل السياق

في الحوسبة، يكون **تبديل السياق** هو عملية تخزين حالة عملية أو شريط التعليمات، بحيث يمكن استعادته واستئناف تنفيذه من نفس النقطة في وقت لاحق. يتيح ذلك عمليات متعددة مشاركة وحدة معالجة مركزية واحدة، وهي ميزة أساسية لنظام تشغيل متعدد المهام.

يختلف المعنى الدقيق لعبارة «تبديل السياق» بشكل كبير في الاستخدام. في سياق تعدد المهام، تبديل السياق يشير إلى عملية تخزين حالة النظام لمهمة واحدة، بحيث يمكن إيقاف المهمة مؤقتًا واستئناف مهمة أخرى. يمكن أيضًا أن يحدث تبديل السياق كنتيجة للمقاطعة، مثال عندما تحتاج مهمة ما إلى الوصول إلى مخزن القرص، مما يؤدي إلى توفير وقت وحدة المعالجة المركزية لعمل المهام الأخرى. تتطلب بعض أنظمة التشغيل أيضًا تبديل السياق للتنقل بين وضع المستخدم ومهام وضع النواة (kernel)
. يمكن أن يكون لعملية تبديل السياق تأثير سلبي على أداء النظام، على الرغم من أن حجم هذا التأثير يعتمد على طبيعة التحويل الذي يتم تنفيذه.

## التكلفة
عادةً ما تكون محولات السياق مكثّفة من الناحية الحسابية، والكثير من تصميم أنظمة التشغيل يتمثل في تحسين استخدام تبديل السياق. يتطلب التحويل من عملية إلى أخرى قدرًا معينًا من الوقت للقيام بالمهام الإدارية - حفظ وتحميل السجلات وخرائط الذاكرة، وتحديث جداول وقوائم متنوعة، إلخ. ما هو موجود فعلاً في تبديل السياق يختلف بين هذه الحواس وبين المعالجات وأنظمة التشغيل. على سبيل المثال، في نواة لينكس ، يشتمل تبديل السياق على تبديل التسجيلات، مؤشر المكدس، وعداد البرنامج، ولكنه مستقل عن تبديل مساحة العنوان، على الرغم من أنه يحدث أيضًا في تبديل عملية تبديل عنوان مساحة.

## متى يحدث التحويل؟
هناك ثلاثة أسباب محتملة تسبب تبديل السياق:

### تعدد المهام
الأكثر شيوعًا، في بعض مخطط الجدولة ، يجب إيقاف عملية واحدة من وحدة المعالجة المركزية بحيث يمكن تشغيل عملية أخرى. يمكن تشغيل عملية تبديل السياق من خلال عملية تجعل نفسها غير قابلة للتشغيل، مثل انتظار عملية وحدات الإدخال والإخراج (I/O) أو عملية التزامن لإكمالها. في نظام  تعدد المهام الوقائي، قد يقوم المجدول أيضًا بتحويل العمليات التي لا تزال قابلة للتشغيل. لمنع عمليات أخرى من التجويع من وقت وحدة المعالجة المركزية (CPU) ، غالباً ما تقوم المجدولون الوقائيون بتكوين جهاز توقيت للمقاطعة لإطلاق النار عندما تتجاوز إحدى العمليات شريحة الوقت الخاصة بها. تضمن هذه المقاطعة أن يقوم المجدول بالتحكم في أداء مفتاح تبديل السياق. 

### التبديل بين وضع المستخدم والنواة
عندما يكون الانتقال بين وضع النواة ووضع
المستخدم مطلوبًا في نظام التشغيل ، لا يكون تبديل السياق ضروريًا؛ انتقال الوضع ليس في حد ذاته تبديل السياق. ومع ذلك، اعتمادًا على نظام التشغيل، قد يتم أيضًا إجراء تبديل السياق في هذا الوقت.

## الخطوات
في التبديل، يجب حفظ حالة العملية التي يتم تنفيذها حاليًا بطريقة أو بأخرى، بحيث يمكن استعادة هذه الحالة عند إعادة جدولتها.

تتضمن حالة العملية كافة السجلات التي قد تستخدمها العملية، وخاصةً عداد البرنامج، بالإضافة إلى أية بيانات أخرى خاصة بنظام التشغيل قد تكون ضرورية. يتم تخزين هذا عادة في بنية بيانات تسمى كتلة التحكم بالعملية (PCB)

قد يتم تخزين كتلة التحكم بالعملية على مكدس لكل عملية في ذاكرة النواة (بدلاً من مكدس الاستدعاءات الخاص بوضع المستخدم) . تتم إضافة مقبض إلى كتلة التحكم بالعملية إلى قائمة انتظار العمليات الجاهزة للتشغيل، غالباً ما تسمى قائمة انتظار الجاهزة.

بما أن نظام التشغيل قد قام بتعليق تنفيذ عملية واحدة، فإنه يمكن عندئذٍ تبديل السياق عن طريق اختيار عملية من قائمة الانتظار الجاهزة واستعادة كتلة التحكم بالعملية الخاص به. عند القيام بذلك، يتم تحميل عداد البرنامج من كتلة التحكم بالعملية، وبالتالي يمكن أن يستمر التنفيذ في العملية المختارة. يمكن أن تؤثر أولوية المعالجة والخيط الحاسوبي على العملية التي يتم اختيارها من قائمة الانتظار الجاهزة (أي أنها قد تكون قائمة انتظار ذات أولوية).

## الأداء
إن تبديل السياق نفسه له تكلفة في الأداء، بسبب تشغيل جدولة المهام، وإحالة TLB ، وبسبب غير مباشر مشاركة ذاكرة التخزين المؤقت لوحدة المعالجة المركزية بين مهام متعددة. يمكن أن يكون التبديل بين الخيوط حاسوبية للعمليات في عملية واحدة أسرع من بين عمليتين منفصلتين، لأن الخيوط حاسوبية تتشارك في نفس خرائط الذاكرة افتراضية ، لذا لا يكون تدفق TLB ضروريًا. 

## المراجع

## روابط خارجية

* Context Switching at OSDev.org
* Context Switch Definition by The Linux Information Project (LINFO)
* Context Switches from the Microsoft Developer Network (MSDN)
* General Architecture and Design -Interrupt Handling at FreeBSD.org

تصنيف:عمليات (حوسبة)