موضوع مقاله: تعویض زمینه | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # تعویض زمینه | مقدمه: تعویض زمینه یا سودهی به بافت در رایانش -که گاهی در کتاب‌های فارسی «تعویض متن» یا «برگرداندن متن» ترجمه می‌شود- به فرایند ذخیره کردن و بازیابی وضعیت (زمینهٔ) یک گفته می‌شود؛ به طوری که اجرای آن بتواند بعداً از همان نقطه ادامه یابد. | ## بخش 1: تعویض زمینه | این کار به چند اجازه می‌دهد تا از یک CPU به صورت اشتراکی استفاده کنند و همچنین این قابلیت یکی از ارکان اساسی چندوظیفگی است. انجام این کار باعث تحمیل بار اضافه به سامانه می‌شود اما این بار اضافه آنقدر نیست که به خاطر آن از مزایای چند برنامگی صرف نظر شود. در طول انجام این فرایند، ثبات‌های پردازهٔ فعلی باید ذخیره و ثبات‌های پردازهٔ جدید بارگذاری شوند و همین‌طور لیست‌ها و جداول خاصی هم باید به‌روز شوند. جابجایی بین فرایندها یا کارها در رایانه در رایانش، یک تغییر زمینه عملیات ذخیرهٔ وضعیت یک فرایند یا موضوع است؛ به طوری که بتوان آن را بازیابی کرد و بعداً اجرای آن را از سر گرفت. این به چندین پردازش اجازه می‌دهد تا واحد پردازشگر مرکزی (CPU) را با هم به اشتراک بگذارند و از ویژگی‌های اساسی سیستم‌عامل چند وظیفه‌ای است. در زمینهٔ چند وظیفه ای، به روند ذخیره‌سازی حالت سیستم برای یک کار اشاره دارد؛ بنابراین می‌توان آن کار را متوقف کرد و کار دیگری را از سر گرفت. تعویض زمینه همچنین می‌تواند بر اثر یک وقفه اتفاق بیفتد؛ مانند زمانی که یک کار نیاز به دسترسی به ذخیره‌سازی دیسک دارد و باعث می‌شود زمان پردازنده برای کارهای دیگر آزاد شود. بعضی از سیستم‌عامل‌ها برای جابجایی بین وظایف حالت کاربر و حالت هسته به یک تعویض زمینه نیز نیاز دارند. هزینه متن تعویض‌ها معمولاً از نظر محاسباتی فشرده هستند و بیشتر طراحی سیستم‌عامل‌ها استفادهٔ بهینه از تعویض‌های زمینه‌ای است. جابجایی از یک فرایند به فرایند دیگر برای انجام امور مدیریتی به زمان مشخصی نیاز دارد که این فرایند شامل اموری مثل ذخیره و بارگذاری ثبات‌ها و نقشه‌های حافظه، به‌روزرسانی جداول و لیست‌های مختلف و غیره می‌شود. به عنوان مثال، در هستهٔ لینوکس تعویض زمینه شامل مواردی از قبیل تعویض ثبات‌ها، اشاره‌گر پشته (رکورد اشاره‌گر پشته)، شمارندهٔ برنامه، پاکسازی بافر ترجمهٔ سمت (TLB) و بارگیری جدول صفحهٔ فرایند بعدی برای اجرا -مگر اینکه فرایند قدیمی حافظه را با حافظهٔ جدید به اشتراک بگذارد- می‌شود. به علاوه، تعویض متن مشابه که بین رشته‌های کاربر، به ویژه رشته‌های سبز اتفاق می‌افتد و اغلب بسیار سبک است، باعث صرفه جویی و بازیابی می‌شود. زمان و نحوه انجام چندوظیفگی در سامانه‌های چند وظیفه‌ای یا همان چندکارگی، زمان‌بند سامانه باید پردازنده را از پردازهٔ در حال اجرا گرفته و آن را به پردازهٔ دیگری برای اجرا شدن بدهد. همچنین ممکن است پردازه خودش را به حالت غیرقابل اجرا ببرد که در این صورت هم می‌توان پردازنده را از پردازه گرفت و به پردازهٔ دیگری داد. یک پردازه زمانی به حالت غیرقابل اجرا می‌رود که بخواهد یک عملیات ورودی/خروجی انجام دهد و مجبور باشد منتظر خاتمه یافتن این عملیات باشد. | ## بخش 2: تعویض زمینه | در سامانه‌هایی که به صورت غیر انحصاری هستند، زمانبند می‌تواند پردازه‌ای که همچنان در حال اجرا هست را هم تعویض کند. بدین صورت که هر پردازه می‌تواند به میزان یک برش زمانی اجرا شود، پس از پایان یافتن برش زمانی، پردازنده از پردازه گرفته شده و به پردازهٔ دیگری داده می‌شود. برش زمانی معمولاً چند بار در یک ثانیه اتفاق می‌افتد؛ بنابراین پردازنده در طی یک ثانیه به چند پردازه سوئیچ کرده و هر کدام را برای مدت زمانی به اندازهٔ یک برش زمانی اجرا می‌کند. وقفهٔ ساعت برای تضمین اینکه زمانبند کنترل را از پردازه گرفته و به پردازهٔ دیگری خواهد داد، استفاده می‌شود. به این معنی که برای مثال اگر پردازنده از دیسک درخواست داده کند، نیاز نیست که در حالت انتظار مشغولی باقی بماند تا داده خوانده شود؛ بلکه می‌تواند بعد از دادن درخواست، به اجرای برنامه‌ای دیگر بپردازد. زمانی که خواندن داده از حافظه پایان یافت، پردازنده می‌تواند با ایجاد یک وقفه به خواندن دادهٔ آماده شده بپردازد که برای ایجاد این وقفه، برنامهٔ گرداننده وقفه (به انگلیسی: Interrupt handler) را فرا می‌خواند. زمانی که یک وقفه رخ می‌دهد، سخت‌افزار به صورت خودکار بخشی از زمینه را تعویض می‌کند (دست کم به مقداری که اجازه دهد کدهای گردانندهٔ وقفه را بازیابی کند). براساس جزئیات مخصوص طراحی‌های سخت‌افزار و نرم‌افزار، ممکن است گرداننده زمینهٔ اضافی را نیز نگهداری کند. اغلب مقدار کمی از زمینه تغییر می‌کند تا زمانی که برای ایجاد وقفه صرف می‌شود؛ کاهش یابد. هسته برای مدیریت وقفه‌های فرایند، زمانبندی خاصی ندارد اما به جای آن (اغلب در موارد ناتمام) زمینه در ابتدای گردانندهٔ وقفه مستقر می‌شود. زمانی که خدمات وقفه پایان می‌پذیرد، زمینه‌ای که قبل از وقفه موجود بود؛ بازیابی می‌شود و برنامهٔ متوقف شده می‌تواند اجرای خود را از حالت متوقف‌شده مجدداً شروع کند. تعویض فرمان کاربر و هسته زمانی که یک جابجایی بین فضای کاربری و فضای هسته در سیستم‌عامل نیاز باشد، تعویض زمینه ضروری نیست؛ تغییر حالت به تنهایی یک تعویض زمینه به حساب نمی‌آید. مراحل در یک تعویض، حالت اولین فرایند (فرآیندی که در حال اجرا است و باید تعویض شود) به گونه‌ای باید ذخیره شود؛ بنابراین زمانی‌که زمانبند به اجرای فرایند اولیه بازمی‌گردد، می‌تواند حالت خود را بازیابی کند و ادامه دهد. حالت فرایند شامل تمام ثبات‌هایی است که فرایند ممکن است از آن‌ها استفاده کند؛ به خصوص شمارنده برنامه. این داده‌ها معمولاً در ساختمان‌داده‌ای ذخیره می‌شوند که بلاک کنترل فرایند (PCB) نامیده می‌شود. | ## بخش 3: تعویض زمینه | برخی اوقات PCBها بر روی پشتهٔ هر فرایند در حالت هسته ذخیره می‌شوند (به‌طور متقابل در حالت کاربر و در پشته فراخوانی)، یا شاید برخی سیستم‌عامل‌های خاص از ساختمان‌داده‌ای برای تعریف این اطلاعات استفاده کنند. از آنجایی که سیستم‌عامل به تعویق انداختن کارامدی در اولین فرایند اجرایی دارد، می‌تواند PCB و زمینهٔ لازم برای فرایند دوم را بارگذاری کند. برای این منظور، شمارندهٔ برنامه از PCB بارگذاری می‌شود و بدین ترتیب اجرا می‌تواند در فرآیندی جدید ادامه یابد. در این عملیات چون خواندن و نوشتن متوالی وجود دارد و هیچ فراخوانی تابعی انجام نگرفته‌است، بنابراین در این حالت هیچ تعویض / انتظار زمینه‌ای اتفاق نمی‌افتد. با این حال، دستورالعمل‌های خاصی به فراخوانی سیستم (System call) نیاز دارند که برای فرآیندهای انتظار / خواب به تعویض زمینه نیاز دارند. عملکرد نمایشگر (دادهٔ x) ممکن است به دادهٔ x از دیسک و درایور دستگاه در حالت هسته نیاز داشته باشد. این باعث می‌شود برنامه منتظر بماند تا عملکرد تابع با tbe منتشر شود تا تنظیمات بیانیهٔ فعلی به حالت خواب درآید و منتظر بماند تا فراخوانی سیستم آن را بیدار کند. برای حفظ همزمانی اما برنامه باید مقدار جدید و روند خواب را دوباره با هم اجرا کند. کارایی تعویض زمینه به تنهایی در زمان اجرای زمانبندی دارای هزینه در کارایی است، فراوانی TLB و به‌طور غیر مستقیم به اشتراک‌گذاری حافظهٔ نهان CPU در میان چندین وظیفه موجب این هزینه‌هایند. تعویض در بین ریسمان‌های یک فرایند می‌تواند سریع‌تر از تعویض میان دو فرایند جدا رخ دهد؛ زیرا ریسمان‌ها می‌توانند نقشهٔ یک حافظه مجازی را به اشتراک بگذارند، بنابراین دیگر به TLB نیازی نیست. سخت‌افزار در برابر نرم‌افزار تعویض زمینه اصولاً می‌تواند توسط نرم‌افزار یا سخت‌افزار انجام شود. برخی پردازنده‌ها مانند Intel 80386 و نظیر آن، دارای پشتیبان سخت‌افزاری برای تعویض زمینه هستند. مانند دیگر وظایفی که در سخت‌افزار اجرا می‌شود، این مورد نیز به نظر می‌رسد که نسبت به نرم‌افزار سریع‌تر انجام شود. اگرچه شاخهٔ اصلی سیستم‌عامل‌ها نظیر مایکروسافت ویندوز و لینوکس از این ویژگی استفاده نمی‌کنند. | ## جمع‌بندی | این مورد می‌تواند به خاطر دو دلیل اصلی زیر باشد: تعویض زمینهٔ سخت‌افزاری تمام ثبات‌ها را نگهداری نمی‌کند (تنها ثبات‌های اصلی و نه ثبات‌های ممیز شناور) وابسته به کارایی مسئله و … تعویض زمینهٔ نرم‌افزاری می‌تواند تنها ثبات‌های مورد نیاز را انتخاب و ذخیره کند در حالی که تعویض زمینهٔ سخت‌افزاری تقریباً تمام ثبات‌ها را ذخیره می‌کند؛ چه مورد نیاز باشند و چه نباشند.