Without an operating system your laptop is just a box of bits that do not know how to communicate with one another, or you!
سیستمعامل [Oprating System] برنامه کلی است که سیستم اصلی کامپیوتر و برنامههای جانبی را مدیریت و اجرا میکند. در واقع یک نرمافزار است که به کاربر اجازه میدهد اپلیکیشنها و برنامههای کاربردی دیگر را روی یک کامپیوتر اجرا کند و ایجاد ارتباط بین کاربر و سختافزارها را به عهده دارد.
البته این هم ممکن است که یک برنامه کاربردی بدون نیاز به سیستمعامل، به طور مستقیم با سختافزار ارتباط برقرار کند و ما نیازی به سیستمعامل در یک کامپیوتر نداشتهباشیم؛ اما میبینیم که اکثر برنامهها برای یک سیستمعامل نوشته شدهاند. این مسأله برای برنامهها مزیتهای زیادی دارد. مثلا اینکه میتوانند از کتابخانههای متداول و libraryها استفاده کنند، و یا این که نیازی نیست به طور مستقیم درگیر جزئیات سخت افزاری سیستم باشند. همینطور استفاده از یک سیستم عامل در کامپیوترها به آنها توانایی Multitasking میدهد. یعنی با استفاده سیستمعامل شما میتوانید همزمان از وب استفاده کنید، موسیقی گوش دهید یا فایلهای متنی خود را بررسی کنید. همینطور نتیجه کارها و فایلهای خود را ذخیره کنید. اما در صورت عدم استفاده از سیستم عامل، شما فقط قدرت استفاده از یک برنامه خاص را دارید، بدون توانایی ذخیره نتایج، یا استفاده همزمان از سایر برنامههای کاربردی دیگر!
Multitasking یعنی اجرای همزمان وظایف چندگانه در یک کامپیوتر از طرف واحد پردازش مرکزی. علت اینکه یک کامپیوتر توانایی Multitasking دارد، به خاطر توانایی interrupt سیستم عامل و واحد پردازش مرکزی (CPU) یک کامپیوتر است.
interrupt یعنی اینکه پردازنده هنگام دریافت دستور اجرای یک کار جدید، توانایی دارد کاری را که اکنون در حال انجام آن است متوقف کرده و وضعیت کنونی آن را تا آن لحظه ذخیره کند، و بعد از اجرای (بخشی از) دستور جدید ادامه کار قبلی از همان نقطه توقف ادامه دهد و مدام بین این دو وضعیت سوئیچ کند. به این صورت یک کامپیوتر میتواند چندین وظیفه را به صورت درهمآمیخته در یک دوره زمانی خاص انجام دهد، در حالی که واحد پردازش مرکزی (CPU) و حافظه اصلی (main memory) را بین آن وظایف به اشتراک گذاشته است.
در Multitasking یک کامپیوتر هرگز بیش از یک کار را در یک زمان انجام نمیدهد، اما با مدیریت در انتخاب پردازش وظیفههای مختلف بر اساس زمان تحویل و یا اولویت دستور، میتواند دو کار را در بازههای زمانی یکسان به انجام برساند. (البته Multitasking اینجا برای پردازندههای تک هسته تعریف شده. برای پردازندههای Multicore هستههای پردازنده میتوانند به موازات هم وظیفههای مستقل از هم را اجرا کنند.)
گنو یک سیستمعامل آزاد است که در طی پروژه GNU برای حمایت و ساخت نرمافزارهای آزاد و شبهیونیکس، توسط ریچارد استالمن [Richard Stallman] تولید و منتشر شد.
گنو یک سیستمعامل کامل است که شامل کرنل، کتابخانهها و سایر سرویسهای اصلی یک سیستمعامل است. اما پیش از این که کرنل اصلی پروژه گنو تکمیل گردد، لینوس توروالدز [Linus Torvalds] کرنل لینوکس خود را تحت مجوز GNU GPL منتشر کرد. و از آن پس واژه گنو/لینوکس برای توزیعهایی که از مجموعه هسته لینوکس و نرمافزارهای آزاد گنو تشکیل شده است، به کار رفت.
هر سیستم عامل خود از بخش هایی تشکیل شده است:
کرنل مرکزیترین بخش یک سیستمعامل به حساب میآید و کنترل کامل بر همه اجزای یک سیستم را دارد. کرنل اولین برنامهای است که بعد از BIOS و bootloader اجرا میشود و مدیریت همه سختافزارها و اپلیکیشنها را در یک سیستم در درست میگیرد.
کرنل به منابع سختافزاری دسترسی مستقیم دارد، میتواند دادهها و اطلاعات دریافتی از اپلیکیشنها را از روی memory بخواند یا روی آن بنویسد. دستورات اجرایی را برای پردازش به پردازنده بفرستد، نحوه دریافت و ارسال اطلاعات را از دستگاههای جانبی مثل ماوس و کیبورد و مانیتور تعیین کند، نحوه تفسیر دادههای دریافتی از شبکه را تعیین کند، اطلاعات را روی حافظه جانبی هارد دیسک ذخیره کند و... . درواقع کرنل یک رابط بین سختافزارها (... ,CPU, memory disk)، با نرمافزارهای مورد استفاده کاربر است؛ و وظیفه اصلی آن مدیریت ارتباط بین این دو است.
برای مثال لینوکس نه یک سیستمعامل، که یک کرنل است؛ و شرکتها و گروههای مختلف با افزودن سرویسها وبرنامههایی به آن، سیستمعامل Gnu/Linux خود مانند Debian, Ubunto, centOS, ... را ارائه میدهند.
کرنلها براساس نوع معماری و طراحی به سه دسته تقسیمبندی میشوند: Monolithic Kernel, Microkernel و Hybrid Kernel یا هستههای ترکیبی. هسته Linux و هسته سیستمعاملهای BSD جزء مونولیتیک کرنلها، هسته Hurd در پروژه گنو و هسته سیستمعامل مینیکس جزء میکروکرنلها است. همچنین هسته XNU در سیستمعاملهای MacOS و iOS یک هسته هیبریدی است.
-Unix
یک سیستمعامل است که در دهه 1970 در آزمایشگاههای بل متعلق به شرکت تلفن و تلگراف آمریکا (AT&T Crop) توسعه یافت. درآغاز به زبان Assembly نوشته شدهبود اما بعد به زبان C بازنویسی شد. در اواخر دهه 70 مجوز استفاده از یونیکس به گروههای دانشگاهی و تجاری دیگری هم داده شد که همین موجب توسعه یونیکس و پیدایش سیستم عاملهای شبهیونیکس (Unix-like) شد. امروزه اصطلاح Unix بیشتر یک عنوان تجاری است که از طرف Open Group برای توصیف سیستمعاملهایی استفاده میشود که مطابق با استانداردهای اصلی یونیکس است. (به سایر سیستم عاملها Unix-like می گویند!)
آنچه امروز به اشتباه سیستمعامل لینوکس نامیده میشود ترکیبی است از تلاش ریچارد استالمن (در اعتراض به انحصار و مالکیت نرم افزارها) برای ساخت و ارائه سیستمعاملی آزاد به جای سیستمعامل یونیکس، که در 1985 بنیاد نرمافزارهای آزاد را تأسیس کرد و در 1990 پروژه GNU را عرضه کرد؛ و تلاشهای لینوس توروالدز که هسته Linux را ارائه داد. کرنلی که توسط خود پروژه گنو نوشته شد Hurd نام دارد که از 1990 تا کنون در دست توسعه است. در Hurd هسته از نوع میکروکرنل و در Linux از نوع مونولینیک است.
-BSD (Berkeley Software Distribution)
خانواده سیستمعاملهای BSD شامل FreeBSD, OpenBSD, NetBSD, ... که مشتق از سیستمعامل یونیکس است و در طی توسعه یونیکس توسط گروه تحقیقات سیستمهای کامپیوتری دانشگاه کالیفرنیا در برکلی در سال های 1977 تا 1995 منتشر شد. اکثر سیستمعاملهای فعلی این خانواده open source هستند به استثنای macOS و iOS که در آنها از سیستمعامل Darwin استفاده شده است. معماری کرنل در بیشتر سیستمعاملهای این گروه از مونولتیک کرنلها پیروی میکند، به جز macOS ، iOS و DragonFly BSD که کرنل آنها XNU و هیبریدی است.
-NT
Microsoft Windows NT یک خانواده از سیستمعاملها است که اولین نسخه آن (Microsoft Windows NT 3.1) توسط شرکت مایکروسافت در1995 توزیع شد. Windows NT بعدها با Windows 2000 جایگزین شد در حالی که کرنل آن هنوز کرنل Windows NT بود. کرنلهای NT از نوع هیبریدی هستند (modified microkernel).
کتابخانهها مجموعهای از منابع است که شامل زیربرنامهها، دستورالعملها و رفتارهای اجرایی سیستم است و توسط برنامههای دیگر سیستم استفاده میشود. خیلی از دستوراتی که توسط کرنل اجرا میشوند به طور مشخص برای کرنل تعریف نشدهاند و در کرنل وجود ندارد، بلکه با استفاده از فراخوانهای سیستمی (syscalls) و توابع موجود در کتابخانهها انجام میپذیرند.
یکی از کتابخانههای مورد استفاده در سیستمعاملهای گنو/لینوکس GNU C Library یا به اختصار glibc است. این کتابخانه که یک پیادهسازی کتابخانه استاندارد زبان C برای سیستم عامل گنو است، توسط بنیاد نرمافزار آزاد برای پروژه گنو نوشته شدهاست.
کامپایلرها برنامههایی هستند که کدهای کامپیوتری نوشته شده در یک زبان سطح بالا را به یک زبان سطح پایین ترجمه میکنند.
برنامهای که توسط کاربر به زبان C ،fortran یا ... نوشته شده باشد، توسط کامپایلر به یک زبان انتزاعی (که اغلب دارای فرم باینری است) و قابلیت اجرا برای کامپیوتر دارد، تبدیل و اجرا میشود.
از جمله کامپایلر های آزاد لینوکس : g95: Fortran 95 compiler؛ Free Pascal: professional Pascal compiler؛ gcc (GNU Compiler Collection): C, C++, Java, Ada, Fortran ... compiler؛ . . .
POSIX مجموعهای از استانداردها است که با هدف حفظ سازگاری بین interfaceها در سیستمعاملهای مختلفِ بر پایه یونیکس، بوجود آمد. POSIX به عنوان نوعی API بین خط فرمان و نرمافزارهای کاربردی هم تعریف میشود.
نیاز به استانداردسازی از آنجایی ناشی شد که شرکتها برای توسعه نرمافزارهای خود بدون وابستگی به سیستمعامل خاص، احتیاج به همسانسازی نرمافزارها در سیستمعاملهای مختلف داشتند، طوری که برای هر جابجایی نیازی به اصلاح و بازنویسی کد نباشند.
این استانداردها تحت نظارت موسسه IEEE ارائه شده و توسعه یافتهاست. (ابتدا نام این استانداردها با فرمت IEEE-IX ارائه میشد که با پیشنهاد ریچارد استالمن به POSIX تغییر نام یافت.)
استاندارد سلسله مراتبیِ فایلسیستم یا به اختصار FHS، مجموعهای از قوانین و دستورالعملها است که به چیدمان و ساختار قرارگیری فایلها و دایرکتوریها در لینوکس و هر سیستم شبهیونیکسی نظارت دارد.
در این استاندارد، فایلسیستم ساختاری درختی دارد و همه فایلها و دایرکتوریها تحت دایرکتوری ریشه (root directory-/-) قرار میگیرند، حتی اگر مربوط به دستگاههای خارجی متصل به لینوکس باشند(یعنی همه چیز مثل یک فایل تلقی میشود). در واقع تمام فایلها و دایرکتوریها در سسیستمعامل مکان ذخیره مخصوص به خود را دارند و هنگام فراخوانی فقط به زیر آدرس مورد نظر که تحت دایرکتوری روت است mount میشوند.
این استاندارد توسط بنیاد لینوکس توسعه یافته؛ اولین انتشار آن در سال 1994 و آخرین نسخه آن در سال 2015 عرضه شد.
برای مشاهده همه دایرکتوریهای تحت root میتوانیم از دستور زیر استفاده کنیم:
$ ls /
و یا برای مشاهده ساختار درختی آنها از دستور زیر استفاده کرد:
$ tree /
(GRUB (GNU GRand Unified Bootloader یک boot loader است که در پروژه GNU تولید شد و قابلیت پشتیبانی از چند سیستمعامل در یک کامپیوتر را دارد. کاربر میتواند در حین بوت شدن، سیستمعامل دلخواه را برای اجرا انتخاب کند. گراب اغلب در سیستمهای شبه یونیکس مانند گنو/لینوکس استفاده میشود.
گراب قبل از اجرای سیستمعامل اصلی اجرا شده و به سیستمعامل در لود شدن و اجرا کمک میکند. برنامه بوتلودر و گراب در یک کامپیوتر بر روی هارد دیسک ذخیره شده و وظیفه اصلی آن فراخوانی کرنل و فایلهای ضروری مورد نیاز برای بوت کردن سیستمعامل به داخل حافظه RAM میباشد. پس از فراخوانی کرنل، فرآیند اجرا را به کرنل منتقل میکند و کرنل بقیه سیستمعامل را راهاندازی میکند و مدیریت آن را در دست میگیرد.
GNU Core Utilities یا همان coreutils بستههای نرمافزاری گنو هستند که حاوی بسیاری از سرویسهای پرکاربرد در خط فرمان محیطهای شبهیونیکس اند. دستوراتی مثل ls, cat, rm, mkdir , mv, ... . میتوان لیستی از این ابزارها را در List of GNU Core Utilities commands مشاهده نمود. اغلب سرویسهای این لیست با استاندارد posix سازگار هستند.