هسته لينوکس يکي از بزرگترين پروژههاي منبعباز است که قدمتي طولاني دارد. همانطور که ميدانيد، توزيعهاي مختلف لينوکسي، خود لينوکس نيستند و لينوکس تنها به هسته اين سيستمعامل ميگويند که 13 ميليون خط کد دارد. هسته سيستمعامل پايينترين سطح نرمافزاري است که با سختافزار کامپيوتر در ارتباط است. لينوکس مسوول تمام نرمافزارهايي است که در حالت کاربري (User Mode) اجرا ميشوند. همچنين پروسههاي مختلف از جمله سرورها را اجرا ميکند و اطلاعات لازم از پروسهها را در اختيار ديگر پروسهها قرار ميدهد.
انواع هستهها
براي توليد يک هسته دغدغههاي مختلفي وجود دارد. بهطور کلي، بيشتر هستهها به سه نوع يکپارچه، ميکروهسته و ترکيبي تقسيم ميشوند. لينوکس يک هسته يکپارچه است، در صورتي که OS X (مکينتاش) و ويندوز7 از هستههاي ترکيبي استفاده ميکنند. بهتر است به هر 3 نظري داشته باشيم:
ميکروهسته
ميکروهسته تنها کارهاي مشخصي را انجام ميدهد: مديريت پردازنده، حافظه و IPC. بقيه كارهاي کامپيوتر، جانبي تلقي شده و در حالت کاربر اجرا ميشوند. ميکروهستهها قابليت پرتابلبودن دارند چون سيستمعامل نيازي ندارد که نوع ويدئوکارت متصل به سيستم را بداند. ميکروهستهها ردپاي کوچکي دارند (هزينه انجام کار) و حافظه و فضاي مصرفي آنها بسيار پايين است. از طرفي امنتر از هستههاي ديگر هستند، چرا که تنها پروسههاي مشخصي در حالت کاربر اجرا ميشوند که نيازي به اجرا در حالت ناظر (Supervisor Mode) ندارند.
ميکروهستهها، ويژگيهاي خوبي دارند که پرتابلبودن، حجم کم، حافظه مصرفي کم و امنيت از جمله آنهاست. البته سختافزارهاي پشتيباني شده توسط اين هسته کمتر است و بهدليل اجراي درايورهاي سختافزاري در حالت کاربري، سختافزارها کندتر هستند. ضمن آنکه پروسهها براي دريافت اطلاعات بايد در صف منتظر بمانند. همچنين پروسهها نميتوانند به ديگر پروسهها دسترسي پيدا کنند.
هسته يکپارچه
هستههاي يکپارچه درست نقطه مقابل ميکروهستهها هستند و نهتنها پردازنده، حافظه و IPC، بلکه چيزهاي ديگري از جمله درايورهاي دستگاهها، مديريت سيستم فايل و فراخوانهاي سيستمي را مديريت ميکنند. هستههاي يکپارچه در دسترسي سختافزاري و چندوظيفگي بهتر عمل ميکنند زيرا برنامهاي که در حال اجرا، انتظار يا توقف است ميتواند بهصورت مستقيم اطلاعات ديگر پروسهها را دريافت کند و در هيچ صفي براي اين عمل منتظر نميماند. البته اين موضوع ميتواند مشکلساز هم باشد چون بيشتر پروسهها درحالت ناظر اجرا ميشوند و اگر درست رفتار نکنند، ميتوانند سيستم را از کار بيندازند.
از ويژگيهاي اين هسته ميتوان به دسترسي بهتر به سختافزارها و برنامهها، ارتباط سادهتر پروسهها با يکديگر و عدمنياز به نصب درايور سختافزار براي سختافزارهاي شناخته شده در سيستم و در نهايت عکسالعمل سريعتر پروسهها بهدليل عدموجود صف انتظار براي آنهاست.
از مشکلات اين هسته، بزرگ بودن آن، مصرف حافظه بالا و امنيت پايينتر بهدليل اجراي همهچيز در حالت ناظر است.
هستههاي ترکيبي
هستههاي ترکيبي ميتوانند انتخاب کنند که چه چيزي در حالت کاربر اجرا شود و چه چيزي در حالت ناظر. بيشتر مواقع چيزهايي مثل درايورهاي سختافزاري يا ورودي خروجيها در حالت کاربر و فراخوانهاي سيستمي و ارتباط ميان پروسهها در حالت ناظر اجرا ميشوند. اين يعني استفاده بهينه از هر دو که مشکل کوچکي ايجاد ميکند؛ توليدکنندگان سختافزار بايد کار بيشتري انجام دهند چون مسووليت اجراي همه چيز با آنهاست. همچنين اين هستهها از مشکل ميکروهستهها نيز برخوردارند و باز هم مشکل انتظار در صف وجود دارد.
از ويژگيهاي اين نوع هستهها اين است که توسعهدهنده ميتواند خود انتخاب کند که چه چيز در حالت کاربر و چه چيز در حالت ناظر اجرا شود. همچنين نصب آن حجم کمتري نسبت به ميکروهستهها ميگيرد و از ديگر مدلها انعطافپذيرتر است.
اما اين مدل معايبي نيز دارد که وجود لگ در اجراي پروسه و مديريت پروسهها توسط کاربر بخشي از آنهاست.
فايلهاي هسته لينوکس کدامها هستند؟
فايل هسته در اوبونتو، در مسير
boot / قرار دارد و vmlinuz-version نام دارد. نام vmlinuz از دنياي يونيکسي آورده شده که در آن دوران، يعني دهه 60 ميلادي به هسته يونيکس، يونيکس ميگفتند و بنابراين لينوکسيها هم هسته خود را لينوکس نام گذاشتند. پس از اينکه حافظه مجازي براي بهتر کردن قابليتهاي چندوظيفگي توسعه پيدا کرد، سرنام vm در ابتداي فايل هسته قرار داده شد تا نشان دهد اين هسته از حافظه مجازي پشتيباني ميکند. تا مدتهاي زيادي هسته لينوکس vmlinux ناميده ميشد تا اينکه آنقدر بزرگ شد که حافظه بوت آن فشرده شد و x آخر کلمه بهدليل فشرده شدن هسته با سيستم zlib، به z تغيير پيدا کرد؛ هر چند هميشه اين روش فشردهسازي كاربرد ندارد و گاهي از lzma يا
bzip2 استفاده ميشود. در برخي از هستههاي لينوکسي، نام هسته تنها zImage است. سيستم نگارشبندي آن بهصورت چهارگانه A.B.C.D است. A.B احتمالا 6/2 است، C نگارش فعلي هسته است و D نشانگر وصلهها يا نگارشهاي رفع عيب است.
در فولدر boot / فايلهاي بسيار مهم ديگري نيز قرار دارند که معمولا initrd.img-version، system.map-version و config-version وجود دارد.
فايل initrd اغلب بهعنوان ديسکهاي رم استفاده ميشوند که فايل اصلي هسته را باز و اجرا ميکنند.
فايل system.map براي استفاده در مديريت حافظه بهکار ميرود تا زماني که هسته بهطور کامل بارگذاري شود.
فايل config به هسته ميگويد که چه گزينهها و ماژولهايي بايد بعد از کامپايل در هسته بارگذاري شود.
معماري هسته لينوکس
از آنجا که لينوکس هسته يکپارچهاي دارد، حجم زيادي نسبت به ديگر هستهها داشته و پيچيدگي آن نيز بيشتر است. اين ويژگي طراحي در سالهاي اخير مورد نقد قرار گرفته و هنوز هم برخي از دغدغههاي امنيتي هستههاي يکپارچه را در خود دارد. براي گذر از چنين دغدغههايي، توسعهدهندگان هسته لينوکس ماژولهاي هسته را ايجاد کردند که ميتواند هنگام اجرا بارگذاري شده يا از حالت بارگذاري خارج شود. به اين ترتيب ميتوان به هسته لينوکس در هنگام اجرا امکاناتي را افزود يا از آن حذف کرد. اين کار فقط افزودن قابليتهاي سختافزاري به هسته نيست و ميتوان حتي کل هسته را بدون نياز به راهاندازي مجدد کامپيوتر تعويض کرد. فقط تصور کنيد اگر ميشد سرويس پک ويندوز را نصب کرد و حتي يکبار هم آن را ريستارت نکرد!
ماژولهاي هسته
چه ميشد اگر ويندوز تمام درايورهاي سختافزاري را در خود داشت و تنها براي استفاده از يک دستگاه کافي بود آن را روشن کنيم؟ اين همان چيزي است که ماژولهاي هسته لينوکس انجام ميدهند. ماژولهاي هسته که بهنام ماژولهاي قابل بارگذاري هسته (LKM) شناخته ميشوند، يکي از روشهاي استفاده از سختافزارهاي سيستم بدون استفاده از تمام حافظه موجود است.
يک ماژول عموما قابليتهايي مثل دستگاهها، سيستمهاي فايل و فراخوانهاي سيستمي را به هسته اضافه ميکند. ماژولهاي قابل بارگذاري هسته پسوند ko . دارند و معمولا در دايرکتوري lib/modules/ قرار ميگيرند. بهدليل طبيعت ماژولارشان ميتوان بهسادگي هسته را با انتخاب ماژولهاي قابل بارگذاري يا ممنوع کردن تعدادي از آنها براي بارگذاري سفارشي کرد که هنگام بالا آمدن سيستم از طريق دستور menuconfig يا پس از بالا آمدن سيستم و از طريق فايل boot/config/ ميتوان اين کار را انجام داد. همچنين ميتوان بدون راهاندازي مجدد سيستم، از طريق دستور modprobe ماژولهايي را به هسته اضافه يا از آن حذف کرد.
در برخي از توزيعهاي لينوکسي، ماژولهاي منبعبستهاي وجود دارند که توسط تيم توسعه لينوکس توسعه نيافتهاند. مثلا در توزيع اوبونتو، توسعه دهندههاي نرمافزاري همچون nVidia و ATI بهجاي ارائه کدمنبع براي قرارگيري در هسته لينوکس، تنها به ارائه فايلهاي کامپايلشده ko بسنده کردهاند. اين ماژولها البته رايگان هستند و ميتوان آنها را دريافت کرد ولي قابليت سفارشيسازي و تغيير ندارند. بههمين دليل در برخي از توزيعهاي لينوکسي که بسيار به آزادي نرمافزاري معتقد هستند، اين نرمافزارها وجود ندارد.
هسته جادو نيست، اما براي هر کامپيوتري لازم است. هسته لينوکس به اين دليل از OS X يا ويندوز متفاوت است که درايورهاي سختافزاري در سطح هسته وجود دارد و همه چيز بدون نصب نرمافزار اضافه قابل استفاده است. اميدواريم اين مقاله توانسته باشد بخش کوچکي از کاري که هسته لينوکس انجام ميدهد را نشان دهد. براي مطالعه بيشتر ميتوانيد به سايت زير مراجعه کنيد: