سایرتحقیق و پژوهش

ارتباط بین فرآیندها

صفحه 1:

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

صفحه 3:
رصح صموون اش حصزلم۳۴:() اشتراکک منابع سراسری #مدیریت تخصیص منابع تشخیص محل خطاهای برنامه نویسی

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

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

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

صفحه 7:
000 AU panacea oOo #انحصار متقابل © ۳ نواحى بحرانى * در هر لحظه از زمان فقط يكك برنامه مى تواند در ناحيه بحرانى باشد. © 3 بن بست “رسا

صفحه 8:
])0 Owoery Processes by Gkaricy

صفحه 9:
(Orcas ‏ا ا‎ cael

صفحه 10:
10 CMe grace ‏هک اه‎ raat انحصار متتابل: در هر لحظه از زمان فقط یک فرآیند می تواند در احیه بحرانی باشد. ییشرفت: وقتی که فرآیند دیگری از ناحیه بحرانی استفاده نمیکنده فرآیند متقاضی نباید با تأخیر روبرو شود. تاخیر محدود: مدت استفاده از ناحیه بحرانی برای هر فرآیند محدود است.

صفحه 11:
Outudl Exchusion: GoPivare Opprouckes #هیچگونه حمایت از طرف 00 یا سخت افزار لازم نيست

صفحه 12:
۰ 32۵6899 ۰ /* PROCESS 1 */ : ‘ : ۰ while (turn != 0) | while (turn != 1) - /*donothing */ + -/* do nothing */; 7 eritical section*/; ape eritical section*/; furs Tp turn = 07 8 10 : 1 الف) تلاش اول

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

صفحه 14:
/* PROCESS 1. */ while (flag[0]) _ /* do nothing */; ‎true;‏ = [1] و۶12 ‎/* critical section*/; ۶129 ]1[ = false; ~ ‎۰ ‎/* PROCESS 0 */ ‎. ‎while (flag{1]) ‎1 /* do nothing */; flag[0] = true; /*critical section*/; ~f£lag{0] = false; — ‎۰ ‎ ‎

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

صفحه 16:
16 /* PROCESS 1 */ flag{1) = true; while (flag[0]) /* do nothing */; #* critical section*/; fleg[{1] = false; /* PROCESS 0 */ flag[0] = true; while (flag{11) /* do nothing */; ‏نش‎ section*/; flag{0] = false;

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

صفحه 18:
18 7* PROCESS 1 */ flag(1] = true; while (flag{0]) { flag[1] = false; /*delay */; flag{1] = true; 1 /* critical section*/; flag{1] = false; /* PROCESS 0 */ flaglO0] = true; while (flag{[1}) { flag[0] = false; /sdelay ۶ flag{0] = true; 3 /*eritical section*/; flag[0] = false;

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

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

صفحه 21:
21

صفحه 22:
22 Outed Cxctosion: Wardware Gupport #خاموش کردن وقفه ؟اگر در حین اجرا وقفه را خاموش کنیم؟ * استفاده های مفید وقفه؟ *در سیستمهای چند پردازنده ای؟

صفحه 23:
Outed Cxctosion: Wardware Gupport © وجود یک دستورالعمل خاص ماشین 7 دستور ماه ‎boolean test&set (boolean b) {‏ ‎if (b)‏ ‎retrun false;‏ else { b = true; return true;}

صفحه 24:
Oe etl RO acne cd while (true) { while (!test&set(a) ) /*do nothing*/ /* critical section*/ a=false; /*remainder*/ }

صفحه 25:
Outud ‏ا‎ Exchange ‏دستور‎ © void exchange(int register, int memory) { int temp; temp = memory; memory = register; register = temp;

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

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

صفحه 28:
ON Bratz anh De ‏مه هر‎

صفحه 29:
سمافور یک متغیر است که مقدار طبیعی دارد. این متغیر نشانگر تعداد فرآیندهایی است که می توانند بدون انتظار از سمافور استفاده کنند. #هر عمل اكمدا مقدار سمافور را یک واحد کم می کند. # هر عمل ا:< مقدار سمافور را یک واحد افزایش میدهد.

صفحه 30:
؟اگر فرآیندی منتظر یک سیگنال باشده تا وقتی که سیگنال نرسد مسدود می شود. عملگرهای #مو ۳۳0*< وقفه پذیر نیستند. © یک صف برای نگهداری از فرآیندهایی که منتظر یک سمافور هستند» تشکیل می شود. 30

صفحه 31:
Oe mn cannes Gewuphore (Priwiives (ه ‎orl Greed‏ ل ا سید ‎int et, {‏ زور ;} ‎ee Type suru;‏ ‎P (201 SO)‏ ‎void (sexupkore {‏ :ويه موبخا ذ) ووعمصج ه ‎Ox 2 rewove‏ { ‎SOIR} place provess (P va recdy list;‏ } )0 > سسوم و } تصجود و ‎phve his process in‏ { ‎tate aces‏ 31

صفحه 32:
۱ ۹ 43 42 ۹ 8 sire brary_sewaphore { ‏لجس‎ (birary_sewaphore 2) ‏مسج‎ {D,(} vk; { ee Type quew; }; B (s.queve & ewpt()) ‏سرد‎ > (; ‏هب0۵ لبم‎ 55 1 1 P (sacke == 0( rewove a provess P Prow 5.quee sanke =O; phe prowess P oa ready bot; be } { } phice his process ‏سوه و‎ Loch the proves, 32

صفحه 33:
A issues semWait, later times out Processor |__+[e ® > ‏لطاع رو‎ Blocked quewe 2 Ready al 2 ۹ 1 issues semSignal Signal Blocked queve Processor lc} >| Ready queue D issues semSignal 7 0 Blocked queue 33

صفحه 34:
مت ور ‎Outud‏ ‎tock = 0:‏ ‎Pi Pi‏ 1 6 ‎ad 0‏ ز() ((اسات _بب۵ بط ‎١‏ تن 4 0۵ ۳9 سوه امن ۳ ‎Grr(s); bok =O; ‏| /* موی ۳ ‎} } ) }

صفحه 35:
_ 38 Queue for Value of semaphore lock semaphore lock A B 0 11 | ‏نتسه تس( کم تسد نت مت تست‎ 5 ‏لقا‎ ‎semWait(lock) ‎a ‏ها ای‎ 5

صفحه 36:
36 © يكك يا جند توليد كننده داده توليد مى كنند و در بافر قرار مى دهند. یک مصرف کننده داده ها را از بافر برمی دارد و مصرف مى كند. © در هر لحظه از زمان فقط یک مصرف کننده یا تولید کننده می توانند به بافر دسترسی داشته باشند. * این مساله در برنامه نویسی سیستم و برنامه نویسی کاربردی اتفاق می اذ * يكك وب سرور درخواستهای وب ورودی را به فرآیندهای منتظر ارسال می کند تا سرویس داده شوند. © اتفاقات مربوط به 60001 (صادره از صفحه کلید و ماوس) توسط سیستم عامل در یک صف قرار داده می شوند و برنامه ها آنها را مصرف می کنند.

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

صفحه 38:
:producer }while (true) /* produce item v x/ ;b[int++] = v 1

صفحه 39:
consumer: while (true) { while (in <= out) /*do nothing */; w = b[out++]; /* consume item w */ }

صفحه 40:
Note: shaded area indicates portion of buffer that is occupied Figure 5.8 Infinite Buffer for the Producer/Consumer Problem 40

صفحه 41:
7* program producezconsuner */ semaphore n = 0, = = 1; void producer() while (true) { ‏)ع مسطمعم‎ senlvait (5); append(); semSignal(s); semsignal(n); 0 1 void consuner() { while (true) { semivait(n); senivait (5); take()1 semSignal(s); consume () ; 1 void main() { 1 parbegin (producer, consumer); Figure 5.11 A Solution to the Infinite-Buffer Producer/Consumer Problem ‘Using Semaphores 41

صفحه 42:
CE CU Block on: Unblock on: Producer: insert in full buffer Consumer: item inserted Consumer:remove from empty buffer Producer: item removed | Ow 0 ‏مت‎ Circular Buffer for the Producer/Consumer Problem 42

صفحه 43:
2

صفحه 44:
CEN er eat ea OR Cpl eC ene ac (ON a mo while (true) { while (true) { /* produce item while (in == v*/ out) while ((in + 1) % /* do n==out) /* nothing */; do nothing */; w = b[out]; b[in] = v; out = (out + in=(in+1)%Nn 1( ۵ ۶ i /* consume item w */ 8

صفحه 45:
7+ program boundedbuffer */ const int sizeofbuffer = /* buffer size */; semaphore 9 = 1, n= 0, = sizeofbuffer; void producer (} while (true) { produce (); senifait (©); semivait (a); append(); semSignal(s); semSignal(n); + 1 void consumer() while (true) { semifait (n) ; semilait(s); take(); semSignal(s); semSignal(©); consume () ; 1 void main() { i parbegin (producer, consumer); 45

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

صفحه 47:
47 عو ‎tering‏ ‎processes‏ ‎momtor yattingarea Entrance‏ ۳ ‎MONITOR,‏ 1 ‎eal dats‏ ‘condition varlables [0۳ 1 mrs Inkiattatio code عع مير جم 2 2 0 موب argent queue

صفحه 48:
7 program producerconsumer ¥/ monitor boundedbuffer; char buffer (1); int nextin, nextout; int count; void producer() 14 cond notfull, notempty; char x; while (true) { void append (char x) produce (x) ; 1 ‏لمعووة‎ ‎if (count == N) cwait(notfull); 1 buffer[nextin] = x7 3 nextin = (nextin + 1) ٩ N; void consuner() count++; 1 7* one more item in buffer */ char x; esignal(notempty)? while (true) ¢ i take (x); void take (char x) consume (x); 4 1 4£ (count == 0) cwait(notempty); x = buffer{nextout }; nextout = (nextout +1) 8 ‏زلا‎ ‎count--; caignal(notfull); 1 void main() 1 parbegin (producer, ‏أز («مصدفممع‎ nextin = 0; nextout = 0; count = 0; 48

صفحه 49:
و ‎P wl‏ يك سیکنال میدهد ‎de‏ ‏3 بر روی یک متغیر شرطو فر ‎oy - ۱‏ 4 3 به خاطر همان شرط معلق شده | ‎aes 0 ea‏ ‎Ro pal‏ بلس و هب ‎ae‏ نا ‎ASS 51 pil P Law.‏ 1 52 ‎ ‎49

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

صفحه 51:
امسر ی( lessage Contents 51

صفحه 52:
فرستنده و گیرنده می توانند در حين ارسال و دریافت پیغام مسدود شوند یا مسدود ذ # حالت اول: مسدود شدن فرستنده و گیرنده در هنگام مبادله پیغام. #حالت دوم: فرستنده غیر مسدود و گیرنده مسدود #حالت سوم: فرستنده و گیرنده غیر مسدود. 52

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

صفحه 54:
؟ آدرس دهی غير مستقيم: * صندوق يست * چهار حالت دارد: * يكك به یک * یک به چند * چند به یک 7" چند به چند 54

صفحه 55:
55 عمسم سيد رف مس ور

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

صفحه 57:
‘capacity = /* buffering capacity */ ; null =/* eupty message */ ; int i; void producer () {message pasg; while (true) { receive (mayproduce, pmsg); pisg = produce(); send (mayconsume, msg); 1 1 void consumer () {me cas while (true) { receive (mayconsume, omsg); consume (emsq) send (mayproduce, mull); 1 1 void main() 1 create mailbox (mayproduce) ; create mailbox (mayconsume) ; for (int i = 1; i < capacity; itt) send (mayproduce, null); parbegin (producer, consumer);

51,000 تومان