Forwarded from OS Internals (Abolfazl Kazemi)
جزئیات پروسه و نخ در لینوکس
به صورت خلاصه از دید ویندوز پروسه فقط یک container میباشد که اجرا نشده و فضایی برای اجرای Threadها فراهم میکند و در سطح کرنل نیز دو ساختار EPROCESS, ETHREAD برای این دو تعریف شدهاند. اما در لینوکس ماجرا متفاوت است و Process, Thread هر دو قابلیت اجرا داشته و در سطح کرنل نیز یک ساختار task_struct برای آنها تعریف شده است. در دنیای شیگرایی مثل این است که در لینوکس یک کلاس برای این دو وجود دارد و فقط در زمان ایجاد شی خصوصیات متفاوتی برای آنها تنظیم میشود.
اگر به سراغ برنامهنویسی سیستمی در لینوکس برویم، تابع fork برای ایجاد پروسه استفاده شده و از تابع pthread_create نیز برای ایجاد نخ در لینوکس استفاده میشود. در سطحی کمی پایینتر، هر دوی این توابع syscallای به نام clone را فراخوانی میکنند و با ستکردن فلگهایی مشخص میکنند که قصد ایجاد پروسه یا نخ را دارند. در زمان بررسی برنامهها، در خروجی دستور ps برای یک برنامهی چند پروسهای pidهای مختلفی خواهیم دید ولی در یک برنامهی چند نخی pidها یکسان بوده ولی عددهای متفاوتی در فیلد Light-Weight Process-LWP میبینیم.
نکتهی جالب دیگر این است که در سطح کرنل پروسهها یک لیست پیوندی تشکیل میدهند. هم شیوهی ایجاد لیست پیوندی Generic در سطح کرنل و در زبان C موضوع جالبی است و هم اینکه به کمک فیلدی به اسم tasks میتوانیم یک لیست پیوندی از پروسهها تشکیل دهیم که به پروسههای قبلی و بعدی اشاره میکند.
این موارد و موارد دیگری از جزئیات پروسهها و نخهای لینوکس مواردی هستند که در این ویدئو به آن میپردازیم.
لینک ویدئو در یوتیوب:
https://youtu.be/0fxYtyFn8Jc
لینک ویدئو در آپارات:
https://aparat.com/v/cnytp55
#ShortLinuxInternals #linux #internals #syscalls #kernel #process #thread #gdb #qemu #clone #LWP
به صورت خلاصه از دید ویندوز پروسه فقط یک container میباشد که اجرا نشده و فضایی برای اجرای Threadها فراهم میکند و در سطح کرنل نیز دو ساختار EPROCESS, ETHREAD برای این دو تعریف شدهاند. اما در لینوکس ماجرا متفاوت است و Process, Thread هر دو قابلیت اجرا داشته و در سطح کرنل نیز یک ساختار task_struct برای آنها تعریف شده است. در دنیای شیگرایی مثل این است که در لینوکس یک کلاس برای این دو وجود دارد و فقط در زمان ایجاد شی خصوصیات متفاوتی برای آنها تنظیم میشود.
اگر به سراغ برنامهنویسی سیستمی در لینوکس برویم، تابع fork برای ایجاد پروسه استفاده شده و از تابع pthread_create نیز برای ایجاد نخ در لینوکس استفاده میشود. در سطحی کمی پایینتر، هر دوی این توابع syscallای به نام clone را فراخوانی میکنند و با ستکردن فلگهایی مشخص میکنند که قصد ایجاد پروسه یا نخ را دارند. در زمان بررسی برنامهها، در خروجی دستور ps برای یک برنامهی چند پروسهای pidهای مختلفی خواهیم دید ولی در یک برنامهی چند نخی pidها یکسان بوده ولی عددهای متفاوتی در فیلد Light-Weight Process-LWP میبینیم.
نکتهی جالب دیگر این است که در سطح کرنل پروسهها یک لیست پیوندی تشکیل میدهند. هم شیوهی ایجاد لیست پیوندی Generic در سطح کرنل و در زبان C موضوع جالبی است و هم اینکه به کمک فیلدی به اسم tasks میتوانیم یک لیست پیوندی از پروسهها تشکیل دهیم که به پروسههای قبلی و بعدی اشاره میکند.
این موارد و موارد دیگری از جزئیات پروسهها و نخهای لینوکس مواردی هستند که در این ویدئو به آن میپردازیم.
لینک ویدئو در یوتیوب:
https://youtu.be/0fxYtyFn8Jc
لینک ویدئو در آپارات:
https://aparat.com/v/cnytp55
#ShortLinuxInternals #linux #internals #syscalls #kernel #process #thread #gdb #qemu #clone #LWP
YouTube
Process and Thread Internals in Linux [PER]
به صورت خلاصه از دید ویندوز پروسه فقط یک container میباشد که اجرا نشده و فضایی برای اجرای Threadها فراهم میکند و در سطح کرنل نیز دو ساختار EPROCESS, ETHREAD برای این دو تعریف شدهاند. اما در لینوکس ماجرا متفاوت است و Process, Thread هر دو قابلیت اجرا داشته…