**تعویض زمینه** یا **سودهی به بافت** (به انگلیسی: Context Switching) در رایانش -که گاهی در کتاب‌های فارسی «تعویض متن» یا «برگرداندن متن» ترجمه می‌شود- به فرایند ذخیره کردن و بازیابی وضعیت (زمینهٔ) یک گفته می‌شود؛ به طوری که اجرای آن بتواند بعداً از همان نقطه ادامه یابد. این کار به چند اجازه می‌دهد تا از یک CPU به صورت اشتراکی استفاده کنند و همچنین این قابلیت یکی از ارکان اساسی چندوظیفگی است. انجام این کار باعث تحمیل بار اضافه به سامانه می‌شود اما این بار اضافه آنقدر نیست که به خاطر آن از مزایای چندبرنامگی صرف نظر شود. جابجایی نوبت اجرا از یک به ای دیگر نیاز به یک مدت زمان مشخص دارد. در طول انجام این فرایند، ثبات‌های پردازهٔ فعلی باید ذخیره و ثبات‌های پردازهٔ جدید بارگذاری شوند و همین‌طور لیست‌ها و جداول خاصی هم باید به‌روز شوند.

عبارت «برگردان زمینه»، می‌تواند اشاره به برگردان زمینهٔ یک ثبات باشد. همچنین برگردان زمینه می‌تواند یک وظیفه، یک قاب پشته یا یک ریسه باشد.

جابجایی بین فرایندها یا کارها در رایانه
---------------------------------------

در رایانش، یک تغییر زمینه عملیات ذخیرهٔ وضعیت یک فرایند یا موضوع است؛ به طوری که بتوان آن را بازیابی کرد و بعداً اجرای آن را از سر گرفت. این به چندین پردازش اجازه می‌دهد تا واحد پردازشگر مرکزی (CPU) را با هم به اشتراک بگذارند و از ویژگی‌های اساسی سیستم‌عامل چند وظیفه‌ای است.

معنی دقیق عبارت «تعویض زمینه» متفاوت است. در زمینهٔ چند وظیفه ای، به روند ذخیره‌سازی حالت سیستم برای یک کار اشاره دارد؛ بنابراین می‌توان آن کار را متوقف کرد و کار دیگری را از سر گرفت. تعویض زمینه همچنین می‌تواند بر اثر یک وقفه اتفاق بیفتد؛ مانند زمانی که یک کار نیاز به دسترسی به ذخیره‌سازی دیسک دارد و باعث می‌شود زمان پردازنده برای کارهای دیگر آزاد شود. بعضی از سیستم‌عامل‌ها برای جابجایی بین وظایف حالت کاربر و حالت هسته به یک تعویض زمینه نیز نیاز دارند. روند تعویض زمینه می‌تواند بر کارایی سیستم تأثیر منفی بگذارد.

هزینه
-----

متن تعویض‌ها معمولاً از نظر محاسباتی فشرده هستند و بیشتر طراحی سیستم‌عامل‌ها استفادهٔ بهینه از تعویض‌های زمینه‌ای است. جابجایی از یک فرایند به فرایند دیگر برای انجام امور مدیریتی به زمان مشخصی نیاز دارد که این فرایند شامل اموری مثل ذخیره و بارگذاری ثبات‌ها و نقشه‌های حافظه، به‌روزرسانی جداول و لیست‌های مختلف و غیره می‌شود. آنچه در واقع در یک تعویض زمینه درگیر است به معماری‌ها، سیستم‌عامل‌ها و تعداد منابع به اشتراک گذاشته شده (رشته‌هایی که به همان فرایند تعلق دارند در مقایسه با فرآیندهای غیر مرتبط منابع بسیاری را به اشتراک می‌گذارند. به عنوان مثال، در هستهٔ لینوکس تعویض زمینه شامل مواردی از قبیل تعویض ثبات‌ها، اشاره‌گر پشته (رکورد اشاره‌گر پشته)، شمارندهٔ برنامه، پاکسازی بافر ترجمهٔ سمت (TLB) و بارگیری جدول صفحهٔ فرایند بعدی برای اجرا -مگر اینکه فرایند قدیمی حافظه را با حافظهٔ جدید به اشتراک بگذارد- می‌شود. بعلاوه، تعویض متن مشابه که بین رشته‌های کاربر، به ویژه رشته‌های سبز اتفاق می‌افتد و اغلب بسیار سبک است، باعث صرفه جویی و بازیابی می‌شود. در موارد شدید، مانند تعویض بین goroutines در زبان برنامه‌نویسی Go، یک تعویض زمینه معادل coroutine بازدهی است که فقط به مراتب گران‌تر از فراخوانی subroutine است.

زمان و نحوه انجام
-----------------

### چندوظیفگی

در سامانه‌های چند وظیفه‌ای یا همان چندکارگی، زمان‌بند سامانه باید پردازنده را از پردازهٔ در حال اجرا گرفته و آن را به پردازهٔ دیگری برای اجرا شدن بدهد. همچنین ممکن است پردازه خودش را به حالت غیرقابل اجرا ببرد که در این صورت هم می‌توان پردازنده را از پردازه گرفت و به پردازهٔ دیگری داد. یک پردازه زمانی به حالت غیرقابل اجرا می‌رود که بخواهد یک عملیات ورودی/خروجی انجام دهد و مجبور باشد منتظر خاتمه یافتن این عملیات باشد. در سامانه‌هایی که به صورت غیر انحصاری هستند، زمانبند می‌تواند پردازه‌ای که همچنان در حال اجرا هست را هم تعویض کند. در این سامانه‌ها از یک وقفهٔ ساعت برای تعیین برش زمانی استفاده می‌شود. بدین صورت که هر پردازه می‌تواند به میزان یک برش زمانی اجرا شود، پس از پایان یافتن برش زمانی، پردازنده از پردازه گرفته شده و به پردازهٔ دیگری داده می‌شود. برش زمانی معمولاً چند بار در یک ثانیه اتفاق می‌افتد؛ بنابراین پردازنده در طی یک ثانیه به چند پردازه سوئیچ کرده و هر کدام را برای مدت زمانی به اندازهٔ یک برش زمانی اجرا می‌کند. وقفهٔ ساعت برای تضمین اینکه زمانبند کنترل را از پردازه گرفته و به پردازهٔ دیگری خواهد داد، استفاده می‌شود.

### مدیریت وقفه

معماری‌های امروزه گردانندهٔ وقفه هستند. به این معنی که برای مثال اگر پردازنده از دیسک درخواست داده کند، نیاز نیست که در حالت انتظار مشغولی باقی بماند تا داده خوانده شود؛ بلکه می‌تواند بعد از دادن درخواست، به اجرای برنامه‌ای دیگر بپردازد. زمانی که خواندن داده از حافظه پایان یافت، پردازنده می‌تواند با ایجاد یک وقفه به خواندن دادهٔ آماده شده بپردازد که برای ایجاد این وقفه، برنامهٔ گرداننده وقفه (به انگلیسی: Interrupt handler) را فرا می‌خواند.

زمانی که یک وقفه رخ می‌دهد، سخت‌افزار به صورت خودکار بخشی از زمینه را تعویض می‌کند (دست کم به مقداری که اجازه دهد کدهای گردانندهٔ وقفه را بازیابی کند). براساس جزئیات مخصوص طراحی‌های سخت‌افزار و نرم‌افزار، ممکن است گرداننده زمینهٔ اضافی را نیز نگهداری کند. اغلب مقدار کمی از زمینه تغییر می‌کند تا زمانی که برای ایجاد وقفه صرف می‌شود؛ کاهش یابد. هسته برای مدیریت وقفه‌های فرایند، زمانبندی خاصی ندارد اما به جای آن (اغلب در موارد ناتمام) زمینه در ابتدای گردانندهٔ وقفه مستقر می‌شود. زمانی که خدمات وقفه پایان می‌پذیرد، زمینه‌ای که قبل از وقفه موجود بود؛ بازیابی می‌شود و برنامهٔ متوقف شده می‌تواند اجرای خود را از حالت متوقف‌شده مجدداً شروع کند.

### تعویض فرمان کاربر و هسته

زمانی که یک جابجایی بین فضای کاربری و فضای هسته در سیستم‌عامل نیاز باشد، تعویض زمینه ضروری نیست؛ تغییر حالت به تنهایی یک تعویض زمینه به حساب نمی‌آید. اگرچه وابسته به نوع سیستم‌عامل ممکن است در این زمان تعویض زمینه نیز رخ دهد.

مراحل
-----

در یک تعویض، حالت اولین فرایند (فرآیندی که در حال اجرا است و باید تعویض شود) به گونه‌ای باید ذخیره شود؛ بنابراین زمانی‌که زمانبند به اجرای فرایند اولیه بازمی‌گردد، می‌تواند حالت خود را بازیابی کند و ادامه دهد.

حالت فرایند شامل تمام ثبات‌هایی است که فرایند ممکن است از آن‌ها استفاده کند؛ به خصوص شمارنده برنامه. به علاوه هر سیستم‌عاملی داده‌های خاصی دارد که ممکن است ضروری باشد. این داده‌ها معمولاً در ساختمان‌داده‌ای ذخیره می‌شوند که بلاک کنترل فرایند (PCB) نامیده می‌شود.

به جای تعویض فرایندها، برای اولین فرایند PCB باید ایجاد شده و ذخیره شود. برخی اوقات PCBها بر روی پشتهٔ هر فرایند در حالت هسته ذخیره می‌شوند (به‌طور متقابل در حالت کاربر و در پشته فراخوانی)، یا شاید برخی سیستم‌عامل‌های خاص از ساختمان‌داده‌ای برای تعریف این اطلاعات استفاده کنند.
از آنجایی که سیستم‌عامل به تعویق انداختن کارامدی در اولین فرایند اجرایی دارد، می‌تواند PCB و زمینهٔ لازم برای فرایند دوم را بارگذاری کند. برای این منظور، شمارندهٔ برنامه از PCB بارگذاری می‌شود و بدین ترتیب اجرا می‌تواند در فرآیندی جدید ادامه یابد. فرآیندهای جدید از صف یا صف‌ها (اغلب با رجوع به صف آمادهٔ اجرا) انتخاب می‌شوند. فرایند و ریسهٔ داری اولویت می‌تواند بر اجرای دیگر فرایندها تأثیر بگذارد. فرآیندهایی با اولویت بالاتر ابتدا ریسمان‌های آماده برای اجرا را بررسی می‌کنند.

مثال
----

در نظر گرفتن یک عمل جمع اضافی حساب A = B + 1. این دستورالعمل در حافظهٔ دستورالعمل (Instruction Register) ذخیره می‌شود و شمارندهٔ برنامه افزایش می‌یابد. A و B از حافظه خوانده می‌شوند و به ترتیب در ثبات‌های R1 و R2 ذخیره می‌شوند. در این حالت، B + 1 به عنوان پاسخ نهایی در R1 محاسبه و نوشته می‌شود. در این عملیات چون خواندن و نوشتن متوالی وجود دارد و هیچ فراخوانی تابعی انجام نگرفته‌است، بنابراین در این حالت هیچ تعویض / انتظار زمینه‌ای اتفاق نمی‌افتد.

با این حال، دستورالعمل‌های خاصی به فراخوانی سیستم (System call) نیاز دارند که برای فرآیندهای انتظار / خواب به تعویض زمینه نیاز دارند. از یک کنترل‌کننده فراخوانی سیستم برای تعویض زمینه به حالت هسته استفاده می‌شود. عملکرد نمایشگر (دادهٔ x) ممکن است به دادهٔ x از دیسک و درایور دستگاه در حالت هسته نیاز داشته باشد. از این رو عملکرد display به حالت خواب می‌رود و در عملیات READ منتظر می‌ماند تا مقدار x را از دیسک دریافت کند. این باعث می‌شود برنامه منتظر بماند تا عملکرد تابع با tbe منتشر شود تا تنظیمات بیانیهٔ فعلی به حالت خواب درآید و منتظر بماند تا فراخوانی سیستم آن را بیدار کند. برای حفظ همزمانی اما برنامه باید مقدار جدید و روند خواب را دوباره با هم اجرا کند.

کارآیی
------

تعویض زمینه به تنهایی در زمان اجرای زمانبندی دارای هزینه در کارایی است، فراوانی TLB و به‌طور غیر مستقیم به اشتراک‌گذاری حافظهٔ نهان CPU در میان چندین وظیفه موجب این هزینه‌هایند. تعویض در بین ریسمان‌های یک فرایند می‌تواند سریع‌تر از تعویض میان دو فرایند جدا رخ دهد؛ زیرا ریسمان‌ها می‌توانند نقشهٔ یک حافظه مجازی را به اشتراک بگذارند، بنابراین دیگر به TLB نیازی نیست.

### سخت‌افزار در برابر نرم‌افزار

تعویض زمینه اصولاً می‌تواند توسط نرم‌افزار یا سخت‌افزار انجام شود. برخی پردازنده‌ها مانند Intel 80386 و نظیر آن، دارای پشتیبان سخت‌افزاری برای تعویض زمینه هستند.

مانند دیگر وظایفی که در سخت‌افزار اجرا می‌شود، این مورد نیز به نظر می‌رسد که نسبت به نرم‌افزار سریع‌تر انجام شود. اگرچه شاخهٔ اصلی سیستم‌عامل‌ها نظیر مایکروسافت ویندوز و لینوکس از این ویژگی استفاده نمی‌کنند. این مورد می‌تواند به خاطر دو دلیل اصلی زیر باشد:

* تعویض زمینهٔ سخت‌افزاری تمام ثبات‌ها را نگهداری نمی‌کند (تنها ثبات‌های اصلی و نه ثبات‌های ممیز شناور)
* وابسته به کارایی مسئله و … تعویض زمینهٔ نرم‌افزاری می‌تواند تنها ثبات‌های مورد نیاز را انتخاب و ذخیره کند در حالی که تعویض زمینهٔ سخت‌افزاری تقریباً تمام ثبات‌ها را ذخیره می‌کند؛ چه مورد نیاز باشند و چه نباشند.

منابع
-----

1. ↑  «*سودهی*» [*مهندسی مخابرات*] هم‌ارزِ «*switching*»؛ منبع: گروه واژه‌گزینی. جواد میرشکاری، ویراستار. *دفتر اول*. فرهنگ واژه‌های مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۶۴-۷۵۳۱-۳۱-۱ (ذیل سرواژهٔ *سودهی2*)
2. ↑  «*بافت*» [*زبان‌شناسی*] هم‌ارزِ «*context*»؛ منبع: گروه واژه‌گزینی. جواد میرشکاری، ویراستار. *دفتر پنجم*. فرهنگ واژه‌های مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۷۸-۹۶۴-۷۵۳۱-۷۶-۴ (ذیل سرواژهٔ *بافت2*)

* مشارکت‌کنندگان ویکی‌پدیا. «Context switching». در *[[ویکی‌پدیای انگلیسی|دانشنامهٔ ویکی‌پدیای انگلیسی]]*.

| * ن
* ب
* و
سیستم‌عامل |
| --- |
| اطلاعات کلی | 
* Advocacy
* Comparison
* Forensic engineering
* History
* Hobbyist development
* فهرست سیستم‌عامل‌ها
* Timeline
* Usage share

 |
| هسته (رایانش) | 

|  |  |
| --- | --- |
| معماری رایانه | 
* Exokernel
* هسته پیوندی
* ریزهسته
* هسته یکپارچه
* vkernel
* Rump kernel
* Unikernel

 |
| مولفه‌ها | 
* گرداننده دستگاه
* Loadable kernel module
* ریزهسته
* فضای کاربری

 |

 |
| مدیریت فرایند (رایانه) | 

|  |  |
| --- | --- |
| مفاهیم | 
* تعویض زمینه
* وقفه
* ارتباط بین پردازشی
* فرایند (رایانه)
* بلاک کنترل فرایند
* سیستم‌عامل بی‌درنگ
* ریسه (رایانه)
* اشتراک زمانی

 |
| زمان‌بندی (رایانه) | 
* چندکارگی (رایانه)
* Fixed-priority preemptive
* صف چندسطحی فیدبک
* قبضه‌کردن (رایانش)
* زمان‌بندی نوبت گردشی
* نخست کوتاه‌ترین کار

 |

 |
| مدیریت حافظه،محافظت از منابع | 
* Bus error
* General protection fault
* حفاظت از حافظه
* صفحه‌بندی (رایانه)
* حلقه حفاظتی
* Segmentation fault
* حافظه مجازی

 |
| دسترسی به حافظه غیرفرار،سیستم‌های فایل‌بندی | 
* راه‌اندازی (رایانه)
* یکپارچه‌سازی دیسک سخت
* فایل دستگاهی
* صفت پرونده
* آی‌نود
* فایل سیستم ژورنالی
* پارتیشن‌بندی
* سامانه پرونده مجازی
* Virtual tape library

 |
| فهرست سیستم‌عامل‌ها | 
* Acorn
	+ Arthur
	+ ARX
	+ MOS
	+ RISC iX
	+ RISC OS
* Amiga Inc.
	+ آمیگااواس
	+ AmigaOS 1.0-3.9 (Motorola 68000)
	+ AmigaOS 4 (PowerPC)
	+ Amiga Unix, a.k.a. Amix
* Amstrad
	+ AMSDOS
	+ کانتیکی
	+ SymbOS
* اندروید
* Apple Inc.
	+ اپل ۲ family
	+ اپل III
	+ Apple DOS
	+ اپل لیسا
	+ Apple SOS
	+ Apple Pascal
	+ ProDOS
	+ GS/OS
	+ GNO/ME
	+ کانتیکی
	+ مکینتاش
		- Classic Mac OS
		- اپل یونیکس
		- Copland
		- MkLinux
		- Pink
		- Rhapsody
		- مک‌اواس (formerly Mac OS X and OS X)
		- macOS Server (formerly Mac OS X Server and OS X Server)
		- سرور شبکه اپل
	+ Apple MessagePad
		- Newton OS
	+ آیفون and آی‌پاد تاچ
		- آی‌اواس (formerly iPhone OS)
	+ آی‌پد
		- آی‌پداواس
	+ اپل واچ
		- واچ اواس
	+ اپل تی‌وی
		- تی‌وی او اس
	+ داروین (سیستم‌عامل)
	+ آی‌پاد
		- آی‌پاد (unnamed embedded OS)
* A/ROSE
* Apollo Computer
	+ Domain/OS
* Atari
	+ Atari DOS
	+ Atari TOS
	+ Atari MultiTOS
* BAE Systems XTS-400
* Be Inc.
	+ بی اواس
	+ BeIA
	+ BeOS r5.1d0
* Bell Labs Non-Unix
	+ BESYS
	+ پلان ۹ از آزمایشگاه‌های بل
	+ اینفرنو)
* Burroughs Corporation
	+ Burroughs MCP
* بی‌اس‌دی
* Control Data Corporation
	+ Chippewa Operating System
	+ Kronos
	+ NOS (Network Operating System)
	+ SCOPE)
* Convergent Technologies Operating System
* Cosmos (سیستم‌عامل)
* Cromemco
	+ Cromemco DOS
	+ Cromix
* Data General
	+ AOS (for 16-bit)
	+ DG/UX
	+ RDOS (Real-time DOS)
* Datapoint (CTOS for Z-80)
* DDC-I Inc.
	+ HeartOS
* Digital Research, Inc.
	+ CP/M
	+ CP/M Plus
	+ CP/M-68K
	+ CP/M-8000
	+ CP/M-86
	+ CP/M-86 Plus
	+ Concurrent CP/M
	+ Concurrent CP/M-86
	+ Concurrent CP/M 8-16
	+ Concurrent CP/M-68K
	+ Concurrent DOS
		- Concurrent PC DOS
		- Concurrent DOS 8-16
		- Concurrent DOS 286
		- Concurrent DOS XM
		- Concurrent DOS 386
		- Concurrent DOS 386/MGE
		- Concurrent DOS 68K
	+ DR-DOS
	+ FlexOS
		- FlexOS 186
		- FlexOS 286
		- FlexOS 68K
	+ Multiuser DOS
	+ Datapac Multiuser DOS
	+ Datapac System Manager, a derivative of Datapac Multiuser DOS
	+ IMS Multiuser DOS
	+ MP/M
		- MP/M II
		- MP/M-86
		- MP/M 8-16
	+ PalmDOS 1.0
	+ Personal CP/M
* Digital Equipment Corporation
	+ Batch-11/DOS-11
	+ OS/8
	+ RSTS/E
	+ RSX-11
	+ RT-11
	+ TOPS-10
	+ TOPS-20
	+ TENEX
	+ ترو۶۴ یونیکس
	+ Ultrix
	+ OpenVMS
	+ WAITS
* داس (سیستم‌عامل)
* ENEA AB OSE
* Fujitsu Towns OS
* General Electric, Honeywell, Bull
	+ Real-Time Multiprogramming Operating System
	+ GCOS
	+ مولتیکس
* Genode
* گنو
* Google
	+ اندروید
	+ سیستم‌عامل کرومیوم
	+ کروم اواس
	+ گوبونتو
	+ گوگل فیوشا)
* Green Hills Software
	+ اینتگریتی
	+ اینتگریتی
	+ *µ-velOSity*
* هایکو (سیستم‌عامل)
* Harmony
* Heathkit, Zenith Data Systems
	+ HDOS
	+ HT-11
* Hewlett-Packard
	+ اچ‌پی-یواکس
	+ Multi-Programming Executive
* Honeywell CP-6
* Huawei Harmony OS
* Intel Corporation
	+ ISIS
* IBM
	+ Pre-360
		- BESYS
		- سیستم اشتراک زمانی سازگار
		- GM OS & GM-NAA I/O
		- IBSYS
		- SHARE Operating System
		- University of Michigan Executive System (UMES)
	+ OS/360 and successors
		- OS/360 and successors
		- ذخیره مجازی چندگانه
		- OS/390
		- Phoenix/MVS
		- زد/اواس)
	+ DOS
		- DOS/360 and successors on IBM S/360, S/370, and successor mainframes
		- BOS/360
		- TOS/360
		- DOS/VS
		- DOS/VSE
		- VSE/SP
		- VSE/ESA
		- z/VSE)
	+ VM/CMS
		- CP/CMS
		- CP-40
		- CP-67
		- VM/370
		- VM/XA
		- VM/ESA ماشین مجازی
		- z/VM)
	+ TPF line
		- Airline Control Program *ACP*
		- Transaction Processing Facility)
	+ Unix-like
		- آی‌بی‌ام ای‌آی‌اکس
		- UTS (Mainframe UNIX)
		- Linux on IBM Z
	+ Others on IBM S/360, S/370, and successor mainframes
		- TSS/360
		- MUSIC/SP
		- ORVYL and WYLBUR
	+ IBM PC
		- آی‌بی‌ام داس
		- اواس/۲
		- اواس/۲
		- eComStation)
	+ Other hardware
		- IBM Series 1
			* EDX
			* RPS
			* CPS
	+ IBM 1130 DM2
	+ IBM 1800 MPX & TSX
	+ IBM 8100
		- DPCX
		- DPPX)
	+ System 3 DMS
	+ IBM System 34, 36, 38
	+ OS/400
* illumos
* IncludeOS
* آی‌اواس
	+ هوم‌پاد
	+ آی‌پداواس
	+ تی‌وی او اس
* لینوکس
* مینیکس
* مورف اواس
* MUSIC/SP
* Nemesis
* نکست‌استپ
* NOS
* ORVYL
* اواس/۲
* OS-9
* OSv
* Pick
* QNX
* ری اکت او اس
* RISC OS
* سولاریس (سیستم‌عامل)
* Tandem
	+ NonStop
* TPF
* TRIPOS
* یونیکس
* Visi On
* VS/9
* وب او اس
* مایکروسافت ویندوز
* Xerox 500 series (530 RTB, 560)
* Xinu
* زد/اواس

 |
| مفاهیم جانبی | 
* رابط برنامه‌نویسی کاربردی
* شبکه رایانه‌ای
* لایه انتزاعی سخت‌افزاری
* لوح زنده
* یواس‌بی زنده
* پوسته (رایانه)
	+ واسط خط فرمان
	+ رابط کاربر گرافیکی
	+ واسط طبیعی کاربر
	+ واسط کاربر متن بنیان
	+ رابط کاربری صوتی
	+ ZUI
* PXE

 |