سیستم عامل

مفاهیم کلی
به طور کلی نرم افزارهای کامپیوتر به دو گروه تقسیم می‌شوند:
یکی برنامه‌های سیستمی که عملیات کامپیوتر را مدیریت می‌کنند و دیگری برنامه‌های کاربردی .سیستم عامل (operating system=os) اصلی ترین برنامه سیستمی است که به عنوان رابط بین کاربر و سخت افزار کامپیوتر عمل می‌کند .
سیستم عامل دو وظیفه (یا هدف) اصلی دارد:
سیستم عامل استفاده از کامپیوتر را ساده می‌سازد. این بدان معناست که مثلاًکاربر یا برنامه نویس بدون درگیر شدن با مسائل سخت افزاری دیسکها به راحتی فایلی را بر روی دیسک ذخیره و حذف کند . این کار در واقع با به کاربردن دستورات ساده‌ای که فراخوان های سیستمی (System Calls) را صدا می‌زنند انجام پذیرد .
در صورت عدم وجود سیستم عامل کاربرو یا برنامه نویس می‌بایست آشنایی کاملی با سخت افزارهای مختلف کامپیوتر (مثل مانیتور ,فلاپی , کی بورد و غیره) داشته باشدو روتین‌هایی برای خواندن و یا نوشتن آنها به زبانهای سطح پائین بنویسد. از این جنبه به سیستم عامل با عنوان ماشین توسعه یافته(Extended machine) یا ماشین مجازی (Virtual machine) یاد می‌شود که واقعیت سخت افزار را از دید برنامه نویسان مخفی می‌سازد.
وظیفه دوم سیستم عامل مدیریت منابع(Resource Management) می‌باشد, یعنی سیستم عامل باعث استفاده بهینه و سودمند (اقتصادی) از منابع سیستم می‌گردد. منظور از منابع پردازنده‌ها ,حافظه‌ها ,دیسکها,موس ها , چاپگرها , فایلها , پورتها و غیره هستند. یک سیستم کامپیوتری منابع نرم افزاری و سخت افزاری بسیار دارد که ممکن است در حین اجراء برنامه لازم باشند , سیستم عامل همانند مدیر منابع عمل کرده و آنها را بر حسب نیاز به برنامه‌های مشخصی تخصیص می‌دهد.
سیستم عامل معمولا اولین برنامه‌های است که پس از بوت شدن در حافظه بار می‌شود. پس از بار شدن قسمتی از سیستم عامل بطور دائم در حافظه باقی (Resident)می‌ماند. قسمتهای دیگر با توجه به کاربرد کامپیوتر توسط کاربر از دیسک به حافظه آورده می‌شود.
به قسمت اصلی سیستم عامل که وظایف مهم آن را انجام می‌دهد هسته یا Kernel گفته می‌شود. هسته سیستم عامل برنامه‌ای است که در تمامی اوقات بر روی کامپیوتر در حال اجراست.
سیستم عامل و معماری کامپیوتر اثر زیادی بر روی یکدیگر داشته‌اند. یعنی جهت سهولت کار با سخت افزارهای جدید, سیستم عامل‌ها توسعه یافتندو همچنین در اثنای طراحی سیستم عامل‌ها , مشخص شد که تغییراتی در طراحی سخت افزار می‌تواند سیستم عاملها را ساده تر و کارآمدتر سازد .
هر چند که تطبیق نسلهای کامپیوتر با نسلهای سیستم عامل کار درستی نیست ولی این تطبیق که در ادامه انجام می‌دهیم علت ایجاد سیستم عاملهای جدید را مشخص می‌سازد.
انوع سیستم عامل از نظر ساختار
o تکنیک سیستم یکپارچه
o تکنیک سیستم لایه ای
o سیستم مجازی در سیستم عامل
o سیستم مشتری –خدمتگزار
o زبان های پیاده سازی سیستم عامل
تکنیک سیستم یکپارچه
سیستمهای تجاری زیادی وجود دارند که ساختار خوش تعریقی ندارند. اغلب این سیستم عاملهابه عنوان سیستم های کوچک و محدودی شروع شده‌اند وسپس به تدریج ورای دید اولیه طراحان گسترش یافته‌اند
سیستم عامل DOS از این دسته می‌باشد.
سیستم عامل به صورت یک مجموعه از رویه‌ها نوشته شده است که هر یک از آنها می‌توانند دیگری را به هنگام نیاز فراخوانی کنند . برای مخفی کردن اطلاعات امکاناتی وجود ندارد و هر رویه برای دیگر رویه‌ها کاملا قابل مشاهده است .

مثلاً در MS-DOS واسطه‌ها و سطوح عملیاتی به خوبی مجزا نشده‌اند و مطابق شکل زیر برنامه‌های کاربردی می‌توانند مستقیماً به توابع ROM BIOS ویا حتی پورت دستگاههای مختلف (مثل هارد دیسک) دسترسی پیدا کنند, لذا به راحتی می‌توان برنامه‌های مخرب زیادی تحت DOS پدید آورد.
اکثر CPU ها دارای دو مد کاری هستند مد هسته که مخصوص سیستم عامل است و در آن تمامی دستورالعملها مجاز می‌باشد و دیگری مد کاربر است که مخصوص برنامه‌های کاربران بوده ودر آن دستورات I/O و دستورالعملهای معین دیگری مجاز نمی‌باشند.
سیستم عامل DOS توسط سخت افزار زمان خود «پردازنده ۸۰۸۸) محدود بوده است چرا که این پردازنده فقط در یک مد کار می‌کند و تمام دستورات در آن مجاز می‌باشد ولی پردازنده‌۳۸۶ دارای مدهای مختلفی است که سیستم عامل ویندوز از آن به خوبی استفاده می‌کند.

برنامه‌ای کاربردی یکی از فراخوانهای سیستمی (توابع سیستم عامل) را صدا می‌زند . در این حال ماشین از مد کاربر (user mode)به مد هسته (kernel mode) تغییر حالت می‌دهد و کنترل به سیستم عامل سپرده می‌شود .سیستم عامل با توجه به پارامترهای تابع مذکور تعیین می‌کند کدام فراخوان سیستمی باید اجراء شود سپس سیستم عامل به جدولی رجوع می‌کند که در ردیف k ام آن جدول یک اشاره‌گر به رویه اجراء کننده فراخوان سیستمی وجود دارد..سپس آن روتین اجراء شده و در انتها کنترل به برنامه کاربر بر می‌گردد.
تکنیک سیستم لایه ای
در روش لایه‌ای سیستم عامل به تعدادی سطح یا لایه تقسیم می‌شود که هر کدام در بالای لایه پائین تر قرار می‌گیرند. مزیت مهم این روش پیمانه‌ای (modularity) بودن آن است . یعنی لایه‌ها به گونه‌ای تقسیم بندی می‌شوند که هر لایه فقط توابع و سرویس های لایه پائین تر را استفاده می‌کند. بدین ترتیب هر لایه را می‌توان مستقل از لایه‌های دیگر طراحی کرد , بسط دادو خطایابی کرد.
هر سطح با استفاده از اعمال لایه‌های پایین تر پیاده سازی می‌شود ولی آن سطح نمی‌داند که اعمال سطح پایین چگونه پیاده شده‌اند و فقط باید بداند که آن اعمال چه می‌کنند. بدین ترتیب هر لایه مسائلی را از لایه‌های بالاتر مخفی می‌سازد.
اولین سیستم لایه‌ای , سیستم THE با ۶ لایه بود: لایه صفر مسائل زمانبندی(scheduling) پردازنده را انجام می‌دهد یعنی اینکه در هر لحظه CPU در اختیار کدام برنامه باشد . لایه یک مدیریت حافظه (اصلی و جانبی) را بر عهده دارد . لایه دو ارتباط بین هر پروسس و کنسول اپراتور را برقرار می‌سازد.

لایه سه مدیریت دستگاههای I/O و بافر کردن اطلاعات را برعهده دارد . در بالای این لایه هر پروسس به جای دستگاههای I/O حقیقی و پیچیده با دستگاههای ساده و مجازی I/O سرو کار دارد . در لایه چهار برنامه‌های کاربران اجراء می‌شوند که هیچ نگرانی در مورد مدیریت پروسس ,حافظه, کنسول و I/O ندارند. در لایه پنجم پروسس اپراتور سیستم قرار می‌گیرد.
مشکل اصلی در روش لایه‌لایه, تعریف مناسب لایه‌های مناسب است . از آنجا که یک لایه فقط می‌تواند لایه‌های پایین تر را به کار برد برای طراحی آن باید دقت زیادی به خرج داد. مشکل دیگر این ساختار این است که نسبت به انواع دیگربازدهی کمتری دارند .
هنگامی که دستورات از لایه بالا به سمت پایین حرکت می‌کنند, در هر لایه پارامترهای دستور ممکن است , از نظر صحت بررسی شده و یا تغییر یابند .لذا هر لایه قدری بار سر (overhead)به سیستم اضافه می‌کند و در نتیجه فراخوانی سیستمی نسبت به سیستم غیر لایه‌ای بیشتر طول می‌کشد. لذا در سالهای اخیر سعی شده است لایه‌های کمتری با قابلیت عمل بیشتری طراحی شود .
به عنوان مثال محصول اولیه windows NT با لایه‌های زیاد, کارایی کمتری نسبت به ویندوز ۹۵ داشت . در NT4.0 سعی شد لایه ها به همدیگر نزدیکتر و مجتمع تر شوند تا کارایی بیشتر گردد.
سیستم MULTICS به جای لایه‌ها به صورت یکسری حلقه‌ها متحدالمرکز سازماندهی شده است بطوریکه هر حلقه داخلی از امتیازات بالاتری نسبت به حلقه خارجی خود بهره مند می‌باشد.اگر یک رویه از حلقه خارجی بخواهد یک رویه از حلقه داخلی را صدا بزند .

بایدیکی را فراخوان‌های سیستمی را اجراء کندو اعتبار پارامترهای این دستورالعمل قبل از اجراء به دقت بررسی می‌شود. مثلاً یک استاد برنامه گرفتن امتحان ونمره دادن را در حلقه n می‌نویسد و برنامه دانشجویانش در حلقه n+1 اجراء می‌شود, بدین ترتیب دانشجویان نمی‌توانند نمره خود را تغییر دهند
سیستم مجازی در سیستم عامل

سیستم عامل VM بر روی سیستمهای IBM بهترین مثال از مفهوم ماشین مجازی است . قلب سیستم که به مانیتور ماشین مجازی(Virual Machine Monitor) معروف است ، بر روی سخت افزار عریانی اجراء شده و چند برنامگی را پدید می‌آورد، این مانیتور مجازی را در لایه بالاتر فراهم می‌سازد.
این ماشین های مجازی برای کاربران مشابه یک نسخه از سخت افزار عریان هستند که دارای مودهای کابر و هسته ، I/O ، وقفه‌ها و چیزهای دیگر «ماشین حقیقی» می‌باشند.

به هر کاربر ماشین مجازی خودش داده می‌شود و او می‌تواند هر یک از سیستم عامل‌ها یا بسته‌های نرم افزاری موجود را روی ماشین خودش اجراء کند.
هر کاربر یک برنامه(Conversational Monitor System) مخصوص به خود را دارد که یک سیستم عامل تک کاربره محاوره‌ای است .
مزایای این ماشین مجازی عبارتند از:

• در این سیستم دو وظیفه اصلی چند برنامگی و ایجاد واسطه راحت(مستقل از سخت افزار ) از یکدیگر مجزا شده‌اند . مانیتور ماشین مجازی وظیفه چند برنامگی را بر عهده داردو لایه‌ بالای آن وظیفه ایجاد واسطه کاربر با سخت افزار را بر عهده دارد. لذا هریک از این بخشها ساده‌تر شده و از قابلیت انعطاف بیشتری برخوردارند.
• هر ماشین مجازی از سایر ماشین ها کاملاً جداست . بنابراین هیچ مشکل امنیتی وجود نخواهد داشت و برنامه‌های کاربران تداخلی با همدیگر ندارند.

• از آنجا که هر ماشین مجازی کاملاً مشابه سخت افزار واقعی است ، هر یک از آنها می‌توانند هر سیستم عاملی را مستقلاً اجراء کند. این امر همچنین باعث می‌شود مراحل تحقیق و توسعه سیستم عاملها راحت تر صورت بگیرد، چرا که دیگر سازندگان سیستم عامل برای تست کردن سیستم عامل تولیدی جدید لازم نیست کل کامپیوتر را در اختیار داشته باشند.

ایده ماشین‌های مجازی امروزه نیز جهت رفع مشکلات عدم سازگاری گسترش زیادی یافته است . به عنوان مثال شرکتهای میکروسیستم یا شرکتDEC که کامپیوترهای غیر intel را می‌سازند مایلند که مشتریهایشان بتوانند برنامه های DOS (تحت intel) را نیز اجراء کنند. برای این کار یک ماشین مجازی اینتل بر روی پردازنده خود پدید می‌آورند.

در این حال ماشین مجازی دستورات اینتل را به دستورات پردازنده جدید تبدیل می‌کند. یا مثلاً کامپیوترpower PC شامل ماشین مجازی Motorola 6800 می‌باشد . مثال دیگر اجراء شدن DOS تحت محیط ویندوز است،پردازنده‌های ۳۸۶ به بعد دارای یک مد مجازی هستند. که می‌توانند چندین برنامه تحت DOS تحت ویندوز نیز اجراء شوند (البته به شرطی که دستورالعملهای عادی را اجراء کنندو مستقیماً با پورت‌های مهم سر و کار نداشته باشند.).

مثال دیگر از این مفهوم ماشین مجازی زبان جاوا می‌باشد. کامپایلرزبان جاوا توسط شرکت sun طراحی شده است یک خروجی بایت کد(byte code) تولید می‌کند. این بایت کدها دستوراتی هستند که بر روی ماشین مجازی جاوا(JVM) اجراء می‌شوند. جهت اجرای برنامه‌های جاوا در یک ماشین ، آن کامپیوتر می‌بایست دارای یک JVM باشد.

امروزه JVM بر روی بسیاری از انواع کامپیوترها (PC،مکینتاش، SUN مینی کامپیوترها و مین فریم‌ها) وجود دارد . JVM همچنین در Microsoft Explorer ویندوز پیاده سازی شده است . بدین ترتیب برنامه‌هایی که به زبان java نوشته شده‌اند به راحتی بر روی انواع کامپیوترها اجراء می‌شوند. فقط کافی است بایت کدها را روی آن ماشین کامپایل کرد.

بدیهی است به علت نیاز به کامپایل شدن بایت کدها ، برنامه های جاوا سرعت کمتری نسبت به برنامه‌هایی نظیر C دارد .
برنامه های C توسط کامپایلر بومی یک کامپیوتر ، برای یک بار تبدیل به زبان ماشین آن کامپیوتر می‌گردد. پس خروجی زبان ماشین کامپایلر c از یک نوع کامپیوتر به کامپیوتر دیگر متفاوت است ولی بایت کدهای خروجی جاوا برای همه ماشین ها یکسان است.