با سلام و عرض خیر مقدم ، لطفا قبل از هر کار قوانین سایت را مطالعه فرمائید :چشمک: و پست های خود را فارسی تایپ کنید.
این برنامه را شما باید در محیط Command Prompt اجرا کنید برای این کار در RUN در منو Start ویندوز دستور زیر را تایپ کنید
cmd
در صورتی که از ویندوز های سری 98 استفاده می کنید باید به جای Cmd بنویسید Command
سپس محیط Command Prompt برای شما نمایش داده می شود که بصورت پیش فرض در دایرکتوری My Document شما قرار می گیرد. شما باید برای اجرای دستورات به دایرکتوری Baci بروید. فرض کنید این دایرکتوری را در درایو D قرارداده اید برای رفتن به آن قسمت دستورات زیر را به ترتیب اجرا کنید.
d:
cd\
cd baci
برای اینکه مطمئن شوید درست عمل کرده اید دستور زیر را اجرا کنید
bacc -h
نتیجه این دستور باید help سوئیچ های مختلف Baci باشد.
اگر بازهم مشکلی داشتید مواردی را که دنبال کرده اید در اینجا ذکر کنید تا بشه مشکل شما را حل کرد.
-----------------------------------------------------------------
پ.ن : یکی از دوستان طریقه پیاده سازی الگوریتم Deadlock و آرایشگر را خواستند و برای اینکه سایر دوستان هم استفاده کنند آنها را در اینجا می نویسم.
طریقه شبیه سازی بن بست :
// * * * * * * * * * * * * Dead Lock * * * * * * * * * * * * *
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
int flag[2];
void ProcessA(){
flag[0]=1;
while(flag[1]) cout<<"Do Nothing In Process A\n";
cout<<"Enter In Critical Section Process A\n";
flag[0]= 0;
}
void ProcessB(){;
flag[1]= 1;
while (flag[0])cout<<"Do Nothing In Process B\n";
cout<<"Enter In Critical Section Process B\n";
flag[1]= 0;
}
void main(){
cobegin{
ProcessA;
ProcessB;
}
}
طریقه تصحیح بن بست :
// * * * * * * * * * * Fix Dead Lock * * * * * * * * * * * * *
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
int flag[2];
void ProcessA(){
while (flag[1]){
flag[0]= 0;
cout<<"Delay For Short Time In Process B\n";
flag[0]= 1;
}
cout<<"Enter In Critical Section Process A\n";
flag[0]= 0;
}
void ProcessB(){
while (flag[0]){
flag[1]= 0;
cout<<"Delay For Short Time In ProcessB\n";
flag[1]= 1;
}
cout<<"Enter In Critical Section Process B\n";
flag[1]= 0;
}
void main(){
cobegin{
ProcessA();
ProcessB();
}
}
الگوریتم آرایشگر منصف :
// * * * * * * * * * * Barbery With FairFul Barber * * * * * * * * *
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
int loop=0;
int queue[20];
semaphore max_capacity;
semaphore sofa;
semaphore barber_chair,coord;
semaphore mutex1,mutex2;
semaphore cust_ready,leave_b_chair,payment,receipt;
semaphore finished[50];
int count;
void Customer(){
int custnr;
wait(max_capacity);
cout<<"Customer Enter The Barbery\n";
wait(mutex1);
count++;
custnr= count;
signal(mutex1);
wait(sofa);
cout<<"Customer Sitting On Bench\n";
wait(barber_chair);
cout<<"Customer Getting Up From Bench\n";
signal(sofa);
cout<<"Customer Sitting On The Barber Chair\n";
wait(mutex2);
if (loop<19) queue[loop++]=custnr;
signal(cust_ready);
signal(mutex2);
wait(finished[custnr]);
cout<<"Customer Leave The Barber Chair\n";
signal(leave_b_chair);
cout<<"Customer Pay The Payment\n";
signal(payment);
wait(receipt);
cout<<"Customer Leave The Shop\n";
signal(max_capacity);
}
void Barber(){
int b_cust;
do{
wait(cust_ready);
wait(mutex2);
if (loop>0){
for(b_cust=0;b_cust<loop;b_cust++){
queue[b_cust-1]= queue[b_cust];
b_cust= b_cust+1;
loop--;
}
}
signal(mutex2);
wait(coord);
cout<<"Baraber Is Cut The Hair\n";
signal(coord);
signal(finished[b_cust]);
wait(leave_b_chair);
signal(barber_chair);
}while(1);
}
void Cashier(){
do{
wait(payment);
wait(coord);
cout<<"Cashier Accept The Payment\n";
signal(coord);
signal(receipt);
}while(1);
}
void main(){
int i;
initialsem(max_capacity,20);
initialsem(sofa,4);
initialsem(barber_chair,3);
initialsem(coord,3);
initialsem(mutex1,1);
initialsem(mutex2,1);
initialsem(cust_ready,0);
initialsem(leave_b_chair,0);
initialsem(payment,0);
initialsem(receipt,0);
for(i=0;i<50;i++) initialsem(finished[i],0);
cobegin{
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();
Barber();
Barber();
Barber();
Cashier();
}
}
الگوریتم آرایشگر غیر منصف :
// * * * * * * Barbery With Non FairFul Barber * * * * * * * *
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
semaphore max_capacity;
semaphore sofa;
semaphore barber_chair,coord;
semaphore cust_ready,finished,leave_b_chair,payment,receipt;
void Customer(){
wait(max_capacity);
cout<<"Customer Enter The Barbery\n";
wait(sofa);
cout<<"Customer Sitting On Bench\n";
wait(barber_chair);
cout<<"Customer Getting Up From Bench\n";
signal(sofa);
cout<<"Customer Sitting On The Barber Chair\n";
signal(cust_ready);
wait(finished);
cout<<"Customer Leave The Barber Chair\n";
signal(leave_b_chair);
cout<<"Customer Pay The Payment\n";
signal(payment);
wait(receipt);
cout<<"Customer Leave The Shop\n";
signal(max_capacity);
}
void Barber(){
do{
wait(cust_ready);
wait(coord);
cout<<"Baraber Is Cut The Hair\n";
signal(coord);
signal(finished);
wait(leave_b_chair);
signal(barber_chair);
}while(1);
}
void Cashier(){;
do{
wait(payment);
wait(coord);
cout<<"Cashier Accept The Payment\n";
signal(coord);
signal(receipt);
}while(1);
}
void main(){
initialsem(max_capacity,20);
initialsem(sofa,4);
initialsem(barber_chair,3);
initialsem(coord,3);
initialsem(cust_ready,0);
initialsem(finished,0);
initialsem(leave_b_chair,0);
initialsem(payment,0);
initialsem(receipt,0);
cobegin{
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();Customer();Customer();Custom er();Customer();
Customer();Customer();
Barber();
Barber();
Barber();
Cashier();
}
}
هر چند اعتقاد من بر این است که انجام این تمرینها باعث درک صحیحی از سیستم عامل می شود ، و بهتر است دوستان سعی کنند خودشان این کد ها را پیاده سازی و اجرا نمایند.:لبخندساده: