صفحه 1:
صفحه 2:
© ارتباط پین فرآیندها
* استفاده ی چند فرایند از BS ناحیه ى مشتركك
# اشتراک منابع
* استفاده ی چند فرایند از یکك منبع مشت رک
صفحه 3:
رصح صموون اش حصزلم۳۴:()
اشتراکک منابع سراسری
#مدیریت تخصیص منابع
تشخیص محل خطاهای برنامه نویسی
صفحه 4:
® 3 2 eed
void echo()
{
chin = getchar();
chout = chin;
putchar(chout) ;
}
صفحه 5:
® (Cine emer, ood
Process Pl Process P2
chin = getchar();
a chin =
getchar();
chout = chin; chout = chin;
putchar(chout) ;
putchar(chout) ;
صفحه 6:
* ف رآیندها از وجود همدیگر با اطلاع نیستند.
* فرآیندها بطور غیر مستقیم از همدیگر اطلاع دارند.
ف رآیندها بطور مستقیم از همدیگر اطلاع دارند.
صفحه 7:
000 AU panacea oOo
#انحصار متقابل
© ۳
نواحى بحرانى
* در هر لحظه از زمان فقط يكك برنامه مى تواند در ناحيه بحرانى باشد.
© 3
بن بست
“رسا
صفحه 8:
])0 Owoery Processes by Gkaricy
صفحه 9:
(Orcas ا ا cael
صفحه 10:
10
CMe grace هک اه raat
انحصار متتابل: در هر لحظه از زمان فقط یک فرآیند می تواند
در احیه بحرانی باشد.
ییشرفت: وقتی که فرآیند دیگری از ناحیه بحرانی استفاده
نمیکنده فرآیند متقاضی نباید با تأخیر روبرو شود.
تاخیر محدود: مدت استفاده از ناحیه بحرانی برای هر فرآیند
محدود است.
صفحه 11:
Outudl Exchusion: GoPivare Opprouckes
#هیچگونه حمایت از طرف 00 یا سخت افزار لازم نيست
صفحه 12:
۰ 32۵6899 ۰ /* PROCESS 1 */
: ‘ : ۰
while (turn != 0) | while (turn != 1)
- /*donothing */ + -/* do nothing */;
7 eritical section*/; ape eritical section*/;
furs Tp turn = 07
8 10 : 1
الف) تلاش اول
صفحه 13:
* انتظار مشغولی
* فرآیند مرتب چک می کند که ببیند می تواند وارد ناحیه بحرانی شود یا نه.
* در این حالت فرآیند تا وقتی که وارد ناحیه بحرانی نشود؛ هیچ کار
مفیدی انجام نمی دهد.
؟ اگر فرآیندی در ناحیه بحرانی خود شکست بخورد فرآیند دیگر تا
ابد مسدود خواهد بود.
" فرآیندها به نوبت از ناحیه بحرانی استفاده می کنند.
13
صفحه 14:
/* PROCESS 1. */
while (flag[0])
_ /* do nothing */;
true; = [1] و۶12
/* critical section*/;
۶129 ]1[ = false; ~
۰
/* PROCESS 0 */
.
while (flag{1])
1 /* do nothing */;
flag[0] = true;
/*critical section*/;
~f£lag{0] = false; —
۰
صفحه 15:
© هر فرآيند مى تواند وضعیت دیگران را ببینده اما نمی تواند آنرا تغییر
دهد.
© وقتی که فرآیند می خواهد وارد ناحیه بحرانی شود؛ ابتدا وضعیت
دیگران را چک می کند.
اگر هیچ ف رآیندی در ناحیه بحرانی نباشده وضعیت خود را به ناحیه
بخرانی تغیبر فی دفلدء
© متاسفانه اين متد انحصار متقابل را تضمین نمی کند.
15
صفحه 16:
16
/* PROCESS 1 */
flag{1) = true;
while (flag[0])
/* do nothing */;
#* critical section*/;
fleg[{1] = false;
/* PROCESS 0 */
flag[0] = true;
while (flag{11)
/* do nothing */;
نش section*/;
flag{0] = false;
صفحه 17:
17
* قبل از چک کردن وضعیت دیگران؛ وضعیت خود را به حالت بحرانی
تغيير دهيم.
* اكر بعد از اين كار ديديم كه فرآيند ديككرى در ناحيه بحرانى است»
فرآيند تا خالى شدن ناحيه بحرانى مسدود مى شود.
© دراين حالت امكان بن بست وجود دارد
* اگر دو فرآیند همزمان بخواهند وارد ناحیه بحرانی شوند » ممكن است هر تا ابد
مسدود بمانند.
صفحه 18:
18
7* PROCESS 1 */
flag(1] = true;
while (flag{0])
{
flag[1] = false;
/*delay */;
flag{1] = true;
1
/* critical section*/;
flag{1] = false;
/* PROCESS 0 */
flaglO0] = true;
while (flag{[1})
{
flag[0] = false;
/sdelay ۶
flag{0] = true;
3
/*eritical section*/;
flag[0] = false;
صفحه 19:
فرآیند یک پرچم را به نشانه تمایل خود به استفاده از ناحیه
بحرانی روشن می کند اما این آمادگی را دارد که در صورت.
لزوم پرچم را خاموش AS
سپس فرآیندهای دیگر را چک می کند. اگر کسی در ناحیه
بحرانی باشد پرچم را خاموش می کند و در زمان دیگری آنرا
روشن می کند.
*اين عمل تا وقتی که وارد ناحیه بحرانی نشود تکرار می گردد.
صفحه 20:
Our Correct Gotutiva
# هر فرآیند یک نوبت برای ناحیه بحرانی می گیرد.
* اگر فرآیند بخواهد وارد ناحیه بحرانی شود ابتدا پرچم خود را
روشن می کند و منتظر نوبتش می ماند.
20
صفحه 21:
21
صفحه 22:
22
Outed Cxctosion: Wardware Gupport
#خاموش کردن وقفه
؟اگر در حین اجرا وقفه را خاموش کنیم؟
* استفاده های مفید وقفه؟
*در سیستمهای چند پردازنده ای؟
صفحه 23:
Outed Cxctosion: Wardware Gupport
© وجود یک دستورالعمل خاص ماشین
7 دستور ماه
boolean test&set (boolean b) {
if (b)
retrun false;
else {
b = true;
return true;}
صفحه 24:
Oe etl RO acne cd
while (true)
{
while (!test&set(a) )
/*do nothing*/
/* critical section*/
a=false;
/*remainder*/
}
صفحه 25:
Outud ا
Exchange دستور ©
void exchange(int register, int
memory) {
int temp;
temp = memory;
memory = register;
register = temp;
صفحه 26:
// a is shared variable initialized to 0
while (true)
{
int ki=1;
while (ki!l= 0)
exchange (ki,a);
/* critical section*/
exchange (ki,a);
/*remainder*/
صفحه 27:
ON Bratz anh De مه هر
ىن
مزايا
* به سيستمهاى جند يردازنده اى قابل اعمال است.
* ساده است.
صفحه 28:
ON Bratz anh De مه هر
صفحه 29:
سمافور یک متغیر است که مقدار طبیعی دارد.
این متغیر نشانگر تعداد فرآیندهایی است که می توانند بدون
انتظار از سمافور استفاده کنند.
#هر عمل اكمدا مقدار سمافور را یک واحد کم می کند.
# هر عمل ا:< مقدار سمافور را یک واحد افزایش میدهد.
صفحه 30:
؟اگر فرآیندی منتظر یک سیگنال باشده تا وقتی که سیگنال
نرسد مسدود می شود.
عملگرهای #مو ۳۳0*< وقفه پذیر نیستند.
© یک صف برای نگهداری از فرآیندهایی که منتظر یک
سمافور هستند» تشکیل می شود.
30
صفحه 31:
Oe mn cannes Gewuphore (Priwiives
(ه orl Greed ل ا سید
int et, {
زور ;} ee Type suru;
P (201 SO)
void (sexupkore {
:ويه موبخا ذ) ووعمصج ه Ox 2 rewove {
SOIR} place provess (P va recdy list;
} )0 > سسوم و
} تصجود و phve his process in {
tate aces
31
صفحه 32:
۱ ۹ 43
42 ۹ 8
sire brary_sewaphore { لجس (birary_sewaphore 2)
مسج {D,(} vk; {
ee Type quew; }; B (s.queve & ewpt())
سرد > (;
هب0۵ لبم 55
1 1
P (sacke == 0( rewove a provess P Prow 5.quee
sanke =O; phe prowess P oa ready bot;
be }
{ }
phice his process سوه و
Loch the proves,
32
صفحه 33:
A issues semWait, later times out
Processor
|__+[e
®
> لطاع رو
Blocked quewe
2
Ready al 2 ۹
1 issues semSignal Signal
Blocked queve
Processor
lc} >|
Ready queue D issues semSignal
7
0
Blocked queue 33
صفحه 34:
مت ور Outud
tock = 0:
Pi Pi
1 6
ad 0
ز() ((اسات _بب۵ بط ١ تن
4 0۵ ۳9 سوه امن ۳
Grr(s); bok =O;
| /* موی ۳
} }
) }
صفحه 35:
_ 38
Queue for Value of
semaphore lock semaphore lock A B 0
11 |
نتسه تس( کم تسد نت مت تست
5 لقا
semWait(lock)
a ها ای
5
صفحه 36:
36
© يكك يا جند توليد كننده داده توليد مى كنند و در بافر قرار مى دهند.
یک مصرف کننده داده ها را از بافر برمی دارد و مصرف مى كند.
© در هر لحظه از زمان فقط یک مصرف کننده یا تولید کننده می توانند به
بافر دسترسی داشته باشند.
* این مساله در برنامه نویسی سیستم و برنامه نویسی کاربردی اتفاق می
اذ
* يكك وب سرور درخواستهای وب ورودی را به فرآیندهای منتظر ارسال می کند
تا سرویس داده شوند.
© اتفاقات مربوط به 60001 (صادره از صفحه کلید و ماوس) توسط سیستم عامل
در یک صف قرار داده می شوند و برنامه ها آنها را مصرف می کنند.
صفحه 37:
37
* جلوكيرى از سرريز بافر
* توليد كننده تعداد زيادى آيتم در بافر قرار مى دهد و آنرا بر مى كند.
© جل وكيرى از قحطى
* توليد كننده يكك آيتم را توليد مى AS
* مصرف کننده یک آيتم را مصرف مى کند.
* مصرف کننده دوباره یک آیتم دیگر را مصرف می کند.
© همزمانی مناسب
؟ انحصار متقابل
ite *
ob
؟ انتظار محدود (جل وگیری از بن بست)
صفحه 38:
:producer
}while (true)
/* produce item v x/
;b[int++] = v
1
صفحه 39:
consumer:
while (true) {
while (in <= out)
/*do nothing */;
w = b[out++];
/* consume item w */
}
صفحه 40:
Note: shaded area indicates portion of buffer that is occupied
Figure 5.8 Infinite Buffer for the Producer/Consumer Problem
40
صفحه 41:
7* program producezconsuner */
semaphore n = 0, = = 1;
void producer()
while (true) {
)ع مسطمعم
senlvait (5);
append();
semSignal(s);
semsignal(n);
0
1
void consuner()
{
while (true) {
semivait(n);
senivait (5);
take()1
semSignal(s);
consume () ;
1
void main()
{
1
parbegin (producer, consumer);
Figure 5.11 A Solution to the Infinite-Buffer Producer/Consumer Problem
‘Using Semaphores 41
صفحه 42:
CE CU
Block on: Unblock on:
Producer: insert in full buffer Consumer: item inserted
Consumer:remove from empty buffer Producer: item removed
|
Ow
0
مت Circular Buffer for the
Producer/Consumer Problem 42
صفحه 43:
2
صفحه 44:
CEN er eat ea OR Cpl eC ene ac (ON a mo
while (true) { while (true) {
/* produce item while (in ==
v*/ out)
while ((in + 1) % /* do
n==out) /* nothing */;
do nothing */; w = b[out];
b[in] = v; out = (out +
in=(in+1)%Nn 1( ۵ ۶
i /* consume
item w */ 8
صفحه 45:
7+ program boundedbuffer */
const int sizeofbuffer = /* buffer size */;
semaphore 9 = 1, n= 0, = sizeofbuffer;
void producer (}
while (true) {
produce ();
senifait (©);
semivait (a);
append();
semSignal(s);
semSignal(n);
+
1
void consumer()
while (true) {
semifait (n) ;
semilait(s);
take();
semSignal(s);
semSignal(©);
consume () ;
1
void main()
{
i
parbegin (producer, consumer);
45
صفحه 46:
#مانیتور یک ماژول نرم افزاری است.
مشخصات اصلی:
" متغیرهای داده ای محلی فقط توسط خود مانیتور قابل دسترسی
هستند.
* فرآیند با صدا زدن یکی از پروسه های مانیتور وارد آن می شود.
؟ در هر لحظه از زمان فقط یک فرآیند در داخل مانیتور در حال اجرا
است.
46
صفحه 47:
47
عو
tering
processes
momtor yattingarea Entrance
۳
MONITOR, 1
eal dats
‘condition varlables
[0۳ 1
mrs
Inkiattatio code
عع
مير
جم
2
2
0
موب
argent queue
صفحه 48:
7 program producerconsumer ¥/
monitor boundedbuffer;
char buffer (1);
int nextin, nextout;
int count;
void producer()
14
cond notfull, notempty; char x;
while (true) {
void append (char x) produce (x) ;
1 لمعووة
if (count == N) cwait(notfull); 1
buffer[nextin] = x7 3
nextin = (nextin + 1) ٩ N; void consuner()
count++; 1
7* one more item in buffer */ char x;
esignal(notempty)? while (true) ¢
i take (x);
void take (char x) consume (x);
4 1
4£ (count == 0) cwait(notempty);
x = buffer{nextout };
nextout = (nextout +1) 8 زلا
count--;
caignal(notfull);
1
void main()
1
parbegin (producer, أز («مصدفممع
nextin = 0; nextout = 0; count = 0;
48
صفحه 49:
و
P wl يك سیکنال میدهد de
3 بر روی یک متغیر شرطو فر
oy - ۱ 4
3 به خاطر همان شرط معلق شده | aes 0 ea
Ro pal بلس و هب
ae نا
ASS 51 pil P Law.
1 52
49
صفحه 50:
50
4
#دراين روش انحصار متقابل بصورت ضمنى وجود دارد.
#اطلاعاته بين فر يندها از طريق ييغام رد و بدل مى شود.
send (destination, message)
receive (source, message)
صفحه 51:
امسر ی(
lessage Contents
51
صفحه 52:
فرستنده و گیرنده می توانند در حين ارسال و دریافت پیغام
مسدود شوند یا مسدود ذ
# حالت اول: مسدود شدن فرستنده و گیرنده در هنگام مبادله
پیغام.
#حالت دوم: فرستنده غیر مسدود و گیرنده مسدود
#حالت سوم: فرستنده و گیرنده غیر مسدود.
52
صفحه 53:
53
© آدرس دهى مستقيم:
* فرستنده آدرس كيرنده را در بيغام قرار مى دهد.
* كيرنده مى تواند از پارامتر فرستنده ی پیام برای اطلاع دادن به
فرستنده استفاده کند.
در گيرنده دو حالت امکان پذیر است:
* كيرنده دقيقاً از قبل مى داند كه جه كسى بيغام مى فرستد.
* كيرنده از هر فرستنده اى داده قبول مى كند .
صفحه 54:
؟ آدرس دهی غير مستقيم:
* صندوق يست
* چهار حالت دارد:
* يكك به یک
* یک به چند
* چند به یک
7" چند به چند
54
صفحه 55:
55 عمسم سيد رف مس ور
صفحه 56:
Outed exchusion using wessuye pussicy
/* program mutualexclusion */
const int n = /* number of processes */;
void P(int i)
{
message msg;
while (true) {
receive (box, msg);
/* critical section */:
send (box, msg);
/* remainder ene
}
void main()
1
create mailbox (box);
send (box, null);
parbegin (P(1), P(2), - - -, Pin));
56
صفحه 57:
‘capacity = /* buffering capacity */ ;
null =/* eupty message */ ;
int i;
void producer ()
{message pasg;
while (true) {
receive (mayproduce, pmsg);
pisg = produce();
send (mayconsume, msg);
1
1
void consumer ()
{me cas
while (true) {
receive (mayconsume, omsg);
consume (emsq)
send (mayproduce, mull);
1
1
void main()
1
create mailbox (mayproduce) ;
create mailbox (mayconsume) ;
for (int i = 1; i < capacity; itt) send (mayproduce, null);
parbegin (producer, consumer);
