نمایش شیوهی ایجاد پروسههای اولیهی لینوکس و طرز کار آنها از روی کد کرنل
پروسهها در لینوکس یک ساختار درختی دارند و همه چیز از پروسه با PID یک شروع میشه که در توزیعهای جدید لینوکس systemd است ولی در نسخههای قدیمیتر init, upstart و چیزهای دیگری میتوانست باشد. البته یک مورد جدید و جذاب دیگه unikernel میباشد که در آن برنامههای مختلف میتوانند به عنوان PID 1 اجرا شده و در ایجاد containerهایی با وابستگی کم کاربرد دارد.
ایجاد این پروسه در تابع start_kernel از کد کرنل که در فایل init/main.c تعریف شده است انجام میشود. پروسه با PID 1 در لینوکس یک پروسهی کامل میباشد که هم user space داشته و هم kernel space و پروسههایی که این دو را داشته باشند در ساختار درختی زیر مجموعهی این پروسه میباشند.
پروسهی دومی که در تابع start_kernel ایجاد میشود دارای PID 2 میباشد و در ساختار درختی موازی این پروسه بوده و زیر مجموعهی آن نمیباشد. اسم این پروسه kthreadd میباشد و بر خلاف پروسهی PID 1 دارای user space نبوده و فقط kernel space دارد. این پروسه وظیفهی مدیریت kernel threadها را در لینوکس دارد که برای مدیریت کارهای مختلف سیستمی و انجام وظایف مختلف مربوط به کرنل و درایورها استفاده میشوند.
با شروع به کار این دو پروسه سیستمعامل به صورت کامل بالا آمده و مابقی پروسهها میتوانند تحت آنها شروع به کار کرده و سرویسدهی را انجام دهند. البته یک پروسهی دیگر نیز با PID 0 در لینوکس وجود دارد که در خروجی ps نمیتوانید آنرا مشاهده کنید ولی با استفاده از ابزارهایی مثل ftrace, ebpf امکان کسب اطلاعات از آن وجود دارد.
برای اطلاع از جزئیات بیشتری که در مورد این سه پروسه وجود دارد ویدئو را مشاهده کنید.
لینک ویدئو در یوتیوب:
https://youtu.be/vRwfnFXex3E
لینک ویدئو در آپارات:
https://aparat.com/v/xkl8808
#ShortLinuxInternals #linux #internals #programming #processes #kernel #systemd #initd #kernelthreads
پروسهها در لینوکس یک ساختار درختی دارند و همه چیز از پروسه با PID یک شروع میشه که در توزیعهای جدید لینوکس systemd است ولی در نسخههای قدیمیتر init, upstart و چیزهای دیگری میتوانست باشد. البته یک مورد جدید و جذاب دیگه unikernel میباشد که در آن برنامههای مختلف میتوانند به عنوان PID 1 اجرا شده و در ایجاد containerهایی با وابستگی کم کاربرد دارد.
ایجاد این پروسه در تابع start_kernel از کد کرنل که در فایل init/main.c تعریف شده است انجام میشود. پروسه با PID 1 در لینوکس یک پروسهی کامل میباشد که هم user space داشته و هم kernel space و پروسههایی که این دو را داشته باشند در ساختار درختی زیر مجموعهی این پروسه میباشند.
پروسهی دومی که در تابع start_kernel ایجاد میشود دارای PID 2 میباشد و در ساختار درختی موازی این پروسه بوده و زیر مجموعهی آن نمیباشد. اسم این پروسه kthreadd میباشد و بر خلاف پروسهی PID 1 دارای user space نبوده و فقط kernel space دارد. این پروسه وظیفهی مدیریت kernel threadها را در لینوکس دارد که برای مدیریت کارهای مختلف سیستمی و انجام وظایف مختلف مربوط به کرنل و درایورها استفاده میشوند.
با شروع به کار این دو پروسه سیستمعامل به صورت کامل بالا آمده و مابقی پروسهها میتوانند تحت آنها شروع به کار کرده و سرویسدهی را انجام دهند. البته یک پروسهی دیگر نیز با PID 0 در لینوکس وجود دارد که در خروجی ps نمیتوانید آنرا مشاهده کنید ولی با استفاده از ابزارهایی مثل ftrace, ebpf امکان کسب اطلاعات از آن وجود دارد.
برای اطلاع از جزئیات بیشتری که در مورد این سه پروسه وجود دارد ویدئو را مشاهده کنید.
لینک ویدئو در یوتیوب:
https://youtu.be/vRwfnFXex3E
لینک ویدئو در آپارات:
https://aparat.com/v/xkl8808
#ShortLinuxInternals #linux #internals #programming #processes #kernel #systemd #initd #kernelthreads
YouTube
Investigating Initial Processes in Linux (systemd, kthreadd)
پروسهها در لینوکس یک ساختار درختی دارند و همه چیز از پروسه با PID یک شروع میشه که در توزیعهای جدید لینوکس systemd است ولی در نسخههای قدیمیتر init, upstart و چیزهای دیگری میتوانست باشد. البته یک مورد جدید و جذاب دیگه unikernel میباشد که در آن برنامههای…
❤12👍3