Project1-FinalVersion.pdf

‫به نام خدا‬
‫پروژه اول درس سیستم عامل‬
‫وحًٌ وًشته فراخًاوی سیستمی ي آشىایی با زمان بىذی‬
‫‪Least Slack time‬‬
‫ترم دوم سال تحصیلی ‪0933 – 0931‬‬
‫کامیار حاجی اللهوردی‬
‫یاسین اروس خانی‬
‫‪ ‬مقدمه‬
‫تاکٌَى تا فراخَاًی سیستوی‪ 1‬آضٌا ضذُ ایذ‪ .‬در ایي پرٍشُ لصذ دارین تا ًحَُ ًَضتي ٍ فراخَاًی آى ّا تیطتر آضٌا ضَین‪.‬‬
‫تغییراتی کِ اػوال خَاّیذ کرد همذهِ ای ترای پرٍشُ ی تؼذی ضوا خَاّذ تَد‪.‬‬
‫راتظ زهاى تٌذ‪ّ ٍ 2‬ستِ‪ 3‬سیستن ػاهل ‪ ،‬در فایل ‪ sys/sys/sched.h‬از کذ سیستن ػاهل لرار گرفتِ است‪ ٍ .‬ارتثاط‬
‫سایر اجسای سیستن ػاهل از عریك فراخَاًی تَاتغ ٍ استفادُ از ساختارّای تؼریف ضذُ در ایي فایل تا زهاى تٌذ ترلرار هی‬
‫ضَد‪.‬‬
‫در ‪ FreeBSD 8.0‬دٍ پیادُ سازی ترای زهاى تٌذ ٍجَد دارد کِ یکی از آى ّا ٌّگام کاهپایل اًتخاب هی ضَد‪ ( :‬تِ‬
‫صَرت پیص فرض‪ ،‬زهاى تٌذی ‪)ULE‬‬
‫‪ ( sys/kern/sched_bsd.c )1‬زهاى تٌذ تاریخی ترگرفتِ از ‪) BSD‬‬
‫‪ ( sys/kern/sched_ule.c )2‬زهاى تٌذ جذیذ تا هالحظات کارایی در سیستن ّا ٍ پردازًذُ ّای جذیذ)‬
‫تا تَجِ تِ پطتیثاًی ‪ FreeBSD‬از ریسِ‪ّ 4‬ا در سغح ّستِ‪ٍ ،5‬احذ زهاى تٌذی ًیس ریسِ است ٍ اعالػات آى در ساختار‬
‫‪ً struct proc‬گْذاری هی ضَد‪ .‬ریسِ ّای پردازُ ًیس تِ صَرت لیستی از ‪ّ struct thread‬ا تِ آى هلحك ضذُ اًذ‪.‬‬
‫تخطی از ساختار ‪ thread‬هرتَط تِ ًگْذاری اعالػات زهاى تٌذی است کِ تِ صَرت یک اضارُ گر ‪struct‬‬
‫‪ td_sched *td_sched‬تؼریف ضذُ است‪ ( .‬ساختار فَق در پیادُ سازی زهاى تٌذ تؼریف ضذُ است ٍ سایر تخص‬
‫ّای ّستِ تِ آى دسترسی ًذارًذ‪).‬‬
‫‪ ‬نکته‬
‫در ایي پرٍشُ هی تَاًیذ فرض کٌیذ کِ ّر پردازه تٌْا از یک ریسه تطکیل ضذُ است‪.‬‬
‫‪1‬‬
‫‪System call‬‬
‫‪Scheduler‬‬
‫‪3‬‬
‫‪Kernel‬‬
‫‪4‬‬
‫‪Thread‬‬
‫‪5‬‬
‫‪Kernel Threads‬‬
‫‪2‬‬
‫‪ ‬صورت پزوژه‬
‫در ایي لسوت کارّایی کِ ضوا ترای ایي پرٍشُ اًجام هی دّیذ‪ ،‬هؼرفی هی ضًَذ‪:‬‬
‫‪ )1‬تغییر َستٍ‬
‫در ایي لسوت ضوا تایذ سِ هتغیر ‪ slack_mode ٍ deadline ٍ 6WCET‬را تِ ساختار ‪ td_sched‬در هسیر زیر‬
‫تؼریف کٌیذ‪.‬‬
‫‪sys/kern/sched_ule.c‬‬
‫‪ )2‬پیادٌ سازی فراخًاوی سیستمی بٍ صًرت ‪KLD‬‬
‫در ایي لسوت تایذ سِ فراخَاًی سیستوی زیر را تِ صَرت ‪ KLD‬پیادُ سازی کٌیذ‪.‬‬
‫‪ int set_process_slack(pid_t pid, struct timeval wcet , struct timeval‬‬
‫;)‪deadline‬‬
‫;)‪ int get_process_slack(pid_t pid, struct slackconf *slc‬‬
‫;)‪ int disable_process_slack(pid_t pid‬‬
‫تاتغ اٍل یک ریسِ را از ًَع ‪ slack‬هی کٌذ‪ .‬تاتغ دٍم اعالػات یک ریسِ از ًَع ‪ slack‬را در ساختاری از ًَع‬
‫‪ slackconf7‬هی ًَیسذ‪ ٍ .‬تاتغ سَم یک ریسِ را از حالت ‪ slack‬خارج هی کٌذ‪ّ .‬ر ‪ 3‬تاتغ در صَرتی کِ هَفك تِ اًجام‬
‫کار ًطًَذ تایذ همذار ‪ -1‬را ترگرداًٌذ‪.‬‬
‫‪Worst Case Execution Time‬‬
‫{‪struct slackconf‬‬
‫;‪struct timeval WCET‬‬
‫;} ;‪struct timeval deadline‬‬
‫‪6‬‬
‫‪7‬‬
‫‪ )3‬وًشته تًابع کتابخاوٍ ای سطح کاربر برای فراخًاوی سیستمی‬
‫جْت اجرای فراخَاًی ّای سیستوی تؼریف ضذُ در ترًاهِ ّای کارتردی‪ ،‬تایذ کتاتخاًِ هتطکل از یک فایل سرآیٌذ‬
‫(‪ ٍ ) Header‬فایل ‪ Object‬در اختیار ترًاهِ ًَیساى لرار گیرد‪ .‬تِ ػٌَاى ًوًَِ یک ترًاهِ سغح کارتر هی تَاًذ تا کذ‬
‫ریل فراخَاًی سیستوی هَرد ًظرش را اجرا کٌذ‪:‬‬
‫“‪#include “mysyscalls.h‬‬
‫{ )‪int main(int argc, char *argv‬‬
‫;)(‪struct slackconf sc=getSlackModeConfiguration‬‬
‫;)‪printf(“Slack Mode: %d”, sc->WCET‬‬
‫;‪return 0‬‬
‫}‬
‫ایي فایل‪ ،‬در سغح کارتر ًَضتِ هی ضَد ٍ هی تَاًذ ضاهل هتذّای زیر تاضذ‪:‬‬
‫;)‪ setSlackModeConfiguration(...‬‬
‫‪ getSlackModeConfiguration(...);//null in case of not in slack mode‬‬
‫;)‪ disableSlackMode(...‬‬
‫ایي ترًاهِ ‪ ،‬تایذ سرآیٌذی را کِ از فراخَاًی سیستوی استفادُ هی کٌذ‪ ،‬ضویوِ داضتِ تاضذ‪.‬‬
‫‪ ‬تذکزات‬
‫‪ )1‬راٌّوایی ّای تیطتری سر کالس حل توریي خَاّذ ضذ‪.‬‬
‫‪ )2‬فرصت را از دست ًذادُ ٍ پرٍشُ را ّر چِ سریؼتر ضرٍع کٌیذ‪ .‬هَػذ تحَیل آى به هیچ عنوان توذیذ ًخَاّذ‬
‫ضذ‪.‬‬
‫‪ )3‬در صَرت هطاّذُ تملة‪ً ،‬ورُ ّر دٍ گرٍُ صفر خَاّذ ضذ‪.‬‬
‫‪ ‬تحویل پزوژه‬
‫پیادُ سازی خَد را تِ صَرت فایل فطردُ تا ػٌَاى‬
‫‪Project1#StudentNumber1-StudentNumber2‬‬
‫تا تاریخ ‪ 00/2/27‬ساػت ‪ ( 6:00‬صثح ) تِ آدرس ‪ [email protected]‬ارسال کٌیذ‪.‬‬
‫زهاى تحَیل حضَری در پایاى هَػذ تحَیل اػالم خَاّذ ضذ‪.‬‬