پویا فایل

پویا فایل

پویا فایل

پویا فایل

هماهنگ سازی task و thread ها و Ada

هماهنگ سازی task و thread ها و Ada

اجرای یک برنامه تحت Ada دربرگیرنده اجرای یک یا چند task می باشد.هر task ، یک یا چند thread جداگانه برای کنترل مستقل یا همزمان در نقاطی که با سایر task ها تداخل دارد ایجاد می کند. شکل های مختلف این هماهنگ سازی و اثر متقابل بین task ها در این چند برگ توضیح داده می شود. این شکل ها به دسته بندی کلی زیر تقسیم می شوند :
1- فعال سازی و نابود سازی یک task
2- صدا زدن یک برنامه خاص که هماهنگ سازی را بر عهده بگیرد وداده ها و بخش های اشتراکی را مدیریت کند.
3- یک برنامه وقفه ای که شامل یک سری delay ها باشد. یا شامل یک سری برنامه های زمان بندی که به هر کدام از task زمان خاصی را بدهد.
4- یک سیستم خاتمه دهنده که به یک task اجهزه خاصی برای از بین بردن و از کار انداختن task دیگر می دهد.


زمان دهی پویا و زمان دهی ایستا static semantic , dynamic semantic :
در طول یک دوره یک task غیر فعال می تا زمانی که به فعالیت بازگردد. زمانی که یک task آماده شروع فعالیت گردید باید بخش ها و داده های مورد نیاز کامپیوتر به آن اختصاص داده شود. هر چند که این اجرا ممکن است روی یک سیستمmulti proccessorاجرا شود اما باز هم در چنین سیستم هایی اوقاتی پیش می آید که از دید task سیستم single proccess است و یا حتی روی هر یک از proccessor ها چندین task شروع به فعالیت می کنند. در این حالت به طور کلی دو نوع الگوریتم شروع به تقسیم بندی منابع سخت افزاری می نمایند که به نام های زمان دهی پویا و زمان دهی ایستا معروف هستند. هر چند هرکدام از این دو الگوریتم خود به الگوریتم های فراوان هماهنگ سازی دیگر تقسیم می شوند.
سیستم زمان دهی ایستا به این شکل عمل می کند که قبل از شروع به فعالیت task مشخصات آن را خوانده و به آن زمان می دهد. در صورتی که task ای از قبل نداند که چه مقدار زمان برای اجرا نیاز دارد این سیستم جوابگو نخواهد بود.
اما سیستم زمان دهی پویا که بسیار سنگین تر و پیچیده تر می باشد در هر لحظه اجرای task ها از آن ها توسط massage گزارش تهیه می کند و از این که یک task خاص چه مقدار زمان برای ادامه کار خود لازم دارد مطلع می شود و توسط زیر الگوریتم های مربوط به خود shairing را انجام می دهد. اما هر task چه قسمت هایی دارد؟ ما برای دانستن عمل هماهنگ سازی باید با قسمت های مختلف یک task آشنا شویم


همزمانی و مناطق بحرانی
موثر واقع شدن یک هسته مرکزی بازدخولی نیاز به استفاده از همزمانی دارد: اگر یک مسیرکنترل هسته مرکزی در حالیکه روی یک ساختمان داده هسته مرکزی فعالیت می کند، متوقف شود، هیچ مسیرکنترل هسته مرکزی دیگری اجازه نخواهد داشت تا بر روی همان ساختمان داده فعالیت کند مگر آنکه به یک وضعیت ثابت و پایدار بازگردد. بعلاوه برخورد دومسیرکنترل می تواند منجر به تخریب اطلاعات ذخیره شده بشود. بعنوان مثال، چنین تصور کنیم که یک V متغیرجهانی شامل تعدادی از موارد (items) قابل استفاده بعضی اجزا سیستم است. اولین مسیرکنترل هسته مرکزی (A) متغیر را میخواند و تعیین می کند که فقط یک مورد ( آیتم) قابل استفاده وجود دارد. در این نقطه، مسیرکنترل هسته مرکزی دیگر (B) فعال شده و همان متغیر را می خواند که هنوز دارای ارزش 1 می باشد. بنابراین V , B را کاهش داده و شرع به استفاده از آیتم می کند. سپس A فعالیت رادوباره آغاز می کند زیرا تقریبا ارزش V محتوی 1ـ می شود و دو راه کنترل هسته مرکزی از یک آیتم با اثرات تخریبی پتانسیلی استفاده می کنند؛ می گوئیم که "شرایط مسابقه" موجود است.
بطورکلی، دسترسی امن به متغیر سراسری با استفاده از "عملیات اتمیک" فراهم میشود. در مثال قبل، اگر دومسیرکنترل متغیر را بخوانند و V را با یک عمل بدون تداخل و تنها کاهش دهند، تخریب داده، امکان پذیر نخواهد بود. با اینحال هسته های مرکزی شامل ساختمان داده های بسیاری هستند که نمی توانند با یک عمل تنها قابل دسترسی باشند. برای مثال، معمولا جابجائی عنصر کلید از یک لیست پیوندی تنها با یک عمل ممکن نیست، زیرا هسته مرکزی حداقل به دو نقطه دسترسی در آن واحد نیاز دارد. هربخشی از کد که باید توسط پردازش به پایان برسد، قبل از اینکه یک پردازش دیگر بتواند وارد شود ناحیه بحرانی است. این مشکلات نه تنها در میان مسیرهای کنترل هسته مرکزی بلکه در میان پردازشهائی که از داده های مشترکی استفاده می کنند نیز رخ میدهد. تکنیکهای هم زمانی متعددی شکل گرفته اند. بخش بعدی به بررسی چگونگی هم زمان کردن و راههای کنترل هسته مرکزی می پردازد.

هسته های مرکزی انحصاری
در جستجوی راه حل ساده ای برای حل مشکلات هم زمانی، اکثر هسته های مرکزی یونیکس های ابتدائی انحصاری هستند : وقتی پردازشی در وضعیت هسته مرکزی اجرا می شود، نمی تواند بطور اختیاری متوقف شده و یا با پردازش دیگری جایگزین شود . بنابراین در یک سیستم تک پردازشی تمام ساختمان داده های هسته مرکزی که توسط پاسخگوی وقفه (interrupts) و استثناءها(exception update) به روز نشده اند برای دسترسی به هسته مرکزی امن و مطمئن هستند. در واقع، یک پردازش در وضعیت هسته مرکزی می تواند بصورت اختیاری از CPU صرف نظر کند، اما در این مورد باید اطمنیان حاصل کند که تمامی ساختمان داده های قابل دسترسی قبلی را که می توانسته اند تغییر کنند را باید دوباره چک کند. انحصاری بودن در سیستمهای چند پردازنده ای بی تاثیر است زیرا دو مسیرکنترل هسته مرکزی که در CPU های متفاوت در حال اجرا هستند می توانند با هم به ساختمان داده یکسانی دسترسی پیدا کنند.

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



خرید فایل


ادامه مطلب ...

دانلود پروژه برنامه نویسی چند نخی سوکت (MULTI THREAD SOCKET PROGRAMMING ) به همراه داکیومنت

دانلود پروژه برنامه نویسی چند نخی سوکت (MULTI THREAD SOCKET PROGRAMMING ) به همراه داکیومنت سوکت های multithreaded سرور برنامه C # برنامه ای مبتنی بر کنسول است که می تواند به مشتریان متعدد همزمان رسیدگی کند. این پروژه شامل دو برنامه مجزا میباشد که یکی به عنوان سرور  عمل کرده و در خواست کلاینتهای مختلف را میگیرد و یکی به عنوان کلاینت عمل میکند که میتواند در خواستهای خود را به سرور ارسال کند. در این پروژه ارتباط سرور و کلاینت با استفاده از Socket Multi Thread پیاده سازی و شرح داده شده است. شما با مطالعه داکیومنت همراه پروژه، بررسی سورس کدها و اجرای پروژه به راحتی با نحوه کار آن آشنا خواهید شد.  ...


ادامه مطلب ...