در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

6 مرحله بوت (Boot) شدن کامل لینوکس (GRUB) به زبان ساده قسمت 2

مرحله چهارم Boot سیستم عامل لینوکس – Kernel

همانطور که قبلا هم در انجمن تخصصی فناوری اطلاعات ایران در خصوص تفاوت های Kernel و Operating System و همچنین تفاوت های Kernel و Shell مطالبی نوشته ایم قطعا شما به این موضوع پی برده اید که در واقع Kernel یا هسته یک سیستم عامل قلب تپنده سیستم عامل شما است و تمامی فرآیندهای سیستم عامل شما را این Kernel است که مدیریت می کند. در مرحله قبلی که در مقاله قبلی به آن پرداختیم GRUB به جایی رسید که Image های مربوط به Kernel و initrd را به داخل حافظه RAM سیستم Load کرد و از این مرحله به بعد همگی کارها بر عهده Kernel می باشد.

Kernel به محض Load شدن تنظیمات مربوط به حافظه RAM اختصاص یافته به سیستم و همچنین پیکربندی کلیه سخت افزارهای سیستم را انجام می دهد سپس image مربوط به initrd را از حالت فشرده خارج می کند ، در حالت پیشفرض این image در حالت فشرده به شکل zlib یا zImage قرار گرفته است بعد از اینکه از حالت فشرده خارج کرد با mount کردن آن درایورهای ضروری را Load می کند.

فرآیند Boot سیستم عامل لینوکس چگونه انجام می شود

Load کردن و Unload کردن ماژول های Kernel سیستم عامل لینوکس با استفاده از برنامه هایی به نام insmod و rmmod انجام می شود که در initrd image قرار گرفته اند. سپس Kernel به دنبال هارد دیسک می رود و بررسی می کند که در حالت LVM قرار دارند و یا اینکه RAID شده اند. سپس initrd را Unmount می کند و فضای اختصاص یافته توسط این Image را نیز خالی می کند. سپس Kernel پارتیشن ریشه یا root partition ای که در فایل grub.conf وجود دارد را در حالت فقط خواندنی یا read only به سیستم Mount می کند و در نهایت فرآیند init را اجرا می کند. توجه کنید که Kernel تا زمانیکه سیستم شما خاموش نشده باشد بر روی حافظه RAM شما باقی می ماند.

کاربرد init در لینوکس

مرحله پنجم Boot سیستم عامل لینوکس - init process

اگر دقت کرده باشید بعد از اینکه از صفحه انتخاب سیستم عامل GRUB عبور کردید به یکباره یک سری خطوط به شما نمایش داده می شود و در کنار آنها بعضا کلماتی مثل OK و Failed را مشاهده می کنید که به سرعت از جلوی چشم شما عبور می کند ، انگار که سیستم در حال Start کردن سرویس های لازم جهت اجرای سیستم عامل باشد. این دقیقا درست است ، به محض اینکه Kernel شما Load شد یک فرآیند یا Process به نام init توسط Kernel اجرا می شود که اولین Process ای است که توسط Kernel اجرا می شود. init مخفف کلمه initialization است که در ترجمه فارسی به معنی مقدار دهی اولیه است اما شما در اینجا از init به عنوان پردازشی یاد کنید که همه پردازش های دیگر مورد نیاز سیستم عامل را فراخوانی و اجرا می کند.

زمانیکه init اجرا شد به عنوان فرآیند والد یا Parent Process یا فرآیند جد بزرگوار ( باور کنید ترجمه Grandparent Process همین میشه دیگه D: ) در سیستم عامل لینوکس در نظر گرفته می شود. اولین کاری که init انجام می دهد این است که محتویات فایل تنظیمات خودش یا initialization file ای که در مسیر etc//inittab// وجود دارد را بخواند. محتویات این فایل به init می گوید که یک اسکریپت تنظیمات اولیه محیطی یا environment configuration script را اجرا کند که در این اسکریپت تعیین مسیرها یا path ها ، فرآیند Swapping ، بررسی فایل سیستم و ... انجام می شود. تقریبا می توان گفت اجرای این اسکریپت هر چیزی که سیستم شما نیاز دارد تا فرآیند مقداردهی اولیه یا همان initialization را انجام دهد را شامل می شود ، حتی تعیین کردن ساعت سیستم ، پورت های سریال و ... همه م همه در این مرحله انجام می شود.

منظور از run level در سیستم عامل لینوکس چیست ؟

Init همچنان به خواندن فایل etc//inittab// ادامه می دهد ، در ادمه این فایل به init گفته می شود که سیستم قرار است چگونه در هر run level پیکربندی شود و همچنین run level پیشفرض را نیز تنظیم می کند. Run level در واقع پیکربندی فرآیند ها یا پردازش های موجود در سیستم است. تمامی سیستم عامل های خانوانده Unix توانایی این را دارند که با پیکربندی های پردازشی مختلف اجرا شوند برای مثال ما می توانیم به سیستم عامل لینوکس بگوییم که در حالت تک کاربره یاsingle user mode اجرا شود که در این حالت اگر init اجرا شود ما می گوییم init در run level 1 اجرا شده است ، در زبان دیگر به run level ای که single user mode است run level S نیز گفته می شود.

در این حالت ( Single User Mode ) فقط مدیر سیستم می تواند به سیستم متصل شود. معمولا زمانی از چنین run level ای استفاده می شود که می خواهیم وظایف نگهداری سیستم یا maintenance task های سیستم را بدون ریسک تخریب سیستم یا داده های کاربران انجام دهیم. طبیعتا در چنین run level ای ما نمی خواهیم هیچگونه سرویسی به کاربران ارائه دهیم و سرویس های کاربری معمولا در این run level غیرفعال یا Disable هستند. Run Level دیگری که استفاده می شود به نام reboot run level شناخته می شود یا run level 6 که وظیفه آن shutdown کردن همه سرویس ها و دستورالعمل های وابسته به آن و همچنین restart کردن سیستم است. همانطور که در مثال زیر مشاهده می کنید شما می توانید با استفاده از دستور who متوجه شوید که در چه run level ای قرار دارید :

root@itpro-kali:~$ who -r
	run-level 2 2015-11-17 09:52		last=S

در ادامه در خصوص run level ها مختلفی که در لینوکس وجود دارند بیشتر صحبت خواهیم کرد این ویژگی ITPRO است. بعد از اینکه run level پیشفرض برای سیستم در نظر گرفته شد ، init با توجه به محتویات دایرکتوری rc ای که به run level مربوطه اختصاص یافته است تمامی پردازش ها یا Process های پس زمینه ای که برای اجرا شدن سیستم مورد نیاز هستند را اجرا می کند. Init هر کدام از اسکریپت های kill را که با حرف K شروع می شوند را با یک پارامتر stop اجرا می کند و سپس تمامی اسکریپت های Start را که با S شروع می شوند را اجرا می کند و سرویس ها و برنامه های کاربردی که در run level مربوطه وجود خواهند داشت را اجرا خواهد کرد.

نکته جالب در خصوص این اسکریپت ها این است که همانند سرویس های ویندوز شما می توانید آنها را بعد از وارد شدن به سیستم عامل لینوکس بصورت دستی نیز stop و یا start کنید ، اینکا براحتی با استفاده از دستور service httpd stop یا service httpd start در مسیر etc//init.d//httpd// قابل اجرا است ، البته دقت کنید که در این مثال ما سرویس httpd را مثال زدیم ، شما می توانید هر سرویس دیگری را به همین شکل start یا stop کنید فقط فراموش نکنید که برای انجام اینکار حتما با کاربر root بایستی وارد سیستم شوید.

توجه کنید که در زمان startup سیستم دور اسکریپت rc2.d و rc3.d معمولا اجرا می شوند. در این حالت هیچ سرویسی در حالت stopped قرار نمی گیرد یا حداقل می توان گفت بصورت دائمی در حالت stopped قرار نمی گیرد. هیچکدام از اسکریپت هایی که در پوشه etc//rc<x>.d// قرار گرفته اند سرویس ها را stop یا start نمی کنند. در عوض تمامی فایل هایی که در پوشه etc//rc<x>.d// قرار گرفته اند به عنوان یک لینک عمل می کنند که به اسکریپت هایی که در پوشه etc//init.d// قرار گرفته اند اشاره می کنند.

در این حالت به اینگونه لینک ها symbolic link گفته می شود ، یک symbolic link چیزی بیشتر از یک فایل که به یک فایل دیگر اشاره می کند نیست و زمانی استفاده می شود که شما می خواهید بدون ایجاد کردن و یا حذف کردن یک فایل اسکریپت آن را اجرا کنید و سرویس ها را start و یا stop کنید. در نهایت در این قسمت اسکریپت های مربوط به run level مورد نظرتان انتخاب و اجرا خواهند شد و سیستم به سراغ مرحله بعدی می رود.لیست run level های مختلف در سیستم عامل لینوکس را می توانید در زیر با مشخصات آنها مشاهده کنید :

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault: 

معرفی run level های لینوکس

مرحله ششم Boot سیستم عامل لینوکس - Run Level

همانطور که در مرحله قبل مشاهده کردید در فرآیند init یک run level انتخاب می شود که بر حسب انتخابی که انجام می شود یک سری اسکریپت از پوشه های مورد نظر اجرا می شوند . startup script های مربوط به init در پوشه etc//rc.d// قرار گرفته اند اما اسکریپت هایی که برای run level ها استفاده می شوند در subdirectory هایی به شکل etc//rc.d//rc0.d// تا etc//rc.d//rc6.d// بر اساس انتخاب init از بین run level های 0 تا 6 اجرا می شوند. در آخر نیز init هر چیزی که در پوشه etc//rc.d//rc.local// پیدار می کند را فارق از اینکه در چه run level ای کار می کند اجرا خواهد کرد. در زیر پوشه های مربوط به انواع run level script لیست شده است که متناسب با run level انتخاب شده در init اجرا خواهند شد.

Runlevel  Directory
0 /etc/rc.d/rc0.d
1 /etc/rc.d/rc1.d
2 /etc/rc.d/rc2.d
3 /etc/rc.d/rc3.d
4 /etc/rc.d/rc4.d
5 /etc/rc.d/rc5.d
6 /etc/rc.d/rc6.d 

به این موضوع دقت کنید که اسکریپت های آخری که عنوان کردیم در پوشه rc.local وجود دارد در همه توزیع های لینوکس ممکن است وجود نداشته باشند ، در نهایت همه چیز اگر به خوبی پیش برود شما می توانید صفحه login مربوط به سیستم عامل لینوکس را مشاهده کنید . امیدوارم مورد توجه شما قرار گرفته باشد. ITPRO باشید

نویسنده : محمد نصیری

منبع : جزیره لینوکس وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد

#کاربرد_boot_loader_در_سیستم_عامل #انواع_boot_loader #مراحل_بوت_شدن_سیستم_عامل_لینوکس #init_چیست #run_level_در_لینوکس_چیست #فرآیند_startup_لینوکس_چگونه_انجام_می_شود #grub_چگونه_کار_می_کند #مراحل_boot_سیستم_عامل_لینوکس #کاربرد_init_در_لینوکس #run_level_چیست
عنوان
1 6 مرحله بوت (Boot) شدن کامل لینوکس (GRUB) به زبان ساده قسمت 1 رایگان
2 6 مرحله بوت (Boot) شدن کامل لینوکس (GRUB) به زبان ساده قسمت 2 رایگان
زمان و قیمت کل 0″ 0
1 نظر
قدیر یُلمه

ممنون اقای نصیری..خیلی جالب بود

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

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....