# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها >  الگوریتمهایی برای حل ناحیه بحرانی یا الگوریتم سمافور یا....

## نغمه

در کتاب تانن بام برای درس سیستم عامل یک سری الگوریتمها گفته شده مثلا الگوریتمهایی برای حل ناحیه بحرانی یا الگوریتم سمافور یا....  کسی هست که تا به حال این الگوریتمها را کد و اجرا کرده باشه؟

----------


## whitehat

سوال شما چیه ؟
برای شبیه سازی این کد ها می توانید از Baci استفاده کنید.

----------


## نغمه

> سوال شما چیه ؟
> برای شبیه سازی این کد ها می توانید از Baci استفاده کنید.


میشه بیشتر راهنمایی کنید

----------


## whitehat

شما با استفاده از Baci یا (Ben-Ari Concurrent Interpreter) می توانید یک محیط Concurrent برای اجرای کد های موجود در کتابهای سیستم عامل داشته باشید. در این محیط شما قادر به تعریف سمافور، مانیتور و انواع قفل ها خواهید بود. کافی است شما این الگوریتم ها (به صورت کد پاسکال یا C) را در این محیط وارد کرده و اجرای همزمان آنها را ببینید و مفاهیم سیستم عامل مانند mutual exclusion , Deadlock, Semaphore,Monitor را تست و تمرین کنید و به صورت عملی ببینید.برای اطلاعات بیشتر به لینک های زیر مراجعه کنید
http://www.mines.edu/fs_home/tcamp/baci
http://www.cs.helsinki.fi/u/kerola/r...I/baci-pas.pdf
موفق باشید

----------


## نغمه

برای اجرای این الگوریتمها نیاز به داشتن کد کامل سیستم عامل وتعبیه این الگوریتمها درون آن نیست؟
baci  را باید روی کامپیوترم نصب کنم؟

----------


## whitehat

> برای اجرای این الگوریتمها نیاز به داشتن کد کامل سیستم عامل وتعبیه این الگوریتمها درون آن نیست؟
> baci  را باید روی کامپیوترم نصب کنم؟


این محیط یک محیط شبیه سازی الگوریتم های همزمان است کافی است الگوریتم را مثلا در قالب 2 تابع نوشته و در قسمت ناحیه بحرانی پیغامی را چاپ کنید و بعد آنرا اجرا کرده و نتیجه را ببینید.
آخرین نسخه ای که من با آن کار می کردم تحت داس بود و نیازی به نصب نداشت فقط کافی بود آنرا اجرا کنید و کد ها را در آن تایپ کنید.
این نرم افزار را دانلود کنید و از آن استفاده کنید ، اگر مشکلی داشتید سوال کنید
موفق باشید

----------


## نغمه

من از home page BACI  ،   اBACI DOS executables را دانلود کردم ولی هیچ فایل اجرایی نداشت تا من بتونم کامپایلر baci را نصب کنم. ضننا win xp هم دارم .
مشکل کجاست؟
اگر درنهایت بتونم نصبش کنم روی همین محیط می تونم کدهای مورد نیاز سیستم عامل را بنویسم و اجرا کنم؟

----------


## whitehat

این برنامه تحت داس اجرا میشه، براتون ضمیمه کردم.



> اگر درنهایت بتونم نصبش کنم روی همین محیط می تونم کدهای مورد نیاز سیستم عامل را بنویسم و اجرا کنم؟


بله می توانید، کافیه کد مورد نظر را در قالب دو رویه بنویسید و آنها را Concurrent اجرا کنید

----------


## نغمه

> این برنامه تحت داس اجرا میشه، براتون ضمیمه کردم.
> 
> بله می توانید، کافیه کد مورد نظر را در قالب دو رویه بنویسید و آنها را Concurrent اجرا کنید



از فایل ضمیمه خیلی ممنون
چه جوری باید نصبش کنم؟
بعد از نصب باید با زبان c کد بنویسم؟
C-- چیست؟
محیط baci  تحت ویندوزش هم هست؟

----------


## whitehat

نصب لازم نیست برنامه خودتان را بنویسید و براساس اینکه C (فایل bacc) یا پاسکال (فایل bapas) است را اجرا کنید و مسیر فایلی که خود نوشتید را به آن بدهید. یک نمونه از الگوریتم Deker را که نوشتم اینجا می گذارم .

 // * * * * * * * * * *  Dekker Algorithm * * * * * * * * * * *
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
int flag[2];
int turn;

void P_0(){
  do
  {
     flag[0]=1;
       while(flag[1])
       {
     if(turn==1)
      {
       flag[0]=0;
        while(turn==1);
       flag[0]=1;
      }
    }
       cout<<"Start Critical Section In Procedure P_0\n";
       turn=1;
       flag[0]=0;
       cout<<"Reminder In Procedure P_0 \n";
  }while(1);
 }
void P_1(){
 do
  {
     flag[1]=1;
       while(flag[0])
       {
     if(turn==0)
      {
       flag[1]=0;
       while(turn==0);
       flag[1]=1;
      }
       }
       cout<<"Start Critical Section In Procedure P_1\n";
       turn=0;
       flag[1]=0;
       cout<<"Reminder In Procedure P_1 \n";
  }while(1);
 }
void main(){
 flag[0]=0;
 flag[1]=0;
 turn=1;
 cobegin{
 P_0();
 P_1();
 }
}

----------


## نغمه

یعنی مثلا من این کد مربوط به الگوریتم دکر را در محیط borlan c بنویسم و بعد فایل اجراییش را در bacc اجرا کنم؟

یک محیط شبیه سازی مثل همین baci هست که تحت ویندوز بشه باهاش کار کرد؟

با زبان دلفی هم میشه این کدها را نوشت و اجرا کرد؟

----------


## whitehat

> یعنی مثلا من این کد مربوط به الگوریتم دکر را در محیط borlan c بنویسم و بعد فایل اجراییش را در bacc اجرا کنم؟


بله



> یک محیط شبیه سازی مثل همین baci هست که تحت ویندوز بشه باهاش کار کرد؟


من سراغ ندارم



> با زبان دلفی هم میشه این کدها را نوشت و اجرا کرد؟


باید پاسکال استاندارد باشه

----------


## نغمه

از راهنماییتون خیلی ممنونم 
ضمننا احتمالا محیط تحت ویندوزی هم وجود داره چون من شنیدم که ازدلفی هم برای این منظور میشه استفاده کرد

----------


## نغمه

من کد زیر را برای تناوب قطعی نوشتم نمی دونم چه جوری باید تو baci اجرا کنم؟
#include <stdio.h>
#include <conio.h>
int main()
{
int turn=0;
while (true){
while(turn==0){
printf("jane\'s dog");
turn=1; }


while(turn==1){
printf("\n mary\'s cat");
turn=0; }
}
getch();

}

----------


## whitehat

شما هر قسمتی را که می خواهید بصورت همروند انجام شود در بلاک زیر قرار دهید.

cobegin
{
}

پیشنهاد می کنم دو قسمتی را که نوشتید در یک تابع (مانند مثالی که زدم) قرار دهید تا نتیجه را بهتر ببینید.

----------


## نغمه

من این کد را با تغییراتی که شما گفتید تو محیط Borland c نوشتم . bacc را که برای باز شدن baci کلیک می کنم یک صفحه باز میشه میگه نام سورس فایل را بنویسید من نام فایل اجرایی این برنامه را که می نویسم (strict alternation.exe) و اینتر را میزنم صفحه بسته میشه و هیچ اتفاقی نمی افته .
(borland c  موقع Debuge برنامه cobegin را نمی شناسه!!)

----------


## whitehat

اصلا نیاز به نوشتن در Borland C نیست. کافیه فقط قسمتی را که می خواهید همروند ایجاد بشه در یک *فایل متنی* بنویسید و مسیر آنرا بدهید. همانطور که قبلا گفتم مثالی که زدم را ببینید و آنرا برای آشنایی اجرا کنید. سپس کد خود را با رویه های مثال قبلی عوض کنید.
برای برنامه نویسی در این محیط فقط باید یک تابع main داشته باشید که در آن کد خود را می نویسید و با دستور cobegin قسمتی از آنرا همروند می کنید.
توجه کنید که می توانید متغیرهایی از نوع سمافور و مانیتور نیز در این محیط تعریف کنید.برای اطلاعات بیشتر به مستندات Baci مراجعه کنید

----------


## نغمه

> اصلا نیاز به نوشتن در Borland C نیست. کافیه فقط قسمتی را که می خواهید همروند ایجاد بشه در یک *فایل متنی* بنویسید و مسیر آنرا بدهید.


چه جوری مسیرش را بدم من وقتی bacc را کلیک می کنم bacc.exe باز میشه و میگه:
enter name of source file:

----------


## whitehat

با فرض اینکه فایلی که نوشتید در درایو C  و دایرکتوری MyFolder باشه ،بنویسید:

enter name of source file:C:\MyFolder\MyFileName.txt

----------


## نغمه

الگوریتم dekker را اجرا کردم بعد از اجرا یک فایل با پسوند .pco و یک فایل به نام MASM Listing درست کرد با پسوند .LST که تو visual studio.net باز شدند(چرا اینجا ؟) اینها چی هستند؟
در کدهای نوشته شده نیازی به فایل های سرایند نیست؟
کدها باید با c ++ نوشته شوند یا با C هم میشه نوشت؟(کلا با چه زبانهایی میشه نوشت؟)

----------


## whitehat

> الگوریتم dekker را اجرا کردم بعد از اجرا یک فایل با پسوند .pco و یک فایل به نام MASM Listing درست کرد با پسوند .LST که تو visual studio.net باز شدند(چرا اینجا ؟) اینها چی هستند؟


به این فایل ها توجهی نکنید، همین که چگونگی روند اجرایی برنامه را ببنید کافی است.
این فایل ها فایلهایی برای خود نرم افزار می باشند که چون پسوند آن با یکی از پسوند های مورد پشتیبانی studio.net می باشد ، با آن باز می شود.



> در کدهای نوشته شده نیازی به فایل های سرایند نیست؟


نیازی نیست ، این نرم افزار صرفا برای شبیه سازی کدهایی است که باید همروند اجرا شوند.(دستورات محدودی را می توانید استفاده کنید که در راهنمای نرم افزار وجود دارد)



> کدها باید با c ++ نوشته شوند یا با C هم میشه نوشت؟(کلا با چه زبانهایی میشه نوشت؟)


زبانی که من نوشتم C++‎ است اما فکر می کنم بتوانید از C نیز استفاده کنید. این محیط شبیه زبانهای دیگری را نیز پشتیبانی می کند که باید نرم افزار مربوط به آنرا اجرا کنید. (من با پاسکال و C++‎ آن کار کردم بقیه زبانهای مورد پشتیبانی را در راهنمای آن ببینید)
موفق باشید

----------


## نغمه

> به این فایل ها توجهی نکنید، همین که چگونگی روند اجرایی برنامه را ببنید کافی است.
> این فایل ها فایلهایی برای خود نرم افزار می باشند که چون پسوند آن با یکی از پسوند های مورد پشتیبانی studio.net می باشد ، با آن باز می شود.


من وقتی مسیر این فایل متنی را در bacc.exe تایپ کردم و اینتر را زدم بلا فاصله صفحه بسته شد من روند اجرایی براش ندیدم به هر حال من باید  یک خروجی را ببینم تا بتونم مزیت این برنامه نویسی موازی را با ترتیبی مقایسه کنم!!!!!!!!!!!!! یعنی این شبیه ساز هیچ خروجی به من نشون نمی ده تا من بهتر بتونم درکش کنم؟




> نیازی نیست ، این نرم افزار صرفا برای شبیه سازی کدهایی است که باید همروند اجرا شوند.(دستورات محدودی را می توانید استفاده کنید که در راهنمای نرم افزار وجود دارد)


الگوریتمهای زمانبندی مثل Round Robin یا الگوریتمهای  page replacement مثل LRU را نیز می توان در این محیط شبیه سازی کرد؟
کلا baci یک محیط شبیه ساز برای تمام الگوریتمهای مربوط به سیستم عامل می تونه باشه؟

----------


## whitehat

> من وقتی مسیر این فایل متنی را در bacc.exe تایپ کردم و اینتر را زدم بلا فاصله صفحه بسته شد من روند اجرایی براش ندیدم به هر حال من باید یک خروجی را ببینم تا بتونم مزیت این برنامه نویسی موازی را با ترتیبی مقایسه کنم!!!!!!!!!!!!! یعنی این شبیه ساز هیچ خروجی به من نشون نمی ده تا من بهتر بتونم درکش کنم؟


حق با شماست ، من خیلی وقت بود با این نرم افزار کار نکرده بودم ، الان که به مستندات قبلی رجوع کردم متوجه شدم یک قسمت از مرحله را نگفتم (با عرض پوزش) . قسمتی از گزارش آزمایشگاه سیستم عامل خودم را با کمی تغییر اینجا می نویسم شاید به شما کمک کنه.

*مروری اجمالی بر نرم افزار** Baci*
bBaci نرم افزاری است که بعضی از مفاهیم سیستم عامل ازجمله اجرای همزمان فرایندها ، روشهای همگام سازی ، راهنماهای کلی راهنماهای دودوئی وناظرها را شبیه سازی می کند. Baci شامل دو زیر سیستم است. 
یکی از این زیر سیستمها مترجم(Interpreter) است  که برنامه کاربر را به کدی به نام PCODE (کد واسطه ) ترجمه می کند.همراه Baci دو مترجم وجود دارد.یکی شبیه C++‎ است وبرنامه های شبیه به آن با پسوند cm مشخص میشوندودیگری شبیه پاسکال است وبرنامه های به این روش با پسوند pm  ذخیره می شوند.هردو مترجم بعد از اجرا، کدهای با پسوند lst و pco را ایجاد می کنند.برای اجرای یک برنامه در Baci بایدمراحل زیر را طی کنیم.

1. کد برنامه را با زبان پاسکال یا C++‎ در ویرایشگری مانند Notepad نوشته و با پسوند pm یا cm ذخیره کنید.
2. برای کامپایل کردن پسوند cm از bacc.exe و برای پسوند های pm از bapas.exe استفاده کنید.

//If Write With C++‎
c:/>bacc Deker.cm
//If Write with Pascal
c:/>bapas Deker.pm
3. بعد از مرحله قبل فایلی با پسوند PCO ساخته می شود که می توانید با استفاده از   Bainterp.exe آنرا بصورت همروند اجرا کنید.

c:/>bainterp Deker.pco
نحوه شبیه سازی همروندی:
- فرآیند هایی که می باید همروند اجرا گردند باید در یک بلاک cobegin محصور شوند.

cobegin{
P0();
p1();
...
pn();
}
- سمافور ها در Baci شامل مقادیر صحیح غیر منفی می باشند.البته در Baci سمافورهای باینری نیز وجود دارد که مقادیر 0و1 را می پذیرد.بعد از تعریف این مقادیر می توان براحتی از توابع Wait و Signal استفاده نمود.
Baci قابلیت های متنوع دیگری (مانند مفاهیم مانیتور و نخ ها و ...) دارد که برای اطلاعات بیشتر بهتره به آن مستندات آن مراجعه کنید.
در آخر خروجی الگوریتم دکر ، تولید کننده /مصرف کننده ، مسئله بن بست و آرایشگران را در اینجا قرار می دهم تا ملموس تر آنرا ببینید.




> الگوریتمهای زمانبندی مثل Round Robin یا الگوریتمهای  page replacement مثل LRU را نیز می توان در این محیط شبیه سازی کرد؟
> کلا baci یک محیط شبیه ساز برای تمام الگوریتمهای مربوط به سیستم عامل می تونه باشه؟


Baci یک نرم افزار شبیه سازی همروندی است. برای این اجرای الگوریتم های زمانبندی و حافظه می توانید خودتان آنرا براحتی در هر زبانی پیاده سازی کنید.نرم افزار های برای شبیه سازی این موارد نیز وجود دارد .در کل Baci را برای این کار پیشنهاد نمی کنم.(اگه لازم شد بعدا در مورد الگوریتم های زمانبندی و حافظه توضیح خواهم داد)
کلمات کلیدی جستجو: Deker، Producer Consumer، Barber Shop، همروندی، mutual exclusion ، Baci ، بن بست ، Deadlock
موفق باشید

----------


## نغمه

> Baci یک نرم افزار شبیه سازی همروندی است. برای این اجرای الگوریتم های زمانبندی و حافظه می توانید خودتان آنرا براحتی در هر زبانی پیاده سازی کنید.[/RIGHT]


با C هم میشه پیاده سازی کرد؟
الگوریتمهای همروندی را نیز میشه با هر زبانی پیاده سازی کرد مثلا C ( به جای استفاده از BACI)؟




> نرم افزار های برای شبیه سازی این موارد نیز وجود دارد .در کل Baci را برای این کار پیشنهاد نمی کنم.(اگه لازم شد بعدا در مورد الگوریتم های زمانبندی و حافظه توضیح خواهم داد)
> کلمات کلیدی جستجو: Deker، Producer Consumer، Barber Shop، همروندی، mutual exclusion ، Baci ، بن بست ، Deadlock
> موفق باشید
> [/RIGHT]


نرم افزار شبیه ساز برای اینها چی هست؟

----------


## whitehat

> با C هم میشه پیاده سازی کرد؟
> الگوریتمهای همروندی را نیز میشه با هر زبانی پیاده سازی کرد مثلا C ( به جای استفاده از BACI)؟


بله می توان این کار را انجام داد، فقط باید با مفاهیم Threading بخوبی آشنا باشید



> نرم افزار شبیه ساز برای اینها چی هست؟


برای Time Scheduling از ps استفاده کنید(بسیار ابزار جالبیه!)
و برای Memory Management از MOSS می توانید استفاده کنید
البته نرم افزارهای شبیه ساز بسیاری وجود دارند که با جستجو می توانید آنها را بیابید.
موفق باشید

----------


## نغمه

> برای Time Scheduling از ps استفاده کنید(بسیار ابزار جالبیه!)
> و برای Memory Management از MOSS می توانید استفاده کنید
> البته نرم افزارهای شبیه ساز بسیاری وجود دارند که با جستجو می توانید آنها را بیابید.
> موفق باشید


 برای اینها باید با java کد بنویسم ؟ شبیه سازی هم هست که با همان خانواده c بشه باهاش کار کرد؟

----------


## whitehat

> برای اینها باید با java کد بنویسم ؟ شبیه سازی هم هست که با همان خانواده c بشه باهاش کار کرد؟


فکر نمی کنم لازم باشه کد بنویسید، می توانید برنامه را اجرا کرده و با توجه به مقادیری که Set می کنید نحوه اجری پروسه ها را به تفکیک الگوریتم ببینید.
کد C و جاوا تفاوت زیادی با هم ندارند اصول کد نویسی و تا حدود زیادی Syntax آنها مانند هم می باشد. در هر صورت پیشنهاد می کنم این زبان را یاد بگیرید، بسیاری از ابزار های دانشگاهی با این زبان و C نوشته شده اند . اگر احیانا درس مهندسی اینترنت ،شبکه یا سیستم عامل پیشرفته (توزیع شده) را گرفتید قطعا به این زبان نیاز پیدا می کنید.
-------------------------
با تشکر از مدیرمحترم برای جلوگیری از انحراف بحث :)

----------


## نغمه

برای حل مشکل ناحیه بحرانی به غیر از الگوریتمهای متغیرهای قفل ، دکر ، پیترسون سما فور و مانیتور و دستورالعمل TSL و swap الگوریتمهی دیگری هم هست؟
اینها همه با baci قابل شبیه سازی هست؟
دستورالعمل TSL و swap چه طور؟

----------


## whitehat

اگر منظور شما از قفل همان الگوریتم نانوایان لمپورت است ، تقریبا همه الگوریتم ها را نام بردید و همه به جز TSL قابل شبیه سازی است.همانطور که می دانید TSL می بایست از وقفه های سخت افزاری استفاده کند و قابل پیاده سازی نمی باشد. در مورد Swap باید گفت این کار انجام پذیر است اما خطر بن بست وجود دارد.
موفق باشید

----------


## نغمه

برای TSL و SwAP از چی میشه استفاده کرد؟
شما با Time Scheduling ) ps) کار کردین؟

----------


## whitehat

> برای TSL و SwAP از چی میشه استفاده کرد؟


می توانید به نوعی TSL را در Baci شبیه سازی کنید .لینک های زیر را ببینید:
tsl.cm  ,  tsl.lst  ,   tsl.pco 
و swap را هم می توانید با Baciپیاده سازی کنید



> شما با Time Scheduling ) ps) کار کردین؟


تقریبا، کافیه یک سناریو تعریف کنید و پارامتر ها را وارد کرده و با الگوریتم های Time Scheduling آنها را شبیه سازی کنید.(برنامه نویسی خاصی نیاز ندارد)

----------


## نغمه

در document مربوط به PS نوشته الگوریتمهایFCFS,RR,SJF را ساپورت می کنه برای الگوریتمهای دیگر زمانبندی باید از چی استفاده کنیم؟
برای کار کردن با PS باید محیط برنامه نویسیjava رو کامپیوترم نصب باشه؟
کاربرد هریک از این simulator ها (baciو PSو...) برای طراحی سیستم عامل است یعنی یک محیط تست قبل از به مرحله اجرا رساندن کل سیستم عامل؟
محیطی هم برای شبیه سازی بن بست وجود داره؟

----------


## whitehat

> در document مربوط به PS نوشته الگوریتمهایFCFS,RR,SJF را ساپورت می کنه برای الگوریتمهای دیگر زمانبندی باید از چی استفاده کنیم؟


الگوریتم های مشهور همین ها هستند، برای سایر الگوریتم ها نرم افزار خاصی سراغ ندارم . شاید با جستجو بتوانید نرم افزار مورد نیاز خود را بیابید. (برای بسیاری از موارد مجبور بودم الگوریتم ها را شخصا پیاده سازی کنم ، زمانی که ابزار مورد نظر وجود نداره باید خودتان آنرا بسازید)



> برای کار کردن با PS باید محیط برنامه نویسیjava رو کامپیوترم نصب باشه؟


خیر هر Platform ی که می تواند فایل های جاوا را اجرا کند کافی است به کل محیط IDE نیازی نیست.



> کاربرد هریک از این simulator ها (baciو PSو...) برای طراحی سیستم عامل است یعنی یک محیط تست قبل از به مرحله اجرا رساندن کل سیستم عامل؟


اکثر این نرم افزار ها توسط دانشجویان یا اساتید در دانشگاه های معتبر ساخته شده اند و جنبه آموزشی دارند.



> محیطی هم برای شبیه سازی بن بست وجود داره؟


به پست صفحه قبل دقت کنید! یکی از مثالهایی که با Baci شبیه سازی کردم همین بن بست است!

----------


## نغمه

> برای بسیاری از موارد مجبور بودم الگوریتم ها را شخصا پیاده سازی کنم ، زمانی که ابزار مورد نظر وجود نداره باید خودتان آنرا بسازید!


یعنی تو یک محیط برنامه نویسی از طریق multitreading؟




> خیر هر Platform ی که می تواند فایل های جاوا را اجرا کند کافی است به کل محیط IDE نیازی نیست.!


چه platform هایی این امکان را دارند




> اکثر این نرم افزار ها توسط دانشجویان یا اساتید در دانشگاه های معتبر ساخته شده اند و جنبه آموزشی دارند.!


آموزش طراحی سیستم عامل؟

----------


## whitehat

> یعنی تو یک محیط برنامه نویسی از طریق multitreading؟


بله 



> چه platform هایی این امکان را دارند


شاید منظورم را بد گفتم منظورم JVM یا Java Virtual Machine بود :) که معمولا بر روی ویندوز XP نصب است.برای اجرای این نرم افزار Batch Fileی در دایرکتوری آن به نام runps موجود است که کافیه آنرا اجرا کنید.



> آموزش طراحی سیستم عامل؟


بله ، مانند همان مطالبی که شما در درس سیستم عامل می خوانید.
موفق باشید

----------


## نغمه

یعنی تو یک محیط برنامه نویسی از طریق multitreading؟ 
 بله

با زبان c میشه همه این الگوریتمهای را شبیه سازی کرد یا زبان C#‎?

----------


## whitehat

دقیقا ، با هر دو زبان می توانید این کار را انجام دهید فقط باید با مفاهیم Multi Threading تا حدودی آشنا باشید. 
(پروژه سیستم های توزیع شده را با #C نوشتم و تمام امکاناتی که لازم داشتم را این زبان در اختیار داشت ، اما C هم همین امکانات را در خود دارد بسته به آشنایی شما به یکی از زبانهای فوق می توانید از هر دو استفاده کنید)

----------


## azarboy

کسی  مساله خوانندگان نویسندگان رو با سمافورها با زبان سی نوشته داره به من بده

----------


## azarboy

اگه کسی مساله خوانندگان نوسیندگان رو با سمافورها با سی نوشته به من میل بزنه
azarboy1@yahoo.com

----------


## نغمه

برای حل مسئله تولید کننده و مصرف کننده با استفاد از سمافور در baci برای پروسه های تولید کننده و مصرف کننده باید چه جوری کد بنویسیم؟

----------


## whitehat

سعی کنید به کدی که من نوشتم اکتفا نکنید، و خودتان آنرا بنویسید.

 // * * * * * * * * * * Consumer And Producer * * * * * * * * *
 semaphore n;
 semaphore s;
void Producer()
    {
    do{
       cout<<"Producer Produceing \n";
       wait(s);
       cout<<"Append Product To Buffer\n";
       signal(s);
       signal(n);
      }while(1);
    }
void Consumer()
    {
     do{
      wait(n);
      wait(s);
      cout<<"Consumer Take Product From Buffer \n";
      signal(s);
      cout<<"Consumer Consume The Product \n";
     }while(1);
    }
void main(){
  initialsem(n,0);
  initialsem(s,1);
  cobegin{
       Producer();
       Consumer();
  }
}

----------


## نغمه

برای استفاده از مانیتور condition ها باید مقدار اولیه بگیرند؟
برای استفاده از مانیتور در مسئله تولید کننده و مصرف کننده باید پروسیجرهای درون مانیتور برای وارد کردن و حذف کردن داده ، باید درون پروسیجرهای تولید کننده و مصرف کننده مثل فراخوانی متدی از یک کلاس باشد؟

----------


## whitehat

منظور قسمت اول سوال را متوجه نشدم :(
در اینجا قسمت مانیتور را ببینید ، اگر مشکل حل نشد بپرسید

----------


## نغمه

من در مسئله تولید کننده و مصرف کننده پروسیجرهای درون مانیتور را  که برای وارد کردن و حذف کردن داده  از بافر نوشتم،  درون پروسیجرهای تولید کننده و مصرف کننده  فراخوانی کردم(مثل فراخوانی متدی از یک کلاس) !!  این کار درسته ؟  ولی برنامه من کامپایل نمی شه؟

----------


## whitehat

بهتره کدتان را اینجا بنویسید
(در کل شما باید هر دو قسمت تولید کننده و مصرف کننده را در یک مانیتور بنویسید )

----------


## نغمه

monitor producer-consumer{
  condition full, empty;
  integer count;

  void enter()
  {
    if(count==100)
      waitc(full);
    cout<<"enter-item \n";
    count++;
    if(count==1)
      signalc(empty);
  }

  void remove()
  {
    if(count==0)
      waitc(empty);
    cout<<"remove-item \n";
    count--;
    if(count==99)
      signalc(full);
  }
count=0;
}



void producer()
{
 do{
    cout<<"produce-item \n"
    producer-consumer.enter;
   }while(1);
}



void consumer;
{
 do{
    producer-consumer.remove;
    cout<<"consume-item \n";
   }while(1);
}



void main(){
    cobegin{
       Producer();
       Consumer();
  }
}
 



آیا baci فقط برای این هست که ما بتونیم نحوه اجرای پروسس هایی که به صورت همروند اجرا می شوند را ببینیم؟( تا در ک بهتری پیدا کنیم  برای پیاده سازی آنها در یک محیط برنامه نویسی که همروندی را پشتیبانی می کنه؟)

اگر اجرای فایل .pco یک خروجی ادامه دار نده و در عرض چند ثانیه بعد از اجرا بسته شود نشانه بن بست است؟
جزو برنامه های baci سه برنامه به نامهای badis , baar, bald است اینها برای چی هستند؟

در راهنمای  baci نوشته 
Usage: bacc [optional_flags] source_filename 
Optional_flags: 
-h show this help 
-c make a .pob object file for subsequent linking
به این h ,c چگونه میشه دسترسی داشت؟

تفاوت الگوریتم دکر و پترسون در چیست؟

----------


## whitehat

کد شما منطقا درست است اما از لحاظ Syntax اشکالاتی را دارد 
1- زبان C یک زبان حساس به متن است ، پس نوشتن حرف کوچک و بزرگ برای آن متفاوت است.
2- برای مقدار دهی اولیه در مانیتور از init استفاده کنید
3- برای استفاده از توابع درون مانیتور نیازی به نوشتن نام مانیتور نیست
من کد را با تغییراتی اینجا می نویسم

// * * * * * * * * * * Consumer And Producer * * * * * * * * *
// * * * * * * * * * * With Monitor Solution * * * * * * * * *
monitor Produce_Consume{
  condition full, empty;
  int count;

  void Produce()
  {
    if(count==100)
      waitc(full);
    cout<<"Producer Produceing \n";
    count++;
    if(count==1)
      signalc(empty);
  }

  void Consume()
  {
    if(count==0)
      waitc(empty);
    cout<<"Consumer Take Product From Buffer \n";
    count--;
    if(count==99)
      signalc(full);
  }
  init 
  {
    count=0;
  }
}
void Producer()
{
  do
  {
    cout<<"Append Product To Buffer\n";
    Produce();
  }while(1);
}
void Consumer()
{
  do
  {
    Consume();
    cout<<"Consumer Consume The Product \n";
  }while(1);
}
void main(){
  cobegin
  {
    Producer();
    Consumer();
  }
}




> آیا baci فقط برای این هست که ما بتونیم نحوه اجرای پروسس هایی که به صورت همروند اجرا می شوند را ببینیم؟( تا در ک بهتری پیدا کنیم برای پیاده سازی آنها در یک محیط برنامه نویسی که همروندی را پشتیبانی می کنه؟)


یکی از کاربردها همین است، کاربرد دیگر تست الگوریتم هایی است که شما طراحی کرده اید و لازم است بصورت همروند اجرا شود.




> اگر اجرای فایل .pco یک خروجی ادامه دار نده و در عرض چند ثانیه بعد از اجرا بسته شود نشانه بن بست است؟


ممکنه الگوریتم پایان یافته شده باشد، تصویری از یک بن بست را قبلا Attach کرده ام . (به شکل توجه کنید)




> جزو برنامه های baci سه برنامه به نامهای badis , baar, bald است اینها برای چی هستند؟


bald یک لینکر است ، مثلا شما برنامه ای نوشته اید که به کتابخانه ای خاصی (مثلا stdio.h) نیاز دارید، با این برنامه می توانید آنرا به پروژه خود لینک کنید
badis یک Disassembler است که فایل pco شما را به کد ماشین تبدیل می کند و شما می توانید آنرا Debug و یا Trace نمائید.
baar  را دقیقا نمی دانم چیه (با آن کار نکردم)



> در راهنمای  baci نوشته 
> Usage: bacc [optional_flags] source_filename 
> Optional_flags: 
> -h show this help 
> -c make a .pob object file for subsequent linking
> به این h ,c چگونه میشه دسترسی داشت؟


با اضافه کردن این فلگ ها مانند سایر دستورات می توانید قابلیت هایی را به دستورات اضافه کنید
مثال برای گرفتن help

bacc -h
bacc -c myfilename




> تفاوت الگوریتم دکر و پترسون در چیست؟


تفاوت این الگوریتم ها در نحوه پیاده سازی است ، هر دوی این الگوریتم ها مساله ناحیه بحرانی را حل می کنند اما به دلیل اینکه الگوریتم دکر از نظر پیاده سازی و روند Trace پیچیده است ، الگوریتم پترسون طراحی شد

پ ن :
1-  (جواب یکی از سوال های گذشته) با استفاده از کلمه  کلیدی atomic می توانید Test And Set و Swap را براحتی پیاده سازی کنید. 
2- اگر می خواهید از محیط ویژوال برای کار با Baci استفاده کنید، می توانید از jBaci استفاده کنید.
3- مجموعه کاملی از Help نرم افزار Baci را از اینجا دریافت کنید.

----------


## نغمه

> با اضافه کردن این فلگ ها مانند سایر دستورات می توانید قابلیت هایی را به دستورات اضافه کنید
> مثال برای گرفتن help
> 
> bacc -h
> bacc -c myfilename


من این ها را در صفحه bacc  وارد می کنم صفحه بسته میشه help ای نشون نمیده!!



> تصویری از یک بن بست را قبلا Attach کرده ام


این بن بست را چه جوری باید شبیه سازی کنم؟

badis یک Disassembler است که فایل pco شما را به کد ماشین تبدیل می کند و شما می توانید آنرا Debug و یا Trace نمائید.



> لینکر است شما برنامه ای نوشته اید که به کتابخانه ای خاصی (مثلا stdio.h) نیاز دارید، با این برنامه می توانید آنرا به پروژه خود لینک کنید
> badis یک Disassembler است که فایل pco شما را به کد ماشین تبدیل می کند و شما می توانید آنرا Debug و یا Trace نمائید.



baci کتابخانه stdio.h را ساپورت می کند؟برای چه توابعی؟
از طریق bald چه جوری میشه یک کتابخانه را به برناممون لینک کنیم؟
فرق فایلی که badis تولید می کنه با فایل lst. چیه؟


در زبانهای سیستمی مثل C و java و... متغیر نوع سمافور و پروسیجرهای نوع مانیتور و دستورات tsl پشتیبانی میشوند؟ در آنها دستور tsl جزو توابع کتابخانه است یا باید آنها را تعریف کرد؟

چرا محیط baci طراحی شده مگه نمیشه اجرای موازی پروسسها را در یک محیط برنامه نویس مثل c دید؟

----------


## whitehat

> من این ها را در صفحه bacc  وارد می کنم صفحه بسته میشه help ای نشون نمیده!!


شما باید وارد محیط Command Prompt شوید و سپس دستور مورد نظرتان را اجرا کنید (در قسمت run ویندوز دستور cmd را اجرا کنید)




> این بن بست را چه جوری باید شبیه سازی کنم؟


کافیه یکی از الگوریتم هایی که خطر بن بست را دارند شبیه سازی کنید.مثلا یک قفل سراسری تعریف کنید که هر پروسه که آنرا بخواهید بگیرد آنرا True کند (نمونه آن در کتاب های سیستم عامل موجود است)




> baci کتابخانه stdio.h را ساپورت می کند؟برای چه توابعی؟


Bacci این کار را انجام نمی دهد، اما با استفاده از آن لینکر می توانید این فایل را به پروژه خود لینک کنید و از تمام توابع آن استفاده کنید.




> از طریق bald چه جوری میشه یک کتابخانه را به برناممون لینک کنیم؟
> فرق فایلی که badis تولید می کنه با فایل lst. چیه؟


فایلی که در تاپیک قبلی قرار دادم حاوی فایلهای Help مربوط به سوال های شما ست ، قسمتdisasm و sepcomp را مطالعه کنید.




> در زبانهای سیستمی مثل C و java و... متغیر نوع سمافور و پروسیجرهای نوع مانیتور و دستورات tsl پشتیبانی میشوند؟ در آنها دستور tsl جزو توابع کتابخانه است یا باید آنها را تعریف کرد؟


برای این موضوع بهتره به مستندات زبانهای فوق مراجعه کنید، برای این کار تجربه ای نداشتم ، اما برای یکی از پروژه های درسی که باید از مانیتور استفاده می کردم ، در #C توابع متنوعی برای این کار پیدا کردم ضمن اینکه بخوبی مانیتور در #C پشتیبانی می شود. امکان بسیار زیادی وجود دارد که این توابع در این زبانها پشتیبانی شوند ، بهتره ددر این مورد جستجو کنید.




> را محیط baci طراحی شده مگه نمیشه اجرای موازی پروسسها را در یک محیط برنامه نویس مثل c دید؟


Baci یک محیط شبیه سازی برای اجرا همروند است ، تمام این کار ها را شما می توانید در زبانی مانند C انجام دهید اما باید برای موازی کردن اجرای پروسه ها خودتان کد نویسی کنید که این کار را Baci انجام داده است . (مجبور شدم یک با ر این کار را انجام دهم و برای این کار باید خودتان یک Time Scheduler بنویسید که بصورت Preemptive زمان را بین Thread های شما و بصورت Random تقسیم کند)

----------


## نغمه

[quote]شما باید وارد محیط Command Prompt شوید و سپس دستور مورد نظرتان را اجرا کنید (در قسمت run ویندوز دستور cmd را اجرا کنید)[quote\]

در command prompt کد زیر را نوشتم :
bacc -h  c:\dekker.cm بعد که اینتر را زدم گفت bacc را نمی شناسه!!!

----------


## نغمه

[quote]شما باید وارد محیط Command Prompt شوید و سپس دستور مورد نظرتان را اجرا کنید (در قسمت run ویندوز دستور cmd را اجرا کنید)[quote\]

در command prompt کد زیر را نوشتم :
bacc -h  c:\dekker.cm بعد که اینتر را زدم گفت bacc را نمی شناسه!!!

----------


## whitehat

> در command prompt کد زیر را نوشتم :
> bacc -h  c:\dekker.cm بعد که اینتر را زدم گفت bacc را نمی شناسه!!!


شما باید bacc در Path سیستم موجود باشد، و الا باید این دستور را در فولدری اجرا کنید که bacc در آن قرار گرفته

----------


## نغمه

الگوریتم پترسون برای اجرا در محیط Baci را چگونه باید بنویسیم برای بیش از دو پروسس؟

----------


## whitehat

نوشتن این الگوریتم برای بیش از دو پروسس تفاوت چندانی با حالت دو پروسه ای ندارد ، فقط شما باید یک متغیر turn داشته باشید که بین پروسه ها گردش کند (توجه داشته باشید که Baci فقط یک ابزار است و الگوریتم هایی که وجود دارد باید در همه جا بخوبی کار کنند)
نمونه ای از الگوریتم پترسن را برای بیش از دو پروسه در اینجا ببینید

----------


## azadeh_2002

salam shoma mavaredi ke dar ghesmate dovome tashihe gozaresh...
gharar daden...man anjam dadam..
vali bazham ..file bass basteh shod va man khoroji moshahedeh nakardam,,, man cheguneh mitavanam dar command promt ejra konam...

----------


## whitehat

با سلام و عرض خیر مقدم ، لطفا قبل از هر کار قوانین سایت را مطالعه فرمائید  :چشمک:  و پست های خود را فارسی تایپ کنید.
این برنامه را شما باید در محیط 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();
  }
}       

هر چند اعتقاد من بر این است که انجام این تمرینها باعث درک صحیحی از سیستم عامل می شود ، و بهتر است دوستان سعی کنند خودشان این کد ها را پیاده سازی و اجرا نمایند. :لبخند:

----------


## azadeh_2002

سلام...من دستوراتی که شما گفتید انجام دادم و فایل را در not padبه نام barber .cmذخیره کردم.زمانی که نام فایل را می خواهد به صورت  bacc barber.cmمی دهم ولی پیغام می دهد  نمی تواند باز کند.من به صورت\   D:\my folder\ barber.cmهم  دادم ولی باز error داد تشکر فراوان از کمک  شما

----------


## whitehat

> سلام...من دستوراتی که شما گفتید انجام دادم و فایل را در not padبه نام barber .cmذخیره کردم.زمانی که نام فایل را می خواهد به صورت  bacc barber.cmمی دهم ولی پیغام می دهد  نمی تواند باز کند.من به صورت\   D:\my folder\ barber.cmهم  دادم ولی باز error داد تشکر فراوان از کمک  شما


امیدوارم نام فایل اشتباه تایپی باشد و فاصله نداشته باشد. این پیغام زمانی روی می دهد که Baci نتواند فایل را پیدا کند شما احتمالا مسیر درست را به آن نمی دهید. دقت کنید که حتما پسوند فایل را CM بدهید، دقت کنید اگر فایل را با ویندوز می سازید نمایش پسوند ها را فعال کنید و مطمئن شوید پسوند CM باشد نه CM.TXT
برای راحتی فایلی که ساختید را در پوشه Baci قرار داده و سپس دستور bacc را اجرا کنید این فرمان از شما نام فایل را می خواهد که بعد نام فایل را به همراه پسوند آن به آن دهید اگر همه کار را درست انجام داده باشید پیغامی مبتنی بر ساخته شدن فایل Pco خواهید گرفت.
در صورتی که مشکل داشتید بپرسید 
موفق باشید

----------


## azadeh_2002

سلام... من چه طوری می توانم مطمین شم که پسوند فایل cmاست نه txt.cmهم چنین منظورتان از ساختن با windowsچیه؟من الگوریتم را با not pad ذخیره کردم.نمایش پسوند چگونه فعال می شود؟را ستی فاصله هم ندارد.من در قسمت proprties  فایلی که با not padذخیره شده نگاه کردم به صورت barber.cmاست نه cm.txtباز هم error می دهد.
با تمام وجود از راهنماییتون ممنونم.

----------


## whitehat

من دو راه می نویسم هر کدام راحتتر است را انجام دهید:
1- در Command Prompt (وقتی که ازcmd  استفاده می کنید) با استفاده از دستور dir در شاخه ای که فایل را ذخیره کرده اید پسوند نام کامل فایل را خواهید دید.
2- در Explorer ویندوز (iهنگامی که My Computer را اجرا می کنید) به منوی Tools رفته و Folder Option را انتخاب کنید سپس در تب View گزینه Hide Extentions For known File Type را از حالت انتخاب در بیاورید. بوسیله این کار شما پسوند های نام فایل را خواهید دید
موفق باشید

----------


## نغمه

> نوشتن این الگوریتم برای بیش از دو پروسس تفاوت چندانی با حالت دو پروسه ای ندارد ، فقط شما باید یک متغیر turn داشته باشید که بین پروسه ها گردش کند (توجه داشته باشید که Baci فقط یک ابزار است و الگوریتم هایی که وجود دارد باید در همه جا بخوبی کار کنند)
> نمونه ای از الگوریتم پترسن را برای بیش از دو پروسه در اینجا ببینید


در این لینک در مورد بیش از دو پروسس چیزی نگفته میشه بیشتر راهنمایی کنید



یک روش برای ناحیه بحرانی از کار انداختن وقفه است این کار را با چه دستوری میشه انجام داد؟
الگوریتم بانکداران برای رفع بن بست را چه جوری میشه شبیه سازی کرد؟

----------


## whitehat

> در این لینک در مورد بیش از دو پروسس چیزی نگفته میشه بیشتر راهنمایی کنید


این الگوریتم همان الگوریتم پترسن است، اگر دقت کنید متغیر turn و متغیر Flag بصورت آرایه در آمده که هر خانه آن یک پروسه را نشان می دهد. i نشان دهنده پروسه iام می باشد و متغیر L نشان دهنده تعداد پروسه ها می باشد. الگوریتم پترسن به پروسه ای اجازه ورود به ناحیه بحرانی را می دهد که متغیر turn را بدست آورده باشد و اولویت آن از سایر پروسه هایی که turn را داشته باشند ، بیشتر باشد. 



> یک روش برای ناحیه بحرانی از کار انداختن وقفه است این کار را با چه دستوری میشه انجام داد؟


این روش فقط یک راه حل است ،اما راه حل عملی نمی باشد. چون یک سیستم نیاز به وقفه دارد و از کار انداختن وقفه باعث گرسنگی یا بن بست خواهد شد. الگوریتم هایی که بصورت  nonpreemptive عمل می کنند معمولا از این روش استفاده می کنند. (راه حلی برای سوال شما پیدا سراغ ندارم :( )



> الگوریتم بانکداران برای رفع بن بست را چه جوری میشه شبیه سازی کرد؟


به نظر شما این الگوریتم نیاز به همرندی دارد ؟ ;)
در کل پیاده سازی این الگوریتم زیاد سخت نیست ، فقط باید دو ماتریس و دو آرایه در نظر بگیرید و بر اساس الگوریتم آنرا پر کنید.
موفق باشید

----------


## azadeh_2002

سلام با تشکر فراوان از زحمات شما
من در baciنام فایل را دادم جمله های زیر برام امد:
pcode and tables are sorted in D:\barber.pco
compilation kisting is stored in D:\barber.lstحالا باید چی کار کنم؟در bainterp.exeوقتی نام فایل را به صورت D:\barber.pcoمی زنم bainterp .exe بسته می شود چرا؟
ایا باید در cmd دستور خاصی را تایپ کنم..و چگونه باید خروجی را مشاهده کنم
با تشکر فراوان

----------


## whitehat

> سلام با تشکر فراوان از زحمات شما
> من در baciنام فایل را دادم جمله های زیر برام امد:
> pcode and tables are sorted in D:\barber.pco
> compilation kisting is stored in D:\barber.lstحالا باید چی کار کنم؟در bainterp.exeوقتی نام فایل را به صورت D:\barber.pcoمی زنم bainterp .exe بسته می شود چرا؟
> ایا باید در cmd دستور خاصی را تایپ کنم..و چگونه باید خروجی را مشاهده کنم
> با تشکر فراوان


دستور خاصی لازم نیست کافیه آنرا با bainterp اجرا کنید

bainterp baber.pco
(اگر barber.pco در جایی غیر از فولدر baintrep است باید مسیر آنرا نیز بنویسید)
اگر دستور بالا جواب نداد بدون پسوند امتحان کنید ، خروجی باید چیزی شبیه این باشه

----------


## azadeh_2002

سلام واقعا دیگه روم نمی شه سوال بپرسم ولی چاره ای ندارم... شرمنده...
من اسم را به چند صورت زیر زدم ولی باز هم بسته می شود.d:\bainterp barber.pco
bainterp barber.pco  bainterp barber d:\bainterp barberولی بازم بسته شد  چی کار کنم..من خیلی وقت ندارم برای تحویل دادنش.
من خروجی را باید در همون bainterp مشاهده کنم یا جای دیگر...
مرسی از راهنماییتون..

----------


## whitehat

دوست عزیز اینجا محلی برای تبادل اطلاعات و پرسش و پاسخ است 
منظور شما از بسته شدن چیه ؟ یا باید دستور یک خروجی بدهد یا پیغام خطا؟
آیا شما این دستور را در Command Prompt اجرا می کنید(یعنی با دستور cmd وارد می شوید و بعد دستور را اجرا می کنید؟). فایل barber.pco در کجا ذخیره شده ؟

----------


## azadeh_2002

سلام من صفحه bainterp .exeنمی بینم..وقتی اسم فایل را می زنم..نه پیغام خطا نه خروجی..
نه من در bainterp .exe می زنم...barber.pcoدر درایو Dکنار bainterp.exe ذخیره کردم.من در cmd این کار را نمی کنم. مرسی از راهنماییتون

----------


## whitehat

شما این کار را باید در cmd انجام دهید، دلیلش اینه که این الگوریتم اجرا میشه و تمام میشه و سپس بسته میشه! و شما خروجی را نمی بینید،اگر این کار را در cmd انجام دهید بعد از تمام شدن الگوریتم به خط فرمان بر می گردد و شما خروجی را خواهید دید

----------


## azadeh_2002

سلام صمیمانه از راهنماییتون ممنونم...با لاخره خروجی را دیدم..
کمال تشکر را از همکا ریتون دارم..
خدا نگه دار

----------


## azadeh_2002

سلام .با تشکر از زحمات فراوان شما....
من چه جوری می توانم خروجی cmdرا در mailخودم یا not padکپی کنم.
ایا دستور خاصی دارد؟
با تشکر :ازاده

----------


## whitehat

برای این کار سه راه دارید یکی اینکه از صفحه عکس بگیرید و به mail ، پیوست کنید یا خروجی را بر copy/paste کنید در notepad یا خروجی را در یک فایل بریزید.
1- هنگامی که خروجی را دیدید دکمه های alt+Print Scrn را فشار دهید ،سپس Notepad را باز کرده و یک فایل جدید ایجاد کنید و دکمه Ctrl+v را فشار دهید (Paste کنید) ، و فایل را ذخیره کنید
2- بر روی آیکن cmd در گوشه بالای صفحه سمت چپ کلیک کنید و گزینه edit و سپس mark را انتخاب کنید و با ماوس قسمت دلخواه خود را انتخاب کنید ، سپس notepad را باز کرده و ctrl+v را فشار دهید . قسمت انتخاب شده paste می شود.
3- دستور آخر را به صورت زیر اجر کنید

bainterp barber.pco > output.txt

با این کار خروجی در فایل output.txt (در همان دایرکتوری) ذخیره می شود
موفق باشید

----------


## نغمه

بعد این فایل متنی کجا ذخیره می شود؟

----------


## whitehat

اگر مسیری به آن ندهید در کنار فایل baintrep دخیره می شود

----------


## najmeh salehi

با سلام
من کد و الگوریتم baker (نانوایی) را به زبان C++‎ می خواهم 
با تشکر

----------


## نغمه

> بعد این فایل متنی کجا ذخیره می شود؟


برای من ذخیره نمیشه چه جوری باید مسیر بدم؟

----------


## نغمه

من ps.zip( برای الگوریتمهای زمانبندی) را دانلود کردم برای کار با این محیط در ویندوز در خط فرمان، runps.bat را اجرا کردم به صورت زیر شد باید چی کار کنم؟

----------


## whitehat

> برای من ذخیره نمیشه چه جوری باید مسیر بدم؟


مسیر را در قبل از نام فایل خروجی بنویسید




> من ps.zip( برای الگوریتمهای زمانبندی) را دانلود کردم برای کار با این محیط در ویندوز در خط فرمان، runps.bat را اجرا کردم به صورت زیر شد باید چی کار کنم؟


شما باید جاوا را بر روی کامپیوتر خود نصب داشته باشید!

----------


## نغمه

> مسیر را در قبل از نام فایل خروجی بنویسید


مثلا اگر بخوام در درایو c ذخیره کنم باید چه کدی بنویسم؟




> شما باید جاوا را بر روی کامپیوتر خود نصب داشته باشید!


چه نسخه  ای از java  مناسب ps است (me,ee,se)؟( من یک فایل اجرایی دانلود کردم به نام Msjavx86  (microsoft VM) نصب هم شد ولی باز با اجرای Runps.bat همون پیغام قبلی را می ده!!)
سایتی در اینترنت هست که بتونم  java را  از آنجا دانلود کنم (اکثر سایتها حجم 100m  دارند که قابل دانلود نیست؟

----------


## whitehat

> مثلا اگر بخوام در درایو c ذخیره کنم باید چه کدی بنویسم؟



bainterp barber.pco > c:\output.txt




> چه نسخه  ای از java  مناسب ps است (me,ee,se)؟


هرنسخه ای که بتواند java را اجرا کند. (من از JRE استفاده می کنم)

----------


## نغمه

> هرنسخه ای که بتواند java را اجرا کند. (من از JRE استفاده می کنم)


من از سایت " http://www.java.com/en/download/index.jsp" خواستم JRE را دانلود کنم پیغام زیر را به من می ده در صورتیکه برای من آن نوار زرد بالای explorer نمی یاد که بتونم j2se را دانلود کنم باید چی کار کنم؟

----------


## whitehat

اگر می خواهید از این سایت بگیرید باید ابتدا Sun Download Manager را نصب کنید .
نسخه 5.0 را می توانید از اینجا بگیرید
فکر می کنم تاپیک داره از بحثش خارج می شود، لطفا سوالات را در مورد موضوع تاپیک مطرح کنید 
با تشکر

----------


## نغمه

من بالاخره جاوا را نصب کردم و پنجره اصلی شبیه ساز باز شد حالا چه جوری باید پروسس ها را به صورت ورودی به این شبیه ساز بدم برای زمانبندی آنها؟

----------


## whitehat

شما باید با استفاده از فایل های همراه با این نرم افزار این کار را انجام دهید، برای اطلاعات بیشتر به اینجا بروید

----------


## نغمه

من این راهنما را خوندم و فایلهای مربوطه را دانلود کردم و صفحه Process Scheduling Simulator هم باز شد ولی نمی دونم چه جوری باید در این شبیه ساز یک experiment جدید تعریف کنم

----------


## whitehat

من متوجه منظور شما نشدم،در کل شما باید دو فایل داشته باشید
فایل extension     .exp و فایل extension .run 
بعد آنها را می توانید جایگزین فایلهای موجو در دایرکتوری کنید،یا خود آنها را ویرایش کنید
بعد با استفاده از گزینه Run آنها را اجرا کنید

----------


## نغمه

من ps.zip را دانلود کردم 5 فایل زیر درون آن بود runps.bat را که اجرا می کنم پنجره ای باز می شه که بعد از این دیگه نمی دونم باید چی کار کنم!
 PS.jar 
Jeli.jar 
psconfig 
myrun.run 
myexp.exp 
runps.bat

----------


## whitehat

شما باید تغییرات خود را در فایل های myrun.run و myexp.exp اعمال کنید

----------


## ahang_ziba

سلام
من می خوام الگوریتم first fit  را کد نویسی کنم اما در پیاده سازی الگوریتمش مشکل دارم میشه منو راهنمایی کنید؟
با تشکر

----------


## whitehat

چه مشکلی با این الگوریتم دارید؟ کافیه مثلا یک آرایه در نظر بگیرید که هر کدام از خانه های آنها دارای یک تگ استفاده شده یا نشده باشد، برای تخصیص آن از ابتدا شروع به خواندن آرایه کنید و به اولین خانه خالی که رسیدید تگ آنرا یک کنید
(سعی کنید سوالهایتان را در باره موضوع تاپیک بپرسید)

----------


## ahang_ziba

سلام
آخه آرایه خونه هاش همه 1 ظرفیت ثابت دارند در حالیکه شاید فضاهای مورد درخواست کاربر زیادتر از مقدار از پیش تعیین شده آرایه باشه؟
با تشکر

----------


## نغمه

تمام الگوریتمهای مربوط به مدیریت حافظه و مدیریت پروسس و  زمانبندی را می توان با زبان c پیاده سازی کرد؟

----------


## whitehat

> آخه آرایه خونه هاش همه 1 ظرفیت ثابت دارند در حالیکه شاید فضاهای مورد درخواست کاربر زیادتر از مقدار از پیش تعیین شده آرایه باشه؟


دوست عزیز ابتدا شما باید مشخص کنید می خواهید از قطعه بندی استفاده کنید یا صفحه بندی؟



> تمام الگوریتمهای مربوط به مدیریت حافظه و مدیریت پروسس و  زمانبندی را می توان با زبان c پیاده سازی کرد؟


هر الگوریتمی را می توان با زبانهای مختلف پیاده سازی کرد!

----------


## ahang_ziba

با سلام
من متوجه دلیل شما از این سوال نشدم ولی واسه نوشتن برنامه قطعه بندی را ترجیح میدم 
میشه در مورد الگوریتم هایی که نوشتید(خوانندگان و نویسندگان و  آرایشگر ) یه توضیح بدید؟(در مورد متغیرهاو...)
ممنون میشم
با تشکر

----------


## whitehat

من می خواستم ببینم می خواهید نحوه پیاده سازی به چه روش باشه، بهر حال شما باز هم می توانید از یک آرایه استفاده کنید با این تفاوت که هر برنامه شما می تواند به تعدادی دلخواه از خانه  های آرایه شما را بگیرد و نحوه کار بازهم به شکل قبل می شود. ولی اگر می خواهید دقیقا چیزی که در حافظه انجام می شود را پیاده سازی کنید (که بعید اساتید سیستم عامل این چنین چیزی را بخواهند) باید به ازای هر پیج مثلا یک آرایه N بایتی Allocate کنید و مدیریت حافظه آنرا خود بر عهده بگیرید.اگر فقط می خواهید از قطعه بندی استفاده کنید مثلا N باید به به عنوان یک پیج در نظر بگیرید سپس فرض کنید که هر بایت با 0 یعنی خالی و با یک یعنی پر نشان داده شده سپس هر برنامه باید بداند که در کجا ها نوشته ،پس باید برای هر برنامه یک لیست پیوندی در نظر بگیرید مو قعیت برنامه در حافظه را نشان می دهد ،حال هر برنامه جدید می بایست برای ذخیره شدن در حافظه این فضا را از ابتدا بخواند (برای الگوریتم اول First Fit) هر جا فضای خالی پیدا کرد بنویسد ،برای این کار شما باید یک لیست پیوندی برای فضاهای خالی نیز داشته باشد که کارتان تقریبا خیلی سخت میشه!
در مورد الگوریتم ها تقریبا توضیحات کافی داده شده اگر مورد خاصی را مد نظر دارید آنرا عنوان کنید  تا توضیح دهم،ضمن اینکه بسیاری از این الگوریتم ها بطو کامل در کتابهای سیستم عامل وجود دارد
موفق باشید

----------


## ahang_ziba

سلام
اجازه بدید من سوالمو بصورت عددی بیان کنم تا شما بتونید منو راهنمایی کنید
فرض کنید که من یک آرایه از نوع int تعریف کنم و کاربر فضاهایی مثل ((44770-54852-...))(البته زبان مورد نظر من c است) درخواست کنه حالا چطور میشه درخواستهای کاربر را با این روش جواب داد؟
در مورد الگوریتمهای (آرایشگر - خوانندگان و نویسندگان) من توضیحی در مورد هدف از تعریف متغیر ها می خواستم
باتشکر

----------


## whitehat

در الگوریتم های تخصیص حافظه این سیستم عامل است که فضای مورد نیاز برنامه را به برنامه تخصیص می دهد، بعضی از برنامه های هستند که برنامه از حافظه Heap یا حتی پشته می تواند فضایی را درخواست نماید که این مربوط به الگوریتم های تخصیص حافظه نمی شود، شما برای شبیه سازی این الگوریتم ها *خودتان* باید فرضیاتی را لحاظ کنید ، برای روشن شدن موضوع مثالی می زنم، فرض کنید آرایه ای 10 عنصری داشته باشید که حافظه شما را تشکیل می دهد. حال فرض کنید پروسه های زیر وارد می شوند
P1....5
p2....4
p1...Dispose
p3...3
p4....3
p3...Dispose
p5....1
حال نحوه پر شدن آرایه باید به شکل زیر باشد(O به منزله جای خالی در آرایه و * ناحیه اشغال شده است)
OOOOOOOOOO
*****OOOOO
*********O
OOOOO****O
***OO****O
p4 در اینجا Suspend می شود
****O****O
شما باید با برنامه ای که می نویسید برای این سناریو ، همچین چیزی را به عنوان خروجی در آورید.



> در مورد الگوریتمهای (آرایشگر - خوانندگان و نویسندگان) من توضیحی در مورد هدف از تعریف متغیر ها می خواست


لطفا به شماره پست و نام متغیر مورد نظرتان اشاره کنید

----------


## ahang_ziba

با سلام
خوب مشکل من هم در پیاده سازی این الگوریتم همینه!
من نمیدونم چطور این فضا رو شبیه سازی کنم تا وقتی 1 فضا توسط درخواست کاربر اشغال شد و از همون خانه اگر مقداری فضا باقی ماند و الگوریتم برای بار بعد که search  فضای خالی رو از سر میگیره چطور دوباره از فضای آن خانه خالی استفاده کنه؟
(مثال عددی: مثلا خانه اول ما 100 تا فضا داره و کاربر 60 تا تقاضا میکنه خوب از همین خانه اول 40 تا باقی میمونه و برای درخواست دوم کاربر این فضا هم باید به عنوان فضای خالی در نظر گرفته بشه تا مثلا اگر کاربر تقاضای فضای 40 یا کمتر را داد همین فضای باقی مانده به درخواست دومش تخصیص یابد )
تا اونجا که من میدونم این مطلب بوسیله آرایه قابل پیاده سازی نیست 
اگه میشه منو سریعتر راهنمایی کنید چون من روی این مطلب خیلی فکر کردم ولی چیزی دستگیرم نشد؟؟؟؟
با تشکر

----------


## whitehat

> مثال عددی: مثلا خانه اول ما 100 تا فضا داره ...


منظور شما ازخانه چیه؟ 
مثالی که من زدم برای یک صفحه است ،حال اگر می خواهید چند صفحه داشته باشید می توانید یک ماتریس به جای یک آرایه تعریف کنید که هر سطر یا ستون آن یک صفحه باشد

----------


## ahang_ziba

سلام
شما گفتید واسه پیاده سازی میشه از آرایه استفاده کرد منظور من هم از خانه . خانه اول آرایه بود - حالا اگر میشه سوال قبل منو با این فرض جواب بدید
با تشکر

----------


## whitehat

خب با این حساب شما فرض کنید هر صفحه حافظه معادل یک آرایه n تایی است ، و هر برنامه می تواند به تعداد k خانه حافظه (k<n) فضا اشغال کند،حال باید سناریوئی مانند بالا تعریف کنید و سپس سعی کنید آنرا پیاده سازی نمائید

(فکر کنم بحث تا حدودی داره از مسیر اصلی خارج می شود ،اگر شما سوالاتی در مورد الگوریتم های تخصیص حافظه دارید در تاپیکی مجزا بپرسید،باتشکر)

----------


## Mahdi.Kiani

خواستم تاپیک جدید بزنم اما دیدم اینجا در مورد مسئله آرایشگر منصف و غیر منصف بحث شده است گفتم همین جا بنویسم
البته یه نکته بگم وقتی که الگوریتم های آرایشگر منصف و غیر منصف را دیدم که توسط یکی از کاربران حل شده بود، خیلی خوشحال شدم. چون خیلی وقت پیش بهش نیاز داشتم و با هر جونکندنی بود نوشتمش..اخه اون موقع ها زیاد از برنامه نویسی خوشم نمی اومد . اما خوب بلاخاره نوشتمش.. حالا از این حر فا بگذریم
سناریوی زیر را در نظر بگیرید
می خواهیم مسئله ارایشگر منصف را در یک محیط شبکه حل کنیم
بدین صورت که یک برنامه سمت سرور داریم و یک برنامه هم که طبیعتا سمت کلاینت نوشته میشه
تمامی سمافور ها بایستی روی برنامه سرور تعریف شوند. و یک thread مسئول مدیریت درخواست هاست
بقیه thread های مربوط به آرایشگران و آرایشگاه و مشتریان و .... بایستی روی کلاینت تعریف شوند.
حال از سمت کلاینت درخواست ها برای سمافور هایی سمت سرور ارسال میشه. اون thread ای که گفتم در سمت سرور مسئول پاسخگویی به این درخواست هاست. بدین صورت که اگه سمافور مورد نظر آزاد بود به درخواست پاسخ داده میشه و اگه مشغول بود، thread درخواست کننده باید wait بمونه تا سمافور ازاد بشه و سپس به درخواستش پاسخ داده بشه

فکر می کنم تنها نکته ای که در این برنامه نسبت به برنامه آرایشگر منصف در حالت معمولی وجود داره این هست که کلیه درخواست ها در غالب متن به سمت سرور فرستاده می شوند و جواب ها که می تونه پاسخ به درخواست و یا waint کردن درخواست باشه، باز هم در غالب متن و به سمت کلاینت فرستاده میشود.
این مسئله یعنی فرستادن درخواست ها در غالب متن و گرفتن پاسخ های مناسب هم با برنامه نویسی سوکت قابل حل است. منتها مراتب مسئله اصلی جدا کردن سمافور ها و بردن اونا در سمت سرور هست. در واقع در حالت عادی thread های مشتریان و ... با سمافور ها در گیر هستند که جدا کردن اونا و بردن اونا روی دو تا سیستم جدا یکمیکار را مشکل می کنه

اگه از دوستان کسی پیاده سازی در این مورد داشته را ممنون میشم بگه
اگه نمونه کد هم باشه که خیلی بهتره
ممنون

----------


## mojgan.net

سلام 
من یه کتابی رو بهتون معرفی می کنم که تمام این الگو ریتم ها رو داخل اون نوسینده اون کتاب نوشته.
اگر هم این کتاب رو نتونستید پیدا کنید من براتون اون رو می تونم پست کنم.
((سیستم های عامل_نویسنده مهندس اکبر پور)) این کتاب رفرنس این ترم من واسه درس سیستم عامل و استاد این درس هم نویسنده همین کتاب اگه بازم هم سوالی داشتید به من بگید تا از ایشون بپرسم و یا کتاب و واستون پست کنم

----------


## Mahdi.Kiani

> سلام 
> من یه کتابی رو بهتون معرفی می کنم که تمام این الگو ریتم ها رو داخل اون نوسینده اون کتاب نوشته.
> اگر هم این کتاب رو نتونستید پیدا کنید من براتون اون رو می تونم پست کنم.
> ((سیستم های عامل_نویسنده مهندس اکبر پور)) این کتاب رفرنس این ترم من واسه درس سیستم عامل و استاد این درس هم نویسنده همین کتاب اگه بازم هم سوالی داشتید به من بگید تا از ایشون بپرسم و یا کتاب و واستون پست کنم


اگه بتونین همون الگوریتمی که میگین مخصوص این مسئله هست را پست کنین ممنون می شم

----------


## animove

می خواستم بدونم که خود #c هم امکاناتی برای برنامه نویسی همروند داره ؟
 مساله تولید کننده ومصرف کننده رو با سمافور یا با مانیتور چطوری میشه با #c حل کرد؟

----------


## MozenAbasi

الگوریتم دکر نگارش 5 را برای بیش از 2 پروسسور می خواستم . ممنون

----------


## mary81

*اگر ممكنه يك نرم افزاره همروند برام بزارين
هر چي سعي كردم نتونستم download كن*

----------


## whitehat

از اينجا دانلود كنيد

----------


## ali_mp64

ميشه يه لينك دانلود ديگه بزارين ؟

----------


## whitehat

لینک مشکلی نداره ، با دانلود منیجر ها دانلود نکنید:)
بر روی اینجا در پست قبل کلیک کنید

----------


## paryie_dariaii

سلام.خسته نباشید.کسی می تونه همین برنامه رو با مانیتور برا من بزاره؟ممنون میشم.من اصلا مانیتور رو یاد نگرفتم.حتی الامکان با جاوا.با سمافور تو جاوا اینجوری میشه

class Semaphore {
    private int c;
    public Semaphore(int n) {
        this.c = n;
    }
    public synchronized void WAIT() {
        while(c == 0) {
            try {
              wait();

            } catch (InterruptedException e) {
                //keep trying
            }
        }
        c--;
    }

    public  synchronized  void SIGNAL() {
        C++‎;
        notify(); //alert a thread that's blocking on this semaphore
          }
}
        int loop=0;
        int[] queue=new int[20];
        Semaphore max_capacity=new Semaphore(20);
        Semaphore sofa=new Semaphore(4);
        Semaphore barber_chair=new Semaphore(3); 
        Semaphore coord=new Semaphore(3);
        Semaphore mutex1=new Semaphore(1);
        Semaphore mutex2=new Semaphore(1);
        Semaphore cust_ready=new Semaphore(0);
        Semaphore leave_b_chair=new Semaphore(0);
        Semaphore payment=new Semaphore(0);
        Semaphore receipt=new Semaphore(0);
        Semaphore[] finished=new Semaphore[50];
        int count; 
 //class barberShop{
    // public barberShop(){}

public class  Cashier extends Thread{
    public void run(){
    do{
       payment.WAIT();
       coord.WAIT();
       System.out.println("Cashier Accept The Payment");
       coord.SIGNAL();
       receipt.SIGNAL();
       yield();
    }while(true);

    }
}
public class Customer extends Thread{
    public void run(){
        int i;
        for(i=0;i<50;i++)
            finished[i]=new Semaphore(0);
    int custnr; 
    max_capacity.WAIT();
    System.out.println("Customer Enter The Barbery");
    mutex1.WAIT();
    count++;
    custnr= count; 
    mutex1.SIGNAL(); 
    sofa.WAIT();
    System.out.println("Customer Sitting On Bench");
    barber_chair.WAIT();
    System.out.println("Customer Getting Up From Bench");
    sofa.SIGNAL();
    System.out.println("Customer Sitting On The Barber Chair");
    mutex2.WAIT();
    if (loop<19) queue[loop++]=custnr;
    cust_ready.SIGNAL();
    mutex2.SIGNAL();
    finished[custnr].WAIT();
    System.out.println("Customer Leave The Barber Chair");
    leave_b_chair.SIGNAL();
    System.out.println("Customer Pay The Payment"); 
    payment.SIGNAL();
    receipt.WAIT();
    System.out.println("Customer Leave The Shop");
    max_capacity.SIGNAL(); 
    yield();
    }
}

public class Barber extends Thread{
    public void run(){
    int b_cust;
    do{
        cust_ready.WAIT();
        mutex2.WAIT();
        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--;
            }
        }
        mutex2.SIGNAL();
        coord.WAIT();
        System.out.println("Baraber Is Cut The Hair");
        coord.SIGNAL();
      //  finished[b_cust].SIGNAL();
        leave_b_chair.WAIT();
        barber_chair.SIGNAL();
        yield();
    }while(true);

    }
}
Int main()
{
int z;
        int j;
        Customer cust=new Customer();
        Barber barb=new Barber();
        Cashier cash=new Cashier();
        for( j=0;j<50;j++)
        {
          cust.start();  
        }
        for(z=0;z<3;z++)
        {
           barb.start();
        }
        cash.start();
}

 با سپاس

----------


## sarasattari

سلام ميشه يكم بيشتر در مورد baci و توابع اون توضيح بديد

----------


## Saeed_script

مفاهیم سیستم عامل مانند mutual exclusion , Deadlock, Semaphore,Monitor
همگی در کتابخانه دات نت تعریف شده اند ، و می توان برای شبیه سازی و پیاده سازی الگوریتم های سیستم عامل از آنها استفاده کرد.
مثلا می توانید در بخش فناوری مایکروسفت در این سایت ، طریقه باز کردن سورس .net 3.5 را یاد بگیرید و آنگاه به سورس اشیائی همچون mutex و semaphore و monitor نگاه کرده و با طرز کار متد های آن آشنا شوید.

----------


## whitehat

> سلام ميشه يكم بيشتر در مورد baci و توابع اون توضيح بديد


اگر به صفحات اولیه همین پست مراجعه کنید می توانید مطالب مفیدی را در رابطه با BACI و مثالهایی از الگوریتم هایی که در آن پیاده سازی شده را پیدا کنید

----------


## saruneh

مشگل اینجاست که در BACI نمیشه از Struct استفاده کرد!


int i=0;


int in=0;
int out=0;
int size=3;
int queue[size];
struct new_semaphore
{
int count;
int queue[100];
};
atomic void new_wait(new_semaphore& s)
{
s.count--;
if(s.count<0)
{ 
s.queue[in]=which_proc();
in=(in+1)%size;
suspend(); 
}
}
atomic void new_signal(new_semaphor& s)
{
s.count++;
if(s.count<=0)
{ 
revive(s.queue[out]);
out=(out+1)%size;
}
}
void new_initial(new_semaphore s,int i)
{
s.count=i;
}

----------


## beirami

می خوام مساله خوانندگان و نویسندگان یا تولید کننده ومصرف کننده رو بدون ترد بنویسم میشه کمکم کنید؟؟؟چه جوری همگامی رو در ویندوز اجرا کنم ؟

----------


## manager

> می خوام مساله خوانندگان و نویسندگان یا تولید کننده ومصرف کننده رو بدون ترد بنویسم میشه کمکم کنید؟؟؟چه جوری همگامی رو در ویندوز اجرا کنم ؟


اصل مسئله IPC با همگامی فرآیندها به وجود می یاد تو ویندوز هم شما به 2 تا ابزار یعنی Thread و Process می تونی همگامی رو ایجاد کنی. پیشنهاد می کنم با همون Thread این کار رو انجام بدی وگرنه اسیر می شی... حالا چرا نمی خوای با ترد این کار رو بکنی ؟

----------


## va_sha_114

ُسلام خسته نباشید . نمیدونم بعد این همه وقت که این تاپیک غیر فعال بوده الان کسی پیدا میشه جواب بده یا نه اما می خواستم ببینم کسی در مورد مسئله پل در سیستم عامل چیزی شنیده؟
این مسئله به این صورته که یک پل را تصور کنید که بی نهایت ماشین یک طرف و بی نهایت ماشین طرف دیگه هستند و در هر زمان فقط از یک طرف ماشین می تواند رد شود می خواهیم 10 تا ماشین از یک طرف و 10 تا دیگه از طرف دیگه بروند که این ساده ترین حالته ، حالا اگه یک طرف خالی بود طرف دیگه منتظر 10 ماشین انطرف نشه و همین طور ماشین رد بشه و اگه مثلا 3 تا ماشین یک طرف بود و بی نهایت طرف دیگه بعد اینکه 3 تا ماشین از آن طرف رد شد و ماشین ها تمام شد منتظر نباشد که حتما 10 تا ماشین رد بشه چون دیگه ماشینی نیست و از طرف دیگه همینطور ماشین رد بشه 
اینا می خوام با BACI پیاده سازی کنم اما اگه کسی شبه کد برام بگه ممنون میشم چون می خوام خودم پیاده سازی کنم اما الگوریتمشا موندم چطوریه؟؟؟؟؟؟؟؟

----------


## علی سبزقبایی

سلام من زیاد آشنایی با این موضوع ندارم اگر کسی میتونه به طور کامل برام توضیح بده

----------


## whitehat

> سلام من زیاد آشنایی با این موضوع ندارم اگر کسی میتونه به طور کامل برام توضیح بده


در این تاپیک به موضوع های مختلفی اشاره شده که هر کدام توضیح کافی دارند، ابتدا صفحات قبل را مطالعه کنید و در صورت نیاز سوال خود در مورد موضوع مورد نظر بیان کنید

----------


## va_sha_114

مثل اینکه کسی بلد نبود
 اما خودم فهمیدم چطوریه
گفتم توضیح بدم شاید به درد کسی بخوره
برای این کار باید از 5تا سمافور باید استفاده کنی 2تا برای مشخص کردن جهت ها و یکی برای هماهنگ کننده و 2تا هم برای حرکت از 2 جهت مختلف و چک می کنی جهت را تشخیص میدی و هماهنگ کننده را Wait می کنی و حرکتت را شروع می کنی

----------


## as.moosavian

سلام
راه حلي براي مساله خوانندگان و نويسندگان در يكي از كتابهاي سيستم عامل وجود دارد،     اما وقتي ميخواهم اين كد را در baci اجرا كنم، فقط فايل lst را بوجود مي اورد و فايل pco را توليد نميكند، گفتم شايد اشكال از برنامه باشد ، چون فقط براي اين برنامهpco توليد نمي كنه. براي همين كد رامي نويسم: 
int readcount;
semaphor x=1,wsem=1;
void reader()
{
    while(1)
    {
 wait(x);
 readcount++;
 if(readcount==1)
     wait(wsem);
 signal(x);
 cout<<"a";
 wait(x);
 readcount--;
 if(readcount==0)
     signal(wsem);
 signal(x);
     }
}
void writer()
{
   while(1)
   {
       wait(wsem);
       cout<<"b";
       signal(wsem);
   }
}
void main()
{
  readcount=0;
  parbegin(reader,writer);
}
به نظر شما اشكالش كجاست؟   با تشكر.

----------


## sanaz e

دوست عزيز كدت رو توي تگ بزار كه قابل فهم باشه

----------


## Fatemeh22

با سلام و احترام : برنامه آرایشگر منصف با 3 سمافور finished چگونه است ؟
 به نظر من باید از دستور finished[custnr%3  به جای  finished[custnr استفاده کرد اگر این جواب درست است چه دستورات دیگری باید به برنامه اضافه کرد لطفا به زبان C بنویسید.

----------


## va_sha_114

> با سلام و احترام : برنامه آرایشگر منصف با 3 سمافور finished چگونه است ؟
>  به نظر من باید از دستور finished[custnr%3  به جای  finished[custnr استفاده کرد اگر این جواب درست است چه دستورات دیگری باید به برنامه اضافه کرد لطفا به زبان C بنویسید.


سلام دوست عزيز مثل اينكه كسي جواب سوالت را نداده من يك راهنمايي بهت مي كنم ببين بايد براي ارايشگرا يك ارايه  3 تايي در نظر بگيري مثلا مثل يك سبد كه هر كس مياد تو ارايشگاه شمارش را يا همون نوبتشا را بزاره تو سبد و ارايشگره شماره ها را برداره و مشتري را اصلاح كنه دقيق نميتونم برات توضيح بدم چون پروژه خودم هم هست و اگه ايدم را بگم تكراري ميشه و اقاي داوديان هم ديگه ميگه داديد نوشتند

----------


## yasemi

اگه کسی برنامه کامل هر کدام از الگوریتمها رو داره بزاره  البته با همین نرم افزار jbaci کار کنه ممنون میشم

----------


## zhaleh.mp

سلام دوستان .
من باید یه برنامه ای رو که سمافور توش استفاده می شه با جاوا بنویسم،
اما مشکلی که دارم اینه که نمی دونم متد های wait و signal 
توی چه کتابخونه ای از جاوا هستن؟
واینو هم نمیدونم که اگه بخوام چند فرایند رو توی main هم زمان صدا بزنم واسه اجرا باید از چه تابعی استفاده کنم ؟
در واقع  نمی دونم توی جاوا چه تابعی کار parbegin رو انجام می ده؟؟
ممنون می شم راهنماییم کنید.

----------


## sinatra25

سلام
هر کدام از دوستان که الگوریتم غذا خوردن فیلسوف ها رو بوسیله سمافور و مانیتور تو Jbaci پیاده کرده ممنون میشم کدش رو برای استفاده بقیه اینجا قرار بده

----------


## salam8

سلام
من تمام الگوریتم های حل مسائله M.E به روش نرم افزاری آقای دکر رو میخواستم
همراه با توضیح کامل لطفا...........مرسی

----------


## salam8

سلام
حل مسائله ی تولید کننده و مصرف کننده با استفاده از سمافور، زمانیکه تعداد خانه های بافر 100 میباشد، برنامه اش چگونه میشود
میشه این برنامه را بنویسید؟؟؟؟؟؟؟؟؟؟

----------


## saeedkarimiuut

سلام دوستان کسی هست راهنمایی کنه که چطوری الگوریتم فیلسوفان خورنده رو با استفاده از نخ ها توی C#‎ پیاده سازی کرد؟!؟!

----------

