(۲۶ بهمن ۱۳۹۲ ۱۱:۵۶ ق.ظ)Mindhunter نوشته شده توسط: آخه بچه ها PID فرزند توی process table پدر هم ثبت میشه!!! والا از اساتید هم پرسیدم کسایی که سیستم عامل نوشتن گفتن پشته فرآیندی جداست
همشون هم گفتن fork کردی exec هم کردی!!!!! اصلا بمیرن با این سوال دادنشون، دکتر حقیقت کجاس؟؟؟؟
مسلما هر فرآیند باید بدونه بابای کیه یا فرزند کی هست!! پس یه ساختمان داده مشترک heap هست که اجداد خودشون رو ازش بدس میارن که من اینو قبلا نوشتم پروژم بود، اما در مورد PID تحقیقات به اینجا رسید که موقع فراخونی fork پدر یه فرزند میسازه و هرچی خودش داره duplicate میکنه!! یعنی هرچی داره روی یه حافظه جدید فرزند کپی میکنه اما ID برنمیگردونه!!!؟؟!؟!؟! چرا؟؟ چون اگه ID فرآیند جدید رو بخواد باید یه تابع دیگه بنام PID() فراخوانی بشه تا یه آیدی جدید به فرآیند نینی تازه بوجود اومده تعلق بگیره!!!! به ولای علی هرچی تا الان خوندم داره نقض میشه!!!
تنها چیزی که پرسس نمیتونه ارث ببره پشته هست دلایلشم خواستین بگم؟
ازکد پدرش میتونه در شرایطی استفاده کنه
و اینکه حتما تو سیستم های که نیتونن سلسله مراتبی از فرایندها ایجاد کنن pid پدر به فرزند میرسه به دلیل ختم آبشاری وقتی پدر خاتمه میابه باید فرزنداتش کشته شن و از روی آدرس pid که فرزندان شناسایی میشن کشته میشن
حتی توی سلیبر چندین بار تاکید شده که برای ایجاد نخ در سطح کاربر تنها هزینه ایجاد پشته برای اون نخ هست که این هزینه برای ایجاد هر فرایند دیگه ای هم میتونه باشه
این سوالا جز سوالای بدیهی سیستم عامل هست
فرایند ها وقتی fork(); l تو unix ایجاد میشن میتونن کد فایل های باز حافظه خالی (مخصوص نخهای تو فرایندهست) pid وحتی منابع مورد استفاده رو اشتراک کنن ولی تنها پشته برای چند فرایند یکسان نیست