PDA

View Full Version : سوال: هسته چیست؟؟؟



mostafanasiri
شنبه 17 مهر 1389, 13:43 عصر
سلام دوستان
می خواستم بدونم هسته ی سیستم عامل چیه،چجوری کار می کنه و نحوه ی ساخت یک هسته چجوریه؟
با تشکر:لبخند:

Saeed_m_Farid
شنبه 17 مهر 1389, 14:29 عصر
هسته به قسمت مرکزی میگن، مثلاً در مورد هلو یک جسم سخت هست که مغزش سمی است! یا مثلاً خورشید که هسته اش 15 میلیون درجه هست و خطر داره حسن! یا هسته زمین : وزن مخصوص هسته 10 درصد کمتر از مقداری است که از طریق آلیاژ Ne-Fi در فشار 1.5 تا 3 مگا بار تعیین می‌شود. بنابراین عناصر سبک وزن و احتمالا کربن ، سیلیکات ، پتاسیم ، گوگرد ، FeO و سرب و عناصر سیدروفیلی نظیر و ... در هسته وجود دارند. این عناصر ناسازگار نسبت به محیط شدیدا احیایی هسته زمین به همراه سلولهای همرفتی هسته مایع در لایه تخلیه می‌شوند و به احتمال زیاد از طریق پلومها و سوپر پلومها از خلال گوشته تحتانی ، تحولی و فوقانی به سطح انتقال می یابند. :لبخند:
***********
جدی این سوال رو سرِکاری پرسیدین یا منظور خاصی داشتین؟
با این امید که واقعاً نیت خیر در این زمینه داشته اید و احیاناً گوگل تو محله شما کار نمی کنه یا اصلاً رشته تون ادبیان چین باستان هست:
تعریف کرنل : Kernel Definition (http://www.linfo.org/kernel.html)و (Kernel (computing (http://en.wikipedia.org/wiki/Kernel_(computing)) و در مورد چجوری کار میکنه هم یه توضیح مختصر فارسی:

طراحی هسته می تواند به دو نوع اصلی دسته بندی شود: یکپارچه (monolithic) و ریزهسته (microkernel). (البته روش سومی نیز به نام exokernel نیز وجود دارد که تاکنون بیشتر در تحقیقات مطرح شده است ولی در دنیای واقعی نیز در حال راه یابی است. روش ها و متدهای دیگری نیز هستند که کاربرد چندانی ندارند و از سه روش فوق مشتق شده آند.)
هسته‌های یکپارچه طراحی ساده تری دارند و تقریبا تمامی طراحی ها تا دهه ۱۹۸۰ بدین گونه بوده آند. هسته‌های یکپارچه به صورت یک ایمیج باینری بزرگ که در فضای آدرس معینی قرار می گیرد پیاده سازی می گردد. این هسته در دیسک به صورت یک فایل باینری استاتیک مستقل ذخیره می شود. تمامی سرویس‌های هسته وجود دارند و در فضای بزرگ هسته اجرا می شوند. ارتباطات ناچیزی در هسته وجود دارد چون تمام هسته در فضای آدرس مشخصی قابل دسترسی است و نیاز به هیچ گونه ارتباطی نمی باشد. در این نوع هسته می توان به طور مستقیم توابع را صدا زد. این نوع طراحی دارای سادگی و بازدهی بالا می باشد و تقریبا تمامی یونیکس ها از این نوع طراحی بهره می برند.
در آن سو, ریز هسته به صورت یک فایل باینری بزرگ پیاده سازی نمی شود. در عوض قابلیت‌های هسته در قالب پروسه‌های جداجدا که معمولا به آنها نام سرور (server) داده می شود خرد می گردد.

سرورهایی که به امکانات خاص نیاز دارند در فضای اجازه داده شده و بقیه در فضای کاربر اجرا می شوند. تمامی سرورها فضای آدرس جداگانه ای دارند لذا امکان صدا کردن مستقیم توابع یکدیگر را ندارند. در عوض ارتباطات در ریز هسته از طریق ارسال پیغام (message passing) صورت می گیرد. با پیاده سازی مکانیزم ارتباط بین پروسه ای (IPC) سریع این ارسال پیغام ها بین سرورها می تواند بر اساس مکانیزم IPC باشد. جداسازی سرورهای مختلف هنگامی که یکی از سرور ها دچار شکست شد از شکست کلی سیستم جلوگیری می کند. مساله ای که در طراحی یکپارچه وجود ندارد و با ناموفق بودن یک قسمت از هسته کل آن دچار شکست می شود. به علاوه ساختاریافتگی (modularity) طراحی ریز هسته به آن این امکان را می دهد که در حین اجرای هسته یک سرور با سرور دیگری جایگزین گردد. با توجه به هزینه ارتباط بین سرورها و تغییر رویه اجرایی (context switch) و آنتقال پیغام ها طراحی ریزهسته کمی نسبت به طراحی پکپارچه کندتر می باشد. برای جبران مساله سرعت کمتر و بهبود آن تقریبا تمامی سیستم عامل‌های امروزی که از این متد طراحی استفاده می کنند سرورها را در فضای هسته اجرا می کنند (جلوگیری از هزینه تغییر رویه اجرایی) و بالقوه امکان صداکردن مستقیم توابع سرورها را فراهم می سازند. سیستم عامل‌هایی چون windows NT و Mach ( که بعضی قسنت‌های Mac OS X بر مبنای آن است) این گونه هستند.

و اما طراحی لینوکس: لینوکس نکات مثبت هر دو متد ذکر شده را در خود جمع کرده است. لینوکس یک هسته یکپارچه دارد که در فضای آدرس مشخصی اجرا می گردد, لینوکس طراحی ای ساخت یافته (modular) با امکاناتی نظیر اعمال زور (preemption), رشته‌های سطح هسته (kernel threads) دارد و امکان بارگذاری فایل‌های فایل‌های باینری جدا در حین اجرا را نیز دارد (ماجول‌های هسته). با این امکانات لینوکس از یک سو سرعتی برابر با طراحی یکپارچه و از سوی دیگر کلیه امکانات ریزهسته را در خود جمع کرده است.

هنگامی که لینوس و دیگر توسعه دهندگان لینوکس در آن مشارکت می کنند بدون توجه به یونیکس ولی با رعایت API آن به پیاده سازی هسته می پردازند. بنابراین با توجه به اینکه لینوکس بر پایه هیچ یونیکسی نیست توسعه دهندگان لینوکس می توانند در هر لحظه بهترین تصمیمات را اتخاذ کنند و در لینوکس اعمال کنند. در زیر مقایسه ای بین هسته لینوکس و دیگر یونیکس ها صورت می پذیرد:
۱- لینوکس بارگذاری دینامیک ماجول‌های هسته را پشتیبانی می کند. اگر چه طراحی هسته لینوکس یکپارچه است ولی این امکان را دارد که در موقع لزوم بعضی از کدهای هسته به آن وارد شوند یا از آن خارج شوند.
۲- لینوکس چند پردازندگی متقارن (SMP) را پشتیبانی می کند. اگر چه نسخه‌های جدید یونیکس ها این امکان را پشتیبانی می کنند ولی این پشتیبانی در نسخه‌های قدیمی وجود نداشت.
۳- هسته لینوکس دارای اعمال زور است یا به اصطلاح preemptive است. یونیکس‌های قدیمی تر امکان اعمال زور را نداشتند.
۴- لینوکس روش جالبی در پیاده سازی رشته‌های اجرایی یا thread ها دارد. در لینوکس تقریبا فرقی مابین یک رشته و یک پروسه معمولی نیست. تنها فرقی که وجود دارد این است که بیت thread ها منابع به اشتراک گذاشته می شوند.
۵- لینوکس یک مدل شی گرا بر مدیریت دستگاه ها به همراه رخدادهای قطع و وصل و فایل سیستم دستگاه در فضای کاربر (sysfs) دارد.
۶- لینوکس از پیاده سازی بعضی امکانات یونیکس که طراحی خوبی ندارند و به کار نمی روند چشم پوشی کرده است مانند STREAMS که تقریبا مرده است.
۷- و در نهایت لینوکس بر خلاف یونیکس‌های دیگر به معنای واقعی کلمه ازاد است.

نسخه‌های هسته لینوکس

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

نسخه هسته لینوکس به وسیله سه عدد مشخص می شود. مثلا 2.6.20 . عدد اول (۲) که عدد اصلی (major version) نامیده می شود زمانی تغییر می کند که تغییرات بسیار عمده و بنیادی در هسته اتفاق بیفتد. عدد دوم (۶) عدد فرعی (minor version) نامیده می شود. اگر این عدد زوج باشد هسته پایدار و اگر فرد باشد هسته توسعه است. دو عدد اول سری هسته را نیز نشان می دهند مثلا هسته مثال مذکور سری 2.6 است. عدد سوم نیز patchlevel نامیده می شود.

هسته‌های توسعه یک سری فاز توسعه دارند. در ابتدا توسعه دهندگان هسته بر روی امکانات جدید کار و تحقیق و بحث می کنند. بعد از آن مرحله ثبت امکانات یا feature freeze می باشد. پس از این مرحله هیچ امکان جدیدی به لیست امکانات موردنظر برای پیاده سازی اضافه نخواهد شد. توسعه کدها شروع شده و پس از مدتی که هسته به مرحله ای برسد که بتوان آن را به عنوان پایدار معرفی کرد مرحله ثبت کد یا code freeze اغاز می شود. پس از این مرحله فقط رفع اشکال ها قبول می شوند. پس از پایان این مرحله می توان امید داشت نسخه پایداری از هسته منتشر شود.

اجتماع توسعه هسته لینوکس

هنگامی که شما توسعه کد برای هسته لینوکس را اغاز می کنید جزیی از اجتماع عمومی توسعه هسته لینوکس خواهید بود. تالار اصلی توسعه دهندگان هسته لینوکس لیست پستی هسته می باشد. اطلاعات عضویت را می توانید در سایت http://vger.kernel.org مشاهده کنید. لیست پستی شلوغ با بیش از ۳۰۰ نامه الکترونیکی در روز.

در قسمت اینده به مقدمات مباحث هسته لینوکس خواهیم پرداخت. مروری بر کد منبع هسته, کامپایل هسته و مروری بر بوت لودرها مهمترین مباحث قسمت اینده خواهند بود
مطمئناً بسیار توضیح ناقص و کوتاهی هست ولی چون فارسی بود و در دسترس! براتون نقل قول نمودیم، منبع اصلی اش رو نمیدونم ولی من این مطلب رو از اینجا (http://yazdlug.org/content/view/235/44/)برداشتم؛ در مورد ماژول نویسی برای هسته هم یه نمونه ساده اش رو می تونید اینجا (http://forum.persiannetworks.com/f75/t9968.html)ببینید.
هسته سیستم عامل رو هم نمی نویسند، توسعه میدن؛ برای شروع Linux Kernel Newbies (http://kernelnewbies.org/) یک نقطه خوبی می تونه باشه و این pdf (http://www.xenotime.net/linux/mentor/linux-mentoring.pdf)هم مفید خواهد بود ...

موفق باشید.