پیشاجرایی (رایانش)
پیشاجرایی (به انگلیسی: preemption) در رایانش، یا همان باز پس گیری ، عمل «وقفه موقتی» یک وظیفه درحالاجرا با هدف ادامه آن در آینده است، پس از این عمل، وظیفه دیگری اجرا (پیشاجرا) میگردد. این وقفه توسط یک برنامهریز خارجی و بدون همکاری آن وظیفه انجام میشود. این زمانبند پیشاجرا باید در بالاترین حلقه مجوزی باشد، و این یعنی وقفهدادن و ازسرگیری، اعمالی با امنیت بسیار بالا محسوب میشوند. به چنین تغییری در فعالیت اجراشونده یک پردازشگر، تعویض زمینه گفته میشود.
مد کاربر و مد هسته
در طراحی هر سیستم معینی، تعدادی از عملگرهاکه بهوسیله سیستم به سرانجام میرسند ممکن است قابل قبضه کردن نباشند. این معمولابرای کاربرهای هسته و سرویس وقفه به کار گرفته میشود که اگر ترخیص نشده باشن برای اجرا به منظور تکامل، ممکن است برای تولید حالت مسابقهکه سرانجامش بنبست است گراییده شوند. به جز زمانبندی از وظایف قبضه کردن زمانی که آنها کاربردهای فرایندهای هسته هستند ساده کردن طراحی هسته در هزینه سیستم مودرد توجه است. تفاوت بین مد کاربر و مد هسته در مراحل خاصی بین سیستم مشخص میشود که ممکن است همچنین استفاده شودبه منظور تمییز دادن چیزی که یک وظیفه اخیراً قابل قبضه شدن است. بیشتر سیستمهای مدرن هسته قبضه شدن دارند، طراحی میشوند تا اجازه دهند به وظایف تا قبضه شوندحتی وقتی در مد هسته هستند. مثالهایی از این سیستمها سولاریس ۲،SunOs 5.0،Windows NT، هسته لینوکس ۲٫۶، و 3.x,AIX و بعضی از سیستمهای BSD (NetBSD) از ورژن ۵
قبضه کردن چند وظیفهای
واژه قبضه کردن چند وظیفهای برای تمییز دادن یک سیستم عامل چند وظیفهای به کار میرود که اجازه میدهد به قبضه کردن وظیفهها، از یک سیستم مشارکتی چندوظیفهای جاییکه فرایندها یا وظایف مجبورند بهطور صریح قابل برنامهریزی برای بهرهوری باشند وقتی که آنها به منابع سیستم نیاز ندارند. به عبارت ساده: قبضه کردن چند وظیفهای مستلزم استفاده از یک مکانیزم وقفه که معوق میکند فرایند قابل اجرای اخیر را و خواستن یک زمانبندی تا معین کند فرایندی که باید در مرحله بعدی پردازش شود؛ بنابراین همه فرایندها مقداری از cpuدر زمان معین میگیرند. در قبضه کردن چند وظیفهای هسته سیستم عامل میتواند وارد یک مسیریاب متنی شود به منظور راضی کردن قید زمانبندی اولویت دار، بدین گونه که قبضه کردن وظیفه فعال باشد. بهطور کلی قبضه کردن به معنی "تصرف قبلی" است. زمانی که یک وظیفه با اولویت بالا در آن لحظه وظیفه در حال اجرای قبلی را تصرف کند، آن به عنوان زمانبندی قبضه کردن شناخته میشود. کلمه" قبضه کردن چند وظیفهای " گاهی اوقات به اشتباه استفاده میشود وقتی که معنی از قبل تعیین شده ویژه است، ارجاع داده میشود به جای سیاست زمانبندی شناخته میشود به عنوان تقسیم زمانبندی یا تسهیم زمانبندی. قبضه کردن چند وظیفهای به سیستم کامپیوتر اجازه میدهد تا بیشتر با اعتماد ضمانت کند برای هر فرایند منظم در زمان عملیات. همچنین اجازه میدهد که سیستم توزیع کند با وقایع خارجی مهم مثل دادههای وارد شونده، که میتواند مورد نیاز توجه بی درنگ یک یا فرایند دیگر باشد. در هر زمان خاص فرایندها میتوانند گروهبندی شوند به دو طبقه: آنهایی که منتظر ورودی یا خروجی هستند (I/O bound مینامند) و آنهایی که بهطور کامل از cpu استفاده میکنند (cpu bound). در سیستمهای اولیه، فرایندها اغلب "سرشماری میشوند" یا "انتظار مشغولی" زمانی که منتظر ورودی درخواست داده شده (مانند دیسک، کیبورد، یا ورودی شبکه). در طول این زمان فرایندها بهطور مفیدی کار نمیکنند، اما هنوز کنترل cpu را بهطور کامل حفظ میکند. با ظهور وقفه و قبضه کردن چندوظیفه ایاین فرایندهای I/O bound میتوانند "بلاک" شوند یا ثابت نگهداری شوند، تا زمانی که دادههای مقدم، اجازه میدهند به فرایندهای دیگر تا cpu را به دست آورند. هنگامی که دادههای درخواستی مقدم تولید یک وقفه میکنند، فرایندهای بلاک شده یک بازگشت به موقع برای اجرا را ضمانت میکنند. اگرچه تکنیکهای چندوظیفهای از اصل توسعه یافته بودبه منظور اجازه دادن به کاربران چندگانه تا یک ماشین را تقسیم کنند، آن به زودی آشکار شد که چندوظیفهای صرفنظر از شمار کاربران مفید بودهاست. بیشتر سیستم عاملها، از پردازنده مرکزی تا کامپیوترهای تک کاربر شخصی سیستمهای بدون کنترل کاربر (شبیه این فضاپیمای خودکار)، سازماندهی میشوند به صورت مفیدی از پوششهای چندوظیفهای برای دلایل مختلف. چندپردازندهای برای یک کاربر ممکن میکند تا در یک زمان کاربردهای چندگانه را اجرا کند یا فرایندهای "پس زمینه" را زمانیکه کنترل کامپیوتر را نگه میدارد اجرا کند.
برش زمان
دوره زمانی برای یک فرایند اجازه میدهد تا اجرا شود در یک سیستم چندوظیفهای بهطور عمومی برش زمان نامیده میشود یا «کوانتوم». زمانبند در هر برش زمانی اجرا میشود تا فرایند بعدی را برای اجرا انتخاب کند. اگر برش زمانی خیلی کوتاه باشد زمانبند خیلی زیاد برای زمان فرایند مصرف میشود. یک وقفه زمانبندی میشود تا اجازه دهد به هسته سیستم عامل تا مسیریابی کند بین فرایندها و زمان به انتها رسیدن کوانتومشان. بهطور مؤثری اجازه میدهد تا زمان پردازنده تقسیم شود بین تعدادی از وظایف، دادن اشتباه که آن توزیع این وظایف باهم، یا متقارن. سیستم عاملی که کنترل میکند همانند یک طرح سیستم چندوظیفهای نامیده میشود.
پوشش قبضه کردن سیستمهای چند وظیفهای
امروزه تقریباً همه سیستمهای عامل قبضه کردن چندوظیفهای را پوشش میدهند، شمل ورژن اخیر ویندوز، Mac OS,Linux, iOS و اندروید. بیشتر سیستمهای عامل اولیه قابل دسترس برای کاربران خانگی طرح قبضه کردن چند وظیفهای بود Sinclair QDOS (۱۹۸۴) و Amiga OS (۱۹۸۵). هردوی اینها اجرا شد روی Motorola 68000 ریزپردازندههای خانوادگی بدون مدیریت حافظه. Amiga OS برای بارکردن پویا ازبلاک کردن کدها استفاده میشد ("hunks" از اصطلاحات Amiga) تا چند وظیفهای عمل کند قبضه کردن همه فرایندها درفضای آدرس مسطح. سیستمهای عامل پی سیهای اولیه مانند MS-DOS و PC DOS، هنوز چندوظیفهای را اصلاً پوشش نمیدهند، اگرچه سیستمهای عامل متناوب مانند MP/M-86(1981) و متقارن CP/M-86 سیستمهای چندوظیفهای را پوشش میدهد. سیستمهای دیگر شبیه یونیکس شامل MINIX و Coherent قبضه کردن چندوظیفهای را روی کامپیوترهای شخصی دوره ۱۹۸۰ را فراهم میکند. بعدها ورژنهای Dosبهطور بومی قبضه کردن چندوظیفهای /چندنخی شامل Concurrent DOS, Multiuser DOS,Novell DOS (و بعدها OpenDos و7.02DR-DOS وبالاتر نامیده شد) از زمانی که DOS 386 متقارن، آنها میتوانند همچنین برنامههای DOS چندگانه را بهطور متقارن در ماشینهای مجازی DOS اجرا کنند.Novell NetWare, Microsoft Windows و سیستمهای OS/2 چند وظیفهای مشارکتی را برای کامپیوتر تولید میکنند، اما قبضه کردن چندوظیفهای را پوشش نمیدهند. نخستین نسخه ویندوز پوشش میداد یک حدی از قبضه کردن چند وظیفهای که Windows 2.1x بود، که استفاده میشد از مد ۸۰۸۶ مجازی اینتل ۸۰۳۸۶ تا اجرا کند کاربردهای مجازی DOS در ماشین ۸۰۸۶ مجازی-عموماً به عنوان "DOS boxes "شناخته میشود-ممکن است قبضه شود. در ویندوزهای 95,98,ME، ۳۲ بیتی کاربردها قبضه پذیر میبودند به وسیله اجرای هریک از فضای آدرسهای جداگانه، اما در ۱۶ بیتی کاربردها مشارکتی ماندهاند. خانواده ویندوز NT(شامل 2000,XP,vista,۷) معمولاً قبضه کردن چندوظیفهای را پوشش میدهند. OS/2 اولین بار در سال ۱۹۸۷ توسعه پیدا کرد، معمولاً قبضه کردن چندوظیفهای و چند نخی از کاربردهای بومی و "DOS box" تنها را پوشش میداد. نسخه ۲٫۰ و OS/2 Warp، بازنویسی هدفگرای IBM در ۳۸۶ سیستم، همچنین اجازه داد به چندین موقعیت مختلف ویندوز تا بهطور چندوظیفهای قبضه شوند. سیستمهای Unix و Unix-Like (مثل Linux,BSD, Mac OS X)، VMS و سیستمهای دیگر در مارکتهای تجاری آکادمی و متوسط-بالا استفاده میشود، که معمولاً قبضه کردن چندوظیفهای را پوشش میدهد. اگرچه طرحهایی وجود دارد تا مشارکت چندوظیفهای Mac OS ترفیع یابد تا یک مدل قبضه کردن شود (و یک API قبضه شده در Mac OS 9 وجود دارد اگرچه در جهت خیلی محدود و نسبتاً بهرهبرداری شده) اینها در خلال Mac OS 9 متروکه بودند یک پیوند از Mac OS و گام بعدی سیستم عامل که بر پایه Mach Kernel بنا شدهاست و قبضه کردن چندوظیفهای Unix-like را فراهم میکند.