# برنامه نویسی سطح پایین > توسعه‌ی هسته‌ی سیستم عامل > سوال: هسته چیست؟؟؟

## mostafanasiri

سلام دوستان
می خواستم بدونم هسته ی سیستم عامل چیه،چجوری کار می کنه و نحوه ی ساخت یک هسته چجوریه؟
با تشکر :لبخند گشاده!:

----------


## Saeed_m_Farid

هسته به قسمت مرکزی میگن، مثلاً در مورد هلو یک جسم سخت هست که مغزش سمی است! یا مثلاً خورشید که هسته اش 15 میلیون درجه هست و خطر داره حسن! یا هسته زمین : وزن مخصوص هسته 10 درصد کمتر از مقداری است که از طریق آلیاژ Ne-Fi در فشار 1.5 تا 3 مگا بار تعیین می‌شود. بنابراین عناصر سبک وزن و احتمالا کربن ، سیلیکات ، پتاسیم ، گوگرد ، FeO و سرب و عناصر سیدروفیلی نظیر  و ... در هسته وجود دارند. این عناصر ناسازگار نسبت به محیط شدیدا احیایی هسته زمین به همراه سلولهای همرفتی هسته مایع در لایه  تخلیه می‌شوند و به احتمال زیاد از طریق پلومها و سوپر پلومها از خلال گوشته تحتانی ، تحولی و فوقانی به سطح انتقال می یابند.  :لبخند گشاده!: 
***********
جدی این سوال رو سرِکاری پرسیدین یا منظور خاصی داشتین؟ 
با این امید که واقعاً نیت خیر در این زمینه داشته اید و احیاناً گوگل تو محله شما کار نمی کنه یا اصلاً رشته تون ادبیان چین باستان هست:
تعریف کرنل : Kernel Definition و (Kernel (computing و در مورد چجوری کار میکنه هم یه توضیح مختصر فارسی:



> طراحی هسته می تواند به دو نوع اصلی دسته بندی شود: یکپارچه (monolithic) و ریزهسته (microkernel). (البته روش سومی نیز به نام exokernel نیز وجود دارد که تاکنون بیشتر در تحقیقات مطرح شده است ولی در دنیای واقعی نیز در حال راه یابی است. روش ها و متدهای دیگری نیز هستند که کاربرد چندانی ندارند و از سه روش فوق مشتق شده آند.)
> هسته‌های یکپارچه طراحی ساده تری دارند و تقریبا تمامی طراحی ها تا دهه ۱۹۸۰ بدین گونه بوده آند. هسته‌های یکپارچه به صورت یک ایمیج باینری بزرگ که در فضای آدرس معینی قرار می گیرد پیاده سازی می گردد. این هسته در دیسک به صورت یک فایل باینری استاتیک مستقل ذخیره می شود. تمامی سرویس‌های هسته وجود دارند و در فضای بزرگ هسته اجرا می شوند. ارتباطات ناچیزی در هسته وجود دارد چون تمام هسته در فضای آدرس مشخصی قابل دسترسی است و نیاز به هیچ گونه ارتباطی نمی باشد. در این نوع هسته می توان به طور مستقیم توابع را صدا زد. این نوع طراحی دارای سادگی و بازدهی بالا می باشد و تقریبا تمامی یونیکس ها از این نوع طراحی بهره می برند.
> در آن سو, ریز هسته به صورت یک فایل باینری بزرگ پیاده سازی نمی شود. در عوض قابلیت‌های هسته در قالب پروسه‌های جداجدا که معمولا به آنها نام سرور (server) داده می شود خرد می گردد.
> 
> سرورهایی که به امکانات خاص نیاز دارند در فضای اجازه داده شده و بقیه در فضای کاربر اجرا می شوند. تمامی سرورها فضای آدرس جداگانه ای دارند لذا امکان صدا کردن مستقیم توابع یکدیگر را ندارند. در عوض ارتباطات در ریز هسته از طریق ارسال پیغام (message passing) صورت می گیرد. با پیاده سازی مکانیزم ارتباط بین پروسه ای (IPC) سریع این ارسال پیغام ها بین سرورها می تواند بر اساس مکانیزم IPC باشد. جداسازی سرورهای مختلف هنگامی که یکی از سرور ها دچار شکست شد از شکست کلی سیستم جلوگیری می کند. مساله ای که در طراحی یکپارچه وجود ندارد و با ناموفق بودن یک قسمت از هسته کل آن دچار شکست می شود. به علاوه ساختاریافتگی (modularity) طراحی ریز هسته به آن این امکان را می دهد که در حین اجرای هسته یک سرور با سرور دیگری جایگزین گردد. با توجه به هزینه ارتباط بین سرورها و تغییر رویه اجرایی (context switch) و آنتقال پیغام ها طراحی ریزهسته کمی نسبت به طراحی پکپارچه کندتر می باشد. برای جبران مساله سرعت کمتر و بهبود آن تقریبا تمامی سیستم عامل‌های امروزی که از این متد طراحی استفاده می کنند سرورها را در فضای هسته اجرا می کنند (جلوگیری از هزینه تغییر رویه اجرایی) و بالقوه امکان صداکردن مستقیم توابع سرورها را فراهم می سازند. سیستم عامل‌هایی چون windows NT و Mach ( که بعضی قسنت‌های Mac OS X بر مبنای آن است) این گونه هستند.
> 
> و اما طراحی لینوکس: لینوکس نکات مثبت هر دو متد ذکر شده را در خود جمع کرده است. لینوکس یک هسته یکپارچه دارد که در فضای آدرس مشخصی اجرا می گردد, لینوکس طراحی ای ساخت یافته (modular) با امکاناتی نظیر اعمال زور (preemption), رشته‌های سطح هسته (kernel threads) دارد و امکان بارگذاری فایل‌های فایل‌های باینری جدا در حین اجرا را نیز دارد (ماجول‌های هسته). با این امکانات لینوکس از یک سو سرعتی برابر با طراحی یکپارچه و از سوی دیگر کلیه امکانات ریزهسته را در خود جمع کرده است.
> 
> هنگامی که لینوس و دیگر توسعه دهندگان لینوکس در آن مشارکت می کنند بدون توجه به یونیکس ولی با رعایت API آن به پیاده سازی هسته می پردازند. بنابراین با توجه به اینکه لینوکس بر پایه هیچ یونیکسی نیست توسعه دهندگان لینوکس می توانند در هر لحظه بهترین تصمیمات را اتخاذ کنند و در لینوکس اعمال کنند. در زیر مقایسه ای بین هسته لینوکس و دیگر یونیکس ها صورت می پذیرد:
> ...


مطمئناً بسیار توضیح ناقص و کوتاهی هست ولی چون فارسی بود و در دسترس! براتون نقل قول نمودیم، منبع اصلی اش رو نمیدونم ولی من این مطلب رو از اینجا برداشتم؛ در مورد ماژول نویسی برای هسته هم یه نمونه ساده اش رو می تونید اینجا ببینید.
هسته سیستم عامل رو هم نمی نویسند، توسعه میدن؛ برای شروع Linux Kernel Newbies یک نقطه خوبی می تونه باشه و این pdf هم مفید خواهد بود ...

موفق باشید.

----------

