وقتی کامپیوتر را روشن میکنید، اولین برنامهای که اجرا میشود معمولاً مجموعهای از دستورالعملها است که در حافظه فقط خواندنی رایانه (ROM) نگهداری میشود. این کد سخت افزار سیستم را بررسی میکند تا مطمئن شود همه چیز به درستی کار میکند. این قدرت خودآزمایی (POST) CPU، حافظه و سیستمهای خروجی اصلی ورودی (BIOS) را برای خطاها بررسی میکند و نتیجه را در یک مکان مخصوص حافظه ذخیره میکند.
هنگامی که POST با موفقیت به پایان رسید، نرم افزار بارگذاری شده در ROM گاهی BIOS یا سیستم عامل نامیده میشود، شروع به فعال سازی درایوهای دیسک کامپیوتر میکند. در اکثر رایانههای مدرن، هنگامی که کامپیوتر هارد دیسک را فعال میکند، اولین قطعه سیستم عامل را بوت استرپ لودر مییابد. بوت استرپ لودر یک برنامه کوچک است که دارای یک عملکرد واحد میباشد. سیستم عامل را در حافظه بارگذاری میکند و به آن امکان شروع به کار را میدهد. در ابتدایی ترین شکل، بوت استرپ لودر برنامههای درایور کوچکی را تنظیم میکند که با زیر سیستمهای سخت افزاری مختلف کامپیوتر ارتباط برقرار کرده و آنها را کنترل میکند. این بخش حافظه را که سیستم عامل، اطلاعات کاربر و برنامههای کاربردی را در اختیار دارد، تنظیم میکند. این ساختار دادهها را ایجاد میکند که سیگنالها، پرچمها و نشانههای بیشماری را که برای ارتباط درون و بین زیر سیستمها و برنامههای رایانه مورد استفاده قرار میگیرند، در خود نگه میدارد. سپس کنترل کامپیوتر را به سیستم عامل تبدیل میکند.
وظایف سیستم عامل، در کلی ترین مفهوم، در شش دسته قرار می گیرد:
1- مدیریت پردازنده
2- مدیریت حافظه
3- مدیریت دستگاه
4- مدیریت ذخیره سازی
5- رابط برنامه
6- رابط کاربری
این شش وظیفه هسته تقریباً همه سیستم عاملها را مشخص میکند. در مرحله بعد، ابزارهایی را که سیستم عامل برای انجام هر یک از این عملکردها استفاده میکند، بررسی میکنیم.
1- مدیریت پردازنده
قلب مدیریت پردازنده به دو موضوع مرتبط برمی گردد اطمینان حاصل کنید که هر فرآیند و برنامه زمان کافی از پردازنده را برای عملکرد صحیح دریافت میکند. تا آنجا که ممکن است از چرخه پردازنده برای کارهای واقعی استفاده کنید.
2- واحد اصلی نرم افزاری که سیستم عامل در زمانبندی کارهای انجام شده توسط پردازنده با آن سروکار دارد، بسته به سیستم عامل، یک فرایند یا یک رشته است.
وسوسه انگیز است که یک فرایند را به عنوان یک برنامه در نظر بگیریم، اما این یک تصویر ناقص از نحوه ارتباط فرآیندها با سیستم عامل و سخت افزار است. برنامهای که میبینید (پردازشگر کلمه، صفحه گسترده یا بازی) در واقع یک فرایند است، اما این برنامه ممکن است باعث شروع چندین فرآیند دیگر شود، برای وظایفی مانند ارتباط با دستگاههای دیگر یا رایانههای دیگر. همچنین فرآیندهای متعددی وجود دارد که بدون ارائه شواهد مستقیم مبنی بر وجود آنها انجام میشود. به عنوان مثال، ویندوز XP و UNIX میتوانند دهها فرایند پیش زمینه برای مدیریت شبکه، مدیریت حافظه، مدیریت دیسک، بررسی ویروس و غیره داشته باشند. بنابراین، یک فرآیند نرم افزاری است که برخی اقدامات را انجام میدهد و توسط کاربر، سایر برنامهها یا سیستم عامل قابل کنترل است.
این فرایندها هستند و نه برنامههای کاربردی، که سیستم عامل آنها را کنترل می کند. زمان اجرای آنها را توسط CPU تعیین میکند. در یک سیستم وظیفهای واحد، برنامهای ساده است. سیستم عامل به برنامه اجازه میدهد تا شروع به کار کند، اجرای برنامه را فقط به اندازه کافی برای تعلیق وقفهها و ورودی کاربر متوقف میکند. وقفهها سیگنالهای خاصی هستند که توسط سخت افزار یا نرم افزار به CPU ارسال میشوند. گویی قسمتی از کامپیوتر ناگهان دست خود را بالا میبرد تا در یک جلسه پر جنب و جوش توجه CPU را جلب کند. گاهی اوقات سیستم عامل اولویت فرآیندها را طوری برنامه ریزی میکند که وقفهها پوشانده شوند، یعنی سیستم عامل وقفههای برخی منابع را نادیده میگیرد تا یک کار خاص در اسرع وقت به پایان برسد.
وقفههایی وجود دارد (مانند وقوع خطا یا مشکلات حافظه) که بسیار مهم هستند و نمی توان آنها را نادیده گرفت. این وقفهها باید بدون در نظر گرفتن سایر وظایف در دست، بلافاصله حل شوند. در حالی که وقفهها باعث پیچیدگی اجرای فرآیندها در یک سیستم وظیفهای واحد میشوند، کار سیستم عامل در سیستم چند وظیفهای بسیار پیچیدهتر میشود.
در حال حاضر، سیستم عامل باید برنامههای کاربردی را طوری ترتیب دهد که فکر کنید چندین اتفاق همزمان رخ میدهد. این بسیار پیچیده است؛ زیرا CPU فقط میتواند یک کار را در یک زمان انجام دهد. پردازندههای چند هستهای امروزی و ماشینهای چند پردازنده میتوانند کارهای بیشتری را انجام دهند، اما هر هسته پردازشی هنوز قادر به مدیریت یک کار در یک زمان است. برای اینکه ظاهر بسیاری از اتفاقات همزمان رخ دهد، سیستم عامل باید هزاران بار در ثانیه بین فرایندهای مختلف جابجا شود.
- این فرایند چگونه انجام میشود؟
یک فرآیند مقدار مشخصی از RAM را اشغال میکند. همچنین از رجیسترها، پشتهها و صفهای موجود در CPU و فضای حافظه سیستم عامل استفاده میکند. هنگامی که دو فرایند چند وظیفهای هستند، سیستم عامل تعداد مشخصی از چرخههای اجرای CPU را به یک برنامه اختصاص میدهد. پس از این تعداد چرخه، سیستم عامل کپی تمام ثبتها، پشتهها و صفهای مورد استفاده در فرآیندها را ایجاد میکند و نقطهای را که در آن فرآیند متوقف میشود، یادداشت میکند. سپس تمام رجیسترها، پشتهها و صفهای مورد استفاده در فرآیند دوم را بارگذاری میکند و به آن تعداد مشخصی از چرخههای CPU را میدهد.
هنگامی که آنها کامل میشوند، از تمام رجیسترها، پشتهها و صفهای استفاده شده توسط برنامه دوم کپی میکند و برنامه اول را بارگیری میکند. فرآیند هر فرآیند دارای وضعیتی است که با آن مرتبط است. بسیاری از فرآیندها تا زمانی که نوعی ورودی دریافت نکنند، زمان CPU را مصرف نمیکنند. به عنوان مثال، ممکن است یک فرآیند منتظر ضربه زدن به کلید کاربر باشد. در حالی که منتظر ضربه زدن به کلید است، از زمان CPU استفاده نمیکند. در حالی که منتظر است، "معلق" است. با فشار دادن کلید، سیستم عامل وضعیت خود را تغییر میدهد. هنگامی که وضعیت فرایند تغییر میکند، از حالت تعلیق به حالت فعال، برای مثال، یا از حالت تعلیق به اجرا، اطلاعات موجود در بلوک کنترل فرآیند باید مانند دادههای هر برنامه دیگر برای اجرای مستقیم بخش تعویض وظیفه عملیات استفاده شود. این مبادله فرآیند بدون دخالت مستقیم کاربر اتفاق میافتد و هر فرآیند چرخه CPU کافی را برای انجام وظیفه خود در مدت زمان معقول دریافت می کند. اگر کاربر سعی کند تعداد زیادی از فرایندها همزمان کار کنند، ممکن است مشکل ایجاد شود.
سیستم عامل خود به انجام برخی از چرخههای پردازنده برای ذخیره و تعویض همه ثبتها، صفها و پشتههای فرآیندهای برنامه نیاز دارد. اگر فرآیندهای کافی آغاز شده و سیستم عامل به دقت طراحی نشده باشد، سیستم میتواند از اکثر قریب به اتفاق چرخههای CPU موجود برای جابجایی بین فرایندها و نه اجرای فرایندها استفاده کند.
وقتی این اتفاق میافتد، به آن thrashing گفته میشود و معمولاً برای متوقف کردن فرایندها و بازگشت نظم به سیستم نیاز به نوعی مداخله مستقیم کاربر است. یکی از راههایی که طراحان سیستم عامل شانس حمل را کاهش میدهند، کاهش نیاز به فرآیندهای جدید برای انجام کارهای مختلف است. برخی از سیستم عاملها یک "process lite" ، به نام thread (رشته)، میدهند که میتواند با تمام کارهای فشرده CPU در یک فرایند معمولی سروکار داشته باشد، اما عموماً با انواع مختلف I/O سروکار ندارد و ساختارهایی را ایجاد نمیکند که نیاز به وسایل وسیع دارند.