چرا Userspace پنیک نمیکنه؟

چرا تو سیستم های لینوکسی و یونیکسی Kernel panic داریم ولی User space panic نه؟
شوخی کردم ولی جدی چرا کرنل پنیک میکنه ولی user space نه؟

خب جوابش خیلی مشخصه برای جواب دادن بهش یکم باید عمیق بشیم.

اول از همه CPU چند تا رینگ داره. تو رینگ ۰ کرنل اجرا میشه و تو رینگ ۳ هم user space.
حالا اگر یه برنامه user space خراب کنه یه جایی فقط پراسس خودش میمیره و بقیه سیستم ادامه میدن ولی اگر کرنل خراب کنه کل سیستم میره زیر سوال.

یا حتی اگه یه برنامه عادی به آدرس اشتباهی دست بزنه cpu یه وقفه یا exception میزنه و خلاص (segment fault یا page fault و...) ولی اگه کرنل همین اشتباه رو بکنه مدیریت مموری،زمانبند ها،درایور ها،هندل کننده های وقفه و ... همه به فنا میرن و دیگه هیچ لایه پایین تری نیست که نجاتش بده(البته بسته به دیدتون میتونه لایه بالاتر باشه🤷‍♂)

چرا خب recover نمیکنه؟ چون کرنل مرجع نهاییه و اگه مثال user space یه جایی خراب کنه کرنل میتونه isolate اش کنه ولی اگه خود کرنل خراب شه کی isolate اش کنه؟🥲

حالا بریم سراغ رینگ های CPU
رینگ های سی پی یو یا Privilege rings یه مکانیزم امنیتی توی cpu هستش که مشخص میکنه کد ها با چه سطح از دسترسی اجرا بشن.
اصلا ایده اصلیش اینه که همه برنامه ها نباید به همه چیز دسترسی داشته باشن.
مثلا یه برنامه کاربری(User space) نباید بره به رجیستر های سخت افزاری دست بزنه یا حافظه کرنل رو تغییر بده.💥

رینگ ها چند تا هستن که اصلی ترینشون همون رینگ های ۰ و ۳ هستند که به ترتیب مختص برنامه های کرنل و userspace هستن :)


نظرات

هنوز نظری ثبت نشده است.

برای ارسال نظر باید وارد شوید.