ورود

View Full Version : الگوریتمهایی برای حل ناحیه بحرانی یا الگوریتم سمافور یا....



نغمه
یک شنبه 03 دی 1385, 22:18 عصر
در کتاب تانن بام برای درس سیستم عامل یک سری الگوریتمها گفته شده مثلا الگوریتمهایی برای حل ناحیه بحرانی یا الگوریتم سمافور یا.... کسی هست که تا به حال این الگوریتمها را کد و اجرا کرده باشه؟

whitehat
یک شنبه 03 دی 1385, 22:40 عصر
سوال شما چیه ؟
برای شبیه سازی این کد ها می توانید از Baci استفاده کنید.

نغمه
سه شنبه 05 دی 1385, 19:25 عصر
سوال شما چیه ؟
برای شبیه سازی این کد ها می توانید از Baci استفاده کنید.

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

whitehat
سه شنبه 05 دی 1385, 20:53 عصر
شما با استفاده از 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/rio/BACI/baci-pas.pdf
موفق باشید

نغمه
چهارشنبه 06 دی 1385, 09:38 صبح
برای اجرای این الگوریتمها نیاز به داشتن کد کامل سیستم عامل وتعبیه این الگوریتمها درون آن نیست؟
baci را باید روی کامپیوترم نصب کنم؟

whitehat
چهارشنبه 06 دی 1385, 14:33 عصر
برای اجرای این الگوریتمها نیاز به داشتن کد کامل سیستم عامل وتعبیه این الگوریتمها درون آن نیست؟
baci را باید روی کامپیوترم نصب کنم؟

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

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

whitehat
سه شنبه 26 دی 1385, 21:10 عصر
این برنامه تحت داس اجرا میشه، براتون ضمیمه کردم.

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

نغمه
چهارشنبه 27 دی 1385, 13:28 عصر
این برنامه تحت داس اجرا میشه، براتون ضمیمه کردم.

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


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

whitehat
چهارشنبه 27 دی 1385, 14:26 عصر
نصب لازم نیست برنامه خودتان را بنویسید و براساس اینکه 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();
}
}

نغمه
چهارشنبه 27 دی 1385, 16:06 عصر
یعنی مثلا من این کد مربوط به الگوریتم دکر را در محیط borlan c بنویسم و بعد فایل اجراییش را در bacc اجرا کنم؟

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

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

whitehat
چهارشنبه 27 دی 1385, 16:27 عصر
یعنی مثلا من این کد مربوط به الگوریتم دکر را در محیط borlan c بنویسم و بعد فایل اجراییش را در bacc اجرا کنم؟
بله

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

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

نغمه
پنج شنبه 28 دی 1385, 09:28 صبح
از راهنماییتون خیلی ممنونم
ضمننا احتمالا محیط تحت ویندوزی هم وجود داره چون من شنیدم که ازدلفی هم برای این منظور میشه استفاده کرد

نغمه
دوشنبه 30 بهمن 1385, 17:29 عصر
من کد زیر را برای تناوب قطعی نوشتم نمی دونم چه جوری باید تو 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
دوشنبه 30 بهمن 1385, 20:03 عصر
شما هر قسمتی را که می خواهید بصورت همروند انجام شود در بلاک زیر قرار دهید.


cobegin
{
}

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

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

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

نغمه
سه شنبه 01 اسفند 1385, 23:31 عصر
اصلا نیاز به نوشتن در Borland C نیست. کافیه فقط قسمتی را که می خواهید همروند ایجاد بشه در یک فایل متنی بنویسید و مسیر آنرا بدهید.
چه جوری مسیرش را بدم من وقتی bacc را کلیک می کنم bacc.exe باز میشه و میگه:
enter name of source file:

whitehat
چهارشنبه 02 اسفند 1385, 06:27 صبح
با فرض اینکه فایلی که نوشتید در درایو C و دایرکتوری MyFolder باشه ،بنویسید:


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

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

whitehat
چهارشنبه 02 اسفند 1385, 16:49 عصر
الگوریتم dekker را اجرا کردم بعد از اجرا یک فایل با پسوند .pco و یک فایل به نام MASM Listing درست کرد با پسوند .LST که تو visual studio.net باز شدند(چرا اینجا ؟) اینها چی هستند؟

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

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

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

نغمه
چهارشنبه 02 اسفند 1385, 17:41 عصر
به این فایل ها توجهی نکنید، همین که چگونگی روند اجرایی برنامه را ببنید کافی است.
این فایل ها فایلهایی برای خود نرم افزار می باشند که چون پسوند آن با یکی از پسوند های مورد پشتیبانی studio.net می باشد ، با آن باز می شود.

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


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


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

whitehat
چهارشنبه 02 اسفند 1385, 20:51 عصر
من وقتی مسیر این فایل متنی را در 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
موفق باشید

نغمه
چهارشنبه 02 اسفند 1385, 23:03 عصر
Baci یک نرم افزار شبیه سازی همروندی است. برای این اجرای الگوریتم های زمانبندی و حافظه می توانید خودتان آنرا براحتی در هر زبانی پیاده سازی کنید.[/RIGHT]
با C هم میشه پیاده سازی کرد؟
الگوریتمهای همروندی را نیز میشه با هر زبانی پیاده سازی کرد مثلا C ( به جای استفاده از BACI)؟


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

whitehat
پنج شنبه 03 اسفند 1385, 00:54 صبح
با C هم میشه پیاده سازی کرد؟
الگوریتمهای همروندی را نیز میشه با هر زبانی پیاده سازی کرد مثلا C ( به جای استفاده از BACI)؟
بله می توان این کار را انجام داد، فقط باید با مفاهیم Threading بخوبی آشنا باشید

نرم افزار شبیه ساز برای اینها چی هست؟
برای Time Scheduling از ps (http://vip.cs.utsa.edu/simulators/guides/ps/ps_doc.html#Configuration) استفاده کنید(بسیار ابزار جالبیه!)
و برای Memory Management از MOSS (http://www.ontko.com/moss/memory/user_guide.html) می توانید استفاده کنید
البته نرم افزارهای شبیه ساز بسیاری وجود دارند که با جستجو می توانید آنها را بیابید.
موفق باشید

نغمه
پنج شنبه 03 اسفند 1385, 10:00 صبح
برای Time Scheduling از ps (http://vip.cs.utsa.edu/simulators/guides/ps/ps_doc.html#Configuration) استفاده کنید(بسیار ابزار جالبیه!)
و برای Memory Management از MOSS (http://www.ontko.com/moss/memory/user_guide.html) می توانید استفاده کنید
البته نرم افزارهای شبیه ساز بسیاری وجود دارند که با جستجو می توانید آنها را بیابید.
موفق باشید
برای اینها باید با java کد بنویسم ؟ شبیه سازی هم هست که با همان خانواده c بشه باهاش کار کرد؟

whitehat
دوشنبه 07 اسفند 1385, 08:48 صبح
برای اینها باید با java کد بنویسم ؟ شبیه سازی هم هست که با همان خانواده c بشه باهاش کار کرد؟فکر نمی کنم لازم باشه کد بنویسید، می توانید برنامه را اجرا کرده و با توجه به مقادیری که Set می کنید نحوه اجری پروسه ها را به تفکیک الگوریتم ببینید.
کد C و جاوا تفاوت زیادی با هم ندارند اصول کد نویسی و تا حدود زیادی Syntax آنها مانند هم می باشد. در هر صورت پیشنهاد می کنم این زبان را یاد بگیرید، بسیاری از ابزار های دانشگاهی با این زبان و C نوشته شده اند . اگر احیانا درس مهندسی اینترنت ،شبکه یا سیستم عامل پیشرفته (توزیع شده) را گرفتید قطعا به این زبان نیاز پیدا می کنید.
-------------------------
با تشکر از مدیرمحترم برای جلوگیری از انحراف بحث :)

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

whitehat
سه شنبه 15 اسفند 1385, 21:12 عصر
اگر منظور شما از قفل همان الگوریتم نانوایان لمپورت (http://en.wikipedia.org/wiki/Lamport%27s_bakery_algorithm) است ، تقریبا همه الگوریتم ها را نام بردید و همه به جز TSL قابل شبیه سازی است.همانطور که می دانید TSL می بایست از وقفه های سخت افزاری استفاده کند و قابل پیاده سازی نمی باشد. در مورد Swap باید گفت این کار انجام پذیر است اما خطر بن بست وجود دارد.
موفق باشید

نغمه
سه شنبه 15 اسفند 1385, 21:22 عصر
برای TSL و SwAP از چی میشه استفاده کرد؟
شما با Time Scheduling ) ps) کار کردین؟

whitehat
سه شنبه 15 اسفند 1385, 21:40 عصر
برای TSL و SwAP از چی میشه استفاده کرد؟
می توانید به نوعی TSL را در Baci شبیه سازی کنید .لینک های زیر را ببینید:
tsl.cm (http://home.zcu.cz/%7Emhanus/baci/tsl.cm) , tsl.lst (http://home.zcu.cz/%7Emhanus/baci/tsl.lst) , tsl.pco (http://home.zcu.cz/%7Emhanus/baci/tsl.pco)
و swap را هم می توانید با Baciپیاده سازی کنید

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

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

whitehat
چهارشنبه 16 اسفند 1385, 16:17 عصر
در document مربوط به PS نوشته الگوریتمهایFCFS,RR,SJF را ساپورت می کنه برای الگوریتمهای دیگر زمانبندی باید از چی استفاده کنیم؟
الگوریتم های مشهور همین ها هستند، برای سایر الگوریتم ها نرم افزار خاصی سراغ ندارم . شاید با جستجو بتوانید نرم افزار مورد نیاز خود را بیابید. (برای بسیاری از موارد مجبور بودم الگوریتم ها را شخصا پیاده سازی کنم ، زمانی که ابزار مورد نظر وجود نداره باید خودتان آنرا بسازید)

برای کار کردن با PS باید محیط برنامه نویسیjava رو کامپیوترم نصب باشه؟
خیر هر Platform ی که می تواند فایل های جاوا را اجرا کند کافی است به کل محیط IDE نیازی نیست.

کاربرد هریک از این simulator ها (baciو PSو...) برای طراحی سیستم عامل است یعنی یک محیط تست قبل از به مرحله اجرا رساندن کل سیستم عامل؟
اکثر این نرم افزار ها توسط دانشجویان یا اساتید در دانشگاه های معتبر ساخته شده اند و جنبه آموزشی دارند.

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

نغمه
چهارشنبه 16 اسفند 1385, 20:19 عصر
برای بسیاری از موارد مجبور بودم الگوریتم ها را شخصا پیاده سازی کنم ، زمانی که ابزار مورد نظر وجود نداره باید خودتان آنرا بسازید!

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


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


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

whitehat
چهارشنبه 16 اسفند 1385, 20:53 عصر
یعنی تو یک محیط برنامه نویسی از طریق multitreading؟
بله

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

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

نغمه
چهارشنبه 16 اسفند 1385, 21:38 عصر
یعنی تو یک محیط برنامه نویسی از طریق multitreading؟
بله

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

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

azarboy
جمعه 18 اسفند 1385, 21:14 عصر
کسی مساله خوانندگان نویسندگان رو با سمافورها با زبان سی نوشته داره به من بده

azarboy
جمعه 18 اسفند 1385, 21:17 عصر
اگه کسی مساله خوانندگان نوسیندگان رو با سمافورها با سی نوشته به من میل بزنه
azarboy1@yahoo.com

نغمه
دوشنبه 21 اسفند 1385, 15:02 عصر
برای حل مسئله تولید کننده و مصرف کننده با استفاد از سمافور در baci برای پروسه های تولید کننده و مصرف کننده باید چه جوری کد بنویسیم؟

whitehat
دوشنبه 21 اسفند 1385, 21:35 عصر
سعی کنید به کدی که من نوشتم اکتفا نکنید، و خودتان آنرا بنویسید.


// * * * * * * * * * * 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();
}
}

نغمه
شنبه 26 اسفند 1385, 15:34 عصر
برای استفاده از مانیتور condition ها باید مقدار اولیه بگیرند؟
برای استفاده از مانیتور در مسئله تولید کننده و مصرف کننده باید پروسیجرهای درون مانیتور برای وارد کردن و حذف کردن داده ، باید درون پروسیجرهای تولید کننده و مصرف کننده مثل فراخوانی متدی از یک کلاس باشد؟

whitehat
یک شنبه 27 اسفند 1385, 19:12 عصر
منظور قسمت اول سوال را متوجه نشدم :(
در اینجا (http://www.mines.edu/fs_home/tcamp/baci/)قسمت مانیتور را ببینید ، اگر مشکل حل نشد بپرسید

نغمه
یک شنبه 27 اسفند 1385, 20:03 عصر
من در مسئله تولید کننده و مصرف کننده پروسیجرهای درون مانیتور را که برای وارد کردن و حذف کردن داده از بافر نوشتم، درون پروسیجرهای تولید کننده و مصرف کننده فراخوانی کردم(مثل فراخوانی متدی از یک کلاس) !! این کار درسته ؟ ولی برنامه من کامپایل نمی شه؟

whitehat
سه شنبه 29 اسفند 1385, 00:53 صبح
بهتره کدتان را اینجا بنویسید
(در کل شما باید هر دو قسمت تولید کننده و مصرف کننده را در یک مانیتور بنویسید )

نغمه
سه شنبه 29 اسفند 1385, 10:47 صبح
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
سه شنبه 29 اسفند 1385, 21:20 عصر
کد شما منطقا درست است اما از لحاظ 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 (http://stwww.weizmann.ac.il/g-cs/benari/jbaci/) استفاده کنید.
3- مجموعه کاملی از Help نرم افزار Baci را از اینجا (http://www.mines.edu/fs_home/tcamp/baci/bacidocpdf.tar.gz) دریافت کنید.

نغمه
پنج شنبه 02 فروردین 1386, 23:42 عصر
با اضافه کردن این فلگ ها مانند سایر دستورات می توانید قابلیت هایی را به دستورات اضافه کنید
مثال برای گرفتن 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
دوشنبه 06 فروردین 1386, 11:42 صبح
من این ها را در صفحه 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 تقسیم کند)

نغمه
چهارشنبه 15 فروردین 1386, 07:14 صبح
[quote]شما باید وارد محیط Command Prompt شوید و سپس دستور مورد نظرتان را اجرا کنید (در قسمت run ویندوز دستور cmd را اجرا کنید)[quote\]

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

نغمه
چهارشنبه 15 فروردین 1386, 07:16 صبح
[quote]شما باید وارد محیط Command Prompt شوید و سپس دستور مورد نظرتان را اجرا کنید (در قسمت run ویندوز دستور cmd را اجرا کنید)[quote\]

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

whitehat
چهارشنبه 15 فروردین 1386, 09:32 صبح
در command prompt کد زیر را نوشتم :
bacc -h c:\dekker.cm بعد که اینتر را زدم گفت bacc را نمی شناسه!!!
شما باید bacc در Path سیستم موجود باشد، و الا باید این دستور را در فولدری اجرا کنید که bacc در آن قرار گرفته

نغمه
جمعه 17 فروردین 1386, 12:03 عصر
الگوریتم پترسون برای اجرا در محیط Baci را چگونه باید بنویسیم برای بیش از دو پروسس؟

whitehat
جمعه 17 فروردین 1386, 23:17 عصر
نوشتن این الگوریتم برای بیش از دو پروسس تفاوت چندانی با حالت دو پروسه ای ندارد ، فقط شما باید یک متغیر turn داشته باشید که بین پروسه ها گردش کند (توجه داشته باشید که Baci فقط یک ابزار است و الگوریتم هایی که وجود دارد باید در همه جا بخوبی کار کنند)
نمونه ای از الگوریتم پترسن را برای بیش از دو پروسه در اینجا (http://everything2.com/index.pl?node_id=1217485&lastnode_id=0) ببینید

azadeh_2002
چهارشنبه 22 فروردین 1386, 10:03 صبح
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
چهارشنبه 22 فروردین 1386, 13:43 عصر
با سلام و عرض خیر مقدم ، لطفا قبل از هر کار قوانین سایت را مطالعه فرمائید :چشمک: و پست های خود را فارسی تایپ کنید.
این برنامه را شما باید در محیط 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
پنج شنبه 23 فروردین 1386, 14:46 عصر
سلام...من دستوراتی که شما گفتید انجام دادم و فایل را در not padبه نام barber .cmذخیره کردم.زمانی که نام فایل را می خواهد به صورت bacc barber.cmمی دهم ولی پیغام می دهد نمی تواند باز کند.من به صورت\ D:\my folder\ barber.cmهم دادم ولی باز error داد تشکر فراوان از کمک شما

whitehat
پنج شنبه 23 فروردین 1386, 18:57 عصر
سلام...من دستوراتی که شما گفتید انجام دادم و فایل را در not padبه نام barber .cmذخیره کردم.زمانی که نام فایل را می خواهد به صورت bacc barber.cmمی دهم ولی پیغام می دهد نمی تواند باز کند.من به صورت\ D:\my folder\ barber.cmهم دادم ولی باز error داد تشکر فراوان از کمک شما
امیدوارم نام فایل اشتباه تایپی باشد و فاصله نداشته باشد. این پیغام زمانی روی می دهد که Baci نتواند فایل را پیدا کند شما احتمالا مسیر درست را به آن نمی دهید. دقت کنید که حتما پسوند فایل را CM بدهید، دقت کنید اگر فایل را با ویندوز می سازید نمایش پسوند ها را فعال کنید و مطمئن شوید پسوند CM باشد نه CM.TXT
برای راحتی فایلی که ساختید را در پوشه Baci قرار داده و سپس دستور bacc را اجرا کنید این فرمان از شما نام فایل را می خواهد که بعد نام فایل را به همراه پسوند آن به آن دهید اگر همه کار را درست انجام داده باشید پیغامی مبتنی بر ساخته شدن فایل Pco خواهید گرفت.
در صورتی که مشکل داشتید بپرسید
موفق باشید

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

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

نغمه
جمعه 24 فروردین 1386, 16:39 عصر
نوشتن این الگوریتم برای بیش از دو پروسس تفاوت چندانی با حالت دو پروسه ای ندارد ، فقط شما باید یک متغیر turn داشته باشید که بین پروسه ها گردش کند (توجه داشته باشید که Baci فقط یک ابزار است و الگوریتم هایی که وجود دارد باید در همه جا بخوبی کار کنند)
نمونه ای از الگوریتم پترسن را برای بیش از دو پروسه در اینجا (http://everything2.com/index.pl?node_id=1217485&lastnode_id=0) ببینید

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



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

whitehat
شنبه 25 فروردین 1386, 09:47 صبح
در این لینک در مورد بیش از دو پروسس چیزی نگفته میشه بیشتر راهنمایی کنید
این الگوریتم همان الگوریتم پترسن است، اگر دقت کنید متغیر turn و متغیر Flag بصورت آرایه در آمده که هر خانه آن یک پروسه را نشان می دهد. i نشان دهنده پروسه iام می باشد و متغیر L نشان دهنده تعداد پروسه ها می باشد. الگوریتم پترسن به پروسه ای اجازه ورود به ناحیه بحرانی را می دهد که متغیر turn را بدست آورده باشد و اولویت آن از سایر پروسه هایی که turn را داشته باشند ، بیشتر باشد.

یک روش برای ناحیه بحرانی از کار انداختن وقفه است این کار را با چه دستوری میشه انجام داد؟
این روش فقط یک راه حل است ،اما راه حل عملی نمی باشد. چون یک سیستم نیاز به وقفه دارد و از کار انداختن وقفه باعث گرسنگی یا بن بست خواهد شد. الگوریتم هایی که بصورت nonpreemptive (http://en.wikipedia.org/wiki/Preemption_%28computing%29)عمل می کنند معمولا از این روش استفاده می کنند. (راه حلی برای سوال شما پیدا سراغ ندارم :( )

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

azadeh_2002
شنبه 25 فروردین 1386, 18:29 عصر
سلام با تشکر فراوان از زحمات شما
من در 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
شنبه 25 فروردین 1386, 20:59 عصر
سلام با تشکر فراوان از زحمات شما
من در 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 است باید مسیر آنرا نیز بنویسید)
اگر دستور بالا جواب نداد بدون پسوند امتحان کنید ، خروجی باید چیزی شبیه این (http://www.barnamenevis.org/forum/attachment.php?attachmentid=7021&d=1172080450)باشه

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

whitehat
یک شنبه 26 فروردین 1386, 20:50 عصر
دوست عزیز اینجا محلی برای تبادل اطلاعات و پرسش و پاسخ است http://qsmile.com/qsimages/38.gif
منظور شما از بسته شدن چیه ؟ یا باید دستور یک خروجی بدهد یا پیغام خطا؟
آیا شما این دستور را در Command Prompt اجرا می کنید(یعنی با دستور cmd وارد می شوید و بعد دستور را اجرا می کنید؟). فایل barber.pco در کجا ذخیره شده ؟

azadeh_2002
دوشنبه 27 فروردین 1386, 10:25 صبح
سلام من صفحه bainterp .exeنمی بینم..وقتی اسم فایل را می زنم..نه پیغام خطا نه خروجی..
نه من در bainterp .exe می زنم...barber.pcoدر درایو Dکنار bainterp.exe ذخیره کردم.من در cmd این کار را نمی کنم. مرسی از راهنماییتون

whitehat
دوشنبه 27 فروردین 1386, 15:46 عصر
شما این کار را باید در cmd انجام دهید، دلیلش اینه که این الگوریتم اجرا میشه و تمام میشه و سپس بسته میشه! و شما خروجی را نمی بینید،اگر این کار را در cmd انجام دهید بعد از تمام شدن الگوریتم به خط فرمان بر می گردد و شما خروجی را خواهید دید

azadeh_2002
دوشنبه 27 فروردین 1386, 19:51 عصر
سلام صمیمانه از راهنماییتون ممنونم...با لاخره خروجی را دیدم..
کمال تشکر را از همکا ریتون دارم..
خدا نگه دار

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

whitehat
دوشنبه 03 اردیبهشت 1386, 07:33 صبح
برای این کار سه راه دارید یکی اینکه از صفحه عکس بگیرید و به 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 (در همان دایرکتوری) ذخیره می شود
موفق باشید

نغمه
جمعه 07 اردیبهشت 1386, 11:57 صبح
بعد این فایل متنی کجا ذخیره می شود؟

whitehat
جمعه 07 اردیبهشت 1386, 12:44 عصر
اگر مسیری به آن ندهید در کنار فایل baintrep دخیره می شود

najmeh salehi
دوشنبه 10 اردیبهشت 1386, 11:19 صبح
با سلام
من کد و الگوریتم baker (نانوایی) را به زبان c++ می خواهم
با تشکر

نغمه
دوشنبه 10 اردیبهشت 1386, 14:34 عصر
بعد این فایل متنی کجا ذخیره می شود؟

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

نغمه
دوشنبه 10 اردیبهشت 1386, 14:43 عصر
من ps.zip( برای الگوریتمهای زمانبندی) را دانلود کردم برای کار با این محیط در ویندوز در خط فرمان، runps.bat را اجرا کردم به صورت زیر شد باید چی کار کنم؟

whitehat
دوشنبه 10 اردیبهشت 1386, 16:01 عصر
برای من ذخیره نمیشه چه جوری باید مسیر بدم؟
مسیر را در قبل از نام فایل خروجی بنویسید


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

نغمه
دوشنبه 10 اردیبهشت 1386, 20:12 عصر
مسیر را در قبل از نام فایل خروجی بنویسید

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


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

whitehat
سه شنبه 11 اردیبهشت 1386, 10:11 صبح
مثلا اگر بخوام در درایو c ذخیره کنم باید چه کدی بنویسم؟


bainterp barber.pco > c:\output.txt


چه نسخه ای از java مناسب ps است (me,ee,se)؟
هرنسخه ای که بتواند java را اجرا کند. (من از JRE استفاده می کنم)

نغمه
سه شنبه 11 اردیبهشت 1386, 15:06 عصر
هرنسخه ای که بتواند java را اجرا کند. (من از JRE استفاده می کنم)

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

whitehat
چهارشنبه 12 اردیبهشت 1386, 08:15 صبح
اگر می خواهید از این سایت بگیرید باید ابتدا Sun Download Manager را نصب کنید .
نسخه 5.0 را می توانید از اینجا (http://www.download.com/Java-2-Platform-Standard-Edition-J2SE-Runtime-Environment-JRE-5-0/3000-2417_4-10495818.html)بگیرید
فکر می کنم تاپیک داره از بحثش خارج می شود، لطفا سوالات را در مورد موضوع تاپیک مطرح کنید
با تشکر

نغمه
چهارشنبه 12 اردیبهشت 1386, 20:46 عصر
من بالاخره جاوا را نصب کردم و پنجره اصلی شبیه ساز باز شد حالا چه جوری باید پروسس ها را به صورت ورودی به این شبیه ساز بدم برای زمانبندی آنها؟

whitehat
سه شنبه 18 اردیبهشت 1386, 15:56 عصر
شما باید با استفاده از فایل های همراه با این نرم افزار این کار را انجام دهید، برای اطلاعات بیشتر به اینجا (http://vip.cs.utsa.edu/simulators/guides/ps/ps_doc.html#Overview) بروید

نغمه
پنج شنبه 20 اردیبهشت 1386, 07:22 صبح
من این راهنما را خوندم و فایلهای مربوطه را دانلود کردم و صفحه Process Scheduling Simulator هم باز شد ولی نمی دونم چه جوری باید در این شبیه ساز یک experiment جدید تعریف کنم

whitehat
شنبه 22 اردیبهشت 1386, 17:01 عصر
من متوجه منظور شما نشدم،در کل شما باید دو فایل داشته باشید
فایل extension .exp (http://vip.cs.utsa.edu/simulators/guides/ps/ps_doc.html#The%20Experiment%20File) و فایل extension .run (http://vip.cs.utsa.edu/simulators/guides/ps/ps_doc.html#The%20Experimental%20Run%20File)
بعد آنها را می توانید جایگزین فایلهای موجو در دایرکتوری کنید،یا خود آنها را ویرایش کنید
بعد با استفاده از گزینه Run آنها را اجرا کنید

نغمه
شنبه 22 اردیبهشت 1386, 20:55 عصر
من ps.zip را دانلود کردم 5 فایل زیر درون آن بود runps.bat را که اجرا می کنم پنجره ای باز می شه که بعد از این دیگه نمی دونم باید چی کار کنم!
PS.jar
Jeli.jar
psconfig
myrun.run
myexp.exp
runps.bat

whitehat
یک شنبه 23 اردیبهشت 1386, 07:19 صبح
شما باید تغییرات خود را در فایل های myrun.run و myexp.exp اعمال کنید

ahang_ziba
دوشنبه 24 اردیبهشت 1386, 16:22 عصر
سلام
من می خوام الگوریتم first fit را کد نویسی کنم اما در پیاده سازی الگوریتمش مشکل دارم میشه منو راهنمایی کنید؟
با تشکر

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

ahang_ziba
سه شنبه 25 اردیبهشت 1386, 16:20 عصر
سلام
آخه آرایه خونه هاش همه 1 ظرفیت ثابت دارند در حالیکه شاید فضاهای مورد درخواست کاربر زیادتر از مقدار از پیش تعیین شده آرایه باشه؟
با تشکر

نغمه
جمعه 28 اردیبهشت 1386, 15:45 عصر
تمام الگوریتمهای مربوط به مدیریت حافظه و مدیریت پروسس و زمانبندی را می توان با زبان c پیاده سازی کرد؟

whitehat
شنبه 29 اردیبهشت 1386, 08:33 صبح
آخه آرایه خونه هاش همه 1 ظرفیت ثابت دارند در حالیکه شاید فضاهای مورد درخواست کاربر زیادتر از مقدار از پیش تعیین شده آرایه باشه؟
دوست عزیز ابتدا شما باید مشخص کنید می خواهید از قطعه بندی استفاده کنید یا صفحه بندی؟

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

ahang_ziba
دوشنبه 31 اردیبهشت 1386, 15:26 عصر
با سلام
من متوجه دلیل شما از این سوال نشدم ولی واسه نوشتن برنامه قطعه بندی را ترجیح میدم
میشه در مورد الگوریتم هایی که نوشتید(خوانندگان و نویسندگان و آرایشگر ) یه توضیح بدید؟(در مورد متغیرهاو...)
ممنون میشم
با تشکر

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

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

whitehat
یک شنبه 06 خرداد 1386, 07:56 صبح
در الگوریتم های تخصیص حافظه این سیستم عامل است که فضای مورد نیاز برنامه را به برنامه تخصیص می دهد، بعضی از برنامه های هستند که برنامه از حافظه 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
یک شنبه 06 خرداد 1386, 12:41 عصر
با سلام
خوب مشکل من هم در پیاده سازی این الگوریتم همینه!
من نمیدونم چطور این فضا رو شبیه سازی کنم تا وقتی 1 فضا توسط درخواست کاربر اشغال شد و از همون خانه اگر مقداری فضا باقی ماند و الگوریتم برای بار بعد که search فضای خالی رو از سر میگیره چطور دوباره از فضای آن خانه خالی استفاده کنه؟
(مثال عددی: مثلا خانه اول ما 100 تا فضا داره و کاربر 60 تا تقاضا میکنه خوب از همین خانه اول 40 تا باقی میمونه و برای درخواست دوم کاربر این فضا هم باید به عنوان فضای خالی در نظر گرفته بشه تا مثلا اگر کاربر تقاضای فضای 40 یا کمتر را داد همین فضای باقی مانده به درخواست دومش تخصیص یابد )
تا اونجا که من میدونم این مطلب بوسیله آرایه قابل پیاده سازی نیست
اگه میشه منو سریعتر راهنمایی کنید چون من روی این مطلب خیلی فکر کردم ولی چیزی دستگیرم نشد؟؟؟؟
با تشکر

whitehat
یک شنبه 06 خرداد 1386, 13:17 عصر
مثال عددی: مثلا خانه اول ما 100 تا فضا داره ...
منظور شما ازخانه چیه؟
مثالی که من زدم برای یک صفحه است ،حال اگر می خواهید چند صفحه داشته باشید می توانید یک ماتریس به جای یک آرایه تعریف کنید که هر سطر یا ستون آن یک صفحه باشد

ahang_ziba
یک شنبه 06 خرداد 1386, 20:46 عصر
سلام
شما گفتید واسه پیاده سازی میشه از آرایه استفاده کرد منظور من هم از خانه . خانه اول آرایه بود - حالا اگر میشه سوال قبل منو با این فرض جواب بدید
با تشکر

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

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

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

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

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

mojgan.net
چهارشنبه 12 دی 1386, 07:22 صبح
سلام
من یه کتابی رو بهتون معرفی می کنم که تمام این الگو ریتم ها رو داخل اون نوسینده اون کتاب نوشته.
اگر هم این کتاب رو نتونستید پیدا کنید من براتون اون رو می تونم پست کنم.
((سیستم های عامل_نویسنده مهندس اکبر پور)) این کتاب رفرنس این ترم من واسه درس سیستم عامل و استاد این درس هم نویسنده همین کتاب اگه بازم هم سوالی داشتید به من بگید تا از ایشون بپرسم و یا کتاب و واستون پست کنم

Mahdi.Kiani
چهارشنبه 12 دی 1386, 08:31 صبح
سلام
من یه کتابی رو بهتون معرفی می کنم که تمام این الگو ریتم ها رو داخل اون نوسینده اون کتاب نوشته.
اگر هم این کتاب رو نتونستید پیدا کنید من براتون اون رو می تونم پست کنم.
((سیستم های عامل_نویسنده مهندس اکبر پور)) این کتاب رفرنس این ترم من واسه درس سیستم عامل و استاد این درس هم نویسنده همین کتاب اگه بازم هم سوالی داشتید به من بگید تا از ایشون بپرسم و یا کتاب و واستون پست کنم

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

animove
پنج شنبه 29 فروردین 1387, 19:58 عصر
می خواستم بدونم که خود #c هم امکاناتی برای برنامه نویسی همروند داره ؟
مساله تولید کننده ومصرف کننده رو با سمافور یا با مانیتور چطوری میشه با #c حل کرد؟

MozenAbasi
جمعه 30 فروردین 1387, 10:12 صبح
الگوریتم دکر نگارش 5 را برای بیش از 2 پروسسور می خواستم . ممنون

mary81
چهارشنبه 11 اردیبهشت 1387, 10:07 صبح
اگر ممكنه يك نرم افزاره همروند برام بزارين
هر چي سعي كردم نتونستم download كن

whitehat
چهارشنبه 11 اردیبهشت 1387, 11:33 صبح
از اينجا (http://barnamenevis.org/forum/attachment.php?attachmentid=6470&d=1168970788)دانلود كنيد

ali_mp64
دوشنبه 16 اردیبهشت 1387, 23:35 عصر
ميشه يه لينك دانلود ديگه بزارين ؟

whitehat
دوشنبه 16 اردیبهشت 1387, 23:36 عصر
لینک مشکلی نداره ، با دانلود منیجر ها دانلود نکنید:)
بر روی اینجا در پست قبل کلیک کنید

paryie_dariaii
پنج شنبه 30 خرداد 1387, 08:09 صبح
سلام.خسته نباشید.کسی می تونه همین برنامه رو با مانیتور برا من بزاره؟ممنون میشم.من اصلا مانیتور رو یاد نگرفتم.حتی الامکان با جاوا.با سمافور تو جاوا اینجوری میشه


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
سه شنبه 19 شهریور 1387, 20:53 عصر
سلام ميشه يكم بيشتر در مورد baci و توابع اون توضيح بديد

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


(http://www.forum.vbnet.ir/viewtopic.php?f=9&t=128)

whitehat
جمعه 22 شهریور 1387, 01:54 صبح
سلام ميشه يكم بيشتر در مورد baci و توابع اون توضيح بديد
اگر به صفحات اولیه همین پست مراجعه کنید می توانید مطالب مفیدی را در رابطه با BACI و مثالهایی از الگوریتم هایی که در آن پیاده سازی شده را پیدا کنید

saruneh
دوشنبه 25 شهریور 1387, 23:16 عصر
مشگل اینجاست که در 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
سه شنبه 03 دی 1387, 13:35 عصر
می خوام مساله خوانندگان و نویسندگان یا تولید کننده ومصرف کننده رو بدون ترد بنویسم میشه کمکم کنید؟؟؟چه جوری همگامی رو در ویندوز اجرا کنم ؟

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

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

علی سبزقبایی
یک شنبه 13 اردیبهشت 1388, 22:27 عصر
سلام من زیاد آشنایی با این موضوع ندارم اگر کسی میتونه به طور کامل برام توضیح بده

whitehat
دوشنبه 14 اردیبهشت 1388, 23:49 عصر
سلام من زیاد آشنایی با این موضوع ندارم اگر کسی میتونه به طور کامل برام توضیح بده
در این تاپیک به موضوع های مختلفی اشاره شده که هر کدام توضیح کافی دارند، ابتدا صفحات قبل را مطالعه کنید و در صورت نیاز سوال خود در مورد موضوع مورد نظر بیان کنید

va_sha_114
پنج شنبه 17 اردیبهشت 1388, 23:33 عصر
مثل اینکه کسی بلد نبود
اما خودم فهمیدم چطوریه
گفتم توضیح بدم شاید به درد کسی بخوره
برای این کار باید از 5تا سمافور باید استفاده کنی 2تا برای مشخص کردن جهت ها و یکی برای هماهنگ کننده و 2تا هم برای حرکت از 2 جهت مختلف و چک می کنی جهت را تشخیص میدی و هماهنگ کننده را Wait می کنی و حرکتت را شروع می کنی

as.moosavian
یک شنبه 24 خرداد 1388, 11:39 صبح
سلام
راه حلي براي مساله خوانندگان و نويسندگان در يكي از كتابهاي سيستم عامل وجود دارد، اما وقتي ميخواهم اين كد را در 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
سه شنبه 09 تیر 1388, 13:12 عصر
دوست عزيز كدت رو توي تگ بزار كه قابل فهم باشه

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

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

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

yasemi
جمعه 20 فروردین 1389, 14:46 عصر
اگه کسی برنامه کامل هر کدام از الگوریتمها رو داره بزاره البته با همین نرم افزار jbaci کار کنه ممنون میشم

zhaleh.mp
سه شنبه 18 آبان 1389, 00:53 صبح
سلام دوستان .
من باید یه برنامه ای رو که سمافور توش استفاده می شه با جاوا بنویسم،
اما مشکلی که دارم اینه که نمی دونم متد های wait و signal
توی چه کتابخونه ای از جاوا هستن؟
واینو هم نمیدونم که اگه بخوام چند فرایند رو توی main هم زمان صدا بزنم واسه اجرا باید از چه تابعی استفاده کنم ؟
در واقع نمی دونم توی جاوا چه تابعی کار parbegin رو انجام می ده؟؟
ممنون می شم راهنماییم کنید.

sinatra25
شنبه 08 بهمن 1390, 23:09 عصر
سلام
هر کدام از دوستان که الگوریتم غذا خوردن فیلسوف ها رو بوسیله سمافور و مانیتور تو Jbaci پیاده کرده ممنون میشم کدش رو برای استفاده بقیه اینجا قرار بده

salam8
شنبه 04 آذر 1391, 10:38 صبح
سلام
من تمام الگوریتم های حل مسائله M.E به روش نرم افزاری آقای دکر رو میخواستم
همراه با توضیح کامل لطفا...........مرسی

salam8
پنج شنبه 23 آذر 1391, 15:54 عصر
سلام
حل مسائله ی تولید کننده و مصرف کننده با استفاده از سمافور، زمانیکه تعداد خانه های بافر 100 میباشد، برنامه اش چگونه میشود
میشه این برنامه را بنویسید؟؟؟؟؟؟؟؟؟؟

saeedkarimiuut
شنبه 28 دی 1392, 14:13 عصر
سلام دوستان کسی هست راهنمایی کنه که چطوری الگوریتم فیلسوفان خورنده رو با استفاده از نخ ها توی C# پیاده سازی کرد؟!؟!