۱۳۸۹ آذر ۱۶, سه‌شنبه

سیستم عامل چیست؟

در گذشته نه چندان دور کامپیوتر ها بسیار بزرگ، گران قیمت و کمیاب بودند و به طور کلی شکل کامپیوتر های امروزی را نداشتند. این کامپیوتر ها معمولا در اختیار دانشگاه ها و موسسات تحقیقاتی و یا کمپانی های بزرگ بودند و برای استفاده های خاصی طراحی می شدند. با تمام این تفاوتها اما حد اقل در یک چیز با کامپیوتر های امروزی مشترک بودند و آن توانایی اجرای برنامه بود. کامپیوتر های قدیمی معمولا یک مسئول داشتند که برنامه نوشته شده را از طراح آن می گرفت و برای اجرا به کامپیوتر می داد. وظیفه اصلی این مسئول این بود که برنامه ها را به ترتیبی به کامپیوتر بدهد که حد اکثر زمان پردازش به این برنامه ها اختصاص یابد و به طور کلی از منابع محدود کامپیوتر به بهترین روش استفاده شود. 

سیستم عامل در واقع نرم افزاری است که همین فعالیت را به صورت خودکار انجام می دهد. با گذشت زمان و افزایش سرعت و توانایی کامپیوتر ها، وجود یک انسان برای تغییر برنامه ها و اختصاص زمان و منابع کامپیوتر به آنها باعث اتلاف بسیار زیاد وقت می شد و شاید در بسیاری مواقع مسئول نمی توانست بهترین و بهینه ترین ترتیب را برای اجرا به برنامه ها اختصاص دهد و این باعث بوجود  آمدن سیستم عامل (Operating System) شد. 

سیستم عامل ها به مرور زمان رشد کرده و به توانایی های آنها افزوده شد ولی همه آنها کم و بیش همان وظیفه ای را به عهده دارند که اجداد آنها به عهده داشتند یعنی اختصاص منابع محدود سیستم به بهینه ترین شکل به برنامه ها.

احتمالا تصور شما از سیستم عامل یک نرم افزار بزرگ است که از چند صد مگابایت تا حتی چند گیگابایت فضا اشغال می کند و انواع امکانات مختلف و نرم افزارهای پخش موزیک و نمایش عکس و صدها ابزار دیگر را در خود دارد. مثل نسخه های مختلف ویندوز شرکت مایکروسافت که پس از نصب صدها پنجره و برنامه و ابزار را برای انجام کارهای مختلف در اختیار کاربر قرار می دهند.

اما در واقع هسته اصلی این سیستم عامل نرم افزار نه چندان بزرگی است که ثانیه هایی پس از روشن شدن کامپیوتر روی حافظه اصلی (RAM) آن قرار می گیرد و امکان اجرای سایر برنامه ها را به کامپیوتر می دهد. این هسته که کرنل (Kernel) نام دارد  پایه ای ترین وظایف سیستم عامل را انجام می دهد و از نظر بسیاری از متخصصین اصلا کرنل خود سیستم عامل است و سایر قسمتها برنامه هایی هستند که توسط کرنل اجرا می شوند. از وظایف اصلی کرنل می توان به مدیریت اجرای برنامه ها و اختصاص زمان به همه آنها برای اجرا، مدیریت رویدادهای (event) حاصل از سخت افزار (یا Interupt ها) و مدیریت رویدادهای حاصل از برنامه ها (یا فراخوانی های سیستمی - System calls) اشاره کرد.

معمولا در کنار هر کرنل، نرم افزار دیگری نیز قرار دارد که توسط کرنل اجرا شده و در واقع واسط بین کاربر و کرنل است که شل (Shell) خوانده می شود. شل در هر سیستم عامل متفاوت است در بعضی سیستم عامل ها به شکل خط فرمان و در برخی دیگر به شکل یک فایل اکسپلورر می تواند باشد ولی در نهایت دو امکان مهم را برای کاربر فراهم می کند. اجرای برنامه ها و انجام عملیات اصلی مربوط به دیسک سخت مثل مشاهده فایلها . کپی و پاک کردن آنها.

مفهوم دیگری به نام GUI یا رابط گرافیکی کاربر نیز وجود دارد که درواقع نرم افزاری است که به شکلی وظیفه ترسیم اشیاء مثل پنجره ها، منو ها و ... را بروی صفحه نمایش دارد و جزء اصلی سیستم عاملهای مدرن امروزی نیز هست.

به عنوان یک برنامه نویس اگر می خواهید وارد مبحث طراحی سیستم عامل شوید، باید اطلاعات خوبی از بسیاری از مفاهیم پایه ای علم کامپیوتر داشته باشید. سیستم عامل شاید پیچیده ترین نرم افزاری است که یک برنامه نویس در تمام طول مدت زندگی حرفه ای خود ممکن است در طراحی آن دخیل باشد. پیچیده ترین قسمت طراحی سیستم عامل طراحی کرنل آن است که معمولا توسط یک تیم کوچک از برنامه نویسان بسیار ماهر طراحی می شود (گاهی 1 یا 2 نفر).

اگر فکر می کنید در زمینه برنامه نویسی، عملیات سخت افزاری و چگونگی ارتباط سخت افزارها و منابع سیستم هنوز اطلاعاتتان زیاد نیست، فعلا ورود به این شاخه را فراموش کنید. برای ورود به این شاخه پایه ای ترین اطلاعات لازم به شرح زیر است:

-آشنایی با زبان C (یا ++C) - گرچه برخی سیستم عامل های کوچک تحقیقاتی با Pascal  و همینطور FreeBasic نیز نوشته می شوند.

-آشنایی با برنامه نویسی Assembly - معمولا C توانایی انجام بخش اعظم کارها را دارد اما همیشه نیاز به اسمبلی هم هست.

-مفاهیم پایه ای علم کامپیوتر - آشنایی کامل با مبنای دو و هشت. منطق بولی و همینطور آشنایی کامل با ساختمانهای داده و الگوریتمهای مرتب سازی و جستجو. رجوع کنید به پست چگونه یک برنامه نویس خوب شوم 

-تجربه خوب برنامه نویسی

-تجربه کار با Unix/Linux - اکثر ابزارهای لازم برای طراحی سیستم عامل برای این محیطها طراحی شده اند گرچه نمونه ویندوزی برخی از آنها هم وجود دارد.

-آشنایی با انواع فایلهای اجرایی و ساختار داخلی آنها - این از جمله مهمترین بخشهای طراحی سیستم عامل است، اما یک برنامه نویس نرم افزارهای کاربردی هرگز با آن مواجه نخواهد شد.

-آشنایی کامل با پلت فرم هدف - در وافع نوع CPU هدف، ساختار داخلی و مجموعه دستورات اسمبلی آن باید به طور کامل برای برنامه نویس شناخته شده باشد.

موفق و پیروز باشید

هیچ نظری موجود نیست:

ارسال یک نظر