تعویض زمینه

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

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

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

زمان و نحوه انجام[ویرایش]

چندوظیفه‌ای[ویرایش]

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

مدیریت وقفه[ویرایش]

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

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

تعویض فرمان کاربر و هسته[ویرایش]

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

مراحل[ویرایش]

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

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

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

کارائی[ویرایش]

تعویض زمینه به تنهایی در زمان اجرای زمانبندی دارای هزینه در کارائی است، فراوانی تی‌ال‌بی و به طور غیر مستقیم به اشتراک گذاری حافظه نهان سی‌پی‌یو در میان چندین وظیفه موجب این هزینه ها می باشند. تعویض در بین ریسمان های یک فرایند می تواند سریعتر از تعویض میان دو فرایند جدا رخ دهد زیرا ریسمان ها می توانند نقشه ی یک حافظه مجازی را به اشتراک بگذارند، بنابراین دیگر به تی ال (به انگلیسی: TLB) بی نیازی نیست.

سخت افزار در برابر نرم افزار[ویرایش]

تعویض زمینه اصولا می تواند توسط نرم افزار یا سخت افزار انجام شود. برخی پردازنده ها مانند اینتل ۸۰۳۸۶ و نظیر آن، دارای پشتیبان سخت افزاری برای تعویض زمینه هستند.

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

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

منابع[ویرایش]