آشنایی با سیستم عامل
ساده ترين واحد نرم افزاري كه سيستم عامل به منظور زمانبندي پردازنده با آن درگير خواهد شد ، يك پردازه يا يك Thread خواهد بود. موقتا" مي توان يك پردازه را مشابه يك برنامه در نظر گرفت ، در چنين حالتي مفهوم فوق ( پردازه ) ، بيانگر يك تصوير واقعي از نحوه پردازش هاي مرتبط با سيستم عامل و سخت افزار نخواهد بود. برنامه هاي كامپيوتري ( نظير واژه پردازها ، بازيهاي كامپيوتري و ...) در حقيقت خود يك پردازه مي باشند ، ولي برنامه هاي فوق ممكن است از خدمات چندين پردازه ديگر استفاده نمايند. مثلا" ممكن است يك برنامه از پردازه اي بمنظور برقراري ارتباط با ساير دستگاههاي موجود در كامپيوتر استفاده نمايد. پردازه هاي فراوان ديگري نيز وجود دارد كه با توجه به ماهيت عمليات مربوطه ، بدون نياز به محرك خارجي ( نظير يك برنامه ) فعاليت هاي خود را انجام مي دهند. يك پردازه ، نرم افزاري است كه عمليات خاص و كنترل شده اي را انجام مي دهد. كنترل يك پردازه ممكن است توسط كاربر ، ساير برنامه هاي كاربردي و يا سيستم عامل صورت پذيرد.
سيستم عامل با كنترل و زمانبندي مناسب پردازه ها زمينه استفاده از پردازنده را براي آنان ، فراهم مي نمايد. در سيستم هاي " تك - كاره " ، سيستم زمانبندي بسيار روشن و مشخص است . در چنين مواردي، سيستم عامل امكان اجراي برنامه را فراهم و صرفا" در زمانيكه كاربر اطلاعاتي را وارد يا سيستم با وقفه اي برخورد نمايد ، روند اجراء متوقف خواهد شد. وقفه ، سيگنال هاي خاص ارسالي توسط نرم افزار و يا سخت افزار براي پردازنده مي باشند. در چنين مواردي منابع صادر كننده وقفه درخواست برقراري يك ارتباط زنده با پردازنده براي اخذ سرويس يا ساير مسائل بوجود آمده ، را مي نمايند. در برخي حالات سيستم عامل پردازه ها را با يك اولويت خاص زمانبندي مي نمايد . در چنين حالتي هر يك از پردازه ها با توجه به اولويت نسبت داده شده به آنان ، قادر به استفاده از زمان پردازنده خواهند بود. در اين چنين موارد ، در صورت بروز وقفه ، پردازنده آنها را ناديده گرفته و تا زمان عدم تكميل عمليات مورد نظر توسط پردازنده ، فرصت پرداختن به وقفه ها وجود نخواهد داشت . بديهي است با توجه به نحوه برخورد پردازنده ( عدم توجه به وقفه ها ) ، در سريعترين زمان ممكن عمليات و فعاليت جاري پردازنده به اتمام خواهد رسيد. برخي از وقفه ها با توجه به اهميت خود ( نظير بروز اشكال در حافظه و يا ساير موارد مشابه ) ، قابل اغماص توسط پردازنده نبوده و مي بايست صرفنظر از نوع و اهميت فعاليت جاري ، سريعا" به وقفه ارسالي پاسخ مناسب را ارائه گردد.
پردازنده ، با توجه به سياست هاي اعمال شده سيستم عامل و بر اساس يك الگوريتم خاص ، در اختيار پردازه هاي متفاوت قرار خواهد گرفت . در چنين مواردي پردازنده مشغول بوده و براي اجراء ، پردازه اي را در اختيار دارد. در زمانيكه پردازنده درگير يك پردازه است ، ممكن است وقفه هائي از منابع متفاوت نرم افزاري يا سخت افزاري محقق گردد. در چنين وضعيتي با توجه به اهميت و جايگاه يك وقفه ، پردازنده برخي از آنها را ناديده گرفته و همچنان به فعاليت جاري خود ادامه داده و در برخي موارد با توجه به اهميت وقفه ، فعاليت جاري متوقف و سرويس دهي به وقفه آغاز خواهد شد.
در سيستم هاي عامل " تك - كاره " ، وجود وقفه ها و نحوه مديريت آنها در روند اجراي پردازه ها تاثير و پيچيدگي هاي خاص خود را از بعد مديريتي بدنبال خواهد داشت . در سيستم هاي عامل "چند - كاره " عمليات بمراتب پيچيده تر خواهد بود. در چنين مواردي مي بايست اين اعتقاد بوجود آيد كه چندين فعاليت بطور همزمان در حال انجام است . عملا" پردازنده در هر لحظه قادر به انجام يك فعاليت است و بديهي است رسيدن به مرز اعتقادي فوق ( چندين فعاليت بطور همزمان ) مستلزم يك مديريت قوي و طي مراحل پيچيده اي خواهد بود. در چنين حالتي لازم است كه پردازنده در مدت زمان يك ثانيه هزاران مرتبه از يك پردازه به پردازه ه ديگر سوئيچ تا امكان استفاده چندين پردازه از پردازنده را فراهم نمايد . در ادامه نحوه انجام عمليات فوق ، تشريح مي گردد :
· يك پردازه بخشي از حافظه RAM را اشغال خواهد كرد
· پس از استفرار بيش از يك پردازه در حافظه ، پردازنده بر اساس يك زمانبندي خاص ، فرصت اجراء را به يكي از پردازه ها خواهد داد.
· پردازنده ، بر اساس تعداد سيكل هاي خاصي پردازه را اجراء خواهد كرد .
· پس ازاتمام تعداد سيكل هاي مربوطه ، پردازنده وضعيت پردازه ( مقاير رجیسترها و ...) را ذخيره و به پردازه اتمام زمان مربوطه را اعلام مي نمايد.
· پردازنده در ادامه اطلاعات ذخيره شده در رابطه با پردازه ديگر را فعال ( رجیسترها و ...) و زمينه اجراي پردازه دوم فراهم مي گردد.
· پس ازاتمام تعداد سيكل هاي مربوطه ، پردازنده وضعيت پردازه ( مقاير رجیسترها و ...) را ذخيره و به پردازه اتمام زمان مربوطه را اعلام و مجددا" پردازه اول جهت اجراء فعال خواهد گرديد.
تمام اطلاعات مورد نياز بمنظور مديريت يك پردازه در ساختمان داده اي خاص با نام PCB)Process Control Block) ، نگهداري مي گردد. پردازنده در زمان سوئيچ بين پردازه ها ، از آخرين وضعيت هر پردازه با استفاده از اطلاعات ذخيره شده در PCB آگاهي پيدا كرده و در ادامه زمينه اجراي پردازه مورد نظر بر اساس تعداد سيكل هاي در نظر گرفته شده فراهم خواهد شد. براي هر پردازه يك PCB ايجاد و اطلاعات زير در آن ذخيره خواهد گرديد :
· يك مشخصه عددي (ID) كه نمايانگر پردازه خواهد بود .
· اشاره گري كه نشان دهنده آخرين محل اجراي پردازه است
· محتويات رجيستر ها
· وضعيت سوئيچ ها و متغيرهاي مربوطه
· اشاره گره هائي كه حد بالا و پايين حافظه مورد نياز پردازه را مشخص خواهد كرد.
· اولويت پردازه
· وضعيت دستگاههاي ورودي و خروجي مورد نياز پردازه
هر زمان كه اطلاعات مربوط به پردازه اي تغيير يابد ، ( پردازه از حالت "آماده " تبديل به حالت "اجراء " و يا از حالت " اجراء " به حالت "انتظار" و يا "آماده " سوئيچ نمايد ) اطلاعات ذخيره شده در PCB استفاده و بهنگام خواهند شد.
عمليات جايگزيني پردازها، بدون نظارت و ارتباط مستقيم كاربر انجام و هر پردازه به ميزان كافي از زمان پردازنده براي اتمام عمليات خود استفاده خواهد كرد. در اين راستا ممكن است ، كاربري قصد اجراي تعداد بسيار زيادي از پردازه ها را بسورت همزمان داشته باشد. در چنين مواردي است ، پردازنده خود نيازمند استفاده از چندين سيكل زماني براي ذخيره و بازيابي اطلاعات مربوط به هر يك از پردازه ها خواهد بود .در صورتيكه سيستم عامل با دقت طراحي نشده باشد يا پردازه هاي زيادي فعاليت خود را آغاز كرده باشند ، مدت زمان زيادي از پردازنده صرف انجام عمليات سوئيچينگ بين پردازها شده و عملا" در روند اجراي پردازها اختلال ايجاد مي گردد. وضعيت بوجود آمده فوق را Thrashing مي گويند. در چنين مواردي كاربر مي بايست نسبت به غيرفعال نمودن برخي از پردازه ها اقدام تا سيستم مجددا" در وضعيت طبيعي قرار گيرد.
يكي از روش هائي كه طراحان سيستم عامل از آن استفاده تا امكان ( شانس) تحقق Thrashing را كاهش دهند ، كاهش نياز به پردازه هاي جديد براي انجام فعاليت هاي متفاوت است . برخي از سيستم هاي عامل ازيك " پردازه -lite " با نام Thread استفاده مي نمايند. Thread از لحاظ كارآئي همانند يك پردازه معمولي رفتار نموده ولي نيازمند عمليات متفاوت ورودي و خروجي يا ايجاد ساختمان داده PCB مشابه يك پردازه عادي نخواهد بود. يك پردازه ممكن است باعث اجراي چندين Threads يا ساير پردازه هاي ديگر گردد. يك Thread نمي تواند باعث اجراي يك پردازه گردد.
تمام موارد اشاره شده در رابطه با زمانبندي با فرض وجود يك پردازنده مطرح گرديده است . در سيستم هائي كه داراي دو يا بيش از دو پردازنده مي باشند ، سيستم عامل حجم عمليات مربوط به هر پردازنده را تنظيم و مناسب ترين روش اجراء براي يك پردازه در نظر گرفته مي شود . سيستم هاي عامل نامتقارن ، از يك پردازنده براي انجام عمليات مربوط به سيستم عامل استفاده و پردازه هاي مربوط به برنامه هاي كاربردي را بين ساير پردازه ها تقسيم مي نمايند. سيستم هاي عامل متقارن ، عمليات مربوط به خود و عمليات مربوط به ساير پردازه ها را بين پردازه هاي موجود تقسيم مي نمايند. در اين راستا سعي مي گردد كه توزيع عمليات براي هر يك از پردازه ها بصورت متعادل انجام گردد.
مديريت حافظه و فضاي ذخيره سازي
سيستم عامل در رابطه با مديريت حافظه دو عمليات اساسي را انجام خواهد داد :
· هر پردازه بمنظور اجراء مي بايست داراي حافظه مورد نياز و اختصاصي خود باشد .
· از انواع متفاوتي حافظه در سيستم استفاده تا هر پردازه قادر به اجراء با بالاترين سطح كارآئي باشد.
سيسم هاي عامل در ابتدا مي بايست محدوده هاي حافظه مورد نياز هر نوع نرم افزار و برنامه هاي خاص را فراهم نمايند. مثلا" فرض كنيد سيستمي داراي يك مگابايت حافظه اصلي باشد . سيستم عامل كامپيوتر فرضي ، نيازمند 300 كيلو بايت حافظه است . سيستم عامل در بخش انتهائي حافظه مستقر و بهمراه خود درايورهاي مورد نياز بمنظور كنترل سخت افزار را نيز مستقر خواهد كرد. درايورهاي مورد نظر به 200 كيلو بايت حافظه نياز خواهند داشت . بنابراين پس از استقرار سيستم عامل بطور كامل در حافظه ، 500 كيلو بايت حافظه باقيمانده و از آن براي پردازش برنامه هاي كاربردي استفاده خواهد شد. زمانيكه برنامه هاي كاربردي در حافظه مستقر مي گردند ، سازماندهي آنها در حافظه بر اساس بلاك هائي خواهد بود كه اندازه آنها توسط سيستم عامل مشخص خواهد شد. در صورتيكه اندازه هر بلاك 2 كيلوبايت باشد ، هر يك از برنامه هاي كاربردي كه در حافظه مستقر مي گردنند ، تعداد زيادي از بلاك هاي فوق را (مضربي از دو خواهد بود) ، بخود اختصاص خواهند داد. برنامه ها در بلاك هائي با طول ثابت مستقر مي گردند. هر بلاك داراي محدوده هاي خاص خود بوده كه توسط كلمات چهار و يا هشت بايت ايجاد خواهند شد. بلاك ها و محدو ده هاي فوق اين اطمينان را بوجود خواهند آورد كه برنامه ها در محدوده هاي متداخل مستقر نخواهند شد. پس از پر شدن فضاي 500 كيلوبايت اختصاصي براي برنامه هاي كاربردي ، وضعيت سيستم به چه صورت تبديل خواهد گرديد؟
در اغلب كامپيوترها ، مي توان ظرفيت حافظه را ارتقاء و افزايش داد. مثلا" مي توان ميزان حافظه RAM موجود را از يك مگابايت به دو مگابايت ارتقاء داد. روش فوق يك راهكار فيزيكي براي افزايش حافظه بوده كه در برخي موارد داراي چالش هاي خاص خود مي باشد. در اين زمينه مي بايست راهكارهاي ديگر نيز مورد بررسي قرار گيرند. اغلب اطلاعات ذخيره شده توسط برنامه ها در حافظه ، در تمام لحظات مورد نياز نخواهد نبود. پردازنده در هر لحظه قادر به دستيابي به يك محل خاص از حافظه است . بنابراين اكثر حجم حافظه در اغلب اوقات غير فابل استفاده است . از طرف ديگر با توجه به اينكه فضاي ذخيره سازي حافظه ها ي جانبي نظير ديسك ها بمراتب ارزانتر نسبت به حافظه اصلي است ، مي توان با استفاده از مكانيزم هائي اطلاعات موجود در حافظه اصلي را خارج و آنها را موقتا" بر روي هارد ديسك ذخيره نمود. بدين ترتيب فضاي حافظه اصلي آزاد و در زمانيكه به اطلاعات ذخيره شده بر روي هارد ديسك نياز باشد ، مجددا" آنها را در حافظه مستقر كرد. روش فوق " مديريت حافظه مجازي " ناميده مي شود.
حافطه هاي ذخيره سازي ديسكي ، يكي از انواع متفاوت حافظه موجود بوده كه مي بايست توسط سيستم عامل مديريت گردد. حافطه هاي با سرعت بالاي Cache ، حافظه اصلي و حافظه هاي جانبي نمونه هاي ديگر از حافظه بوده كه توسط سيستم عامل مديريت گردند.
مديريت دستگاهها
دستيابي سيستم عامل به سخت افزارهاي موجود از طريقه برنامه هاي خاصي با نام "درايور" انجام مي گيرد. درايور مسئوليت ترجمه بين سيگنال هاي الكترونيكي زير سيستم هاي سخت افزاري و زبانهاي برنامه نويسي سطح بالا و سيستم عامل و برنامه هاي كاربردي را برعهده خواهد داشت . مثلا" درايورها اطلاعاتي را كه سيستم عامل بصورت يك فايل تعريف و در نظر مي گيرد را اخذ و آنها را به مجموعه اي از بيت ها براي ذخيره سازي بر روي حافظه هاي حانبي و يا مجموعه اي از پالس ها براي ارسال بر روي چاپگر ، ترجمه خواهد كرد.
با توجه به ماهيت عملكرد عناصر سخت افزاري و وجود تنوع در اين زمينه ، درايورهاي مربوطه نيز داراي روش هاي متعدد بمنظور انجام وظايف خود مي باشند. اكثر درايورها در زمانيكه به خدمات دستگاه مورد نظر نياز باشد ، استفاده شده و داراي پردازش هاي يكساني در زمينه سرويس دهي خواهند بود. سيستم عامل بلاك هاي با اولويت بالا را به درايورها اختصاص داده تا از اين طريق منابع سخت افزاري قادر به آزادسازي سريع بمنظور استفاده در آينده باشند.
يكي از دلايلي كه درايورها از سيستم عامل تفكيك شده اند ، ضرورت افزودن عمليات و خواسته اي حديد براي درايورها است . در چنين حالتي ضرورتي بر اصلاح يا تغيير سيستم عامل نبوده و با اعمال تغييرات لازم در درايورها مي توان همچنان از قابليت هاي آنها در كنار سيستم عامل موجود استفاده كرد.
مديريت عمليات ورودي و خروجي در كامپيوتر مستلزم استفاده و مديريت " صف ها " و " بافرها " است . بافر ، مكان هاي خاصي براي ذخيره سازي اطلاعات بصورت مجموعه اي از بيت ها ي ارسالي توسط دستگاهها ( نظير صفحه كليد و يا يك پورت سريال ) و نگهداري اطلاعات فوق و ارسال آنها براي پردازنده در زمان مورد نظر و خواسته شده است . عمليات فوق در موارديكه چندين پردازنده در وضعيت اجراء بوده و زمان پردازنده را بخود اختصاص داده اند ، بسيار حائز اهميت است . سيستم عامل با استفاده از يك بافر قادر به دريافت اطلاعات ارسالي توسط دستگاه مورد نظر است . ارسال اطلاعات ذخيره شده براي پردازنده پس از غير فعال شدن پردازه مربوطه ، متوقف خواهد شد. در صورتيكه مجددا" پردازه به اطلاعات ورودي نياز داشته باشد ، دستگاه فعال و سيستم عامل دستوراتي را صادر تا بافر اطلاعات مربوطه را ارسال دارد. فرآيند فوق اين امكان را به صفحه كليد يا مودم خواهد داد تا با سرعت مناسب خدمات خود را همچنان ادامه دهند ( ولواينكه پردازنده در آن زمان خاص مشغول باشد).
مديريت تمام منابع موجود در يك سيستم كامپيوتري ، يكي از مهمترين و گسترده ترين وظايف يك سيستم عامل است .
ارتباط سيستم با دنياي خارج
اينترفيس برنامه ها
سيستم عامل در رابطه با اجراي برنامه هاي كامپيوتري خدمات فراواني را ارائه مي نمايد. برنامه نويسان و پياده كنندگان نرم افزار مي توانند از امكانات فراهم شده توسط سيستم هاي عامل استفاده و بدون اينكه نگران و يا درگير جزئيات عمليات در سيستم باشند ، از خدمات مربوطه استفاده نمايند. برنامه نويسان با استفاده از API)Application programinterface) ، قادر به استفاده از خدمات ارائه شده توسط سيستم هاي عامل در رابطه با طراحي و پياده سازي نرم افزار مي باشند. در ادامه بمنظور بررسي جايگاه API به بررسي مثالي پرداخته خواهد شد كه هدف ايجاد يك فايل بر روي هارد ديسك براي ذخيره سازي اطلاعات است .
برنامه نويسي ، برنامه اي را نوشته كه به كمك آن قادر به ذخيره سازي داده هاي ارسالي توسط يك دستگاه كنترل علمي است . سيستم عامل يك تابع API با نام MakeFile را به منظور ايجاد فايل در اختيار برنامه نويس قرار مي دهد. برنامه نويس در زمان نوشتن برنامه از دستوري مشابه زير استفاده مي نمايد :
MakeFile [1,%Name,2]
دستورالعمل فوق به سيستم عامل خواهد گفت كه فايلي را ايجاد كه شيوه دستيابي به داده هاي آن بصورت تصادفي ( عدد يك بعنوان اولين پارامتر ) ، داراي نام مشخص شده توسط كاربر (Name%) و داراي طولي متغير است . ( عدد 2 ، بعنوان سومين پارامتر) سيستم عامل دستور فوق را بصورت زير انجام خواهد داد :
● سيستم عامل درخواستي براي هارد ارسال تا اولين مكان آزاد قابل استفاده مشخص گردد.
● با توجه به اطلاعات ارسالي ، سيستم عامل يك entry در سيستم فايل مربوطه ايجاد و ابتدا و انتهاي فايل ، نام فايل ، نوع فايل ، تاريخ و زمان ايجاد فايل و ساير اطلاعات ضروري را ذخيره خواهد كرد.
● سيستم عامل اطلاعاتي را در ابتداي فايل بمنظور مشخص كردن فايل ، تنظيمات مربوط به شيوه دستيابي به فايل و ساير اطلاعات مورد نياز را خواهد نوشت .
در چنين حالتي برنامه نويس از تابع فوق براي ايجاد و ذخيره سازي فايل استفاده نموده و ضرورتي بر نوشتن كدها ، نوع داده ها و كدهاي پاسخ براي هر نوع هارد ديسك نخواهد بود. سيستم عامل از امكانات درايورها استفاده و درايورها مسئول برقراري ارتباط با منابع سخت افزاري خواهند بود. در چنين حالتي برنامه نويس به سادگي از تابع مورد نظر استفاده و ادامه عمليات توسط سيستم عامل انجام خواهد شد.
امكانات ارائه شده توسط سيستم هاي عامل در قالب مجموعه اي از توابع و امكانات API يكي از موارد بسيار مهم استفاده از سيستم عامل از ديدگاه طراحان و پياده كنندگان نرم افزار است .
اينترفيس كاربر
API يك روش يكسان براي برنامه هاي كامپيوتري بمنظور استفاده از منابع موجود در يك سيستم كامپيوتري را فراهم مي نمايد. بخش رابط كاربر (UI) ، يك ساختار مناسب ارتباطي بين كاربر و كامپيوتر را فراهم مي آورد. اكثر سيستم هاي عامل از رابط هاي گرافيكي در اين زمينه استفاده مي نمايند. بخش رابط كاربر هر سيستم عامل شامل يك يا مجموعه اي از برنامه هاي كامپيوتري است كه بصورت يك لايه در بالاترين سطح يك سيستم عامل و در ارتباط با كاربر مستقر مي گردند. برخي از سيستم هاي عامل از رابط هاي گرافيكي ( نظير ويندوز ) و برخي ديگر از رابط هاي مبتني بر متن ( نظير سيستم عامل DOS ) استفاده مي نمايند. در واقع محيط هايي همچون desktop در ويندوز 98 يا XP كه امكان برقراري ارتباط كاربران را با برنامه هاي مختلف سيستم عامل فراهم مِیكنند اينترفيس كاربري هستند.
|