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