تالار گفتمان مانشت
سوال ششم از فصل دوم - نسخه‌ی قابل چاپ

سوال ششم از فصل دوم - hatami - 29 مرداد ۱۳۹۰ ۰۴:۰۱ ق.ظ

مبحث نخها

سوال ششم از فصل دوم - ehsan_nekooee - 01 شهریور ۱۳۹۰ ۰۲:۴۷ ق.ظ

فک کنم گزینه دو باشه.
به این دلیل که وقتی فرآیندی تعویض میشه درایه های TLB باید مربوط به همون فرآیند باشن.
در تعویض نخ هم به این دلیل که بخش مجزایی از برنامه باید اجرا بشه شمارنده برنامه قاعدتا باید تغییر کنه.

پ.ن
کتاب استالینگ فک کنم در مورد نخ‌ها خیلی خوب و مبسوط صحبت کرده برعکس تننباوم که زیاد از نخ‌ها حرفی به میون نیاورده.

سوال ششم از فصل دوم - hatami - 03 شهریور ۱۳۹۰ ۰۲:۴۹ ب.ظ

راستی این تست کنکور سال ۹۰ است. از کتابهای دیگر هم اگر برای جواب دادن استفاده کنید مشکلی نداره

سوال ششم از فصل دوم - رضا_ایرانی - ۲۰ شهریور ۱۳۹۰ ۰۲:۳۳ ق.ظ

گزینه های یک و چهار غلطه (به خاطر اینکه در گرینه یک: tlb تغییر میکنه، و در گرینه چهار: ثباتها با تغییر نخ عوض میشه)
گزینه دو به نظر اشتباه میاد. وقتی ما یک برش زمانی به یک فرایند میدیم با تعویض نخها این زمان عوض نمیشه.

به نظر میاد سه درسته. چون هر نخ پشته خودشو داره (چون یک نخ ممکنه که یک تابع بازگشتی باشه) و tlb هم باتفییر نخ عوض میشه.

من جواب سوالهای نود رو ندیدم.دوستان در مورد جوابم نظر بدن لطفا.

سوال ششم از فصل دوم - narges_r - 12 مهر ۱۳۹۰ ۱۲:۱۲ ق.ظ

به نظر من گزینه ۲ درسته
گزینه ۱ غلطه چون با تغییر متن فرایند tlb تغییر میکنه ولی در این گزینه گفته شده تغییر نمیکنه
گزینه ۳ غلطه چون گفته شده با تغییر نخ tlb پاک میشه در حالی که تغییر متن نخ در فضای کاربر انجام میشود پس tlb تغییری نمیکند
گزینه ۴ غلطه چون با تغییر نخ pc تغییر میکنه نه با تغییر فرایند
از طرفی هم گزینه دوم صحیح است چون نخها هم مانند فرایندها ممکنه به حالت معلق بروند پس نیاز به شمارنده برنامه یا pc برای نخها وجود داره و با تغییر نخ pc تغییر میکنه و همینطور اینکه با تغییر متن فرایند هم tlb پاک میشه و هم اشاره گر پشته

RE: سوال ششم از فصل دوم - رضا_ایرانی - ۱۲ مهر ۱۳۹۰ ۰۱:۵۵ ق.ظ

نقل قول: گزینه ۳ غلطه چون گفته شده با تغییر نخ tlb پاک میشه در حالی که تغییر متن نخ در فضای کاربر انجام میشود پس tlb تغییری نمیکند
شما فرض کنید اول کار نخ A شروع میکنه به اجرا کردن دستوراتش، و بعضی دستوراتشو در tlb بار میکنه و ازش استفاده میکنه؛ حالا تغییر نخ انجام میگیره و نخ B اجرا میشه، الان اگر tlb پاک نشه و نخ جدید نتونه دستورات مختص به خودشو در tlb بار کنه، وجود دستورات نخ A در tlb که به درد نخ B نمیخوره و هر مراجعه به tlb با miss مواجه میشه. بعد نخ های C و D و... هم اجرا میشن که کاری با دستورات نخهای دیگه که در tlb هست ندارن. پاک کردن tlb با تغییر نخ معقولتر به نظر میاد.
نقل قول: گزینه ۴ غلطه چون با تغییر نخ pc تغییر میکنه نه با تغییر فرایند
هم با تغییر نخ و هم با تغییر فرایند حتما PC تغییر میکنه. هر فرایند فضای آدرس خودشو داره که از این فضا باید آدرسی در PC قرار بگیره.
ایرادی که به گزینه چهار میشه گرفت اینه که گفته با تغییر نخ ثباتها تغییر نمیکنه، که این اشتباهه.فرض کنید نخ A چند خط برنامه شو اجرا میکنه و نتیجه رو در ثبات AC میزاره، حالا نخ B اجرا میشه و مقدار AC رو تغییر میده و بعد دوباره اجرا میرسه به نخ A، الان نخ A به مقدار AC خودش نیاز داره .پس میبایست قبل تغییر نخ، AC در جایی ذخیره شده باشه و با تغییر نخ به A‌، مقدارش تغییر کنه با مقدار مرتبط با نخ A. چون نخها مستقل اجرا میشن باید بتونن در صورت مواجه شدن با تغییر نخ در حین اجراشون، رد پاهاشونو حفظ کنن.
نقل قول: از طرفی هم گزینه دوم صحیح است چون نخها هم مانند فرایندها ممکنه به حالت معلق بروند پس نیاز به شمارنده برنامه یا pc برای نخها وجود داره و با تغییر نخ pc تغییر میکنه و همینطور اینکه با تغییر متن فرایند هم tlb پاک میشه و هم اشاره گر پشته
دلیل تغییر PC در تغییر نخها به خاطر استقلال اجرایی هر نخ در برابر نخهای دیگه س، نه معلق شدن نخها.
گزینه دو میگه که تغییر متن در نخها موجب تخصیص سهم زمانی تازه میشود، در حالی که معمولا تخصیص زمان در سطح فرایند انجام میشه و به نظرم این جمله اشتباست.

RE: سوال ششم از فصل دوم - narges_r - 12 مهر ۱۳۹۰ ۰۳:۲۹ ق.ظ

(۱۲ مهر ۱۳۹۰ ۰۱:۵۵ ق.ظ)رضا_ایرانی نوشته شده توسط:  
نقل قول: گزینه ۳ غلطه چون گفته شده با تغییر نخ tlb پاک میشه در حالی که تغییر متن نخ در فضای کاربر انجام میشود پس tlb تغییری نمیکند
شما فرض کنید اول کار نخ A شروع میکنه به اجرا کردن دستوراتش، و بعضی دستوراتشو در tlb بار میکنه و ازش استفاده میکنه؛ حالا تغییر نخ انجام میگیره و نخ B اجرا میشه، الان اگر tlb پاک نشه و نخ جدید نتونه دستورات مختص به خودشو در tlb بار کنه، وجود دستورات نخ A در tlb که به درد نخ B نمیخوره و هر مراجعه به tlb با miss مواجه میشه. بعد نخ های C و D و... هم اجرا میشن که کاری با دستورات نخهای دیگه که در tlb هست ندارن. پاک کردن tlb با تغییر نخ معقولتر به نظر میاد.

اینکه گفتم TLBپاک نمیشه برای اینه که تو کتاب اقای حقیقت نوشته تغییر متن نخ در فضای کاربر انجام میشه و وقتی تغییر متن در فضای کاربر انجام بشه هسته از اون بیخبره و برای تغییر متن دیگه احتیاجی به نگاشت در حافظه و فلاش کردن TLB نیست پس TLB تغییر نمیکنه

(۱۲ مهر ۱۳۹۰ ۰۱:۵۵ ق.ظ)رضا_ایرانی نوشته شده توسط:  
نقل قول: گزینه ۴ غلطه چون با تغییر نخ pc تغییر میکنه نه با تغییر فرایند
هم با تغییر نخ و هم با تغییر فرایند حتما PC تغییر میکنه. هر فرایند فضای آدرس خودشو داره که از این فضا باید آدرسی در PC قرار بگیره.
ایرادی که به سوال چهار میشه گرفت اینه که گفته با تغییر نخ ثباتها تغییر نمیکنه، که این اشتباهه.فرض کنید نخ A چند خط برنامه شو اجرا میکنه و نتیجه رو در ثبات AC میزاره، حالا نخ B اجرا میشه و مقدار AC رو تغییر میده و بعد دوباره اجرا میرسه به نخ A، الان نخ A به مقدار AC خودش نیاز داره .پس میبایست قبل تغییر نخ، AC در جایی ذخیره شده باشه و با تغییر نخ به A‌، مقدارش تغییر کنه با مقدار مرتبط با نخ A. چون نخها مستقل اجرا میشن باید بتونن در صورت مواجه شدن با تغییر نخ در حین اجراشون، رد پاهاشونو حفظ کنن.

در این موردباهاتون موافقم چون اصلا حواسم به این نبود که نوشه با تغییر نخ محتویات ثبات عوض نمیشه در حالیکه عوض میشه
وهمینطور اینکه وقتی با تغییر نخ PC عوض بشه حتما با تغییر فرایند هم PC عوض میشه

(۱۲ مهر ۱۳۹۰ ۰۱:۵۵ ق.ظ)رضا_ایرانی نوشته شده توسط:  [quote
دلیل تغییر PC در تغییر نخها به خاطر استقلال اجرایی هر نخ در برابر نخهای دیگه س، نه معلق شدن نخها.
گزینه دو میگه که تغییر متن در نخها موجب تخصیص سهم زمانی تازه میشود، در حالی که معمولا تخصیص زمان در سطح فرایند انجام میشه و به نظرم این جمله اشتباست.

این دلیلی که گفتم رو در کتاب اقای حقیقت گفته و منطقی هم هست. وقتی امکان تعلیق برای نخ باشه، وقتی نخ از حالت تعلیق خارج بشه و بخواد انتخاب بشه باید PC وجود داشته باشه
البته این برداشته من از این جملست و ممکنه اشتباه باشه و منظور این جمله چیز دیگه ای باشه

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

RE: سوال ششم از فصل دوم - رضا_ایرانی - ۱۲ مهر ۱۳۹۰ ۰۱:۵۸ ب.ظ

(۱۲ مهر ۱۳۹۰ ۰۳:۲۹ ق.ظ)narges_r نوشته شده توسط:  
(12 مهر ۱۳۹۰ ۰۱:۵۵ ق.ظ)رضا_ایرانی نوشته شده توسط:  دلیل تغییر PC در تغییر نخها به خاطر استقلال اجرایی هر نخ در برابر نخهای دیگه س، نه معلق شدن نخها...
این دلیلی که گفتم رو در کتاب اقای حقیقت گفته و منطقی هم هست. وقتی امکان تعلیق برای نخ باشه، وقتی نخ از حالت تعلیق خارج بشه و بخواد انتخاب بشه باید PC وجود داشته باشه...

نه فقط هنگام تعلیق، نخها اگر به حالت آماده هم برن، وقت از سرگیری اجراشون نیاز به تغییر PC دارن.

سوال ششم از فصل دوم - narges_r - 14 مهر ۱۳۹۰ ۱۲:۳۸ ق.ظ

کسی در مورد این سوال نظری نداره؟
سواله خوبیه، در موردش صحبت کنید.

سوال ششم از فصل دوم - _Milad_ - 17 مهر ۱۳۹۰ ۰۱:۴۲ ق.ظ

این سوال مثل اکثر سوال هایی که تو درس سیستم عامل مطرح میشه غلط و چیزی که تو واقعیت هست فرق داره. flush شدن TLB کاملا بسته به سخت افزار داره و سیاست های مختلفی برای این مورد هست. در بعضی پیاده سازی‌ها کلا TLB رو هنگام Context Switch هر بار flush می کنند بعضی‌ها هم نه بعضی‌ها هم Selective عمل می کنند. در x86 وقتی یک Context Switch اتفاق می افته باید Page Table پردازه ای که قراره بهش CPU اختصاص داده بشه آدرسش در ثبات CR3 قرار بگیره و وقتی این اتفاق بیفته TLB هم flush میشه.

به نظر من در این سوال باید فرص کنیم طراح سوال فکر می کرده همیشه Context Switch با flush شدن TLB همراه است. پس تا اینجا گزینه ۱ غلط هست.

در مورد گزینه دوم باید ابهام وجود داره اگه نخ سطح هسته باشه کاملا درست هست ولی اگه نخ سطح کاربر باشه بازه زمانی جدیدی تخصیص پیدا نمی کنه!

گزینه سوم هم غلط هست به این دلیل که اگر قرار باشه TBL با Context Switch بین دو نخ flush بشه باید این دو نخ مربوط به پردازه های مختلفی باشند که در صورت سوال گفته شده هر دو مروبوط به یک فرآیند(غلطه !!!! پردازه صحیح) هستند.

گزینه ۴ هم اشتباه است به این دلیل که گفته در Context Switch بین نخ‌ها Register‌ها تغییر نمی کنند.

جواب سازمان سنجش چی بوده Smile) ؟!

@narges_R: فقط به کتاب آقای حقیقت اکتفا کردید؟
دوستان پیشنهاد می کنم کتاب آقای Stallings رو بخونید برای کنکور ظاهرا نظر ایشون به نظر طراحاس سوال نزدیک تره Smile

RE: سوال ششم از فصل دوم - narges_r - 17 مهر ۱۳۹۰ ۱۱:۱۹ ب.ظ

با این سوالا تو کنکور باید چکار کرد؟!!!!Huh

RE: سوال ششم از فصل دوم - رضا_ایرانی - ۲۰ مهر ۱۳۹۰ ۰۹:۲۹ ب.ظ

(۱۷ مهر ۱۳۹۰ ۰۱:۴۲ ق.ظ)_Milad_ نوشته شده توسط:  در مورد گزینه دوم باید ابهام وجود داره اگه نخ سطح هسته باشه کاملا درست هست ولی اگه نخ سطح کاربر باشه بازه زمانی جدیدی تخصیص پیدا نمی کنه!

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

(۱۷ مهر ۱۳۹۰ ۰۱:۴۲ ق.ظ)_Milad_ نوشته شده توسط:  گزینه سوم هم غلط هست به این دلیل که اگر قرار باشه TBL با Context Switch بین دو نخ flush بشه باید این دو نخ مربوط به پردازه های مختلفی باشند که در صورت سوال گفته شده هر دو مروبوط به یک فرآیند(غلطه !!!! پردازه صحیح) هستند.

دو نخ اگرچه از یک فرایند هستند اما ممکنه که کدهای اجرایی کاملا متفاوت داشته باشن. پس پاک کردن tlb با تغییر نخها توجیح پذیره، حتی اگر از یک فرایند باشن.

سوال ششم از فصل دوم - _Milad_ - 21 مهر ۱۳۹۰ ۱۲:۴۸ ق.ظ

وقتی نخ سطح کاربر باشه نمی تونه TLB رو flush و update کنه چون کرنل نمی دونه چنین نخی وجود داره. بعد ببین به این سادگی نگو توجیح پذیره به این دلیل که همین عمل flush کردن TLB خودش یک نوع سربار هست و اثر بدی داره.