Distributed Systems سیستم های توزیع شده فصل ،3 فرآیندها 1 سرفصل مطالب • نخ ها ( )threads • مجازی سازی ( )virtualization • کالینت ها و سرورها • مهاجرت کد.

Download Report

Transcript Distributed Systems سیستم های توزیع شده فصل ،3 فرآیندها 1 سرفصل مطالب • نخ ها ( )threads • مجازی سازی ( )virtualization • کالینت ها و سرورها • مهاجرت کد.

‫‪Distributed Systems‬‬
‫سیستم های توزیع شده‬
‫فصل ‪ ،3‬فرآیندها‬
‫‪1‬‬
‫سرفصل مطالب‬
‫• نخ ها (‪)threads‬‬
‫• مجازی سازی (‪)virtualization‬‬
‫• کالینت ها و سرورها‬
‫• مهاجرت کد (‪)code migration‬‬
‫‪2‬‬
‫سرفصل مطالب‬
‫• نخ ها (‪)threads‬‬
‫• مجازی سازی (‪)virtualization‬‬
‫• کالینت ها و سرورها‬
‫• مهاجرت کد (‪)code migration‬‬
‫‪3‬‬
‫مقدمه‬
‫• تعریف فرآیند (‪)process‬‬
‫– برنامه در حال اجرا‬
‫• در سیستم عامل‪ ،‬مدیریت و زمانبندی فرآیندها کار اصلی است‪.‬‬
‫– مانند ایجاد‪ ،‬حذف‪ ،‬سوئیچ‪... ،‬‬
‫– در سیستم های توزیعی مسائل دیگری نیز مطرح می شوند‪.‬‬
‫• مدیریت فرآیندها هزینه بر و سنگین است‪.‬‬
‫• سیستم عامل مواظب است که فرآیندها در کار یکدیگر اخالل ایجاد نکنند‪.‬‬
‫• اینکه فرآیندها همزمان از ‪ CPU‬و منابع دیگر استفاده می کنند‪ ،‬از دید کاربر پنهان است‪.‬‬
‫– ‪Concurrency transparency‬‬
‫• سوئیچ کردن بین فرآیندها کار پرهزینه ای است‪.‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪4‬‬
‫ذخیره حالت فعلی ‪CPU‬‬
‫تغییر رجیسترهای واحد مدیریت حافظه (‪)MMU‬‬
‫ً‬
‫باطل کردن کش های ترجمه آدرس (مثال در ‪)TLB‬‬
‫جابه جایی فرآیندها بین حافظه و دیسک‬
‫مقدمه (‪)2‬‬
‫• از نظر ‪ granularity‬موجودیت دیگری در نظر می گیرند که کوچکتر و‬
‫ارزان تر است (از نظر هزینه و زمان)‪.‬‬
‫– نخ یا ‪thread‬‬
‫– در واقع نخ داخل فرآیند تعریف می شود و جایگزین فرآیند نمی شود‪.‬‬
‫– نیازی به برقراری ‪ concurrency transparency‬ندارد‪.‬‬
‫• زیرا اینجا کارایی مهم تر است‪.‬‬
‫– اطالعات مربوط به نگهداری نخ کمتر از فرآیند است‪.‬‬
‫• ‪ thread context‬همان ‪ CPU context‬است‪.‬‬
‫– محافظت از دسترس ی نخ ها به فضاهای یکدیگر به برنامه نویس ی سطح باالتر‬
‫موکول می شود‪.‬‬
‫‪5‬‬
‫نخ ها در سیستم های عادی‬
‫• کدی که داخل یک فرآیند اجرا می شود یک ‪ thread of execution‬است‪.‬‬
‫– به طور طبیعی داخل هر فرآیند یک نخ است‪.‬‬
‫• اگر داخل یک فرآیند چند نخ وجود داشته باشد‬
‫– ‪Multiple thread of execution‬‬
‫• سوئیچ کردن بین نخ ها ارزان تر و راحت تر است‪.‬‬
‫– ‪ MMU‬الزم نیست تغییر کند چون هر دو نخ داخل یک فرآیند هستند‪.‬‬
‫– ‪ TLB‬الزم نیست خالی شود چون سیستم صفحه بندی همان است‪.‬‬
‫– فقط حالت ‪ CPU‬و رجیسترهای آن الزم است تغییر کنند‪.‬‬
‫• هزینه آسان تر شدن‬
‫– از بین رفتن امنیت بین نخ ها (برخالف فرآیند ها که از هم ایزوله بودند)‪.‬‬
‫‪6‬‬
‫نخ ها در سیستم های عادی (‪)2‬‬
‫• آیا می شود همه جا ‪ multi-threading‬را جایگزین ‪ multi-processing‬کرد؟‬
‫– خیر‪ ،‬ولی در بیشتر مواقع می شود‪.‬‬
‫• مزیت دیگر‬
‫– استفاده از ‪ multi-threading‬برای رسیدن به پردازش موازی در سیستم چندپردازنده ای‬
‫• هر ‪ thread‬به یک ‪ CPU‬و ارتباط از طریق حافظه مشترک‬
‫– در سرورها امروزه استفاده می شود‪.‬‬
‫• راههای ارتباط فرآیندها با یکدیگر‬
‫– ‪ )Inter Process Communication( IPC‬که شامل‬
‫• ‪Pipes‬‬
‫• ‪Message queues‬‬
‫• ‪Shared memory segments‬‬
‫‪7‬‬
‫نخ ها در سیستم های عادی (‪)3‬‬
‫• عیب اصلی همه روش های ‪IPC‬‬
‫– ارتباط نیازمند ‪ context switching‬در سه نقطه است (شکل زیر)‪.‬‬
‫• استفاده از نخها به جای فرآیندها این مشکالت ارتباطی را ندارد‬
‫– زیرا نخها برای ارتباط با یکدیگر از حافظه مشترک استفاده می کنند‪.‬‬
‫‪8‬‬
‫سوئیچ کردن زمینه (‪)Context switching‬‬
‫• زمینه پردازنده (‪:)processor context‬‬
‫– کوچکترین مجموعه ای از مقادیر که در رجیسترهای پردازنده ذخیره می شود که برای‬
‫اجرای یک سری دستور الزم هستند‪.‬‬
‫– مثال‪ :‬اشاره گر پشته‪ ،‬رجیسترهای آدرس‪ ،‬شمارنده برنامه‬
‫• زمینه نخ (‪:)thread context‬‬
‫– کوچکترین مجموعه ای از مقادیر که در رجیسترها و حافظه ذخیره می شود که برای‬
‫اجرای یک سری دستور الزم هستند‪.‬‬
‫– مثال‪ :‬زمینه پردازنده و حالت‬
‫• زمینه فرآیند (‪:)process context‬‬
‫– کوچکترین مجموعه ای از مقادیر که در رجیسترها و حافظه ذخیره می شود که برای‬
‫اجرای یک نخ الزم هستند‪.‬‬
‫– مثال‪ :‬زمینه نخ‪ ،‬و حداقل مقادیر رجیسترهای ‪MMU‬‬
‫‪9‬‬
‫نخ ها در سیستم های عادی (‪)4‬‬
‫• قسمت های مختلف یک برنامه کاربردی می توانند توسط نخ های‬
‫متفاوت پیاده سازی شوند‪.‬‬
‫– مثال‪ :‬برنامه های اداری مثل ‪ Word‬و ‪ ،Excel‬یک نخ کار گرفتن ورودی‬
‫ها به برنامه‪ ،‬نخ دیگر چک کردن گرامر‪ ،‬نخ دیگری برای اندیس گذاری‪،‬‬
‫‪...‬‬
‫– اگر هر کدام از این کارها توسط یک فرآیند انجام میشد‪ ،‬فرآیندها بالک‬
‫می شدند‪.‬‬
‫‪10‬‬
‫پیاده سازی نخها‬
‫• پیاده سازی نخها به دو صورت است‬
‫– سطح کاربر (‪ :)user level‬در سطح برنامه کاربردی یا با استفاده از یک کتابخانه‬
‫‪thread‬‬
‫– سطح سیستم (‪ )system level‬یا سطح هسته‪ :‬هسته در ایجاد و زمانبندی آنها‬
‫دخالت دارد‪.‬‬
‫• مزایای نخهای سطح کاربر‪:‬‬
‫– ایجاد و از بین بردن نخها ساده و کم هزینه است‪.‬‬
‫– سوئیچ کردن بین نخها با چند دستور قابل انجام است‪.‬‬
‫– نرم افزاری برای مدیریت نخها در سطح کاربر ‪thread package‬‬
‫• عیب نخهای سطح کاربر‪:‬‬
‫– یک فراخوان سیستم بالک کننده نخ‪ ،‬کل فرآیند آن نخ را بالک می کند‪.‬‬
‫‪11‬‬
‫پیاده سازی نخها (‪)2‬‬
‫• راه حل‪:‬‬
‫– استفاده از نخهای سطح هسته‬
‫• عیب نخهای سطح هسته‪:‬‬
‫– هرگونه عملیاتی روی نخ مستلزم یک فراخوان سیستم است‬
‫• هزینه کار زیاد می شود‪.‬‬
‫– هسته فکر میکند یک فرآیند فراخوان سیستم را انجام داده‪ ،‬چون خبری از نخهای‬
‫سطح کاربر ندارد‪ .‬بعد از فراخوان سیستم کنترل را به یک پروسس دیگر می دهد و‬
‫اجرای نخ فعلی قطع می شود‪.‬‬
‫‪Thread‬‬
‫‪management‬‬
‫‪Thread‬‬
‫‪management‬‬
‫‪OS‬‬
‫‪12‬‬
‫پیاده سازی نخها (‪)3‬‬
‫• راه حل‪:‬‬
‫– ترکیبی از نخهای سطح کاربر و سطح هسته استفاده شود‪.‬‬
‫– تحت عنوان )‪Light Weight Process (LWP‬‬
‫– یک ‪ LWP‬در متن یک فرآیند ایجاد می شود و می توان به ازای هر فرآیند‬
‫چندین ‪ LWP‬داشت‪.‬‬
‫– یک بسته مدیریت نخها در سطح کاربر نیز ارائه می شود تا عملیات ایجاد و‬
‫از بین بردن نخها را انجام دهد‪.‬‬
‫– امکاناتی برای همزمانی آنها مثل ‪ mutex‬ها و متغیرهای شرطی نیز ارائه‬
‫می دهد‪.‬‬
‫– نکته مهم‪ :‬بسته مدیریتی نخها در سطح کاربر است‪.‬‬
‫‪13‬‬
‫پیاده سازی نخها (‪)4‬‬
‫• ‪ LWP‬ها در سطح هسته اجرا می شوند و هر ‪ LWP‬به یک نخ سطح‬
‫کاربر منتسب می شود‪.‬‬
‫– بنابراین هسته می داند که هر ‪ LWP‬مربوط به یک نخ است‪.‬‬
‫• ساخت ‪ LWP‬توسط یک فراخوان سیستم انجام می شود‪.‬‬
‫– بنابراین درست کردن ‪ LWP‬ها توسط کاربر انجام می شود با یک فراخوان‬
‫سیستم‪.‬‬
‫ً‬
‫عملیات همزمانی بین نخها تماما توسط‬
‫بسته مدیریتی و در سطح کاربر انجام‬
‫ً‬
‫می شود و هسته اصال درگیر این عملیات‬
‫نمی شود‪ .‬هسته تنها به ازای هر نخ در‬
‫حال اجرا یک ‪ LWP‬اجرا می کند‪.‬‬
‫‪14‬‬
‫پیاده سازی نخها (‪)5‬‬
‫• مزایای ترکیب دو روش‪:‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫ایجاد‪ ،‬از بین بردن و همزمانی نخها کم هزینه است و دخالت هسته را الزم ندارد‪.‬‬
‫یک فراخوان سیستم بالکی کل فرآیند را بالک نمی کند‪.‬‬
‫برنامه کاربردی نیازی ندارد که از ‪ LWP‬ها مطلع باشد بلکه با نخهای سطح کاربر‬
‫ارتباط دارد‪.‬‬
‫‪ LWP‬ها را می توان در سیستم های چندپردازنده ای به کار برد‪ .‬اجرای ‪ LWP‬ها‬
‫روی پردازنده های مختلف‬
‫• عیب روش ترکیبی‪:‬‬
‫– باید ‪ LWP‬ها ایجاد و از بین بروند که هزینه ای معادل نخهای سطح هسته دارند‪.‬‬
‫– البته این عمل توسط سیستم عامل انجام می شود‪.‬‬
‫‪15‬‬
‫پیاده سازی نخها (‪)6‬‬
‫• روش دیگر ‪scheduler activation‬‬
‫– وقتی یک نخ فراخوان سیستم بالکی انجام می دهد هسته یک ‪up call‬‬
‫به بسته مدیریتی نخها انجام می دهد تا زمانبند‪ ،‬نخ بعدی را انتخاب کند‪.‬‬
‫• مزیت‪:‬‬
‫– مدیریت ‪ LWP‬ها را به هسته واگذار می کند‪.‬‬
‫• عیب‪:‬‬
‫‪16‬‬
‫‪Thread‬‬
‫‪management‬‬
‫– ساختار الیه ای را نقض می کند‪.‬‬
‫‪OS‬‬
‫نخ ها در سیستم های توزیعی‬
‫• انگیزه استفاده از چندنخی (‪ )multi-threading‬در سیستم های‬
‫توزیعی‬
‫– استفاده از فراخوان های سیستمی بالکی بدون اینکه کل فرآیندی که نخ‬
‫در آن اجرا می شود‪ ،‬بالک شود‪.‬‬
‫– برای بیان ارتباطات به صورت نگه داشتن چندین اتصال منطقی در یک‬
‫زمان‬
‫• پیاده سازی در سمت‬
‫– کالینت‬
‫– سرور‬
‫‪17‬‬
‫کالینتهای چندنخی‬
‫• استفاده از چندنخی برای پنهان کردن تأخیرها‬
‫– مثال‪ :‬باز کردن صفحات وب‪ ،‬نخهای جداگانه برای برقراری اتصال و دریافت داده ها و‬
‫خواندن آنها‬
‫– باز کردن یک صفحه وب که شامل گرفتن عناصر مختلفی در آن صفحه است‪،‬‬
‫نیازمند ایجاد یک اتصال ‪ TCP/IP‬به ازای هر عنصر صفحه است‪.‬‬
‫– هر یک از این اعمال بالک کننده هستند‪.‬‬
‫• با این روش وقتی تعداد کالینت ها زیاد‬
‫می شود‪ ،‬سرور ‪ overload‬می شود‪.‬‬
‫ً‬
‫– معموال وب سرورها ‪ replicate‬هستند‪.‬‬
‫– اتصال ها به ‪ replica‬های مختلف و به صورت‬
‫موازی ایجاد می شود‪.‬‬
‫‪18‬‬
‫‪C1‬‬
‫‪Web‬‬
‫‪Server‬‬
‫‪C2‬‬
‫‪C4‬‬
‫‪C3‬‬
‫سرورهای چندنخی‬
‫• عمده مزایای روش چندنخی‪ ،‬در سمت سرور است‪.‬‬
‫– طراحی سرورها با قابلیت بکارگیری موازی سازی برای رسیدن به کارایی بیشتر‬
‫– با آمدن سرورهای چندپردازنده ای کارایی چندنخی بیشتر نشان داده می شود‪.‬‬
‫• مثال‪ :‬فایل سروری که روی عملیات دیسک بالک می شود‪.‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪19‬‬
‫نخ ‪ dispatcher‬درخواستهای ورودی را می خواند‪.‬‬
‫با آمدن درخواست جدید‪ ،‬سرور یک نخ کارگر راانتخاب کرده و کار را به آن محول می کند‪.‬‬
‫نخ کارگر یک فراخوان سیستمی بالکی برای خواندن از دیسک انجام می دهد‪.‬‬
‫نخ ‪ dispatcher‬می تواند نخ کارگر دیگری را برای کاری دیگر انتخاب کند‪.‬‬
‫سرورهای چندنخی (‪)2‬‬
‫• سرور تک نخی‪:‬‬
‫• سرور چند فرآیندی‪:‬‬
‫‪Receive‬‬
‫‪Disk request‬‬
‫‪Disk reply‬‬
‫‪Reply to client‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫– چندین فرآیند سرور داخل یک ماشین (راه حل در قدیم)‬
‫– کالینت ها نمیدانند به کدام فرآیند سرور رجوع کنند بنابراین یک فرآیند هماهنگ کننده باید باشد‪.‬‬
‫• سرور چندنخی‪:‬‬
‫– مزیت نسبت به روش قبلی‪ :‬سوئیچ کردن بین نخها ارزانتر است‪.‬‬
‫– وجود حافظه مشترک‬
‫– از نظر کارایی در دسترس ی به دیسک این روش بهتر از چند فرآیندی است به این دلیل که کشینگ در‬
‫روش قبلی از هم مستقل است در حالی که در چندنخی به دلیل حافظه مشترک در یک فضا انجام می‬
‫شود‪ .‬یعنی نخ ها می توانند از اطالعات کش شده یکدیگر استفاده کنند‪.‬‬
‫‪20‬‬
‫سرورهای چندنخی (‪)3‬‬
‫• راه حل سوم‪ :‬استفاده از ماشین حالت محدود‬
‫– فراخوان های بالک کننده پیاده سازی و برنامه نویس ی راحتتری دارند‪.‬‬
‫– به جای بالک کردن‪ ،‬حالت ماشین را ذخیره میکند و به درخواست بعدی‬
‫می رود‪.‬‬
‫– می تواند با استفاده از ‪ interrupt‬ها باشد یا با استفاده از روش‬
‫‪polling‬‬
‫‪21‬‬
‫سرفصل مطالب‬
‫• نخ ها (‪)threads‬‬
‫• مجازی سازی (‪)virtualization‬‬
‫• کالینت ها و سرورها‬
‫• مهاجرت کد (‪)code migration‬‬
‫‪22‬‬
‫مقدمه‬
‫• مجازی سازی‬
‫– یک پردازنده می تواند یک دستور را از یک نخ یا از یک فرآیند اجرا کند‪.‬‬
‫– با سوئیچ کردن بین نخها و فرآیندها می توان موازی سازی را شبیه سازی کرد‪.‬‬
‫– می توان این شبیه سازی را به منابع دیگر نیز توسعه داد‪.‬‬
‫• پیشتر نیز مطرح بوده است‪.‬‬
‫• نکته‪ :‬نرم افزارها پایدارتر و طول عمرشان بیشتر از پلت فرم ها است‪.‬‬
‫– ‪Platform = H/W + OS + S/W‬‬
‫– مجازی سازی از اینجا حاصل می شود که مایلیم نرم افزارها همچنان باقی بمانند حتی با تغییر‬
‫پلت فرم‬
‫– باید پلت فرم را به صورت مجازی تعریف کنیم‪.‬‬
‫‪23‬‬
‫مجازی سازی در سیستم های توزیعی‬
‫• یک سیستم توزیعی‬
‫– یک واسط برنامه نویس ی به نرم افزار سطح باالتر ارائه می دهد‪.‬‬
‫• تعریف مجازی سازی‪:‬‬
‫– توسعه دادن یا جایگزین کردن یک‬
‫واسط موجود به گونه ای که رفتار یک‬
‫سیستم دیگر را تقلید کند‪.‬‬
‫‪24‬‬
‫مجازی سازی در سیستم های توزیعی (‪)2‬‬
‫• دالیل مطرح شدن مجازی سازی در دهه ‪1970‬‬
‫– امکان اجرای نرم افزارهای پیشین روی سخت افزارهای گران قیمت‬
‫• نه فقط نرم افزارها بلکه سیستم عامل‬
‫• دالیل مطرح شدن مجازی سازی در دهه ‪1990‬‬
‫– در سالهای اخیر سخت افزارها به سرعت پیشرفت می کنند در حالی که نرم‬
‫افزارها و میان افزارها پایدارتر هستند‪.‬‬
‫– مطرح شدن اتصال به شبکه ها و استفاده از مجازی سازی امکان اجرای نرم‬
‫افزارها و میان افزارها را روی پلت فرم های مختلف فراهم می آورد‪.‬‬
‫– فراهم شدن ‪transparency‬‬
‫‪25‬‬
‫معماری ماشین های مجازی‬
‫• انواع واسط ها‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪26‬‬
‫واسط بین ‪ H/W‬و ‪ :S/W‬شامل دستورات زبان ماشین‪ ،‬توسط هر برنامه ای می تواند صدا‬
‫زده شود‪.‬‬
‫واسط بین ‪ H/W‬و ‪ :S/W‬شامل دستورات ماشین‪ ،‬فقط توسط برنامه های ممتاز (‪)OS‬‬
‫صدا زده می شود‪.‬‬
‫واسطی شامل فراخوان های سیستمی که توسط سیستم عامل فراهم می شود‪.‬‬
‫واسطی شامل کتابخانه ها‪ ،‬تحت نام ‪API (Application Programming‬‬
‫)‪Interface‬‬
‫معماری ماشین های مجازی (‪)2‬‬
‫• به دو صورت می توان مجازی سازی را انجام داد‪:‬‬
‫ً‬
‫– )‪ :Process Virtual Machine (PVM‬مجازی سازی اساسا برای یک‬
‫فرآیند انجام می شود‪.‬‬
‫– ایجاد یک سیستم ‪ runtime‬که مجموعه دستورات انتزاعی را برای اجرای‬
‫برنامه ها فراهم می آورد‪.‬‬
‫– رفتار فراخوان های سیستمی نیز باید شبیه سازی شود‪.‬‬
‫– مثال‪Java runtime environment :‬‬
‫– به ازای هر فرآیند یک ‪runtime‬‬
‫وجود دارد‪ .‬در واقع می توان ‪runtime‬‬
‫سیستم های دیگر را نیز گذاشت و‬
‫برنامه های دیگری را نیز اجرا کرد‪.‬‬
‫‪27‬‬
‫معماری ماشین های مجازی (‪)3‬‬
‫• روش دوم‪:‬‬
‫– )‪ :Virtual Machine Monitor (VMM‬مانند ‪VMware‬‬
‫– ایجاد یک الیه کامل نرم افزاری که سخت افزار را بپوشاند‪.‬‬
‫– مجموعه دستورات کامل سخت افزار را تأمین کند‪.‬‬
‫– می توان چندین سیستم عامل داشت که به صورت مستقل و موازی یکدیگر روی یک‬
‫پلت فرم اجرا می شوند‪.‬‬
‫– به ازای مجموعه ای از فرآیندها یک سیستم ‪ runtime‬ایجاد می شود‪.‬‬
‫– این روش برای تعداد زیادی از برنامه‬
‫های کاربردی قابل به کارگیری است‪.‬‬
‫– این روش برای سیستم های توزیعی‬
‫بسیار مناسب است‪.‬‬
‫‪28‬‬