مقدمه:
کامپیوتر بدون نرمافزارهایش چیزی جز قطعات خشک و بی مصرف نیست. اما به همراه نرمافزار قادر خواهد بود کارهای زیادی همچون ذخیره و بازیابی اطلاعات، پخش چند رسانهای و مطالعه بر روی اینترنت و برقراری ارتباط بین چند کامپیوتر را انجام دهد. و یا در بسیاری از کاربردهای بسیار حیاتیِ بشر مورد استفاده قرار گیرد.
به طور کلی نرمافزارهای کامپیوتر را میتوان به دو دسته عمده تقسیم کرد
- برنامههای کاربردی که کارهای مورد نیاز کاربران را انجام می دهند.
- نرمافزارهای سیستمی که وظیفه کنترل و مدیریت خود کامپیوتر را بر عهده دارند.
سیستم عامل (Operating System)، اساسیترین برنامه سیستمی است که مدیریت کلیه منابع سیستم را به عهده گرفته و زمینهای فراهم می سازد که برنامههای کاربردی بتوانند بر روی آن نوشته شوند.
در این مقاله ممکن است بعضی مسایل تخصصی مطرح شود، اما سعی خواهم کرد تا مطالب حتیالامکان برای استفاده عموم خوانندگان و کاربران کامپیوتر (به ویژه کاربران لینوکس) مناسب و قابل فهم باشد.
ساختار سیستم عامل
ساختارهای مختلفی در این بخش وجود دارد که ما به بررسی مختصر ساختار مربوط به سیستمعامل گنو/لینوکس خواهیم پرداخت. ساختارهای عمده موجود عبارتند از :
- ساختار یکپارچه
- ساختار لایهای
- ساختار مشتری خدمتگزار (میکرو کرنل)
سیستم های یکپارچه
میتوان این روش متداول در گذشته را «به همریختگی بزرگ» نامید. ساختار آن در بیساختاری نهفته است. سیستمعامل به صورت مجموعهای از رویهها نوشته شده که هر یک از آنها میتواند به فراخور نیاز، دیگری را صدا بزند وقتی از این تکنیک استفاده شود هر رویه در سیستم، یک واسط دارد که شامل پارامترها و نتایج خروجی است که به سادگی تعریف شده است. هر یک از آنان آزاد است تا دیگری را فراخوانی نمایند تا محاسبات لازم را برایش انجام دهد.
وقتی از این تکنیک استفاده شود برای ساخت برنامه Object واقعی سیستم عامل، ابتدا باید رویههای جداگانه و یا فایلهای شامل رویهها را کامپایل نماییم و سپس یا استفاده از پیوند دهندهی (Linker) سیستم، همه آنها را به هم پیوند زده و در یک فایل Object یکتا قرار دهیم. برای مخفی کردن اطلاعات، امکانات خاصی وجود ندارد و هر رویه برای دیگر رویهها کاملا قابل مشاهده است.
به هر حال حتی در سیستمهای یکپارچه، امکان داشتن حداقل یک ساختار کوچک وجود دارد. برای تقاضای سرویسهای (فراخوان سیستمی) فراهم شده توسط سیستم عامل، پارامترهای مربوطه را در مکانهای دقیقا تعریف شده مانند رجیسترها یا پشته قرار میدهیم و سپس یک trap instruction (ساختار تله) مخصوص را اجرا می کنیم. که Supervisor call و Kernel call نام دارند.
این دستورالعمل، ماشین را از مد کاربر به مد هسته تغییر حالت داده و کنترل را در اختیار سیستم عامل قرار می دهد.
توضیحات دو ساختار دیگر یعنی لایه ای و میکرو کرنل از موضوع این بحث خارج است و چون ساختار هسته لینوکس از ساختار یکپارچه بهره میبرد مجبور به ارایه توضیحاتی کوتاه در باره ساختار یکپارچه شدم. برای خواندن توضیحات بیشتر درباره سیستمهای عامل به کتاب سیستمهای عامل نوشته تنن باوم (Andrew Tanenbaum) مراجعه کنید.
تاریخچه گنو/لینوکس
سیستم عامل لینوکس در سال ۱۹۹۲ تحت مجوز GNU/GPL اجازهی انتشار یافت و دو سال بعد لینوکس ۱٫۰ منتشر شد. در سال ۱۹۹۴ شرکت Red Hat به وسیله باب یانگ (Bob Young) و مارک اوینگ (Marc Ewing) تاسیس شد و یک سال بعد GNU/Linux و سایر نرمافزارهای آزاد آن در اینترنت انتشار یافتند.
این سیستم عامل که امروز بیش از ۱۰۰ میلیون کاربر دارد از خانوده یونیکس (شبه یونیکس) به شمار میرود و از کلیه ویژگیهای آن بهره میبرد.
سالها قبل با وجود افزایش تولیدات سخت افزاری، مشکل بزرگی بر سر راه کاربران رایانه وجود داشت و آن وجود نداشتن سیستمهای عامل مختلف، برای انتخاب و استفاده بود. رایانههای ساخته شده به وسیله شرکت اپل با سیستم عامل انحصاریشان گزینهی مناسبی بودند؛ اما قیمت بالا، آنها را از دسترس بیشتر افراد دور می ساخت. یونیکس، دیگر انتخاب موجود، با کد اصلی محافظت شده آن قدر گران قیمت بود که جز چند دانشگاه و آزمایشگاه، دیگران امکان استفاده از آن را نداشتند.
در این هنگام DOS به دلیل مسائل تجاری به تمام نقاط دنیا راه یافته بود و تنها انتخاب باقی مانده برای کاربران به شمار می رفت. در کشور خودمان هم شاهد آن هستیم که هنوز بسیاری از سیستم های اداری از نرم افزار های تحت DOS استفاده میکنند.
با معرفی سیتم عامل MINIX ، که برای پردازنده های سری ۸۰۸۶ طراحی شده بود، دنیای سیستم عامل وارد فصل جدیدی شد. کد اصلی این سیستم عامل در دسترس عموم قرار داشت و برای نخستین بار یک کاربر میتوانست ضمن مطالعه کدهای سیستم عامل، در آنها تغییر ایجاد کند. البته این سیستم عامل نیز پس از مدتی مجوز انتشار یافت.
در سال ۱۹۸۴ ، ریچارد استالمن، بنیانگزار پروژهی GNU کار روی یک سیستم عامل با کد منبع باز را شروع کرد. GNU یک پروژه آزاد بود که هر کس می توانست آن را کپی کند یا آن را گسترش دهد. استالمن برای رشد و توسعه این پروژه، بزرگترین مجموعه کامپایلر های GNU را تالیف کرد. کار این سری نرم افزارها، ترجمهی برنامههای نوشته شده به وسیلهی زبانهای برنامهنویسی برای استفاده در سیستمعامل GNU بود. علاوه بر این، ابزارهای برنامهنویسی قدرتمند دیگری نظیر GDBH و Emacs نیز به وسیلهی او نوشته شد. در سال ۱۹۹۱، با ساخته شدن هسته لینوکس توسط لینوس توروالدز، این پروژه به ثمر نشست و یک سیستم عامل آزاد پا به عرصه وجود گذاشت و در سراسر دنیا گسترش یافت.
ویژگی های سیستم عامل گنو/لینوکس
امروزه سیستمعامل گنو/لینوکس در ابر رایانهها و ایستگاههای کاری، رایانههای رومیزی و سیستمهای اتوماسیون اداری به کار گرفته میشود. همچنین ریز پردازندههای مورد استفاده در تجهیزات پزشکی و نظامی و حتی تلفنهای همراه نیز آن را به کار میگیرند. از آن جا که گنو/لینوکس نسبت به ویندوز از امنیت بیشتری برخوردار است، شرکتهای با فعالیت محرمانه، برای ارائهی سیستمهای امنیتی ـ حفاظتی خود از این سیستم عامل بهره میگیرند. مهمترین ویژگیهای سیستم عامل گنو/لینوکس را میتوان به صورت زیر بر شمرد.
۱- پایین بودن هزینهها: GNU/Linux یک سیستمعامل رایگان است و بیشتر توزیعهای آن به راحتی از طریق سایتهای اینترنتی (بصورت کاملا قانونی) قابل دریافت هستند. همواره هزاران صفحه اطلاعات رایگان برای نصب و نگهداری آن در اینترنت در ویکیها موجود است. البته بعضی از توزیعهای تجاری گنو/لینوکس نیز وجود دارند که قیمت آنها به مراتب پایینتر از ویندوز و دیگر سیستمعاملهای تجاری موجود است.
۲- امنیت و پایداری: گنو/لینوکس، امنیت یونیکس را به همراه دارد. باز بودن کد اصلی گنو/لینوکس سبب شده است متخصصان با همکاری یکدیگر به رفع نقایض امنیتی آن بپردازند و یکی از امنترین سیستمهای عامل را به وجود آورند. این پایداری سبب شده است که تا سال ۱۹۹۴ میلادی حدود ۳۰٪ از سرورهای دنیا، از خانواده این سیستم عامل استفاده کنند. نکته بسیار مهم این است که تاکنون هیچ گونه کرم و ویروسی، مشابه آن چه برای ویندوز مشاهده میکنیم، برای این نوع از سیستم های عامل نوشته نشده است؛ و اگر روزی این اتفاق بیافتد بدلیل متنباز بودن، سریعا باگ مربوطه برطرف خواهد شد و از گسترش آن جلوگیری بعمل خواهد آمد.
۳- تطبیق با آخرین سخت افزارها : از آنجا که این سیستم عامل در دنیا علاقه مندان زیادی دارد، به محض ساخته شدن قطعات سختافزاری جدید، راهاندازهای آنها نیز در اینترنت انتشار مییابد. به علاوه برخی از توزیعهای گنو/لینوکس با حداقل امکانات سخت افزاری قابل اجرا هستند به طوری که می توانند از CD-ROM یا فلاپی دیسک! و حافظههای جانبی قابل حمل دیگر، به اجرا در آمده و به کار گرفته شوند.
۴- گنو/لینوکس دارای چند محیط گرافیکی و حالت متنی مشابه DOS است. تنوع این محیطها سبب شده است استفادهی کاربران از این سیستم عامل چند کاربره راحتتر و جذابتر شود. KDE و Gnome دو تا از معروفترین محیطهای گرافیکی این سیستم عامل هستند.
۵- قابلیت تطبیق با نیازها: وجود کد اصلی باز به برنامه نویسان آشنا به زبانهای اسمبلی، C و C++ یا حتی Java, Python اجازه میدهد که سیستم عامل را مطابق نیاز شرکت و یا اداره و سازمان خود بسازند. البته برای این کار، برنامه نویس باید اصول طراحی سیستم عامل را بداند. این قابلیت سبب شده است که گنو/لینوکس در مقایسه با سیستم عامل های دیگر بیشتر رشد کند و از جایگاه خوبی بر خوردار باشد.
توزیعهای مختلف گنو/لینوکس
اجزای تشکیل دهنده گنو/لینوکس را هر کس میتواند پس از جمع آوری، به نام خودش عرضه کند. به این مجموعهها که به وسیلهی افراد و شرکتهای مختلف گرد آوری شده است، توزیع ( Distribution) میگویند. کلیهی این توزیعها دارای یک هستهی مشترک به نام Linux هستند.
هر یک از توزیعهای گنو/لینوکس دارای ویژگیهای خاص خود هستند، مثلا ممکن است نصب آنها با هم تفاوت داشته باشد (البته اصول نصب همه گنو/لینوکسها یکسان است) یا ابزارهای مدیریت گرافیکی آنها با هم متفاوت باشند یا نسخه برنامههایی که با یک توزیع خاص ارایه میشوند جدیدتر یا قدیمیتر باشند، محل پروندههای پیکربندی آنها متفاوت باشد و یا ممکن است، توزیعهایی برای امور خاص مانند سرویس دهنده، ایستگاههای کاری، رایانههای قدیمی، و مدیریت شبکه طراحی شده باشند.
انتخاب توزیع مورد استفاده به عواملی مانند سطح علمی کاربر، انتظارات کاربران از آن، ویژگیهای توزیع و یا حتی بازار نرم افزار بستگی دارد.
توزیع (Distro) های گنو/لینوکس بسیار زیادند (نزدیک به ۷۰۰ توزیع). هر توزیعی برای کاربردی خاص ایجاد شده است. برخی از توزیع های معروف عبارتند از:
- Ubuntu
- Mint
- Fedora
- Debian
- OpenSUSE
- Arch
- Gentoo
- Slackware
- Chakar
- Sabayon
- PC Linux OS
- و …
فایلسیستم در گنو/لینوکس
فابلسیستم گنو/لینوکس با سیستم عامل یونیکس مشابه است. فایلسیستم هر رایانه، امکان ذخیره سازی پروندهها و اطلاعات را روی آن فراهم میسازد. هنگامی که از داخل برنامهی واژهپرداز خود سندی را ذخیره میکنید این فایلسیستم است که تعیین میکند سند چگونه و در کجا ذخیره شود. ابزارهای ذخیره سازی و رسانههای جانبی تا قبل از تشکیل فایلسیستم بر روی آنها، قابل استفاده نیستند.
فایل سیستمهای گوناگونی برای سیستم عامل گنو/لینوکس ارایه شدهاند که عبارت است از ext1, ext2, ext3 , ext4 , xfs, jfs, reiserfs, BTRFS و … . این فایلسیستمها در جزییات فنی تفاوتهایی با هم دارند، ولی از نظر ساختاری که ایجاد میکنند مشابهاند و تفاوت چندانی با هم ندارند. در این مقاله، وارد جزییات فنی هر یک از این انواع نمیشویم اما اگر در رشته تحصیلی کامپیوتر گرایش سختافزار یا نرمافزار مشغول به تحصیل هستید در درس ذخیره و بازیابی اطلاعات در مورد آن اطلاعات مناسبی خواهید آموخت.
فایل سیستم مشابه ساختار درخت
فایلسیستمِ سیستمعاملهای مبتنی بر گنو/لینوکس به صورت یک درخت وارون، پیادهسازی شده است. در گنو/لینوکس چیزی به نام درایو ای A,C,D و… نداریم. تمام ابزارها و پارتیشنها، شاخههایی از این درخت وارونه هستند. مرکز این درخت ریشه root نام دارد که بالاترین سطح فایلسیستم را تشکیل میدهد. زیر ریشه، پوشههایی قرار دارد که سایر قسمتهای فایلسیستم را تشکیل میدهند. فایلسیستم از تعداد زیادی پوشه تشکیل شده است. این پوشه ها تقریبا در تمامی سیستم عاملهای مبتنی بر گنو/لینوکس مشترکاند، این ساختار درختی را در شکل زیر مشاهده میکنید.
پارتیشن
در فایلسیستم سیستم عاملهای مبتنی بر گنو/لینوکس، دیسکهای سخت میتوانند پارتیشنهای متعددی داشته باشند در این صورت هر پارتیشن دارای یک نقطه اتصال است که در آن نقطه به درخت فایلسیستم متصل میشود. مثلا میتوان اطلاعات کاربران سیستم را در یک پارتیشن جداگانه ذخیره کرد و نقطهی اتصال آن را Home تعیین کرد (home/) که محل قرار گیری اطلاعات کاربران است.
این اطلاعات معمولا در فایلی با نام fstab ذخیره میشوند و میتوانند توسط کاربر ویرایش شوند.
پارتیشن swap
هنگام نصب گنو/لینوکس، پارتیشنی به نام swap می سازید؛ کاربرد این پارتیشن چیست؟ این پارتیشن که تحت ساختار فایل سیستم به جایی متصل نمیشود، محل قرار گیری swapping file لینوکس است که همان حافظه مجازی روی دیسک سخت است. بهتر است حجم آن را دوبرابر Core (حافظه اصلی) سیستم قرار دهید.
پنجره ترمینال
همانطور که بیان شد، روش دیگر برقراری ارتباط با سیستم عامل گنو/لینوکس استفاده از دستورات خط فرمان است. روشهای مختلفی برای دسترسی به خط فرمان در گنو/لینوکس وجود دارد. یکی از سادهترین این روشها این است که با راهاندازی گنو/لینوکس، وارد مد خط فرمان شوید. ولی اگر با راه اندازی گنو/لینوکس مستقیما وارد محیط Gnome یا KDE یا… می شوید، باز هم میتوانید به ترمینال مجازی دسترسی داشته باشید و با دستورات خط فرمان کار کنید. به این ترتیب به پوسته Shell سیستم عامل گنو/لینوکس دسترسی پیدا خواهید کرد. Shell ، دستورات کاربر را دریافت میکند و آنها را برای اجرا در اختیار هسته (Kernel) قرار میدهد. پوستههای مختلفی برای سیستم عامل لینوکس ارایه شده است که رایج ترین آنها bash ، zsh و csh هستند. که bash در اکثر توزیعهای آن و نیز مکینتاش به عنوان پوسته پیشفرض مورد استفاده قرار میگیرد. برای باز کردن ترمینال در Gnome با زدن کلید Alt+F2 و تایپ کردن gnome-terminal به ترمینال دسترسی خواهید داشت و در KDE نیز با زدن کلید Alt+F2 و تایپ کردن konsole ترمینال اجرا میشود.
همان طور که مشاهده می کنید اعلام سیستم در Bash به صورت زیر است:
root@localhost root #
و در zsh به صورت زیر:
root@localhost # [root]
عبارت root@localhost بدین معنی است که به عنوان کاربر ریشه با گذرواژه ریشه با رایانه محلی (localhost) وارد شدهاید. کلمهی root در مقابل دستور، به منظور نمایش پوشه جاری است. علامت «#» برای کاربر ریشه است و در هر دو پوستهی zsh و bash ثابت است اما $ در bash و ٪ در zsh نماد کاربر غیر ریشه هستند.