Presentation is loading. Please wait.

Presentation is loading. Please wait.

Concurrency: Mutual Exclusion and Synchronization

Similar presentations


Presentation on theme: "Concurrency: Mutual Exclusion and Synchronization"— Presentation transcript:

1 Concurrency: Mutual Exclusion and Synchronization
فصل پنجم

2 Currency ارتباط بین فرآیندها اشتراک منابع همزمان سازی فرآیندها
تخصیص زمان پردازنده

3 Concurrency چند کاربرد مختلف یک کاربرد ساختار یافته ساختار سیستم عامل
چند برنامگی یک کاربرد ساختار یافته کاربرد می تواند شامل مجموعه ای از فرآیندهای همزمان باشد. ساختار سیستم عامل سیستم عامل مجموعه ای از فرآیندها و نخها است.

4 Difficulties with Concurrency
اشتراک منابع عمومی مدیریت تخصیص منابع تشخیص محل خطاهای برنامه نویسی مشکل است.

5 A Simple Example void echo() { chin = getchar(); chout = chin;
putchar(chout); }

6 A Simple Example Process P1 Process P2 . . in = getchar(); .
in = getchar(); . in = getchar(); chout = chin; chout = chin; putchar(chout); . putchar(chout);

7 Operating System Concerns
دنبال کردن فرآیندهای فعال تخصیص و بازپس گیری منابع زمان پردازنده حافظه فایلها دستگاههای I/O حفاظت داده و منابع نتیجه اجرای یک فرآیند نباید به سرعت اجرای فرآیندهای همزمان ربط داشته باشد.

8 Process Interaction فرآیندها از وجود همدیگر با اطلاع نیستند.
فرآیندها بطور غیر مستقیم از همدیگر اطلاع دارند. فرآیندها بطور مستقیم از همدیگر اطلاع دارند.

9 Competition Among Processes for Resources
انحصار متقابل نواحی بحرانی در هر لحظه از زمان فقط یک برنامه می تواند در ناحیه بحرانی باشد. بن بست گرسنگی

10 Cooperation Among Processes by Sharing
نوشتن در ناحیه بحرانی باید بصورت انحصار متقابل انجام شود. نواحی بحرانی برای اطمینان از جامعیت داده لازم هستند.

11 Cooperation Among Processes by Communication
تبادل پیغام نیازی به انحصار متقابل نیست. امکان بن بست وجود دارد ممکن است هر دو فرآیند منتظر پیغام دیگری باشند. امکان گرسنگی داریم دو فرآیند با هم پیغام مبادله می کنند در حالیکه سومی منتظر است.

12 Requirements for Critical Region
انحصار متقابل: در هر لحظه از زمان فقط یک فرآیند می تواند در ناحیه بحرانی باشد. پیشرفت: وقتی که فرآیند دیگری از ناحیه بحرانی استفاده نمی کند، فرآیند متقاضی نباید با تأخیر روبرو شود. فرضهای ساده: در مورد تعداد و سرعت نسبی فرآیندها نباید فرضی انجام شود. تاخیر محدود: مدت استفاده از ناحیه بحرانی برای هر فرآیند محدود است.

13 کسی بی نوبت داخل نرود! خوب، اصلا دیدی کسی بره تو؟! آیا درها قفل دارند؟
Bounded Wait Mutual Exclusion Progress کسی بی نوبت داخل نرود! خوب، اصلا دیدی کسی بره تو؟! آیا درها قفل دارند؟ اگر بدویم، اولین نفر ما هستیم! Oversimplifying Assumptions

14 First Attempt انتظار مشغولی
فرآیند مرتب چک می کند که ببیند می تواند وارد ناحیه بحرانی شود یا نه. در این حالت فرآیند تا وقتی که وارد ناحیه بحرانی نشود، هیچ کار مفیدی انجام نمی دهد. اگر فرآیندی در ناحیه بحرانی خود شکست بخورد، فرآیند دیگر تا ابد مسدود خواهد بود. فرآیندها به نوبت از ناحیه بحرانی استفاده می کنند.

15 Second Attempt هر فرآیند می تواند وضعیت دیگران را ببیند، اما نمی تواند آنرا تغییر دهد. وقتی که فرآیند می خواهد وارد ناحیه بحرانی شود، ابتدا وضعیت دیگران را چک می کند. اگر هیچ فرآیندی در ناحیه بحرانی نباشد، فرآیند ما وضعیت خود را به ناحیه بحرانی تغییر می دهد. متاسفانه این متد انحصار متقابل را تضمین نمی کند. ممکن است دو فرآیند با هم ناحیه بحرانی را خالی ببیند و با هم وارد آن شوند.

16 Third Attempt قبل از چک کردن وضعیت دیگران، وضعیت خود را به حالت بحرانی تغییر دهیم. اگر بعد از این کار دیدیم که فرآیند دیگری در ناحیه بحرانی است، فرآیند تا خالی شدن ناحیه بحرانی مسدود می شود. در این حالت امکان بن بست وجود دارد- اگر دو فرآیند همزمان بخواهند وارد ناحیه بحرانی شوند ، هر کدام به اشتباه فکر می کنند که دیگری در ناحیه بحرانی است وهر دو تا ابد مسدود خواهند ماند.

17 Fourth Attempt فرآیند یک پرچم را به نشانه تمایل خود به استفاده از ناحیه بحرانی روشن می کند، اما این آمادگی را دارد که در صورت لزوم پرچم را خاموش کند. سپس، فرآیندهای دیگر را چک می کند. اگر کسی در ناحیه بحرانی باشد پرچم را خاموش می کند و در زمان دیگری آنرا روشن می کند. این عمل تا وقتی که وارد ناحیه بحرانی نشود تکرار می گردد.

18 Fourth Attempt فرض کنید ناحیه بحرانی خالی است. ممکن است که دو فرآیند پرچم خود را روشن کنند، دیگری را چک کنند و دوباره پرچم را خاموش کنند. این امر البته خیلی طول نخواهد کشید و بن بست اتفاق نمی افتد اما مطلوب نیست.

19 Correct Solution هر فرآیند یک نوبت برای ناحیه بحرانی می گیرد.
اگر فرآیند بخواهد وارد ناحیه بحرانی شود ابتدا پرچم خود را روشن می کند و منتظر نوبتش می ماند.

20 Mutual Exclusion: Hardware Support
خاموش کردن وقفه در حالت عادی وقتی فرآیندی اجرا می شود به دو دلیل ممکن است متوقف شود: وقوع وقفه درخواست یک خدمت سیستم عامل لذا اگر در حین اجرا وقفه را خاموش کنیم، انحصار متقابل تضمین می گردد. این امر استفاده های مفید وقفه را از بین می برد. در سیستمهای چند پردازنده ای، خاموش کردن وقفه در یکی از پردازنده ها انحصار متقابل را تضمین نمی کند.

21 Mutual Exclusion: Hardware Support
وجود یک دستورالعمل خاص ماشین (اسمبلی) باید در یک سیکل اجرا شود. لذا دستورات دیگر روی آن تاثیری ندارند. دستور test&set boolean testset (int i) { if (i == 0) { i = 1; return true; } else { return false;

22 Test&set Usage while (true) { while (!test&set(a)) /*do nothing*/
/* critical section*/ a=0; /*remainder*/ }

23 Mutual Exclusion: Hardware Support
دستور Exchange void exchange(int register, int memory) { int temp; temp = memory; memory = register; register = temp; }

24 Process i /* a is shared variable initialized to 0 int ki=1;
while (true) { do swap(ki,a); while (ki!=0) /* critical section*/ swap(a,ki); /*remainder*/ }

25 Mutual Exclusion Machine Instructions
مزایا به سیستمهای چند پردازنده ای قابل اعمال است. ساده است. می توان چندین ناحیه بحرانی داشت.

26 Mutual Exclusion Machine Instructions
عیوب انتظار مشغولی وقت پردازنده را مصرف می کند. امکان گرسنگی وجود دارد. اگر یک فرآیند ناحیه بحرانی را ترک کند و چند فرآیند منتظر ورود باشند. بن بست: اگر یک فرآیند کم اهمیت داخل ناحیه بحرانی باشد و یک فرآیند مهم به ناحیه بحرانی نیاز داشته باشد. فرآیند مهم تر پردازنده را با وقفه در اختیار می گیرد. فرآیند کم اهمیت تر تا ابد منتظر ناحیه بحرانی می ماند، زیرا هیچوقت به فرآیند معمولی اجازه در اختیار گرفتن پردازنده و اتمام کار داده نمی شود.

27 Semaphores سمافور یک متغییر مخصوص است که برای مبادله سیگنال از آن استفاده می گردد. اگر فرآیندی منتظر یک سیگنال باشد، تا وقتی که سیگنال نرسد مسدود می شود. عملگرهای wait و signal وقفه پذیر نیستند. یک صف برای نگهداری از فرآیندهایی که منتظر یک سمافور هستند ، تشکیل می شود.

28 Semaphores سمافور دارای یک متغییر است که مقدار طبیعی دارد.
این متغییر نشانگر تعداد فرآیندهایی است که می توانند بدون انتظار از سمافور استفاده کنند. هر عمل wait مقدار سمافور را یک واحد کم می کند. هر عمل signal مقدار سمافور را یک واحد افزایش می دهد.

29 Definition of Semaphore Primitives (Counting Semaphore)
struct semaphore{ int count; queueType queue; }; void semWait(semaphore s) { s.count--; if (s.count < 0) { place this process in s.queue; block this process; } void semSignal(semaphore s) { s.count++; if (s.count ≤ 0) remove a process P from s.queue; place process P on ready list; }

30 Definition of Binary Semaphore Primitives
struct binary_semaphore { enum {0,1} value; queueType queue; }; void semWaitB(binary_semaphore s) { if (s.value == 1) s.value = 0; else { place this process in s.queue; block this process; } void semSignalB(binary_semaphore s) { if (s.queue is empty()) s.value = 1; else remove a process P from s.queue; place process P on ready list; }

31 Mutual Exclusion Using Semaphores
Pi { while(1) { semWait(s); /* Critical Section */ semSignal(s); /* remainder */ } lock = 0; Pi { while(1) { while(!Test_And_Set(lock)) { }; /* Critical Section */ lock =0; /* remainder */ }

32 Process Process Value of Semaphore lock Queue B A 1 semWait(lock)
Critical Region Value of Semaphore lock Queue B A Normal Execution Blocked on semaphore lock 1 semWait(lock) semWait(lock) -1 B semSignal(lock) semSignal(lock) 1

33 Producer/Consumer Problem
یک یا چند تولید کننده داده تولید می کنند و در بافر قرار می دهند. یک مصرف کننده داده ها را از بافر برمی دارد و مصرف می کند. در هر لحظه از زمان فقط یک مصرف کننده یا تولید کننده می توانند به بافر دسترسی داشته باشند. این مساله در برنامه نویسی سیستم و برنامه نویسی کاربردی اتفاق می افتد: یک وب سرور درخواستهای وب ورودی را به فرآیندهای منتظر ارسال می کند تا سرویس داده شوند. اتفاقات مربوط به GUI (صادره از صفحه کلید و ماوس) توسط سیستم عامل در یک صف قرار داده می شوند و برنامه ها آنها را مصرف می کنند.

34 Producer-Consumer Problem
می توان با یک بافر حلقوی و دو اشاره گر برای درج و حذف داده مسأله را حل کرد. insertPtr removePtr

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

36 2 Counting Semaphores and a mutex
یک سمافور برای شمارش آیتمهای موجود در بافر یک سمافور برای شمارش جاهای خالی (slots) در بافر یک سمافور برای قفل کردن ناحیه بحرانی

37 Assembling the solution
sem_wait(slots), sem_post(slots) sem_wait(items), sem_post(items) sem_wait(mutex)و sem_post(mutex) insertptr=(insertptr+1) % N removalptr=(removalptr+1) % N مقدار اولیه سمافور slots برابر سایز بافر است. مقدار اولیه سمافور items برابر صفر است. مقدار اولیه سمافور mutex برابر یک است.

38 Pseudocode getItem() sem_wait(items) sem_wait(mutex)
result=buffer[ removePtr ]; removePtr=(removePtr +1 ) % N sem_post(mutex) sem_post(slots)

39 Pseudocode putItem(data)
sem_wait(slots) sem_wait(mutex) buffer[ insertPtr]= data; insertPtr=(insertPtr + 1 ) % N sem_post(mutex) sem_post(items)

40 Analysis#1 What's the precise problem?
putItem(data) { sem_wait(mutex) sem_wait(slots) buffer[ insertPtr]= … insertPtr=… sem_post(items) sem_post(mutex) } getItem() { sem_wait(mutex) sem_wait(items) result=buffer[ removePtr ]; removePtr=… sem_post(slots) sem_post(mutex) }

41 Deadlock e.g Consumer waits for producer to insert a new item but Producer is waiting for Consumer to release mutex putItem(data) { sem_wait(mutex) #2 sem_wait(slots) buffer[ insertPtr]= … insertPtr=… sem_post(items) sem_post(mutex) } getItem() { sem_wait(mutex) sem_wait(items) BLOCKS #1 result=buffer[ removePtr ]; removePtr=… sem_post(slots) sem_post(mutex) }

42 Analysis#2 putItem(data) { sem_wait(slots) sem_wait(mutex)
buffer[ insertPtr]= … insertPtr=… sem_post(items) sem_post(mutex) } getItem() { sem_wait(items) sem_post(slots) sem_wait(mutex) result=buffer[ removePtr ]; removePtr=… sem_post(mutex) }

43 Buffer overflow when reader removes item from a full buffer: Producer inserts item too early
putItem(data) { sem_wait(slots) sem_wait(mutex) buffer[ insertPtr]= … insertPtr=… sem_post(items) sem_post(mutex) } getItem() { sem_wait(items) sem_post(slots) sem_wait(mutex) result=buffer[ removePtr ]; removePtr=… sem_post(mutex) }

44 Barbershop Problem

45 First Reader-Writer Problem
خواننده: خواندن داده نویسنده: نوشتن داده قوانین: چند خواننده می توانند داده را با هم بخوانند. در هر زمان فقط یک نویسنده می تواند داده را بنویسد. یک خواننده و نویسنده با هم نمی توانند در ناحیه بحرانی باشند. Reader Writer OK No NO

46 Writer sem_wait(&wrt); do writing Sem_post(&wrt); } Reader
while (TRUE) { Think_up_data(); /*noncritical section*/ sem_wait(&wrt); do writing Sem_post(&wrt); } Reader while (TRUE) { sem_wait(&mutex); readcount =readcount+1; if readcount == 1 then sem_wait(&wrt); sem_post(&mutex); do reading sem_wait(&mutex) readcount=readcount-1; if readcount == 0 then sem_post(&wrt); Use read data }

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

48

49 Message Passing در این روش انحصار متقابل بصورت ضمنی وجود دارد.
اطلاعات بین فرآیندها از طریق پیغام رد و بدل می شود. send (destination, message) receive (source, message)

50 Synchronization فرستنده و گیرنده می توانند در حین ارسال و دریافت پیغام مسدود شوند یا مسدود نشوند. حالت اول: مسدود شدن فرستنده و گیرنده در هنگام مبادله پیغام. این روش وعده گاه نیز نامیده شده است. حالت دوم: فرستنده غیر مسدود و گیرنده مسدود: در این حالت گیرنده تا وقتی که پیغام را بطور کامل دریافت نکند مسدود می شود. اما فرستنده می تواند به کار خود ادامه دهد. حالت سوم: فرستنده و گیرنده غیر مسدود.

51 Addressing آدرس دهی مستقیم:
فرستنده آدرس گیرنده را در پیغام قرار می دهد. گیرنده می تواند از پارامتر منبع پیام برای اطلاع دادن به فرستنده استفاده کند. در گیرنده دو حالت امکان پذیر است: گیرنده دقیقا از قبل می داند که کی برای آن پیغام می فرستد. (برای ارتباط دو فرآیند مفید است). گیرنده از هر فرستنده ای داده قبول می کند .

52 Addressing آدرس دهی غیر مستقیم: چهار حالت دارد:
پیغامها به یک ساختار داده مشترک که جعبه پستی نام دارد فرستاده می شوند. یک فرآیند پیغام را به جعبه پستی می فرستد و دیگری پیغام را بر می دارد. چهار حالت دارد: یک نفر به یک نفر یک نفر به چند نفر چند نفر به یک نفر چند نفر به چند نفر

53 Message Format


Download ppt "Concurrency: Mutual Exclusion and Synchronization"

Similar presentations


Ads by Google