بخشی از پاورپوینت
--- پاورپوینت شامل تصاویر میباشد ----
اسلاید 1 :
فصل 6: همزمانی پردازه ها
پیش زمینه
مساله ناحیه بحرانی
راه حل پترسون
سخت افزار همزمان سازی
سمافور
مسائل کلاسیک همزمان سازی
مانیتور
اسلاید 2 :
اهداف
تعریف ناحیه بحرانی
ارائه راه حل های سخت افزاری و نرم افزاری جهت رفع مشکل ناحیه بحرانی
اسلاید 3 :
پیش زمینه
دسترسی همزمان به داده های مشترک ممکن است باعث شود که ناسازگاری داده به وجود آید.
سازگاری داده نیازمند مکانیزمی برای اطمینان از اجرای صحیح فرآیندهای همکار است.
فرض کنید می خواهیم راه حلی برای مسئله تولید کننده – مصرف کننده فراهم کنیم به طوری که از تمام ظرفیت بافر استفاده شود. یک راه حل این است که یک شمارنده از نوع عدد صحیح با مقدار اولیه صفر استفاده کنیم که میزان موجودی بافر را مشخص کند. هر بار که یک داده به بافر اضافه می شود، این شمارنده یک واحد افزایش پیدا می کند و هر بار که یک داده از بافر حذف می شود، یک واحد از شمارنده کاسته می شود.
اسلاید 4 :
راه حل پترسون
الگوریتم مناسبی برای توضیح حل مسئله است
یک راه حل دو فرآیندی است
فرض می شود دستورات LOAD و STORE دستورات اتمیکی هستند و در حین انجام آنها هیچ وقفه ای نمی تواند صادر شود
هر دو فرآیند دو متغیر زیر را به اشتراک می گذارند
lint turn;
lBoolean flag[2]
متغیر turn بیانگر این است که کدام فرآیند می تواند به ناحیه بحرانی اش وارد شود.
آرایه flag بیانگر این است که یک فرآیند، آماده وارد شدن به ناحیه بحرانی اش می باشد.
lflag[i]=true نشان دهنده این است که فرآیند pi آماده ورود به ناحیه بحرانی است.
اسلاید 5 :
اکثر سیستم ها راه حل های سخت افزاری برای منطقه بحرانی ارائه می دهند
همه راه حل هایی که در ادامه می آید بر اساس مفهوم قفل شکل گرفته اند.
lدر این راه حل ها ناحیه بحرانی بوسیله قفل محافظت می شود.
محیط تک پردازنده ای: می تواند رخ دادن وفقه ها را متوقف کرد.
lدر این صورت کدی که در حال اجرا است مطمئن هستیم قبضه نمی شود.
lاین راه حل برای محیط های چند پردازنده ای عملی نیست
تعداد زیادی از سیستم های امروزی دستورات سخت افزاری ویژه ای دارند که اتمیک هستند
lاتمیک: غیر تجزیه پذیر، در حین اجرای آن وقفه ای رخ نمی دهد
- 4 دستوری به منظور خواندن و تغییر دادن محتویات یک متغیر TestAndSet()
- 4 دستوری به منظور جابجایی محتویات دو متغیر Swap()
اسلاید 6 :
nسمافور شمارشی: مقدار سمافور می تواند در بازه ای نامحدود تغییر یابد
nسمافور باینری: مقدر عدد صحیح سمافور فقط می تواند صفر یا یک باشد
lبه نام mutex lock نیز شناخته می شوند
nمی توان یک سمافور شمارشی را با تعدادی سمافور باینری پیاده سازی کرد.
nانحصار متقابل را فراهم می کند:
Semaphore mutex; // initialized to 1
do {
wait (mutex);
// Critical Section
signal (mutex);
// remainder section
} while (TRUE);
اسلاید 7 :
nسمافور شمارشی: مقدار سمافور می تواند در بازه ای نامحدود تغییر یابد
nسمافور باینری: مقدر عدد صحیح سمافور فقط می تواند صفر یا یک باشد
lبه نام mutex lock نیز شناخته می شوند
nمی توان یک سمافور شمارشی را با تعدادی سمافور باینری پیاده سازی کرد.
nانحصار متقابل را فراهم می کند:
Semaphore mutex; // initialized to 1
do {
wait (mutex);
// Critical Section
signal (mutex);
// remainder section
} while (TRUE);
اسلاید 8 :
nبوسیله سمافور می توان بسیاری از مسائل همزمانی را حل کرد
nفرض کنید دو فرآیند P1 و P2 داریم و نیازمند آنیم که S1 قبل از S2 اتفاق بیفتد
Semaphore synch; // initialized to 0
اسلاید 9 :
باید ضمانت کرد که هیچ دو فرآیندی نمی توانند دستورات wait () و signal() یک سمافور را در یک زمان انجام دهند.
با پیاده سازی موجود: یک قسمت busy waiting در پیاده سازی ناحیه بحرانی وجود دارد.
lولی پیاده سازی کد کوتاه است
lاگر ناحیه بحرانی کم اتفاق بیفتد این انتظار چندان مهم نیست
nولی ممکن است برنامه هایی زمان زیادی را در ناحیه بحرانی باشند و بنابراین این راه حل نمی تواند پاسخ مناسبی باشد
اسلاید 10 :
پیاده سازی سمافور بدون Busy waiting
ه ازای هر سمافور یک صف انتظار وجود دارد. هر فرآیند در صف انتظار شامل دو داده می باشد
lیک مقدار صحیح به نام value
lاشاره گر به رکورد بعدی در لیست انتظار
در کل دو عملیات وجود دارد
lblock(): فرآیندی که این عملیات را صدا زده است را در صف انتظار مربوطه قرار می دهد
lwakeup(): یک فرآیند از صف انتظار برداشته و آن را در صف آماده (ready queue) قرار می دهد