Admin
9th September 2008, 09:58 AM
«« سیستم عامل »»
مقدمه:
به طور کلی نرم افزارهای کامپیوتر به دو گروه تقسیم میشوند:
یکی برنامههای سیستمی که عملیات کامپیوتر را مدیریت میکنند و دیگری برنامههای کاربردی .سیستم عامل (operating system=os) اصلی ترین برنامه سیستمی است که به عنوان رابط بین کاربر و سخت افزار کامپیوتر عمل میکند .
سیستم عامل دو وظیفه (یا هدف) اصلی دارد:
سیستم عامل استفاده از کامپیوتر را ساده میسازد. این بدان معناست که مثلاً کاربر یا برنامه نویس بدون درگیر شدن با مسائل سخت افزاری دیسکها به راحتی فایلی را بر روی دیسک ذخیره و حذف کند . این کار در واقع با به کاربردن دستورات سادهای که فراخوان های سیستمی (System Calls) را صدا میزنند انجام پذیرد .
در صورت عدم وجود سیستم عامل کاربر و یا برنامه نویس میبایست آشنایی کاملی با سخت افزارهای مختلف کامپیوتر (مثل مانیتور ,فلاپی , کی بورد و غیره) داشته باشد و روتینهایی برای خواندن و یا نوشتن آنها به زبانهای سطح پائین بنویسد. از این جنبه به سیستم عامل با عنوان ماشین توسعه یافته(Extended machine) یا ماشین مجازی (Virtual machine) یاد میشود که واقعیت سخت افزار را از دید برنامه نویسان مخفی میسازد.
وظیفه دوم سیستم عامل مدیریت منابع(Resource Management) میباشد, یعنی سیستم عامل باعث استفاده بهینه و سودمند (اقتصادی) از منابع سیستم میگردد. منظور از منابع پردازندهها , حافظهها , دیسکها, موس ها , چاپگرها , فایلها , پورتها و غیره هستند. یک سیستم کامپیوتری منابع نرم افزاری و سخت افزاری بسیار دارد که ممکن است در حین اجراء برنامه لازم باشند , سیستم عامل همانند مدیر منابع عمل کرده و آنها را بر حسب نیاز به برنامههای مشخصی تخصیص میدهد.
سیستم عامل معمولا اولین برنامههای است که پس از بوت شدن در حافظه بار میشود. پس از بار شدن قسمتی از سیستم عامل بطور دائم در حافظه باقی (Resident)میماند. قسمتهای دیگر با توجه به کاربرد کامپیوتر توسط کاربر از دیسک به حافظه آورده میشود.
به قسمت اصلی سیستم عامل که وظایف مهم آن را انجام میدهد هسته یا Kernel گفته میشود. هسته سیستم عامل برنامهای است که در تمامی اوقات بر روی کامپیوتر در حال اجراست.
سیستم عامل و معماری کامپیوتر اثر زیادی بر روی یکدیگر داشتهاند. یعنی جهت سهولت کار با سخت افزارهای جدید , سیستم عاملها توسعه یافتند و همچنین در اثنای طراحی سیستم عاملها , مشخص شد که تغییراتی در طراحی سخت افزار میتواند سیستم عاملها را ساده تر و کارآمدتر سازد .
هر چند که تطبیق نسلهای کامپیوتر با نسلهای سیستم عامل کار درستی نیست ولی این تطبیق که در ادامه انجام میدهیم علت ایجاد سیستم عاملهای جدید را مشخص میسازد.
انواع سیستم های عامل:
سیستمهای عامل انواع گوناگون دارند که با توجه به اندازه کامپیوتر و نوع کاربرد های آن برخی از آنها بسیار ساده و برخی دیگر پیچیده است .
1- سیستم عامل تک برنامه ای single program :
برخی از کامپیوتر ها میتوانند در یک لحظه فقط به پردازش یک برنامه بپردازند . سیستم عامل های این نوع کامپیوتر ها میتوانند برنامه را بارگذاری و اجرا کنند و یا اطلاعات را به دستگاه جانبی بفرستند یا از آن دریافت کنند و دستورات مخصوص خود را به اجرا در آورند .
سیستم عامل های موجود بر روی بیشتر میکرو کامپیوتر ها از این نوع هستند لذا این نوع کامپیوتر ها قادر به اجرای چند برنامه به طور همزمان یا انجام کاری دیگر علاوه بر پردازش یک برنامه نیستند .
2- سیستم عامل های چند برنامه ای multi programming :
برای جلوگیری از تلف شدن وقت واحد پردازشگر این سیستم های عامل طوری طراحی شده اند که میتوانند اجرای چند برنامه را به طور همزمان بر عهده بگیرند . انجام این کار بدین صورت است که در هر لحظه چند برنامه در داخل حافظه موجود هستند به هر کدام از این برنامه ها در مرحله اجرای خاص خود قرار دارند .این برنامه ها به صورت قسمت قسمت مطابق با احتیاجات ورودی و خروجی خود پردازش میشوند . میتوان برای پردازش برنامه ها اولویت هائی را نیز در نظر گرفت در این حالت برنامه هائی که دارای اولویت برای اجرا هستند زود تر از دیگر برنامه ها پردازش خواهند شد به عبارت دیگر اجرای این برنامه ها بر برنامه های دیگری که دارای اولویت نیستند تقدم خواهند داشت . کاربر میتواند بنا به میل خود ترتیب پردازش برنامه ها را تغییر دهد یا برای اجرای برنامه ها اولویت قائل شوند .
3- سیستم عامل برای سیستم هائی با چند استفاده کننده multi user :
کامپیوتر هائی که چند ترمینال ورودی و خروجی مستقل دارند وسیله خوبی برای سرویس دهی به کاربران متعدد هستند . به دلیل اینکه پردازشگر این نوع کامپیوتر ها کار خود را با سرعت زیادی انجام میدهد کاربر هر ترمینال فکر میکند که کامپیوتر فقط در حال انجام عملیات مربوط به آن ترمینال است در صورتی که حقیقت غیر از این است .
سیستم عامل های این نوع کامپیوتر ها کل مسائل مربوط به حافظه و واحد های ذخیره هر ترمینال را تحت کنترل خود دارند .
4- سیستم عامل برای سیستمهائی با پردازش توزیعی distributed processing :
با ظهور و ایجاد شبکه های کامپیوتری متشکل از چند ریز کامپیوتر ارزان قیمت متصل شده به یکدیگر هم بسیاری از محدودیت های ریز کامپیوتر ها حل شده و هم از محبوبیت کامپیوتر های بزرگ گران قیمت کاسته شد سیستم عامل هایی وجود دارند که کامپیوتر های متصل شده به شبکه را تحت کنترل و نظارت خود در می آورند .
تطابق تکنیکهای سیستم عامل با نسل های کامپیوتر:
در نسل اول کامپیوترها (55-1945) که از لامپ خلأ برای ساخت آنها استفاده میشد,زبانهای برنامه نویسی (حتی اسمبلی ) ابداع نشده بودند و سیستم عامل نیز اصلاً وجود نداشت . روند کار به این صورت بود که برنامه نویسان تنها در یک فاصله زمانی مشخص حق استفاده از کامپیوتر بزرگ و گران قیمت را داشتند.
آنها برنامههای خود را توسط تخته مدار سوراخدار ( و بعدها توسط کارتهای پانچ ) و به زبان ماشین به کامپیوتر میدادند. اکثر برنامههای محاسبات عددی معمولی مانند جداول سینوس و کسینوس بود.
• الف) سیستم های دسته ایBatch system
• ب ) سیستم های چند برنامه ایMulti programming
• پ ) سیستم spooling
• ت ) سیستم اشتراک زمانی Time sharing
• س ) سیستم عامل های کامپیوتر های شخصی و شبکه
• ج ) سیستم های توزیع شدهDistributed system
• چ ) سیستم ها ی چند وظیفه ایMulti tasking
• ح) سیستم های چند پردازنده ای Multi processing
• خ) سیستم های بی درنگReal Time
الف) سیستم های دسته ای (Portable Batch System ):
در نسل دوم , کامپیوترها (65-1955) از ترانزیستور ساخته شدند.
طریقه کار با این کامپیوترهای نسل دوم از طریق یک کنسول (Console) بود که تنها اپراتور مخصوص کامپیوتر با آن کار میکرد و کاربران به طور مستقیم با این کامپیوترها محاوره (interaction) نداشتند. کاربر ابتدا برنامه خود را به زبان فرترن یا اسمبلی بر روی کاغذ مینوشت سپس توسط دستگاه Card punch, برنامه را روی کارت های سوراخدار منتقل ساخت . بعد این دسته کارت تهیه شده که شامل برنامه, دادهها و کارتهای کنترل بود به صورت کار (Job) تحویل اپراتور داده میشد . اپراتور بعد از اتمام کار قبلی , دسته کارت جدید را به کامپیوتر میداد تا برنامه را اجراء کند در انتها خروجی برنامه ( که غالباً چاپی بود) را به کاربر تحویل میداد سیستم عامل در این کامپیوترهای اولیه ساده بود و وظیفه اصلی آن انتقال کنترل اتوماتیک از یک کار به کار دیگری بود . سیستم عامل همواره مقیم در حافظه بود و در هر لحظه فقط یک برنامه اجراء میشد.هنگامی که اپراتور مشغول گذاشتن نوارها یا برداشتن کاغذهای چاپ شده بود وقت زیادی از این کامپیوترهای گران قیمت به هدر میرفت .
برای رفع مشکل فوق سیستمهای دستهای (Batch System) ابداع شد . یعنی ابتدا یک سبد پر از دسته کارتها در اتاق ورودی جمع آوری میشد , سپس کلیه آنها به وسیله دستگاه کارتخوان یک کامپیوتر کوچک و نسبتاً ارزان (مثل IBM 1401 ) خوانده شده و بر روی یک نوار ذخیره میگردید. سپس اپراتور نوار را برداشته بر روی کامپیوتر اصلی و گران قیمت که محاسبات را انجام میداد (مانند: IBM7094) نصب میکرد . بعد از آن برنامهای را اجراء میکرد ( یعنی سیستم عامل ) تا اولین کار را از روی نوار برداشته و اجراء کند, خروجی بر روی نوار دیگری نوشته میشد. پس از اتمام هر کار سیستم عمل به صورت خودکار کار بعدی را از نوار میخواند. پس از اجراء همه برنامهها ,اپراتور نوار خروجی را برداشته و دوباره روی کامپیوتر IBM 1401 منتقل میساخت تا عملیات چاپ خروجی ها به صورت off line انجام شود. به این روش کار offline spooling نیز گفته میشود. بیشتر برنامههای نسل دوم به زبان فرترن و اسمبلی برای محاسبات مهندسی و علمی مثل مشتقات جزئی به کار میرفت.
یکی از معایب روش offline- spooling زیاد بودن زمان برگشت گردش (turnaround time) است ,یعنی تأخیر زمانی مابین تحویل کار و تکمیل کار. همچنین در این سیستم اولویت بندی به معنای واقعی وجود ندارد. تنها روش بدست آوردن اولویت این بود که نوار کارهای مهم را ابتدا در ماشین اصلی قرار دهند. حتی در این صورت هم باید چندین ساعت صبر میکردند تا خروجی ها ظاهر شوند. همچنین نیاز به سخت افزار اضافی(مثل کامپیوترهای1401) از دیگر معایب این روش بود.
ب ) سیستم های چند برنامه ای ( Multi programming ):
در نسل سوم کامپیوترها (80-1965) از مدارات مجتمع (Integrated Circuit=IC) برای ساخت کامپیوترها استفاده شد. به طور کلی برنامهها را میتوان به دو دسته تقسیم کرد : یکی برنامه ها با تنگنای محاسباتی CPU boundیا CPU Limiter مانند محاسبات علمی سنگین که بیشتر زمان کامپیوتر صرف محاسبات Cpu میشود ودیگری برنامه های تنگنای I/O Limited)I/O) مانند برنامههای تجاری که بیشتر زمان کامپیوتر صرف ورود دادهها و خروج اطلاعات میشود.
یک اشکال مهم سیستم های دستهای این است که وقتی کار جاری برای تکمیل یک عملیات I/O مثلاً بر روی نوار گردان منتظر میشود. در این حال CPU بیکار میماند و مجبور است صبر کند تا عملیات I/Oبه اتمام برسد. در برنامه های CPU Limited این اتلاف وقت اندک است ولی در برنامه های I/O Limited ممکن است حدود 80 تا 90 درصد وقت CPU به هدر برود.
برای رفع این مشکل از تکنیک multiprogramming استفاده میشود. بدین ترتیب که حافظه به چند قسمت تقسیم شده و در هر قسمت یک برنامه مجزا قرار داده میشود. وقتی که یک کار برای تکمیل عملیات I/O منتظر میماند, پردازنده به کار دیگری داده میشود. اگر تعداد کارهای موجود در حافظه کافی باشد میتوان CPU را تقریباً صد در صد مشغول نگه داشت .
البته نگهداری همزمان چند برنامه در حافظه نیاز به مدیریت خاص حافظه دارد تا برنامهها بر همدیگر اثر سوء نداشته باشند . لذا مدیریت حافظه بحث مهمی در سیستم عامل میباشد.
پ ) سیستم ( spooling):
یکی دیگر از ویژگیهای سیستم عامل نسل سوم SpoolingیاOn Line Spooling)) است که معمولاً همراه چند برنامه گی استفاده میشود. این کلمه مخفف عبارت
( Simultaneous Peripheral OperationonLine ) میباشد. در این سیستم به جای آنکه کارتها از دستگاه کارت خوان مستقیماً وارد حافظه گردند و توسط CPU پردازش شوند ابتدا کاراکتر به کاراکتر در بافری در حافظه قرار گرفته و سپس به صورت بلوکی بر روی دیسک نوشته میشود.
وقتیکه برنامه کاربر اجراء میشود و از سیستم عامل تقاضای ورودی میکند, اطلاعات ورودی به صورت بلوکی و با سرعت زیاد از دیسک خوانده میشوند. به طور مشابه هنگامی که برنامه برای خروجی چاپگر را احضار میکند, خط خروجی در یک بافر کپی شده و سپس در دیسک نوشته میشود. پس اطلاعات خروجی از دیسک بر اساس ترتیب و اولویت در چاپگر چاپ میشوند.
http://www.daneshju.ir/forum/imagehosting/66884766268d2b452.jpg
در واقع اسپولینگ عمل I\O یک کار را با عمل محاسباتی کار دیگر روی هم میاندازد (overlap) . در سیستم اسپولینگ درحالیکه ورودی یک کار از دستگاه ورودی خوانده میشود,کار دیگری در حال چاپ شدن است , در همین بین حتی کار دیگری میتواند در حال پردازش و اجراء باشد . در اسپولینگ برنامه عملیات ورودی و خروجی اش را متناسب با سرعت دیسک (که سریع است) انجام میدهد و نه متناسب با سرعت کارتخوان یا چاپگر (که خیلی کند هستند).
بنابراین سیستم مذکور باعث استفاده بهینه از CPU و سایل I\O میشود و سرعت عمل را بالا میبرد. در این سیستم دیگر نیازی به کامپیوترهای 1401,نوار گردانهای اضافی و حمل نوارها (مانند سیستمهای دستهای ) نداریم.
بلوک دیاگرام یک سیستم اسپولینگ میتواند به صورت زیر باشد:
1- سیستم ورودی کاراکترهایی که توسط کارتخوان وارد میشود را در بلوکهایی جمع آوری کرده وبه کمک مدیر دیسک این بلوکها را بر روی دیسک مینویسد . درانتهای هر مدرک ورودی اطلاعاتی راجع به آن مدرک (مانند محل آن بر روی دیسک , اولویت ,اسم استفاده کننده ) به قسمت زمانبند کار فرستاده میشود.
2- زمانبند کار (Job scheduler) این زمانبند یک لیست از کارهای موجود در ماشین و اطلاعات لازم در مورد مدارک ورودی مورد نیاز هر یک را نگه میدارد. به این لیست انبار کار یا Jobpool یا ـ Joblist نیز گفته میشود. زمانبند کار به پردازنده کار میگوید که کدام کار بعدی را اجرا کند. برای این منظور اطلاعاتی در مورد محل کار و مدارک ورودی آن بر روی دیسک را به پردازنده کار میدهد . همچنین اگر کارهای متعددی منتظر ورود به حافظه باشند و فضای کافی برای همگی در دسترس نباشد , زمانبند کار تعدادی از آنها را انتخاب کرده و به حافظه میآورد.
3- پردازنده کار (Job processor) کار داده شده را اجراء میکند. این پردازنده محل کامپایلرها و سایر نرم افزارهای سیستم را بر روی دیسک میداند. هنگام اجراء پردازنده کار خروجی های خود را به صورت بلوکی بر روی دیسک مینویسد و مدارک خروجی را تشکیل میدهد . پردازنده کار اطلاعاتی راجع به محل و اولیت مدارک خروجی به زمانبند خروجی میدهد.
4- زمانبند خروجی(output scheduler) لیستی از مدارکی که باید چاپ شود را نگه میدارد. وقتی که چاپگر آزاد شد , این زمانبند مدرک بعدی را برای چاپ انتخاب کرده و محل مدرک بر روی دیسک را به سیستم خروجی میگوید.
5- سیستم خروجی بلاکهای خروجی را از روی دیسک خوانده و کاراکتر به کاراکتر (یا خط به خط) آنها را به چاپگر میفرستد.
6- مدیر دیسک (Disk Manager) که وظایف خواندن و نوشتن یک بلاک بر دیسک , تخصیص یک بلاک خالی روی دیسک و برگرداندن یک بلاک به مجموعه فضای آزاد دیسک را بر عهده دارد. در خواستهای مربوطه به دیسک در یک صف به نام (Disk Transfer Queue)DTQ ذخیره میگردد.
البته هر سیستم اسپولینگ یک هماهنگ کننده(Coordinator) دارد که مسئول زمانبندی پردازش های سیستم و فراهم کردن عملیاتی که جهت همگام کردن بکار میآیند میباشد. این عملیات توسط دو روال انجام میپذیرد:
Wait : پردازش جاری را متوقف کرده و دوباره وارد زمانبند میگردد.
Free : یک پردازش ویژه را جهت زمانبندی, آماده میکند.
بافر کردن امکان میدهد که عمل I\Oیک کار با عمل پردازش همان کار همزمان گردد در حالیکه spooling امکان میدهد عملیات I\O و پردازش چندین کار با هم همزمان گردند.
ت ) سیستم اشتراک زمانی( Time sharing ):
این سیستمها از اوایل سالهای 1970 در نسل سوم کامپیوترها معمول شدند. سیستم اشتراک زمانی در واقع تعمیم سیستم چند برنامگی است .
http://www.daneshju.ir/forum/imagehosting/668847662707e115f.jpg
در سیستمهای چند برنامگی کاربر ارتباطی با کامپیوتر نداشت و خطایابی برنامهها مشکل بود چرا که زمان برگشت نسبتاً طولانی اجازه آزمایش کردنهای متعدد را نمیداد. در سیستم اشتراک زمانی کاربر به کمک دو ترمینال (Terminal) که شامل کی برد(برای ورودی) و مانیتور (برای خروجی ) است با کامپیوتر به صورت محاورهای (interactive) رابطه بر قرار میسازد .کاربر مستقیماً دستوراتی را وارد کرده و پاسخ سریع آن را روی مانیتور دریافت میکند. در این سیستمها چندین کاربر به کمک ترمینالهایی که به کامپیوتر وصل است همزمان میتوانند از آن استفاده کنند . در سیستم اشتراک زمانی فقط یک پردازنده وجود دارد که توسط مکانیزمهای زمانبندی بین برنامههای مختلف کاربرها با سرعت زیاد (مثلاً در حد میلی ثانیه) سوئیچ میشودو بنابراین هر کاربر تصور میکند کل کامپیوتر در اختیار اوست .در اینجا تأکید بر روی میزان عملکرد کاربر است یعنی هدف فراهم کردن وسایل مناسب برای تولید ساده نرم افزار و راحتی کاربرد میباشد و نه بالا بردن میزان کاربرد منابع ماشین . کاربر میتواند در هر زمان دلخواه برنامه خود را آغاز یا متوقف سازد و یا برنامه را به صورت قدم به قدم اجراء و اشکال زدایی (debug) کند . سیستمهای دستهای برای اجرای برنامههای بزرگ که نیاز محاورهای کمی دارند مناسب است ولی سیستمهای اشتراک زمانی برای مواردی که زمان پاسخ کوتاه لازم است , استفاده میشوند.
در زمانی که کاربری در حال تایپ برنامهاش یا فکر کردن روی خطاهای برنامه اش میباشدCPU به برنامه کاربر دیگری اختصاص یافته تا آن را اجراء کند .
س ) سیستم عامل های کامپیوتر های شخصی و شبکه :
سال 1980 تاکنون که مدارات مجتمع با مقیاس بزرگ (Large Scale Integrated Circuit) ابداع شدند، به عنوان نسل چهارم کامپیوترها شناخته میشود. در این سالها کامپیوترهای شخصی با قیمتی ارزان و کارآیی بالا و محیط گرافیکی و محاورهای بسیار خوب به سرعت گسترش یافتند. سیستم عاملهای اولیه بر روی PCهامانند DOS فقط تک کاربره و تک برنامهای بودند.
ولی سیستم عاملهای امروزی آن مانند Windows NT خاصیتهای چند برنامگی ،چند کاربره (multiuser) و شبکهای را دارا هستند. با توجه به هزینه اندک سخت افزار اهداف سیستم عامل در طول زمان تغییر کرده است وبرای PCها به جای ماکزیمم کردن درصد استفاده CPU و وسایل جانبی، سیستم به سمت راحتی کاربر پیش میرود.
به تدریج ویژگیهای مهم سیستم عاملهای قدیمی در کامپیوترهای بزرگ (مانند حفاظت حافظه ، حافظه مجازی، محافظت فایلها ، همزمانی پردازشهاو...) بر روی سیستم های PC نیز پیاده سازی شده است .
هنگامی که کامپیوترها از طریق شبکه به هم وصل شوند. به آنها ایستگاههای کاری
(Work stations) میگویند . در یک سیستم عامل شبکه ، کاربران از وجود ماشین های مختلف در شبکه با خبرند. آنها میتوانند از دور وارد یک ماشین شوند و همچنین فایلهای یک ماشین را روی ماشین دیگر کپی کنند.
هر کامپیوتر سیستم عامل محلی خودش را اجراء میکندو کاربر یا کاربران محلی مخصوص به خود را دارد .
ج ) سیستم های توزیع شده(Distributed system ):
سیستم عامل توزیع شده در یک محیط شبکهای اجراء میشود. در این سیستم قسمتهای مختلف برنامه کاربر بدون آنکه خود او متوجه شود میتوانند همزمان در چند کامپیوتر مجزا اجراء شده و سپس نتایج نهایی به کامپیوتر اصلی کاربر بر گردند.
کاربران نباید از این موضوع باخبر شوند که برنامه آنها در کجا به اجراء در میآید و یا فایلهای آنها در کجای شبکه قرار دارد و همه این کارها باید توسط سیستم عامل به صورت خودکار انجام گیرد. به عبارتی دیگر سیستم باید از دید کاربر شفاف باشد و هرچیز را با نام آن فراخوانی کند و کاری به آدرس آن نداشته باشد.
یکی از مزایای مهم سیستمهای توزیع شده سرعت بالای اجرای برنامههاست چرا که یک برنامه همزمان میتواند از چندین کامپیوتر برای اجراء شدنش استفاده کند.
همچنین به علت توزیع شدن اطلاعات, بانکهای اطلاعاتی حجیم میتوانند روی یکسری کامپیوترهای شبکه شده قرار بگیرند. و لازم نیست که همه اطلاعات به یک کامپیوتر مرکزی فرستاده شود که در نتیجه این نقل و انتقالات حجیم زمان زیادی به هدر میرود.
به علت تأخیرهای انتقال در شبکه و نویزهای احتمالی در خطوط انتقالی قابلیت اعتماد اجرای یک برنامه در یک سیستم تنها , بیشتر از قابلیت اجرای آن دریک سیستم توزیع شده است .
همچنین درسیستم توزیع شده اگر یکی از کامپیوترهایی که وظیفه اصلی برنامه جاری را برعهده دارد خراب شود کل عمل سیستم مختل خواهد شد . از طرف دیگر اگر اطلاعاتی همزمان در چند کامپیوتر به صورت یکسان ذخیره گردد ویکی از کامپیوترها خراب شود, دادهها را میتوان از کامپیوترهای دیگر بازیابی کرد از این نظر امنیت افزایش مییابد.
به سیستم های توزیع شده گاهی اوقات سیستمهای Loosely Coupled یا ارتباط ضعیف نیز میگویند,چرا که هر پردازنده کلاک و حافظه مستقلی دارد . پردازندهها از طریق خطوط مخابراتی مختلفی مثل گذرگاههای سریع یا خطوط تلفن ارتباط دارند.
چ ) سیستم ها ی چند وظیفه ای(Multi tasking ):
در تکنیک چندنخی (multitasking) یک فرایند (process) که برنامهای در حال اجراست , میتواند به بخشها یا نخهایی (بندهایی) تقسیم شود که میتوانند به صورت همزمان اجراء شوند.
برنامههایی که چند وظیفه مستقل از هم را انجام میدهند میتوانند به صورت چند نخی نوشته شوند. گاهی اوقات به سیستمهای multithreading سیستمهای چند تکلیفی یا چند وظیفه ای (multitasking)هم گفته میشود.
فرآیند (process)یا پردازش اساس یک برنامه در حال اجراست که منابعی از سیستم به آن تخصیص داده شده است (شامل رجیسترها,حافظه,فایلها و دستگاهها).فرآیند میتواند مجموعهای از یک یا چند نخ باشد.
به نخ, رشته یا بند هم گفته میشود . کلیه اطلاعات مربوط به هر پروسس , در یکی از جداول سیستم عامل به نام جداول process Control Block=PCB ذخیره میشود. این جدول یک آرایه یا لیست پیوندی از ساختارهاست که هر عضو آن مربوط به یکی از پروسسهاست که در حال حاضر موجودیت دارد.
اطلاعات موجود در PCB عبارتند از :
• حالت جاری پردازش
• شماره شناسایی پردازش
• اولیت پردازش
• نشانی حافظه پردازش
• نشانی محل برنامه پردازش بر روی دیسک
• نشانی سایر منابع پردازش
• محلی برای حفظ ثباتها .
ح) سیستم های چند پردازنده ای (Multi processing):
کامپیوترها میتوانند به جای یک CPU چندین CPU داشته باشند که در اینصورت به آنها سیستم multiprocessing میگویند.جهت استفاده از این سیستمهای نیاز به یک سیستم عامل خاص میباشد که بتواند چندین برنامه یانخهای یک فرآیند را به صورت موازی واقعی روی آنها اجراء کند .
سیستم عامل multitasking برای اجراء چند نخ بر روی یک CPU و سیستم عامل multiprocessing برای اجرای چند نخ بر روی چند CPU به کار میروند.
در سیستم چند پردازندهای , CPUها باید بتواند از حافظه , امکانات ورودی و خروجی و گذرگاه Bus سیستم به صورت اشتراکی استفاده کنند .مزایای این سیستمهای عبارتند از :
1. زیاد شدن توان عملیاتی (throughput) .منظور از throughput تعداد کارهایی است که در یک واحد زمانی تمام میشوند. بدیهی است هر چقدر تعداد پردازندهها بیشتر باشد تعداد کارهای تمام شده در یک پریود زمانی نیز بیشتر خواهد بود. البته این نسبت خطی نیست , مثلا اگر تعداد پردازندهها n باشد سرعت اجراء برنامهها nبرابر نمیشود چرا که بخشی از وقت پردازندهها جهت مسائل کنترلی و امنیتی وسوئیچ کردنها به هدر میرود.
*صرفه جویی در هزینهها , از آنجا که پردازندهها منابع تغذیه , دیسکها , حافظهها و ادوات جانبی را به صورت مشترک استفاده میکنند در هزینههای سخت افزاری صرفهجویی میشود.
2. تحمل پذیری در برابر خطا (fault-tolerant) سیستم های مالتی پروسسور قابلیت اعتماد را افزایش میدهند چرا که خرابی یک CPU سبب توقف سیستم نمیشود بلکه تنها سبب کند شدن آن خواهدشد .استمرار عمل با وجود خرابی نیازمند مکانیزمی است که اجازه دهد خرابی جستوجو شده , تشخیص داده شده و در صورت امکان اصلاح شود (یا کنار گذاشته شود). این توانایی به ادامه سرویس , متناسب با سطح بقای سخت افزار ,تنزل مطبوع یا graceful degradationنامیده میشود.
سیستمهای عاملهای چند پردازندهای به دو دسته کلی متقارن و نامتقارن تقسیم میشوند:
در سیستم چند پردازندهای نامتقارن(Asymmetric Multi Processing = ASMP) یک پردازنده جهت اجراء سیستم عامل و پردازندههای دیگر جهت اجرای برنامههای کاربران استفاده میشود. از آنجا که کد سیستم عامل تنها روی یک پروسسور اجراء میشود, ساخت این نوع سیستم عامل نسبتا ساده است و از تعمیم سیستم عامل تک پردازندهای به دست میآید.
این نوع سیستم عاملها برای اجراء روی سخت افزارهای نامتقارن مناسب هستند, مانند کمک پردازنده و پردازندهای که به هم متصل هستند یا دو پردازندهای که از تمام حافظهموجود مشترکا" استفاده نمیکنند . یکی از معایب سیستم عامل نامتقارن غیر قابل حمل بودن (non-portable) آن است . یعنی برای سخت افزارهای مختلف باید سیستم عاملهای مختلفی نوشته شود چرا که نامتقارنی میتواند حالات مختلف داشته باشد.
در سیستم چند پردازندهای متقارن(symmetric Multi Processing = SMP) سیستم عامل میتواند روی هر یک از پروسسورهای آزاد یا روی تمام پردازندهها همزمان اجراء شود. در این حالت حافظه بین تمام آنها مشترک میباشد. تمام پردازندهها اعمال یکسانی را میتوانند انجام دهند. سیستم متقارن از چند جنبه نسبت به نوع نامتقارن برتری دارد:
1- از آنجا که سیستم عامل خود یک پردازش سنگین است اگر فقط روی یک CPU ها اجراء شود باعث میگردد که آن پردازنده همواره بار سنگینی داشته باشد, در حالیکه احتمالاً پردازندههای دیگر بی کار هستند لذا اجراء سیستم عامل روی چند پردازنده باعث متعادل شدن (balancing) بار سیستم میشود.
2- در سیستم نامتقارن اگر پردازنده اجراء کننده سیستم عامل خراب شود کل سیستم خراب میشود ولی در سیستم متقارن از این نظر امینت بیشتر است چرا که اگر یک پردازنده از کار بیفتد سیستم عامل میتواند روی پردازندههای دیگر اجراء شود.
3-بر عکس سیستم عامل نامتقارن , سیستم عامل قابل حمل( portable) بر روی سیستم های سخت افزاری مختلف است .
سیستم عامل SUNOS ورژن 4 از نوع نامتقارن و سیستم عامل Solaris2 ورژن و همچنین windows NT از نوع متقارن میباشند.
وجود پردازندههای متعدد از دید کاربر مخفی است و زمانبندی نخها (Thread) یا فرآیندها (process) روی هر یک از پردازندهها به عهده سیستم عامل است .
گرچه multithreadingو multiprocessingامکانات مستقلی هستند ولی معمولاً با هم پیاده سازی میشوند. حتی در یک ماشین تک پردازندهای , چند نخی کارایی را افزایش میدهد. همچنین ماشین چند پردازندهای حتی برای فرآیندهای غیر نخی هم کارآمد است .
شکل زیر تفاوت سیستم نامتقارن و متقارن را نشان میدهد :
گاهی اوقات به سیستمهای چند پردازندهای ,سیستمهای Tightly Coupled یا ارتباط محکم نیز گفته میشود. چرا که پردازندهها کلاک (Clock), گذرگاه و همچنین حافظه مشترکی دارند.
خ) سیستم های بی درنگ(Real Time ):
سیستمهای بی درنگ معمولاً به عنوان یک کنترل کننده در یک کاربرد خاص استفاده میشوند. سیستم در این حالت میبایست در زمانی مشخص و معین حتماً جواب مورد نظر را بدهد .
سیستمهای کنترل صنعتی, پزشکی , کنترل موشک و غیره از این دستهاند.
در سیستمهای بی درنگ زمان پاسخ باید سریع و تضمین شده باشد ولی در سیستم اشتراک زمانی مطلوبست که زمان پاسخ سریع باشند (ولی اجباری نیست).درسیستم دستهای هیچ محدودیت زمانی در نظر گرفته نمیشود.
در سیستمهای بی درنگ معمولاً وسایل ذخیره سازی ثانویه وجود ندارد و به جای آن از حافظه های ROM استفاده میشود. سیستم عاملهای پیشرفته نیز در این سیستمها وجود ندارند چرا که سیستم عامل کاربر را از سخت افزار جدا میکند و این جدا سازی باعث عدم قطعیت در زمان پاسخگویی میشود.
سیستمهای بی درنگ با سیتسمهای اشتراک زمانی تناقض دارند لذا نمیتوانند هر دو توأماً وجود داشته باشند . به دلیل نیاز به پاسخ دهی سریع و تضمین شده سیستمهای بلادرنگ از حافظه مجازی و اشتراک زمانی استفاده نمیکنند.
به این سیستمها «بی درنگ سخت» نیز گفته میشود.
در سیستمهای «بی درنگ نرم» یک وظیفه بی درنگ بحرانی, نسبت به سایر وظایف اولیت دارد و تا پایان تکمیل شدنش این ارجحیت را دارا خواهد بود . از آنجا که این سیستمها مهلت زمانی(deadline) را پشتیبانی نمیکنند استفاده آنها در کنترل صنعتی ریسک آور است . هر چند که این سیستمهای بی درنگ نرم میبایست پاسخی سریع داشته باشند ولی مساله پاسخ دهی به حادی سیستمهای بی درنگ سخت نمیباشد.
از کاربردهای سیستم بی درنگ نرم میتوان رزرواسیون شرکتهای هواپیمایی ,چند رسانهای (multimedia) واقعیت مجازی (Virtual reality) را نام برد. این سیستمها به ویژگیهای سیستم عاملهای پیشرفته (که توسط بیدرنگ سخت حمایت نمیشوند) نیازمندند . بعضی از نسخههای UNIX مانند solaris 2 خاصیت بیدرنگ نرم را دارا میباشند.
در برخی کاربردها (مثل کنترل صنعتی)در کامپیوترها از سیستم عامل استفاده نمیشود. از آنجا که در سیستمهای کنترل صنعتی برنامه میبایست در اسرع وقت در مقابل یک اتفاق , از خود عکس العمل نشان دهد , وجود واسطه سیستم عامل باعث کند شدن مراحل میگردد.
ساختار سیستم عامل :
• الف) خدمات و مولفه های سیستم عامل:
o مدیریت پردازش در سیستم عامل
o مدیریت حافظه در سیستم عامل
o مدیریت فایل در سیستم عامل
o مدیریت ورودی- خروجی در سیستم عامل
• ب) مفسر فرمان
• ج) وقفه در سيستم عامل
• د) فراخوانی سیستمی
الف) خدمات و مولفه های سیستم عامل:
o مدیریت پردازش در سیستم عامل:
یک برنامه حاوی دستورالعملهایی است که توسط CPU اجراء میشوند و حاوی دادههایی است که هنگام اجرای دستورات از آنها استفاده میشود. برنامه در واقع یک موجودیت passive است مانند محتوای یک فایل بر روی دیسک . ولی پردازش در سیستم عامل یک برنامه در حال اجراء میباشد که موجودیتی active دارد. یک برنامه کاربر که در سیستم اشتراک زمانی در حال اجرا است یک پروسس (فرایند) میباشد, به همین ترتیب یک وظیفه سیستم مثل اسپولینگ خروجی به چاپگر نیز یک پروسس است .یک فرایند منابع مشخصی را نیاز دارد مثل CPU, حافظه , وسایل I/O و فایلها . پردازش در سیستم عامل واحد کار در سیستم است . یعنی یک سیستم مجموعهای از پردازشهای گوناگون است . سیستم عامل در رابطه با مدیریت پردازش وظایف زیر را بر عهده دارد. ایجاد و حذف پردازش در سیستم عامل های کاربر و سیستم – زمانبندی پردازشها واینکه در هر زمان کدام پردازش در سیستم عامل CPU را در اختیار داشته باشد – مدیریت همزمانی پردازشها و ارتباط بین آنها و جلوگیری از بن بست (deadlock) بن بست حالتی است که پردازشها در یک حلقه بسته منتظر تمام شدن وظایف همدیگر هستندو بنابراین هیچیک نمیتوانند اجراء گردند و سیستم قفل میشود.
o مدیریت حافظه و فضای ذخیره سازی در سیستم عامل :
سیستم عامل در رابطه با مدیریت حافظه دو عملیات اساسی را انجام خواهد داد :
هر پردازه یه منظور اجراء می بایست دارای حافظه مورد نیاز و اختصاصی خود باشد .
از انواع متفاوتی حافظه در سیستم استفاده تا هر پردازه قادر به اجراء با بالاترین سطح کارآئی باشد.
سیستم عامل در ابتدا می بایست محدودههای حافظه مورد نیاز هر نوع نرم افزار و برنامههای خاص را فراهم نمایند. مثلا" فرض کنید سیستمی دارای یک مگابایت حافظه اصلی باشد. سیستم عامل کامپیوتر فرضی، نیازمند 300 کیلو بایت حافظه است. سیستم عامل در بخش انتهائی حافظه مستقر و بهمراه خود درایورهای مورد نیاز یه منظور کنترل سخت افزار را نیز مستقر خواهد کرد. درایورهای مورد نظر به 200 کیلو بایت حافظه نیاز خواهند داشت. بنابراین پس از استقرار سیستم عامل بطور کامل در حافظه، 500 کیلو بایت حافظه باقیمانده و از آن برای پردازش برنامههای کاربردی استفاده خواهد شد. زمانیکه برنامههای کاربردی در حافظه مستقر می گردند، سازماندهی آنها در حافظ بر اساس بلاک هائی خواهد بود که اندازه آنها توسط سیستم عامل مشخص خواهد شد. در صورتی که اندازه هر بلاک 2 کیلوبایت باشد، هر یک از برنامههای کاربردی که در حافظه مستقر می گردنند، تعداد زیادی از بلاک های فوق را (مضربی از دو خواهد بود)، بخود اختصاص خواهند داد. برنامهها در بلاک هائی با طول ثابت مستقر می گردند. هر بلاک دارای محدودههای خاص خود بوده که توسط کلمات چهار و یا هشت بایت ایجاد خواهند شد. بلاک ها و محدو دههای فوق این اطمینان را بوجود خواهند آورد که برنامهها در محدودههای متداخل مستقر نخواهند شد. پس از پر شدن فضای 500 کیلوبایت اختصاصی برای برنامههای کاربردی، وضعیت سیستم به چه صورت تبدیل خواهد گردید؟
در اغلب کامپیوترها، می توان ظرفیت حافظه را ارتقاء و افزایش داد. مثلا" می توان میزان حافظه RAM موجود را از یک مگابایت به دو مگابایت ارتقاء داد. روش فوق یک راهکار فیزیکی برای افزایش حافظه بوده که در برخی موارد دارای چالش های خاص خود می باشد. در این زمینه می بایست راهکارهای دیگر نیز مورد بررسی قرار گیرند. اغلب اطلاعات ذخیره شده توسط برنامهها در حافظه، در تمام لحظات مورد نیاز نخواهد نبود. پردازنده در هر لحظه قادر به دستیابی به یک محل خاص از حافظه است. بنابراین اکثر حجم حافظه در اغلب اوقات غیر فابل استفاده است. از طرف دیگر با توجه به اینکه فضای ذخیره سازی حافظهها ی جانبی نظیر دیسک ها بمراتب ارزانتر نسبت به حافظه اصلی است، می توان با استفاده از مکانیزمهائی اطلاعات موجود در حافظه اصلی را خارج و آنها را موقتا" بر روی هارد دیسک ذخیره نمود. بدین ترتیب فضای حافظه اصلی آزاد و در زمانیکه به اطلاعات ذخیره شده بر روی هارد دیسک نیاز باشد، مجددا" آنها را در حافظه مستقر کرد. روش فوق " مدیریت حافظه مجازی " نامیده میشود.
حافطههای ذخیره سازی دیسکی، یکی از انواع متفاوت حافظه موجود بوده که می بایست توسط سیستم عامل مدیریت گردد. حافطههای با سرعت بالای Cache، حافظه اصلی و حافظههای جانبی نمونههای دیگر از حافظه بوده که توسط سیستم عامل مدیریت گردند.
http://www.daneshju.ir/forum/imagehosting/6688476627dd052e3.gif
o مدیریت فایل در سیستم عامل:
جهت استفاده ساده از اطلاعات کامپیوتر,سیستم عامل دید منطقی یکسانی از اطلاعات ذخیره شده روی انواع وسایل ذخیره سازی مثل هارد دیسک ,فلاپی,نوار یا دیسکهای نوری پدید میآورد.
سیستم عامل خواص فیزیکی وسایل را از دید کاربر مخفی کرده و یک واحد ذخیره منطقی به نام فایل ارائه میکند. سیستم عامل دررابطه با فایل وظایف زیر را انجام میدهد :
• ایجاد وحذف فایلها
• ایجادو حذف دایرکتوریها
• انجام عملیات کپی
• انتقال و تغییرات بر روی فایها و دایرکتوریها
• ذخیره سازی ومدیریت قرار گیری فایلها بر روی رسانهها
• مدیریت دسترسی های مختلف به فایلهای مشترک
ب) مفسر فرمان :
یکی از مهمترین برنامههای سیستم عامل مفسر فرمان است که در واقع واسط بین کاربردو سیستم عامل میباشد .
بعضی از سیستم عاملها مفسر فرمان را در هسته خود (kernel) قرار دادهاند و بعضی دیگر مثل DOS و UNIX مفسر فرمان را (که پوسته یا Shell نیز معروف است )مانند یک برنامه خاص که در اولین برقراری ارتباط اجراء میشود در نظر میگیرند.
مفسر فرمان دستورات کاربر را گرفته و آنهارا اجراء میکند. در پوسته DOS و UNIX فرمانها از طریق صفحه کلید وارد شده و روی صفحه نمایش رایانه به صورت متنی نشان داده میشود ولی در سیستم عامل ویندوز یا مکینتاش پوسته به صورت محیطی گرافیکی و مبتنی بر پنجرههاست که با زدن کلید موس به راحتی میتوان دستورات را وارد کرد.
ج) وقفه در سيستم عامل:
وقفهها جزء مهمی از معماری کامپیوتر هستندو نحوه عملکرد آنها از ماشینی به ماشین دیگر ممکن است متفاوت باشد. وقفه راهکاری را فراهم میسازد تا اجرای دستورالعملهای جاری پردازنده موقتاً متوقف شده و دستورات سرویس دهی دیگری اجراء گردد و سپس از آن کنترل دوباره به برنامه وقفه داده شده باز گردد.
انواع وقفهها را میتوان به صورت زیر دسته بندی کرد:
• وقفههای برنامه (یاprogram check ) که به دلیل اجرای بعضی دستورات رخ میدهند. مثلاً سرریز شدن محاسباتی تقسیم بر صفر, اجراء دستورالعمل غیر مجاز, رجوع به آدرس خارج از محدوده مجاز کاربر. به این وقفهها اغلب Trap یا تله گفته میشود.
• وقفههای زمان سنج(Timer) این وقفه به سیستم عامل امکان میدهد بعضی اعمال را به صورت مرتب در یک پریود زمانی خاص انجام دهد (مثل تنظیم ساعت, چک کردن سخت افزار و...)
• وقفههای I/O این وقفهها به وسیله کنترل کنندههای دستگاه I/O تولید میشوند تا کامل شدن طبیعی یک عمل یا بروز خطا در انجام عمل را نشان دهند.
• وقفههای نقص سخت افزار یا وقفههای Machine-check) ) مثل وقفهای که بر اثر خطای بیت توازن (parity) حافظه رخ میدهد یا وقفه نقص برق.
• وقفه (Super Visor Call) که در واقع یک تقاضا از طرف برنامه کاربر جهت دریافت سرویس ویژهای از سیستم عالم است .
• وقفه Restart که با فشار دادن دکمه Reset ایجاد میشود .
در یک تقسیم بندی کلی میتوان وقفههای را سه دسته کرد:
1. وقفههای داخلی (trap) که بر اثر اجرای دستورات خود برنامه به صورت داخلی در CPU رخ میهند.
2. وقفههای خارجی که از دستگاههای خارجی مثل دستگاههای ورودی یاخروجی ,DMA,تایمرها , صفحه کلید و خطاهای سخت افزاری ناشی میشوند.
3. وقفههای نرم افزاری ( یاهمان SVC ) که بر اثر فراخوانی توابع سیستمی توسط برنامه رخ میدهند.
با اجرای مجدد برنامه , وقفههای داخلی به همان صورت قبلی دوباره رخ میدهند ولی وقفههای خارجی مستقل از دستورات برنامه و ناهمگام با برنامه میباشند.
اگر چند منبع همزمان تقاضاهایشان را از طریق یک خط وقفه به CPU اعلام کنند , آنگاه CPU با روش همه پرسی یا سرکشی(polling) منبع وقفه دهنده را تشخیص خواهد داد.
د) فراخوانی سیستمی :
فراخوان های سیستمی رابط ما بین سیستم عامل و برنامههای کاربردی میباشند. در زبان سطح بالایC و پاسکال مستقیماً میتوان این فراخوانهای سیستمی را به کار برد. از فراخوانهای سیستمی عبارتند از:
• مدیریت پردازشها: مانند ایجاد و اتمام پردازش , بارگذاری و اجرای پردازش در سیستم عامل , تخصیص و آزاد کردن حافظه و غیره.
• مدیریت فایلها و فهرستها: ایجاد و حذف فایل , باز وبسته کردن فایل , خواندن و نوشتن , تغییر صفات فایل و غیره
• مدیریت وسایل: درخواست و رهاسازی وسیله,خواندن و نوشتن در وسیله وغیره
• بدست آوردن اطلاعات : خواندن و تنظیم تاریخ و زمان, خواندن زمان استفاده از سیستم توسط کاربر,تعداد کاربران , میزان فضای آزاد حافظه یا دیسک , نسخه سیستم عامل وغیره.
اکثر سیستم عامل (مثل UNIX,DOS ) به وسایل I/O مشابه فایلها نگاه میکنند و ابزارهای I/Oبا نامهای فایلهای ویژه شناخته میشوند. در این حال برای کار با وسایل I/O میتوان از همان دستورات readو write فایلها استفاده کرد.
اگر چند منبع در یک لحظه همزمان سیگنال وقفه را ارسال کنند,CPUبا تکنیکهایی آنها را اولویت بندی کرده و سپس بر اساس اولویت سرویس میدهد.
CPU به جای تکنیک وقفه در سيستم عامل میتواند با تکنیک سرکشی (polling) متوجه شودکه کدام وسیله به سرویس دهی نیاز دارد. دراین حالت ثباتهای کنترلی دستگاههای جانبی مرتباً چک میشود تا نیاز سرویس دهی آنها مشخص گردد. این روش باعث اتلاف وقت CPU میگردد.
انواع سیستم عامل از نظر ساختار :
o تکنیک سیستم یکپارچه
o تکنیک سیستم لایه ای
o سیستم مجازی در سیستم عامل
o سیستم مشتری – خدمتگزار
o زبان های پیاده سازی سیستم عامل
تکنیک سیستم یکپارچه:
سیستمهای تجاری زیادی وجود دارند که ساختار خوش تعریفی ندارند. اغلب این سیستم عاملهابه عنوان سیستم های کوچک و محدودی شروع شدهاند وسپس به تدریج ورای دید اولیه طراحان گسترش یافتهاند .
سیستم عامل 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)به سیستم اضافه میکند و در نتیجه فراخوانی سیستمی نسبت به سیستم غیر لایهای بیشتر طول میکشد. لذا در سالهای اخیر سعی شده است لایههای کمتری با قابلیت عمل بیشتری طراحی شود .
به عنوان مثال محصول اولیه windows NT با لایههای زیاد, کارایی کمتری نسبت به ویندوز 95 داشت . در NT4.0 سعی شد لایه ها به همدیگر نزدیکتر و مجتمع تر شوند تا کارایی بیشتر گردد.
سیستم MULTICS به جای لایهها به صورت یکسری حلقهها متحدالمرکز سازماندهی شده است بطوریکه هر حلقه داخلی از امتیازات بالاتری نسبت به حلقه خارجی خود بهره مند میباشد.اگر یک رویه از حلقه خارجی بخواهد یک رویه از حلقه داخلی را صدا بزند .
بایدیکی را فراخوانهای سیستمی را اجراء کندو اعتبار پارامترهای این دستورالعمل قبل از اجراء به دقت بررسی میشود. مثلاً یک استاد برنامه گرفتن امتحان ونمره دادن را در حلقه n مینویسد و برنامه دانشجویانش در حلقه n+1 اجراء میشود, بدین ترتیب دانشجویان نمیتوانند نمره خود را تغییر دهند.
سیستم مجازی در سیستم عامل:
سیستم عامل VM بر روی سیستمهای IBM بهترین مثال از مفهوم ماشین مجازی است . قلب سیستم که به مانیتور ماشین مجازی(Virual Machine Monitor) معروف است ، بر روی سخت افزار عریانی اجراء شده و چند برنامگی را پدید میآورد، این مانیتور مجازی را در لایه بالاتر فراهم میسازد.
این ماشین های مجازی برای کاربران مشابه یک نسخه از سخت افزار عریان هستند که دارای مودهای کابر و هسته ، I/O ، وقفهها و چیزهای دیگر «ماشین حقیقی» میباشند.
به هر کاربر ماشین مجازی خودش داده میشود و او میتواند هر یک از سیستم عاملها یا بستههای نرم افزاری موجود را روی ماشین خودش اجراء کند.
هر کاربر یک برنامه(Conversational Monitor System) مخصوص به خود را دارد که یک سیستم عامل تک کاربره محاورهای است .
http://www.daneshju.ir/forum/imagehosting/66884766289962702.jpg
مزایای این ماشین مجازی عبارتند از:
• در این سیستم دو وظیفه اصلی چند برنامگی و ایجاد واسطه راحت ( مستقل از سخت افزار ) از یکدیگر مجزا شدهاند . مانیتور ماشین مجازی وظیفه چند برنامگی را بر عهده داردو لایه بالای آن وظیفه ایجاد واسطه کاربر با سخت افزار را بر عهده دارد. لذا هریک از این بخشها سادهتر شده و از قابلیت انعطاف بیشتری برخوردارند.
• هر ماشین مجازی از سایر ماشین ها کاملاً جداست . بنابراین هیچ مشکل امنیتی وجود نخواهد داشت و برنامههای کاربران تداخلی با همدیگر ندارند.
• از آنجا که هر ماشین مجازی کاملاً مشابه سخت افزار واقعی است ، هر یک از آنها میتوانند هر سیستم عاملی را مستقلاً اجراء کند. این امر همچنین باعث میشود مراحل تحقیق و توسعه سیستم عاملها راحت تر صورت بگیرد، چرا که دیگر سازندگان سیستم عامل برای تست کردن سیستم عامل تولیدی جدید لازم نیست کل کامپیوتر را در اختیار داشته باشند.
ایده ماشینهای مجازی امروزه نیز جهت رفع مشکلات عدم سازگاری گسترش زیادی یافته است . به عنوان مثال شرکتهای میکروسیستم یا شرکتDEC که کامپیوترهای غیر intel را میسازند مایلند که مشتریهایشان بتوانند برنامه های DOS تحت intel را نیز اجراء کنند. برای این کار یک ماشین مجازی اینتل بر روی پردازنده خود پدید میآورند.
در این حال ماشین مجازی دستورات اینتل را به دستورات پردازنده جدید تبدیل میکند. یا مثلاً کامپیوترpower PC شامل ماشین مجازی Motorola 6800 میباشد . مثال دیگر اجراء شدن DOS تحت محیط ویندوز است،پردازندههای 386 به بعد دارای یک مد مجازی هستند. که میتوانند چندین برنامه تحت DOS تحت ویندوز نیز اجراء شوند (البته به شرطی که دستورالعملهای عادی را اجراء کنند و مستقیماً با پورتهای مهم سر و کار نداشته باشند.)
مثال دیگر از این مفهوم ماشین مجازی زبان جاوا میباشد. کامپایلرزبان جاوا توسط شرکت sun طراحی شده است یک خروجی بایت کد(byte code) تولید میکند. این بایت کدها دستوراتی هستند که بر روی ماشین مجازی جاوا(JVM) اجراء میشوند. جهت اجرای برنامههای جاوا در یک ماشین ، آن کامپیوتر میبایست دارای یک JVM باشد.
امروزه JVM بر روی بسیاری از انواع کامپیوترها (PC،مکینتاش، SUN مینی کامپیوترها و مین فریمها) وجود دارد. JVM همچنین در Microsoft Explorer ویندوز پیاده سازی شده است . بدین ترتیب برنامههایی که به زبان java نوشته شدهاند به راحتی بر روی انواع کامپیوترها اجراء میشوند. فقط کافی است بایت کدها را روی آن ماشین کامپایل کرد. بدیهی است به علت نیاز به کامپایل شدن بایت کدها ، برنامه های جاوا سرعت کمتری نسبت به برنامههایی نظیر C دارد .
برنامه های C توسط کامپایلر بومی یک کامپیوتر ، برای یک بار تبدیل به زبان ماشین آن کامپیوتر میگردد. پس خروجی زبان ماشین کامپایلر c از یک نوع کامپیوتر به کامپیوتر دیگر متفاوت است ولی بایت کدهای خروجی جاوا برای همه ماشین ها یکسان است.
سیستم مشتری – خدمتگزار :
سیستم عامل VM با جابجا کردن بخش زیادی از کد سیستم عامل به لایه بالاتر (یعنی CMS ) باعث ساده شدن هسته اصلی یعنی مانیتور ماشین مجازی شد. با این همه هنوز هم VM یک برنامه پیچیده میباشد.
روند طراحی سیستم عاملهای جدید همواره با این ایده همراه بوده که تا جایی که ممکن است کدها به عامل را در سطح کاربر و مشابه پردازشهای کاربران پیاده سازی میکنند.
مثلاً برای خواندن یک بلوک از فایل پروسس کاربر پروسس مشتری ( client ) یک در خواست به پروسس خدمتگزار (server) ارسال میکند و از آن میخواهد که کارش را انجام داده و جواب برگرداند. در این مدل تنها کاری که هسته انجام میدهد این است که ارتباط بین مشتریها و خدمتگزارها را از طریق پیامها بر قرار میسازد.
مزایای این مدل عبارتند از :
• از آنجا که سیستم عامل به چند بخش تقسیم شده که هر یک فقط یکی از وظایف سیستم عامل را انجام میدهند, بنابراین سیستم عامل را میتوان ساده تر طراحی و پیاده سازی کرد.
• به علت اجرای کلیه پروسس های خدمتگزار در مد کاربر (و نه مد هسته ) هیچکدام از آنها دسترسی مستقیم به سخت افزار ندارند. لذا اگر اشکالی مثلاُ در خدمتگزار فایل ایجاد شود فقط موجب اختلال در خدمات فایل خواهد شد و به ندرت موجب خراب شدن کل سیستم میشود.
• فایده دیگر این مدل سازگاری آن برای استفاده در سیستمهای توزیع شده است . از آنجا که یک مشتری به وسیله ارسال پیامهایش با یک خدمتگزار ارتباط برقرار میکند, مشتری نیاز ندارد که بداند آیا به پیغام وی به صورت میلی در ماشین خودش رسیدگی میشود و یا اینکه پیغام از طریق یک شبکه به یک ماشین دور ارسال میشود .
زبان های پیاده سازی سیستم عامل:
سیستم عاملهای اولیه به زبان اسمبلی نوشته میشدند ولی امروز, اکثر سیستم عاملها به زبان Cیا C++نوشته میشوند . سیستم عامل UNIX ,OS/2 و ویندوز بیشتر به زبان C نوشته شدهاند و قسمت اندکی از آنها به زبان اسمبلی است.
مهمترین مزیت استفاده از زبان سطح بالا برای پیاده سازی سیستم عامل قابلیت حمل آن بر روی انواع کامپیوترها و سادگی پیاده سازی , تغییر و بسط دادن سیستم عامل میباشد.
ممکن است ادعا شود پیاده سازی سیستم عامل به زبان C باعث کاهش سرعت و افزایش مصرف حافظه میگردد . اگر چه یک برنامه نویس ماهر زبان اسمبلی , میتواند برنامههای کوچک و بسیار بهینه بنویسد ولی برای برنامههای بزرگ یک کامپایلر خوب, میتواند تحلیل پیچیده تری نسبت به مغز انسان ماهر انجام داده و بهینه سازیهای کاملی را انجام دهد.
لذا در عمل برنامههای بزرگ C کد اسمبلی بهینه تر و کمتری را تولید میکنند, نسبت به حالتی که برنامهنویس بخواهد همان کاری به زبان اسمبلی انجام دهد . از طرف دیگر در عمل کارایی اصلی نتیجه ساختمان داده و الگوریتمهای بهتر است نه نتیجه نوشتن برنامه به زبان اسمبلی .
همچنین اگر چه سیستم عاملها برنامههای بزرگی هستند ولی تنها بخش کوچکی از کد آنها, نسبت به کارایی , بحرانی(Critical) میباشد مثل مدیریت حافظه و زمانبندی CPU . لذا پس از آنکه سیستم عامل به زبان سطح بالا نوشته شد و به درستی عمل کرد می توان روتین های گلوگاه (bottleneck) و مهم را شناسایی کرد و سپس آنها را با روتینهای معادل زبان اسمبلی جایگزین نمود.
پردازش و زمابندی :
• پردازش در سیستم عامل
• حالات یک پردازش
• بلوک کنترلی پردازش
• نخ بند-رشته
• زمان بندی در سیستم عامل
• انواع زمانبندی ها در سیستم عامل
• معیار های زمانبندی در سیستم عامل
پردازش در سیستم عامل :
مهمترین مفهوم در هر سیستم عامل فرآیند یا پردازش (process) است . تمامی نرم افزارهای کامپیوتر از جمله سیستم عامل به تعدادی از پروسس ها سازماندهی و تقسیم بندی میشوند.
یک پردازش برنامهای در حال اجراست . در واقع یک پروسس فقط یک برنامه اجرایی است که علاوه بر کد برنامه (یا بخش متن text segment ) شامل مقدار شمارنده برنامه, رجیسترهای CPU ,پشته و بخش دادهها(Data segment) است . به عبارتی دیگر میتوان گفت که هر پروسس CPU مجازی خود را دارد . در سیستم چند برنامگی CPU از یک پروسس به پروسسی دیگر سوئیچ میکند و هر کدام را به مدت چند ده یا چند صد میلی ثانیه به اجرا در میآورد.
باید دقت کرد که یک برنامه به خودی خود یک پردازش نیست .برنامه الگوریتمی است که محتویات یک فایل بر روی دیسک ذخیره شده است . به عبارتی دیگر برنامه یک نهاد غیر فعال (passive) است .
در حالیکه پردازش یک نهاد فعال(active) میباشد که در حال اجراست .
مثلاً در یک کامپیوتر کاربران متعددی ممکن است در حال اجرای نسخههای متعددی از برنامه ویرایشگر باشند یا مثلاً یک کاربر میتواند چند نسخه از برنامه ویرایشگر را همزمان اجراء کند , در این حال هر کدام از آنها یک پردازش جداگانهاند و اگر چه بخش متن شان (کدشان) یکسان است ولی بخش دادههایشان متفاوت میباشد .
در سیستمها روشی مورد نیاز است تا در حین کار بتوان پروسسهایی را ایجاد کرد یا از بین برد در UNIX و پروسسها توسط فراخوان سیستمی fork پدید میآیند, این فراخوانی یک پردازش فرزند تولید میکند که نسخهای دقیقاً یکسان با پروسس پدر خواهد بود.
به همین ترتیب پردازش فرزند نیز میتواند fork را اجراء کرده و لذا سیستم میتواند درختی از پروسسها داشته باشد. بدیهی است هر پروسس فقط یک پدر دارد ولی میتواند صفر یا چندین فرزند داشته باشد.
حالات یک پردازش:
یک پروسس در زمان حیات خود میتواند دریکی از سه وضعیف اجراء (Running) , آماده (Ready) وبسته (Blocked) قرار گیرد.
هنگامی که دستور اجراء پردزاشی صادر میگردد این پردازش به صف آماده وارد شده و منتظر CPU میماند . انتقال توسط زمانبند پردازش (process sheduler) که بخشی از سیستم عامل است انجام میشود , بدون اینکه خود پروسس از آن اطلاعی داشته باشد. سپس CPU, به پروسس داده میشود تا اجراء گردد .
انتقال زمانی صورت میگیرد که برش زمانی پردازش تمام شده و CPU باید از او گرفته شود , لذا پروسس از حالت Running به حالت Ready میرود . زمانبندی یعنی اینکه در کدام زمان چه پردازشی جهت اجرا انتخاب گردد.
هنگامی که لازم باشد در حال اجرا برای بروز رخدادی ( مثل تکمیل انتقال اطلاعات در دستورات I/O) صبر کند آنگاه از حالت Running به حالت Blocked میرود. پس از رفع علت انتظار ( مثلاً وقفهای اعلام میکند که انتقال پایان یافته ) پردازش به حالت آماده رفته و در صف انتظار CPU قرار میگیرد.
حالت معلق (supend) :
بسیاری از سیستم عاملها با سه حالت Blocked, Running ,Ready پیاده سازی شدهاند ولی اضافه کردن حالت معلق نیز در بسیاری موارد مناسب است . در سیستم قبلی چند فرایند در حافظ نگهداری میشوند و هنگامی که فرایندی منتظر است , CPU میتواند به سراغ فرآیند دیگری برود. اما غالباً سیستم چند برنامهای نیز , CPUمیتواند غالباً بی کار باشد.
برای رفع این مشکل میتوان از تکنیک مبادله استفاده کرد, یعنی تمام یا بخشی از یک فرایند را از حافظه اصلی به دیسک منتقل ساخت . هنگامی که هیچ یک از پردازش های موجود در حافظه اصلی و حالت آماده نیستند, در اینحال سیستم عامل میتواند یکی از پردازش های مسدود را از حافظه اصلی خارج کرده و به صف فرآیندهای معلق روی دیسک ببرد (مبادله کند). وقتی سیستم عامل عمل مبادله به خارج را انجام داد, برای آوردن فرآیند بعدی به حافظه اصلی دو انتخاب دارد .
یا میتواند فرایندی که به تازگی ایجاد شده است را بپذیرد یا فرآیندی که قبلاً معلق بوده را بیاورد.
بلوک کنترلی پردازش:
پردازش برنامه در حال اجراست . ولی از دید سیستم عامل میتوان گفت پردازش در سیستم عامل یکسری ساختمان داده است .
هر پردازش در سیستم عامل در سیستم عامل توسط یک ساختمان داده به نام بلوک کنترل پردازش در سیستم عامل PCB یا process Control Blockنشان داده میشود. PCB شامل اطلاعات زیادی در مورد یک پردازش در سیستم عامل است . این اطلاعات مثلاً هنگامیکه پروسس از «حالت اجرا» به حالت «آماده » میرود لازم است ذخیره شود که اگر دوباره پروسس خواست به حالت اجرا برگردد از همان نقطه ای که قطع شدهبود، به درستی ادامه یابد . این اطلاعات عبارتند از :
حالت جاری پردازش در سیستم عامل : که میتواند، آماده،اجراء یا بسته باشد.
شمارنده برنامه:(program Conuter=PC) که آدرس دستورالعمل بعدی قابل اجرای پردازش در سیستم عامل را نشان میدهد .
محل حفظ ثباتها: هنگام وقوع یا سوئیچ کردن بین پردازشهای پردازش در سیستم عامل جاری میبایست در PCB مربوط ذخیره شوند تابعداً دوباره بازیابی شوند .
اطلاعات زمانبندی CPU : مثل اولویت پردازش در سیستم عامل ، اشارهگرها به صفهای زمانبندی و غیره
اطلاعات مدیرت حافظه: مثل محل قرار گیری پردازش در سیستم عامل در حافظه و مسائل حفاظتی آن.
اطلاعات وضعیت I/O :شامل لیستی از وسایل I/O تخصیص یافته به پردازش در سیستم عامل ، لیست فایلهای باز شده برای پردازش در سیستم عامل و غیره
اطلاعات حسابرسی : مثل میزان زمان CPU مصرف شده برای پردازش در سیستم عامل ، شماره حساب، شماره پردازش در سیستم عامل و غیره
وقتیکه سیستم عامل CPU را به پردازش در سیستم عامل دیگر میدهد با استفاده از PCB تمام اطلاعاتی که جهت راه اندازی مجدد پردازش در سیستم عامل قبل لازم دارد را حفظ میکند. به این عملیات تعویض متن Context Switch انجام میپذیرد .
تعویض متن بوسیله بخشی از سیستم عامل به نام Dispatcher انجام میپذیرد. از آنجا که سیستم عامل خیلی با PCB سرو کار دارد، در بسیاری از کامپیوترها ثباتی سخت افزاری وجود دارد که همیشه PCB پردازش در سیستم عامل در حال اجزا اشاره میکند .
دستوراتی نیز وجود دارند که خیلی سریع اطلاعات را در PCB بار میکنند . عملیات تعویض متن الزاماً سربار اضافی (overhead)روی کامپیوتر ایجاد کرده و قدری از وقت CPU را جهت این کار به هدر میدهد، البته این زمان آنقدر زیاد نیست که بر مزیت چند برنامگی غلبه کند .
زمان تعویض متن تابع سخت افزار میباشد و به طور نمونهای این زمان از 1تا100میکرو ثانیه متغیر است .
زمان بندی در سیستم عامل:
هدف چند برنامگی این است که در همه اوقات ,پردازشی در حالت اجرا وجود داشته باشد تا بهره وری CPU ما بین پردازش ها به قدر مکرر , سوئیچ نماید که کاربران با برنامه در حال اجرا محاوره داشته باشند.
زمانی که بیش از یک پروسس قابل اجرا باشد سیستم عامل باید تصمیم بگیرد که کدامیک اول اجرا شود. بخشی از سیستم عامل که این تصمیم گیری را انجام می دهد زمانبندی (Scheduler) نامیده میشود. پردازشهایی که در حافظه اصلی قرار دارند و منتظر اجرا شدن هستند در صفی به نام صف آماده
(ready queue) قرار میگیرند.
این صف معمولا به شکل یک لیست پیوندی (linked list) پیاده سازی میشود. فرایند صف
(header queue) شامل اشارهگرهایی به اولین و آخرین PCB های لیست میباشد:
البته در سیستم صفهای دیگری نیز وجود دارند, مثل صف وسیله(I/O queue) که مشخص میسازد هر وسیله توسط چه پردازشهایی مورد نیاز است . هر وسیله صف مخصوص به خود را دارد.
پردازش در حال اجرا بنا به دلایل زیر میتواند به صف آماده برود تا زمانبندی مجدد شود:
• پردازش میتواند یک درخواست I/O را صادر نماید و سپس دریک صف I/O منتظر بماند تا به آن سرویس داده شود.
• پردازش میتواند یک پردازش جدید (فرزند) ایجاد نموده و برای اتمام آن صبر کند.
• پردازش به علت تمام شدن برش زمانی (time slice) از CPU جدا میشود تا این امکان به بقیه پردازشها نیز داده شود که از CPU استفاده کنند.
• پردازش منتظر وقوع یک وقفه در سيستم عامل باشد.
انواع زمانبندیها در سیستم عامل:
از یک جنبه زمانبندیهای پردازش در سیستم عامل به سه دسته :
الف) دراز مدت (Long term scheduler)
ب) کوتاه مدت(Short term scheduler)
ج) میان مدت
تقسیم بندی میشوند.
در یک سیستم دسته ای پردازشهای بیشتری نسبت به آنچه فوراً میتوانند اجرا شوند تحویل داده میشوند . این پردازشها در دیسک نگهداری میشوند .زمانبندی دراز مدت (یازمانبندی کار) sheduler Job پروسسهایی را انتخاب کرده و آنها را برای اجرا از دیسک به حافظه اصلی میآورد.
زمانبند کوتاه مدت یا زمانبند CPU از بین پروسسهای موجود در حافظه اصلی که آماده اجرا هستند یک را انتخاب کرده و CPU را به آن اختصاص میدهد. غالبا زمانبند کوتاه مدت هر صد میلی ثانیه یک بار اجراء میشود ولی زمانبند دراز مدت ممکن است هر چند دقیقه یک بار اجرا شود. در واقع زمانبند دراز مدت در جه چند برنامگی (degree of multiprogramming) یعنی تعداد پردازشهای موجود در حافظه را کنترل میکند .
زمانبند دراز مدت وقت زایدی برای تصمیم گیری دارد ولی زمانبند کوتاه مدت میبایست خیلی سریع تصمیمی گیری کند. زمانبند دراز مدت میبایست مخلوط مناسبی از پردازشهای CPU-limiter و I/O limited را جهت قرار گیری در حافظه انتخاب کند تا کارایی CPU و وسایل I/O بهینه شود. در بعضی سیستمها مثل اغلب سیستم های اشتراک زمانی زمانبند دراز مدت وجود ندارد، چرا که هر پردازش در سیستم عامل جدید جهت زمانبند CPU در حافظه گذاشته میشود تا زمان پاسخ دهی به برنامه مناسب باشد.
البته بعضی سیستم عاملها از زمانبند میان مدت نیز استفاده میکنند. بدین ترتیب که گاهی پروسس هایی از حافظه و در واقع از رقابت جهت دریافت CPU حذف شده و به دیسک برده میشوند (swap Out) .بدین ترتیب درجه چند برنامگی کاهش مییابد . سپس در زمانی دیگر پردازش در سیستم عامل مذکور مجددا به حافظه آورده شده (swap in) و اجرایش از همان نقطه قبلی ادامه مییابد، این عملیات به نام مبادله (swapping)معروف است .
زمانبندی CPU به طوری کلی می تواند انحصاری غیر قابل پس گرفتن non preemptive) ) یا غیر انحصاری قابل پس گرفتن preemptive) )باشد.
در سیستم انحصاری فقط هنگامی CPU ازپردازش در حال اجراء گرفته میشود که جهت عملیات I/O یا اتمام پردازش در سیستم عامل فرزند را رخداد دیگری بلوکه شود. بنابراین مفهوم و پیاده سازی الگوریتم زمانبندی انحصاری ساده است .ولی ممکن است پردازشی برای مدت طولانی CPU را جهت محاسبات در اختیار بگیرد.
رد این حال پردازشهای دیگر برای مدتی طولانی انتظار خواهند کشید و این موضوع مخصوصاً برای سیستمهای اشتراک زمانی نامناسب است .لذا در اغلب سیستمها از یک زمان سنج(Timer) داخلی برای ایجاد وقفههای متناوب سخت افزاری جهت گرفتن CPUاستفاده میشود.
در هر وقفه در سیستم عامل ساعت، سیستم عامل اجرا میشود تا تصمیم بگیرد که آیا به پروسس در حال اجرا اجازه ادامه کار را بدهد یا اینکه چون پروسس به اندازه کافی از زمان CPU استفاده کرده آن را معلق نماید تا CPU به پروسس دیگری تخصیص داده شود. فرکانس این وقفه در سیستم عاملهای ساعت معمولا بین 50تا60 بار در ثانیه است . این نوع زمانبندی که در آن پس از تمام شدن برش زمانی معین ، CPU از گرفته میشود زمانبندی غیر انحصاری نام دارد.
معیار های زمانبندی در سیستم عامل:
1. عدالت (fairness) : یعنی اطمینان از اینکه هر پروسس سهم عادلانه و منصفانهای از CPU را دریافت کند.
2. کارایی یا بهره وری (utilization- Efficiency) CPU : یعنی اینکه CPU در تمام زمانها (حتی الامکان) مشغول باشد.
3. زمان پاسخ (Response Time) : یعنی به حداقل رساندن زمان پاسخ برای فرمانهای محاورهای کاربر. این زمان معمولاً با سرعت ابزار خروجی محدود میشود.
4. زمان برگشت یا گردش کار Turnaround) ): یعنی به حداقل رساندن زمانی که کاربران دستهای باید منتظر بمانند تا خروجی آنها پدید آید . فاصله زمانی از لحظه تحویل کار تا لحظه تکمیل کار را زمان برگشت مینامند ولی زمان پاسخ مدت زمانی است که از صدور یک تقاضا تا تولید اولین پاسخ آن طول میکشد (نه زمان خروجی کل برنامه)
زمان بارگذاری در حافظه +زمان عملیات I/O +زمان اجراء+ زمان انتظاردر صف آماده = زمان گردش کار
5. توان عملیاتی یا گذردهی (throughput) به تعداد پردازشهایی که در واحد زمان تکمیل میشوند توان عملیاتی میگویند. الگوریتم زمانبندی باید به گونهای باشد که این معیار را افزایش دهد .
6. زمان انتظار (waiting time) الگوریتم زمانبندی CPU, بر میزان زمان اجرای پردازش یا اعمال I/O اثر نمیکند, بلکه فقط در زمان صرف شده جهت انتظار در صف آماده اثر میگذارد. زمان انتظار , مجموع پریودهای زمانی صرف شده در صف آماده میباشد.
انواع زمانبندی ها:
اولویتها میتوانند بصورت اتوماتیک توسط سیستم نسبت داده شوند و یا از خارج سیستم تعیین گردند, مثلاً ممکن است یک کاربر کار فوری داشته باشد و حاضر باشد به خاطر بدست آوردن سرویس بالاتر هزینه بیشتری بپردازد , یعنی اولویت را بخرد . یک اولویت ممکن است استاتیک باشد یا دینامیک . اولویت استاتیک تغییر نمیکند و بنابراین پیاده سازی آن ساده است.
ولی این نوع اولویت در مقابل تغییرات محیطی عکس العملی نشان نمیدهد . برعکس اولویت دینامیک بر اثر تغییرات محیطی تغییر میکند مثلا ً ممکن است در آغاز یک برنامه اولویت پائینی داشته باشد ولی به تدریج اولویت آن بهبود یابد.
o اول آمده - اول سرویس شده
o زمانبندی نوبت گردشی
o اول کوتاهترین زمان
o کوتاه ترین زمان باقی مانده
o بالا ترین نسبت پاسخ
o دادن اولویت به پردازش
o صفهای چند گانه MQ
o صفهای چند گانه با فید بک
o بلا درنگReal time
o تضمین شده در زمان مقرر
o زمان بندی شانسی
o LPT
اول آمده - اول سرویس شده:
ساده ترین الگوریتم زمانبندی CPU,الگوریتم اول آمده, اول سرویس شده
(first come-first served=FCFS) میباشد . گاهی اوقات به این روش
(first In First Out)FIFO نیز میگویند. در این روش هر پردازش در سیستم عاملی که اولین در خواست CPU را صادر کند , اولین پروسسی خواهد بود که آن را به دست میآورد .
این روش از نوع انحصاری (non- preemptive) است که به سادگی توسط یک صف FIFO پیاده سازی میشود.
هنگامی که پردازش در سیستم عامل CPU را به دست گرفت آن را رها نمیکند مگر اینکه تمام شود یا جهت انجام عملیات I/O به حالت بسته برود.
زمانبندی نوبت گردشی:
این زمانبندی یکی از قدیمیم ترین , ساده ترین , عادلانه ترین و رایجترین الگوریتم های زمانبندی است و از نوع غیر انحصاری (preemptive) میباشد. این الگوریتم شبیه FCFS است ولی به هر پردازش حداکثر به میزان زمانی مشخصی CPU داده میشود.
به عبارتی دیگر یک واحد کوچک زمانی به نام کوانتوم زمانی (time quantum) با برش زمانی (time slice) تعریف میشود که معمولاً بین 10 تا 100 میلی ثانیه است و هر پروسس حداکثر به این میزان میتواند CPU را در اختیار بگیرد. هنگامی که پردازشی CPU را در اختیار دارد دوحالت ممکن است رخ دهد .
یا انفجار محاسباتی جاری کمتر از یک کوانتوم زمانی است که در این حالت پردازش داوطلبانه CPU را رها میکند و منتظر اتمام عملیات I/O میشود (مانند FCFS ) و یا اینکه انفجار محاسباتی بیشتر از یک کوانتوم زمانی است که در این حالت تایمر یک وقفه به سیستم عامل میدهد و سیستم عامل با تعویض متن (Context switch) CPU را از پردازش جاری گرفته و آن را به ته صف آماده میفرستد, سپس از ابتدای صف آماده, پردازش دیگری را جهت اجرا انتخاب میکند :
از این روش در سیستمهای اشتراک زمانی استفاده شده تا زمانهای پاسخ برای کاربران محاورهای بصورت مناسب گارانتی شود.
حد بالای کوانتوم زمانی باید ، به قدری باشد که زمان پاسخ دهی مناسبی داشته باشیم.
حد پایین برش زمانی توسط دو عامل تعیین میشود یکی اینکه باید این برش خیلی بزرگتر از زمان تعویض متن باشد مثلاً هزاران برابر.
دیگر آنکه مقدار برش زمانی بایستی کمی بزرگتر از زمان لازم برای یک فعل و انفعال نوعی باشد چرا که در غیر اینصورت هر کار کوچکی نیاز به چندین برش زمانی خواهد داشت و کارایی سیستم به علت تعویض متنهای متعدد کم میشود.
یک قاعده سرانگشتی این است که طول درصد انفجارهای محاسباتی باید کوتاهتر از کوانتوم زمانی باشند و در عمل برای این امر برش زمانی را حدود 100 میلی ثانیه در نظر میگیرند.
اول کوتاهترین زمان:
در الگوریتم (Shortest Job First) که روشی انحصاری است CPU به پردازش داده میشود که کوچکترین انفجار محاسباتی بعدی را دارد.
البته اصطلاح مناسبتر , «کوتاهترین انفجار محاسباتی بعدی»میباشد. زیرا این زمانبندی بر اساس طول مدت انفجار CPU بعدی عمل میکند و نه بر اساس طول کل پردازش در سیستم عامل . اگر دو پردازش در سیستم عامل مدت انفجار محاسباتی یکسانی داشته باشد براساس FCFS زمانبندی میشوند. این الگوریتم میتواند انحصاری و غیر انحصاری باشد.
این الگوریتم مخصوصاً برای کارهای دستهای که از قبل زمان اجرای آن کارها , مشخص و معین باشد به کار میرود .
مهمترین مشکل در SJF آگاهی از طول درخواست بعدی CPU میباشد. هیچ راهی که طول انفجار محاسباتی بعدی را برای ما مشخص سازد وجود ندارد.
لذا در صورت لزوم مجبوریم آن را پیش بینی کنیم . یعنی انتظار داشته باشیم که طول انفجار بعدی خیلی شبیه طول انفجارهای قبلی باشد.
الگوریتم کوتاه ترین زمان باقیمانده: (SRT)
این الگوریتم همانند الگوریتم کوتاه ترین زمان اجراست ولی به صورت غیر انحصاری عمل می کند.برنامه ای که احتیاج به کمترین زمان جهت تکمیل را دارد ابتدا اجرا می شود.در هنگام انتخاب کارهایی که تازه وارد صف شده اند هم در نظر گرفته می شود.این الگوریتم هم مانند الگوریتم کوتاه ترین زمان اجرا به اطلاعات آینده نیازمند است.
بالا ترین نسبت پاسخ :
زمانبندی Highest Response Ratio Next) HRRN ) نوعی زمانبندی انحصاری است که بعضی از مشکلات SJF را برطرف میسازد. در SJF نظر افراطی خوبی نسبت به کارهای کوتاه و برعکس نظر افراطی بدی نسبت به کارهای طولانی وجود دارد به طوری که ممکن است مشکل قحطی زدگی رخ دهد. در این زمانبندی اولویت ها دینامیک است.
کارهای کوتاهتر اولویت بیشتری داشته و زودتر اجراء میشوند. کارهای طولانی نیز که مدت زیادی در صف انتظار بوده اند اولویت بیشتری کسب کرده و بالاخره در یک زمان معین اجراء میشوند. بدین ترتیب مشکل قحطی زدگی برطرف میشود.
الگوریتم اولویت به پردازش (Priority) :
در این الگوریتم به هرفرآیند یک اولویت داده می شود و پردازنده به فرآیند با بیشترین اولیت می پردازد.این الگوریتم هم می تواند انحصاری و هم می تواند غیر انحصاری باشد.
الگوریتم صف حالت خاصی از الگوریتم اولیت است.
زمانبندی صفهای چند گانه Multiple queues :
هنگامی که بتوان فرآیندها را به سادگی به دستههای متفاوت طبقه بندی کرد از این روش استفاده میگردد.
در الگوریتم صفهای چندگانه, صف آماده, به صف های جداگانه مختلفی تجزیه میشود و هر پردازش وارد یک صف میگردد. اولویت صفها با هم فرق داشته و هر صفی الگوریتم زمانبندی خود را دارد.
صفهای چند گانه با فید بک:
در روش این هنگامی که یک پردازش وارد صفی میشود , نمیتواند از آن صف خارج شده و وارد صف دیگری گردد. ولی در زمانبندی صفهای چند گانه با فیدبک (Multilevel Feedback Queue) پردازشها میتوانند بین صفها جابه جا گردند.
این نوع زمانبندی با پارامترهای زیر مشخص میگردد:
• تعداد صفها
• الگوریتم زمانبندی هر صف
• روشی که مشخص میسازد در چه زمان پردازشی به صف با اولویت بالاتر یا پایین تر منتقل شود
• روشی که مشخصی میسازد پردازش در سیستم عامل جدید به کدام صف وارد شود.
معمولاً این روش زمانبندی در سیستم عاملهای امروزی استفاده میگردد.
بلا درنگReal time :
در سیستم بلادرنگ سخت , پردازش در سیستم عامل ها میبایست در یک زمان تخمین شده اجراء و اتمام شوند , مانند سیستم کنترل موشک . چنین تضمینی در یک سیستم با حافظه ثانویه یا حافظه مجازی غیر ممکن است . در سیستم بلادرنگ نرم (مانند پخش موسیقی) زمان پاسخگویی به پردازش در سیستم عامل مهم است ولی مانند بلادرنگ سخت , حیاتی نیست .
اتفاقاتی که سیستم بلادرنگ باید به آنها پاسخ دهد به دو دسته متناوب و غیر متناوب تقسیم میشوند. وقایع متناوب در فواصل زمانی مساوی اتفاق میافتند ولی وقایع متناوب به صورت تصادفی و تصادفی بوده و غیر قابل پیش بینی میباشند.
روشهای زمانبندی بلادرنگ به دو دسته کلی پویا و ایستا تقسیم میشوند. در حالت ایستا قبل از شروع سیستم , تصمیمات زمانبندی گرفته میشود ولی در حالت پویا تصمیمات زمانبندی در زمان اجرای سیستم انجام میپذیرد . سه روش زمانبندی بلا درنگ پویا عبارتند از:
• الگوریتم نرخ یکنواخت (Rate monotonic) : در این الگوریتم به هر پردازش در سیستم عامل اولویتی متناسب با فرکانس رخداد آن واقعه نسبت داده میشود. مثلاً به پردازشی که هر20 میلی ثانیه تکرار میشود, اولویت 50 و به پردازشی که هر 100 میلی ثانیه تکرار میشود, اولیت 10 داده میشود. این الگوریتم از نوع غیرانحصاری است . میتوان اثبات کرد که این الگوریتم بهینه است.
• الگوریتم ابتدا زودترین مهلت (Earliest deadline first) در این الگوریتم پردازش در سیستم عاملی ابتدا اجراء میشود که فرصتش از همه کمتر است یعنی نزدیکترین مهلت را دارد . این مهلت برای وقایع متناوب برابر زمان رخداد واقعه بعدی میباشد.
• الگوریتم کمترین سستی (least laxity) زمان سستی یک پردازش در سیستم عامل زمانی است که میتواند آماده باقی مانده و اجراء نشود. مثلاً اگر یک پردازش در سیستم عامل به 200 میلی ثانیه وقت CPU احتیاج داشته باشد و250 میلی ثانیه نیز مهلت داشته باشد که کارش را تمام کند, زمان سستی او برابر 250-200=50 میلی ثانیه میباشد. در این الگوریتم پردازشی ابتدا اجراء میگردد که کوچکترین زمان سستی را دارد.
زمانبندی شانسی (Lottery Scheduling) :
دراین الگوریتم سیستم عامل به هر پردازش تعدادی عدد میدهد. تعداد اعداد نسبت داده شده به هر پردازش وابسته به اولویت آن میباشد, یعنی هر چقدر اولویت پردازش بیشتر باشد , اعداد بیشتری به آن داده میشود.
سپس به طور اتفاقی یک عدد تولید شده و پردازشی که آن عدد را در اختیار دارد, CPU را در اختیار می گیرد هر چقدر اولویت برنامه بیشتر باشد, شانس آن برای در اختیار داشتن عدد اتفاقی تولید شده و در نتیجه در اختیار گرفتن پردازنده بالاتر میرود . این الگوریتم انحصاری است.
زمانبندی LPT :
در زمانبندی (Longest Processing Time) هر گاه که پردازندهای آزاد میگردد, از بین کارهای باقی مانده طولانیترین کار را برای اجرا انتخاب میکند. هرچند که این الگوریتم بهینه نیست ولی غالباً منحصر به زمانبندیهایی با طول معقول میشود.
انواع سیستم عامل ها :
• Windows
• Linux
• Unix
• DOS
• OS/2
• Solaris
تهیه و تنظیم : مصطفی كاوه
مقدمه:
به طور کلی نرم افزارهای کامپیوتر به دو گروه تقسیم میشوند:
یکی برنامههای سیستمی که عملیات کامپیوتر را مدیریت میکنند و دیگری برنامههای کاربردی .سیستم عامل (operating system=os) اصلی ترین برنامه سیستمی است که به عنوان رابط بین کاربر و سخت افزار کامپیوتر عمل میکند .
سیستم عامل دو وظیفه (یا هدف) اصلی دارد:
سیستم عامل استفاده از کامپیوتر را ساده میسازد. این بدان معناست که مثلاً کاربر یا برنامه نویس بدون درگیر شدن با مسائل سخت افزاری دیسکها به راحتی فایلی را بر روی دیسک ذخیره و حذف کند . این کار در واقع با به کاربردن دستورات سادهای که فراخوان های سیستمی (System Calls) را صدا میزنند انجام پذیرد .
در صورت عدم وجود سیستم عامل کاربر و یا برنامه نویس میبایست آشنایی کاملی با سخت افزارهای مختلف کامپیوتر (مثل مانیتور ,فلاپی , کی بورد و غیره) داشته باشد و روتینهایی برای خواندن و یا نوشتن آنها به زبانهای سطح پائین بنویسد. از این جنبه به سیستم عامل با عنوان ماشین توسعه یافته(Extended machine) یا ماشین مجازی (Virtual machine) یاد میشود که واقعیت سخت افزار را از دید برنامه نویسان مخفی میسازد.
وظیفه دوم سیستم عامل مدیریت منابع(Resource Management) میباشد, یعنی سیستم عامل باعث استفاده بهینه و سودمند (اقتصادی) از منابع سیستم میگردد. منظور از منابع پردازندهها , حافظهها , دیسکها, موس ها , چاپگرها , فایلها , پورتها و غیره هستند. یک سیستم کامپیوتری منابع نرم افزاری و سخت افزاری بسیار دارد که ممکن است در حین اجراء برنامه لازم باشند , سیستم عامل همانند مدیر منابع عمل کرده و آنها را بر حسب نیاز به برنامههای مشخصی تخصیص میدهد.
سیستم عامل معمولا اولین برنامههای است که پس از بوت شدن در حافظه بار میشود. پس از بار شدن قسمتی از سیستم عامل بطور دائم در حافظه باقی (Resident)میماند. قسمتهای دیگر با توجه به کاربرد کامپیوتر توسط کاربر از دیسک به حافظه آورده میشود.
به قسمت اصلی سیستم عامل که وظایف مهم آن را انجام میدهد هسته یا Kernel گفته میشود. هسته سیستم عامل برنامهای است که در تمامی اوقات بر روی کامپیوتر در حال اجراست.
سیستم عامل و معماری کامپیوتر اثر زیادی بر روی یکدیگر داشتهاند. یعنی جهت سهولت کار با سخت افزارهای جدید , سیستم عاملها توسعه یافتند و همچنین در اثنای طراحی سیستم عاملها , مشخص شد که تغییراتی در طراحی سخت افزار میتواند سیستم عاملها را ساده تر و کارآمدتر سازد .
هر چند که تطبیق نسلهای کامپیوتر با نسلهای سیستم عامل کار درستی نیست ولی این تطبیق که در ادامه انجام میدهیم علت ایجاد سیستم عاملهای جدید را مشخص میسازد.
انواع سیستم های عامل:
سیستمهای عامل انواع گوناگون دارند که با توجه به اندازه کامپیوتر و نوع کاربرد های آن برخی از آنها بسیار ساده و برخی دیگر پیچیده است .
1- سیستم عامل تک برنامه ای single program :
برخی از کامپیوتر ها میتوانند در یک لحظه فقط به پردازش یک برنامه بپردازند . سیستم عامل های این نوع کامپیوتر ها میتوانند برنامه را بارگذاری و اجرا کنند و یا اطلاعات را به دستگاه جانبی بفرستند یا از آن دریافت کنند و دستورات مخصوص خود را به اجرا در آورند .
سیستم عامل های موجود بر روی بیشتر میکرو کامپیوتر ها از این نوع هستند لذا این نوع کامپیوتر ها قادر به اجرای چند برنامه به طور همزمان یا انجام کاری دیگر علاوه بر پردازش یک برنامه نیستند .
2- سیستم عامل های چند برنامه ای multi programming :
برای جلوگیری از تلف شدن وقت واحد پردازشگر این سیستم های عامل طوری طراحی شده اند که میتوانند اجرای چند برنامه را به طور همزمان بر عهده بگیرند . انجام این کار بدین صورت است که در هر لحظه چند برنامه در داخل حافظه موجود هستند به هر کدام از این برنامه ها در مرحله اجرای خاص خود قرار دارند .این برنامه ها به صورت قسمت قسمت مطابق با احتیاجات ورودی و خروجی خود پردازش میشوند . میتوان برای پردازش برنامه ها اولویت هائی را نیز در نظر گرفت در این حالت برنامه هائی که دارای اولویت برای اجرا هستند زود تر از دیگر برنامه ها پردازش خواهند شد به عبارت دیگر اجرای این برنامه ها بر برنامه های دیگری که دارای اولویت نیستند تقدم خواهند داشت . کاربر میتواند بنا به میل خود ترتیب پردازش برنامه ها را تغییر دهد یا برای اجرای برنامه ها اولویت قائل شوند .
3- سیستم عامل برای سیستم هائی با چند استفاده کننده multi user :
کامپیوتر هائی که چند ترمینال ورودی و خروجی مستقل دارند وسیله خوبی برای سرویس دهی به کاربران متعدد هستند . به دلیل اینکه پردازشگر این نوع کامپیوتر ها کار خود را با سرعت زیادی انجام میدهد کاربر هر ترمینال فکر میکند که کامپیوتر فقط در حال انجام عملیات مربوط به آن ترمینال است در صورتی که حقیقت غیر از این است .
سیستم عامل های این نوع کامپیوتر ها کل مسائل مربوط به حافظه و واحد های ذخیره هر ترمینال را تحت کنترل خود دارند .
4- سیستم عامل برای سیستمهائی با پردازش توزیعی distributed processing :
با ظهور و ایجاد شبکه های کامپیوتری متشکل از چند ریز کامپیوتر ارزان قیمت متصل شده به یکدیگر هم بسیاری از محدودیت های ریز کامپیوتر ها حل شده و هم از محبوبیت کامپیوتر های بزرگ گران قیمت کاسته شد سیستم عامل هایی وجود دارند که کامپیوتر های متصل شده به شبکه را تحت کنترل و نظارت خود در می آورند .
تطابق تکنیکهای سیستم عامل با نسل های کامپیوتر:
در نسل اول کامپیوترها (55-1945) که از لامپ خلأ برای ساخت آنها استفاده میشد,زبانهای برنامه نویسی (حتی اسمبلی ) ابداع نشده بودند و سیستم عامل نیز اصلاً وجود نداشت . روند کار به این صورت بود که برنامه نویسان تنها در یک فاصله زمانی مشخص حق استفاده از کامپیوتر بزرگ و گران قیمت را داشتند.
آنها برنامههای خود را توسط تخته مدار سوراخدار ( و بعدها توسط کارتهای پانچ ) و به زبان ماشین به کامپیوتر میدادند. اکثر برنامههای محاسبات عددی معمولی مانند جداول سینوس و کسینوس بود.
• الف) سیستم های دسته ایBatch system
• ب ) سیستم های چند برنامه ایMulti programming
• پ ) سیستم spooling
• ت ) سیستم اشتراک زمانی Time sharing
• س ) سیستم عامل های کامپیوتر های شخصی و شبکه
• ج ) سیستم های توزیع شدهDistributed system
• چ ) سیستم ها ی چند وظیفه ایMulti tasking
• ح) سیستم های چند پردازنده ای Multi processing
• خ) سیستم های بی درنگReal Time
الف) سیستم های دسته ای (Portable Batch System ):
در نسل دوم , کامپیوترها (65-1955) از ترانزیستور ساخته شدند.
طریقه کار با این کامپیوترهای نسل دوم از طریق یک کنسول (Console) بود که تنها اپراتور مخصوص کامپیوتر با آن کار میکرد و کاربران به طور مستقیم با این کامپیوترها محاوره (interaction) نداشتند. کاربر ابتدا برنامه خود را به زبان فرترن یا اسمبلی بر روی کاغذ مینوشت سپس توسط دستگاه Card punch, برنامه را روی کارت های سوراخدار منتقل ساخت . بعد این دسته کارت تهیه شده که شامل برنامه, دادهها و کارتهای کنترل بود به صورت کار (Job) تحویل اپراتور داده میشد . اپراتور بعد از اتمام کار قبلی , دسته کارت جدید را به کامپیوتر میداد تا برنامه را اجراء کند در انتها خروجی برنامه ( که غالباً چاپی بود) را به کاربر تحویل میداد سیستم عامل در این کامپیوترهای اولیه ساده بود و وظیفه اصلی آن انتقال کنترل اتوماتیک از یک کار به کار دیگری بود . سیستم عامل همواره مقیم در حافظه بود و در هر لحظه فقط یک برنامه اجراء میشد.هنگامی که اپراتور مشغول گذاشتن نوارها یا برداشتن کاغذهای چاپ شده بود وقت زیادی از این کامپیوترهای گران قیمت به هدر میرفت .
برای رفع مشکل فوق سیستمهای دستهای (Batch System) ابداع شد . یعنی ابتدا یک سبد پر از دسته کارتها در اتاق ورودی جمع آوری میشد , سپس کلیه آنها به وسیله دستگاه کارتخوان یک کامپیوتر کوچک و نسبتاً ارزان (مثل IBM 1401 ) خوانده شده و بر روی یک نوار ذخیره میگردید. سپس اپراتور نوار را برداشته بر روی کامپیوتر اصلی و گران قیمت که محاسبات را انجام میداد (مانند: IBM7094) نصب میکرد . بعد از آن برنامهای را اجراء میکرد ( یعنی سیستم عامل ) تا اولین کار را از روی نوار برداشته و اجراء کند, خروجی بر روی نوار دیگری نوشته میشد. پس از اتمام هر کار سیستم عمل به صورت خودکار کار بعدی را از نوار میخواند. پس از اجراء همه برنامهها ,اپراتور نوار خروجی را برداشته و دوباره روی کامپیوتر IBM 1401 منتقل میساخت تا عملیات چاپ خروجی ها به صورت off line انجام شود. به این روش کار offline spooling نیز گفته میشود. بیشتر برنامههای نسل دوم به زبان فرترن و اسمبلی برای محاسبات مهندسی و علمی مثل مشتقات جزئی به کار میرفت.
یکی از معایب روش offline- spooling زیاد بودن زمان برگشت گردش (turnaround time) است ,یعنی تأخیر زمانی مابین تحویل کار و تکمیل کار. همچنین در این سیستم اولویت بندی به معنای واقعی وجود ندارد. تنها روش بدست آوردن اولویت این بود که نوار کارهای مهم را ابتدا در ماشین اصلی قرار دهند. حتی در این صورت هم باید چندین ساعت صبر میکردند تا خروجی ها ظاهر شوند. همچنین نیاز به سخت افزار اضافی(مثل کامپیوترهای1401) از دیگر معایب این روش بود.
ب ) سیستم های چند برنامه ای ( Multi programming ):
در نسل سوم کامپیوترها (80-1965) از مدارات مجتمع (Integrated Circuit=IC) برای ساخت کامپیوترها استفاده شد. به طور کلی برنامهها را میتوان به دو دسته تقسیم کرد : یکی برنامه ها با تنگنای محاسباتی CPU boundیا CPU Limiter مانند محاسبات علمی سنگین که بیشتر زمان کامپیوتر صرف محاسبات Cpu میشود ودیگری برنامه های تنگنای I/O Limited)I/O) مانند برنامههای تجاری که بیشتر زمان کامپیوتر صرف ورود دادهها و خروج اطلاعات میشود.
یک اشکال مهم سیستم های دستهای این است که وقتی کار جاری برای تکمیل یک عملیات I/O مثلاً بر روی نوار گردان منتظر میشود. در این حال CPU بیکار میماند و مجبور است صبر کند تا عملیات I/Oبه اتمام برسد. در برنامه های CPU Limited این اتلاف وقت اندک است ولی در برنامه های I/O Limited ممکن است حدود 80 تا 90 درصد وقت CPU به هدر برود.
برای رفع این مشکل از تکنیک multiprogramming استفاده میشود. بدین ترتیب که حافظه به چند قسمت تقسیم شده و در هر قسمت یک برنامه مجزا قرار داده میشود. وقتی که یک کار برای تکمیل عملیات I/O منتظر میماند, پردازنده به کار دیگری داده میشود. اگر تعداد کارهای موجود در حافظه کافی باشد میتوان CPU را تقریباً صد در صد مشغول نگه داشت .
البته نگهداری همزمان چند برنامه در حافظه نیاز به مدیریت خاص حافظه دارد تا برنامهها بر همدیگر اثر سوء نداشته باشند . لذا مدیریت حافظه بحث مهمی در سیستم عامل میباشد.
پ ) سیستم ( spooling):
یکی دیگر از ویژگیهای سیستم عامل نسل سوم SpoolingیاOn Line Spooling)) است که معمولاً همراه چند برنامه گی استفاده میشود. این کلمه مخفف عبارت
( Simultaneous Peripheral OperationonLine ) میباشد. در این سیستم به جای آنکه کارتها از دستگاه کارت خوان مستقیماً وارد حافظه گردند و توسط CPU پردازش شوند ابتدا کاراکتر به کاراکتر در بافری در حافظه قرار گرفته و سپس به صورت بلوکی بر روی دیسک نوشته میشود.
وقتیکه برنامه کاربر اجراء میشود و از سیستم عامل تقاضای ورودی میکند, اطلاعات ورودی به صورت بلوکی و با سرعت زیاد از دیسک خوانده میشوند. به طور مشابه هنگامی که برنامه برای خروجی چاپگر را احضار میکند, خط خروجی در یک بافر کپی شده و سپس در دیسک نوشته میشود. پس اطلاعات خروجی از دیسک بر اساس ترتیب و اولویت در چاپگر چاپ میشوند.
http://www.daneshju.ir/forum/imagehosting/66884766268d2b452.jpg
در واقع اسپولینگ عمل I\O یک کار را با عمل محاسباتی کار دیگر روی هم میاندازد (overlap) . در سیستم اسپولینگ درحالیکه ورودی یک کار از دستگاه ورودی خوانده میشود,کار دیگری در حال چاپ شدن است , در همین بین حتی کار دیگری میتواند در حال پردازش و اجراء باشد . در اسپولینگ برنامه عملیات ورودی و خروجی اش را متناسب با سرعت دیسک (که سریع است) انجام میدهد و نه متناسب با سرعت کارتخوان یا چاپگر (که خیلی کند هستند).
بنابراین سیستم مذکور باعث استفاده بهینه از CPU و سایل I\O میشود و سرعت عمل را بالا میبرد. در این سیستم دیگر نیازی به کامپیوترهای 1401,نوار گردانهای اضافی و حمل نوارها (مانند سیستمهای دستهای ) نداریم.
بلوک دیاگرام یک سیستم اسپولینگ میتواند به صورت زیر باشد:
1- سیستم ورودی کاراکترهایی که توسط کارتخوان وارد میشود را در بلوکهایی جمع آوری کرده وبه کمک مدیر دیسک این بلوکها را بر روی دیسک مینویسد . درانتهای هر مدرک ورودی اطلاعاتی راجع به آن مدرک (مانند محل آن بر روی دیسک , اولویت ,اسم استفاده کننده ) به قسمت زمانبند کار فرستاده میشود.
2- زمانبند کار (Job scheduler) این زمانبند یک لیست از کارهای موجود در ماشین و اطلاعات لازم در مورد مدارک ورودی مورد نیاز هر یک را نگه میدارد. به این لیست انبار کار یا Jobpool یا ـ Joblist نیز گفته میشود. زمانبند کار به پردازنده کار میگوید که کدام کار بعدی را اجرا کند. برای این منظور اطلاعاتی در مورد محل کار و مدارک ورودی آن بر روی دیسک را به پردازنده کار میدهد . همچنین اگر کارهای متعددی منتظر ورود به حافظه باشند و فضای کافی برای همگی در دسترس نباشد , زمانبند کار تعدادی از آنها را انتخاب کرده و به حافظه میآورد.
3- پردازنده کار (Job processor) کار داده شده را اجراء میکند. این پردازنده محل کامپایلرها و سایر نرم افزارهای سیستم را بر روی دیسک میداند. هنگام اجراء پردازنده کار خروجی های خود را به صورت بلوکی بر روی دیسک مینویسد و مدارک خروجی را تشکیل میدهد . پردازنده کار اطلاعاتی راجع به محل و اولیت مدارک خروجی به زمانبند خروجی میدهد.
4- زمانبند خروجی(output scheduler) لیستی از مدارکی که باید چاپ شود را نگه میدارد. وقتی که چاپگر آزاد شد , این زمانبند مدرک بعدی را برای چاپ انتخاب کرده و محل مدرک بر روی دیسک را به سیستم خروجی میگوید.
5- سیستم خروجی بلاکهای خروجی را از روی دیسک خوانده و کاراکتر به کاراکتر (یا خط به خط) آنها را به چاپگر میفرستد.
6- مدیر دیسک (Disk Manager) که وظایف خواندن و نوشتن یک بلاک بر دیسک , تخصیص یک بلاک خالی روی دیسک و برگرداندن یک بلاک به مجموعه فضای آزاد دیسک را بر عهده دارد. در خواستهای مربوطه به دیسک در یک صف به نام (Disk Transfer Queue)DTQ ذخیره میگردد.
البته هر سیستم اسپولینگ یک هماهنگ کننده(Coordinator) دارد که مسئول زمانبندی پردازش های سیستم و فراهم کردن عملیاتی که جهت همگام کردن بکار میآیند میباشد. این عملیات توسط دو روال انجام میپذیرد:
Wait : پردازش جاری را متوقف کرده و دوباره وارد زمانبند میگردد.
Free : یک پردازش ویژه را جهت زمانبندی, آماده میکند.
بافر کردن امکان میدهد که عمل I\Oیک کار با عمل پردازش همان کار همزمان گردد در حالیکه spooling امکان میدهد عملیات I\O و پردازش چندین کار با هم همزمان گردند.
ت ) سیستم اشتراک زمانی( Time sharing ):
این سیستمها از اوایل سالهای 1970 در نسل سوم کامپیوترها معمول شدند. سیستم اشتراک زمانی در واقع تعمیم سیستم چند برنامگی است .
http://www.daneshju.ir/forum/imagehosting/668847662707e115f.jpg
در سیستمهای چند برنامگی کاربر ارتباطی با کامپیوتر نداشت و خطایابی برنامهها مشکل بود چرا که زمان برگشت نسبتاً طولانی اجازه آزمایش کردنهای متعدد را نمیداد. در سیستم اشتراک زمانی کاربر به کمک دو ترمینال (Terminal) که شامل کی برد(برای ورودی) و مانیتور (برای خروجی ) است با کامپیوتر به صورت محاورهای (interactive) رابطه بر قرار میسازد .کاربر مستقیماً دستوراتی را وارد کرده و پاسخ سریع آن را روی مانیتور دریافت میکند. در این سیستمها چندین کاربر به کمک ترمینالهایی که به کامپیوتر وصل است همزمان میتوانند از آن استفاده کنند . در سیستم اشتراک زمانی فقط یک پردازنده وجود دارد که توسط مکانیزمهای زمانبندی بین برنامههای مختلف کاربرها با سرعت زیاد (مثلاً در حد میلی ثانیه) سوئیچ میشودو بنابراین هر کاربر تصور میکند کل کامپیوتر در اختیار اوست .در اینجا تأکید بر روی میزان عملکرد کاربر است یعنی هدف فراهم کردن وسایل مناسب برای تولید ساده نرم افزار و راحتی کاربرد میباشد و نه بالا بردن میزان کاربرد منابع ماشین . کاربر میتواند در هر زمان دلخواه برنامه خود را آغاز یا متوقف سازد و یا برنامه را به صورت قدم به قدم اجراء و اشکال زدایی (debug) کند . سیستمهای دستهای برای اجرای برنامههای بزرگ که نیاز محاورهای کمی دارند مناسب است ولی سیستمهای اشتراک زمانی برای مواردی که زمان پاسخ کوتاه لازم است , استفاده میشوند.
در زمانی که کاربری در حال تایپ برنامهاش یا فکر کردن روی خطاهای برنامه اش میباشدCPU به برنامه کاربر دیگری اختصاص یافته تا آن را اجراء کند .
س ) سیستم عامل های کامپیوتر های شخصی و شبکه :
سال 1980 تاکنون که مدارات مجتمع با مقیاس بزرگ (Large Scale Integrated Circuit) ابداع شدند، به عنوان نسل چهارم کامپیوترها شناخته میشود. در این سالها کامپیوترهای شخصی با قیمتی ارزان و کارآیی بالا و محیط گرافیکی و محاورهای بسیار خوب به سرعت گسترش یافتند. سیستم عاملهای اولیه بر روی PCهامانند DOS فقط تک کاربره و تک برنامهای بودند.
ولی سیستم عاملهای امروزی آن مانند Windows NT خاصیتهای چند برنامگی ،چند کاربره (multiuser) و شبکهای را دارا هستند. با توجه به هزینه اندک سخت افزار اهداف سیستم عامل در طول زمان تغییر کرده است وبرای PCها به جای ماکزیمم کردن درصد استفاده CPU و وسایل جانبی، سیستم به سمت راحتی کاربر پیش میرود.
به تدریج ویژگیهای مهم سیستم عاملهای قدیمی در کامپیوترهای بزرگ (مانند حفاظت حافظه ، حافظه مجازی، محافظت فایلها ، همزمانی پردازشهاو...) بر روی سیستم های PC نیز پیاده سازی شده است .
هنگامی که کامپیوترها از طریق شبکه به هم وصل شوند. به آنها ایستگاههای کاری
(Work stations) میگویند . در یک سیستم عامل شبکه ، کاربران از وجود ماشین های مختلف در شبکه با خبرند. آنها میتوانند از دور وارد یک ماشین شوند و همچنین فایلهای یک ماشین را روی ماشین دیگر کپی کنند.
هر کامپیوتر سیستم عامل محلی خودش را اجراء میکندو کاربر یا کاربران محلی مخصوص به خود را دارد .
ج ) سیستم های توزیع شده(Distributed system ):
سیستم عامل توزیع شده در یک محیط شبکهای اجراء میشود. در این سیستم قسمتهای مختلف برنامه کاربر بدون آنکه خود او متوجه شود میتوانند همزمان در چند کامپیوتر مجزا اجراء شده و سپس نتایج نهایی به کامپیوتر اصلی کاربر بر گردند.
کاربران نباید از این موضوع باخبر شوند که برنامه آنها در کجا به اجراء در میآید و یا فایلهای آنها در کجای شبکه قرار دارد و همه این کارها باید توسط سیستم عامل به صورت خودکار انجام گیرد. به عبارتی دیگر سیستم باید از دید کاربر شفاف باشد و هرچیز را با نام آن فراخوانی کند و کاری به آدرس آن نداشته باشد.
یکی از مزایای مهم سیستمهای توزیع شده سرعت بالای اجرای برنامههاست چرا که یک برنامه همزمان میتواند از چندین کامپیوتر برای اجراء شدنش استفاده کند.
همچنین به علت توزیع شدن اطلاعات, بانکهای اطلاعاتی حجیم میتوانند روی یکسری کامپیوترهای شبکه شده قرار بگیرند. و لازم نیست که همه اطلاعات به یک کامپیوتر مرکزی فرستاده شود که در نتیجه این نقل و انتقالات حجیم زمان زیادی به هدر میرود.
به علت تأخیرهای انتقال در شبکه و نویزهای احتمالی در خطوط انتقالی قابلیت اعتماد اجرای یک برنامه در یک سیستم تنها , بیشتر از قابلیت اجرای آن دریک سیستم توزیع شده است .
همچنین درسیستم توزیع شده اگر یکی از کامپیوترهایی که وظیفه اصلی برنامه جاری را برعهده دارد خراب شود کل عمل سیستم مختل خواهد شد . از طرف دیگر اگر اطلاعاتی همزمان در چند کامپیوتر به صورت یکسان ذخیره گردد ویکی از کامپیوترها خراب شود, دادهها را میتوان از کامپیوترهای دیگر بازیابی کرد از این نظر امنیت افزایش مییابد.
به سیستم های توزیع شده گاهی اوقات سیستمهای Loosely Coupled یا ارتباط ضعیف نیز میگویند,چرا که هر پردازنده کلاک و حافظه مستقلی دارد . پردازندهها از طریق خطوط مخابراتی مختلفی مثل گذرگاههای سریع یا خطوط تلفن ارتباط دارند.
چ ) سیستم ها ی چند وظیفه ای(Multi tasking ):
در تکنیک چندنخی (multitasking) یک فرایند (process) که برنامهای در حال اجراست , میتواند به بخشها یا نخهایی (بندهایی) تقسیم شود که میتوانند به صورت همزمان اجراء شوند.
برنامههایی که چند وظیفه مستقل از هم را انجام میدهند میتوانند به صورت چند نخی نوشته شوند. گاهی اوقات به سیستمهای multithreading سیستمهای چند تکلیفی یا چند وظیفه ای (multitasking)هم گفته میشود.
فرآیند (process)یا پردازش اساس یک برنامه در حال اجراست که منابعی از سیستم به آن تخصیص داده شده است (شامل رجیسترها,حافظه,فایلها و دستگاهها).فرآیند میتواند مجموعهای از یک یا چند نخ باشد.
به نخ, رشته یا بند هم گفته میشود . کلیه اطلاعات مربوط به هر پروسس , در یکی از جداول سیستم عامل به نام جداول process Control Block=PCB ذخیره میشود. این جدول یک آرایه یا لیست پیوندی از ساختارهاست که هر عضو آن مربوط به یکی از پروسسهاست که در حال حاضر موجودیت دارد.
اطلاعات موجود در PCB عبارتند از :
• حالت جاری پردازش
• شماره شناسایی پردازش
• اولیت پردازش
• نشانی حافظه پردازش
• نشانی محل برنامه پردازش بر روی دیسک
• نشانی سایر منابع پردازش
• محلی برای حفظ ثباتها .
ح) سیستم های چند پردازنده ای (Multi processing):
کامپیوترها میتوانند به جای یک CPU چندین CPU داشته باشند که در اینصورت به آنها سیستم multiprocessing میگویند.جهت استفاده از این سیستمهای نیاز به یک سیستم عامل خاص میباشد که بتواند چندین برنامه یانخهای یک فرآیند را به صورت موازی واقعی روی آنها اجراء کند .
سیستم عامل multitasking برای اجراء چند نخ بر روی یک CPU و سیستم عامل multiprocessing برای اجرای چند نخ بر روی چند CPU به کار میروند.
در سیستم چند پردازندهای , CPUها باید بتواند از حافظه , امکانات ورودی و خروجی و گذرگاه Bus سیستم به صورت اشتراکی استفاده کنند .مزایای این سیستمهای عبارتند از :
1. زیاد شدن توان عملیاتی (throughput) .منظور از throughput تعداد کارهایی است که در یک واحد زمانی تمام میشوند. بدیهی است هر چقدر تعداد پردازندهها بیشتر باشد تعداد کارهای تمام شده در یک پریود زمانی نیز بیشتر خواهد بود. البته این نسبت خطی نیست , مثلا اگر تعداد پردازندهها n باشد سرعت اجراء برنامهها nبرابر نمیشود چرا که بخشی از وقت پردازندهها جهت مسائل کنترلی و امنیتی وسوئیچ کردنها به هدر میرود.
*صرفه جویی در هزینهها , از آنجا که پردازندهها منابع تغذیه , دیسکها , حافظهها و ادوات جانبی را به صورت مشترک استفاده میکنند در هزینههای سخت افزاری صرفهجویی میشود.
2. تحمل پذیری در برابر خطا (fault-tolerant) سیستم های مالتی پروسسور قابلیت اعتماد را افزایش میدهند چرا که خرابی یک CPU سبب توقف سیستم نمیشود بلکه تنها سبب کند شدن آن خواهدشد .استمرار عمل با وجود خرابی نیازمند مکانیزمی است که اجازه دهد خرابی جستوجو شده , تشخیص داده شده و در صورت امکان اصلاح شود (یا کنار گذاشته شود). این توانایی به ادامه سرویس , متناسب با سطح بقای سخت افزار ,تنزل مطبوع یا graceful degradationنامیده میشود.
سیستمهای عاملهای چند پردازندهای به دو دسته کلی متقارن و نامتقارن تقسیم میشوند:
در سیستم چند پردازندهای نامتقارن(Asymmetric Multi Processing = ASMP) یک پردازنده جهت اجراء سیستم عامل و پردازندههای دیگر جهت اجرای برنامههای کاربران استفاده میشود. از آنجا که کد سیستم عامل تنها روی یک پروسسور اجراء میشود, ساخت این نوع سیستم عامل نسبتا ساده است و از تعمیم سیستم عامل تک پردازندهای به دست میآید.
این نوع سیستم عاملها برای اجراء روی سخت افزارهای نامتقارن مناسب هستند, مانند کمک پردازنده و پردازندهای که به هم متصل هستند یا دو پردازندهای که از تمام حافظهموجود مشترکا" استفاده نمیکنند . یکی از معایب سیستم عامل نامتقارن غیر قابل حمل بودن (non-portable) آن است . یعنی برای سخت افزارهای مختلف باید سیستم عاملهای مختلفی نوشته شود چرا که نامتقارنی میتواند حالات مختلف داشته باشد.
در سیستم چند پردازندهای متقارن(symmetric Multi Processing = SMP) سیستم عامل میتواند روی هر یک از پروسسورهای آزاد یا روی تمام پردازندهها همزمان اجراء شود. در این حالت حافظه بین تمام آنها مشترک میباشد. تمام پردازندهها اعمال یکسانی را میتوانند انجام دهند. سیستم متقارن از چند جنبه نسبت به نوع نامتقارن برتری دارد:
1- از آنجا که سیستم عامل خود یک پردازش سنگین است اگر فقط روی یک CPU ها اجراء شود باعث میگردد که آن پردازنده همواره بار سنگینی داشته باشد, در حالیکه احتمالاً پردازندههای دیگر بی کار هستند لذا اجراء سیستم عامل روی چند پردازنده باعث متعادل شدن (balancing) بار سیستم میشود.
2- در سیستم نامتقارن اگر پردازنده اجراء کننده سیستم عامل خراب شود کل سیستم خراب میشود ولی در سیستم متقارن از این نظر امینت بیشتر است چرا که اگر یک پردازنده از کار بیفتد سیستم عامل میتواند روی پردازندههای دیگر اجراء شود.
3-بر عکس سیستم عامل نامتقارن , سیستم عامل قابل حمل( portable) بر روی سیستم های سخت افزاری مختلف است .
سیستم عامل SUNOS ورژن 4 از نوع نامتقارن و سیستم عامل Solaris2 ورژن و همچنین windows NT از نوع متقارن میباشند.
وجود پردازندههای متعدد از دید کاربر مخفی است و زمانبندی نخها (Thread) یا فرآیندها (process) روی هر یک از پردازندهها به عهده سیستم عامل است .
گرچه multithreadingو multiprocessingامکانات مستقلی هستند ولی معمولاً با هم پیاده سازی میشوند. حتی در یک ماشین تک پردازندهای , چند نخی کارایی را افزایش میدهد. همچنین ماشین چند پردازندهای حتی برای فرآیندهای غیر نخی هم کارآمد است .
شکل زیر تفاوت سیستم نامتقارن و متقارن را نشان میدهد :
گاهی اوقات به سیستمهای چند پردازندهای ,سیستمهای Tightly Coupled یا ارتباط محکم نیز گفته میشود. چرا که پردازندهها کلاک (Clock), گذرگاه و همچنین حافظه مشترکی دارند.
خ) سیستم های بی درنگ(Real Time ):
سیستمهای بی درنگ معمولاً به عنوان یک کنترل کننده در یک کاربرد خاص استفاده میشوند. سیستم در این حالت میبایست در زمانی مشخص و معین حتماً جواب مورد نظر را بدهد .
سیستمهای کنترل صنعتی, پزشکی , کنترل موشک و غیره از این دستهاند.
در سیستمهای بی درنگ زمان پاسخ باید سریع و تضمین شده باشد ولی در سیستم اشتراک زمانی مطلوبست که زمان پاسخ سریع باشند (ولی اجباری نیست).درسیستم دستهای هیچ محدودیت زمانی در نظر گرفته نمیشود.
در سیستمهای بی درنگ معمولاً وسایل ذخیره سازی ثانویه وجود ندارد و به جای آن از حافظه های ROM استفاده میشود. سیستم عاملهای پیشرفته نیز در این سیستمها وجود ندارند چرا که سیستم عامل کاربر را از سخت افزار جدا میکند و این جدا سازی باعث عدم قطعیت در زمان پاسخگویی میشود.
سیستمهای بی درنگ با سیتسمهای اشتراک زمانی تناقض دارند لذا نمیتوانند هر دو توأماً وجود داشته باشند . به دلیل نیاز به پاسخ دهی سریع و تضمین شده سیستمهای بلادرنگ از حافظه مجازی و اشتراک زمانی استفاده نمیکنند.
به این سیستمها «بی درنگ سخت» نیز گفته میشود.
در سیستمهای «بی درنگ نرم» یک وظیفه بی درنگ بحرانی, نسبت به سایر وظایف اولیت دارد و تا پایان تکمیل شدنش این ارجحیت را دارا خواهد بود . از آنجا که این سیستمها مهلت زمانی(deadline) را پشتیبانی نمیکنند استفاده آنها در کنترل صنعتی ریسک آور است . هر چند که این سیستمهای بی درنگ نرم میبایست پاسخی سریع داشته باشند ولی مساله پاسخ دهی به حادی سیستمهای بی درنگ سخت نمیباشد.
از کاربردهای سیستم بی درنگ نرم میتوان رزرواسیون شرکتهای هواپیمایی ,چند رسانهای (multimedia) واقعیت مجازی (Virtual reality) را نام برد. این سیستمها به ویژگیهای سیستم عاملهای پیشرفته (که توسط بیدرنگ سخت حمایت نمیشوند) نیازمندند . بعضی از نسخههای UNIX مانند solaris 2 خاصیت بیدرنگ نرم را دارا میباشند.
در برخی کاربردها (مثل کنترل صنعتی)در کامپیوترها از سیستم عامل استفاده نمیشود. از آنجا که در سیستمهای کنترل صنعتی برنامه میبایست در اسرع وقت در مقابل یک اتفاق , از خود عکس العمل نشان دهد , وجود واسطه سیستم عامل باعث کند شدن مراحل میگردد.
ساختار سیستم عامل :
• الف) خدمات و مولفه های سیستم عامل:
o مدیریت پردازش در سیستم عامل
o مدیریت حافظه در سیستم عامل
o مدیریت فایل در سیستم عامل
o مدیریت ورودی- خروجی در سیستم عامل
• ب) مفسر فرمان
• ج) وقفه در سيستم عامل
• د) فراخوانی سیستمی
الف) خدمات و مولفه های سیستم عامل:
o مدیریت پردازش در سیستم عامل:
یک برنامه حاوی دستورالعملهایی است که توسط CPU اجراء میشوند و حاوی دادههایی است که هنگام اجرای دستورات از آنها استفاده میشود. برنامه در واقع یک موجودیت passive است مانند محتوای یک فایل بر روی دیسک . ولی پردازش در سیستم عامل یک برنامه در حال اجراء میباشد که موجودیتی active دارد. یک برنامه کاربر که در سیستم اشتراک زمانی در حال اجرا است یک پروسس (فرایند) میباشد, به همین ترتیب یک وظیفه سیستم مثل اسپولینگ خروجی به چاپگر نیز یک پروسس است .یک فرایند منابع مشخصی را نیاز دارد مثل CPU, حافظه , وسایل I/O و فایلها . پردازش در سیستم عامل واحد کار در سیستم است . یعنی یک سیستم مجموعهای از پردازشهای گوناگون است . سیستم عامل در رابطه با مدیریت پردازش وظایف زیر را بر عهده دارد. ایجاد و حذف پردازش در سیستم عامل های کاربر و سیستم – زمانبندی پردازشها واینکه در هر زمان کدام پردازش در سیستم عامل CPU را در اختیار داشته باشد – مدیریت همزمانی پردازشها و ارتباط بین آنها و جلوگیری از بن بست (deadlock) بن بست حالتی است که پردازشها در یک حلقه بسته منتظر تمام شدن وظایف همدیگر هستندو بنابراین هیچیک نمیتوانند اجراء گردند و سیستم قفل میشود.
o مدیریت حافظه و فضای ذخیره سازی در سیستم عامل :
سیستم عامل در رابطه با مدیریت حافظه دو عملیات اساسی را انجام خواهد داد :
هر پردازه یه منظور اجراء می بایست دارای حافظه مورد نیاز و اختصاصی خود باشد .
از انواع متفاوتی حافظه در سیستم استفاده تا هر پردازه قادر به اجراء با بالاترین سطح کارآئی باشد.
سیستم عامل در ابتدا می بایست محدودههای حافظه مورد نیاز هر نوع نرم افزار و برنامههای خاص را فراهم نمایند. مثلا" فرض کنید سیستمی دارای یک مگابایت حافظه اصلی باشد. سیستم عامل کامپیوتر فرضی، نیازمند 300 کیلو بایت حافظه است. سیستم عامل در بخش انتهائی حافظه مستقر و بهمراه خود درایورهای مورد نیاز یه منظور کنترل سخت افزار را نیز مستقر خواهد کرد. درایورهای مورد نظر به 200 کیلو بایت حافظه نیاز خواهند داشت. بنابراین پس از استقرار سیستم عامل بطور کامل در حافظه، 500 کیلو بایت حافظه باقیمانده و از آن برای پردازش برنامههای کاربردی استفاده خواهد شد. زمانیکه برنامههای کاربردی در حافظه مستقر می گردند، سازماندهی آنها در حافظ بر اساس بلاک هائی خواهد بود که اندازه آنها توسط سیستم عامل مشخص خواهد شد. در صورتی که اندازه هر بلاک 2 کیلوبایت باشد، هر یک از برنامههای کاربردی که در حافظه مستقر می گردنند، تعداد زیادی از بلاک های فوق را (مضربی از دو خواهد بود)، بخود اختصاص خواهند داد. برنامهها در بلاک هائی با طول ثابت مستقر می گردند. هر بلاک دارای محدودههای خاص خود بوده که توسط کلمات چهار و یا هشت بایت ایجاد خواهند شد. بلاک ها و محدو دههای فوق این اطمینان را بوجود خواهند آورد که برنامهها در محدودههای متداخل مستقر نخواهند شد. پس از پر شدن فضای 500 کیلوبایت اختصاصی برای برنامههای کاربردی، وضعیت سیستم به چه صورت تبدیل خواهد گردید؟
در اغلب کامپیوترها، می توان ظرفیت حافظه را ارتقاء و افزایش داد. مثلا" می توان میزان حافظه RAM موجود را از یک مگابایت به دو مگابایت ارتقاء داد. روش فوق یک راهکار فیزیکی برای افزایش حافظه بوده که در برخی موارد دارای چالش های خاص خود می باشد. در این زمینه می بایست راهکارهای دیگر نیز مورد بررسی قرار گیرند. اغلب اطلاعات ذخیره شده توسط برنامهها در حافظه، در تمام لحظات مورد نیاز نخواهد نبود. پردازنده در هر لحظه قادر به دستیابی به یک محل خاص از حافظه است. بنابراین اکثر حجم حافظه در اغلب اوقات غیر فابل استفاده است. از طرف دیگر با توجه به اینکه فضای ذخیره سازی حافظهها ی جانبی نظیر دیسک ها بمراتب ارزانتر نسبت به حافظه اصلی است، می توان با استفاده از مکانیزمهائی اطلاعات موجود در حافظه اصلی را خارج و آنها را موقتا" بر روی هارد دیسک ذخیره نمود. بدین ترتیب فضای حافظه اصلی آزاد و در زمانیکه به اطلاعات ذخیره شده بر روی هارد دیسک نیاز باشد، مجددا" آنها را در حافظه مستقر کرد. روش فوق " مدیریت حافظه مجازی " نامیده میشود.
حافطههای ذخیره سازی دیسکی، یکی از انواع متفاوت حافظه موجود بوده که می بایست توسط سیستم عامل مدیریت گردد. حافطههای با سرعت بالای Cache، حافظه اصلی و حافظههای جانبی نمونههای دیگر از حافظه بوده که توسط سیستم عامل مدیریت گردند.
http://www.daneshju.ir/forum/imagehosting/6688476627dd052e3.gif
o مدیریت فایل در سیستم عامل:
جهت استفاده ساده از اطلاعات کامپیوتر,سیستم عامل دید منطقی یکسانی از اطلاعات ذخیره شده روی انواع وسایل ذخیره سازی مثل هارد دیسک ,فلاپی,نوار یا دیسکهای نوری پدید میآورد.
سیستم عامل خواص فیزیکی وسایل را از دید کاربر مخفی کرده و یک واحد ذخیره منطقی به نام فایل ارائه میکند. سیستم عامل دررابطه با فایل وظایف زیر را انجام میدهد :
• ایجاد وحذف فایلها
• ایجادو حذف دایرکتوریها
• انجام عملیات کپی
• انتقال و تغییرات بر روی فایها و دایرکتوریها
• ذخیره سازی ومدیریت قرار گیری فایلها بر روی رسانهها
• مدیریت دسترسی های مختلف به فایلهای مشترک
ب) مفسر فرمان :
یکی از مهمترین برنامههای سیستم عامل مفسر فرمان است که در واقع واسط بین کاربردو سیستم عامل میباشد .
بعضی از سیستم عاملها مفسر فرمان را در هسته خود (kernel) قرار دادهاند و بعضی دیگر مثل DOS و UNIX مفسر فرمان را (که پوسته یا Shell نیز معروف است )مانند یک برنامه خاص که در اولین برقراری ارتباط اجراء میشود در نظر میگیرند.
مفسر فرمان دستورات کاربر را گرفته و آنهارا اجراء میکند. در پوسته DOS و UNIX فرمانها از طریق صفحه کلید وارد شده و روی صفحه نمایش رایانه به صورت متنی نشان داده میشود ولی در سیستم عامل ویندوز یا مکینتاش پوسته به صورت محیطی گرافیکی و مبتنی بر پنجرههاست که با زدن کلید موس به راحتی میتوان دستورات را وارد کرد.
ج) وقفه در سيستم عامل:
وقفهها جزء مهمی از معماری کامپیوتر هستندو نحوه عملکرد آنها از ماشینی به ماشین دیگر ممکن است متفاوت باشد. وقفه راهکاری را فراهم میسازد تا اجرای دستورالعملهای جاری پردازنده موقتاً متوقف شده و دستورات سرویس دهی دیگری اجراء گردد و سپس از آن کنترل دوباره به برنامه وقفه داده شده باز گردد.
انواع وقفهها را میتوان به صورت زیر دسته بندی کرد:
• وقفههای برنامه (یاprogram check ) که به دلیل اجرای بعضی دستورات رخ میدهند. مثلاً سرریز شدن محاسباتی تقسیم بر صفر, اجراء دستورالعمل غیر مجاز, رجوع به آدرس خارج از محدوده مجاز کاربر. به این وقفهها اغلب Trap یا تله گفته میشود.
• وقفههای زمان سنج(Timer) این وقفه به سیستم عامل امکان میدهد بعضی اعمال را به صورت مرتب در یک پریود زمانی خاص انجام دهد (مثل تنظیم ساعت, چک کردن سخت افزار و...)
• وقفههای I/O این وقفهها به وسیله کنترل کنندههای دستگاه I/O تولید میشوند تا کامل شدن طبیعی یک عمل یا بروز خطا در انجام عمل را نشان دهند.
• وقفههای نقص سخت افزار یا وقفههای Machine-check) ) مثل وقفهای که بر اثر خطای بیت توازن (parity) حافظه رخ میدهد یا وقفه نقص برق.
• وقفه (Super Visor Call) که در واقع یک تقاضا از طرف برنامه کاربر جهت دریافت سرویس ویژهای از سیستم عالم است .
• وقفه Restart که با فشار دادن دکمه Reset ایجاد میشود .
در یک تقسیم بندی کلی میتوان وقفههای را سه دسته کرد:
1. وقفههای داخلی (trap) که بر اثر اجرای دستورات خود برنامه به صورت داخلی در CPU رخ میهند.
2. وقفههای خارجی که از دستگاههای خارجی مثل دستگاههای ورودی یاخروجی ,DMA,تایمرها , صفحه کلید و خطاهای سخت افزاری ناشی میشوند.
3. وقفههای نرم افزاری ( یاهمان SVC ) که بر اثر فراخوانی توابع سیستمی توسط برنامه رخ میدهند.
با اجرای مجدد برنامه , وقفههای داخلی به همان صورت قبلی دوباره رخ میدهند ولی وقفههای خارجی مستقل از دستورات برنامه و ناهمگام با برنامه میباشند.
اگر چند منبع همزمان تقاضاهایشان را از طریق یک خط وقفه به CPU اعلام کنند , آنگاه CPU با روش همه پرسی یا سرکشی(polling) منبع وقفه دهنده را تشخیص خواهد داد.
د) فراخوانی سیستمی :
فراخوان های سیستمی رابط ما بین سیستم عامل و برنامههای کاربردی میباشند. در زبان سطح بالایC و پاسکال مستقیماً میتوان این فراخوانهای سیستمی را به کار برد. از فراخوانهای سیستمی عبارتند از:
• مدیریت پردازشها: مانند ایجاد و اتمام پردازش , بارگذاری و اجرای پردازش در سیستم عامل , تخصیص و آزاد کردن حافظه و غیره.
• مدیریت فایلها و فهرستها: ایجاد و حذف فایل , باز وبسته کردن فایل , خواندن و نوشتن , تغییر صفات فایل و غیره
• مدیریت وسایل: درخواست و رهاسازی وسیله,خواندن و نوشتن در وسیله وغیره
• بدست آوردن اطلاعات : خواندن و تنظیم تاریخ و زمان, خواندن زمان استفاده از سیستم توسط کاربر,تعداد کاربران , میزان فضای آزاد حافظه یا دیسک , نسخه سیستم عامل وغیره.
اکثر سیستم عامل (مثل UNIX,DOS ) به وسایل I/O مشابه فایلها نگاه میکنند و ابزارهای I/Oبا نامهای فایلهای ویژه شناخته میشوند. در این حال برای کار با وسایل I/O میتوان از همان دستورات readو write فایلها استفاده کرد.
اگر چند منبع در یک لحظه همزمان سیگنال وقفه را ارسال کنند,CPUبا تکنیکهایی آنها را اولویت بندی کرده و سپس بر اساس اولویت سرویس میدهد.
CPU به جای تکنیک وقفه در سيستم عامل میتواند با تکنیک سرکشی (polling) متوجه شودکه کدام وسیله به سرویس دهی نیاز دارد. دراین حالت ثباتهای کنترلی دستگاههای جانبی مرتباً چک میشود تا نیاز سرویس دهی آنها مشخص گردد. این روش باعث اتلاف وقت CPU میگردد.
انواع سیستم عامل از نظر ساختار :
o تکنیک سیستم یکپارچه
o تکنیک سیستم لایه ای
o سیستم مجازی در سیستم عامل
o سیستم مشتری – خدمتگزار
o زبان های پیاده سازی سیستم عامل
تکنیک سیستم یکپارچه:
سیستمهای تجاری زیادی وجود دارند که ساختار خوش تعریفی ندارند. اغلب این سیستم عاملهابه عنوان سیستم های کوچک و محدودی شروع شدهاند وسپس به تدریج ورای دید اولیه طراحان گسترش یافتهاند .
سیستم عامل 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)به سیستم اضافه میکند و در نتیجه فراخوانی سیستمی نسبت به سیستم غیر لایهای بیشتر طول میکشد. لذا در سالهای اخیر سعی شده است لایههای کمتری با قابلیت عمل بیشتری طراحی شود .
به عنوان مثال محصول اولیه windows NT با لایههای زیاد, کارایی کمتری نسبت به ویندوز 95 داشت . در NT4.0 سعی شد لایه ها به همدیگر نزدیکتر و مجتمع تر شوند تا کارایی بیشتر گردد.
سیستم MULTICS به جای لایهها به صورت یکسری حلقهها متحدالمرکز سازماندهی شده است بطوریکه هر حلقه داخلی از امتیازات بالاتری نسبت به حلقه خارجی خود بهره مند میباشد.اگر یک رویه از حلقه خارجی بخواهد یک رویه از حلقه داخلی را صدا بزند .
بایدیکی را فراخوانهای سیستمی را اجراء کندو اعتبار پارامترهای این دستورالعمل قبل از اجراء به دقت بررسی میشود. مثلاً یک استاد برنامه گرفتن امتحان ونمره دادن را در حلقه n مینویسد و برنامه دانشجویانش در حلقه n+1 اجراء میشود, بدین ترتیب دانشجویان نمیتوانند نمره خود را تغییر دهند.
سیستم مجازی در سیستم عامل:
سیستم عامل VM بر روی سیستمهای IBM بهترین مثال از مفهوم ماشین مجازی است . قلب سیستم که به مانیتور ماشین مجازی(Virual Machine Monitor) معروف است ، بر روی سخت افزار عریانی اجراء شده و چند برنامگی را پدید میآورد، این مانیتور مجازی را در لایه بالاتر فراهم میسازد.
این ماشین های مجازی برای کاربران مشابه یک نسخه از سخت افزار عریان هستند که دارای مودهای کابر و هسته ، I/O ، وقفهها و چیزهای دیگر «ماشین حقیقی» میباشند.
به هر کاربر ماشین مجازی خودش داده میشود و او میتواند هر یک از سیستم عاملها یا بستههای نرم افزاری موجود را روی ماشین خودش اجراء کند.
هر کاربر یک برنامه(Conversational Monitor System) مخصوص به خود را دارد که یک سیستم عامل تک کاربره محاورهای است .
http://www.daneshju.ir/forum/imagehosting/66884766289962702.jpg
مزایای این ماشین مجازی عبارتند از:
• در این سیستم دو وظیفه اصلی چند برنامگی و ایجاد واسطه راحت ( مستقل از سخت افزار ) از یکدیگر مجزا شدهاند . مانیتور ماشین مجازی وظیفه چند برنامگی را بر عهده داردو لایه بالای آن وظیفه ایجاد واسطه کاربر با سخت افزار را بر عهده دارد. لذا هریک از این بخشها سادهتر شده و از قابلیت انعطاف بیشتری برخوردارند.
• هر ماشین مجازی از سایر ماشین ها کاملاً جداست . بنابراین هیچ مشکل امنیتی وجود نخواهد داشت و برنامههای کاربران تداخلی با همدیگر ندارند.
• از آنجا که هر ماشین مجازی کاملاً مشابه سخت افزار واقعی است ، هر یک از آنها میتوانند هر سیستم عاملی را مستقلاً اجراء کند. این امر همچنین باعث میشود مراحل تحقیق و توسعه سیستم عاملها راحت تر صورت بگیرد، چرا که دیگر سازندگان سیستم عامل برای تست کردن سیستم عامل تولیدی جدید لازم نیست کل کامپیوتر را در اختیار داشته باشند.
ایده ماشینهای مجازی امروزه نیز جهت رفع مشکلات عدم سازگاری گسترش زیادی یافته است . به عنوان مثال شرکتهای میکروسیستم یا شرکتDEC که کامپیوترهای غیر intel را میسازند مایلند که مشتریهایشان بتوانند برنامه های DOS تحت intel را نیز اجراء کنند. برای این کار یک ماشین مجازی اینتل بر روی پردازنده خود پدید میآورند.
در این حال ماشین مجازی دستورات اینتل را به دستورات پردازنده جدید تبدیل میکند. یا مثلاً کامپیوترpower PC شامل ماشین مجازی Motorola 6800 میباشد . مثال دیگر اجراء شدن DOS تحت محیط ویندوز است،پردازندههای 386 به بعد دارای یک مد مجازی هستند. که میتوانند چندین برنامه تحت DOS تحت ویندوز نیز اجراء شوند (البته به شرطی که دستورالعملهای عادی را اجراء کنند و مستقیماً با پورتهای مهم سر و کار نداشته باشند.)
مثال دیگر از این مفهوم ماشین مجازی زبان جاوا میباشد. کامپایلرزبان جاوا توسط شرکت sun طراحی شده است یک خروجی بایت کد(byte code) تولید میکند. این بایت کدها دستوراتی هستند که بر روی ماشین مجازی جاوا(JVM) اجراء میشوند. جهت اجرای برنامههای جاوا در یک ماشین ، آن کامپیوتر میبایست دارای یک JVM باشد.
امروزه JVM بر روی بسیاری از انواع کامپیوترها (PC،مکینتاش، SUN مینی کامپیوترها و مین فریمها) وجود دارد. JVM همچنین در Microsoft Explorer ویندوز پیاده سازی شده است . بدین ترتیب برنامههایی که به زبان java نوشته شدهاند به راحتی بر روی انواع کامپیوترها اجراء میشوند. فقط کافی است بایت کدها را روی آن ماشین کامپایل کرد. بدیهی است به علت نیاز به کامپایل شدن بایت کدها ، برنامه های جاوا سرعت کمتری نسبت به برنامههایی نظیر C دارد .
برنامه های C توسط کامپایلر بومی یک کامپیوتر ، برای یک بار تبدیل به زبان ماشین آن کامپیوتر میگردد. پس خروجی زبان ماشین کامپایلر c از یک نوع کامپیوتر به کامپیوتر دیگر متفاوت است ولی بایت کدهای خروجی جاوا برای همه ماشین ها یکسان است.
سیستم مشتری – خدمتگزار :
سیستم عامل VM با جابجا کردن بخش زیادی از کد سیستم عامل به لایه بالاتر (یعنی CMS ) باعث ساده شدن هسته اصلی یعنی مانیتور ماشین مجازی شد. با این همه هنوز هم VM یک برنامه پیچیده میباشد.
روند طراحی سیستم عاملهای جدید همواره با این ایده همراه بوده که تا جایی که ممکن است کدها به عامل را در سطح کاربر و مشابه پردازشهای کاربران پیاده سازی میکنند.
مثلاً برای خواندن یک بلوک از فایل پروسس کاربر پروسس مشتری ( client ) یک در خواست به پروسس خدمتگزار (server) ارسال میکند و از آن میخواهد که کارش را انجام داده و جواب برگرداند. در این مدل تنها کاری که هسته انجام میدهد این است که ارتباط بین مشتریها و خدمتگزارها را از طریق پیامها بر قرار میسازد.
مزایای این مدل عبارتند از :
• از آنجا که سیستم عامل به چند بخش تقسیم شده که هر یک فقط یکی از وظایف سیستم عامل را انجام میدهند, بنابراین سیستم عامل را میتوان ساده تر طراحی و پیاده سازی کرد.
• به علت اجرای کلیه پروسس های خدمتگزار در مد کاربر (و نه مد هسته ) هیچکدام از آنها دسترسی مستقیم به سخت افزار ندارند. لذا اگر اشکالی مثلاُ در خدمتگزار فایل ایجاد شود فقط موجب اختلال در خدمات فایل خواهد شد و به ندرت موجب خراب شدن کل سیستم میشود.
• فایده دیگر این مدل سازگاری آن برای استفاده در سیستمهای توزیع شده است . از آنجا که یک مشتری به وسیله ارسال پیامهایش با یک خدمتگزار ارتباط برقرار میکند, مشتری نیاز ندارد که بداند آیا به پیغام وی به صورت میلی در ماشین خودش رسیدگی میشود و یا اینکه پیغام از طریق یک شبکه به یک ماشین دور ارسال میشود .
زبان های پیاده سازی سیستم عامل:
سیستم عاملهای اولیه به زبان اسمبلی نوشته میشدند ولی امروز, اکثر سیستم عاملها به زبان Cیا C++نوشته میشوند . سیستم عامل UNIX ,OS/2 و ویندوز بیشتر به زبان C نوشته شدهاند و قسمت اندکی از آنها به زبان اسمبلی است.
مهمترین مزیت استفاده از زبان سطح بالا برای پیاده سازی سیستم عامل قابلیت حمل آن بر روی انواع کامپیوترها و سادگی پیاده سازی , تغییر و بسط دادن سیستم عامل میباشد.
ممکن است ادعا شود پیاده سازی سیستم عامل به زبان C باعث کاهش سرعت و افزایش مصرف حافظه میگردد . اگر چه یک برنامه نویس ماهر زبان اسمبلی , میتواند برنامههای کوچک و بسیار بهینه بنویسد ولی برای برنامههای بزرگ یک کامپایلر خوب, میتواند تحلیل پیچیده تری نسبت به مغز انسان ماهر انجام داده و بهینه سازیهای کاملی را انجام دهد.
لذا در عمل برنامههای بزرگ C کد اسمبلی بهینه تر و کمتری را تولید میکنند, نسبت به حالتی که برنامهنویس بخواهد همان کاری به زبان اسمبلی انجام دهد . از طرف دیگر در عمل کارایی اصلی نتیجه ساختمان داده و الگوریتمهای بهتر است نه نتیجه نوشتن برنامه به زبان اسمبلی .
همچنین اگر چه سیستم عاملها برنامههای بزرگی هستند ولی تنها بخش کوچکی از کد آنها, نسبت به کارایی , بحرانی(Critical) میباشد مثل مدیریت حافظه و زمانبندی CPU . لذا پس از آنکه سیستم عامل به زبان سطح بالا نوشته شد و به درستی عمل کرد می توان روتین های گلوگاه (bottleneck) و مهم را شناسایی کرد و سپس آنها را با روتینهای معادل زبان اسمبلی جایگزین نمود.
پردازش و زمابندی :
• پردازش در سیستم عامل
• حالات یک پردازش
• بلوک کنترلی پردازش
• نخ بند-رشته
• زمان بندی در سیستم عامل
• انواع زمانبندی ها در سیستم عامل
• معیار های زمانبندی در سیستم عامل
پردازش در سیستم عامل :
مهمترین مفهوم در هر سیستم عامل فرآیند یا پردازش (process) است . تمامی نرم افزارهای کامپیوتر از جمله سیستم عامل به تعدادی از پروسس ها سازماندهی و تقسیم بندی میشوند.
یک پردازش برنامهای در حال اجراست . در واقع یک پروسس فقط یک برنامه اجرایی است که علاوه بر کد برنامه (یا بخش متن text segment ) شامل مقدار شمارنده برنامه, رجیسترهای CPU ,پشته و بخش دادهها(Data segment) است . به عبارتی دیگر میتوان گفت که هر پروسس CPU مجازی خود را دارد . در سیستم چند برنامگی CPU از یک پروسس به پروسسی دیگر سوئیچ میکند و هر کدام را به مدت چند ده یا چند صد میلی ثانیه به اجرا در میآورد.
باید دقت کرد که یک برنامه به خودی خود یک پردازش نیست .برنامه الگوریتمی است که محتویات یک فایل بر روی دیسک ذخیره شده است . به عبارتی دیگر برنامه یک نهاد غیر فعال (passive) است .
در حالیکه پردازش یک نهاد فعال(active) میباشد که در حال اجراست .
مثلاً در یک کامپیوتر کاربران متعددی ممکن است در حال اجرای نسخههای متعددی از برنامه ویرایشگر باشند یا مثلاً یک کاربر میتواند چند نسخه از برنامه ویرایشگر را همزمان اجراء کند , در این حال هر کدام از آنها یک پردازش جداگانهاند و اگر چه بخش متن شان (کدشان) یکسان است ولی بخش دادههایشان متفاوت میباشد .
در سیستمها روشی مورد نیاز است تا در حین کار بتوان پروسسهایی را ایجاد کرد یا از بین برد در UNIX و پروسسها توسط فراخوان سیستمی fork پدید میآیند, این فراخوانی یک پردازش فرزند تولید میکند که نسخهای دقیقاً یکسان با پروسس پدر خواهد بود.
به همین ترتیب پردازش فرزند نیز میتواند fork را اجراء کرده و لذا سیستم میتواند درختی از پروسسها داشته باشد. بدیهی است هر پروسس فقط یک پدر دارد ولی میتواند صفر یا چندین فرزند داشته باشد.
حالات یک پردازش:
یک پروسس در زمان حیات خود میتواند دریکی از سه وضعیف اجراء (Running) , آماده (Ready) وبسته (Blocked) قرار گیرد.
هنگامی که دستور اجراء پردزاشی صادر میگردد این پردازش به صف آماده وارد شده و منتظر CPU میماند . انتقال توسط زمانبند پردازش (process sheduler) که بخشی از سیستم عامل است انجام میشود , بدون اینکه خود پروسس از آن اطلاعی داشته باشد. سپس CPU, به پروسس داده میشود تا اجراء گردد .
انتقال زمانی صورت میگیرد که برش زمانی پردازش تمام شده و CPU باید از او گرفته شود , لذا پروسس از حالت Running به حالت Ready میرود . زمانبندی یعنی اینکه در کدام زمان چه پردازشی جهت اجرا انتخاب گردد.
هنگامی که لازم باشد در حال اجرا برای بروز رخدادی ( مثل تکمیل انتقال اطلاعات در دستورات I/O) صبر کند آنگاه از حالت Running به حالت Blocked میرود. پس از رفع علت انتظار ( مثلاً وقفهای اعلام میکند که انتقال پایان یافته ) پردازش به حالت آماده رفته و در صف انتظار CPU قرار میگیرد.
حالت معلق (supend) :
بسیاری از سیستم عاملها با سه حالت Blocked, Running ,Ready پیاده سازی شدهاند ولی اضافه کردن حالت معلق نیز در بسیاری موارد مناسب است . در سیستم قبلی چند فرایند در حافظ نگهداری میشوند و هنگامی که فرایندی منتظر است , CPU میتواند به سراغ فرآیند دیگری برود. اما غالباً سیستم چند برنامهای نیز , CPUمیتواند غالباً بی کار باشد.
برای رفع این مشکل میتوان از تکنیک مبادله استفاده کرد, یعنی تمام یا بخشی از یک فرایند را از حافظه اصلی به دیسک منتقل ساخت . هنگامی که هیچ یک از پردازش های موجود در حافظه اصلی و حالت آماده نیستند, در اینحال سیستم عامل میتواند یکی از پردازش های مسدود را از حافظه اصلی خارج کرده و به صف فرآیندهای معلق روی دیسک ببرد (مبادله کند). وقتی سیستم عامل عمل مبادله به خارج را انجام داد, برای آوردن فرآیند بعدی به حافظه اصلی دو انتخاب دارد .
یا میتواند فرایندی که به تازگی ایجاد شده است را بپذیرد یا فرآیندی که قبلاً معلق بوده را بیاورد.
بلوک کنترلی پردازش:
پردازش برنامه در حال اجراست . ولی از دید سیستم عامل میتوان گفت پردازش در سیستم عامل یکسری ساختمان داده است .
هر پردازش در سیستم عامل در سیستم عامل توسط یک ساختمان داده به نام بلوک کنترل پردازش در سیستم عامل PCB یا process Control Blockنشان داده میشود. PCB شامل اطلاعات زیادی در مورد یک پردازش در سیستم عامل است . این اطلاعات مثلاً هنگامیکه پروسس از «حالت اجرا» به حالت «آماده » میرود لازم است ذخیره شود که اگر دوباره پروسس خواست به حالت اجرا برگردد از همان نقطه ای که قطع شدهبود، به درستی ادامه یابد . این اطلاعات عبارتند از :
حالت جاری پردازش در سیستم عامل : که میتواند، آماده،اجراء یا بسته باشد.
شمارنده برنامه:(program Conuter=PC) که آدرس دستورالعمل بعدی قابل اجرای پردازش در سیستم عامل را نشان میدهد .
محل حفظ ثباتها: هنگام وقوع یا سوئیچ کردن بین پردازشهای پردازش در سیستم عامل جاری میبایست در PCB مربوط ذخیره شوند تابعداً دوباره بازیابی شوند .
اطلاعات زمانبندی CPU : مثل اولویت پردازش در سیستم عامل ، اشارهگرها به صفهای زمانبندی و غیره
اطلاعات مدیرت حافظه: مثل محل قرار گیری پردازش در سیستم عامل در حافظه و مسائل حفاظتی آن.
اطلاعات وضعیت I/O :شامل لیستی از وسایل I/O تخصیص یافته به پردازش در سیستم عامل ، لیست فایلهای باز شده برای پردازش در سیستم عامل و غیره
اطلاعات حسابرسی : مثل میزان زمان CPU مصرف شده برای پردازش در سیستم عامل ، شماره حساب، شماره پردازش در سیستم عامل و غیره
وقتیکه سیستم عامل CPU را به پردازش در سیستم عامل دیگر میدهد با استفاده از PCB تمام اطلاعاتی که جهت راه اندازی مجدد پردازش در سیستم عامل قبل لازم دارد را حفظ میکند. به این عملیات تعویض متن Context Switch انجام میپذیرد .
تعویض متن بوسیله بخشی از سیستم عامل به نام Dispatcher انجام میپذیرد. از آنجا که سیستم عامل خیلی با PCB سرو کار دارد، در بسیاری از کامپیوترها ثباتی سخت افزاری وجود دارد که همیشه PCB پردازش در سیستم عامل در حال اجزا اشاره میکند .
دستوراتی نیز وجود دارند که خیلی سریع اطلاعات را در PCB بار میکنند . عملیات تعویض متن الزاماً سربار اضافی (overhead)روی کامپیوتر ایجاد کرده و قدری از وقت CPU را جهت این کار به هدر میدهد، البته این زمان آنقدر زیاد نیست که بر مزیت چند برنامگی غلبه کند .
زمان تعویض متن تابع سخت افزار میباشد و به طور نمونهای این زمان از 1تا100میکرو ثانیه متغیر است .
زمان بندی در سیستم عامل:
هدف چند برنامگی این است که در همه اوقات ,پردازشی در حالت اجرا وجود داشته باشد تا بهره وری CPU ما بین پردازش ها به قدر مکرر , سوئیچ نماید که کاربران با برنامه در حال اجرا محاوره داشته باشند.
زمانی که بیش از یک پروسس قابل اجرا باشد سیستم عامل باید تصمیم بگیرد که کدامیک اول اجرا شود. بخشی از سیستم عامل که این تصمیم گیری را انجام می دهد زمانبندی (Scheduler) نامیده میشود. پردازشهایی که در حافظه اصلی قرار دارند و منتظر اجرا شدن هستند در صفی به نام صف آماده
(ready queue) قرار میگیرند.
این صف معمولا به شکل یک لیست پیوندی (linked list) پیاده سازی میشود. فرایند صف
(header queue) شامل اشارهگرهایی به اولین و آخرین PCB های لیست میباشد:
البته در سیستم صفهای دیگری نیز وجود دارند, مثل صف وسیله(I/O queue) که مشخص میسازد هر وسیله توسط چه پردازشهایی مورد نیاز است . هر وسیله صف مخصوص به خود را دارد.
پردازش در حال اجرا بنا به دلایل زیر میتواند به صف آماده برود تا زمانبندی مجدد شود:
• پردازش میتواند یک درخواست I/O را صادر نماید و سپس دریک صف I/O منتظر بماند تا به آن سرویس داده شود.
• پردازش میتواند یک پردازش جدید (فرزند) ایجاد نموده و برای اتمام آن صبر کند.
• پردازش به علت تمام شدن برش زمانی (time slice) از CPU جدا میشود تا این امکان به بقیه پردازشها نیز داده شود که از CPU استفاده کنند.
• پردازش منتظر وقوع یک وقفه در سيستم عامل باشد.
انواع زمانبندیها در سیستم عامل:
از یک جنبه زمانبندیهای پردازش در سیستم عامل به سه دسته :
الف) دراز مدت (Long term scheduler)
ب) کوتاه مدت(Short term scheduler)
ج) میان مدت
تقسیم بندی میشوند.
در یک سیستم دسته ای پردازشهای بیشتری نسبت به آنچه فوراً میتوانند اجرا شوند تحویل داده میشوند . این پردازشها در دیسک نگهداری میشوند .زمانبندی دراز مدت (یازمانبندی کار) sheduler Job پروسسهایی را انتخاب کرده و آنها را برای اجرا از دیسک به حافظه اصلی میآورد.
زمانبند کوتاه مدت یا زمانبند CPU از بین پروسسهای موجود در حافظه اصلی که آماده اجرا هستند یک را انتخاب کرده و CPU را به آن اختصاص میدهد. غالبا زمانبند کوتاه مدت هر صد میلی ثانیه یک بار اجراء میشود ولی زمانبند دراز مدت ممکن است هر چند دقیقه یک بار اجرا شود. در واقع زمانبند دراز مدت در جه چند برنامگی (degree of multiprogramming) یعنی تعداد پردازشهای موجود در حافظه را کنترل میکند .
زمانبند دراز مدت وقت زایدی برای تصمیم گیری دارد ولی زمانبند کوتاه مدت میبایست خیلی سریع تصمیمی گیری کند. زمانبند دراز مدت میبایست مخلوط مناسبی از پردازشهای CPU-limiter و I/O limited را جهت قرار گیری در حافظه انتخاب کند تا کارایی CPU و وسایل I/O بهینه شود. در بعضی سیستمها مثل اغلب سیستم های اشتراک زمانی زمانبند دراز مدت وجود ندارد، چرا که هر پردازش در سیستم عامل جدید جهت زمانبند CPU در حافظه گذاشته میشود تا زمان پاسخ دهی به برنامه مناسب باشد.
البته بعضی سیستم عاملها از زمانبند میان مدت نیز استفاده میکنند. بدین ترتیب که گاهی پروسس هایی از حافظه و در واقع از رقابت جهت دریافت CPU حذف شده و به دیسک برده میشوند (swap Out) .بدین ترتیب درجه چند برنامگی کاهش مییابد . سپس در زمانی دیگر پردازش در سیستم عامل مذکور مجددا به حافظه آورده شده (swap in) و اجرایش از همان نقطه قبلی ادامه مییابد، این عملیات به نام مبادله (swapping)معروف است .
زمانبندی CPU به طوری کلی می تواند انحصاری غیر قابل پس گرفتن non preemptive) ) یا غیر انحصاری قابل پس گرفتن preemptive) )باشد.
در سیستم انحصاری فقط هنگامی CPU ازپردازش در حال اجراء گرفته میشود که جهت عملیات I/O یا اتمام پردازش در سیستم عامل فرزند را رخداد دیگری بلوکه شود. بنابراین مفهوم و پیاده سازی الگوریتم زمانبندی انحصاری ساده است .ولی ممکن است پردازشی برای مدت طولانی CPU را جهت محاسبات در اختیار بگیرد.
رد این حال پردازشهای دیگر برای مدتی طولانی انتظار خواهند کشید و این موضوع مخصوصاً برای سیستمهای اشتراک زمانی نامناسب است .لذا در اغلب سیستمها از یک زمان سنج(Timer) داخلی برای ایجاد وقفههای متناوب سخت افزاری جهت گرفتن CPUاستفاده میشود.
در هر وقفه در سیستم عامل ساعت، سیستم عامل اجرا میشود تا تصمیم بگیرد که آیا به پروسس در حال اجرا اجازه ادامه کار را بدهد یا اینکه چون پروسس به اندازه کافی از زمان CPU استفاده کرده آن را معلق نماید تا CPU به پروسس دیگری تخصیص داده شود. فرکانس این وقفه در سیستم عاملهای ساعت معمولا بین 50تا60 بار در ثانیه است . این نوع زمانبندی که در آن پس از تمام شدن برش زمانی معین ، CPU از گرفته میشود زمانبندی غیر انحصاری نام دارد.
معیار های زمانبندی در سیستم عامل:
1. عدالت (fairness) : یعنی اطمینان از اینکه هر پروسس سهم عادلانه و منصفانهای از CPU را دریافت کند.
2. کارایی یا بهره وری (utilization- Efficiency) CPU : یعنی اینکه CPU در تمام زمانها (حتی الامکان) مشغول باشد.
3. زمان پاسخ (Response Time) : یعنی به حداقل رساندن زمان پاسخ برای فرمانهای محاورهای کاربر. این زمان معمولاً با سرعت ابزار خروجی محدود میشود.
4. زمان برگشت یا گردش کار Turnaround) ): یعنی به حداقل رساندن زمانی که کاربران دستهای باید منتظر بمانند تا خروجی آنها پدید آید . فاصله زمانی از لحظه تحویل کار تا لحظه تکمیل کار را زمان برگشت مینامند ولی زمان پاسخ مدت زمانی است که از صدور یک تقاضا تا تولید اولین پاسخ آن طول میکشد (نه زمان خروجی کل برنامه)
زمان بارگذاری در حافظه +زمان عملیات I/O +زمان اجراء+ زمان انتظاردر صف آماده = زمان گردش کار
5. توان عملیاتی یا گذردهی (throughput) به تعداد پردازشهایی که در واحد زمان تکمیل میشوند توان عملیاتی میگویند. الگوریتم زمانبندی باید به گونهای باشد که این معیار را افزایش دهد .
6. زمان انتظار (waiting time) الگوریتم زمانبندی CPU, بر میزان زمان اجرای پردازش یا اعمال I/O اثر نمیکند, بلکه فقط در زمان صرف شده جهت انتظار در صف آماده اثر میگذارد. زمان انتظار , مجموع پریودهای زمانی صرف شده در صف آماده میباشد.
انواع زمانبندی ها:
اولویتها میتوانند بصورت اتوماتیک توسط سیستم نسبت داده شوند و یا از خارج سیستم تعیین گردند, مثلاً ممکن است یک کاربر کار فوری داشته باشد و حاضر باشد به خاطر بدست آوردن سرویس بالاتر هزینه بیشتری بپردازد , یعنی اولویت را بخرد . یک اولویت ممکن است استاتیک باشد یا دینامیک . اولویت استاتیک تغییر نمیکند و بنابراین پیاده سازی آن ساده است.
ولی این نوع اولویت در مقابل تغییرات محیطی عکس العملی نشان نمیدهد . برعکس اولویت دینامیک بر اثر تغییرات محیطی تغییر میکند مثلا ً ممکن است در آغاز یک برنامه اولویت پائینی داشته باشد ولی به تدریج اولویت آن بهبود یابد.
o اول آمده - اول سرویس شده
o زمانبندی نوبت گردشی
o اول کوتاهترین زمان
o کوتاه ترین زمان باقی مانده
o بالا ترین نسبت پاسخ
o دادن اولویت به پردازش
o صفهای چند گانه MQ
o صفهای چند گانه با فید بک
o بلا درنگReal time
o تضمین شده در زمان مقرر
o زمان بندی شانسی
o LPT
اول آمده - اول سرویس شده:
ساده ترین الگوریتم زمانبندی CPU,الگوریتم اول آمده, اول سرویس شده
(first come-first served=FCFS) میباشد . گاهی اوقات به این روش
(first In First Out)FIFO نیز میگویند. در این روش هر پردازش در سیستم عاملی که اولین در خواست CPU را صادر کند , اولین پروسسی خواهد بود که آن را به دست میآورد .
این روش از نوع انحصاری (non- preemptive) است که به سادگی توسط یک صف FIFO پیاده سازی میشود.
هنگامی که پردازش در سیستم عامل CPU را به دست گرفت آن را رها نمیکند مگر اینکه تمام شود یا جهت انجام عملیات I/O به حالت بسته برود.
زمانبندی نوبت گردشی:
این زمانبندی یکی از قدیمیم ترین , ساده ترین , عادلانه ترین و رایجترین الگوریتم های زمانبندی است و از نوع غیر انحصاری (preemptive) میباشد. این الگوریتم شبیه FCFS است ولی به هر پردازش حداکثر به میزان زمانی مشخصی CPU داده میشود.
به عبارتی دیگر یک واحد کوچک زمانی به نام کوانتوم زمانی (time quantum) با برش زمانی (time slice) تعریف میشود که معمولاً بین 10 تا 100 میلی ثانیه است و هر پروسس حداکثر به این میزان میتواند CPU را در اختیار بگیرد. هنگامی که پردازشی CPU را در اختیار دارد دوحالت ممکن است رخ دهد .
یا انفجار محاسباتی جاری کمتر از یک کوانتوم زمانی است که در این حالت پردازش داوطلبانه CPU را رها میکند و منتظر اتمام عملیات I/O میشود (مانند FCFS ) و یا اینکه انفجار محاسباتی بیشتر از یک کوانتوم زمانی است که در این حالت تایمر یک وقفه به سیستم عامل میدهد و سیستم عامل با تعویض متن (Context switch) CPU را از پردازش جاری گرفته و آن را به ته صف آماده میفرستد, سپس از ابتدای صف آماده, پردازش دیگری را جهت اجرا انتخاب میکند :
از این روش در سیستمهای اشتراک زمانی استفاده شده تا زمانهای پاسخ برای کاربران محاورهای بصورت مناسب گارانتی شود.
حد بالای کوانتوم زمانی باید ، به قدری باشد که زمان پاسخ دهی مناسبی داشته باشیم.
حد پایین برش زمانی توسط دو عامل تعیین میشود یکی اینکه باید این برش خیلی بزرگتر از زمان تعویض متن باشد مثلاً هزاران برابر.
دیگر آنکه مقدار برش زمانی بایستی کمی بزرگتر از زمان لازم برای یک فعل و انفعال نوعی باشد چرا که در غیر اینصورت هر کار کوچکی نیاز به چندین برش زمانی خواهد داشت و کارایی سیستم به علت تعویض متنهای متعدد کم میشود.
یک قاعده سرانگشتی این است که طول درصد انفجارهای محاسباتی باید کوتاهتر از کوانتوم زمانی باشند و در عمل برای این امر برش زمانی را حدود 100 میلی ثانیه در نظر میگیرند.
اول کوتاهترین زمان:
در الگوریتم (Shortest Job First) که روشی انحصاری است CPU به پردازش داده میشود که کوچکترین انفجار محاسباتی بعدی را دارد.
البته اصطلاح مناسبتر , «کوتاهترین انفجار محاسباتی بعدی»میباشد. زیرا این زمانبندی بر اساس طول مدت انفجار CPU بعدی عمل میکند و نه بر اساس طول کل پردازش در سیستم عامل . اگر دو پردازش در سیستم عامل مدت انفجار محاسباتی یکسانی داشته باشد براساس FCFS زمانبندی میشوند. این الگوریتم میتواند انحصاری و غیر انحصاری باشد.
این الگوریتم مخصوصاً برای کارهای دستهای که از قبل زمان اجرای آن کارها , مشخص و معین باشد به کار میرود .
مهمترین مشکل در SJF آگاهی از طول درخواست بعدی CPU میباشد. هیچ راهی که طول انفجار محاسباتی بعدی را برای ما مشخص سازد وجود ندارد.
لذا در صورت لزوم مجبوریم آن را پیش بینی کنیم . یعنی انتظار داشته باشیم که طول انفجار بعدی خیلی شبیه طول انفجارهای قبلی باشد.
الگوریتم کوتاه ترین زمان باقیمانده: (SRT)
این الگوریتم همانند الگوریتم کوتاه ترین زمان اجراست ولی به صورت غیر انحصاری عمل می کند.برنامه ای که احتیاج به کمترین زمان جهت تکمیل را دارد ابتدا اجرا می شود.در هنگام انتخاب کارهایی که تازه وارد صف شده اند هم در نظر گرفته می شود.این الگوریتم هم مانند الگوریتم کوتاه ترین زمان اجرا به اطلاعات آینده نیازمند است.
بالا ترین نسبت پاسخ :
زمانبندی Highest Response Ratio Next) HRRN ) نوعی زمانبندی انحصاری است که بعضی از مشکلات SJF را برطرف میسازد. در SJF نظر افراطی خوبی نسبت به کارهای کوتاه و برعکس نظر افراطی بدی نسبت به کارهای طولانی وجود دارد به طوری که ممکن است مشکل قحطی زدگی رخ دهد. در این زمانبندی اولویت ها دینامیک است.
کارهای کوتاهتر اولویت بیشتری داشته و زودتر اجراء میشوند. کارهای طولانی نیز که مدت زیادی در صف انتظار بوده اند اولویت بیشتری کسب کرده و بالاخره در یک زمان معین اجراء میشوند. بدین ترتیب مشکل قحطی زدگی برطرف میشود.
الگوریتم اولویت به پردازش (Priority) :
در این الگوریتم به هرفرآیند یک اولویت داده می شود و پردازنده به فرآیند با بیشترین اولیت می پردازد.این الگوریتم هم می تواند انحصاری و هم می تواند غیر انحصاری باشد.
الگوریتم صف حالت خاصی از الگوریتم اولیت است.
زمانبندی صفهای چند گانه Multiple queues :
هنگامی که بتوان فرآیندها را به سادگی به دستههای متفاوت طبقه بندی کرد از این روش استفاده میگردد.
در الگوریتم صفهای چندگانه, صف آماده, به صف های جداگانه مختلفی تجزیه میشود و هر پردازش وارد یک صف میگردد. اولویت صفها با هم فرق داشته و هر صفی الگوریتم زمانبندی خود را دارد.
صفهای چند گانه با فید بک:
در روش این هنگامی که یک پردازش وارد صفی میشود , نمیتواند از آن صف خارج شده و وارد صف دیگری گردد. ولی در زمانبندی صفهای چند گانه با فیدبک (Multilevel Feedback Queue) پردازشها میتوانند بین صفها جابه جا گردند.
این نوع زمانبندی با پارامترهای زیر مشخص میگردد:
• تعداد صفها
• الگوریتم زمانبندی هر صف
• روشی که مشخص میسازد در چه زمان پردازشی به صف با اولویت بالاتر یا پایین تر منتقل شود
• روشی که مشخصی میسازد پردازش در سیستم عامل جدید به کدام صف وارد شود.
معمولاً این روش زمانبندی در سیستم عاملهای امروزی استفاده میگردد.
بلا درنگReal time :
در سیستم بلادرنگ سخت , پردازش در سیستم عامل ها میبایست در یک زمان تخمین شده اجراء و اتمام شوند , مانند سیستم کنترل موشک . چنین تضمینی در یک سیستم با حافظه ثانویه یا حافظه مجازی غیر ممکن است . در سیستم بلادرنگ نرم (مانند پخش موسیقی) زمان پاسخگویی به پردازش در سیستم عامل مهم است ولی مانند بلادرنگ سخت , حیاتی نیست .
اتفاقاتی که سیستم بلادرنگ باید به آنها پاسخ دهد به دو دسته متناوب و غیر متناوب تقسیم میشوند. وقایع متناوب در فواصل زمانی مساوی اتفاق میافتند ولی وقایع متناوب به صورت تصادفی و تصادفی بوده و غیر قابل پیش بینی میباشند.
روشهای زمانبندی بلادرنگ به دو دسته کلی پویا و ایستا تقسیم میشوند. در حالت ایستا قبل از شروع سیستم , تصمیمات زمانبندی گرفته میشود ولی در حالت پویا تصمیمات زمانبندی در زمان اجرای سیستم انجام میپذیرد . سه روش زمانبندی بلا درنگ پویا عبارتند از:
• الگوریتم نرخ یکنواخت (Rate monotonic) : در این الگوریتم به هر پردازش در سیستم عامل اولویتی متناسب با فرکانس رخداد آن واقعه نسبت داده میشود. مثلاً به پردازشی که هر20 میلی ثانیه تکرار میشود, اولویت 50 و به پردازشی که هر 100 میلی ثانیه تکرار میشود, اولیت 10 داده میشود. این الگوریتم از نوع غیرانحصاری است . میتوان اثبات کرد که این الگوریتم بهینه است.
• الگوریتم ابتدا زودترین مهلت (Earliest deadline first) در این الگوریتم پردازش در سیستم عاملی ابتدا اجراء میشود که فرصتش از همه کمتر است یعنی نزدیکترین مهلت را دارد . این مهلت برای وقایع متناوب برابر زمان رخداد واقعه بعدی میباشد.
• الگوریتم کمترین سستی (least laxity) زمان سستی یک پردازش در سیستم عامل زمانی است که میتواند آماده باقی مانده و اجراء نشود. مثلاً اگر یک پردازش در سیستم عامل به 200 میلی ثانیه وقت CPU احتیاج داشته باشد و250 میلی ثانیه نیز مهلت داشته باشد که کارش را تمام کند, زمان سستی او برابر 250-200=50 میلی ثانیه میباشد. در این الگوریتم پردازشی ابتدا اجراء میگردد که کوچکترین زمان سستی را دارد.
زمانبندی شانسی (Lottery Scheduling) :
دراین الگوریتم سیستم عامل به هر پردازش تعدادی عدد میدهد. تعداد اعداد نسبت داده شده به هر پردازش وابسته به اولویت آن میباشد, یعنی هر چقدر اولویت پردازش بیشتر باشد , اعداد بیشتری به آن داده میشود.
سپس به طور اتفاقی یک عدد تولید شده و پردازشی که آن عدد را در اختیار دارد, CPU را در اختیار می گیرد هر چقدر اولویت برنامه بیشتر باشد, شانس آن برای در اختیار داشتن عدد اتفاقی تولید شده و در نتیجه در اختیار گرفتن پردازنده بالاتر میرود . این الگوریتم انحصاری است.
زمانبندی LPT :
در زمانبندی (Longest Processing Time) هر گاه که پردازندهای آزاد میگردد, از بین کارهای باقی مانده طولانیترین کار را برای اجرا انتخاب میکند. هرچند که این الگوریتم بهینه نیست ولی غالباً منحصر به زمانبندیهایی با طول معقول میشود.
انواع سیستم عامل ها :
• Windows
• Linux
• Unix
• DOS
• OS/2
• Solaris
تهیه و تنظیم : مصطفی كاوه