Blitz OS Project

تمرین سری سوم درس سیستم‌عامل

مهلت ارسال: ۴ اردیبهشت


فایل توضیحات فاز سوم پروژه را میتوانید از اینجا مشاهده کنید. همچنین یک پیاده‌سازی درست از خواسته‌های فاز قبلی را می‌توانید از اینجا ببینید.

برای این فاز جلسه‌ای برای رفع اشکال در نظر گرفته نشده است، اما در صورتی که نیاز به توضیحات بیشتری وجود دارد، این مورد را با تیم درس در میان بگذارید تا در صورتی که نیازی به رفع ابهام باشد، یک جلسه‌ی توجیهی برای آن برگذار شود.

خواسته‌ها و خروجی

شما باید ۴ فایل

1. Main.h
2. Main.c
3. Script file showing task 1 output
4. Script file showing task 2 output

را آپلود کنید. لطفاً در فایل Main.c شماره دانشجویی خود را در قسمت PUT YOUR NAME HERE در ابتدای کدها بنویسید.

خروجی مطلوب برای مرحله‌ی ۱ و ۲ به ترتیب در اینجا ، اینجا قرار گرفته است.

در مرحله‌ی اول، خروجی خواسته‌شده باید شبیه به خروجی نشان‌داده شده باشد، اما دقت کنید که نتیجه نهایی لزوماً با نتیجه نشان‌داده شده یکسان نیست. به نکات زیر توجه کنید:

۱. تعداد رشته‌ها ( thread ) باید دینامیک باشد. یعنی بتوان با تغییر دادن یک متغییر تعداد آن‌ها را تغییر داد.

۲. برای پیاه‌سازی دو تابع cut_hair و get_haircut می‌توانید از توابع آماده‌ی زیر استفاده کنید:

  function CutHair()
    -- print start of barber work
    StartSem.Up()
    WasteTime(10000)
    FinishSem.Down()
    -- print end of barber work
  endFunction

  function GetHaircut()
    StartSem.Down()
    -- print start of customer getting haircut
    WasteTime(10000)
    -- print end of customer getting haircut
    FinishSem.Up()
  endFunction

در قسمت‌های مشخص شده باید چاپ کردن خطوط مناسب از خروجی را انجام دهید. هدف از استفاده از توابع بالا این است که ساختار خروجی شما به هم شبیه شود، و ترتیب چاپ کردن عملیات‌ها یکی باشد. همانطور که می‌بینید در این کد از دو سمافور استفاده شده است که شما باید آن‌ها را بسازید (با مقدار اولیه صفر).

۳. همانطور که در پیاده‌سازی بالا دیدید، کد شما باید تابع WasteTime را پیاده‌سازی کرده باشد. این تابع باید زمانی را هدر بدهد! برای پیاده‌سازی آن می‌توانید از یک busy loop خالی استفاده کنید. دقت کنید که این تابع باید بتواند یک عدد ورودی بگیرد و به تناسب آن عدد زمان بیشتری را هدر دهد.

۴. در مرحله‌ی اول، لزومی به ساخت یک کلاس ( class ) وجود ندارد، و می‌توانید از توابع استفاده کنید. هرچند برای ساخت کلاس (یا monitor ) مانعی وجود ندارد.

۵. شما باید با تغییر پارامتر‌های موجود در مسئله، بتوانید خروجی مناسبی نشان دهید. منظور از خروجی مناسب این است که اتفاقات مهم پیاده سازی شما نشان داده شود. مثلاً باید در این خروجی دیده شود که در صورتی که صف انتظار پر است، مشتری جدیدی وارد می‌شود و بدون نشستن خارج می‌شود. همچنین مشتری‌ها نباید همه با هم از راه برسند، و باید طوری آن‌ها را اضافه کنید که بین اضافه شدن آن‌ها فاصله‌ی زمانی وجود داشته باشد.

۶. بعد از پیدا کردن پارامتر‌های مناسب، خروجی آن را با script ذخیره کنید و همراه کدها بفرستید.

خروجی مرحله دوم نیز کاملا در صورت پروژه توضیح داده شده است.

تحویل حضوری و نمره‌دهی

یک هفته پس از پایان زمان تحویل این فاز , یک بازه ی زمانی مشخص می‌شود که در آن بازه هرکس در یک زمان مشخص به صورت آنلاین از طریق اسکایپ مراحلی که انجام داده است را به یکی از دستیاران آموزشی توضیح خواهد داد. نمره ای که خواهید گرفت به میزان تسلط شما در جلسه تحویل حضوری بستگی دارد. ملاک‌های نمره‌دهی این فاز از پروژه عملکرد کدها، و توانایی توضیح دادن روند کد به تحویل گیرنده است. پس لطفاً قبل از آپلود از اجرا شدن کد خود مطمئن شوید. همچنین کامنت گذاری نمره‌ای ندارد، اما در صورتی که نتوانید کد خود را به تحویل گیرنده توضیح دهید از شما نمره کسر خواهد شد. پس اگر فکر می‌کنید که ممکن است کدتان را فراموش کنید لطفاً کامنت‌گذاری مناسبی انجام دهید.

نکته‌ی مهم

در تحویل فاز سوم، شما باید توانایی ارائه کامل کد خود به تحویل گیرنده باشید. در طول تحویل از شما سوالاتی پرسیده می‌شود که انتظار می‌رود فردی که کد را پیاده‌سازی کرده باشد بتواند به راحتی به آن‌ها پاسخ دهد. در صورتی که نتوانید به سوال‌ها پاسخ دهید بخشی از نمره را از دست می دهید.

رفع اشکال

با تشکر از افرادی که سوال‌های خود را در cw مطرح کردند، برای این فاز نیز لطفاً‌ سوالات خود را در قسمت پرسش و پاسخ تمرین‌ها در cw مطرح کنید که علاوه بر این که پاسخ خود را می‌یابید، دوستانتان نیز بتوانند از پاسخ‌های موجود در cw استفاده کنند.