در بسیاری از سیستم ها هنگام اجرا دستورات ماشین، ابتدا این دستورات توسط یک ROM به یک سری دستورالعمل های ایتدایی تر به نام ریز دستور یا میکرو کد تبدیل شده و سپس توسط سخت افزار اجرا می گردند که به این ماشین ها CISC(Complex Instruction Set Computer) گفته می شود.
در بعشی از کامپیوترها به نام RISC(Reduced Instruction Set Computer) این سطح ریز برنامه نویسی وجود نداشته و دستورات زبان ماشین مستقیما توسط سخت افزار اجرا می گردند.
تعداد دستورات ماشین های RISC کمتر از کامپیوترهای CISC می باشد.
سیستم عامل چیست؟
به طور کلی نرم افزارهای کامپیوتر به دو گروه تقسیم می شوند: یکی برنامه های سیستمی که عملیات کامپیوتر را مدیریت می کنند و دیگری برنامه های کاربردی.
سیستم عامل(Operation System= OS) اصلی ترین برنامه سیستمی است که به عنوان رابط بین کاربر و سخت افزار کامپیوتر عمل می کند.
سیستم عامل دو دظیفه(یا هدف) اصلی دارد: الف) سیستم عامل استفاده از کامپیوتر را ساده می سازد.
این بدان معناست که مثلا کاربر یا برنامه نویس بدون درگیر شدن با مسائل سخت افزاری دیسکها به راحتی فایلی را بر روی دیسک ذخیره و حذف کند.
این کار در واقع با به کار بردن دستورات ساده ای که فراخوان های سیستمی(System Calls) را صدا می زنند انجام می پذیرد.
در صورت عدم وجود سیستم عامل کاربر و یا برنامه نویس می بایست آشنایی کاملی با سخت افزارهای مختلف کامپیوتر(مثل مونیتور، فلاپی، کی بورد و غیره) داشته باشد و روتین هائی برای خواندن و یا نوشتن آنها به زبانهای سطح پائین بنویسد.
از این جنبه به سیستم عامل با عنوان ماشین توسعه یافته(Extended machine) یا ماشین مجازی(Virtual machine) یاد می شود که واقعیت سخت افزار را از دید برنامه نویسان مخفی می سازد.
ب) واقعیت وظیفه دوم سیستم عامل مدیریت منابع(Resource Management) می باشد، یعنی سیستم عامل باعث استفاده بهینه و سودمند(اقتصادی) از منابع فیزیکی و منطقی سیستم می گردد.
منظور از منابع فیزیکی پردازنده ها، حافظه ها، دیسکها، ماوس ها، چاپگرها، پورتها و غیره و منظور از منابع منطقی اطلاعات، فایلها و غیره هستند.
یک سیستم کامپیوتری منابع نرم افزاری و سخت افزاری بسیاری دارد که ممکن است در حین اجراء برنامه لازم باشند، سیستم عامل همانند مدیر منابع عمل کرده و آنها را بر حسب نیاز به برنامه مشخصی تخصیص می دهد.
مثلا اگر دو برنامه همزمان بخواهند از چاپگر استفاده کنند، سیستم عامل اطلاعات خروجی آنها را در بافری ریخته و سپس به ترتیب و براساس اولویتی از پیش تعیین شده اطلاعات را به چاپگر می فرستد.
بنابراین کار سیستم عامل این است که بداند چه کسانی از کدام منابع استفاده می کنند، به درخواستهای جهت دریافت منابع رسیدگی کند، حسابداری استفاده می کنند، به درخواستهای جهت دریافت منابع رسیدگی کند، حسابداری استفاده از منابع را نگهداری کند و در برابر تداخل درخواستهای مختلف میانجی گری کند.
پس با نگرش از بالا به پائین سیستم عامل فراهم کننده واسطه ای راحت برای کاربران است و با نگرش از پائین به بالا سیستم عامل مدیر کلیه اجزاء و منابع سیستم می باشد.
به بیانی می توان گفت هدف سیستم عامل استفاده بهینه و حداکثر از ماشین و وظیفه سیستم عامل کنترل تمامی منابع و به تعادل رساندن درخواستها و منابع موجود است.
با توجه به توضیحات فوق می توان گفت سیستم عامل مشابه دولت است یعنی مانند دولت سیستم عامل محیطی را که درون آن سایر برنامه های بتوانند کار مفید انجام دهند، ایجاد می کند و هسته سیستم عامل به خودی خود کاری مفید و نهائی را برای کاربر انجام نمی دهد.
به عبارتی دیگر سیستم عامل برنامه کنترلی است که اجرای برنامه های کاربر و استفاده از سخت افزار سیستم را کنترل می کند.
سیستم عامل معمولا اولین برنامه ای است که پس از بوت شدن در حافظه بار می شود.
پس از بار شدن، قسمتی از سیستم عامل بطور دائم در حافظه باقی(Resident) می ماند.
قسمتهای دیگر با توجه به کاربرد کامپیوتر توسط کاربر از دیسک به حافظه آورده می شود.
به قسمت اصلی سیستم عامل که وظایف مهم آن را انجام می دهد هسته یا kernel گفته می شود.
هسته سیستم عامل و معماری کامپیوتر اثر زیادی یکدیگر داشته اند.
یعنی جهت سهولت کار با سخت افزارهای جدید، سیستم عامل ها توسعه یافتند در اثنای طراحی سیستم عامل ها، مشخص شد که تغییراتی در طراحی سخت افزار می تواند سیستم عاملها را ساده تر و کارآمدتر سازد.
هذ چند که تطبیق نسلهای کامپیوتر با نسلهای سیستم عامل کار درستی نیست ولی این تطبیق که در ادامه انجام می دهیم علت ایجاد سیستم عاملهای جدید را مشخص می سازد.
در نسل اول کامپیوترها(55-1945) که از لامپ خلا برای ساخت آنها استفاده می شد، زبانهای برنامه نویسی(حتی اسمبلی) ابداع نشده بودند و سیستم عامل نیز اصلا وجود نداشت.
روند کار به این صورت بود که برنامه نویسان در یک فاصله زمانی مشخص حق استفاده از کامپیوتر بزرگ و گران قیمت را داشتند.
آنها برنامه های خود را توسط تخته مدار سوراخدار( و بعدها توسط کارتهای پانچ) و به زبان ماشین به کامپیوتر می دادند.
اکثر برنامه های محاسبات عددی معمولی مانند جداول سینوس و کسینوس بود.
سیستم های دسته ای Batch Systems در نسل دوم، کامپیوترها(65-1955) از ترانزیستور ساخته شدند.
طریقه کار با این کامپیوترهای نسل دوم از طریق یک کنسول(Console) بود که تنها اپراتور مخصوص کامپیوتر با آن کار می کرد و کاربران به طور مستقیم با این کامپیوترها محاوره(interaction) نداشتند.
کاربر ابتدا برنامه خود را به زبان فرترن یا اسمبلی بر روی کاغذ می نوشت سپس توسط دستگاه Card punch، برنامه را روی کارت های سورخدار منتقل می ساخت.
بعد این دسته کارت تهیه شده که شامل برنامه، داده ها و کارتهای کنترل بود به صورت یک کار(Job) تحویل اپراتور داده می شد.
اپراتور بعد از اتمام کار قبلی، دسته کارت جدید را به کامپیوتر می داد تا برنامه را اجراء کند در انتهل خروجی برنامه(که غالبا چاپی بود) را به کاربر تحویل می داد.
سیستم عامل در این کامپیوترهای اولیه ساده بود و وظیفه اصلی آن انتقال کنترل اتوماتیک از یک کار به کار دیگری بود.
سیستم عامل همواره مقیم در حافظه بود و در هر لحظه فقط یک برنامه اجراء می شد.
هنگامی که اپراتور مشغول گذاشتن نوارها یا برداشتن کاغذهای چاپ شده بود وقت زیادی از این کامپیوترهای گران قیمت به هدر می رفت.
برای رفع مشکل فوق سیستم های دسته ای(Batch System) ابداع شد.
یعنی ابتدا یک سبد پر از دسته کارتها در اتاق ورودی جمع آوری می شد، سپس کلیه آنها به وسیله دستگاه کارتخوان یک کامپیوتر کوچک و نسبتا ارزان(مثل IBM 1401) خوانده شده و بر روی یک نوار ذخیره می گردید.
سپس اپراتور نوار را برداشته بر روی کامپیوتر اصلی و گران قیمت که محاسبات را انجام می داد(مثل IBM 7094) نصب می کرد.
بعد از آن برنامه ای را اجراء می کرد(یعنی سیستم عامل) تا اولین کار را از روی نوار برداشته و اجرا کند، خروجی بر روی نوار دیگری نوشته می شد.
پس از اتمام هر کار سیستم عامل به صورت خودکار کار بعدی را از نوار می خواند.
پس از اجراء همه برنامه ها، اپراتور نوار خروجی را برداشته و دوباره روی کامپیوتر IBM 1401 منتقل می ساخت تا عملیات چاپ خروجی ها به صورت off line انجام شود.
به این روش کار offline spooling نیز گفته می شود.
بیشتر برنامه های نسل دوم به زبان فرترن و اسمبلی برای محاسبات مهندسی و علمی مثل مشتقات جزئی به کار می رفت.
یکی از معایب روش offline- spooling زیاد بودن زمان برگشت(گردش) (turnaround time) است، یعنی تاخیر مابین تحویل کار و تکمیل کار.
همچنین در این سیستم اولویت بندی به معنای واقعی وجود ندارد.
تنها روش بدست آوردن اولویت این بود که نوار کارهای مهم را ابتدا مهم را ابتدا در ماشین اصلی قرار دهند.
حتی در اینصورت هم باید چندین ساعت صبر می کردند تا خروجی ها ظاهر شوند.
همچنین نیاز به سخت افزار اضافی(مثل کامپیوترهای 1401) از دیگر معایب این روش بود.
پس از معایب این روش عبارت است از: 1- گردش طولانی تر کار 2- عدم وجود اولویت 3- نیاز به سخت افزار اضافی.
از مزایای سیستم offline spooling نسبت به سیستم های قبل از آن می توان موارد زیر را ذکر کرد: 1- راندمان بهتر 2- عملیات ساده تر 3- سهولت برای استفاده از راه دور تذکر: در سیستم های اولیه CPU گرانترین جزء کامپیوتر بود و بدین جهت نیاز به بالا بردن درصد استفاده از CPU فاکتور اصلی در طراحی سیستم عاملها بود.
سیستم های چند برنامگی Multiprogramming در نسل سوم کامپیوترها(80-1965) از مدارات مجتمع(Integrated Circuit= IC) برای ساخت کامپیوترها استفاده شد.
به طور کلی برنامه ها را می توان به دو دسته تقسیم کرد: یکی برنامه ها با تنگنای محاسباتی(CPU bound یا CPU Limited) مانند محاسبات علمی سنگین که بیشتر زمان کامپیوتر صرف محاسبات CPU می شود و دیگری برنامه ها با تنگنای I/O(I/O Limited) مانند برنامه های تجاری که بیشتر زمان کامپیوتر صرف ورود داده ها و خروج اطلاعات می شود.
یک اشکال مهم سیستم های دسته ای این است که وقتی کار جاری برای تکمیل یک عملیات I/O مثلا بر روی نوار گردان منتظر می شود، در این حال CPU بیکار می ماند و مجبور است صبر کند تا عملیات I/O به اتمام برسد.
در برنامه های CPU Limited این اتلاف وقت اندک است ولی در برنامه های I/O Limited ممکن است حدود 80 تا 90 درصد وقت CPU به هدر برود.
برای رفع این مشکل از تکنیک multiprogramming استفاده می شود.
بدین ترتیب که حافظه به چند قسمت تقسیم شده و در هر قسمت یک برنامه مجزا قرار داده می شود.
وقتی که یک کار برای تکمیل عملیات I/O منتظر می ماند، پردازنده به کار دیگری داده می شود.
اگر تعداد کارهای موجود در حافظه کافی باشد می توان CPU را تقریبا صد در صد مشغول نگه داشت برای رفع این مشکل از تکنیک multiprogramming استفاده می شود.
اگر تعداد کارهای موجود در حافظه کافی باشد می توان CPU را تقریبا صد در صد مشغول نگه داشت.
البته نگهداری همزمان چند برنامه در حافظه نیاز به مدیریت خاص حافظه دارد تا برنامه ها بر همدیگر اثر سوء نداشته باشند.
لذا مدیریت حافظه بحث مهمی در سیستم عامل می باشد( شکل زیر).
پس سیستم های چند برنامگی فقط یک پردازنده دارند و به کمک مکانیزم وقفه بین کارهای CPU- limited و I/O Limited سوئیچ می شود و به ظاهر اجرای این برنامه ها به صورت موازی و همزمان صورت می گیرد و بدین ترتیب بهره وری از سیستم افزایش می یابد.
یک شیوه برای بالا بردن راندمان CPU آن است که تعدادی کار CPU- Limited را با I/O- Limited مخلوط کنیم.
ولی در عمل امکان تقسیم بندی کارها قبل از اجراء شدنشان وجود ندارد.
از طرف دیگر برنامه های ممکن است در ابتدا CPU-Limited باشد ولی در حین اجراء تبدیل به I/O-Limited گردد.
سیستم های Spooling یکی دیگر از ویژگیهای سیستم عاملهای نسل سوم Spooling(On Line Spooling) است که معمولا همراه چند برنامگی استفاده می شود.
این کلمه مخفف عبارات(Simultaneous Peripheral Operation) می باشد.
در این سیستم به جای آنکه کارتها از دستگاه کارت خوان مستقیما وارد حافظه گردند و توسط CPU پردازش شوند ابتدا کاراکتر به کاراکتر در بافری در حافظه قرار گرفته و سپس به صورت بلوکی بر روی دیسک نوشته می شوند.
وقتیکه برنامه کاربر اجراء می شود و از سیستم عامل تقاضای ورودی می کند، اطلاعات ورودی به صورت بلوکی و با سرعت زیاد از دیسک خوانده می شوند.
به طور مشابه هنگامی که برنامه برای خروجی چاپگر را احضار می کند، خط خروجی در یک بافر کپی شده و سپس در دیسک نوشته می شود.
پس اطلاعات خروجی از دیسک براساس ترتیب و اولویت در چاپگر چاپ می شوند.
در واقع اسپولینگ عمل I/O یک کار را با عمل محاسباتی کار دیگر روی هم می اندازد(overlap).
در سیستم اسپولینگ در حالیکه ورودی یک کار از دستگاه ورودی خوانده می شود، کار دیگری در حال چاپ شدن است، در همین بین حتی کار دیگری می تواند در حال پردازش و اجراء باشد.
در اسپولینگ برنامه عملیات ورودی و خروجی اش را متناسب با سرعت دیسک(که سریع است) انجام می دهد و نه متناسب با سرعت کارتخوان یا چاپگر( که خیلی کند هستند).
بنابراین سیستم مذکور باعث استفاده بهینه از CPU و وسایل I/O می شود و سرعت عمل را بالا می برد.
در این سیستم دیگر نیازی به کامپیوترهای 1401، نوارگردانهای اضافی و حمل نوارها( مانند سیستم های دسته ای) نداریم.
با توجه به توضیحات فوق مزایای سیستم اسپولینگ(نسبت به سیستم دسته ای) عبارتند از: 1- بالا بودن راندمان CPU و وسایل I/O 2- گردش سریعتر کار(turnaround time) در اینجا برعکس سیستم دسته ای لازم نیست برای کامل شدن نوارهای ورودی یا خروجی صبر کرد.
3- دسترسی با اولویت.
هنگامی که اطلاعات مستقیما از طریق کارت خوان یا نوار وارد می شوند چون دسترسی به صورت سریال است امکان ندارد که اجرای آنها با ترتیب متفاوتی انجام گیرد، یعنی کارها الزاما به ترتیب ذخیره شدن روی نوار اجراء می شوند.
اما با استفاده از دیسک، که رسانه ای با دسترسی تصادفی و مستقیم(direct access) است می توان بین کارها زمانبندی کرده و کار با اولویت را ابتدا اجراء کرد هر چند که قبل از همه وارد نشده باشد.
4- می توان همزمان چند مدرک ورودی یا خروجی داشت چون ورودیها و خروجیها در دیسک ذخیره می شوند.
بلوک دیاگرام یک سیستم اسپولینگ را می توان به صورت زیر ترسیم کرد: 1- سیستم ورودی: کارکترهایی که توسط کارتخوان وارد می شود را در بلوکهائی جمع آوری کرده و راجع به آن مدارک ورودی اطلاعاتی راجع به آن مدارک(مانند محل آن بر روی دیسک، اولویت، اسم استفاده کننده) به قسمت زمانبند کار فرستاده می شود.
2- زمانبند کار(JS= Job Scheduler): این زمانبند یک لیست از کارهای موجود در ماشین و اطلاعات لازم در مورد مدارک ورودی مورد نیاز هر یک را نگه می دارد.
به این لیست انبار کار یا Jobpool یا Joblist نیز گفته می شود.
زمانبند کار به پردازنده کار می گوید که کدام کار بعدی را اجرا کند.
برای این منظور اطلاعاتی در مورد محل کار و مدارک ورودی آن بر روی دیسک را به پردازنده کار می دهد.
همچنین اگر کارهای متعددی منتظر ورود به حافظه باشند و فضای کافی برای همگی در دسترس نباشد، زمانبند کار تعدادی از آنها را انتخاب کرده و به حافظه می آورد.
3- پردازنده کار(Job processor) کار داده شده را اجرا می کند.
این پردازنده محل کامپایلرها و سایر نرم افزارهای سیستم را بر روی دیسک می داند.
هنگام اجراء پردازنده کار خروجی های خود را به صورت بلوکی بر روی دیسک می نویسد و مدارک خروجی را تشکیل می دهد.
پردازنده کار اطلاعاتی راجع به محل و اولویت مدارک و اولویت خروجی به زمانبند خروجی می دهد.
4- زمانبند خروجی(output scheduler) لیستی از مدارکی که باید چاپ شوند را نگه می دارد.
وقتی که چاپگر آزاد شد، این زمانبند مدرک بعدی را برای چاپ انتخاب کرده و محل مدرک بر روی دیسک را به سیستم خروجی می گوید.
5- سیستم خروجی: بلاکهای خروجی را از روی دیسک خوانده و کاراکتر به کاراکتر( یا خط به خط) آنها را به چاپگر می فرستد.
6- مدیر دیسک(Disk Manager) که وظایف خواندن و نوشتن یک بلاک بر دیسک، تخصیص بلاک خالی روی دیسک و برگرداندن یک بلاک به مجموعه فضای آزاد دیسک را بر عهده دارد.
درخواستهای مربوطه در یک صف به نام DTQ(Disk Transfer Queue) ذخیره می گردد.
7- هماهنگ کننده: البته هر سیستم اسپولینگ یک هماهنگ کننده(Coordinator) دارد که مسئول زمانبندی پردازش های سیستم و فراهم کردن عملیاتی که جهت همگام کردن بکار می آیند می باشد.
(هماهنگ کننده در شکل نشان داده نشده است).
این عملیات توسط دو روال انجام می پذیرد: Wait: پردازش جاری را متوقف کرده و دوباره وارد زمانبند می گردد.
Free: یک پردازش ویژه را جهت زمانبندی، آماده می کند.
نکته: بافر کردن امکان می دهد که عمل I/O یک کار با عمل پردازش همان کار همزمان گردد در حالیکه spooling امکان می دهد عملیات I/O و پردازش چندین کار با هم همزمان گردند.
در چند برنامگی اجرای یک برنامه تا هنگام عملیات I/O ادامه پیدا می کند، سپس عمل I/O آن شروع شده و همزمان CPU اجرای برنامه دیگری را آغاز می کند.
ولی در Spooling می توان چند کار را همزمان اجرا کرد.
تذکر: در سیستم های On line پردازنده مستقیما به دستگاه های I/O در ارتباط است ولی در سیستم های Off line یا ارتباط غیرمستقیم، پردازنده با دستگاه های I/O به طور مستقیم در ارتباط نیست.
سیستم های اشتراک زمانی Time- Sharing این سیستم ها از اوایل سالهای 1970 در نسل سوم کامپیوترها معمول شدند.
سیستم اشتراک زمانی در واقع تعمیم سیستم چند برنامگی است.
در سیستم های چند برنامگی کاربر ارتباطی با کامپیوتر نداشت و خطایابی برنامه ها مشکل بود چرا که زمان برگشت نسبتا طولانی اجازه آزمایش کردنهای متعدد را نمی داد.
در سیستم اشتراک زمانی کاربر به کمک ترمینال(Terminal) که شامل کی بورد(برای ورودی) و مونیتور(برای خروجی) است با کامپیوتر به صورت محاوره ای(interactive) رابطه برقرار می سازد.
کاربر مستقیما دستوراتی را وارد کرده و پاسخ سریع آن را روی مونیتور دریافت می کند.
در این سیستم ها چندین کاربر به کمک ترمینالهائی که به کامپیوتر وصل است همزمان می توانند از آن استفاده کنند.
در سیستم اشتراک زمانی فقط یک پردازنده وجود دارد که توسط مکانیزمهای زمانبندی بین برنامه های مختلف کاربرها با سرعت زیاد(مثلا در حد میلی ثانیه) سوئیچ می شود و بنابراین هر کاربر تصور می کند کل کامپیوتر در اختیار اوست.
در اینجا تاکید بر روی میزان عملکرد کاربر است یعنی هدف فراهم کردن وسایل مناسب برای تولید ساده نرم افزار و راحتی کاربر می باشد و نه بالا بردن میزان کاربرد منابع ماشین.
کاربر می تواند در هر زمان دلخواه برنامه خود را آغاز یا متوقف سازد و یا برنامه را به صورت قدم به قدم اجراء و اشکال زدائی(debug) کند.
سیستم های دسته ای برای اجرای برنامه های بزرگ که نیاز محاوره ای کمی دارند مناسب است ولی سیستم های اشتراک زمانی برای مواردی که زمان پاسخ کوتاه لازم است، استفاده می شوند.
در زمانی که کاربردی در حال تایپ برنامه اش یا فکر کردن روی خطاهای برنامه اش می باشد CPU به برنامه کاربر دیگری اختصاص یافته تا آن را اجراء کند.
در سیستم های محاوره ای دستورات به دو صورت پیش زمینه(foreground) و پس زمینه(Background) اجرا می شوند.
در نوع پیش زمینه با وارد کردن دستور، تا هنگامی که دستور اجرا و تمام نشود اعلان سیستم ظاهر نمی گردد ولی در نوع پس زمینه، پس از ورود دستور، بلافاصله اعلان سیستم ظاهر می شود تا دستور بعدی وارد گردد ولی در همین حین دستور قبلی در پشت زمینه در حال اجرا می باشد.
در این سیستم اشتراک زمانی هنگامی که چند کاربر همگی یک برنامه(مثل کامپایلر C) را احضار می کنند هر یک دارای کپی هایی از ثباتها، فضای داده ای، فضای پشته(stack) مخصوص به خود هستند ولی قسمت کد همگی یکسان و مشترک می باشد.
در سیستم اشتراک زمانی وجود یک سیستم فایل ضروری است زیرا نمی توان در هر بار اجرای کار مدارک بزرگی را توسط ترمینالها وارد کامپیوتر کرد.
لذا داده ها و برنامه های کاربر می بایست در دیسک ذخیره گردند.
لذا بخش مدیریت فایلها یکی از بخش های اصلی سیستم عامل می باشد.
هر چند که می توان وظایف مدیر فایل(File Manager) و مدیر دیسک(Disk Manager) را در هم آمیخت ولی منطقا این دو کاملا متفاوت هستند.
مدیر دیسک مسئول توزیع فضای خالی روی دیسک و نقل و انتقالات است، حال آنکه کارهای مدیر فایل بیشتر مربوط به مدیریت فهرستها، فایلها، امنیت فایلها و کارهای مربوط به حسابداری(Accounting) است.
یکی دیگر از بخشهای مهم در سیستم اشتراک زمانی، مدیر ترمینال است که وظیفه تعیین هویت کاربران و پذیرش آنها را بر عهده دارد.
چند برنامگی و اشتراک زمانی مباحث اصلی سیستم عاملهای امروزی و در نتیجه مباحث اصلی این کتاب می باشند.
اشتراک زمانی حالت ویژه ای از چند برنامگی است که در آن تعویض یک برنامه نه بر مبنای لحظه نیاز برنامه به عمل I/O بلکه بر مبنای یک برش زمانی انجام می پذیرد.
از جمله سیستم عاملهای سنتی و مشهور که شامل این ویژگیها می باشد سیستم عامل UNIX است.
موسسه IEEE یک استاندارد به نام POSIX برای UNIX بنا نهاد.
POSIX حداقل واسط فراخوان سیستمی را تعریف می کند که سیستم های UNIX سازگار باید آن را پشتیبانی نمایند.
سیستم عاملهای کامپیوترهای شخصی و شبکه سال 1980 تاکنون ه مدارات مجتمع با مقیاس بزرگ LSI(Large Scale Integrated Circuit) ابداع شدند، به عنوان نسل چهارم کامپیوترها شناخته می شود.
در این سالها کامپیوترهای شخصی با قیمتی ارزان و کارآئی بالا و محیط گرافیکی و محاوره ای بسیار خوب به سرعت گسترش یافتند.
سیستم عاملهای اولیه بر روی PC(مانند DOS) فقط تک کاربره و تک برنامه ای بودند.
ولی سیستم عاملهای امروزی آن مانند Windows NT خاصیتهای چند برنامگی، چند کاربره(multiuser) و شبکه ای را دارا هستند.
با توجه به هزینه اندک سخت افزار اهداف سیستم عامل در طول زمان تغییر کرده است و برای PCها به جای ماکزیمم کردن درصد استفاده CPU و وسایل جانبی، سیستم به سمت راحتی کاربر پیش می رود.
به تدریج ویژگی های مهم سیستم عاملهای قدیمی در کامپیوترهای بزرگ(مانند حفاظت حافظه، محافظت فایلها، همزمانی پردازشها و...) بر روی سیستم های PC نیز پیاده سازی شده است.
هنگامی که کامپیوترها از طریق شبکه به هم وصل شوند به آنها ایستگاههای کاری(Workstations) می گویند.
در یک سیستم عامل شبکه، کاربران از وجود ماشین های مختلف در شبکه باخبرند.
آنها می توانند از دور وارد یک ماشین شوند و همچنین فایلهای یک ماشین را روی ماشین دیگر کپی کنند.
هر کامپیوتر سیستم عامل محلی خودش را اجراء می کند و کاربر یا کاربران محلی مخصوص به خود را دارد.
سیستم های توزیع شده Distributed Systems سیستم عامل توزیع شده در یک محیط شبکه ای اجراء می شود.
در این سیستم قسمتهای مختلف برنامه کاربر بدون آنکه خود او متوجه شود می توانند همزمان در چند کامپیوتر مجزا اجراء شده و سپس نتایج نهائی به کامپیوتر اصلی کاربر برگردند.
کاربران نباید از این موضوع باخبر شوند که برنامه آنها در کجا به اجراء درمی آید و یا فایلهای آنها در کجای شبکه قرار دارد و همه این کارها باید توسط سیستم عامل به صورت خودکار انجام گیرد.
به عبارتی دیگر سیستم باید از دید کاربر شفاف باشد و هر چیز را با نام آن فراخوانی کند و کاری به آدرس آن نداشته باشد.
با توجه به توضیحات فوق سیستم عامل های توزع شده به مراتب پیچیده تر از سیستم عاملهای شبکه هستند.
یکی از مزایای مهم سیستم های توزیع شده سرعت بالای اجرای برنامه هاست چرا که یک برنامه همزمان می تواند از چندین کامپیوتر برای اجراء شدنش استفاده کند.
همچنین به علت توزیع شدن اطلاعات، بانکهای اطلاعاتی حجیم می تواند روی یکسری کامپیوترهای شبکه شده قرار بگیرند و لازم نیست که همه اطلاعات به یک کامپیوتر مرکزی فرستاده شود(که در نتیجه این نقل و انتقالات حجیم زمان زیادی به هدر می رود).
در شبکه هر کامپیوتر می تواند سیستم عامل ویژه خود را داشته باشد و تنها یک نرم افزار مدیریت شبکه به سیستم عامل اضافه شده است ولی در سیستم عامل توزیع شده تنها یک سیستم عامل مجموعه ای از سیستم های متصل به هم را مدیریت می کند.
در شبکه هر کامپیوتر می تواند سیستم عامل ویژه خود را داشته باشد و تنها یک نرم افزار مدیریت شبکه به سیستم عامل اضافه شده است ولی در سیستم عامل توزیع شده تنها تنها یک سیستم عامل مجموعه ای از سیستم های متصل به هم را مدیریت می کند.
به علت تاخیرهای انتقال در شبکه و نویزهای احتمالی در خطوط انتقالی قابلیت اعتماد اجرای یک برنامه در سیستم تنها، بیشتر از قابلیت اعتماد اجرای آن در یک سیستم توزیع شده است.
همچنین در سیستم توزیع شده اگر یکی از کامپیوترهائی که وظیفه اصلی برنامه جاری را بر عهده دارد خراب شود کل عمل سیستم مختل خواهد شد.
از طرف دیگر اگر اطلاعاتی همزمان در چند کامپیوتر به صورت یکسان ذخیره گردد و یکی از کامپیوترها خراب شود، داده ها را می توان از کامپیوترهای دیگر بازیابی کرد و از این نظر امنیت افزایش می یابد.
تذکر: به سیستم های توزیع شده گاهی اوقات سیستم های Loosely Coupled یا ارتباط ضعیف نیز می گویند، چرا که هر پردازنده کلاک و حافظه مستقلی دارد.
پردازنده ها از طریق خطوط مخابراتی مختلفی مثل گذرگاه های سریع یا خطوط تلفن با همدیگر ارتباط دارند.
چند دلیل برای استفاده از سیستم های گسترده عبارتند از: 1- اشتراک منابع 2- تسریع محاسبات 3- قابلیت اعتماد: اگر در سیستم توزیع شده، کامپیوتری خراب شود، کامپیوترهای دیگر(در صورت طراحی سیستم برای این منظور) می توانند کار را ادامه دهند.
ولی همانطور که قبلا گفتیم اگر سیستم نتواند خطا را تشخیص داده و آن کار را به کامپیوتر دیگری بسپارد برعکس امنیت کاهش می یابد.
4- ارتباطات(مثل پست الکترونیکی و انتقال فایلها) نخ(thread) و سیستم های multitasking در تکنیک چند نخی(Multithreading) یک فرایند(process) که برنامه ای در حال اجراست، می تواند به بخشها یا نخهائی(بندهائی) تقسیم شود که می توانند به صورت همزمان اجراء شوند.
گاهی اوقات به سیستم های multithreading سیستم های چند تکلیفی یا چند وظیفه ای(multitasking) هم گفته می شود.
فرآیند(process) یا پردازش اساسا یک برنامه در حال اجراست که منابعی از سیستم به آن تخصیص داده شده است( شامل رجیسترها، حافظه، فایلها و دستگاهها).
فرآیند می تواند مجموعه ای از یک یا چند نخ باشد.
به نخ، رشته یا بند هم گفته می شود.
کلیه اطلاعات مربوط به هر پروسس، در یکی از جداول سیستم عامل به نام جدول Process Control Block=PCB ذخیره می شود.
این جدول یک آرایه یا لیست پیوندی از ساختارهاست که هر عضو آن مربوط به یکی از پروسس هاست که در حال حاضر موجودیت دارد.
اطلاعات موجود در PCB عبارتند از: حالت جاری پردازش، شماره شناسایی پردازش، شماره شناسایی پردازش، اولویت پردازش، نشانی حافظه پردازش، نشانی محل برنامه پردازش بر روی دیسک، نشانی سایر منابع پردازش، محلی برای حفظ ثباتها.
در فصل سوم PCB را کامل تر شرح می دهیم.
سیستم های چند پردازنده ای(multiprocessor) کامپیوترها می توانند به جای یک CPU چندین CPU داشته باشند که در اینصورت به آنها سیستم های multiprocessor می گویند.
جهت استفاده از اسن سیستم ها نیاز به یک سیستم عامل خاص می باشد که بتواند چندین برنامه(یا نخهای یک فرآیند) را به صورت موازی واقعی روی آنها اجراء کند.
سیستم عامل multitasking برای اجراء چند نخ بر روی یک CPU به کار می روند.
گاهی اوقات به سیستم multiprocessor، سیستم multiprocessing هم می گویند.
در سیستم چند پردازنده ای، CPU ها باید بتوانند از حافظه، امکانات ورودی و خروجی و گذرگاه Bus سیستم به صورت اشتراکی استفاده کنند.
مزایای این سیستم ها عبارتند از: الف) زیاد شدن توان عملیاتی(throughput).
منظور از throughput تعداد کارهائی است که در یک واحد زمانی تمام می شوند.
بدیهی است هر چقدر تعداد پردازنده ها بیشتر باشد تعداد کارهای تمام شده در یک پریود زمانی نیز بیشتر خواهد بود.
البته این نسبت خطی نیست، مثلا اگر تعداد پردازنده ها n باشد سرعت اجراء برنامه ها n برابر نمی شود چرا که بخشی از وقت پردازنده ها جهت مسائلی کنترلی و امنیتی و سوئیچ کردن ها به هدر می رود.
ب) صرفه جوئی در هزینه ها.
از آنجا که پردازنده ها منابع تغذیه، دیسکها، حافظه ها و ادوات جانبی را به صورت مشترک استفاده می کنند در هزینه های سخت افزاری صرفه جوئی می شود.
ج) تحمل پذیری در برابر خطا(fault- tolerant).
سیستم های مالتی پروسسور قابلیت اعتماد را افزایش می دهند چرا که خرابی یک CPU سبب توقف سیستم نمی شود بلکه تنها سبب کند شدن آن خواهد شد.
استمرار عمل با وجود خرابی نیازمند مکانیزمی است که اجازه دهد خرابی جست و جو شده، تشخیص داده شده و در صورت امکان اصلاح شود( یا کنار گذاشته شود).
این توانایی به ادامه سرویس، متناسب با سطح بقای سخت افزار، تنزل مطبوع یا graceful degradation نامیده می شود.
سیستم عاملهای چند پردازنده ای نامتقارن(Asymmetric Multi Processing ) یک پردازنده جهت اجراء سیستم عامل و پردازنده های دیگر جهت اجرای برنامه های کاربران استفاده می شود.
از آنجا که کد سیستم عامل تنها روی یک پروسسور اجراء می شود، ساخت این نوع سیستم عامل نسبتا ساده است و از تعمیم سیستم عامل تک پردازنده ای به دست می آید.
این نوع سیستم عامل ها برای اجراء روی سخت افزارهای نامتقارن مناسب هستند، مانند کمک پردازنده و پردازنده ای که به هم متصل هستند یا دو پردازنده ای که از تمام حافظه موجود مشترکا استفاده نمی کنند.
یکی از معایب سیستم عامل نامتقارن غیرقابل حمل بودن(non- portable) آن است.
یعنی برای سخت افزارهای مختلف باید سیستم عاملهای مختلفی نوشته شود چرا که نامتقارنی می تواند حالات مختلف داشته باشد.
در سیستم چند پردازنده ای متقارن(Symmetric Multi Processing= SMP) سیستم عامل می تواند روی هر یک از پروسسورهای آزاد یا روی تمام پردازنده ها همزمان اجراء شود.
در این حالت حافظه بین تمام آنها مشترک می باشد.
تمام پردازنده ها اعمال یکسانی را می توانند انجام دهند.
سیستم متقارن از چند جنبه نسبت به نوع متقارن برتری دارد: 1- از آنجا که سیستم عامل خود یک پردازش سنگین است اگر فقط روی یک CPU اجراء شود باعث می گردد که آن پردازنده همواره بار سنگینی داشته باشد، در حالیکه احتمالا پردازنده های دیگر بی کار هستند لذا اجراء سیستم عامل روی چند پردازنده باعث متعادل شدن(balancing) بار سیستم می شود.
2- در سیستم نامتقارن اگر پردازنده اجراء کننده سیستم عامل خراب شود کل سیستم خراب می شود ولی در سیستم متقارن از این نظر امنیت بیشتر است چرا که اگر یک پردازنده از کار بیفتد سیستم عامل می تواند روی پردازنده های دیگر اجراء شود.
3- برعکس سیستم عامل نامتقارن، سیستم عامل متقارن قابل حمل(portable) بر روی سیستم های سخت افزاری مختلف است.
سیستم عامل SUNOS ورژن 4 از نوع نامتقارن و سیستم عامل Solaris2 ورژن 5 و همچنین Windows NT از نوع متقارن می باشند.
توجه کنید وجود پردازنده های متعدد از دید کاربر مخفی است و زمانبندی نخها(Thread) یا فرآیندها(process) روی هر یک از پردازنده ها به عهده سیستم عامل است.
گرچه multithreading و multiprocessing امکانات مستقلی هستند ولی معمولا با هم پیاده سازی می شوند.
حتی در یک ماشین تک پردازنده ای، چند نخی کارایی را افزایش می دهد.
همچنین ماشین چند پردازنده ای حتی برای فرایندهای غیرنخی هم کارآمد است.
شکل زیر تفاوت سیستم نامتقارن و متقارن را نشان می دهد: تذکر 1: گاهی اوقات به سیستم های چند پرازنده ای، سیستم های Tightly Coupled یا ارتباط محکم نیز گفته می شود.
چرا که پردازنده ها کلاک(Clock)، گذرگاه و همچنین حافظه مشترکی دارند.
تذکر 2: بعضی از کتابها سیستم های توزیع شده را به صورت زیر به دو دسته تقسیم کرده اند: