نام و آدرس پست الکترونیکی اعضای گروه را در این قسمت بنویسید.
سروش شرافت sorousherafat@gmail.com
علیپاشا منتصری alipasha.montaseri@gmail.com
کیان بهادری kkibian@gmail.com
مهدی علیزاده alizademhdi@gmail.com
در این بخش در طراحی خود تغییری ایجاد نکردیم.
تنها در نامگذاری متغیرها تغییر انجام شد. برای مشاهدهی گزارش این بخش میتوانید دیزاین همین بخش را در داک دیزان مشاهده کنید.
در این قسمت نیز تغییری در طراحی کلی ایجاد نکردیم و مطابق آنچه که در داک دیزان ذکر کرده بودیم پروژه انجام شد.
تنها به یک مسئله در دیزان اشاره نشده بود که آن هم انجام عملیات برگرداندن اولویتها است که در تابع thread_set_priority
این اتفاق میافتد.
در این تابع چک میکنیم که اگر اولویت موثر ترد(priority
) و اولویت اولیه ترد(base_priority
) برابر نبودند آنگاه یعنی قبلا عملیات donation اتفاق افتاده است و اولویت باید برگردد. در غیر این صورت نیز اهدای اولویت جدید اتفاق میافتد.
یک تغییر دیگر در تابع sema_up
بود در انجام عملیات ترد با بیشترین اولویت را از لیست waiters
حذف میکنیم.
در ابتدا طبق برنامهریزیای که برای طراحی این فاز انجام داده بودیم پیش رفتیم. هرکس مسئول بخشی شد که در زمان طراحی دانش بیشتری در آن کسب کرده بود و در مرحله بعد، همه درگیر پروژه شدند.
پروژه را بهطور کلی به همان سه بخش «ساعت زنگدار بهینه»، «زمانبند اولویتدار» و «آزمایشگاه زمانبندی» تقسیم کردیم. به مدت چند روز، روزانه کد زدیم و شبها از پیشرفت پروژه گزارش میدادیم. همچنین برای حل مشکلاتی که بهشان برمیخوردیم با یکدیگر مشورت و بحث میکردیم.
بهنظرمان، این فاز پروژه هم تجربه مناسبی از کار تیمی بود، هرچند بهدلیل ماهیت آن، تسکهای افراد مختلف کمتر درهمتنیدگی داشت.
توجه کنید که بقیه موارد خواسته شد نیز مانند کد استایل و memory leak و ... نیز در کد رعایت شده اند.
خروجی این قسمت به صورت زیر خواهد بود.
0: Arrival of Task 12 (ready queue length = 1)
0: Run Task 12 for duration 2 (ready queue length = 0)
1: Arrival of Task 13 (ready queue length = 1)
2: Arrival of Task 14 (ready queue length = 2)
2: IO wait for Task 12 for duration 1
2: Run Task 14 for duration 1 (ready queue length = 1)
3: Arrival of Task 15 (ready queue length = 2)
3: Wakeup of Task 12 (ready queue length = 3)
3: IO wait for Task 14 for duration 2
3: Run Task 12 for duration 2 (ready queue length = 2)
5: Wakeup of Task 14 (ready queue length = 3)
5: Run Task 14 for duration 1 (ready queue length = 2)
6: Run Task 15 for duration 2 (ready queue length = 1)
8: Run Task 15 for duration 1 (ready queue length = 1)
9: Run Task 13 for duration 2 (ready queue length = 0)
11: Run Task 13 for duration 2 (ready queue length = 0)
13: Run Task 13 for duration 2 (ready queue length = 0)
15: Run Task 13 for duration 1 (ready queue length = 0)
16: Stop
خروجی این قسمت به صورت زیر خواهد بود.
0: Arrival of Task 12 (ready queue length = 1)
0: Run Task 12 for duration 2 (ready queue length = 0)
1: Arrival of Task 13 (ready queue length = 1)
2: Arrival of Task 14 (ready queue length = 2)
2: IO wait for Task 12 for duration 1
2: Run Task 13 for duration 2 (ready queue length = 1)
3: Arrival of Task 15 (ready queue length = 2)
3: Wakeup of Task 12 (ready queue length = 3)
4: Run Task 14 for duration 1 (ready queue length = 3)
5: IO wait for Task 14 for duration 2
5: Run Task 15 for duration 2 (ready queue length = 2)
7: Wakeup of Task 14 (ready queue length = 3)
7: Run Task 12 for duration 2 (ready queue length = 3)
9: Run Task 14 for duration 1 (ready queue length = 2)
10: Run Task 13 for duration 4 (ready queue length = 1)
14: Run Task 15 for duration 1 (ready queue length = 1)
15: Run Task 13 for duration 1 (ready queue length = 0)
16: Stop
با زیاد شدن
همانند قسمت قبل
با زیاد شدن
بله اگر از srtf استفاده کنیم معیار median response time مقدار زیادی بهتر خواهد شد چون task هایی که زودتر تمام میشوند را سریعتر انجام میدهد اما براساس 95th percentile بدتر خواهد شد چون تسکهای طولانی داریم و srtf اولویت را به تسکهای کوتاه میدهد و آنها را با تاخیر زیادی اجرا میکند.
این موضوع داخل نمودار زیر هم مشخص است.
زیاد شدن بهرهوری(نزدیک 100%) به این معنا است که cpu همیشه یک تسک برای انجام دادن دارد و در نتیجه باعث میشود response time به صورت کلی بالا برود چون این تسکها امکان تداخل زمانی هم با هم دارند.
در کل دو تسک وجود دارد و از هر تسک هم حداکثر یکبار میتواند داخل صف باشد در نتیجه طول صف
همواره حداکثر
با توجه به
i.i.d
بودن متغیرها
میدانیم
احتمال کمتر بودن
طبق قانون حد مرکزی توزیع جمع تعداد زیادی(
حال اگر فرض کنیم
ابتدا
این محاسبات نشان میدهد ممکن است در مقدارهای کم
با توجه به خروجی بالا میتوان نتایج به دست آمده را تایید کرد. همچنین قابل ذکر است که هر چقدر مقدار