os-HW2.pdf

‫تمرین دوم درس سیستم های عامل‬
‫تاریخ انتشار‪09/4/42 :‬‬
‫مهلت تحویل‪09/3/09 :‬‬
‫ترم دوم سال تحصیلی ‪0330-0309‬‬
‫‪synchronization‬‬
‫‪1‬‬
‫تمریه دوم سیستم عامل‪ -‬اردیبهشت ‪1390‬‬
‫دس ایي توشیي قشاس است ثیطتش ثب الگَسیتن ّبی ّوگبم سبصی فشایٌذّب ٍ ساُ ّبی سفغ ًبسبصگبسی ٍ الجتِ پیبدُ سبصی‬
‫ایي هفبّین ثب استفبدُ اص سوبفَس دس یک صثبى ثشًبهِ ًَیسی آضٌب ضَیذ‪.‬‬
‫قسمت اول‪:‬‬
‫خبًَادُ ی ػلَی دس لَاسبى ‪ٍ$‬اقغ دس ضوبل ضشق تْشاى‪ #‬یک ثبؽ داسًذ‪ .‬ثبؽ پش اص دسخت ّبی هیَُ است‪ .‬دس ایي فصل‬
‫سبل دسخت ّبی گَجِ سجض ثِ ثبس ًطستٌذ ٍ ایي جوؼِ ّوِی خبًَادُ ثشای چیذى گَجِ سجضّب ثِ ثبؽ سقتٌذ‪.‬‬
‫ثشای چیذى ثبس ّش دسخت آقبی ػلَی ثبالی دسخت هی سٍد ٍ ضشٍع ثِ چیذى هیَُ ّب هیکٌذ‪ ،‬پبییي دسخت ‪ 10‬کبسِ‬
‫گزاضتٌذ کِ آقبی ػلَی گَجِ سجضّبی چیذُ ضذُ سا دس آًْب هیسیضد‪ ،‬اص طشف دیگش پسش آقبی ػلَی ثِ صَست هَاصی‬
‫هطغَل خبلی کشدى کبسِ ّبی گَجِ سجض است‪.‬‬
‫حبال هسئلِ ایي است کِ ثِ خبطش دستشسی هَاصی ٍ ّوضهبى آقبی ػلَی ٍ پسشش ثِ کبسِ ّبی گَجِ سجض هوکي‬
‫است هطکالتی پیص ثیبیذ‪ ،‬هثال هوکي است آقبی ػلَی دسحبلیکِ ّش ‪ 10‬کبسِ پش اًذ‪ ،‬ثبص ثِ چیذى گَجِ سجض اداهِ‬
‫دّذ ٍ اص طشف دیگش پسشش ّن ٍقتی کبسِ ّب خبلی اًذ هوکي است کبسِ ای سا ثشداسد‪.‬‬
‫یؼٌی ثِ خبطش ایٌکِ ّش دٍی آًْب ّوضهبى ثِ کبسِ ّب دستشسی داسًذ ٍ هی تَاًٌذ ٍضؼیت آًْب سا تغییش ثذٌّذ‪ ،‬دس‬
‫اصطالح حبلت هسبثقِ‪ 2‬پیص هی آیذ‪.‬‬
‫‪Race condition‬‬
‫‪2‬‬
‫‪2‬‬
1390 ‫ اردیبهشت‬-‫تمریه دوم سیستم عامل‬
... ٍ ‫حبال کبسی کِ هب ثبیذ ثکٌین ایي است کِ ثب داًطی کِ دسثبسُ فشایٌذ ّبی ّوکبس ٍ ًبحیِ ثرشاًی ٍ سوبفَس ّب‬
.‫ جلَی دستشسی ّوضهبى آًْب ثِ کبسِ ّب سا ثگیشین‬،‫داسین‬
ٍ produce ‫ ثشای تست جَاة ضوب دٍ هتذ‬.‫ صیش ثٌَیسیذ‬3‫ثشای ایي توشیي ثبیذ یک صیش کالس ثشای کالسِ هجشد‬
.‫ اص سیسِ ّبی هختلف صذا صدُ خَاٌّذ ضذ‬consume
public abstract class AbstractBowlSequence {
private final int size;
public AbstractBowlSequence (int size){
this.size=size;
}
public int getSize() {
return size;
}
abstract void produce(int x);
abstract int consume();
}
.‫ داسد‬،‫ثشای هثبل کالس صیش هی تَاًذ جَاثی ثبضذ کِ اضکالت ثسیبسی ّوبًٌذ اهکبى ٍقَع ثي ثست‬
public class BowlSequence extends AbstractBowlSequence{
private
private
private
private
private
static final int[] bowls = null;
int fullBowls;
int fullBowl;
int tail;
int head;
public BowlSequence(int size) {
super(size);
}
@Override
public int consume() {
while(fullBowl== 0){
;//do nothing
}
int temp=bowls[head++];
fullBowl--;
return temp;
}
@Override
public void produce(int x) {
3
Abstract class
3
‫تمریه دوم سیستم عامل‪ -‬اردیبهشت ‪1390‬‬
‫{))(‪while(fullBowls==getSize‬‬
‫‪;//do nothing‬‬
‫}‬
‫;‪bowls[tail--]=x‬‬
‫;‪fullBowl++‬‬
‫}‬
‫}‬
‫ساُ حل ضوب ثبیذ طَسی ثبضذ کِ‬
‫‪ ‬ثشًبهِ طی اجشا دچبس ثي ثست ًطَد‪.‬‬
‫‪4‬‬
‫‪ ‬تشتیجی کِ هتذ ‪ consume‬اػذاد سا ثش هی گشداًذ ثب تشتیت دادُ ضذُ تَسط هتذ ‪ produce‬یکسبى ثبضذ‪.‬‬
‫قسمت دوم‪:‬‬
‫ثِ تبصگی هطلغ ضذین کِ هسئَلیي هجوَػِ ی تفشیری ٍ پیست اسکی تَچبل‪ ،‬اهکبى جذیذی ثشای ًقل ٍ اًتقبل‬
‫گشدضگشاى فشاّن کشدُ اًذ تب گشدضگشاى ثتَاًٌذ اص جبّبی هختلف ایي هجَػِ دیذى ثکٌٌذ‪.‬خَضجختبًِ ثِ دلیل سٌتی‬
‫ثَدى ضکل ظبّشی ایي اهکبى جذیذ ‪$‬کِ فقط ًیبص ثِ یک طٌبة داسد‪ً ٍ #‬یض ثبصدُ ٍ سشػت ثبالی اى ًسجت ثِ اهکبًبت‬
‫قجلی هبًٌذ اتَثَس ٍ تلِ کبثیي‪ ،‬هَسد استقجبل خَثی اص طشف گشدضگشاى ایي هجوَػِ ٍاقغ ضذُ است‪ .‬هبًٌذ ضکل صیش‬
‫گشدضگشاى هی تَاًٌذ اص طٌبة هسترکن هتصل ضذُ ثِ دٍ ًقطِ اص ایي هجوَػِ ی تفشیری استفبدُ کٌٌذ ٍ اص یک قلِ‬
‫ثِ قلِ ای دیگش ثشًٍذ ٍ دس حیي هٌتقل ضذى اص لزت سش سفتي ًیض ثْشُهٌذ ضًَذ‪.‬‬
‫‪2‬‬
‫‪1‬‬
‫ایي طٌبة چٌذ هرذٍدیت داسد‪:‬‬
‫‪ ‬دس ّش لرظِ گشدضگشاى فقط دس یک جْت اهکبى سشخَسدى سٍی طٌبة سا داسًذ‪ .‬پس دس صَستی کِ‬
‫گشدضگشاًی اص ّش دٍ قلِ خَاستبس استفبدُ اص ایي طٌبة ثبضٌذ ثبیذ یک اص گشٍُ ّب هٌتظش استفبدُ گشٍُ هقبثل‬
‫ثوبًٌذ تب جْت استفبدُ ػَض ضَد‪.‬‬
‫‪deadlock‬‬
‫‪4‬‬
‫‪4‬‬
‫تمریه دوم سیستم عامل‪ -‬اردیبهشت ‪1390‬‬
‫‪ ‬اگش ٍصى افشاد سٍی طٌبة کوتش اص هقذاس هؼیٌی ‪ٍ$ #L$‬اثستِ ثِ جٌس طٌبة‪ #‬ثبضذ‪ ،‬قَسی سٍی طٌبة ایجبد‬
‫ًوی ضَد تب گشدضگشاى ثتَاًٌذ سٍی اى سش ثخَسًذ!‬
‫‪ ‬اگش ٍصى افشاد سٍی طٌبة ثیص اص حذ هؼیٌی )‪ (H‬ثبضذ‪ ،‬احتوبل پبسُ ضذى طٌبة ٍ ثِ خطش افتبدى جبى‬
‫گشدضگشاى هرتشم ٍجَد داسد‪.‬‬
‫ایي هرذٍدیت ّب ثبػث ضذُ اًذ کِ هسئَلیي ثشای حفظ جبى گشدضگشاى ٍ ًیض جلَگیشی اص تصبدف افشاد سٍی طٌبة اص‬
‫هب دسخَاست کوک کٌٌذ‪ .‬پس ضوب ثبیذ ثشًبهِ ثٌَیسیذ تب ثتَاًذ استفبدُ ی گشدضگشاى سا اص ایي طٌبة هذیشیت کٌذ ٍ‬
‫اهٌیت جبًی آًْب سا فشاّن ًوبیذ‪.‬‬
‫ثِ ػٌَاى ٍسٍدی ضوب ثبیذ خَدتبى ثِ صَست تصبدفی گشدضگشاًی‪$‬کِ ّش کذام یک سیسِ هستقل هی ثبضٌذ‪ #‬دس ّش دٍ‬
‫طشف ثسبصیذ تب آًْب دسخَاست استفبدُ اص ایي طٌبة سا صبدس کٌٌذ‪ .‬ثبیذ تَجِ کٌیذ کِ ٍصى گشدضگشاى ثِ ّوشاُ قلِ ای‬
‫کِ دس اى ٍاقؼٌذ ثبیذ ثِ صَست کبهال تصبدفی اًتخبة ضَد‪ .‬سپس ثب سػبیت سِ ضشط ثیبى ضذُ ثشای طٌبة هَسد ًظش‬
‫اجبصُ ی استفبدُ اص آى سا ثِ ّش گشدضگش ثذّیذ یب ایٌکِ اص اًْب ثخَاّیذ کِ هٌتظش استفبدُ اص طٌبة ثوبًٌذ‪.‬‬
‫ثشای پیبدُ سبصی جَاة ایي هسئلِ هی تَاًیذ فشض کٌیذ کِ‪:‬‬
‫‪ ‬اًتقبل ّش گشدضگش اص یک طشف طٌبة تب طشف دیگش هستقل اص ٍصًص پٌج ثبًیِ طَل هی کطذ‪.‬‬
‫‪ ‬هتغیش ‪ L‬ثشاثش ‪ 00‬کیلَ گشم ٍ هقذاس ‪ H‬ثشاثش ثب ‪ 300‬کیلَ گشم ٍ گشدضگشاى ٍصًی هب ثیي ‪ 40‬تب ‪ 140‬کیلَ هی‬
‫تَاًٌذ داضتِ ثبضٌذ‪.‬‬
‫پس ثش ضوبست کِ ثشًبهِ ای ثِ صثبى جبٍا ثٌَیسیذ کِ خَاستِ ی هسئَلیي ایي هجوَػِ ی تفشیری سا ثشاٍسدُ‬
‫کٌذ‪ٍ.‬اضح است کِ ثشًبهِ ی ضوب ثبیذ‪:‬‬
‫‪ ‬اص ثشٍص ثي ثست جلَگیشی کٌذ‪.‬‬
‫‪ ‬هسبفشاى دس ّش طشف ثب ػذالت سشٍیس دّی ضًَذ‪ٍ$ .‬صى افشاد الَیتی ثشای استفبدُ اص طٌبة ایجبد ًوی کٌذ‪#‬‬
‫‪ o‬پیبدُ سبصی جلَگیشی اص قرطی‪ 5‬دسخَاست گشدضگشاى دٍ قلِ ًوشُ ی اضبفی هرسَة هی ضَد‪.‬‬
‫‪ ‬دس صَستی کِ دسخَاست هذاٍم ٍ تَضیغ ضذُ ی گشدضگشاى دس یک قلِ ثبػث ضَد کِ ّیچ‬
‫ٍقت جْت استفبدُ اص طٌبة ػَض ًطَد گَیین گشدضگشاى ٍاقغ دس قلِ ی دیگش دچبس قرطی‬
‫‪starvation‬‬
‫‪5‬‬
‫‪5‬‬
‫تمریه دوم سیستم عامل‪ -‬اردیبهشت ‪1390‬‬
‫ضذُ اًذ‪$ .‬پیبدُ سبصی ّبیی کِ اص ایي اتفبق اجتٌبة کٌٌذ ًوشُ ی اضبفی کست خَاٌّذ‬
‫کشد‪#.‬‬
‫‪ ‬اهکبى استفبدُ ی ّوضهبى چٌذ گشدضگش ‪ $‬ثب سػبیت حذ پبییي ٍ ثبالی ٍصًی‪ #‬ثِ ضشط ّن جْت ثَدًطبى فشاّن‬
‫ثبضذ‪.‬‬
‫‪ ‬اجبصُ ٍسٍد هسبفش جذیذ ثِ طٌبة‪ٍ ،‬قتی کِ اص قجل هسبفش دیگشی حشکت سا دس جْت هخبلف ضشٍع کشدُ ثبضذ‪،‬‬
‫ًذّذ‪.‬‬
‫‪ ‬گضاسضی اص اػوبل اًجبم ضذُ دس حیي اجشای ثشًبهِ ثبیذ دس خشٍجی چبح ضَد‪.‬‬
‫‪ ‬ثشای خشٍجی اص قبلجْبی صیش استفبدُ کٌیذ ٍ ّش اتفبق سا دس یک سطش ثِ صَست هقبثل چبح کٌیذ‪:‬‬
‫‪ ‬دسخَاست استفبدُ اص طٌبة‪:‬‬
‫>‪<Time> <Tourist name> Wants <position> <weight> <result‬‬
‫‪Result:‬‬
‫‪ Enter‬‬
‫‪ Wait‬‬
‫‪ ‬اتوبم سش خَسدى اص طٌبة‪:‬‬
‫>‪<Time> <Tourist name> Exit <position‬‬
‫‪ ‬ضشٍع استفبدُ اص طٌبة پس اص اًتظبس‬
‫>‪<Time> <Tourist name> Enter <position‬‬
‫‪ 2‬یب ‪Position: 1‬‬
‫}‪Tourist name: String of {0..9},{a..z},{A..Z‬‬
‫مثال خروجی‪:‬‬
‫آیسبى دس ثبًیِ ی ‪ 1‬دس خَاست استفبدُ اص طٌبة سا دس‬
‫قلِ ی دٍ هی دّذ ٍ ٍصًص ‪ 55‬کیلَ هی ثبضذ‪.‬‬
‫ًتیجِ‪ :‬دس ثبًیِ ی ‪ 1‬اص آیسبى خَاستِ ضذُ است‬
‫هٌتظش کس دیگشی ثشای فشاّن ضذى حذ پبییي ٍصى‬
‫‪6‬‬
‫‪1 Aysan wants 2 55 Wait‬‬
‫تمریه دوم سیستم عامل‪ -‬اردیبهشت ‪1390‬‬
‫ثوبًذ‪.‬‬
‫یبضبس دس ثبًیِ ‪ 2‬دسخَاست استفبدُ اص طٌبة سا دس قلِ‬
‫یک هیذّذ ٍ ٍصًص ‪ 95‬کیلَ هی ثبضذ‪.‬‬
‫‪2 Yashar wants 1 95 Enter‬‬
‫ًتیجِ‪ :‬یبضبس دس ثبًیِ ‪ ،2‬اص طشف قلِ ‪ٍ 1‬اسد طٌبة هی‬
‫ضَد‪.‬‬
‫سَدا دس ثبًیِ ‪ 3‬دس خَاست استفبدُ اص طٌبة سا دس قلِ‬
‫ی دٍ هی دّذ ٍ ٍصًص ‪ 73‬کیلَ هی ثبضذ‪.‬‬
‫‪3 Sevda wants 2 73 Wait‬‬
‫ًتیجِ‪ :‬دس ثبًیِ ‪ 3‬اص سَدا خَاستِ ضذُ است کِ هٌتظش‬
‫ثوبًذ تب جْت کبسثشی طٌبة ػَض ضَد‬
‫دس ثبًیِ ‪ 5‬ثبهطبد ثب ٍصى ‪ 174‬کیلَ گشم دسخَاست‬
‫استفبدُ اص طٌبة سا دس قلِ ‪ 2‬هی دّذ‪.‬‬
‫‪5 Bamshad wants 2 174 Wait‬‬
‫ًتیجِ‪ :‬دس ثبًیِ‪ 5‬اص ثبهطبد خَاستِ هی ضَد کِ هٌتظش‬
‫ثوبًذ تب جْت کبسثشی طٌبة ػَض ضَد‪.‬‬
‫دس ثبًیِ ی ّفت یبضبس ثِ هقصذ یؼٌی قلِ ‪ 2‬هی سسذ‪.‬‬
‫‪7 Yashar Exit 2‬‬
‫دس ثبًیِ ی ‪ 7‬آیسبى پس اص اًتظبسی چٌذ ثبًیِ ای دس‬
‫قلِ ی ‪ 2‬اجبصُ ی استفبدُ اص طٌبة سا کست هی کٌذ‪.‬‬
‫‪7 Aysan Enter 2‬‬
‫دس ثبًیِ ی ‪ 7‬سَدا پس اص اًتظبسی چٌذ ثبًیِ ای دس‬
‫قلِ ی ‪ 2‬اجبصُ ی استفبدُ اص طٌبة سا کست هی کٌذ‪.‬‬
‫‪7 Sevda Enter 2‬‬
‫ثِ دلیل هرذٍدیت ٍصى ثبهطبد ثبیذ دس قلِ ‪ 2‬هٌتظش‬
‫ثوبًذ‬
‫دس ثبًیِ ی ‪ 12‬آیسبى ثِ هقصذ یؼٌی قلِ ‪ 1‬هی سسذ‪.‬‬
‫‪12 Aysan Exit 1‬‬
‫دس ثبًیِ ی ‪ 12‬سَدا ثِ هقصذ یؼٌی قلِ ‪ 1‬هی سسذ‪.‬‬
‫‪12 Sevda Exit 1‬‬
‫دس ثبًیِ ی ‪ 12‬ثبهطبد پس اص اًتظبسی چٌذ ثبًیِ ای دس‬
‫قلِ ی ‪ 2‬اجبصُ ی استفبدُ اص طٌبة سا کست هی کٌذ‪.‬‬
‫دس ثبًیِ ی‪ 17‬ثبهطبد ثِ هقصذ یؼٌی قلِ ‪ 1‬هی سسذ‪.‬‬
‫‪7‬‬
‫‪12 Bamshad Enter 2‬‬
‫‪17 Bamshad Exit 1‬‬
‫تمریه دوم سیستم عامل‪ -‬اردیبهشت ‪1390‬‬
‫خالصه‪:‬‬
‫‪ ‬تشتیت ایي سطش ّب دس خشٍجی ّن هْن است‪.‬‬
‫‪1 Aysan wants 2 55 Wait‬‬
‫‪2 Yashar wants 1 95 Enter‬‬
‫‪3 Sevda wants 2 73 Wait‬‬
‫‪5 Bamshad wants 2 174 Wait‬‬
‫‪7 Yashar Exit 2‬‬
‫‪7 Aysan Enter 2‬‬
‫‪7 Sevda Enter 2‬‬
‫‪12 Aysan Exit 1‬‬
‫‪12 Sevda Exit 1‬‬
‫‪12 Bamshad Enter 2‬‬
‫‪17 Bamshad Exit 1‬‬
‫‪ ‬ایي توشیي سا ثِ صَست فردی اًجبم هیدّیذ‪.‬‬
‫‪ ‬صثبى ثشًبهِ ًَیسی ایي توشیي‪ ،‬جبٍا است‪ .‬دٍستبًی کِ ثِ ایي صثبى هسلط ًیستٌذ ٍ اسوطبى سا دس لیست‬
‫ًَضتٌذ‪ ،‬هی تَاًٌذ توشیي سا ثب صثبى ‪ C‬پیبدُ سبصی کٌٌذ‪.‬‬
‫‪ ‬استفبدُ اص سوبفَس جبٍا‪ 6‬جبیض است‪.‬‬
‫‪ً ‬رَُ ی پیبدُ سبصی ّش قسوت اص ثشًبهِ سٍ ثِ صَست هجضا تَضیح دّیذ‪ ٍ ،‬آى سا قبلت یک فبیل ‪ PDF‬دس کٌبس‬
‫کذ پیبدُ سبصی ضذُ‪ ،‬دس پَضِ ی توشیٌتبى قشاس دّیذ‪.‬‬
‫‪ ‬اگش دس ًَضتي توشیي اص هٌبثغ ایٌتشًتی ٍ غیش ایٌتشًتی کوک گشفتیذ‪ ،‬لطفب هٌبثغ سا رکش کٌیذ‪.‬‬
‫‪java.util.concurrent.Semaphore‬‬
‫‪8‬‬
‫‪6‬‬
‫تمریه دوم سیستم عامل‪ -‬اردیبهشت ‪1390‬‬
‫‪ ‬دس صَستی کِ ّش سَال یب اثْبهی دس صَست توشیي داسیذ‪ ،‬حتوب سَاالت خَد سا دس گشٍُ دسس هطشح کٌیذ‪.‬‬
‫‪ ‬تقلت ٍ کپی کشدى ٍ ‪ ،...‬دس دسجِ ی اٍل ثِ ضشس خَد کسی است کِ تقلت هیکٌذ‪ .‬پس اکیذاً تَصیِ هیضَد‬
‫اص چٌیي اػوبلی ثپشّیضیذ! دس صَست هطبّذُی تقلت‪ً ،‬وشُی دٍ طشف صفش خَاّذ ضذ‪.‬‬
‫‪ ‬هْلت اسسبل ایي توشیي سٍص سِ ضٌجِ ‪ /10‬خشداد‪ 00/‬هی ثبضذ ٍ ثِ ػلت هْلت کن ثبقیوبًذُ تب پبیبى تشم‪ ،‬ثِ‬
‫ّیچ ٍجِ تمذیذ نخواهذ شذ‪ .‬پس توشیي ّبی خَد سا دس فبیل فطشدُ ای ثِ ًبم ‪HW2-#studentNumber‬‬
‫تب سِ ضٌجِ ضت ثِ آدسس ‪ [email protected]‬ثفشستیذ‪.‬‬
‫‪ ‬ثبثت ّش سٍص تأخیش ‪ "10‬اص ًوشُی توشیي کسش خَاّذ ضذ‪.‬‬
‫‪‬‬
‫ایي توشیي تحویل حضوری خَاّذ داضت کِ صهبى آى هتؼبقجبً اػالم خَاّذ ضذ‪.‬‬
‫خاوه اي از وو بباید ساخت اما ویك خشت‬
‫تا شود هر لحظه اش پربار چون اردیبهشت‬
‫‪7‬‬
‫موفق باشید!‬
‫شعر از هورمزد یعقوبی نژاد‬
‫‪9‬‬
‫‪7‬‬