رویکردهای خوابیدن و بیدار کردن (Sleep and Wakeup)
توضیحات
در جلسه بیست و پنجم فیلم آموزشی (آموزش مجازی) سیستم عامل دکتر حقیقت ویژه کنکور کارشناسی ارشد مهندسی کامپیوتر و کنکور کارشناسی ارشد مهندسی فناوری اطلاعات و کنکور دکتری مهندسی کامپیوتر و نیز امتحانات دانشگاهی و آزمونهای استخدامی، ادامه فصل مهم چهارم سیستم عامل با عنوان «رویکردهای خوابیدن و بیدار کردن (Sleep and Wakeup)» ارائه میشود. در تمامی راهحلهای درست نرمافزاری مانند Decker و Peterson و نيز در راهحلهای درست سختافزاری مبتنی بر دستورالعملهای TSL يا SWAP،مشكل مشترکی به نام انتظار مشغول (Busy waiting) وجود دارد. انتظار مشغول دو نقطه ضعف اساسی دارد: 1) مشكل اتلاف CPU و 2) مشكل اولويت معكوس (Priority Inversion Problem). در این جلسه ابتدا ضمن تشریح دقیق این دو مشکل، با ذکر مثال، علت نیاز مبرم به رویکردهای خوابیدن و بیدار کردن (Sleep and Wakeup) بیان میشود. سپس مسئله مهم همگامسازی توليدكننده - مصرف كننده (Producer- Consumer) که حدود 10 بار خودش یا تغییریافتهاش در کنکور آمده است، مطرح و با استفاده از زوج اولیههای sleep و Wakeup یک راهحل ابتدایی برای آن ارائه و شبهکد آن خط به خط تشریح و با سناریوهای مختلف Trace میشود و دو مشکل بنبست و یک مشکل رقابت بر سر شمارنده مشترک در آن مطرح میشود. سپس در این باره بحث میشود که ريشه مشكل بنبست در این مسئله در اين است كه سيگنال wakeup ارسال شده برای فرايندی كه (هنوز) نخوابيده است، از بين میرود و اگر این سيگنال هدر نمیرفت، همه چيز درست كار میكرد. سپس به عنوان یک راه حل پیشنهاد میشود که به ازای هر فرايند، يک بیت انتظار بیداری (Wakeup Waiting Bit) در داخل هسته به این صحنه اضافه شود. در انتها نشان داده خواهد شد که نویسنده بزرگ دنیا یعنی تننباوم در مورد صحت بیت انتظار بیداری برای این دو فرایند اشتباه کرده است و این روش اصولاً غلط است. در هر صورت فهمیدن مفهوم بیت انتظار بیداری و ایده ذخیره کردن سیگنالهای Wakeup ی که میخواهند هدر بروند، کمک بسیاری به فهمیدن سمافور در جلسه بعدی میکند که مهمترین مبحث فصل 4 است (هم از نظر عمق مطلب، هم از دیدگاه زیبایی، هم از لحاظ نرخ تکرار در کنکور و هم از دید کاربرد در عمل).