تعویض زمینه
تعویض زمینه، یا سودهی[1] به بافت[2] (به انگلیسی: Context Switching) در رایانش، که گاهی در کتابهای فارسی، «تعویض متن» یا «برگرداندن متن» ترجمه میشود؛ به فرایند ذخیره کردن و بازیابی وضعیت (زمینه) یک پردازش گفته میشود، بهطوریکه اجرای آن پردازش بتواند بعداً از همان نقطه ادامه یابد. این کار به چند پردازش اجازه میدهد تا از یک CPU به صورت اشتراکی استفاده کنند و همچنین این قابلیت یکی از ارکان اساسی چندوظیفگی است. انجام این کار باعث تحمیل بار اضافه به سامانه میشود اما این بار اضافه آنقدر نیست که به خاطر آن از مزایای چندبرنامگی صرفه نظر شود. جابجایی که یک پروسه به پروسهای دیگر نیاز به یک مدت زمان مشخص دارد، در طول انجام این کار، ثباتهای پروسه فعلی باید ذخیره شده و ثباتهای پروسه جدید بارگذاری شود و همینطور لیستها و جداول خاصی هم باید بروز شود.
عبارت «برگردان زمینه»، میتواند اشاره به برگردان زمینه یک ثبات باشد، یا برگردان زمینه یک وظیفه باشد، یا برگردان زمینه یک قاب پشته باشد یا برگردان زمینه یک ریسه باشد.
زمان و نحوه انجام
چندوظیفهای
در سامانههای چند وظیفهای یا همان چندکارگی، زمانبند سامانه باید پردازنده را از پروسه در حال اجرا پس گرفته و آن را به پروسه دیگری برای اجرا شدن بدهد. همچنین ممکن است پروسه خودش را به حالت غیرقابل اجرا ببرد که در این صورت هم میتوان پردازنده را از پروسه گرفت و به پروسه دیگری داد. یک پروسه زمانی به حالت غیرقابل اجرا میرود که بخواهد یک عملیات ورودی/خروجی انجام دهد و مجبور باشد منتظر خاتمه یافتن این عملیات باشد. در سامانههایی که به صورت غیر-انحصاری هستند، زمانبند میتواند پروسهای که همچنان در حال اجرا هست را هم تعویض کند. در این سامانهها از یک وقفه ساعت برای تعیین برش زمانی استفاده میشود. بدین صورت که هر پروسه میتواند به میزان یک برش زمانی اجرا شود، پس از پایان یافتن برش زمانی، پردازنده از پروسه گرفته شده و به پروسه دیگری داده میشود. برش زمانی معمولاً چند بار در یک ثانیه اتفاق میافتد؛ بنابراین پردازنده در طی یک ثانیه به چند پروسه سوئیچ کرده و هر کدام را برای مدت زمانی به اندازه یک برش زمانی اجرا میکند. وقفه ساعت برای تضمین اینکه زمانبند کنترل را از پروسه گرفته و به پروسه دیگری خواهد داد، استفاده میشود.
مدیریت وقفه
معماریهای امروزه گردانندهٔ وقفه هستند، به این معنی که اگر پردازنده از دیسک درخواست داده کند، برای مثال نیاز نیست که در حالت انتظار مشغولی باقی بماند تا داده خوانده شود بلکه میتواند بعد از دادن درخواست به اجرای برنامهای دیگر بپردازد. زمانی که خواندن داده از حافظه پایان یافت، پردازنده میتواند با دادن یک وقفه به خواندن داده بپردازد. برای ایجاد وقفه، برنامه گرداننده وقفه (به انگلیسی: interrupt handler) را فرا میخواند.
زمانی که یک وقفه رخ میدهد، سختافزار به صورت خودکار بخشی از زمینه را تعویض میکند (دست کم به مقداری که اجازه دهد گرداننده کدهای وقفه را بازیابی کند). براساس جزئیات مخصوص طراحیهای سختافزار و نرمافزار، ممکن است گرداننده زمینه اضافی را نیز نگهداری کند. اغلب مقدار کمی از زمینه تغییر میکند تا میزان زمانی که برای ایجاد وقفه صرف میشود؛ کاهش یابد. هسته برای مدیریت وقفههای فرایند زمانبندی خاصی ندارد، اما به جای آن (اغلب در موارد ناتمام) زمینه در ابتدای گرداننده وقفه مستقر میشود. زمانیکه خدمات وقفه پایان میپذیرد، زمینهای که از قبل از وقفه موجود بود؛ بازیابی میشود و برنامه متوقف شده میتواند اجرای خود را از حالت مطبوع مجدداً شروع کند.
تعویض فرمان کاربر و هسته
زمانی که یک جابجایی بین فضای کاربری و فضای هسته در سامانه عامل نیاز باشد، تعویض زمینه ضروری نیست؛ تغییر حالت به تنهایی یک تعویض زمینه به حساب نمیآید. اگرچه، وابسته به نوع سامانه عامل ممکن است در این زمان تعویض زمینه نیز رخ دهد.
مراحل
در یک تعویض، حالت اولین فرایند (فرایندی که در حال اجرا است و باید تعویض شود) بگونهای باید ذخیره شود، بنابراین؛ زمانیکه زمانبند به اجرای فرایند اولیه بازمیگردد، میتواند حالت خود را بازیابی کند و ادامه دهد.
حالت فرایند شامل تمام ثباتهایی است که فرایند ممکن است از آنها استفاده کند، به خصوص شمارنده برنامه، به علاوه هر سامانه عاملی دادههای خاصی دارد که ممکن است ضروری باشد. این دادهها معمولاً در ساختمان دادهای ذخیره میشود که بلاک کنترل فرایند (PCB) نامیده میشود.
به جای تعویض فرایندها، برای اولین فرایند PCB باید ایجاد شده و ذخیره شود. برخی اوقات PCBها بر روی پشته هر فرایند در حافظه هسته ذخیره میشود (بهطور متقابل در حالت کاربر و در پشته فراخوانی)، یا شاید برخی سامانه عاملهای خاص از ساختمان داده برای تعریف این اطلاعات استفاده کنند. از آنجاییکه سامانه عامل به تعویق انداختن کارامدی در اولین فرایند اجرایی دارد، میتواند PCB و زمینه لازم برای فرایند دوم را بارگذاری کند. برای این منظور، شمارندهٔ برنامه از PCB بارگذاری میشود و بدینگونه اجرا میتواند در فرایندی جدید ادامه یابد. فرایندهای جدید از صف یا صفها (اغلب با رجوع به صف آماده اجرا) انتخاب میشوند. فرایند و ریسهٔ داری الویت میتواند بر اجرای دیگر فرایندها تأثیر بگذارد. فرایندهایی با الویت بالاتر ابتدا ریسمانهای آماده برای اجرا را بررسی میکنند.
کارائی
تعویض زمینه به تنهایی در زمان اجرای زمانبندی دارای هزینه در کارائی است، فراوانی تیالبی و بهطور غیر مستقیم به اشتراکگذاری حافظه نهان سیپییو در میان چندین وظیفه موجب این هزینهها میباشند. تعویض در بین ریسمانهای یک فرایند میتواند سریعتر از تعویض میان دو فرایند جدا رخ دهد زیرا ریسمانها میتوانند نقشهٔ یک حافظه مجازی را به اشتراک بگذارند، بنابراین دیگر به تی ال بی (به انگلیسی: TLB) بینیازی نیست.
سختافزار در برابر نرمافزار
تعویض زمینه اصولاً میتواند توسط نرمافزار یا سختافزار انجام شود. برخی پردازندهها مانند اینتل ۸۰۳۸۶ و نظیر آن، دارای پشتیبان سختافزاری برای تعویض زمینه هستند.
مانند دیگر وظایفی که در سختافزار اجرا میشود، این مورد نیز به نظر میرسد که نسبت به نرمافزار سریعتر انجام شود. اگرچه شاخه اصلی سامانه عاملها نظیر مایکروسافت ویندوز و لینوکس از این ویژگی استفاده نمیکنند. این مورد میتواند به خاطر دو دلیل اصلی زیر باشد:
- تعویض زمینهٔ سختافزاری؛ تمام ثباتها را نگهداری نمیکند (تنها ثباتهای اصلی و نه ثباتهای ممیز شناور)
- وابسته به کارائی مسئله و … تعویض زمینهٔ نرمافزاری میتواند تنها ثباتهای مورد نیاز را انتخاب و ذخیره کند، در حالیکه تعویض زمینهٔ سختافزاری تقریباً تمام ثباتها را ذخیره میکند؛ چه مورد نیاز باشند و چه نباشند.
منابع
- «سودهی» [مهندسی مخابرات] همارزِ «switching»؛ منبع: گروه واژهگزینی. جواد میرشکاری، ویراستار. دفتر اول. فرهنگ واژههای مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۶۴-۷۵۳۱-۳۱-۱ (ذیل سرواژهٔ سودهی2)
- «بافت» [زبانشناسی] همارزِ «context»؛ منبع: گروه واژهگزینی. جواد میرشکاری، ویراستار. دفتر پنجم. فرهنگ واژههای مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۷۸-۹۶۴-۷۵۳۱-۷۶-۴ (ذیل سرواژهٔ بافت2)
- مشارکتکنندگان ویکیپدیا. «Context switching». در [[ویکیپدیای انگلیسی|دانشنامهٔ ویکیپدیای انگلیسی]].