کامپیوتر و IT و اینترنتعلوم مهندسی

Concurrency: Mutual Exclusion and Synchronization

صفحه 1:

صفحه 2:
© ارتباط پین فرآیندها * استفاده ی چند فرایند از ‎BS‏ ناحیه ى مشتركك # اشتراک منابع * استفاده ی چند فرایند از يك منبع مشتركك همزمان سازی فرآیندها " استفاده ی چند فرایند از یکت پیغام یا سمافور مشتر کك ۴ تخصیص زمان پردازنده 7 استفاده ی چند فرایند از یک یا چند پردازنده ی مشترک

صفحه 3:
چند کاربرد مختله * چند برنامگی - اجرای همزمان چند برنامه ی مرتبط یک کاربرد ساختار یافته " کاربرد مى تواند شامل مجموعه ای از فرآیندهای همزمان باشد - اجرای همزمان چند فر آیند یا نخ یک برنامه #سیستم عامل ۴ سیستم عامل مجموعه ای از فرآیندها و نخها است

صفحه 4:
الع سسسصسن سس سجن اشتراکک منابع عمومی #مدیریت تخصیص منابع © تشخيص محل خطاهای برنامه نویسی مشکل است.

صفحه 5:
® 3 2 eed void echo() { chin = getchar(); chout = chin; putchar(chout) ; }

صفحه 6:
® (Cine emer, ood Process Pl Process P2 chin = getchar(); a chin = getchar(); chout = chin; chout = chin; putchar(chout) ; putchar(chout) ;

صفحه 7:
Operas isc] )8 ‏دور‎ 00 0 * دنبال كردن فرآیندهای فعال © تخصيص و بازيس كيرى منابع * زمان يردازنده * حافظه * فايلها * دستكاههاى ‎MO‏ ‎s‏ حفاظت داده و منابع * نتیجه اجرای ‎ES‏ ف رآیند نباید به سرعت اجرای ف رآیندهای همزمان ربط داشته باشد.

صفحه 8:
* ف رآیندها از وجود همدیگر با اطلاع نیستند. * فرآیندها بطور غیر مستقیم از همدیگر اطلاع دارند. ف رآیندها بطور مستقیم از همدیگر اطلاع دارند.

صفحه 9:
0 ميس يب معيو ةا جام سرخ # انحصار متقابل © ۳ نواحى بحرانى * در هر لحظه از زمان فقط يكك برنامه مى تواند در ناحيه بحرانى باشد. ۰ بن بست “رسا

صفحه 10:
])0 Owoery Processes by Gkaricy 0 * نوشتن در ناحیه بحرانی باید بصورت انحصار متقابل انجام شود. #نواحی بحرانی برای اطمینان از جامعیت داده لازم هستند.

صفحه 11:
‎cand 0‏ ا ل ۱0 ‏#تبادل پیغام ‏" نیازی به انحصار متقابل نیست. #امکان بن بست وجود دارد ‏* ممکن است هر دو فرآیند منتظر پیغام دیگری باشند. #امکان گرسنگی داریم ‏* دو فرآیند با هم پیغام مبادله می کنند در حالیکه سومی منتظر است. ‎

صفحه 12:
۱1 grace ‏هک اه‎ raat 0 # انحصار متقابل : در هر لحظه از زمان فقط یک فر آیند می تواند در ناحیه بحرانی باشد. پیشرفت: وقتی که فرآیند دیگری از ناحیه بحرانی استفاده نمی کنده فرآیند متقاضی نباید با تأخیر روبرو شود. فرضهای ساده: در مورد تعداد و سرعت نسبی فرآیندها نباید فرضی انجام شود. # تاخیر محدود: مدت استفاده از ناحیه بحرانی برای هر فر آیند محدود است.

صفحه 13:

صفحه 14:
انتظار مشغولی فرآیند مرتب چکک می کند که ببیند می تواند وارد ناحیه بحرانی شود یا نه. ؟ در این حالت فرآیند تا وقتی که وارد ناحیه بحرانی نشود هیچ کار مفیدی انجام نمی دهد. * اگر فرآیندی در ناحیه بحرانی خود شکست بخورده فرآیند دیگر تا ابد مسدود خواهد بود. " فرآیندها به نوبت از ناحیه بحرانی استفاده می کنند.

صفحه 15:
* هر فرآیند می تواند وضعیت دیگران را ببیند» اما نمی تواند آنرا تغییر دهد. * وقتی که فرآیند می خواهد وارد ناحیه بحرانی شود ابندا وضعیت دیگران را چک می کند. © اگر هیچ فرآیندی در ناحیه بحرانی نباشده فرآیند ما وضعیت خود را به ناحیه بحرانی تغییر می دهد. * متاسفانه این متد انحصار متقابل را تضمین نمی کند. * ممکن است دو فرآیند با هم ناحیه بحرانی را خالی ببیند و با هم وارد آن شوند.

صفحه 16:
* قبل از جك كردن وضعيت ديكران» وضعيت خود را به حالت بحرانی تغییر دهیم. * اكر بعد از اين كار ديديم كه فرآيند دیگری در ناحیه بحرانی است؛ فرآيند تا خالى شدن ناحيه بحرانى مسدود مى شود. © در این حالت امکان بن بست وجود دارد- * اگر دو فرآیند همزمان بخواهند وارد ناحیه بحرانی شوند ؛ هر کدام به اشتباه فکر می کنند که دیگری در ناحیه بحرانی است وهر دو تا ابد مسدود خواهند ماند.

صفحه 17:
فرآیند یک پرچم را به نشانه تمایل خود به استفاده از ناحیه بحرانی روشن می کند اما این آمادگی را دارد که در صورت. لزوم پرچم را خاموش ‎AS‏ سپس فرآیندهای دیگر را چک می کند. اگر کسی در ناحیه بحرانی باشد پرچم را خاموش می کند و در زمان دیگری آنرا روشن می کند. *اين عمل تا وقتی که وارد ناحیه بحرانی نشود تکرار می گردد.

صفحه 18:
فرض کنید ناحیه بحرانی خالی است. ممکن است که دو فرآیند پرچم خود را روشن کنند؛ دیگری را چک کنند و دوباره پرچم را خاموش کنند. اين امر البته خیلی طول نخواهد کشید و بن بست اتفاق نمی افتد اما مطلوب نیست.

صفحه 19:
# هر فرآیند یک نوبت برای ناحیه بحرانی می گیرد. * اگر فرآیند بخواهد وارد ناحیه بحرانی شود ابتدا پرچم خود را روشن می کند و منتظر نوبتش می ماند.

صفحه 20:
(Dekker (hykoritha

صفحه 21:
boolean flag [2]; ‘turn; ern. while (true) fs Olam wi ing m= 0

صفحه 22:
ODN pact rac at De enc a ۵» )( © خاموش كردن وقفه * در حالت عادى وقتى فرآيندى اجرا مى شود به دو دليل ممكن است متوقف شود: *وقوع وقفه * درخواست يكك خدمت سيستم عامل ؟لذا اگر در حین اجرا وقفه را خاموش كنيم؛ انحصار متقابل تضمين می گردد. ؟اين امر استفاده های مفید وقفه را از بین می برد. ۴#در سیستمهای چند پردازنده ای» خاموش کردن وقفه در یکی از پردازنده ها انحصار متقابل را تضمین نمی کند.

صفحه 23:
ODN pact rac at De enc a ۵» )( وجود یک دستورالعمل خاص ماشین (اسمبلی) ؟ پاید در یک سیکل اجرا شود. * لذا دستورات دیگر روی آن تاثیری ندارند. © دستور ات boolean testset (int i) { if (i == 0) { 12 1 return true; } else { return false; }

صفحه 24:
while (true) while (!test&set(a) ) /*do nothing*/ /* critical section*/ a=0; /*remainder*/ { }

صفحه 25:
ODN pact rac at De enc a ۵» )( #دستور عممع) ‎void exchange(int register,‏ ‎int memory) {‏ int temp; temp = memory; memory = register; register = temp; }

صفحه 26:
/* a is shared variable initialized to 0 int ki=1; while (true) { do exchange (ki,a); while (ki!=0) /* critical section*/ exchange (a,ki); /*remainder*/

صفحه 27:
ON Bratz anh De ‏مه هر‎ 0 مزایا * به سیستمهای چند پردازنده ای قابل اعمال است. * ساده است. * مى توان جندين ناحيه بحرانى داشت.

صفحه 28:
ON Bratz anh De ‏مه هر‎ 0 عیوب ؟ انتظار مشغولی وقت پردازنده را مصرف می کند. *امکان گرسنگی وجود دارد. ؟اگر یک فرآیند ناحیه بحرانی را ترک کند و چند فرآیند منتظر ورود باشند. بن نسسلتة *اكر يكك فرآيند كم اهميت داخل ناحيه بحرانى باشد و يكك فرآيند مهم به ناحیه بحرانی نیاز داشته باشد. فرآیند مهم تر يردازنده را با وقفه در اختيار عق كيرد * فرآيند كم اهميت تر تا ابد منتظر ناحيه بحرانی می ماند؛ زيرا هيجوقت به فرآيند معمولى اجازه در اختيار كرفتن بردازنده و اتمام كار داده نمى شود.

صفحه 29:
# سمافور یکت متغییر مخصوص است که پرای میادله سیگتال از آن استفاده می گردد. اگر فرآیندی منتظر یک سیکنال باشد» تا وقتی که سیگنال نرسد مسدود می شود. #عملگرهای امد و 2۳0 وقفه پذبر نیستند. یک صف برای نگهداری از فرآیندهایی که منتظر یک سمافور هستند ؛ تشکیل می شود.

صفحه 30:
® سمافور دارای یک متغییر است که مقدار طبیعی دارد. این متغیبر نشانگر تعداد فرآیندهایی است که می توانند بدون انتظار از سمافور استفاده کنند. # هر عمل ادا مقدار سمافور را یک واحد کم می کند. #هر عمل 2-۳1 مقدار سمافور را یک واحد افزایش می دهد.

صفحه 31:

صفحه 32:
۱ ۹ 43 42 ۹ 8 ‏میرم موه اس { مسا مت‎ =) ‏تس (0,0) مسج‎ { ee Type queue; }; B (s.queve & ewpt()) ‏سرد‎ > (; ‏سای رم 0اه لیم‎ 5) vb 1 { P (s.uche == (1) rewove 0 process ® Brow sanke =O; BNE} chee ‏ام‎ provess ® va rend bet; { pkie he process isu; } block his process; }

صفحه 33:
{ whie(() { uhite(() { :() (اس62 6 ۳ : ‎sewOuls); ae 1‏ مت -5 سوه امن ۳ ‎pews); 9 ۳‏ } /* ی ۳ } }

صفحه 34:
Process Process ۱ Critical Region Value of Semaphore A B | Norma ecu lock + Blocked on. | semaphore 1 semWait(lock) ss 0 | semWait(lock) 1 ۱ semSignal(lock) ۱ | semSignal(lock) 1 | | Queue

صفحه 35:
Grit Gets 1 یک یا چند تولید کننده داده تولید می کنند و در بافر قرار می دهند. © یک مصرف کننده داده ها را از بافر برمی دارد و مصرف می کند. ‎٩‏ در هر لحظه از زمان فقط یک مصرف کننده یا تولید کننده می توانند به بافر دسترسی داشته باشند. * این مساله در برنامه نویسی سیستم و برنامه نویسی کاربردی اتفاق می اف * یک وب سرور درخواستهای وب ورودی را به فرآیندهای منتظر ارسال می کند تا سرویس داده شوند. * اتفاقات مربوط به 66121 (صادره از صفحه کلید و ماوس) توسط سیستم عامل در یک صف قرار داده می شوند و برنامه ها آنها را مصرف می کنند.

صفحه 36:
* می توان با یک بافر حلقوی و دو اشاره گر برای درج و حذف داده مسأله را حل کرد. عم معدم removePtr

صفحه 37:
* جلوگیری از سرریز بافر * تولید کننده تعداد زیادی آیتم در بافر قرار می دهد و آنرا پر می کند. # جلوگیری از قحطی * تولید كننده يكك آيتم را توليد مى ‎AS‏ * مصرف کننده یک آيتم را مصرف مى کند. * مصرف کننده دوباره یک آیتم دیگر را مصرف می کند. © همزمانی مناسب ؟ انحصار متقابل ‎ite *‏ ob ‏؟ انتظار محدود (جل وگیری از بن بست)‎

صفحه 38:
5 60 Gewuphores 0 0 cad 0 یک سمافور برای شمارش آیتمهای موجود در بافر © یک سمافور برای شمارش جاهای خالی (<۳۸<) در بافر # یک سمافور براى قفل كردن ناحيه بحرانی

صفحه 39:
۱ © ‏(ومجة)ادمم_مجد ,(ومجة)ادسر_وصجو‎ © sew_wui(wutex) » 5207 _post(wutex) © ‏ووو‎ +1) % O © rewoudptr=(rewovdlpir +1) % O ‏مقدار اولیه سمافور 90 برابر سایز بافر است.‎ # * مقدار اولیه سمافور 5۳7۶ برابر صفر است. * مقدار اولیه سمافور ال برابر یک است.

صفحه 40:

صفحه 41:
sew _wrii(stie) SE _Wwuil(wuter) buPPer[ tosertPtr]= cata; ‏دوه‎ Pr =(ineertPir + 1) % O

صفحه 42:
‎the previse problew?‏ ل ل رز( ‏) (۱)۰ ۳۷ (صنجه)لست_ مجح ‏(7۰ات)لوس_ مسر ‎Sie is‏ ‎EW, aa, sew _posl(cutex) ‎} ‎

صفحه 43:
۱۱( a EOL sar a as alm al aca cd Dear NS VOM cane ae pla as racial Pa Nn pet تست (وجشحم)شفسر_مجو 0 610006 (دمد؟)امصير_مجو ‎rece |;‏ رو vpew_poei( slot) nes

صفحه 44:

صفحه 45:
ل نكا ا ل ۱

صفحه 46:
0 © خواننده: خواندن داده ‎e‏ 98 مت یسنده: نوشتن داده * چند خواننده می توانند داده را با هم بخوانند. * در هر زمان فقط یک نویسنده می تواند داده را بنویسد. * یک خواننده و نویسنده با هم نمی توانند در ناحیه بحرانی باشند. Reader | Oriter 00 Ov WOO Ov

صفحه 47:
while (TRUE) { sem_wait(&mutex); readcount =readcount+1; if readcount sem_wait(& sem_post(&mutex); do reading sem_wait(&mutex) readcount=readcount-1; if readcount == 0 then sem_post(&wt); sem_post(&mutex); Qe read chit } while (TRUE) { Think_up_data(); /*noncritical section*/ sem_wait(& ); do writing Sem_post(& —); }

صفحه 48:
#مانیتور یک ماژول نرم افزاری است. مشخصات اصلی: " متغییرهای داده ای محلی فقط توسط خود مانیتور قابل دسترسی * فرآیند با صدا زدن یکی از پروسه های مانیتور وارد آن می شود. ؟ در هر لحظه از زمان فقط یک فرآیند در داخل مانیتور در حال اجرا است.

صفحه 49:
13

صفحه 50:
۳ 4 char x; while (crue) { produce (x); sepa): 0 oid consuner char x7 while (crue) ( ‏ممع‎ ‎consune|s); 1 1 void main() 4 2 parbegin (producer, consumer) } ‘Js program producerconsuner */ ‘monitor boundedbufter; char buffer (8); Ane nextin, naxtouty int count; cond nctfull, aotenpty? void append (char x) 1 Af (count == N) cwait(notfull); buffer[nextin} = x; pextin = (nextin + 1) ty countess 7+ one more item in buffer */ ‘signal (notempty) > void take (char x) 1 4£ (count -~ 0) ewedt(notempty) x = buffer[nextout]; dextout = (nexcout +1) ty ‘count: esignal(notfuil); nextin = 0) nextout = 0; count = 0;

صفحه 51:
4 #دراين روش انحصار متقابل بصورت ضمنى وجود دارد. #اطلاعاته بين فر يندها از طريق ييغام رد و بدل مى شود. send (destination, message) receive (source, message)

صفحه 52:
# فرستنده و گیرنده می توانند در حین ارسال و دریافت پیغام مسدود شوند یا مسدود نشوند. # حالت اول: مسدود شدن فرستنده و گیرنده در هنگام مبادله پیغام. ؟ این روش وعده گاه نیز نامیده شده است. #حالت دوم: فرستنده غیر مسدود و گیرنده مسدود: * در این حالت گیرنده تا وقتی که پیغام را بطور کامل دریافت نکند مسدود می شود. اما فرستنده می تواند به کار خود ادامه دهد. #حالت سوم: فرستنده و گیرنده غیر مسدود.

صفحه 53:
؟آدرس دهی مستقیم * فرستنده آدرس گیرنده را در پیغام قرار می دهد. * كيرنده مى تواند از پارامتر فرستنده ی پیام برای اطلاع دادن به فرستنده استفاده کند. در گيرنده دو حالت امکان پذیر است: * گیرنده دقیقاً از قبل می داند که کی برای آن پیفام می فرستد. (برای ارتباط دو فرآیند مفید است). * گيرنده از هر فرستنده ای داده قبول می کند .

صفحه 54:
1 أدرس دهى غير مستقيم: * پیغامها به یک ساختار داده مشترکك که جعبه پستی نا 3 جعبه پستی نام دارد فرستاده می شوند. 10100 فرآیند پیغام را به جعبه پستی می فرستا 2 پستی می فرستد و دیگری پیفام را بر می دارد. # چهار حالت دارد:

صفحه 55:

صفحه 56:
امسر ی( Message Contents

صفحه 57:
Outed exchusion using wessuye pussicy /* program mutualexclusion */ const int n = /* number of processes */; void P(int i) 1 message msg; while (true) { receive (box, msg); /* critical section send (box, msg); /* remainder = ۶ 10 + void main() create mailbox (box); send (box, null); : parbegin (P(1), P(2), - - +, P(n))?

صفحه 58:
‘const int ‘capacity = /* buffering capacity */ + null =/* empty message */ ; int i; void producer () {message masa; while (erce) 4 receive (mayproduce, pmsg) ; pnsg = produce(); Send (mayconsune, pmsg); 0 1 void consuner() {message cnsq; while (true) { receive (mayconsume, cms); consume (cmsg); send (mayproduce, mull); 1 > void main() 4 ‘create mailbox (mayproduce); create mailbox (mayconsune) ; for (int i = 1; i <= capacity; it+) send (mayproduce, null); parbegin (producer, consumer);

جهت مطالعه ادامه متن، فایل را دریافت نمایید.
34,000 تومان