مقدمه:

سيستم عامل يكي از نرم‌افزارهاي سيستم است كه به عنوان واسطي بين سخت‌افزار و برنامه‌هاي كاربردي و كاربران عمل مي‌نمايد.
ويژگي‌ها و وظايف سيستم عامل عبارتند از:
الف. كنترل و ايجاد هماهنگي بين برنامه‌هاي كاربردي مختلف در استفاده از سخت‌افزار.
ب. كنترل عملكرد دستگاه‌هاي مختلف ورودي و خروجي.
ج. تخصيص منابع به برنامه‌هاي مختلف.

سيستم عامل برنامه‌اي است كه هسته‌ي آن همواره بر روي كامپيوتر، در حالت اجرا قرار دارد. دو هدف اصلي سيستم عامل، ايجاد سادگي براي كاربرد و استفاده‌ي كارا و موثر از كامپيوتر است.

فصل اول
مفاهيم اوليه
۱ .۱- سيستم عامل چيست؟

۲ .۱- ظهور تدريجي و سير تكاملي سيستم‌هاي عامل
۳ .۱- تكامل سيستم‌ عامل‌هاي جديد

۱ .۱- سيستم عامل چيست؟
سيستم عامل بخش مهمي از هر سيستم كامپيوتر است. هر سيستم كامپيوتري را مي‌توان به چهار قسمت تقسيم كرد:
سخت‌افزار، سيستم عامل، برنامه‌هاي كاربردي و كاربران
سخت‌افزار شامل CPU (يا بطور خلاصه پردازنده)، حافظه و دستگاه‌هاي ورودي و خروجي است و منابع اصلي كامپيوتر را فراهم مي‌كند. برنامه‌هاي كاربردي مثل كامپايلرها، سيستم‌هاي بانك اطلاعاتي، بازي‌ها و برنامه‌هاي تجاري، چگونگي بهره‌برداري از اين منابع جهت حل مسائل محاسباتي كاربران را مشخص مي‌كند. كاربران مختلفي وجود دارند كه مي‌خواهند مسائل متفاوتي را حل كنند.
بنابراين ممكن است برنامه‌هاي كاربردي گوناگوني وجود داشته باشند. سيستم عامل، بكارگيري سخت‌افزار را بين برنامه‌هاي مختلف كاربران، كنترل و تنظيم مي‌كند.
سيستم عامل مانند يك دولت است. اجزاي سيستم كامپيوتري عبارتند از: سخت‌افزار، نرم‌افزار و داده‌ها. سيستم عامل ابزارهايي را براستفاده‌ي بهينه از منابع فراهم مي‌كند. سيستم عامل مانند دولت، خودش كار خاصي انجام نمي‌دهد، بلكه فقط محيطي را فراهم مي‌آورد كه برنامه‌هاي ديگر به خوبي اجرا شوند.

۱ .۱ .۱- ديدگاه برتر
ديدگاه برتر نسبت به كامپيوتر، بر حسب واسطي كه مورد استفاده قرار مي‌گيرد، فرق مي‌‌كند، اغلب كاربران كامپيوتر از PC استفاده مي‌كنند كه شامل مانيتور، صفحه كليد، ماوس و واحد سيستم است. چنين سيستمي براي يك كاربر تهيه شده است تا از منابع آن براي انجام كارهاي بيشتر استفاده كند. در اين مورد، سيستم عامل براي سهولت استفاده طراحي شد، ولي نگاهي به كارايي داشت، اما به بهره‌وري منابع پرداخته نشد. كارايي براي كاربر مهم است، ولي بخش زيادي از سيستم بيكار مي‌ماند و منتظر سرعت I/O كاربر است.

بعضي از كاربران از پايانه‌هايي استفاده مي‌كنند كه به كامپيوتر بزرگ يا ميني كامپيوتر وصل هستند. كاربران ديگر نيز از طريق پايانه‌هاي ديگر به اين كامپيوتر دسترسي دارند. اين كاربران از منابع به طور مشترك استفاده مي‌كنند و اطلاعات را مبادله مي‌نمايند. سيستم عامل طراحي شد تا بهره‌وري منابع را افزايش دهد. بدين ترتيب، كل زمان پردازنده‌، حافظه و I/O به طور كارآمد مورد استفاده قرار مي‌گيرند.

كاربران ديگر از ايستگاه‌هاي كاري استفاده مي‌كنند كه به شبكه‌هاي ساير ايستگاه‌هاي كاري و كارگزاران وصل هستند. اين كاربران مي‌توانند منابعي را در اختيار بگيرند، ولي از منابعي مثل فايل‌ها و چاپگرها به طور اشتراكي استفاده مي‌كنند. لذا سيستم عامل آنها طراحي شد تا بين بهره‌وري از منابع و استفاده شخصي توازن برقرار كند.

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

 

۲ .۱ .۱- ديدگاه سيستم
از نقطه‌نظر كامپيوتر، سيستم عامل برنامه‌اي است كه به شدت با سخت‌افزار عجين شده است. سيستم عامل را مي‌توان تخصيص دهنده‌ي منابع درنظر گرفت. سيستم كامپيوتر داراي منابع سخت‌افزاري و نرم‌افزاري متعددي است كه براي حل مساله مفيد است. اين منابع عبارتند از: زمان CPU، فضاي حافظه، فضاي ذخيره‌سازي فايل، دستگاه‌هاي I/O و … . سيستم عامل مدير اين منابع است و آنها را در اختيار برنامه‌هاي كاربردي و كاربران قرار مي‌دهد تا نيازهاي خودشان را برطرف كنند. چون ممكن است درخواست‌هاي متعددي براي منابع وجود داشته باشد كه حتي متناقض هم باشند، سيستم عامل بايد منابع را طوري در اختيار كاربر يا برنامه كاربردي قرار دهد تا عملكرد سيستم كامپيوتري بهينه باشد.

سيستم عامل را از ديدگاه نياز به كنترل دستگاه‌هاي I/O و برنامه‌هاي كاربردي نيز مي‌توان مورد مطالعه قرار داد. در اين ديدگاه، سيستم عامل يك برنامه است. برنامه‌هاي كنترل، برنامه‌هاي كاربران را كنترل مي‌كند تا از كامپيوتر به درستي استفاده كنند. در اين ديدگاه، بيشتر به كنترل دستگاه‌هاي I/O پرداخته مي‌شود.
به طور كلي، تعريف دقيقي از سيستم عامل وجود ندارد. علت وجود آن‌ها، بهره‌برداري بهينه از سيستم كامپيوتري است. هدف اصلي سيستم‌هاي كامپيوتري، اجراي برنامه‌هاي كاربران و حل آسانتر مساله‌هاي كاربران است. سخت‌افزار ساخته شده تا اين هدف برآورده شود.

چون استفاده از سخت‌افزار محض آسان نيست، برنامه‌هاي كاربردي بوجود آمدند. بسياري از عمليات اين برنامه‌هاي كاربردي، مشترك است، مثل عملياتي كه دستگاه‌هاي I/O را كنترل مي‌كنند. عمليات مشترك كنترل و تخصيص منابع، به صورت نرم‌افزار جداگانه‌اي به نام سيستم عامل نوشته شدند.

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

متداول‌ترين تعريف از سيستم عامل اين است كه، سيستم عامل برنامه‌اي است كه همواره در سيستم كامپيوتري در حال اجراست (و هسته ناميده مي‌شود) و ساير برنامه‌ها به نام برنامه‌هاي كاربردي خوانده مي‌شوند.

۳ .۱ .۱- اهداف سيستم
بهتر است سيستم عامل را با توجه به كاري كه انجام مي‌دهد، تعريف كنيم. اولين هدف سيستم عامل اين است كه محيط آساني را براي كار فراهم كند. علت استفاده از سيستم عامل اين است كه بكارگيري كامپيوتر را آسان مي‌كند. اين ديدگاه براي كامپيوترهاي كوچك واضح‌تر است.

هدف دوم سيستم عامل، بهره‌برداري بهينه از سخت‌افزار است. اين هدف، براي سيستم‌هاي كامپيوتري بزرگ چندكاربره مورد نظر است. چون اين سيستم‌ها گران هستند، مطلوب است كه به طور بهينه و كارآمد مورد بهره‌برداري قرار گيرند. اين دو هدف، يعني فراهم كردن محيط آسان و استفاده كارآمد، گاهي با هم در تضادند. در گذشته ملاحظات كارايي مهمتر از سهولت بوده است. بدين ترتيب، اغلب نظريه‌هاي سيستم عامل، به بهره‌برداري بهينه از منابع كامپيوتر مربوط

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

سيستم‌هاي عامل و معماري كامپيوتر به شدت بر يكديگر موثر بودند. پژوهشگران براي سهولت استفاده از سخت‌افزار، سيستم عامل را بوجود آورده‌اند. كاربران سيستم‌هاي عامل تغييراتي را در طراحي سخت‌افزار پيشنهاد كردند.

۲ .۱- ظهور تدريجي و سير تكاملي سيستم‌هاي عامل
يك سيستم عامل بار كاريش را يا به صورت پياپي و يا بطور همزمان پردازش مي‌نمايد، يعني منابع سيستم كامپوتر ممكن است به يك برنامه منفرد تا خاتمه اجراي آن اختصاص داده شود و يا اينكه به گونه‌اي پويا مابين مجموعه‌اي از برنامه‌هاي فعال در مراحل مختلف اجرا تخصيص مجدد يابد.
سيستم‌هاي عاملي كه از توانايي اجراي همزمان برنامه‌ها برخوردارند، به عنوان سيستم‌هايي با عملكرد چندبرنامه‌اي مورد اشاره قرار مي‌گيرد. چند نوع از سيستم‌هاي عامل پياپي و چندبرنامه‌اي وجود دارند. در راستاي ظهور تدريجي و سير تاريخي تكامل سيستم‌هاي عامل راه دراز و پرفراز و نشيبي طي شده است تا امروزه كاربران از سيستم عامل استفاده بهينه نمايند.

۱ .۲ .۱- پردازش سريالي يا پياپي
بطور نظري هر سيستم كامپيوتري بدون پشتيباني نرم‌افزار سيستمي ممكن است به زبان ماشين برنامه‌سازي شود. برنامه‌سازي «ماشين ساده» جهت سيستم‌هاي كامپيوتري اوليه متداول بود. برنامه‌ها جهت ماشين ساده مي‌توانست از طريق ترجمه دستي رشته‌هايي از دستورالعمل‌ها به باينري يا هر كد ديگري كه مبناي آن ۲ بود، ايجاد گردند. آنگاه دستورالعمل‌ها و داده‌ها با استفاده از كليدهاي ميز فرمان يا شايد هم از طريق يك صفحه كليد هگزا دسيمالي وارد كامپيوتر مي‌شدند.

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

 

گام تكاملي قابل توجه بعدي در استفاده از سيستم كامپيوتر با پيدايش دستگاه‌هاي ورودي و خروجي نظير كارت خوان‌هاي كارت‌هاي منگنه‌ شده و نوارخوان‌هاي نوار كاغذي و مترجم‌هاي زبان برداشته شد. در اين راستا برنامه‌ها كه به يك زبان برنامه‌سازي نوشته مي‌شدند، با بهره‌گيري از يك برنامه كامپيوتري نظير كامپايلر يا مفسر به شكل قابل اجرايي درمي‌آمدند. برنامه ديگري به نام باركننده بطور خودكار برنامه‌هاي قابل اجرا را بر حافظه ماشين بار مي‌كرد.

كاربر، برنامه و داده‌هاي وروديش را بر روي دستگاه ورودي قرار مي‌داد و باركننده آن‌ها را از آن دستگاه ورودي به حافظه منتقل مي‌ساخت. بعد از انتقال كنترل به صورت دستي يا خودكار به برنامه بر شده اجراي برنامه آغاز مي‌گرديد. برنامه در حال اجرا، وروديش را از دستگاه ورودي تعيين شده مي‌خواند و خروحي خود را بر روي يك ديسك خروجي نظير چاپگر يا صفحه نمايش ظاهر مي‌ساخت. هنگامي كه برنامه در حافظه بود، ممكن است با مجموعه‌هاي مختلفي از داده‌ها از نو اجرا شود.
روند ساخت و آماده‌سازي برنامه‌ها در چنان محيط‌هايي به علت اجراي سريالي يا پياپي برنامه‌ها و عمليات دستي گوناگون دربرگيرنده در پردازش خيلي كند و دشوار بود. در يك سلسله عمليات متداول برنامه ويرايشگر بار مي‌شد تا برنامه يا كد مبدا برنامه كاربر را آماده سازد. گام بعدي، باركردن و اجراي مترجم زبان و مهيا ساختن كه مبدا برنامه كاربر جهت آن بود. هنگامي كه دستگاه‌هاي ورودي سريالي نظير كارت‌خوانها بكار برده مي‌شدند، مترجم‌هاي زبان چندكاره نياز به آن داشتند كه برنامه مبدا جهت خوانده شدن در طول هر گذر جابجا گردد. اگر خطاهاي دستوري كشف مي‌شدند، كل پردازش بايد از نو تكرار مي‌شد. سرانجام برنامه يا كد مقصد حاصله از برنامه مبداء كه از نظر دستوري از صحت برخوردار بود، باز مي‌شد و اجرا مي‌گرديد. اگر خطاهاي زمان اجرا كشف مي‌شدند، وضعيت ماشين مي‌توانست مورد بررسي قرار گيرد و توسط كليدهاي ميز فرمان يا با كمك برنامه‌اي به نام اشكال‌زدا اصلاح مي‌شد.

نرم‌افزارهاي سيستم، علاوه بر مترجم‌هاي زبان، شامل باركننده‌ها و احتمالاً برنامه‌هاي ويرايشگر و اشكال‌زدا بود. بشتر آنها از دستگاه‌هاي ورودي / خروجي استفاده مي‌كردند و بدين‌لحاظ مي‌بايست برنامه‌اي داشته باشد كه آن دستگاه‌ها را بكار بياندازد، چون بسياري از برنامه‌هاي كاربران نيز از دستگاه‌هاي ورودي / خروجي جهت استفاده از تمام برنامه‌ها تامين گردد. اين واقعيت منجر به سلسله‌اي از پياده‌سازي‌هايي گرديد كه از قراردادن دسته‌هاي كارت حاوي روال‌هاي ورودي / خروجي در برنامه كاربر شروع گرديد تا سرانجام مجموعه‌اي از روال‌هاي از قبل كامپايل شده و استفاده از پبوندزن و برنامه‌هاي كتابخانه‌اي جهت تركيب آنها با برنامه مقصد هر كاربر ارتقاء وضعيت يافت.

در سيستم عامل شرح داده شده، روال‌هاي ورودي / خروجي و برنامه باركننده يك شكل ابتدايي يك سيستم عامل را نشان مي‌دهد. هرچند كاملاً خام بود، باز هم يك محيطي را جهت اجراي برنامه‌ها فراتر از آنچه در ماشين ساده وجود داشت، را فراهم مي‌ساخت. مترجم‌هاي زبان، ويرايشگرها و اشكال‌زداها، برنامه‌هاي سيستمي بودند كه متكي به خدمات ارائه شده از جانب سيستم عامل بودند، ولي بطور كلي به عنوان بخشي از آن درنظر گرفته نمي‌شدند. به عنوان مثال، يك مترجم معمولاً از روال‌هاي ورودي / خروجي فراهم شده جهت بدست آوردن ورودي (برنامه مبدا) و توليد خروجي استفاده مي‌نمود.
اين شيوه عمليات، هرچند پيشرفت قطعي نسبت به رويكرد ماشين ساده بود، روشن بود كه خيلي كارا نبود. اجراي سيستم كامپيوتر نياز به بارگذاري دستي برنامه‌ها و داده‌ها داشت. چنين روشي جهت استفاده از منابع نتيجه كمي داشت. ميزان مولد بودن كاربر، بويژه در محيط‌هاي چندكاربره كم بود، زيرا كاربران مي‌بايست در انتظار نوبتشان جهت استفاده از ماشين مي‌ماندند. حتي با چنان ابزارهايي نظير ويرايشگرها و اشكال‌زداها ساخت برنامه‌ها خيلي به كندي پيش مي‌رفت و با برنامه‌ دستي و بارگذراي داده‌ها همراه بود.
۲ .۲ .۱- پردازش دسته‌اي
گام بعدي، در تكامل سيستم‌هاي عامل خودكار نمودن ترتيب عمليات لازم جهت اجراي برنامه‌ و جهت جنبه‌هاي مكانيكي ساخت برنامه بود. هدف، افزايش ميزان استفاده از منبع سيستم و مولدبودن برنامه‌نويس از طريق كاهش يا حذف زمان‌هاي بي‌كاري ناشي از عمليات دستي نسبتاً طولاني بود.
حتي زماني كه كاربر به صورت خودكار درآمد، عملياتي نظير سواركردن نوارها و تكميل نمودن فرم‌ها نسبت به سرعت‌هاي پردازنده و حافظه، زمان زيادي طول مي‌كشيد. چون چندان كاري جهت كاهش اين عمليات نمي‌توانستند انجام دهند، عملكرد سيستم از طريق تقسيم سرباز بين تعدادي برنامه‌ها ممكن بود افزايش يابد، بويژه اگر چند برنامه به صورت دسته‌اي بر روي يك نوار ورودي منفرد جاي مي‌گرفتند تا عمليات ياد شده يكبار براي آن انجام مي‌گرفتند، سربار برنامه به همين ترتيب كاهش مي‌يافت.
يك مفهوم مرتبط كه غالباً مرحله‌بندي نام داشت، اين بود كه كارهاي ارائه شده از نو ترتيب مي‌يافتند. به نحوي كه كارهاي مشابه در يك دسته قرار مي‌گرفتند. مثلاً با دسته‌بندي چند كار كامپايل فرترن توام با هم، كامپايلر فرترن مي‌توانست تنها يكبار شود تا تمام آنها را در يك رديف پردازش نمايد.

براي پي بردن به استفاده بالقوه از منابع پردازش دسته‌اي يك دسته كار نصب شده مي‌بايست بدون دخالت كند انسان بطور خودكار اجرا مي‌گرديد. دستورالعمل‌هايي بايد فراهم مي‌شد كه به سيستم عامل بگويد چگونه با هر كار منفرد برخورد نمايد. اين دستورالعمل‌ها معمولاً با استفاده از فرامين سيستم عامل كه در بطن حوي واره دسته‌اي نهفته مي‌شد، تامين مي‌گرديد. فرامين سيستم عامل، دستور‌هايي بودند كه به زبان كنترل كار يا JCL نوشته مي‌شدند.
فرامين JCL معمولاً حاوي علائم آغاز و پايان كار، فراميني جهت بارگذاري و اجراي برنامه‌ها و فراميني جهت اعلام نيازمندي‌هاي منابع، نظير زمان اجراي مورد انتظار و نيازهاي حافظه بود. اين فرامين توام با برنامه‌ها و داده‌هاي كاربر در بطن جوي واره كار جاي مي‌گرفت.

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