چند نخی (Multi-Threading) در سیستم عامل — راهنمای جامع

۳۱۰۴ بازدید
آخرین به‌روزرسانی: ۲۶ شهریور ۱۴۰۲
زمان مطالعه: ۵ دقیقه
چند نخی (Multi-Threading) در سیستم عامل — راهنمای جامع

منظور از نخ (thread) یک گردش اجرایی از طریق کد پردازشی است که شمارنده برنامه خاص خود را برای ردگیری دستورالعمل‌های اجرایی بعدی دارد. هر نخ شامل ثبات‌های سیستم که متغیرهای کاری کنونی را نگه‌داری می‌کنند و پشته‌ای که شامل تاریخچه اجرایی است نیز می‌شود. در این نوشته به معرفی مفهوم محاسبات چند نخی در سیستم‌های عامل می‌پردازیم.

هر نخ اطلاعاتی شامل قطعه کد، قطعه داده و فایل‌های باز را با نخ‌های همتایش به اشتراک می‌گذارد. زمانی که یک نخ آیتم حافظه قطعه‌ای از کد را تغییر می‌دهد، همه نخ‌های دیگر می‌توانند آن را ببینند.

یک نخ به نام پردازش سبک (lightweight process) نیز نامیده می‌شود. نخ‌ها روشی برای بهبود عملکرد برنامه از طریق موازی‌سازی ارائه می‌کنند. نخ‌ها نشان‌دهنده یک رویکرد نرم‌افزاری برای بهبود عملکرد سیستم عامل از طریق کاهش نخ بالاسری هستند. نخ بالاسری (overhead thread) معادل یک پردازش کلاسیک است.

هر نخ صرفاً به یک پردازش تعلق دارد و هیچ نخی نمی‌تواند به خارج از پردازش خودش حرکت کند. در واقع هر نخ، گردش کنترل مجزایی را نمایش می‌دهد. نخ‌ها در پیاده‌سازی سرورهای شبکه و وب‌سرور با موفقیت استفاده شده‌اند. آن‌ها همچنین بنیان مناسبی برای اجرای موازی اپلیکیشن روی پردازنده‌های چندهسته‌ای با حافظه مشترک محسوب می‌شوند. در تصویر زیر، طرز کار یک پردازش تک نخی و چند نخی نمایش یافته است.

تفاوت‌های بین پردازش و نخ

در ادامه، برخی از تفاوت‌های بین پردازش و نخ را آورده‌ایم.

ردیفپردازشنخ
1پردازش وزن سنگینی دارد و منابع زیادی مصرف می‌کند.نخ وزن سبکی دارد و منابع کمتری نسبت به پردازش می‌گیرد.
2سوئیچ کردن بین پردازش‌ها نیازمند تعامل با سیستم عامل است.سوئیچ کردن بین نخ‌ها نیازی به تعامل با سیستم عامل ندارد.
3در محیط‌های چند پردازشی، هر پردازش کد یکسانی را اجرا می‌کند؛ اما حافظه و منابع فایل مخصوص خود را دارد.همه نخ‌ها مجموعه یکسانی از فایل‌های باز و پردازش‌های فرزند را دارند.
4اگر یک پردازش مسدود شود، در این صورت پردازش دیگری نمی‌تواند اجرا شود تا این که پردازش اول از حالت قفل شده خارج شود.زمانی که یک نخ مسدود شده و به حالت انتظار برود، نخ دوم می‌تواند همان وظیفه را اجرا کند.
5پردازش‌های چندگانه بدون استفاده از نخ‌ها از منابع بیشتری استفاده می‌کنند.پردازش‌های دارای چند نخ از منابع کمتری استفاده می‌کنند.
6در پردازش‌های چندگانه هر پردازش به طور مستقل از دیگران عمل می‌کند.یک نخ می‌تواند داده‌های نخ دیگر را خوانده، نوشته و تغییر دهد.

مزیت‌های نخ

  • نخ‌ها زمان سوئیچ زمینه را کاهش می‌دهند.
  • استفاده از نخ باعث همزمانی درون یک پردازش می‌شود.
  • ارتباط کارآمدی صورت می‌گیرد.
  • ایجاد سوئیچ‌های زمینه برای نخ‌ها بسیار به‌صرفه‌تر است.
  • نخ‌ها امکان استفاده از معماری چندپردازنده‌ای را در مقیاس و کارآمدی بالاتر فراهم می‌کنند.

انواع نخ

نخ‌ها به دو روش زیر پیاده‌سازی می‌شوند:

  • نخ‌های در سطح کاربر – این نخ‌ها از سوی کاربران مدیریت می‌شوند.
  • نخ‌های در سطح کرنل – سیستم عامل نخ‌های ایجاد شده در سطح کرنل که همان هسته سیستم عامل است، مدیریت می‌کند.

نخ‌های در سطح کاربر

در این حالت کرنل مدیریت نخ از وجود نخ‌ها اطلاعی ندارد. کتابخانه نخ شامل کد لازم برای ایجاد و تخریب نخ، ارسال پیام و داده بین نخ‌ها، زمان‌بندی اجرای نخ و ذخیره‌سازی و بازیابی زمینه‌های نخ است. اپلیکیشن با یک نخ منفرد آغاز می‌شود.

مزیت‌ها

  • سوئیچ کردن بین نخ‌ها نیازمند دسترسی به کرنل نیست.
  • نخ‌های در سطح کاربر روی هر سیستم عاملی اجرا می‌شوند.
  • زمان‌بندی نخ‌های در سطح کاربر می‌توان خاص یک اپلیکیشن باشد.
  • نخ‌های سطح کاربر به طور سریعی ایجاد و مدیریت می‌شوند.

معایب

  • در یک سیستم عامل معمولی اغلب فراخوانی‌های سیستم مسدود می‌شوند.
  • اپلیکیشن چند نخی نمی‌تواند از مزیت چند پردازشی بهره‌مند شود.

نخ‌های سطح کرنل

در این حالت مدیرت نخ از سوی کرنل اجرا می‌شود و هیچ کدِ مدیریت نخی در سطح اپلیکیشن وجود ندارد. نخ‌های کرنل مستقیماً از سوی سیستم عامل پشتیبانی می‌شوند. هر اپلیکیشن می‌تواند طوری برنامه‌نویسی شود که چند نخی باشد. همه نخ‌های درون یک اپلیکیشن در یک پردازش منفرد پشتیبانی می‌شوند.

کرنل اطلاعات زمینه‌ای را برای پردازش به صورت یک کل نگه‌داری می‌کند و اطلاعات نخ‌های منفرد درون پردازش قرار دارد. زمان‌بندی از سوی کرنل بر مبنای نخ‌ها صورت می‌گیرد. کرنل ایجاد نخ، زمان‌بندی و مدیریت آن‌ها را در فضای کرنل اجرا می‌کند. نخ‌های کرنل به طور کلی فرایند ایجاد و مدیریت کُندتری نسبت به نخ‌های کاربر دارند.

مزیت‌ها

  • کرنل می‌تواند به طور همزمان چند نخ از یک پردازش را روی چند پردازش زمان‌بندی کند.
  • اگر یک نخ در پردازش مسدود شود، کرنل می‌تواند نخ دیگری را روی همان پردازش زمان‌بندی کند.
  • روال‌های کرنل خودشان چند نخی هستند.

معایب

  • نخ‌های کرنل عموماً فرایند ایجاد و مدیریت کندتری نسبت به نخ‌های کاربر دارند.
  • انتقال کنترل از یک نخ به نخ دیگر درون یک پردازش نیازمند مد سوئیچ روی کرنل است.

مدل‌های چند نخی

برخی از سیستم‌های عامل ترکیبی از نخ‌های سطح کاربر و کرنل ارائه می‌کنند. سولاریس نمونه مناسبی از این رویکرد ترکیبی است.

در یک سیستم ترکیبی چندین نخ درون اپلیکیشن یکسان می‌توانند به طور موازی روی چندپردازنده اجرا شوند و بدین ترتیب انسداد سیستم الزامی برای مسدود شدن کل پردازش ندارد. مدل‌های چند نخی سه نوع هستند:

  • رابطه چند به جند
  • رابطه چند به یک
  • رابطه یک به یک

مدل چند به چند

در مدل چند به چند هر تعداد از نخ‌های کاربر که وجود داشته باشند، به تعداد برابر یا کمتری از نخ‌های کرنل تقسیم می‌شوند.

در نمودار زیر مدل نخ بندی چند به چندی را می‌بینید که 6 نخ در سطح کاربر به 6 نخ در سطح کرنل تقسیم شده‌اند. در این مدل توسعه‌دهنده‌ها می‌توانند به هر تعداد که دوست دارند نخ‌های در سطح کاربر ایجاد کنند و نخ‌های معادل کرنل می‌توانند به طور موازی روی یک ماشین چندپردازنده‌ای اجرا شوند. این مدل بهترین دقت را روی همزمانی ارائه می‌کند و زمانی که یک نخ فراخوانی انسداد سیستم را اجرا می‌کند، کرنل می‌تواند نخ دیگری برای اجرا زمان‌بندی کند.

مدل چند به یک

مدل چند به یک نخ‌های سطح کاربر را به یک نخ در سطح کرنل نگاشت می‌کند. مدیریت نخ در فضای کاربر به وسیله کتابخانه نخ انجام می‌پذیرد. زمانی که یک نخ موجب انسداد سیستم می‌شود، کل پردازش مسدود خواهد شد. در این حالت، هر زمان تنها یک نخ می‌تواند به کرنل دسترسی داشته باشد و از این رو چندین نخ نمی‌توانند به طور موازی در محیط چندپردازنده‌ای اجرا شوند.

اگر کتابخانه‌های در سطح کاربر در سیستم عامل به طرزی پیاده‌سازی شوند که سیستم از آن‌ها پشتیبانی نکند، در این صورت نخ‌های کرنل می‌توانند از مدل‌های رابطه چند به یک استفاده کنند.

مدل یک به یک

در مدل رابطه یک به یک برای هر نخ در سطح کاربر یک نخ در سطح کرنل وجود دارد. در این مدل همزمانی بیشتری نسبت به مدل چند به یک وجود دارد. این مدل امکان اجرای نخ دیگر در هنگام انسداد سیستمی یک نخ را فراهم می‌سازد. این مدل از اجرای چنین نخ به طور موازی روی محیط‌های چندپردازنده‌ای پشتیبانی می‌کند.

عیب این مدل آن است که ایجاد نخ‌های در سطح کاربر، نیازمند نخ‌های متناظری در سطح کرنل است. OS/2، ویندوز NT و ویندوز 2000 از مدل رابطه یک به یک استفاده می‌کنند.

تفاوت‌های بین نخ‌های سطح کاربر و سطح کرنل

ردیفنخ‌های سطح کاربرنخ‌های سطح کرنل
1نخ‌های سطح کاربر ایجاد و مدیریت سریع‌تری دارند.نخ‌های سطح کرنل ایجاد و مدیریت کندتری دارند.
2نخ‌های سطح کاربر توسط کتابخانه نخ در سطح کاربر پیاده‌سازی می‌شوند.سیستم عامل از ایجاد نخ‌های سطح کرنل پشتیبانی می‌کند.
3نخ‌های سطح کاربر یکسان هستند و می‌توانند روی هر سیستم عاملی اجرا شوند.نخ‌های سطح کرنل خاص هر سیستم عامل هستند.
4اپلیکیشن‌های چند نخی نمی‌توانند از مزیت چندپردازنده‌ای بودن بهره‌مند شوند.رویه‌های کرنل خودشان چند نخی هستند.

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۲۴ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
tutorialspoint
۳ دیدگاه برای «چند نخی (Multi-Threading) در سیستم عامل — راهنمای جامع»

.منظور از چندنخی بودن روالهای هسته چیست؟

دریک سیستم تک پردازنده ،چند نخی تاثیری بر سرعت اجرای پردازش دارد؟

سلام
نخهای سطح کاربر و سطح سیستم عامل میتونن به فضای آدرسی هم دسترسی داشته باشن یا بنویسن ؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *