...
اسپیس ایران | بلاگ
آموزش ها

سمافور semaphore چیست؟

سمافور semaphore چیست؟

نشانبر یا سمافور‏ به متغییری گفته می‌شود که در محیط‌های همروند برای کنترل دسترسی فرایندها به منابع مشترک به کار می‌رود. سمافور می‌تواند به دو صورت دودویی که تنها دو مقدار صحیح و غلط را دارا است و یا شمارنده اعداد صحیح باشد. از سمافور برای جلوگیری از ایجاد وضعیت رقابتی میان فرایندها استفاده می‌گردد. به این ترتیب، اطمینان حاصل می‌شود که در هر لحظه تنها یک فرایند به منبع مشترک دسترسی دارد و می‌تواند از آن بخواند یا بنویسد.

سمافورها اولین بار به‌وسیلهٔ دانشمند علوم رایانه هلندی، ادسخر دیکسترا معرفی شدند و امروزه به طور گسترده‌ای در سیستم عامل‌ها مورد استفاده قرار می‌گیرند.
فرض کنید کتابخانه‌ای ۱۰ اتاق مطالعه یکسان دارد. برای جلوگیری از مجادله و نزاع، دانشجویانی که قصد مطالعه دارند‍، باید اتاقی را از یک پیشخوان درخواست دهند. وقتی که یک دانشجو مطالعه‌اش تمام شد و خواست اتاق را تحویل دهد، باید مجدداً به پیشخوان برگردد و نشان دهد که دیگر به اتاق احتیاج ندارد. اگر هیچ اتاق خالی وجود نداشت و همه اتاق‌ها از قبل اشغال شده بود، دانشجویان باید منتظر بمانند تا یکی از دانشجوها اتاقش را تحویل دهد. سپس دانشجویی که بالاترین اولویت را نسبت به بقیه دارد (مثلاً زودتر از بقیه آمده) می‌تواند اتاق خالی شده را انتخاب کند.

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

مقدار سمافور را بررسی می‌کند.

در صورتی که مقدار سمافور مثبت باشد، فرایند می‌تواند از منبع مشترک استفاده کند. در این صورت، فرایند یک واحد از سمافور می‌کاهد تا نشان دهد که یک واحد از منبع مشترک را استفاده نموده است.
در صورتی که مقدار سمافور صفر یا کوچکتر از صفر باشد، فرایند به خواب می‌رود تا زمانی که سمافور مقداری مثبت به خود بگیرد. در این حالت فرایند از خواب بیدار شده و از مرحلهٔ یک شروع می‌کند.
هنگامی که فرایند کار خود را با منبع تمام نمود، یک واحد به سمافور اضافه می‌گردد. هر زمان که مقدار سمافور به صفر و یا بیشتر برسد، یکی از فرایند(هایی) که به خواب رفته به صورت تصادفی یا به روش FIFO توسط سیستم‌عامل بیدار می‌شود. در این حالت بلافاصله فرایند بیدار شده منبع را در دست می‌گیرد و مجدداً پس از اتمام کار یک واحد از سمافور کم می‌شود. اگر مقدار سمافوری صفر باشد و چند فرایند بلوکه شده در آن وجود داشته باشد، با افزایش یک واحدی سمافور، مقدار سمافور همچنان صفر باقی می‌ماند اما یکی از فرایندهای بلوکه شده آزاد می‌شود.

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



تجربه بالاترین سطح کیفیت میزبانی وب
اسپیس ایران با بیش از ۱۰ سال تجربه، انواع خدمات میزبانی وب، ثبت دامنه و سرور های مجازی را با بالاترین سطح کیفیت ممکن ارائه می نماید.
خرید هاست
ثبت دامنه
سرور مجازی

بیشتر بخوانید

لایسنس چیست؟

admin

لینوکس چیست؟ معرفی linux

admin

دلایل و آموزش رفع ارور ۲۷۷ در روبلاکس Roblox

admin

نوشتن دیدگاه