تمرین دوم درس سیستم های عامل
تاریخ انتشار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
© Copyright 2026 Paperzz