عکس پیش‌فرض نوشته

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

چند پردازشی متقارن در سیستم های عامل

 

همانطور که میدانید، هر دستورالعمل در دنباله ای از اعمال اجرا میشود. (واکشی دستورالعمل، واکشی عملوندها، انجام عمل و ذخیره نتایج)

این نگاه به کامپیوتر هیچ گاه کاملاً درست نبوده است. در سطح ریزعمل (Micro-Operation)، سیگنال های کنترلی متعدد به طور همزمان تولید میشوند. حداقل در Piping دستورالعمل، هم پوشانی اعمال واکشی و اجرای آن، مدت هاست که وجود داشته است. این دو، مثال هایی از انجام موازی اعمال هستند.

با رشد فناوری کامپیوتر و کاهش قیمت سخت افزار، طراحان کامپیوتر با فرصت های زیادی برای ایجاد توازی روبرو شده اند تا کارآیی و در مواردی قابلیت اطمینان را افزایش دهند. در این مطلب قصد داریم یکی از متداول ترین رویکردهای توازی پردازش را بررسی کنیم. این رویکرد، چند پردازشی متقارن (Symmetric Multiprocessing) یا SMP نامیده میشود.

مدتی قبل به طور اجمالی و خلاصه بحث چند پردازی متقارن و ریز هسته را در سایت مورد بررسی قرار داده بودیم.

 

معماری چند پردازشی متقارن

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

جریان دستورالعمل واحد و داده واحد (SISD)

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

جریان دستورالعمل واحد و داده های چندگانه (SIMD)

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

جریان دستورالعمل های چندگانه و داده واحد (MISD)

دنباله ای از داده ها به مجموعه ای از پردازنده ها منتقل میشود و هر پردازنده دنباله متفاوتی از دستورالعمل ها را اجرا میکند. جالب است بدانید که این ساختار هرگز پیاده سازی نشده است!

جریان دستورالعمل های چند گانه و داده های چندگانه (MIMD)

مجموعه ای از پردازنده ها، به طور همزمان دنباله های متفاوتی از دستورالعمل ها را روی مجموعه های مختلفی از داده ها اجرا میکنند.

 

در گروه MIMD، پردازنده ها همه منظوره هستند زیرا باید بتوانند همه دستورالعمل های لازم برای تغییر مناسب داده ها را پردازش کنند. MIMD را میتوان بر اساس ابزاری که پردازنده ها با آن ارتباط برقرار میکنند، به گروه های کوچک تری تقسیم کرد.

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

اگر پردازنده ها حافظه مشترک داشته باشند، آنگاه هر پردازنده به برنامه ها و داده های ذخیره شده در حافظه اشتراکی دسترسی دارد و پردازنده ها از طریق این حافظه ارتباط برقرار میکنند. به چنین سیستمی چند پردازنده ای با حافظه مشترک میگویند.

 

یک رده بندی کلی چند پردازنده های با حافظه مشترک، بر مبنای نحوه تخصیص process ها به پردازنده هاست. دو رویکرد بنیادی، رئیس/مرئوس (Master/Slave) و متقارن می باشند.

در معماری Master / Slave، هسته سیستم عامل همیشه روی یک پردازنده خاص اجرا میشود. دیگر پردازنده ها فقط برنامه های کاربر و شاید برنامه های سودمند سیستم عامل را اجرا میکنند. رئیس، مسئول زمانبندی پردازه ها (process) یا نخ ها (thread) است. وقتی پردازه یا نخی فعال است، اگر مرئوس نیاز به خدمتی داشته باشد (مانند یک فراخوانی I/O)، باید یک درخواست به رئیس ارسال کند و برای انجام آن منتظر بماند.

این رویکرد ساده است و نیازمند تغییرات کمی در سیستم عامل چند برنامه ای تک پردازنده می باشد. رفع برخورد ساده است؛ زیرا یک پردازنده کنترل کل حافظه و منابع I/O را در اختیار دارد.

معایب این رویکرد عبارتند از:

– خراجی رئیس منجر به از کار افتادن کل سیستم میشود.

– رئیس میتواند به گلوگاه کارآیی تبدیل شود؛ زیرا به تنهایی باید همه زمانبندی و مدیریت پردازه ها را انجام دهد.

 

در یک چند پردازنده متقارن (SMP)، هسته میتواند روی هر پردازنده ای اجرا شود و معمولاً هر پردازنده از مجموعه پردازه ها و نخ ها، خودش کار زمانبندی را انجام میدهد. هسته را میتوان به صورت چندین پردازه یا چندین نخ ساخت.

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

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

 

 

مسائلی که باید در طراحی سیستم عامل چند پردازنده ای مورد توجه قرار گیرد …

سیستم عامل SMP پردازنده ها و منابع دیگر کامپیوتر را طوری مدیریت میکند که کاربر سیستم را مانند یک سیستم تک پردازنده ای یا چند پردازنده ای ببیند. کاربر بدون توجه به تک پردازنده ای یا چند پردازنده ای بودن سیستم میتواند Application هایی را طراحی کند که از پردازه های متعدد یا نخ های متعدد در فرآیندها استفاده میکنند.

بنابراین هر سیستم عامل پردازشی علاوه بر همه قابلیت های یک سیستم چند برنامه ای، ویژگی های اضافی را برای استفاده از چندین پردازنده فراهم میکند. مسائل کلیدی طراحی عبارتند از:

– نخ ها یا پردازه های هم زمان

روال های هسته باید Reentrant باشند تا چندین پردازنده بتوانند به طور همزمان یک کد از هسته را اجرا نمایند. هنگامی که چندین پردازنده بخش های یکسان یا متخلفی از هسته را اجرا میکنند، برای جلوگیری از بن بست یا اعمال غیر مجاز، جدول های هسته و ساختار مدیریت باید به خوبی اداره شوند.

– زمانبندی:

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

– همگام سازی:

هنگامی که چندین پردازه فعال با توان دسترسی به فضای آدرس یا منابع I/O مشترک وجود داشته باشد، باید برای ارائه همگام سازی مؤثر با دقت عمل شود. همگام سازی ابزاری است که موجب انحصار متقابل (Mutual Exclusion) و تنظیم رخدادها میشود. یک راهکار متداول همگام سازی، قفل (Lock) می باشد.

– مدیریت حافظه:

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

– قابلیت اطمینان و تحمل خطا:

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

 

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

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