چند نخی (Multi–Threading) در سیستم عامل – راهنمای جامع
منظور از نخ (thread) یک گردش اجرایی از طریق کد پردازشی است که شمارنده برنامه خاص خود را برای ردگیری دستورالعملهای اجرایی بعدی دارد. هر نخ شامل ثباتهای سیستم که متغیرهای کاری کنونی را نگهداری میکنند و پشتهای که شامل تاریخچه اجرایی است نیز میشود. در این نوشته به معرفی مفهوم محاسبات چند نخی در سیستمهای عامل میپردازیم.
هر نخ اطلاعاتی شامل قطعه کد، قطعه داده و فایلهای باز را با نخهای همتایش به اشتراک میگذارد. زمانی که یک نخ آیتم حافظه قطعهای از کد را تغییر میدهد، همه نخهای دیگر میتوانند آن را ببینند.
یک نخ به نام پردازش سبک (lightweight process) نیز نامیده میشود. نخها روشی برای بهبود عملکرد برنامه از طریق موازیسازی ارائه میکنند. نخها نشاندهنده یک رویکرد نرمافزاری برای بهبود عملکرد سیستم عامل از طریق کاهش نخ بالاسری هستند. نخ بالاسری (overhead thread) معادل یک پردازش کلاسیک است. پردازشهای برای برقراری ارتباط با هم در زمان اجرا به صورت موازی توسط سیستم عامل از سامانهای به نام «ارتباط بین پردازشی» (Inter Process Communication | IPC) استفاده میکنند. با کمک IPC چند پردازش موازی میتوانند اطلاعات مورد نیاز را در زمان اجرا با هم به اشتراک بگذارند.
هر نخ صرفاً به یک پردازش تعلق دارد و هیچ نخی نمیتواند به خارج از پردازش خودش حرکت کند. در واقع هر نخ، گردش کنترل مجزایی را نمایش میدهد. نخها در پیادهسازی سرورهای شبکه و وبسرور با موفقیت استفاده شدهاند. آنها همچنین بنیان مناسبی برای اجرای موازی اپلیکیشن روی پردازندههای چندهستهای با حافظه مشترک محسوب میشوند. در تصویر زیر، طرز کار یک پردازش تک نخی و چند نخی نمایش یافته است.
تفاوتهای بین پردازش و نخ
در ادامه، برخی از تفاوتهای بین پردازش و نخ را آوردهایم.
ردیف | پردازش | نخ |
---|---|---|
1 | پردازش وزن سنگینی دارد و منابع زیادی مصرف میکند. | نخ وزن سبکی دارد و منابع کمتری نسبت به پردازش میگیرد. |
2 | سوئیچ کردن بین پردازشها نیازمند تعامل با سیستم عامل است. | سوئیچ کردن بین نخها نیازی به تعامل با سیستم عامل ندارد. |
3 | در محیطهای چند پردازشی، هر پردازش کد یکسانی را اجرا میکند؛ اما حافظه و منابع فایل مخصوص خود را دارد. | همه نخها مجموعه یکسانی از فایلهای باز و پردازشهای فرزند را دارند. |
4 | اگر یک پردازش مسدود شود، در این صورت پردازش دیگری نمیتواند اجرا شود تا این که پردازش اول از حالت قفل شده خارج شود. | زمانی که یک نخ مسدود شده و به حالت انتظار برود، نخ دوم میتواند همان وظیفه را اجرا کند. |
5 | پردازشهای چندگانه بدون استفاده از نخها از منابع بیشتری استفاده میکنند. | پردازشهای دارای چند نخ از منابع کمتری استفاده میکنند. |
6 | در پردازشهای چندگانه هر پردازش به طور مستقل از دیگران عمل میکند. | یک نخ میتواند دادههای نخ دیگر را خوانده، نوشته و تغییر دهد. |
مزیتهای نخ
- نخها زمان سوئیچ زمینه را کاهش میدهند.
- استفاده از نخ باعث همزمانی درون یک پردازش میشود.
- ارتباط کارآمدی صورت میگیرد.
- ایجاد سوئیچهای زمینه برای نخها بسیار بهصرفهتر است.
- نخها امکان استفاده از معماری چندپردازندهای را در مقیاس و کارآمدی بالاتر فراهم میکنند.
انواع نخ
نخها به دو روش زیر پیادهسازی میشوند:
- نخهای در سطح کاربر – این نخها از سوی کاربران مدیریت میشوند.
- نخهای در سطح کرنل – سیستم عامل نخهای ایجاد شده در سطح کرنل که همان هسته سیستم عامل است، مدیریت میکند.
نخهای در سطح کاربر
در این حالت کرنل مدیریت نخ از وجود نخها اطلاعی ندارد. کتابخانه نخ شامل کد لازم برای ایجاد و تخریب نخ، ارسال پیام و داده بین نخها، زمانبندی اجرای نخ و ذخیرهسازی و بازیابی زمینههای نخ است. اپلیکیشن با یک نخ منفرد آغاز میشود.
مزیتها
- سوئیچ کردن بین نخها نیازمند دسترسی به کرنل نیست.
- نخهای در سطح کاربر روی هر سیستم عاملی اجرا میشوند.
- زمانبندی نخهای در سطح کاربر میتوان خاص یک اپلیکیشن باشد.
- نخهای سطح کاربر به طور سریعی ایجاد و مدیریت میشوند.
معایب
- در یک سیستم عامل معمولی اغلب فراخوانیهای سیستم مسدود میشوند.
- اپلیکیشن چند نخی نمیتواند از مزیت چند پردازشی بهرهمند شود.
نخهای سطح کرنل
در این حالت مدیرت نخ از سوی کرنل اجرا میشود و هیچ کدِ مدیریت نخی در سطح اپلیکیشن وجود ندارد. نخهای کرنل مستقیماً از سوی سیستم عامل پشتیبانی میشوند. هر اپلیکیشن میتواند طوری برنامهنویسی شود که چند نخی باشد. همه نخهای درون یک اپلیکیشن در یک پردازش منفرد پشتیبانی میشوند.
کرنل اطلاعات زمینهای را برای پردازش به صورت یک کل نگهداری میکند و اطلاعات نخهای منفرد درون پردازش قرار دارد. زمانبندی از سوی کرنل بر مبنای نخها صورت میگیرد. کرنل ایجاد نخ، زمانبندی و مدیریت آنها را در فضای کرنل اجرا میکند. نخهای کرنل به طور کلی فرایند ایجاد و مدیریت کُندتری نسبت به نخهای کاربر دارند.
مزیتها
- کرنل میتواند به طور همزمان چند نخ از یک پردازش را روی چند پردازش زمانبندی کند.
- اگر یک نخ در پردازش مسدود شود، کرنل میتواند نخ دیگری را روی همان پردازش زمانبندی کند.
- روالهای کرنل خودشان چند نخی هستند.
معایب
- نخهای کرنل عموماً فرایند ایجاد و مدیریت کندتری نسبت به نخهای کاربر دارند.
- انتقال کنترل از یک نخ به نخ دیگر درون یک پردازش نیازمند مد سوئیچ روی کرنل است.
مدلهای چند نخی
برخی از سیستمهای عامل ترکیبی از نخهای سطح کاربر و کرنل ارائه میکنند. سولاریس نمونه مناسبی از این رویکرد ترکیبی است.
در یک سیستم ترکیبی چندین نخ درون اپلیکیشن یکسان میتوانند به طور موازی روی چندپردازنده اجرا شوند و بدین ترتیب انسداد سیستم الزامی برای مسدود شدن کل پردازش ندارد. مدلهای چند نخی سه نوع هستند:
- رابطه چند به جند
- رابطه چند به یک
- رابطه یک به یک
مدل چند به چند
در مدل چند به چند هر تعداد از نخهای کاربر که وجود داشته باشند، به تعداد برابر یا کمتری از نخهای کرنل تقسیم میشوند.
در نمودار زیر مدل نخ بندی چند به چندی را میبینید که 6 نخ در سطح کاربر به 6 نخ در سطح کرنل تقسیم شدهاند. در این مدل توسعهدهندهها میتوانند به هر تعداد که دوست دارند نخهای در سطح کاربر ایجاد کنند و نخهای معادل کرنل میتوانند به طور موازی روی یک ماشین چندپردازندهای اجرا شوند. این مدل بهترین دقت را روی همزمانی ارائه میکند و زمانی که یک نخ فراخوانی انسداد سیستم را اجرا میکند، کرنل میتواند نخ دیگری برای اجرا زمانبندی کند.
مدل چند به یک
مدل چند به یک نخهای سطح کاربر را به یک نخ در سطح کرنل نگاشت میکند. مدیریت نخ در فضای کاربر به وسیله کتابخانه نخ انجام میپذیرد. زمانی که یک نخ موجب انسداد سیستم میشود، کل پردازش مسدود خواهد شد. در این حالت، هر زمان تنها یک نخ میتواند به کرنل دسترسی داشته باشد و از این رو چندین نخ نمیتوانند به طور موازی در محیط چندپردازندهای اجرا شوند.
اگر کتابخانههای در سطح کاربر در سیستم عامل به طرزی پیادهسازی شوند که سیستم از آنها پشتیبانی نکند، در این صورت نخهای کرنل میتوانند از مدلهای رابطه چند به یک استفاده کنند.
مدل یک به یک
در مدل رابطه یک به یک برای هر نخ در سطح کاربر یک نخ در سطح کرنل وجود دارد. در این مدل همزمانی بیشتری نسبت به مدل چند به یک وجود دارد. این مدل امکان اجرای نخ دیگر در هنگام انسداد سیستمی یک نخ را فراهم میسازد. این مدل از اجرای چنین نخ به طور موازی روی محیطهای چندپردازندهای پشتیبانی میکند.
عیب این مدل آن است که ایجاد نخهای در سطح کاربر، نیازمند نخهای متناظری در سطح کرنل است. OS/2، ویندوز NT و ویندوز 2000 از مدل رابطه یک به یک استفاده میکنند.
تفاوتهای بین نخهای سطح کاربر و سطح کرنل
ردیف | نخهای سطح کاربر | نخهای سطح کرنل |
---|---|---|
1 | نخهای سطح کاربر ایجاد و مدیریت سریعتری دارند. | نخهای سطح کرنل ایجاد و مدیریت کندتری دارند. |
2 | نخهای سطح کاربر توسط کتابخانه نخ در سطح کاربر پیادهسازی میشوند. | سیستم عامل از ایجاد نخهای سطح کرنل پشتیبانی میکند. |
3 | نخهای سطح کاربر یکسان هستند و میتوانند روی هر سیستم عاملی اجرا شوند. | نخهای سطح کرنل خاص هر سیستم عامل هستند. |
4 | اپلیکیشنهای چند نخی نمیتوانند از مزیت چندپردازندهای بودن بهرهمند شوند. | رویههای کرنل خودشان چند نخی هستند. |
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای علوم کامپیوتر
- مجموعه آموزشهای مهندسی نرمافزار
- مجموعه آموزشهای لینوکس (Linux)
- آموزش سیستم عامل (مرور – تست کنکور ارشد)
- آموزش سیستم های عامل
- Thread چیست ؟ — به زبان ساده و جامع
==
.منظور از چندنخی بودن روالهای هسته چیست؟
دریک سیستم تک پردازنده ،چند نخی تاثیری بر سرعت اجرای پردازش دارد؟
سلام
نخهای سطح کاربر و سطح سیستم عامل میتونن به فضای آدرسی هم دسترسی داشته باشن یا بنویسن ؟