در کتاب تانن بام برای درس سیستم عامل یک سری الگوریتمها گفته شده مثلا الگوریتمهایی برای حل ناحیه بحرانی یا الگوریتم سمافور یا.... کسی هست که تا به حال این الگوریتمها را کد و اجرا کرده باشه؟
Printable View
در کتاب تانن بام برای درس سیستم عامل یک سری الگوریتمها گفته شده مثلا الگوریتمهایی برای حل ناحیه بحرانی یا الگوریتم سمافور یا.... کسی هست که تا به حال این الگوریتمها را کد و اجرا کرده باشه؟
سوال شما چیه ؟
برای شبیه سازی این کد ها می توانید از Baci استفاده کنید.
شما با استفاده از 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 را باید روی کامپیوترم نصب کنم؟
این محیط یک محیط شبیه سازی الگوریتم های همزمان است کافی است الگوریتم را مثلا در قالب 2 تابع نوشته و در قسمت ناحیه بحرانی پیغامی را چاپ کنید و بعد آنرا اجرا کرده و نتیجه را ببینید.
آخرین نسخه ای که من با آن کار می کردم تحت داس بود و نیازی به نصب نداشت فقط کافی بود آنرا اجرا کنید و کد ها را در آن تایپ کنید.
این نرم افزار را دانلود کنید و از آن استفاده کنید ، اگر مشکلی داشتید سوال کنید
موفق باشید
من از home page BACI ، اBACI DOS executables را دانلود کردم ولی هیچ فایل اجرایی نداشت تا من بتونم کامپایلر baci را نصب کنم. ضننا win xp هم دارم .
مشکل کجاست؟
اگر درنهایت بتونم نصبش کنم روی همین محیط می تونم کدهای مورد نیاز سیستم عامل را بنویسم و اجرا کنم؟
این برنامه تحت داس اجرا میشه، براتون ضمیمه کردم.
بله می توانید، کافیه کد مورد نظر را در قالب دو رویه بنویسید و آنها را Concurrent اجرا کنیدنقل قول:
اگر درنهایت بتونم نصبش کنم روی همین محیط می تونم کدهای مورد نیاز سیستم عامل را بنویسم و اجرا کنم؟
نصب لازم نیست برنامه خودتان را بنویسید و براساس اینکه 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 هست که تحت ویندوز بشه باهاش کار کرد؟
با زبان دلفی هم میشه این کدها را نوشت و اجرا کرد؟
بلهنقل قول:
یعنی مثلا من این کد مربوط به الگوریتم دکر را در محیط 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();
}
شما هر قسمتی را که می خواهید بصورت همروند انجام شود در بلاک زیر قرار دهید.
cobegin
{
}
پیشنهاد می کنم دو قسمتی را که نوشتید در یک تابع (مانند مثالی که زدم) قرار دهید تا نتیجه را بهتر ببینید.
من این کد را با تغییراتی که شما گفتید تو محیط Borland c نوشتم . bacc را که برای باز شدن baci کلیک می کنم یک صفحه باز میشه میگه نام سورس فایل را بنویسید من نام فایل اجرایی این برنامه را که می نویسم (strict alternation.exe) و اینتر را میزنم صفحه بسته میشه و هیچ اتفاقی نمی افته .
(borland c موقع Debuge برنامه cobegin را نمی شناسه!!)
اصلا نیاز به نوشتن در Borland C نیست. کافیه فقط قسمتی را که می خواهید همروند ایجاد بشه در یک فایل متنی بنویسید و مسیر آنرا بدهید. همانطور که قبلا گفتم مثالی که زدم را ببینید و آنرا برای آشنایی اجرا کنید. سپس کد خود را با رویه های مثال قبلی عوض کنید.
برای برنامه نویسی در این محیط فقط باید یک تابع main داشته باشید که در آن کد خود را می نویسید و با دستور cobegin قسمتی از آنرا همروند می کنید.
توجه کنید که می توانید متغیرهایی از نوع سمافور و مانیتور نیز در این محیط تعریف کنید.برای اطلاعات بیشتر به مستندات Baci مراجعه کنید
با فرض اینکه فایلی که نوشتید در درایو C و دایرکتوری MyFolder باشه ،بنویسید:
enter name of source file:C:\MyFolder\MyFileName.txt
الگوریتم dekker را اجرا کردم بعد از اجرا یک فایل با پسوند .pco و یک فایل به نام MASM Listing درست کرد با پسوند .LST که تو visual studio.net باز شدند(چرا اینجا ؟) اینها چی هستند؟
در کدهای نوشته شده نیازی به فایل های سرایند نیست؟
کدها باید با c ++ نوشته شوند یا با C هم میشه نوشت؟(کلا با چه زبانهایی میشه نوشت؟)
به این فایل ها توجهی نکنید، همین که چگونگی روند اجرایی برنامه را ببنید کافی است.نقل قول:
الگوریتم dekker را اجرا کردم بعد از اجرا یک فایل با پسوند .pco و یک فایل به نام MASM Listing درست کرد با پسوند .LST که تو visual studio.net باز شدند(چرا اینجا ؟) اینها چی هستند؟
این فایل ها فایلهایی برای خود نرم افزار می باشند که چون پسوند آن با یکی از پسوند های مورد پشتیبانی studio.net می باشد ، با آن باز می شود.
نیازی نیست ، این نرم افزار صرفا برای شبیه سازی کدهایی است که باید همروند اجرا شوند.(دستورات محدودی را می توانید استفاده کنید که در راهنمای نرم افزار وجود دارد)نقل قول:
در کدهای نوشته شده نیازی به فایل های سرایند نیست؟
زبانی که من نوشتم C++ است اما فکر می کنم بتوانید از C نیز استفاده کنید. این محیط شبیه زبانهای دیگری را نیز پشتیبانی می کند که باید نرم افزار مربوط به آنرا اجرا کنید. (من با پاسکال و C++ آن کار کردم بقیه زبانهای مورد پشتیبانی را در راهنمای آن ببینید)نقل قول:
کدها باید با c ++ نوشته شوند یا با C هم میشه نوشت؟(کلا با چه زبانهایی میشه نوشت؟)
موفق باشید
من وقتی مسیر این فایل متنی را در bacc.exe تایپ کردم و اینتر را زدم بلا فاصله صفحه بسته شد من روند اجرایی براش ندیدم به هر حال من باید یک خروجی را ببینم تا بتونم مزیت این برنامه نویسی موازی را با ترتیبی مقایسه کنم!!!!!!!!!!!!! یعنی این شبیه ساز هیچ خروجی به من نشون نمی ده تا من بهتر بتونم درکش کنم؟
الگوریتمهای زمانبندی مثل Round Robin یا الگوریتمهای page replacement مثل LRU را نیز می توان در این محیط شبیه سازی کرد؟
کلا baci یک محیط شبیه ساز برای تمام الگوریتمهای مربوط به سیستم عامل می تونه باشه؟
حق با شماست ، من خیلی وقت بود با این نرم افزار کار نکرده بودم ، الان که به مستندات قبلی رجوع کردم متوجه شدم یک قسمت از مرحله را نگفتم (با عرض پوزش) . قسمتی از گزارش آزمایشگاه سیستم عامل خودم را با کمی تغییر اینجا می نویسم شاید به شما کمک کنه.نقل قول:
من وقتی مسیر این فایل متنی را در 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 استفاده کنید.
3. بعد از مرحله قبل فایلی با پسوند PCO ساخته می شود که می توانید با استفاده از Bainterp.exe آنرا بصورت همروند اجرا کنید.
//If Write With C++
c:/>bacc Deker.cm
//If Write with Pascal
c:/>bapas Deker.pm
نحوه شبیه سازی همروندی:
c:/>bainterp Deker.pco
- فرآیند هایی که می باید همروند اجرا گردند باید در یک بلاک cobegin محصور شوند.
- سمافور ها در Baci شامل مقادیر صحیح غیر منفی می باشند.البته در Baci سمافورهای باینری نیز وجود دارد که مقادیر 0و1 را می پذیرد.بعد از تعریف این مقادیر می توان براحتی از توابع Wait و Signal استفاده نمود.
cobegin{
P0();
p1();
...
pn();
}
Baci قابلیت های متنوع دیگری (مانند مفاهیم مانیتور و نخ ها و ...) دارد که برای اطلاعات بیشتر بهتره به آن مستندات آن مراجعه کنید.
در آخر خروجی الگوریتم دکر ، تولید کننده /مصرف کننده ، مسئله بن بست و آرایشگران را در اینجا قرار می دهم تا ملموس تر آنرا ببینید.
Baci یک نرم افزار شبیه سازی همروندی است. برای این اجرای الگوریتم های زمانبندی و حافظه می توانید خودتان آنرا براحتی در هر زبانی پیاده سازی کنید.نرم افزار های برای شبیه سازی این موارد نیز وجود دارد .در کل Baci را برای این کار پیشنهاد نمی کنم.(اگه لازم شد بعدا در مورد الگوریتم های زمانبندی و حافظه توضیح خواهم داد)نقل قول:
الگوریتمهای زمانبندی مثل Round Robin یا الگوریتمهای page replacement مثل LRU را نیز می توان در این محیط شبیه سازی کرد؟
کلا baci یک محیط شبیه ساز برای تمام الگوریتمهای مربوط به سیستم عامل می تونه باشه؟
کلمات کلیدی جستجو: Deker، Producer Consumer، Barber Shop، همروندی، mutual exclusion ، Baci ، بن بست ، Deadlock
موفق باشید
بله می توان این کار را انجام داد، فقط باید با مفاهیم Threading بخوبی آشنا باشیدنقل قول:
با C هم میشه پیاده سازی کرد؟
الگوریتمهای همروندی را نیز میشه با هر زبانی پیاده سازی کرد مثلا C ( به جای استفاده از BACI)؟
برای Time Scheduling از ps استفاده کنید(بسیار ابزار جالبیه!)نقل قول:
نرم افزار شبیه ساز برای اینها چی هست؟
و برای Memory Management از MOSS می توانید استفاده کنید
البته نرم افزارهای شبیه ساز بسیاری وجود دارند که با جستجو می توانید آنها را بیابید.
موفق باشید
فکر نمی کنم لازم باشه کد بنویسید، می توانید برنامه را اجرا کرده و با توجه به مقادیری که Set می کنید نحوه اجری پروسه ها را به تفکیک الگوریتم ببینید.نقل قول:
برای اینها باید با java کد بنویسم ؟ شبیه سازی هم هست که با همان خانواده c بشه باهاش کار کرد؟
کد C و جاوا تفاوت زیادی با هم ندارند اصول کد نویسی و تا حدود زیادی Syntax آنها مانند هم می باشد. در هر صورت پیشنهاد می کنم این زبان را یاد بگیرید، بسیاری از ابزار های دانشگاهی با این زبان و C نوشته شده اند . اگر احیانا درس مهندسی اینترنت ،شبکه یا سیستم عامل پیشرفته (توزیع شده) را گرفتید قطعا به این زبان نیاز پیدا می کنید.
-------------------------
با تشکر از مدیرمحترم برای جلوگیری از انحراف بحث :)
برای حل مشکل ناحیه بحرانی به غیر از الگوریتمهای متغیرهای قفل ، دکر ، پیترسون سما فور و مانیتور و دستورالعمل TSL و swap الگوریتمهی دیگری هم هست؟
اینها همه با baci قابل شبیه سازی هست؟
دستورالعمل TSL و swap چه طور؟
اگر منظور شما از قفل همان الگوریتم نانوایان لمپورت است ، تقریبا همه الگوریتم ها را نام بردید و همه به جز TSL قابل شبیه سازی است.همانطور که می دانید TSL می بایست از وقفه های سخت افزاری استفاده کند و قابل پیاده سازی نمی باشد. در مورد Swap باید گفت این کار انجام پذیر است اما خطر بن بست وجود دارد.
موفق باشید
برای TSL و SwAP از چی میشه استفاده کرد؟
شما با Time Scheduling ) ps) کار کردین؟
می توانید به نوعی TSL را در Baci شبیه سازی کنید .لینک های زیر را ببینید:نقل قول:
برای TSL و SwAP از چی میشه استفاده کرد؟
tsl.cm , tsl.lst , tsl.pco
و swap را هم می توانید با Baciپیاده سازی کنید
تقریبا، کافیه یک سناریو تعریف کنید و پارامتر ها را وارد کرده و با الگوریتم های Time Scheduling آنها را شبیه سازی کنید.(برنامه نویسی خاصی نیاز ندارد)نقل قول:
شما با Time Scheduling ) ps) کار کردین؟
در document مربوط به PS نوشته الگوریتمهایFCFS,RR,SJF را ساپورت می کنه برای الگوریتمهای دیگر زمانبندی باید از چی استفاده کنیم؟
برای کار کردن با PS باید محیط برنامه نویسیjava رو کامپیوترم نصب باشه؟
کاربرد هریک از این simulator ها (baciو PSو...) برای طراحی سیستم عامل است یعنی یک محیط تست قبل از به مرحله اجرا رساندن کل سیستم عامل؟
محیطی هم برای شبیه سازی بن بست وجود داره؟
الگوریتم های مشهور همین ها هستند، برای سایر الگوریتم ها نرم افزار خاصی سراغ ندارم . شاید با جستجو بتوانید نرم افزار مورد نیاز خود را بیابید. (برای بسیاری از موارد مجبور بودم الگوریتم ها را شخصا پیاده سازی کنم ، زمانی که ابزار مورد نظر وجود نداره باید خودتان آنرا بسازید)نقل قول:
در document مربوط به PS نوشته الگوریتمهایFCFS,RR,SJF را ساپورت می کنه برای الگوریتمهای دیگر زمانبندی باید از چی استفاده کنیم؟
خیر هر Platform ی که می تواند فایل های جاوا را اجرا کند کافی است به کل محیط IDE نیازی نیست.نقل قول:
برای کار کردن با PS باید محیط برنامه نویسیjava رو کامپیوترم نصب باشه؟
اکثر این نرم افزار ها توسط دانشجویان یا اساتید در دانشگاه های معتبر ساخته شده اند و جنبه آموزشی دارند.نقل قول:
کاربرد هریک از این simulator ها (baciو PSو...) برای طراحی سیستم عامل است یعنی یک محیط تست قبل از به مرحله اجرا رساندن کل سیستم عامل؟
به پست صفحه قبل دقت کنید! یکی از مثالهایی که با Baci شبیه سازی کردم همین بن بست است!نقل قول:
محیطی هم برای شبیه سازی بن بست وجود داره؟
بلهنقل قول:
یعنی تو یک محیط برنامه نویسی از طریق multitreading؟
شاید منظورم را بد گفتم منظورم JVM یا Java Virtual Machine بود :) که معمولا بر روی ویندوز XP نصب است.برای اجرای این نرم افزار Batch Fileی در دایرکتوری آن به نام runps موجود است که کافیه آنرا اجرا کنید.نقل قول:
چه platform هایی این امکان را دارند
بله ، مانند همان مطالبی که شما در درس سیستم عامل می خوانید.نقل قول:
آموزش طراحی سیستم عامل؟
موفق باشید
یعنی تو یک محیط برنامه نویسی از طریق multitreading؟
بله
با زبان c میشه همه این الگوریتمهای را شبیه سازی کرد یا زبان C#?
دقیقا ، با هر دو زبان می توانید این کار را انجام دهید فقط باید با مفاهیم Multi Threading تا حدودی آشنا باشید.
(پروژه سیستم های توزیع شده را با #C نوشتم و تمام امکاناتی که لازم داشتم را این زبان در اختیار داشت ، اما C هم همین امکانات را در خود دارد بسته به آشنایی شما به یکی از زبانهای فوق می توانید از هر دو استفاده کنید)
کسی مساله خوانندگان نویسندگان رو با سمافورها با زبان سی نوشته داره به من بده
اگه کسی مساله خوانندگان نوسیندگان رو با سمافورها با سی نوشته به من میل بزنه
azarboy1@yahoo.com
برای حل مسئله تولید کننده و مصرف کننده با استفاد از سمافور در baci برای پروسه های تولید کننده و مصرف کننده باید چه جوری کد بنویسیم؟
سعی کنید به کدی که من نوشتم اکتفا نکنید، و خودتان آنرا بنویسید.
// * * * * * * * * * * 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 ها باید مقدار اولیه بگیرند؟
برای استفاده از مانیتور در مسئله تولید کننده و مصرف کننده باید پروسیجرهای درون مانیتور برای وارد کردن و حذف کردن داده ، باید درون پروسیجرهای تولید کننده و مصرف کننده مثل فراخوانی متدی از یک کلاس باشد؟
منظور قسمت اول سوال را متوجه نشدم :(
در اینجا قسمت مانیتور را ببینید ، اگر مشکل حل نشد بپرسید
من در مسئله تولید کننده و مصرف کننده پروسیجرهای درون مانیتور را که برای وارد کردن و حذف کردن داده از بافر نوشتم، درون پروسیجرهای تولید کننده و مصرف کننده فراخوانی کردم(مثل فراخوانی متدی از یک کلاس) !! این کار درسته ؟ ولی برنامه من کامپایل نمی شه؟
بهتره کدتان را اینجا بنویسید
(در کل شما باید هر دو قسمت تولید کننده و مصرف کننده را در یک مانیتور بنویسید )
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 چگونه میشه دسترسی داشت؟
تفاوت الگوریتم دکر و پترسون در چیست؟
کد شما منطقا درست است اما از لحاظ 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 فقط برای این هست که ما بتونیم نحوه اجرای پروسس هایی که به صورت همروند اجرا می شوند را ببینیم؟( تا در ک بهتری پیدا کنیم برای پیاده سازی آنها در یک محیط برنامه نویسی که همروندی را پشتیبانی می کنه؟)
ممکنه الگوریتم پایان یافته شده باشد، تصویری از یک بن بست را قبلا Attach کرده ام . (به شکل توجه کنید)نقل قول:
اگر اجرای فایل .pco یک خروجی ادامه دار نده و در عرض چند ثانیه بعد از اجرا بسته شود نشانه بن بست است؟
bald یک لینکر است ، مثلا شما برنامه ای نوشته اید که به کتابخانه ای خاصی (مثلا stdio.h) نیاز دارید، با این برنامه می توانید آنرا به پروژه خود لینک کنیدنقل قول:
جزو برنامه های baci سه برنامه به نامهای badis , baar, bald است اینها برای چی هستند؟
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 را از اینجا دریافت کنید.
من این ها را در صفحه bacc وارد می کنم صفحه بسته میشه help ای نشون نمیده!!
این بن بست را چه جوری باید شبیه سازی کنم؟
badis یک Disassembler است که فایل pco شما را به کد ماشین تبدیل می کند و شما می توانید آنرا Debug و یا Trace نمائید.
baci کتابخانه stdio.h را ساپورت می کند؟برای چه توابعی؟
از طریق bald چه جوری میشه یک کتابخانه را به برناممون لینک کنیم؟
فرق فایلی که badis تولید می کنه با فایل lst. چیه؟
در زبانهای سیستمی مثل C و java و... متغیر نوع سمافور و پروسیجرهای نوع مانیتور و دستورات tsl پشتیبانی میشوند؟ در آنها دستور tsl جزو توابع کتابخانه است یا باید آنها را تعریف کرد؟
چرا محیط baci طراحی شده مگه نمیشه اجرای موازی پروسسها را در یک محیط برنامه نویس مثل c دید؟
شما باید وارد محیط Command Prompt شوید و سپس دستور مورد نظرتان را اجرا کنید (در قسمت run ویندوز دستور cmd را اجرا کنید)نقل قول:
من این ها را در صفحه bacc وارد می کنم صفحه بسته میشه help ای نشون نمیده!!
کافیه یکی از الگوریتم هایی که خطر بن بست را دارند شبیه سازی کنید.مثلا یک قفل سراسری تعریف کنید که هر پروسه که آنرا بخواهید بگیرد آنرا True کند (نمونه آن در کتاب های سیستم عامل موجود است)نقل قول:
این بن بست را چه جوری باید شبیه سازی کنم؟
Bacci این کار را انجام نمی دهد، اما با استفاده از آن لینکر می توانید این فایل را به پروژه خود لینک کنید و از تمام توابع آن استفاده کنید.نقل قول:
baci کتابخانه stdio.h را ساپورت می کند؟برای چه توابعی؟
فایلی که در تاپیک قبلی قرار دادم حاوی فایلهای Help مربوط به سوال های شما ست ، قسمتdisasm و sepcomp را مطالعه کنید.نقل قول:
از طریق bald چه جوری میشه یک کتابخانه را به برناممون لینک کنیم؟
فرق فایلی که badis تولید می کنه با فایل lst. چیه؟
برای این موضوع بهتره به مستندات زبانهای فوق مراجعه کنید، برای این کار تجربه ای نداشتم ، اما برای یکی از پروژه های درسی که باید از مانیتور استفاده می کردم ، در #C توابع متنوعی برای این کار پیدا کردم ضمن اینکه بخوبی مانیتور در #C پشتیبانی می شود. امکان بسیار زیادی وجود دارد که این توابع در این زبانها پشتیبانی شوند ، بهتره ددر این مورد جستجو کنید.نقل قول:
در زبانهای سیستمی مثل C و java و... متغیر نوع سمافور و پروسیجرهای نوع مانیتور و دستورات tsl پشتیبانی میشوند؟ در آنها دستور tsl جزو توابع کتابخانه است یا باید آنها را تعریف کرد؟
Baci یک محیط شبیه سازی برای اجرا همروند است ، تمام این کار ها را شما می توانید در زبانی مانند C انجام دهید اما باید برای موازی کردن اجرای پروسه ها خودتان کد نویسی کنید که این کار را Baci انجام داده است . (مجبور شدم یک با ر این کار را انجام دهم و برای این کار باید خودتان یک Time Scheduler بنویسید که بصورت Preemptive زمان را بین Thread های شما و بصورت Random تقسیم کند)نقل قول:
را محیط baci طراحی شده مگه نمیشه اجرای موازی پروسسها را در یک محیط برنامه نویس مثل c دید؟
[quote]شما باید وارد محیط Command Prompt شوید و سپس دستور مورد نظرتان را اجرا کنید (در قسمت run ویندوز دستور cmd را اجرا کنید)[quote\]
در command prompt کد زیر را نوشتم :
bacc -h c:\dekker.cm بعد که اینتر را زدم گفت bacc را نمی شناسه!!!