به نام خدا
انحصار متقابل و همگام سازی درسیستم عامل
Operating Systems
مباحث این فصل:
اصول همزمانی
انحصار متقابل : رویکرد های نرم افزاری
انحصار متقابل : حمایت سخت افزار
راهنماها
ناظرها
تبادل پیام
مساله خوانندگان و نویسندگان
سوالات دوره ای
وظایف سیستم عامل
پس از روشن نمودن کامپیوتر، لولین برنامه ای که اجراء می گردد ، مجموعه دستوراتی می باشند که در حافظه ROM ذخیره و مسئول بررسی صحت عملکرد امکانات سخت افزاری موجود می باشند. برنامه فوق (POST) ، پردازنده ، حافظه و سایر عناصر سخت افزاری را بررسی خواهد کرد . پس از بررسی موفقیت آمیز برنامه POST ، در ادامه درایوهای ( هارد ، فلاپی ) سیستم فعال خواهند شد. در اکثر کامپیوترها ، پس از فعال شدن هارد دیسک ، اولین بخش سیستم عامل با نام Bootstrap Loader فعال خواهد شد. برنامه فوق صرفا" دارای یک وظیفه اساسی است : انتقال ( استقرار ) سیستم عامل در حافظه اصلی و امکان اجرای آن . برنامه فوق عملیات متفاوتی را یه منظور استفرار سیستم عامل در حافظه انجام خواهد داد.
سیستم عامل دارای وظایف زیر است :
مدیریت پردازنده
مدیریت حافظه
مدیریت دستگاهها ( ورودی و خروجی )
مدیریت حافظه جانبی
اینترفیس برنامه های کاربردی
رابط کاربر
وظایف شش گانه فوق ، هسته عملیات در اکثر سیستم های عامل است . در ادامه به تشریح وظایف فوق اشاره می گردد :
مدیریت پردازنده مدیریت پردازنده دو وظیفه مهم اولیه زیر را دارد :
ایجاد اطمینان که هر پردازه و یا برنامه به میزان مورد نیاز پردازنده را برای تحقق عملیات خود ، اختیار خواهد کرد.
استفاده از بیشترین سیکل های پردازنده برای انجام عملیات
ساده ترین واحد نرم افزاری که سیستم عامل یه منظور زمانبندی پردازنده با آن درگیر خواهد شد ، یک پردازه و یا یک Thread خواهد بود. موقتا" می توان یک پردازه را مشابه یک برنامه در نظر گرفت ، در چنین حالتی مفهوم فوق ( پردازه ) ، بیانگر یک تصویر واقعی از نحوه پردازش های مرتبط با سیستم عامل و سخت افزار نخواهد بود. برنامه های کامپیوتری ( نظیر واژه پردازها ، بازیهای کامپیوتری و …) در حقیقت خود یک پردازه می باشند ، ولی برنامه های فوق ممکن است از خدمات چندین پردازه دیگر استفاده نمایند. مثلا" ممکن است یک برنامه از پردازه ای یه منظور برقراری ارتباط با سایر دستگاههای موجود در کامپیوتر استفاده نماید. پردازه های فراوان دیگری نیز وجود دارد که با توجه به ماهیت عملیات مربوطه ، بدون نیاز به محرک خارجی ( نظیر یک برنامه ) فعالیت های خود را انجام می دهند. یک پردازه ، نرم افزاری است که عملیات خاص و کنترل شده ای را انجام می دهد. کنترل یک پردازه ممکن است توسط کاربر ، سایر برنامه های کاربردی و یا سیستم عامل صورت پذیرد.
سیستم عامل با کنترل و زمانبندی مناسب پردازه ها زمینه استفاده از پردازنده را برای آنان ، فراهم می نماید. در سیستم های " تک – کاره " ، سیستم زمانبندی بسیار روشن و مشخص است . در چنین مواردی، سیستم عامل امکان اجرای برنامه را فراهم و صرفا" در زمانیکه کاربر اطلاعاتی را وارد و یا سیستم با وقفه ای برخورد نماید ، روند اجراء متوقف خواهد شد. وقفه ، سیگنال های خاص ارسالی توسط نرم افزار و یا سخت افزار برای پردازنده می باشند. در چنین مواردی منابع صادر کننده وقفه درخواست برقراری یک ارتباط زنده با پردازنده برای اخذ سرویس و یا سایر مسائل بوجود آمده ، را می نمایند. در برخی حالات سیستم عامل پردازه ها را با یک اولویت خاص زمانبندی می نماید . در چنین حالتی هر یک از پردازه ها با توجه به اولویت نسبت داده شده به آنان ، قادر به استفاده از زمان پردازنده خواهند بود. در اینچنین موارد ، در صورت بروز وقفه ، پردازنده آنها را نادیده گرفته و تا زمان عدم تکمیل عملیات مورد نظر توسط پردازنده ، فرصت پرداختن به وقفه ها وجود نخواهد داشت . بدیهی است با توجه به نحوه برخورد پردازنده ( عدم توجه به وقفه ها ) ، در سریعترین زمان ممکن عملیات و فعالیت جاری پردازنده به اتمام خواهد رسید. برخی از وقفه ها با توجه به اهمیت خود ( نظیر بروز اشکال در حافظه و یا سایر موارد مشابه ) ، قابل اغماص توسط پردازنده نبوده و می بایست صرفنظر از نوع و اهمیت فعالیت جاری ، سریعا" به وقفه ارسالی پاسخ مناسب را ارائه گردد.
پردازنده ، با توجه به سیاست های اعمال شده سیستم عامل و بر اساس یک الگوریتم خاص ، در اختیار پردازه های متفاوت قرار خواهد گرفت . در چنین مواردی پردازنده مشغول بوده و برای اجراء ، پردازه ای را در اختیار دارد. در زمانیکه پردازنده درگیر یک پردازه است ، ممکن است وقفه هائی از منابع متفاوت نرم افزاری و یا سخت افزاری محقق گردد. در چنین وضعیتی با توجه به اهمیت و جایگاه یک وقفه ، پردازنده برخی از آنها را نادیده گرفته و همچنان به فعالیت جاری خود ادامه داده و در برخی موارد با توجه به اهمیت وقفه ، فعالیت جاری متوقف و سرویس دهی به وقفه آغاز خواهد شد.
در سیستم های عامل " تک – کاره " ، وجود وقفه ها و نحوه مدیریت آنها در روند اجرای پردازه ها تاثیر و پیچیدگی های خاص خود را از بعد مدیریتی بدنبال خواهد داشت . در سیستم های عامل |"چند – کاره " عملیات بمراتب پیچیده تر خواهد بود. در چنین مواردی می بایست این اعتقاد بوجود آید که چندین فعالیت بطور همزمان در حال انجام است . عملا" پردازنده در هر لحظه قادر به انجام یک فعالیت است و بدیهی است رسیدن به مرز اعتقادی فوق ( چندین فعالیت بطور همزمان ) مستلزم یک مدیریت قوی و طی مراحل پیچیده ای خواهد بود. در چنین حالتی لازم است که پردازنده در مدت زمان یک ثانیه هزاران مرتبه از یک پردازه به پردازه ه دیگر سوئیچ تا امکان استفاده چندین پردازه از پردازنده را فراهم نماید
سیسم های عامل در ابتدا می بایست محدوده های حافظه مورد نیاز هر نوع نرم افزار و برنامه های خاص را فراهم نمایند. مثلا" فرض کنید سیستمی دارای یک مگابایت حافظه اصلی باشد . سیستم عامل کامپیوتر فرضی ، نیازمند 300 کیلو بایت حافظه است . سیستم عامل در بخش انتهائی حافظه مستقر و بهمراه خود درایورهای مورد نیاز یه منظور کنترل سخت افزار را نیز مستقر خواهد کرد. درایورهای مورد نظر به 200 کیلو بایت حافظه نیاز خواهند داشت . بنابراین پس از استقرار سیستم عامل بطور کامل در حافظه ، 500 کیلو بایت حافظه باقیمانده و از آن برای پردازش برنامه های کاربردی استفاده خواهد شد. زمانیکه برنامه های کاربردی در حافظه مستقر می گردند ، سازماندهی آنها در حافظ بر اساس بلاک هائی خواهد بود که اندازه آنها توسط سیستم عامل مشخص خواهد شد. در صورتی که اندازه هر بلاک 2 کیلوبایت باشد ، هر یک از برنامه های کاربردی که در حافظه مستقر می گردنند ، تعداد زیادی از بلاک های فوق را (مضربی از دو خواهد بود) ، بخود اختصاص خواهند داد. برنامه ها در بلاک هائی با طول ثابت مستقر می گردند. هر بلاک دارای محدوده های خاص خود بوده که توسط کلمات چهار و یا هشت بایت ایجاد خواهند شد. بلاک ها و محدو ده های فوق این اطمینان را بوجود خواهند آورد که برنامه ها در محدوده های متداخل مستقر نخواهند شد. پس از پر شدن فضای 500 کیلوبایت اختصاصی برای برنامه های کاربردی ، وضعیت سیستم به چه صورت تبدیل خواهد گردید؟
همزمانی:
همزمانی در سه زمینه زیر اجرا میشود:
کاربرد های متعدد
چند برنامه ای
کاربرد ساخت یافته
کاربرد ها میتوانند مجموعه ای از فرایند های همزمان باشند.
ساختار سیستم عامل
سیستم عامل مجموعه ای از نخها و فرایند هاست.
موضوعات محوری در طراحی سیستم عامل:
چند برنامه ای : مدیریت فرایندهای متعدد در داخل یک سیستم تک پردازنده ای
چند پردازشی: مدیریت فرایندهای متعدد در داخل یک سیستم چند پردازنده ای
پردازش توزیعی :مدیریت فرایندهای متعدد که روی سیستم های کامپیوتری متعدد و توزیع شده اجرا میشوند.
مشکلات سیستم تک پردازنده ای:
اشتراک منابع سراسری پر مخاطره است
مدیریت تخصیص بهینه منابع به فرایندها توسط سیستم عامل دشوار است.
یافتن محل خطای برنامه نویسی مشکل است.
همزمانی:
همزمانی گروهی از موضوعات طراحی را در بر میگیرد:
ارتباط بین فرایندها
اشتراک منابع و رقابت برای آنها
همگام سازی فعالیتهای فرایند های متعدد
توزیع وقت پردازنده در بین فرایند ها
یک مثال ساده:
void echo()
{
chin = getchar();
chout = chin;
putchar(chout);
}
یک مثال ساده:
Process P2
.
.
chin = getchar();
chout = chin;
.
putchar(chout);
.
Process P1
.
chin = getchar();
.
chout = chin;
putchar(chout);
.
.
موارد مهم در سیستم عامل همزمانی:
با در نظر گرفتن مساله همزمانی فرایند ها، در طراحی سیستم عامل باید موارد زیر را در نظر داشت.
سیستم عامل باید بتواند فرایند های فعال را دنبال کند.
سیستم عامل باید بتواند منابع را به فرایندها تخصیص دهد و بگیرد.
سیستم عامل باید داده ها و منابع هر فرایند را از دسترسی سایر فرایندها محافظت کند.
نتایج یک فرایند باید مستقل از سرعت پیشرفت فرایندهای دیگر باشد.
محاوره فرایندها:
بی اطلاعی فرایند ها از یکدیگر: اینها فرایند های مستقل از یکدیگرند خواستار همکاری با یکدیگر نیستند.
اطلاع غیر مستقیم فرایند ها از یکدیگر: اینها فرایند هایی هستند که لزوما از شناسه یکدیگر آشنا نیستند، ولی در دسترسی به بعضی اشیاء مثل بافر ورودی خروجی با یکدیگر مشترکند.
اطلاع مستقیم از یکدیگر: اینها فرایندهایی هستند که قادرند با استفاده از شناسه، با یکدیگر ارتباط برقرار کنند و برای کار مشترک بر روی بعضی فعالیت ها ساخته شده اند.
رقابت میان فرایند ها برای منابع:
در مورد فرایند های رقیب با سه مساله کنترلی برخورد خواهیم داشت:
انحصار متقابل(بخش بحرانی)
در هر لحظه فقط یک برنامه اجازه دارد به بخش بحرانی خود وارد شود.
به عنوان مثال در هر لحظه تنها یک فرایند اجازه دارد پیامی را به چاپگر بفرستد.
بن بست
: هنگام اعمال انحصار متقابل، در صورتیکه یک فرایند کنترل منبعی را در اختیار بگیرد و در انتظار منبع دیگری برای اجرا یاشد ممکن است بن بست رخ دهد.
گرسنگی
ممکن است یکی از فرایندهای مجموعه برای مدتی نامحدود از دسترسی به منابع مورد نیازش محروم بماند، چرا که سایر فرایند ها منابع را به طور انحصاری بین یکدیگر مبادله میکنند. به این حالت گرسنگی می گویند.
ملزومات انحصار متقابل:
انحصار متقابل باید اعمال گردد: از میان فرایندهایی که برای منبع یکسان یا شیء مشترکی دارای بخش بحرانی هستند، تنها یک فرایند مجاز است در بخش بحرانی خود باشد.
فرایندی که در بخش غیربحرانی خود متوقف میشود، باید طوری عمل کند که هیچ دخالتی در عملکرد فرایند های دیگر نداشته باشد.
برای فرایندی که نیاز به دسترسی یه یک بخش بحرانی دارد نباید امکان به تاخیر انداختن نامحدود آن وجود داشته باشد، "بن بست یا گرسنگی نمی تواند مجاز باشد.
ملزومات انحصار متقابل:
هنگامی که هیچ فرایندی در بخش بحرانی خود نیست، هر فرایندی که متقاضی ورود به بخش بحرانی خود باشد، باید بدون تاخیر مجاز به ورود باشد.
هیچ فرضی در مورد سرعت نسبی فرایندها یا تعداد آنها نمیتوان نوشت.
هر فرایندی فقط برای مدت زمان محدوددی در داخل بخش بحرانی خود می ماند.
الگوریتم دیجسترا : تلاش اول
هر فرایند مقدار متغیر Turn را بررسی می کند، اگر برابر شماره آن فرایند بود به بخش بحرانی خود وارد میشود.
انتظار برای مشغولی:
فرایند همواره در حال چک کردن است تا ببیند آیا میتواند به بخش بحرانی خود وارد شود یا نه.
اگر فرایندی چه در بخش بحرانی و چه در خارج آن با شکست مواجه شود، فرایند دیگر مسدود می ماند.
الگوریتم دیجسترا : تلاش اول
ساختاری که در بالا گفته شد ساختار همروال است
هم روال ها برای این طراحی شدند تا بتوانند کنترل اجرا را بین یکدیگر عقب و جلو ببرند.
این فن تنها برای ساخت دادن به یک فرایند واحد است، و برای حمایت از پردازش همزمان کافی نیست
الگوریتم دیجسترا : تلاش دوم
در این روش از یک بردار دودویی استفاده میشود که در آن Flag[i] مربوط به فرایند i است.
هر فرایند میتواند مقدار مربوط به فرایند دیگر را بیازماید، ولی نمیتواند آنرا تغییر دهد.
هنگامی که فرایند میخواهد وارد ناحیه بحرانی خود شود ابتدا مقدار سایر فرایند ها را بررسی میکند.
اگر هیچ فرایندی در بخش بحرانی خود نبود (یا Flag برای همه فرایند ها False بود) فرایند بلافاصله مقدار Flag خود را True میکند و وارد بخش بحرانی خود میشود. هنگام خروج فرایند مقدار Flag را به False برمیگرداند.
در این صورت اگر فرایندی در ناحیه بحرانی خود شکست بخورد، فرایند دیگر تا ابد مسدود است.
این روش انحصار متقابل را تضمین نمی کند.
الگوریتم دیجسترا : تلاش سوم
فرایند P1 قبل از بررسی سایر فرایند ها مقدار پرچم خود را برای ورود به ناحیه بحرانی می نشاند.
هنگامی که فرایند دیگری مثل P2 در ناحیه بحرانی است و پرچم فرایند P1 ، True است فرایند P1 تا زمانی که فرایند P2 از ناحیه بحرانی خارج شود در حالت مسدود میماند.
امکان بن بست وجود دارد. هنگامی که دو فرایند Flag خود را برای ورود به ناحیه بحرانی True میکنند، در این صورت هر فرایند باید در انتظاز فرایند دیگر برای رهایی ناحیه بحرانی باشد.
الگوریتم دیجسترا : تلاش چهارم
هر فرایند Flag خود را مقدار دهی میکند تا تمایل خود را برای ورود به ناحیه بحرانی نشان دهد. اما آماده است Flag خود را برای احترام به سایر فرایند ها تغییر دهد.
سایر فرایند ها بررسی میشوند، اگر یکی از آنها در بخش بحرانی بود مقدار Flag به False باز میگردد و بعدا دوباره مقدار دهی میشود تا تمایل خود را برای ورود به ناحیه بحرانی نشان دهد. این چرخه تا زمان ورود ادامه دارد.
الگوریتم دیجسترا : تلاش چهارم
دقت کنید که چرخه تست Flag میتواند به طور نامحدود گسترش یابد، اما این یک بن بست نیست چرا که بن بست زمانی رخ میدهد که چند فرایند بخواهند به بخش بحرانی وارد شوند ولی هیچ کدام نتوانند. به این حالت بن باز گفته میشود، چرا که هر تغییری در سرعت نسبی دو فرایند چرخه را شکسته و موجب ورود به ناحیه بحرانی میشود.
الگوریتم دیجسترا : یک راه حل صحیح
در این روش هم از آرایه برداری دودویی Flag و هم از متغیر Turn استفاده میشود.
هر فرایند برای ورود به ناحیه بحرانی ابتدا مقدار Flag خود را True میکند و سپس در انتظار مقدار Turn میماند
انحصار متقابل: حمایت از سخت افزار
از کار انداختن وقفه ها:
یک فرایند تا زمانی که خدمتی از سیستم عامل را احظار نکرده و یا تا زمانی که با وقفه مواجه نشده به اجرای خود ادامه میدهد.
از کار انداختن وقفه، انحصار متقابل را ضمانت میکند.
پردازنده محدود به قابلیت در همگذاری برنامه هاست.
این رویکرد در معماری چند پردازشی کار نمیکند، چرا که در یک سیستم چند پردازشی در هر لحظه بیش از یک فرایند در حال اجراست.
انحصار متقابل: حمایت از سخت افزار
دستورالعمل های ویژه ماشین:
این دستورالعمل ها در یک چرخه دستورالعمل واحد انجام میشوند، و در معرض دخالت دستورالعمل های دیگر نیستند.
در سطح سخت افزار دسترسی به یک محل از حافظه، از دسترسی به همان محل از حافظه جلوگیری میکند.
انحصار متقابل: حمایت از سخت افزار
دستورالعمل آزمون و مقدار گذاری:
boolean testset (int i)
{
if (i == 0)
{
i = 1;
return true;
}
else
{
return false;
}
}
انحصار متقابل: حمایت از سخت افزار
دستورالعمل معاوضه:
void exchange(int register, int memory)
{
int temp;
temp = memory;
memory = register;
register = temp;
}
انحصار متقابل:
انحصار متقابل: دستورالعمل های ویژه ماشین
مزایا :
برای هر تعداد از فرایندها، روی یک پردازنده و یا چند پردازنده، که از حافظه مشترک استفاده میکنند، قابل به کار گیری است.
ساده است و بنابراین وارسی آن آسان است.
از آن برای حمایت از بخش های بحرانی متعدد میتوان استفاده کرد که در آن هر بخش بحرانی میتواند با متغیر خاص خود تعریف شود.
انحصار متقابل: دستورالعمل های ویژه ماشین
معایب:
انتظار مشغولی وجود دارد.
امکان گرسنگی وجود دارد: هنگامی که فرایندی بخش بحرانی خود را ترک میکند وبیش از یک فرایند در انتظار است.
امکان بن بست وجود دارد: اگر یک فرایند با اولویت پایین در بخش بحرانی خود باشد و به یک فرایند با اولویت بالاتر نیاز داشته باشد، و همینطور فرایند اولویت بالاتر در انتظار ورود به بخش بحرانی باشد بن بست رخ میدهد.
راهنما ها (Semaphore):
راهنماها یک سیستم ارتباطی هستند که از پرچم ها استفاده میکنند. دو ایستگاه کاری فرستنده وگیرنده وجود دارد که این دو باید باشند به وضوح همدیگر را ببینند.
معمولا برای مسافت های طولانی تعدادی ایستگاه تکرار کننده بین فرستنده و گیرنده وجود دارد.
راهنما ها در کاربرد :
زمانی که یک پیام راهنما فرستاده میشود، دو ایستگاه وجود دارد : فرستنده و گیرنده.هر ایستگاه از دو نفر تشکیل شده : علامت دهند و دستیار. علامت دهنده پرچم ها را نگه میدارد و دستیار پیام ها را ضبط میکند و نتیجه را به علام دهنده میدهد.
راهنما ها :
راهنما، مکانیسیمی است که از دسترسی دو یا چند فرایند به منابع مشترک به طور همزمان جلوگیری میکند. به عنوان مثال در یک راه آهن راهنما از برخورد قطار ها با هم در یک ریل مشترک جلوگیری میکند. در صورتیکه به راهنمها توجهی نشود تضمینی وجود ندارد که قطار ها با هم برخورد نکنند به طور مشابه درکامپیوتر در صورت عدم توجه به راهنما احتمال اغتشاش فرایندها وجود دارد.
راهنما ها :
راهنما ها مانند پرچم ها عمل میکنند به همین دلیل به آنها راهنما گفته میشود. یک راهنما میتواند On یا Off باشد.یک فرایند میتواند یک پرچم را On یا Off کند. اگر پرچم On باشد و فرایندی بکوشد تا آنرا On کند، آن فرایند تا زمانی که پرچه Off شود منتظر می ماند.
راهنما ها :نرم افزار
در سال 1965 دیجسترا راهنما ها را به عنوان راه حلی برای فرایند های همزمان در نظر گرفت.
اصل بنیادی این بود: دو یا چند فرایند میتوانند با علامت های ساده با یکدیگر همکاری کنند. هنگامی که یک فرایند در انتظار یک علامت از طرف فرایند دیگر است، آن فرایند تا رسیدن آن علامت در حالت معلق است.
برای علامت دهی از متغیر های ویژه ای به نام راهنما استفاده شد
عملیات روی راهنما:
یک راهنما میتواند با یک مقدار غیر منفی صحیح مقدار دهی اولیه شود.
عمل Wait مقدار راهنما را یک واحد کاهش میدهد. اگر مقدار منفی شود آنگاه فرایندی که دستور Wait را اجرا کرده مسدود میشود.
عمل Signal مقدار راهنما را یک واحد افزایش میدهد. اگر مقدار مثبت نباشد آنگاه فرایندی که توسط دستور Wait مسدود شده بود آزاد میگردد.
غیر این 3 عمل راه دیگری برای دستکاری سمافور وجود ندارد.
پیاده سازی راهنما:
سمافورS یک متغیر صحیح است.
تنها توسط P(s) و V(s) میتواند در دسترس قرار گیرد.
wait (S)
{ /* P operation */
while (S 0); /* no-op */; S–; }
signal (S)
{ /* V operation */
S++;
}
تعریف اولیه های راهنما:
تعریف ا ولیه های راهنماهای دودویی
انحصار متقابل با استفاده از سمافور:
مثالی از مکانیسم سمافور:
دسترسی فرایند ها به داده های مشترکی که با یک راهنما محافظت شده اند.(شکل)
مساله تولید کننده و مصرف کننده:
یک تولید کننده یا بیشتر نوعی داده را تولید میکند و در میانگیری قرار میدهد.
یک مصرف کننده این اقلام را یکی یکی از میانگیر برمیدارد.
در هر زمان تنها یک تولید کننده یا مصرف کننده میتواند به میانگیر دسترسی داشته باشد.
مساله تولید کننده و مصرف کننده:
consumer:
while (true) {
while (in <= out)
/*do nothing */;
w = b[out];
out++;
/* consume item w */
}
producer:
while (true) {
/* produce item v */
b[in] = v;
in++;
}
مصرف کننده: تولید کننده:
مساله تولید کننده و مصرف کننده:
مساله تولید کننده و مصرف کننده با میانگیر نامحدود:
producer:
while (true) {
/* produce item v */
while ((in + 1) % n == out)
/* do nothing */;
b[in] = v;
in = (in + 1) % n
}
consumer:
while (true) {
while (in == out)
/* do nothing */;
w = b[out];
out = (out + 1) % n;
/* consume item w */
}
مساله تولید کننده و مصرف کننده با میانگیر نامحدود:
ناظر (Monitor) :
مجموعه ای از رویه ها، متغیر ها، و ساختمان داده ها میباشد.که همگی در یک ماژول نرم افزاری خاص قرار گرفته اند.
پردازش ها در هر زمان میتوانند زیربرنامه های داخل مانیتور را فراخوانی کرده و اجرا کنند.
ویژگیهای مهم ناظر :
متغیر ها و داده های محلی ناظر تنها برای رویه های خود ناظر قابل دسترس است و هیچ رویه دیگری به آنها دسترسی ندارد.
یک فرایند با احضار یکی از رویه های ناظر وارد آن میشود.
در هر زمان تنها یک فرایند میتوان در ناظر در حال اجرا باشد، فرایند های دیگری که ناظر را احضار کرده اند تا فراهم شدن ناظر معلق خواهند ماند.
ساختار ناظر:
تبادل پیام:
در یک نتیجه گیری کلی میتوان گفت سمافور ها سطح پایین هستند، و کار کردن با آنها مشکل است.مانیتور ها نیز به جز چند زبان برنامه نویسی غیر معروف غیر قابل استفاده اند.علاوه بر این هیچ کدام از این دو، امکانات لازم برای تبادل اطلاعات بین کامپیوتر ها در کامپیوتر های توزیع شده را ندارند بنابرین تکنیک دیگری به نام تبادل پیام ابداع شد.
پیام ها یک مکانیزم ساده و مناسب جهت همگام سازی و ارتباط دهی بین فرایندها در یم محیط غیرمتمرکز و توزیع شده اند.
بسیاری از سیستم عامل های چند برنامگی از نوعی پیام های بین فرایند ها پشتیبانی میکنند.
تبادل پیام:
پیام مجموعه ای از اطلاعات است که بین فرایندهای ارسال کننده و دریافت کننده مبادله میشود.
قالب پیام قابل انعطاف و قابل تبادل توسط هر زوج گیرنده فرستنده است.
send (destination, message)
receive (source, message)
همگام سازی:
فرستنده و گیرنده میتوانند مسدود باشند یا نباشند(منتظر برای پیام)
مسدود شدن فرستنده، مسدود شدن گیرنده:
هم فرستنده و هم گیرنده تا زمانی که پیام تحویل داده شود مسدودند.
گاهی به آن قرار ملاقات هم گفته میشود.
این ترکیب همگام سازی محکم بین فرایندها را میسر میکند.
همگام سازی:
مسدود نشدن فرستنده، مسدود شدن گیرنده:
فرستنده به کار خود ادامه میدهد.
گیرنده تا زمانی که پیام تحویل داده شود، مسدود است.
این مفید ترین ترکیب است، چرا که اجازه میدهد یک پیام یا بیشتر در اسرع وقت به مقصد های متنوع ارسال شود.
مسدود نشدن فرستنده، مسدود نشدن گیرنده
انتظار هیچ یک از دو طرف ضروری نیست
آدرس دهی:
آدرس دهی مستقیم:
اولیه Send شامل شناسه مشخص فرایند مقصد است
اولیه Receive میتوان به یکی از دو صورت زیر داده شود:
فرایند گیرنده صراحتاً فرایند فرستنده را تعیین کند بنابراین فرایند باید از قبل بداند از کدام فرایند باید انتظار پیام داشته باشد.
مشخص کردن فرایند مبدا مورد انتظار غیر ممکن است در این حالت پارامتر مبدا از اولیه Receive دارای مقداریست که با انجام عمل دریافت برگشت داده میشود.
آدرس دهی:
آدرس دهی غیر مستقیم:
پیامها مستقیماً از فرستنده به گیرنده ارسال نمیشوند.بلکه به یک ساختمان داده مشترک که شامل صفهایی است که میتوانند پیامها را به طور دائمی نگه دارند ارسال میشود.
صف ها معمولاً صندوقهای پستی (Mail box) نامیده میشوند.
یک فرایند پیام را به صندوق پستی ارسال میکند و فرایند دیگر آن را از صندوق پستی بر میدارد.
ارتباط غیر مستقیم فرایند ها:
یک به یک
چند به یک
چند به چند
یک به چند
قالب پیام:
قالب پیام به اهداف امکانات پیام دهی و اینکه این امکانات روی یک کامپیوتر یا یک سیستم توزیعی اجرا میشوند بستگی دارد.
بعضی سیستم عاملها برای حداقل کردن سربار پردازش و حافظه پیامهای کوچک با طول ثابت را ترجیح داده اند.
قالب کلی پیام های طول متغیربه دو بخش تقسیم میشود:
سرآمد: حاوی اطلاعات مربوط به پیام
بدنه: حاوی خود پیام
قالب پیام:
سرآیند:
اطلاعات مبدا و مقصد مورد نظر پیام
طول پیام
اطلاعات کنترلی
اشاره گر برای ایجاد لیستی از پیام ها
شماره ترتیب برای پیگیری تعداد
و ترتیب انتقال پیامها
بدنه:
مساله خوانندگان و نویسندگان:
در این مساله شرایط زیر همواره برقرار است:
هر تعدادی از خوانندگان میتوانند از پرونده بخوانند.
در هر زمان فقط یک نویسنده میتواند در پرونده بنویسد.
هر گاه یک نویسنده در حال نوشتن بر روی پرونده است، هیچ خواننده ای امکان خواندن را ندارد.
سوال و پاسخ :
? ? ? ? ?
سوال اول:
چهار نکته مربوط به همزمانی را فهرست کنید؟
ارتباطات بین فرایندها
اشتراک منابع و رقابت برای آنها
همزمانی فرایندهای متعدد
توزیع وقت پردازنده در بین فرایندها
سوال دوم:
سه زمینه ای که در آنها همزمانی مطرح است را نام ببرید؟
کاربرد های متعدد
کاربرد های ساخت یافته
ساختار سیستم عامل
سوال سوم:
خواسته اصلی برای اجرای فرایند های همزمان چیست؟
قابلیت انحصار متقابل
سوال چهارم:
سه درجه متفاوت آگاهی فرایندها از یکدیگر را فهرست کنید؟
بی اطلاعی فرایند ها از یکدیگر
اطلاع غیر مستقیم فرایند ها از یکدیگر
اطلاع مستقیم از یکدیگر
سوال پنجم:
تمایز بین فرایندهای رقیب و فرایندهای همکار چیست؟
فرایندهای رقیب نیاز به دسترسی به منابع یکسان مانند دیسک، پرونده،یا چاپگر در یک زمان دارند. فرایندهای همکار در دسترسی به اشیاء مشترک مانند بافر حافطه با یکدیگر به صورت اشتراکی کار می کنند و قادر به ارتباط برقرار کردن با یکدیگر و اجرای یک فعالیت مشترکند.
سوال ششم:
سه مساله کنترلی در مورد فرایندهای رقیب را مطرح کنید؟
انحصار متقابل: تنها یکی از فرایندهای رقیب میتواند به منبعی که مورد رقابت واقع شده دسترسی داشته باشد. مکانیسم انحصار متقابل باید سیاست یکی یکی را اجرا کند.
بن بست: هنگام اعمال انحصار متقابل، در صورتیکه یک فرایند کنترل منبعی را در اختیار بگیرد و در انتظار منبع دیگری برای اجرا باشد ممکن است بن بست رخ دهد.
گرسنگی: ممکن است یکی از فرایندهای مجموعه برای مدتی نامحدود از دسترسی به منابع مورد نیازش محروم بماند، چرا که سایر فرایند ها منابع را به طور انحصاری بین یکدیگر مبادله میکنند. به این حالت گرسنگی میگویند.
سوال هفتم:
ملزومات انحصار متقابل را فهرست کنید؟
انحصار متقابل باید اعمال گردد: از میان فرایندهایی که برای منبع یکسان یا شیء مشترکی دارای بخش بحرانی هستند، تنها یک فرایند مجاز است در بخش بحرانی خود باشد.
فرایندی که در بخش غیربحرانی خود متوقف میشود، باید طوری عمل کند که هیچ دخالتی در عملکرد فرایند های دیگر نداشته باشد.
برای فرایندی که نیاز به دسترسی یه یک بخش بحرانی دارد نباید امکان به تاخیر انداختن نامحدود آن وجود داشته باشد، "بن بست یا گرسنگی نمیتواند مجاز باشد".
هنگامی که هیچ فرایندی در بخش بحرانی خود نیست، هر فرایندی که متقاضی ورود به بخش بحرانی خود باشد، باید بدون تاخیر مجاز به ورود باشد.
هیچ فرضی در مورد سرعت نسبی فرایندها یا تعداد آنها نمیتوان نوشت.
هر فرایندی فقط برای مدت زمان محدوددی در داخل بخش بحرانی خود می ماند.
سوال هشتم:
روی راهنما چه اعمالی میتوان انجام داد؟
یک راهنما(سمافور) میتواند با یک مقدار غیر منفی مقدار دهی اولیه شود.
عمل Wait مقدار راهنما را یک واحد کاهش میدهد. اگر مقدار منفی شود آنگاه فرایندی که دستور Wait را اجرا کرده مسدود میشود.
عمل Signal مقدار راهنما را یک واحد افزایش میدهد. اگر مقدار مثبت نباشد آنگاه فرایندی که توسط دستور Wait مسدود شده بود آزاد میگردد.
سوال نهم:
راهنماهای دودویی و عمومی چه تفاوتی با هم دارند؟
راهنمای دودویی تنها میتواند مقدار 0 یا 1 را بگیرد در صوریکه راهنمای عمومی میتواند هر مقدار صحیحی را بگیرد.
سوال دهم:
راهنمای قوی و ضعیف چه تفاوتی با هم دارند؟
یک راهنمای قوی بر اساس سیاست خروج به ترتیب ورود (FIFO) فرایندهای مسدود را از صف خارج میکند. در صورتیکه یک راهنمای ضعیف ترتیب خروج فرایندها از صف مشخص نشده است.
سوال یازدهم:
ناظر چیست؟
ناظر ساختاری از زبان برنامه سازی است که نوع داده انتزاعی و همچنین دسترسی انحصار متقابل برای یک دسته از رویه ها را فراهم میکند.
سوال دوازدهم:
در مورد پیامها تفاوت بین مسدود شونده و مسدود نشونده چیست؟
دو جنبه وجود دارد: ارسال و دریافت اولیه.هنگامی که یک Send اولیه در یک فرایند اجرا میشود، دو امکان وجود دارد: فرایند فرستنده تا دریافت پیام مسدود است یا نیست. به همین ترتیب هنگامی که فرایندی یک Receive اولیه را انجام میدهد دو امکان وجود دارد: اگر پیامی قبلاً فرستاده شده است این پیام دریافت شده و اجرا ادامه می یابد. اگر پیام منتظری وجود نداشته باشد یا این فرایند تا رسیدن پیام مسدود میماند و یا بدون توجه به تلاشی که برای دریافت پیام شده است به اجرای خود ادامه میدهد.
با تشکر