دکتر حقیقت | پر | پرلایک – Telegram
دکتر حقیقت | پر | پرلایک
3.52K subscribers
1.49K photos
79 videos
228 files
506 links
دکتر ابوالفضل حقیقت | پر (انتشارات پارس رسانه) |پلتفرم آموزشی پرلایک

par.ir, parlike.com, parlike.ir

Admin: @Dr_Haghighat
Download Telegram
۹۵- طبق راه حلی که قبلا در کانال گذاشتم پاسخ همان ۱۵ درصد یعنی گزینه ۴ اعلام شده توسط سنجش صحیح است.
۹۶- طبق راه حلی که قبلا در کانال گذاشتم پاسخ همان گزینه ۱ اعلام شده توسط سنجش صحیح است.
۹۷- اگر چه طبق پاسخی که قبلا در کانال گذاشتم (بر اساس اطلاعات عمومی سیستم عاملی ام) پاسخ همان گزینه ۲ اعلام شده توسط سنجش صحیح است' اما به نظر من این سوال قابلیت اعتراض دارد چون من این مطلب را در هیچ یک از نسخه های کتب مرجع وزارت علوم ندیدم نه Tanenbaum نه Stallings و نه Silberschatz

البته یک مسئله هست که این کتاب ها هر یکی دو سال به روز می شوند و ممکن است در نسخه ای باشد و من ندیده باشم دانشجویان عزیز اگر مطلب Thread safety را در یکی از کتب مرجع پیدا کردند به من اطلاع بدهند تا در کانال قرار دهم و بیهوده در سایت سنجش اعتراض نکنیم.
۹۸- پاسخ اعلام شده توسط سنجش گزینه ۳ است که بدیهی است غلط است.
تنها گزینه ای از این سوال که در حالت عام و برای هر سه نوع نخ یک به یک و چند به یک و چند به چند می تواند درست باشد گزینه ۱ است. حتما به این سوال در سیستم پاسخگویی اینترنتی سایت سنجش اعتراض کنید. قطعا رسیدگی می شود. برای استدلال خود از مواردی که در ذیل می آورم استفاده کنید.
الف) چرا گزینه ۱ صحیح است.
فرایندها و نخ ها به سه طریق خاتمه می یابند:
۱- خودشان مثلا با فراخوان سیستمی exit (مثل فرایندها در Unix) در خواست خاتمه عادی (یا خاتمه مواجهه با خطا) می کنند. یا مثلا یک نخ در انتهای کدش تابع کتابخانه distroy_thread را صدا می زند.
۲- یا توسط هسته (به علت خلاف) یا فرایند دیگری (اگر مجاز باشد) مانند پدرش کشته (kill) می شوند.
۳- هنگامی که پدرش زودهنگام کشته شود در برخی سیستم ها فرزندان نیز کشته می شوند.
به متن کتاب stallings در این باره (مخصوص نخ ها) توجه کنید:
بدیهی است وقتی نخ توسط نخ دیگری کشته می شود که آن نخ (کشنده) در حال اجرا است (نه نخی که قرار است کشته شود) یا توسط سیستم کشته می شود (خاتمه غیر عادی) در هر وضعیتی که باشد چه اماده چه مسدود چه ... کشته شده و به وضعیت خاتمه می رود.
اما چرا گزینه ۳ به طور عام (مثلا برای نخ های سطح هسته و ترکیبی) نمی تواند درست باشد.
این امر بدیهی است که فرایندی که در وضعیت اماده است و CPU ندارد چگونه ممکن است به وضعیت waiting (یا با واژه کتاب های دیگر Blocked یا Asleep) برود و منتظر یک رویداد مثل تکمیل l/O شود. اصلا اجرا نمی شود که درخواست ورودی کند.
Stallings:
از اماده اجرا (ready) به waiting راهی نیست
در وضعیت waiting نخ مسدود شده و منتظر یک رویداد مثل تکمیل I/O است. در وضعیت Transition یک نخ ممکن است مثلا پشته اش بیرون حافظه باشد و منتظر آن منبع باشد در وضعیت standby نیز نخ منتظر ایستاده تا پردازنده در دسترس قرار گیرد. پس منظور طراح نمی تواند از انتظار standby باشد چون ما n جور انتظار داریم اما کلمه فارسی انتظار در بین وضعیت ها ترجمه waiting است و ما نمی توانیم برای وضعیت ها نامگذاری دلخواه کنیم.
طبق کتاب سیلبرشاتز نیز کلمه Waiting به وضعیت blocked یا Asleep اطلاق می شود:
و از ready به waiting راهی نیست.
اما طبق سیلبرشاتز به سادگی گزینه ۱ درست خواهد بود: