اگر بخواهیم واضح بگوییم، چندکارگی به دو شکل مختلف وجود دارد که اینروزها، ویندوز تنها از یک روش آن برای نخکشی2 استفاده میکند که در طول مقاله به آن خواهیم پرداخت. همچنین نگاهی به روشهای قدیمی چندوظیفگی خواهیم انداخت و تفاوتها و مزایای روش فعلی را درخواهیم یافت.
در نسخههای پیش از سیستمعامل شدن ویندوز، مثل ویندوز ×/3، و نیز در برخی دیگر از سیستمهای عامل، یک نرمافزار تا زمانی که استفادهاش از پردازشگر را متوقف میکرد، میتوانست پردازشگر را بهخود مشغول نگاه دارد. از آنجا که این نوع چندوظیفگی، به همکاری برنامه برای آزادسازی پردازشگر و اشتراک آن با دیگر برنامهها نیاز داشت، به آن چندوظیفگی همکاری میگویند. عیب این نوع چندوظیفگی، این است که اگر برنامهای، پردازشگر را آزاد نکند، دیگر برنامهها همواره متوقف خواهند ماند. و چیزی که کاربر میبیند، هنگ کردن برنامه اصلی و دیگر برنامههایی که نیازمند اجرا هستند، خواهد بود.
این موضوع مثل صف خودپرداز بانک میماند، فرض کنید خودپرداز تمام تراکنشهای یک مشتری را بدون اعمال محدودیت در تعداد یا میزان زمان سپری شده انجام دهد. در این صورت اگر کسانی در صف ایستاده باشند، حتی اگر کار کوچکی هم داشته باشند، باید صبر کنند تا مثلا فلان بار تراکنش نفر جلویشان تمام شود تا نوبت به آنها برسد.
خوشبختانه، در نسخههای جدیدتر ویندوز (2000 و اکسپی) دیگر از این خبرها نیست و روش چندبرنامگیاستفاده شده، بهطور کامل تغییر کرده است. برنامه تنها برای زمانی کوتاه اجازه اجرا دارد و بعد از آن، با ارسال یک وقفه3 کنترل پردازشگر از آن گرفته میشود و به برنامه دیگری که مجاز به اجراست، داده میشود. این شیوه وقفهاندازی در اجرای یک پروسس را چندوظیفهای غیرانحصاری میگویند.غیرانحصاری را میتوان به این صورت تعریف کرد:
وقفهاندازی در یک برنامه کاربردی برای تحویل پردازشگر به برنامهای دیگر. مهم است بدانیم که یک نرمافزار ممکن است وظیفهاش تمام نشود، اما سیستمعامل باز اجرای برنامه را از آن میگیرد و به برنامه دیگری میدهد.
دیگر مثال خودپرداز بالا در اینجا صدق نمیکند. در دنیای واقعی، این روش شبیه به این میشود که خودپرداز کار یک کاربر را وسط تراکنشاش متوقف کند تا به مشتری دیگر اجازه دهد به کار با خودپرداز مشغول شود. خودپرداز میتواند یکی یکی کار مشتریان را وقفه بیاندازد و بهدیگری اجازه کار بدهد تا اینکه آخر سر، به اولین مشتری اجازه بدهد که کار خود را دنبال کند.
این کار درست شبیه به فعالیت مغز در برقراری ارتباط با دنیای خارج است. هرچند که غیرانحصاری بودن مشکل قفلشدن پروسسها را حل میکند، اما با خودش مشکلاتی بههمراه میآورد. همانطور که میدانید، برخی از نرمافزارها منابع خود را (مثل پایگاه داده) و فایلها به اشتراک میگذارند. چه اتفاقی میافتد اگر دو نرمافزار همزمان به یک منبع در آن واحد دسترسی پیدا کنند؟ یک برنامه داده را تغییر میدهد، وقفهای رخ میدهد، برنامه دیگر دوباره داده را تغییر میدهد و حالا دو برنامه یک داده مشترک را تغییر دادهاند، هر دو گمان میکنند که دسترسیشان به آن داده اختصاصی است.
اگر بخواهیم این موضوع را تفسیر کنیم، باید چنین مثالی بزنیم. در گام اول، برنامه آ یک عدد را از محل ذخیرهسازی داده میگیرد و در حافظه قرار میدهد. این عدد را 10 فرض کنید. برنامه آ سپس بهگونهای غیرانحصاری کنار رفته تا برنامه ب وارد کار شود. گام دوم شروع میشود و برنامه ب همان عدد را از محل ذخیرهسازی میگیرد. در مرحله سوم، برنامه ب یک واحد به عدد اضافه میکند و 11 میشود و سپس در قدم چهارم این متغیر را در حافظه ذخیره میکند. در قدم پنجم، نرمافزار آ هم این مقدار را زیاد میکند. هر دو این نرمافزارها گمان میکنند که باید بهعدد 11 بعد از اجرا برسند، اما نتیجه 12 است! هیچ کدام از این دو برنامه تصوری از اینکه چرا عدد به دوازده تبدیل شده ندارند.
پردازشها
وقتی برنامهای اجرا میشود، حافظه و دیگر منابع لازم برای اجرای آن پروسس، به برنامه تخصیص داده میشوند. پروسس در واقع مجموعهای است از این منابع و حافظه. لازم است بدانید که یک نرمافزار ممکن است بیش از یک پروسسرا همزمان اجرا کند. همچنین این را در ذهن داشته باشید که معنای برنامه و پروسس یک چیز نخواهد بود. حافظه اختصاص یافته به یک پروسس نسبت به حافظه اختصاص یافته به دیگر پروسسها جداست و فقط همان پروسس میتواند به آن دسترسی پیدا کند.
در ویندوز شما میتوانید پروسسهای جاری سیستم را با دسترسی به مدیر وظیفههای ویندوز4 مشاهده کنید. با کلیک راست کردن روی فضای خالی تسکبار خود و انتخاب Task Manager از میان گزینهها، آن را بالا میآورد. مدیر وظیفهها شامل سه برگه است، Applications، Processes و Performance. در برگه Process شما میتوانید اسم تمام پروسسهایی که در سیستمتان در حال اجرا هستند را ببینید. برنامهها و پروسسها در برگههای جداگانهای قرار گرفتهاند که نکتهای که گفتیم را مجددا یادآور شوند، هر برنامه میتواند چندین پروسس داشته باشد.
میتوانید جدای مصرف پردازشگر، عوامل دیگری نیز به لیست اضافه کنید. میزان حافظه مجازی مصرف شده، شماره پروسس، کل حافظه مصرف شده، تعداد فراخوانیهای ورودی™خروجی و ... از مواردی است که روی سیستمتان کنترل زیادی بهشما خواهد داد. در شماره بعدی تلاش خواهیم کرد، چندنخی و همگامسازی پروسسها را توضیح دهیم.
منبع
2003 C Sharp Threading, Wrox Press,
پینوشتها
Multitasking.1
Threading.2
Interrupt.3
Windows Task Manager.4