چندکارگی (رایانه)

[چپ|بندانگشتی|350x350پیکسل|سیستم‌عامل‌های مدرن دسکتاپ، قادر به مدیریت همزمان تعداد زیادی از فرآیندهای مختلف هستند. این تصویر نشان می‌دهد [لینوکس مینت همزمان در حال اجرا در محیط دسکتاپ فایرفاکس، یک برنامه ماشین‌حساب، تقویم داخلی، ویم، گیمپ و وی‌ال‌سی مدیا پلیر است.]]

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

چندوظیفگی به طور همزمان به انجام همزمان چندین کار احتیاج ندارد. در عوض، به بیش از یک کار اجازه می‌دهد تا در یک دوره زمانی مشخص پیش بروند. حتی در رایانه‌های چند پردازنده‌ای، چندوظیفگی اجازه می‌دهد کارهای بیشتری نسبت به پردازنده‌های مرکزی انجام شود.

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

غالباً سیستم‌عامل‌های چند وظیفه‌ای اقداماتی را برای تغییر اولویت کارهای فردی در نظر گرفته اند، به طوری که برای کارهای مهم‌تر نسبت به کارهایی که اهمیت کمتری دارند، زمان بیشتری برای استفاده از پردازنده اختصاص می‌یابد. بسته به سیستم عامل، یک کار ممکن است به اندازه کل برنامه کاربردی بزرگ باشد، یا ممکن است از ریسمان (رایانش)‌های کوچکتر تشکیل شده باشد که قسمت‌های کلی برنامه را انجام می‌دهد.

پردازنده‌ای که برای استفاده با سیستم‌عامل‌های چندوظیفه‌ای در نظر گرفته شده است، ممکن است شامل سخت‌افزار ویژه‌ای برای پشتیبانی ایمن از چندین کار مانند حفاظت از حافظه و حلقه حفاظتی باشد که اطمینان حاصل می‌کند نرم افزار نظارتی توسط خطاهای برنامه حالت کاربر آسیب نمی‌بیند یا برانداز می‌شود.

اصطلاح «چندوظیفگی» به یک اصطلاح بین‌المللی تبدیل شده‌است، زیرا همان کلمه در بسیاری از زبان‌های دیگر مانند آلمانی، ایتالیایی، هلندی، دانمارکی و نروژی نیز استفاده می‌شود.

## چند برنامه‌ریزی
در روزهای اولیه رایانش، اختصاص زمان پردازنده پرهزینه بود و دستگاه جانبی بسیار کند بودند. هنگامی که رایانه برنامه‌ای را اجرا می‌کند که به دسترسی به یک دستگاه جانبی احتیاج دارد، واحد پردازش مرکزی (CPU) مجبور بود دستورالعمل‌های برنامه را هنگام پردازش دستگاه جانبی، متوقف کند. این اتفاق به طور کلی بسیار ناکارآمد بود.

اولین رایانه‌ای که از سیستم چند برنامه‌ای استفاده می‌کرد ، Leo III انگلیس بود که متعلق به J. Lyons and Co. بود. در طی پردازش دسته‌ای، چندین برنامه مختلف در حافظه رایانه بارگیری شد و برنامه اول شروع به اجرا کرد. هنگامی که اولین برنامه به دستورالعمل منتظر یک وسیله جانبی رسید، متن این برنامه دور نگه داشته شد و به برنامه دوم در حافظه فرصت داده شد که اجرا شود. این روند تا پایان اجرای همه برنامه‌ها ادامه داشت.

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

چندبرنامه‌ای هیچ تضمینی برای اجرای به موقع یک برنامه نمی‌دهد. در واقع، اولین برنامه ممکن است بدون نیاز به دسترسی به وسایل جانبی، ساعت‌ها اجرا شود. از آنجا که هیچ کاربری منتظر یک ترمینال تعاملی نبود، مشکلی هم ایجاد نمی‌شد. کاربران یک کارت پانچ را به یک اپراتور تحویل می‌دادند و چند ساعت بعد برای نتایج چاپی برمی‌گشتند. چندبرنامگی زمان انتظار را هنگام پردازش دسته‌ها به مقدار زیادی کاهش می‌داد.

## چندوظیفگی تعاونی
سیستم‌های چند وظیفه‌ای اولیه از برنامه‌هایی استفاده می‌کردند که داوطلبانه زمان را به یکدیگر واگذار می‌کردند. این رویکرد که در نهایت توسط بسیاری از سیستم‌عاملهای رایانه پشتیبانی شد، امروزه به عنوان چند وظیفه‌ای مشارکتی شناخته می‌شود. اگرچه اکنون به ندرت در سیستم‌های بزرگتر به استثنای برنامه‌های خاص مانند CICS یا زیر سیستم JES2 استفاده می‌شود، اما چندوظیفگی مشارکتی تنها برنامه زمان‌بندی بود که توسط Microsoft Windows و Classic Mac OS به کار رفته بود تا چندین برنامه را به طور همزمان اجرا کند. چندوظیفگی مشارکتی امروزه در سیستم عامل‌های RISC نیز مورد استفاده قرار می‌گیرد.

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

## چند وظیفه ای پیشگیرانه
چند وظیفگی پیشگیرانه این امکان را به سیستم کامپیوتر می دهد تا "قطعه" منظم زمان کار را برای هر فرآیند با اطمینان بیشتری تضمین کند. همچنین به سیستم این امکان را می دهد تا به سرعت به وقایع مهم خارجی مانند داده های ورودی که ممکن است نیاز به توجه فوری یک فرآیند دیگر داشته باشد ، رسیدگی کند. سیستم عامل ها برای بهره گیری از این قابلیت های سخت افزاری و اجرای پیشگیرانه چندین فرآیند تولید شده اند. چند وظیفه ای پیشگیرانه در PDP-6 Monitor و MULTICS در سال 1964 ، در OS / 360 MFT در سال 1967 و در یونیکس در سال 1969 اجرا شد و در برخی از سیستم عامل های رایانه های به اندازه DEC's PDP-8 موجود بود. این یک ویژگی اصلی در همه سیستم عامل های مشابه یونیکس است ، مانند لینوکس ، سولاریس و BSD با مشتقات آن و همچنین نسخه های مدرن ویندوز.

در هر زمان خاص ، پردازش ها را می توان به دو دسته تقسیم کرد: دسته هایی که منتظر ورود یا خروجی هستند ("I / O bound" نامیده می شود) ، و پردازش هایی که به طور کامل از CPU استفاده می کنند ("CPU bound").در سیستم های ابتدایی ، نرم افزار اغلب در حال "سرکشی‌کردن (علوم رایانه)" یا "انتظار مشغول" است و برای ورودی درخواستی (مانند ورودی دیسک ، صفحه کلید یا شبکه) "نظرسنجی" می کند. در این مدت ، سیستم کار مفیدی انجام نمی داد. با ظهور وقفه ها و چند وظیفگی پیشگیرانه ، می توان فرآیندهای متصل به ورودی / خروجی را مسدود کرد یا در حالت انتظار نگه داشت ، تا رسیدن داده های لازم ، به سایر فرایندها اجازه می دهد تا از پردازنده استفاده کنند. از آنجا که ورود داده های درخواستی باعث ایجاد وقفه می شود ، می توان برای فرآیندهای مسدود شده ، بازگشت به موقع به اجرا را تضمین کرد.

اولین سیستم عامل پیشگیرانه چند وظیفه ای موجود برای کاربران خانگی ، Sinclair QDOS در Sinclair QL بود که در سال 1984 منتشر شد ، اما تعداد کمی از مردم دستگاه را خریداری کردند. Amiga کمودور ، که در سال بعد منتشر شد ، اولین رایانه خانگی تجاری موفق بود که از این فناوری استفاده کرد و توانایی های چندرسانه ای آن را به عنوان یک جد آشکار از رایانه های شخصی چند وظیفه ای معاصر تبدیل کرده است. مایکروسافت در اوایل دهه 1990 هنگام توسعه ویندوز NT 3.1 و سپس ویندوز 95 ، انجام چند وظیفه پیشگیرانه را به یکی از ویژگی های اصلی سیستم عامل شاخص خود تبدیل کرد. بعداً توسط Mac OS X در Macintosh اپل به کار گرفته شد که به عنوان یک سیستم عامل مشابه یونیکس ، از چند وظیفگی پیشگیرانه برای همه برنامه های بومی استفاده می کند.

یک مدل مشابه در ویندوز 9x و خانواده NT ویندوز ، که در آن برنامه های 32 بیتی به صورت پیش فرض چند وظیفه ای هستند ، استفاده می شود. نسخه های 64 بیتی ویندوز ، چه برای x86-64 و چه برای معماری Itanium ، دیگر از برنامه های 16 بیتی قدیمی پشتیبانی نمی کنند و بنابراین چند وظیفگی پیشگیرانه را برای همه برنامه های پشتیبانی شده فراهم می کنند.

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

## چند رشته‌ای
از آنجایی که چندوظیفگی توان عملیاتی رایانه‌ها را بسیار بهبود بخشید، برنامه‌نویسان شروع به اجرای برنامه‌ها به عنوان مجموعه‌ای از فرایندهای همکاری کردند (به عنوان مثال، فرآیند جمع‌آوری داده‌های ورودی، یک پردازش داده‌های ورودی یک پردازه‌، و نوشتن نتایج روی دیسک). با این وجود ، این ابزارها به برخی ابزارها نیاز داشتند تا به پردازش‌ها امکان تبادل مؤثر داده‌ها را بدهند.

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

درحالیکه ریسه‌ها به صورت پیش فرض برنامه‌ریزی می‌شوند، برخی از سیستم‌عامل‌ها نوع مختلفی را برای ریسه‌ها ، به نام الیاف، که به‌صورت مشترک برنامه‌ریزی می‌شوند ، ارائه می‌دهند. در سیستم‌عامل‌هایی که الیاف ارائه نمی‌دهند ، برنامه‌ای ممکن است فیبر (علوم رایانه) خود را با استفاده از تماس‌های مکرر با توابع کارگر پیاده‌سازی کند. الیاف حتی سبک تر از ریسه‌ها هستند و برنامه‌ریزی آنها تا حدودی آسان‌تر است ، اگرچه تمایل دارند برخی از مزایای ریسه‌ها را در دستگاه‌های دارای چندپردازشی از دست بدهند.

برخی از سیستم‌ها به طور مستقیم از چند رشته در سخت افزار پشتیبانی می‌کنند.

## محافظت از حافظه
اشتراک در دسترسی به منابع سیستم برای هر سیستم چند وظیفه ای ضروری است. دسترسی به حافظه باید کاملاً مدیریت شود تا اطمینان حاصل شود که هیچ فرآیندی نمی تواند سهوی یا عمداً در مکانهای حافظه خارج از فضای آدرس فرآیند بخواند یا بنویسد. این کار با هدف ثبات عمومی سیستم و یکپارچگی داده ها و همچنین امنیت داده انجام می شود.

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

در یک سیستم چند وظیفه ای که به خوبی طراحی شده و به درستی پیاده سازی شده ، یک فرآیند داده شده هرگز نمی تواند مستقیماً به حافظه ای که متعلق به فرآیند دیگری است دسترسی پیدا کند. یک استثنا در مورد این قاعده در مورد حافظه مشترک است. به عنوان مثال ، در مکانیسم ارتباطی بین فرآیند System V هسته به حافظه اجازه می دهد تا به طور متقابل توسط چندین فرآیند به اشتراک گذاشته شود. چنین ویژگی هایی اغلب توسط نرم افزار مدیریت پایگاه داده مانند PostgreSQL استفاده می شود.

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

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

## برنامه نويسي
فرآیندهای کاملاً مستقل برای برنامه ریزی در یک محیط چند وظیفه ای مشکل چندانی ندارند. بیشترین پیچیدگی در سیستم های چند وظیفه ای ناشی از نیاز به اشتراک منابع کامپیوتر بین وظایف و همگام سازی عملکرد وظایف مشترک است.

از تکنیک های رایانش همزمان برای جلوگیری از مشکلات احتمالی ناشی از تلاش های متعدد برای دستیابی به همان منبع استفاده می شود.

در سیستم های بزرگتر گاهی با پردازنده (های) مرکزی و تعدادی از پردازنده های ورودی / خروجی ، نوعی چندپردازشی نامتقارن ساخته می شوند.

با گذشت سالها ، سیستمهای چند وظیفه ای بهتر شده اند. سیستم عامل های مدرن به طور کلی شامل مکانیزم های جزئی برای اولویت بندی فرایندها هستند ، در حالی که چندپردازی متقارن پیچیدگی ها و قابلیت های جدیدی را به همراه آورده است.

## همچنین ببینید

* وضعیت پردازه
* تعویض زمینه

## منابع

رده:فناوری‌های سیستم‌عامل
رده:رایانش همروند