# برنامه نویسی سطح پایین > توسعه‌ی هسته‌ی سیستم عامل > سوال: فرق پوسته (shell) با  هسته (kernel) چیست؟

## Kubuntu

سلام دوستان!
می خواستم بدونم فرق پوسته (shell) با  هسته (kernel) چیه؟
و اینکه چرا مفسر ابتدا در shell بود و بعد در سیستم عامل های امروز به هسته انتقال یافت؟!

ممنون می شم برام توضیح بدید

----------


## pswin.pooya

shell يك پوسته بر روي هسته هست كه فرامين ارسالي از سمت كاربر رو توسط فراخوانهاي سيستم به هسته انتقال ميده. مثلا كاربر مي خواد ليست فايلها رو ببينه (ls) . شل اول مياد فراخوان fork رو اجرا ميكنه و بعدش بررسي ميكنه كه ببينه فرزند هست يا پدر اگر فرزند بود فراخوان exec رو اجرا ميكنه كه فايل مورد نظر رو اجرا كنه. و يا زماني كه دستوري مثل ls | grep رو ارسال ميكني شل با فراخوانهاي سيستمي pipe رو ميسازه و بعدش برنامه ها رو اجرا ميكنه. 




> و اینکه چرا مفسر ابتدا در shell بود و بعد در سیستم عامل های امروز به هسته انتقال یافت؟!


اگر منظورت مفسر فرمان هست . كه برعكسه. مفسرها قبلا جزئي از هسته بودن (نمونه اون سيستم عامل داس هست. ) اين رو هم بايد بگم كه حتي توي داس هم جزئي از هسته حساب نمي شدن و داخل برنامه command.com كه همراه هسته بود قرار داشت. داخل لينوكس هم بطور كلي كه در اختيار برنامه هايي مثل شل و ... هست.

----------


## Kubuntu

> shell يك پوسته بر روي هسته هست كه فرامين ارسالي از سمت كاربر رو توسط فراخوانهاي سيستم به هسته انتقال ميده. مثلا كاربر مي خواد ليست فايلها رو ببينه (ls) . شل اول مياد فراخوان fork رو اجرا ميكنه و بعدش بررسي ميكنه كه ببينه فرزند هست يا پدر اگر فرزند بود فراخوان exec رو اجرا ميكنه كه فايل مورد نظر رو اجرا كنه. و يا زماني كه دستوري مثل ls | grep رو ارسال ميكني شل با فراخوانهاي سيستمي pipe رو ميسازه و بعدش برنامه ها رو اجرا ميكنه.


سلام دوست عزیزم!
من از فرمایش تون تفاوت هسته و پوسته رو نفهمیدم!
این هایی که بیان کردید مربوط به لینوکس بود برای ویندوز به چه صورته؟!




> اگر منظورت مفسر فرمان هست . كه برعكسه.


توی کتاب سیستم عامل مقسمی نوشته:




> بعضی از سیستم عامل ها مفسرفرمان را در هسته خود قرار داده اند و بعضی دیگر مثل داس و یونیکس مفسرفرمان را (که به پوسته یا شل نیز معروف است) مانند یک برنامه خاص که در اولین برقراری ارتباط اجرا می شود در نظر می گیرند.

----------


## pswin.pooya

مقسمي هم داره همون حرف منو ميگه




> اگر منظورت مفسر فرمان هست . كه برعكسه. مفسرها قبلا جزئي از هسته بودن  (نمونه اون سيستم عامل داس هست. ) اين رو هم بايد بگم كه حتي توي داس هم  جزئي از هسته حساب نمي شدن و داخل برنامه command.com كه همراه هسته بود  قرار داشت. داخل لينوكس هم بطور كلي كه در اختيار برنامه هايي مثل شل و ...  هست.





> من از فرمایش تون تفاوت هسته و پوسته رو نفهمیدم!
> این هایی که بیان کردید مربوط به لینوکس بود برای ویندوز به چه صورته؟!


قبل از همه چيز بايد بري يه كتاب سيستم عامل بخوني تا متوجه بشي كه هسته چيه و چي كارهايي رو بايد انجام بده و بعدش سراغ برنامه هاي جانبي بري. شل هم دقيقا يك برنامه هست كه كارش اينه كه از يك منبع مثل كي بورد فرمامين رو ميخونه و دستور و يا برنامه معادلش رو اجرا ميكنه. توي خيلي از سيستم عاملها مخصوصا سيستم عاملهاي مبتي بر يونيكس ، هسته بدون شل كار ميكنه. مثلا شما ميخواي فقط سيستم عامل يك برنامه خاص رو اجرا كنه كافيه كه وارد سورس بشي و بري init/main.c (اگر اشتباه نكنم اين فايل بود) رو دستكاري كتي و دوباره هسته رو كامپايل كني. هر چند كه اينكار معمول نيست اما دلايل زيادي ميتونه براش وجود داشته باشه. 

دو نوع شل داريم :

شل متني‌: مثل داس و يا bash لينوكس
شل گرافيكي: مثل explorer ويندوز و يا x11 و گنوم داخل لينوكس.

بعضي سيستم عاملها هر دوشون رو دارن و بعضي ديگه تنها يكي از اونها رو دارن. مثلا شما بدون داشتن كارت گرافيك و مانيتور و ... نمي توني يه سيستم عامل ويندوز رو بالا بياري و ازش استفاده كني. اما داخل لينوكس تنها كافيه كه از طريق يكي از پورتها (مثلا com) فرمان رو براي بش بفرستي تا تفسيرش كنه. همطور كه ميبيني داخل سيستم عاملهايي مثل لينوكس يك شل متني وجود داره كه ميتوني با ارسال متن فرامين رو اجرا كني. مهم نيست كه منبع متن از كجاست ( ميخواد يك پورت باشه، وب و يا حتي صفحه كليد. تنها كافيه كه متن بصورت سريال براش ارسال بشه.)

----------

