مفاهیم کلی
به طور کلی نرم افزارهای کامپیوتر به دو گروه تقسیم میشوند:
یکی برنامههای سیستمی که عملیات کامپیوتر را مدیریت میکنند و دیگری برنامههای کاربردی .سیستم عامل (operating system=os) اصلی ترین برنامه سیستمی است که به عنوان رابط بین کاربر و سخت افزار کامپیوتر عمل میکند .
سیستم عامل دو وظیفه (یا هدف) اصلی دارد:
سیستم عامل استفاده از کامپیوتر را ساده میسازد. این بدان معناست که مثلاًکاربر یا برنامه نویس بدون درگیر شدن با مسائل سخت افزاری دیسکها به راحتی فایلی را بر روی دیسک ذخیره و حذف کند . این کار در واقع با به کاربردن دستورات سادهای که فراخوان های سیستمی (System Calls) را صدا میزنند انجام پذیرد .
در صورت عدم وجود سیستم عامل کاربرو یا برنامه نویس میبایست آشنایی کاملی با سخت افزارهای مختلف کامپیوتر (مثل مانیتور ,فلاپی , کی بورد و غیره) داشته باشدو روتینهایی برای خواندن و یا نوشتن آنها به زبانهای سطح پائین بنویسد. از این جنبه به سیستم عامل با عنوان ماشین توسعه یافته(Extended machine) یا ماشین مجازی (Virtual machine) یاد میشود که واقعیت سخت افزار را از دید برنامه نویسان مخفی میسازد.
وظیفه دوم سیستم عامل مدیریت منابع(Resource Management) میباشد, یعنی سیستم عامل باعث استفاده بهینه و سودمند (اقتصادی) از منابع سیستم میگردد. منظور از منابع پردازندهها ,حافظهها ,دیسکها,موس ها , چاپگرها , فایلها , پورتها و غیره هستند. یک سیستم کامپیوتری منابع نرم افزاری و سخت افزاری بسیار دارد که ممکن است در حین اجراء برنامه لازم باشند , سیستم عامل همانند مدیر منابع عمل کرده و آنها را بر حسب نیاز به برنامههای مشخصی تخصیص میدهد.
سیستم عامل معمولا اولین برنامههای است که پس از بوت شدن در حافظه بار میشود. پس از بار شدن قسمتی از سیستم عامل بطور دائم در حافظه باقی (Resident)میماند. قسمتهای دیگر با توجه به کاربرد کامپیوتر توسط کاربر از دیسک به حافظه آورده میشود.
به قسمت اصلی سیستم عامل که وظایف مهم آن را انجام میدهد هسته یا Kernel گفته میشود. هسته سیستم عامل برنامهای است که در تمامی اوقات بر روی کامپیوتر در حال اجراست.
سیستم عامل و معماری کامپیوتر اثر زیادی بر روی یکدیگر داشتهاند. یعنی جهت سهولت کار با سخت افزارهای جدید, سیستم عاملها توسعه یافتندو همچنین در اثنای طراحی سیستم عاملها , مشخص شد که تغییراتی در طراحی سخت افزار میتواند سیستم عاملها را ساده تر و کارآمدتر سازد .
هر چند که تطبیق نسلهای کامپیوتر با نسلهای سیستم عامل کار درستی نیست ولی این تطبیق که در ادامه انجام میدهیم علت ایجاد سیستم عاملهای جدید را مشخص میسازد.
انوع سیستم عامل از نظر ساختار
تکنیک سیستم یکپارچه
تکنیک سیستم لایه ای
سیستم مجازی در سیستم عامل
سیستم مشتری –خدمتگزار
زبان های پیاده سازی سیستم عامل
تکنیک سیستم یکپارچه
سیستمهای تجاری زیادی وجود دارند که ساختار خوش تعریقی ندارند. اغلب این سیستم عاملهابه عنوان سیستم های کوچک و محدودی شروع شدهاند وسپس به تدریج ورای دید اولیه طراحان گسترش یافتهاند
سیستم عامل DOS از این دسته میباشد.
سیستم عامل به صورت یک مجموعه از رویهها نوشته شده است که هر یک از آنها میتوانند دیگری را به هنگام نیاز فراخوانی کنند . برای مخفی کردن اطلاعات امکاناتی وجود ندارد و هر رویه برای دیگر رویهها کاملا قابل مشاهده است .
مثلاً در MS-DOS واسطهها و سطوح عملیاتی به خوبی مجزا نشدهاند و مطابق شکل زیر برنامههای کاربردی میتوانند مستقیماً به توابع ROM BIOS ویا حتی پورت دستگاههای مختلف (مثل هارد دیسک) دسترسی پیدا کنند, لذا به راحتی میتوان برنامههای مخرب زیادی تحت DOS پدید آورد.
اکثر CPU ها دارای دو مد کاری هستند مد هسته که مخصوص سیستم عامل است و در آن تمامی دستورالعملها مجاز میباشد و دیگری مد کاربر است که مخصوص برنامههای کاربران بوده ودر آن دستورات I/O و دستورالعملهای معین دیگری مجاز نمیباشند.
سیستم عامل DOS توسط سخت افزار زمان خود «پردازنده 8088) محدود بوده است چرا که این پردازنده فقط در یک مد کار میکند و تمام دستورات در آن مجاز میباشد ولی پردازنده386 دارای مدهای مختلفی است که سیستم عامل ویندوز از آن به خوبی استفاده میکند.
برنامهای کاربردی یکی از فراخوانهای سیستمی (توابع سیستم عامل) را صدا میزند . در این حال ماشین از مد کاربر (user mode)به مد هسته (kernel mode) تغییر حالت میدهد و کنترل به سیستم عامل سپرده میشود .سیستم عامل با توجه به پارامترهای تابع مذکور تعیین میکند کدام فراخوان سیستمی باید اجراء شود سپس سیستم عامل به جدولی رجوع میکند که در ردیف k ام آن جدول یک اشارهگر به رویه اجراء کننده فراخوان سیستمی وجود دارد..سپس آن روتین اجراء شده و در انتها کنترل به برنامه کاربر بر میگردد.
تکنیک سیستم لایه ای
در روش لایهای سیستم عامل به تعدادی سطح یا لایه تقسیم میشود که هر کدام در بالای لایه پائین تر قرار میگیرند. مزیت مهم این روش پیمانهای (modularity) بودن آن است . یعنی لایهها به گونهای تقسیم بندی میشوند که هر لایه فقط توابع و سرویس های لایه پائین تر را استفاده میکند. بدین ترتیب هر لایه را میتوان مستقل از لایههای دیگر طراحی کرد , بسط دادو خطایابی کرد.
هر سطح با استفاده از اعمال لایههای پایین تر پیاده سازی میشود ولی آن سطح نمیداند که اعمال سطح پایین چگونه پیاده شدهاند و فقط باید بداند که آن اعمال چه میکنند. بدین ترتیب هر لایه مسائلی را از لایههای بالاتر مخفی میسازد.
اولین سیستم لایهای , سیستم THE با 6 لایه بود: لایه صفر مسائل زمانبندی(scheduling) پردازنده را انجام میدهد یعنی اینکه در هر لحظه CPU در اختیار کدام برنامه باشد . لایه یک مدیریت حافظه (اصلی و جانبی) را بر عهده دارد . لایه دو ارتباط بین هر پروسس و کنسول اپراتور را برقرار میسازد.
لایه سه مدیریت دستگاههای I/O و بافر کردن اطلاعات را برعهده دارد . در بالای این لایه هر پروسس به جای دستگاههای I/O حقیقی و پیچیده با دستگاههای ساده و مجازی I/O سرو کار دارد . در لایه چهار برنامههای کاربران اجراء میشوند که هیچ نگرانی در مورد مدیریت پروسس ,حافظه, کنسول و I/O ندارند. در لایه پنجم پروسس اپراتور سیستم قرار میگیرد.
مشکل اصلی در روش لایهلایه, تعریف مناسب لایههای مناسب است . از آنجا که یک لایه فقط میتواند لایههای پایین تر را به کار برد برای طراحی آن باید دقت زیادی به خرج داد. مشکل دیگر این ساختار این است که نسبت به انواع دیگربازدهی کمتری دارند .
هنگامی که دستورات از لایه بالا به سمت پایین حرکت میکنند, در هر لایه پارامترهای دستور ممکن است , از نظر صحت بررسی شده و یا تغییر یابند .لذا هر لایه قدری بار سر (overhead)به سیستم اضافه میکند و در نتیجه فراخوانی سیستمی نسبت به سیستم غیر لایهای بیشتر طول میکشد. لذا در سالهای اخیر سعی شده است لایههای کمتری با قابلیت عمل بیشتری طراحی شود .