سيستم هاي چند برنامگي Multiprogramming

در نسل سوم كامپيوترها (۸۰-۱۹۶۵) از مدارات مجتمع (Integrated Circuit=IC) براي ساخت كامپيوترها استفاده شد. به طور كلي برنامه را مي توان به دو دسته تقسيم كرد: يكي برنامه ها با تنگناي محاسباتي (CPU bound يا CPU Limited) مانند محاسبات علمي سنگين كه بيشتر زمان كامپيوتر صرف محاسبات CPU مي شود و ديگري برنامه ها با تنگناي (I/O Limited) I/O مانند برنامه هاي تجاري كه بيشتر زمان كامپيوتر صرف ورود داده ها و خروج اطلاعات مي شود.

يك اشكال مهم سيستم هاي دسته اي اين است كه وقتي كار جاري براي تكميل عمليات I/O مثلاًٌ بر روي نوار گردان منتظر مي شود، در اين حال CPU بيكار مي ماند مجبور است صبر كند تا عمليات I/O به اتمام برسد. در برنامه هاي CPU Limited اين اتلاف وقت اندك است ولي در برنامه هاي I/OLimited ممكن است حدود ۸۰ تا ۹۰ درصد وقت CPU به هدر برود.
براي رفع اين مشكل از تكنيك multiprogramming استفاده مي شود. بدين ترتيب كه حافظه به چند قسمت تقسيم شده و در هر قسمت يك برنامه مجزا قرار داده مي شود. وقتي كه يك كار براي تكميل عمليات I/O منتظر مي ماند، پردازنده به كار ديگري داده مي شود. اگر تعداد كارهاي موجود در حافظه كافي باشد مي توان CPU را تقريباً صد درصد مشغول نگه داشت. البته نگهداري همزمان چند برنامه در حافظه نياز به مديريت خاص حافظه دارد تا برنامه ها بر همديگر اثر سوء نداشته باشند. لذا مديريت حافظه بحث مهمي در سيستم عالم مي باشد.
پس سيستم هاي چند برنامگي فقط يك پردازنده دارند و به كمك مكانيزم وقفه بين كارهاي I/OLimited , CPU-limited سوئيچ مي شود و به ظاهر اجراي اين برنامه ها به صورت موازي و همزمان صورت مي گيرد و بدين ترتيب بهره وري از سيستم افزايش مي يابد.

يك شيوه براي بالا بردن راندمان CPU آن است كه تعداد كار CPU – Limited را با I/OLimited مخلوط كنيم. ولي در عمل امكان تقسيم بندي كارها قبل از اجراء شدنشان وجود ندارد. از طرف ديگر برنامه اي ممكن است در ابتدا CPU – Limited باشد ولي در حين اجراء تبديل به I/OLimited گردد.

سيستم هاي اشتراك زماني Time –Sharing
اين سيستم ها از اويل سالهاي ۱۹۷۰ در نسل سوم كامپيوترها معمول شدند. سيستم اشتراك زماني در واقع تعميم سيستم چند برنامگي است.
در سيستم هاي چند برنامگي كاربر ارتباطي با كامپيوتر نداشت و خطايابي برنامه ها مشكل بود چرا كه زمان برگشت نسبتاً طولاني اجازه آزمايش كردن متعدد را نمي داد. در سيستم اشتراك زماني كاربر به كمك ترمينال (Terminal) كه شامل كي بورد (براي ورودي) و مونيتور (براي خروجي) است با كامپيوتر به صورت محاوره اي (interactive) رابطه برقرار مي سازد. كاربر مستقيماً دستوراتي را وارد كرده و پاسخ سريع آن را روي مونيتور دريافت مي كند. در اين سيستم ها چندين كاربر به كمك ترمينالهائي كه به كامپيوتر وصل است همزمان مي توانند از آن استفاده كنند.

در سيستم اشتراك زماني فقط يك پردازنده وجود دارد كه توسط مكانيزمهاي زمانبندي بين برنامه هاي مختلف كابرها با سرعت زياد (مثلاً در حد ميلي ثانيه) سوئيچ مي شود و بنابراين هر كاربر تصور مي كند كل كامپيوتر در اختيار اوست. در اينجا تاكيد بر روي ميزان عملكرد كاربر است يعني هدف فراهم كردن وسايل مناسب براي توليد ساده نرم افزار و راحتي كاربر مي باشد و نه بالا بردن ميزان كاربرد منابع ماشين. كاربر مي تواند در هر زمان دلخواه برنامه خود را آغاز يا متوقف سازد و يا برنامه را به صورت قدم به قدم اجراء و اشكال زدائي (debug) كند. سيستم هاي دسته اي براي اجراي برنامه هاي بزرگ كه نياز محاوره اي كمي دارند مناسب است ولي سيستم هاي اشتراك زماني براي مواردي كه زمان پاسخ كوتاه لازم است، استفاده مي شوند. در زماني كه كاربري در حال تايپ برنامه اش يا فكر كردن روي خطاهاي برنامه اش مي باشد CPU به برنامه كاربر ديگري اختصاص يافته تا آن را اجراء كند.

در سيستم هاي محاوره اي دستورات به دو صورت پيش زمينه (foreground) و پس زمينه (Backgruond) اجرا مي شوند. در نوع پيش زمينه با وارد كردن، دستور تا هنگامي كه دستور اجرا و تمام نشود اعلان سيستم ظاهر نمي گردد ولي در نوع پس زمينه، پس از ورود دستور، بلافاصله اعلان سيستم ظاهر مي شود تا دستور بعدي وارد گردد ولي در همين حين دستور قبلي در پشت زمينه حال اجرا مي‌باشد.

در اين سيستم اشتراك زماني هنگامي كه چند كاربر همگي يگ برناممه (مثل كامپايلر C) را احضار مي كنند هر يك داراي كپي هايي از ثباتها، فضاي داده اي، فشاي پشته (stack) مخصوص به خود هستند ولي قسمت كد همگي يكسان و مشترك مي باشد. در سيستم اشتراك زماني وجود يك سيستم فايل ضروري است زيرا نمي توان در هر بار اجراي كار مدارك بزرگي را توسط ترمينالها وارد كامپيوتر كرد. لذا داده ها و برنامه هاي كاربر مي بايست در ديسك ذخيره گردند. لذا بخش مديريت فايلها يكي از بخش هاي اصلي سيستم عامل مي باشد. هر چند كه مي توان وظايف مدير فايل (File Manager) و مدير ديسك (Disk Mannager) را در هم آميخت ولي منطقاً اين دو كاملاً متفاومت هستند. مدير ديسك مسئول توزيع فضاي خالي روي ديسك و نقل و انتقالات است، حال آنكه كارهاي مدير فايل بيشتر مربوط به مديريت فهرستها، فايلها، امنيت و كارهاي مربوط به حسابداري (Accouning) است. يكي ديگر از بخشهاي مهم در سيستم اشتراك زماني ترمينال است كه وظيفه تعيين هويت كاربران و پذيرش آنها را بر عهده دارد.