چندکارگی (رایانه)
در علوم کامپیوتر و رایانش، چند وظیفگی، اجرای همزمان چندین کار یا فرآیند در مدت زمان مشخص است. وظایف جدید می‌توانند کارهایی را که قبلاً شروع شده‌اند، قبل از پایان کار قطع کنند؛ به جای اینکه منتظر بمانند تا پایان یابد. در نتیجه، رایانه بخش‌هایی از چندین وظیفه را به روشی پخته شده اجرا می‌کند؛ در حالی که وظایف منابع پردازشی مشترک مانند واحدهای پردازش مرکزی (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 استفاده می شود.
سازوکارهای محافظت از حافظه ناکافی ، به دلیل نقص در طراحی آنها یا پیاده سازی ضعیف ، امکان آسیب پذیری های امنیتی را فراهم می کند که ممکن است توسط نرم افزارهای مخرب مورد سو استفاده قرار گیرند.
استفاده از یک حافظه مجازی یا پارتیشن مبادله راهی برای سیستم عامل است که می تواند با نگه داشتن بخشهایی از حافظه اصلی در حافظه ثانویه ، حافظه بیشتری از آنچه از نظر فیزیکی در دسترس است ، فراهم کند. در حالی که چند وظیفه ای و تعویض حافظه دو تکنیک کاملاً نامرتبط هستند ، اما آنها اغلب در کنار هم استفاده می شوند ، زیرا تعویض حافظه امکان بارگیری همزمان کارهای بیشتر را فراهم می کند. به طور معمول ، یک سیستم چند وظیفه ای هنگامی که فرایند در حال اجرا به نقطه ای منتقل می شود که باید منتظر بماند تا بخشی از حافظه از حافظه ثانویه بارگیری شود ، فرآیند دیگری را اجرا می کند.
فرآیندهای کاملاً مستقل برای برنامه ریزی در یک محیط چند وظیفه ای مشکل چندانی ندارند. بیشترین پیچیدگی در سیستم های چند وظیفه ای ناشی از نیاز به اشتراک منابع کامپیوتر بین وظایف و همگام سازی عملکرد وظایف مشترک است.
از تکنیک های رایانش همزمان برای جلوگیری از مشکلات احتمالی ناشی از تلاش های متعدد برای دستیابی به همان منبع استفاده می شود.
در سیستم های بزرگتر گاهی با پردازنده (های) مرکزی و تعدادی از پردازنده های ورودی / خروجی ، نوعی چندپردازشی نامتقارن ساخته می شوند.
با گذشت سالها ، سیستمهای چند وظیفه ای بهتر شده اند. سیستم عامل های مدرن به طور کلی شامل مکانیزم های جزئی برای اولویت بندی فرایندها هستند ، در حالی که چندپردازی متقارن پیچیدگی ها و قابلیت های جدیدی را به همراه آورده است.