هستهی سیستمعامل (kernel) چیست و چه اهمیتی دارد؟
اگر به طور اندکی با مفاهیم مربوط به نرمافزار گوشی یا کامپیوتر آشنا باشید، احتمالا با اصطلاح Kernel یا هستهی سیستمعامل لینوکس روبهرو شدهاید. اندروید هم از جمله سیستمعاملهایی است که از هستهی لینوکس استفاده میکند. در حقیقت، این بخشی جداییناپذیر از گوشیهای هوشمند اندرویدی است اما هستهی سیستمعامل دقیقا چیست و چرا اهمیت زیادی دارد؟
در رابطه با نام لینوکس باید بگوییم که خالق این سیستمعامل یعنی لینوس توروالدز با ترکیب لینوس و یونیکس کلمهی لینوکس را برای سیستمعامل متعلق به خانوادهی شبه یونیکس انتخاب کرده است. اما دربارهی کرنل یا هستهی سیستمعامل چه میتوان گفت؟ این هسته در کامپیوترها و دیگر گجتها چه نقشی دارد؟ در ادامه به این موضوع میپردازیم.
به زبان بسیار ساده، هستهی سیستمعامل بخشهای مهم و کلیدی مانند پردازنده، حافظه سیستم، شبکه و دیگر چیزهای اینچنینی را کنترل میکند. همچنین مسؤولیت مدیریت تمام فرایندها و وظایفی که در گوشی هوشمند در حال اجرا هستند، بر عهده دارد. این یعنی وقتی یک اپلیکیشن را باز میکنید، هستهی آن وظیفهی بارگذاری آن در حافظه، ایجاد پردازشهای لازم و اجرای آن را بر عهده دارد. زمانی که اپلیکیشن به حافظه نیاز دارد، هستهی سیستمعامل مقدار لازم حافظه را به آن اختصاص میدهد.
درایور بخشهایی مانند بلوتوث هم در هسته قرار دارد. هنگامی که اپلیکیشن بسته میشود، هستهی سیستمعامل حافظه و سایر منابع استفاده شده توسط آن را آزاد میکند. همانطور که میبینید، هستهی سیستمعامل یک بخش اساسی برای نرمافزار محسوب میشود و نقش مهمی برای عملکرد گوشی ایفا میکند.
نگاهی دقیقتر به هستهی سیستمعامل
تمام سیستمعاملهای پیشرفته از چیزی موسوم به هسته بهره میبرند. بهعنوان مثال میتوانیم به ویندوز، macOS، iOS و البته اندروید اشاره کنیم. در میان این سیستمعاملها، تنها اندروید است که از هستهی لینوکس بهره میبرد. ویندوز مبتنی بر یک هستهی اختصاصی است و سیستمعاملهای اپل مانند macOS و iOS هم از یک هستهی اختصاصی موسوم به داروین استفاده میکنند.
در این میان، تعدادی هستههای شبه یونیکس از طرف پروژههایی مانند FreeBSD، OpenBSD و NetBSD هم وجود دارد. حتی باید به یک هستهی کمقدرت از طرف شرکت Arm هم اشاره کنیم که با نام mbed OS ارائه شده است.
هستهی لینوکس یک نرمافزار بسیار پیچیده محسوب میشود و شامل میلیونها خط کد است. در این هسته کدهای لازم برای پشتیبانی از درایورهای مختلف و همچنین معماریهای گوناگون مانند ARM، x86، RISC-V و دیگر چیزها دیده میشود. زمانی که این هسته برای یک گجت خاص (مثلا گوشی) آماده میشود، بخشهایی از کدهای آن استفاده نمیشود اما در نهایت حتی اگر این بخشها هم حذف شوند، باز هم با نرمافزار بسیار پیچیدهای روبهرو میشوید.
ریزهسته در برابر هستهی یکپارچه
مانند تمام سیستمهای نرمافزاری پیشرفته، در رابطه با طراحی هستهی سیستمعامل هم میتوان از رویکردهای مختلفی استفاده کرد. بهعنوان مثال هستهی لینوکس یک هستهی یکپارچه محسوب میشود. این یعنی هستهی فوق یک برنامه است که از یک فضای مشخص در حافظه استفاده میکند. در مقابل این رویکرد باید به ریزهسته اشاره کنیم که بخشهای اساسی آن بهعنوان سرویسهای جداگانه اجرا میشوند و با یکدیگر تعامل دارند.
در سال ۱۹۹۲ که لینوکس تازه متولد شده بود، بین لینوس توروالدز و پروفسور اندرو تننبام (که چندین کتاب مشهور در زمینهی طراحی سیستمعامل و شبکه نوشته)، بحثهای متعددی دربارهی مزایا و معایب استفاده از هستهی یکپارچه و ریزهستهها شکل گرفت. آقای «تننبام» هستهی یکپارچه را ترجیح میداد ولی در آن دوران «توروالدز» مشغول نوشتن کدهای هستهی یکپارچه بود. در نهایت لینوکس هستهی یکپارچهی خود را حفظ کرد و اگر به استفاده از سیستمعاملهای مبتنی بر ریزهستهها علاقه دارید، میتوانید به Minix 3 نگاهی بیندازید.
با توجه به اینکه لینوکس مبتنی بر یک هستهی یکپارچه است، باید راهی برای فعال و غیرفعال کردن بخشهای مختلف هسته بسته به نیاز کاربران ارائه دهد. این کار حین کامپایل به وسیلهی سیستمی که به کرنل اجازهی تنظیم و پیکربندی را میدهد قابل انجام است. برخی از پیکربندیها چیزی بیش از فعال یا غیرفعال کردن بخش خاصی را انجام میدهند در واقع آنها میتوانند رفتار هسته را هم تغییر دهند. این مشخصه هنگام توسعه و تغییر ویژگیهای سختافزاری گوشیهای هوشمند اهمیت زیادی دارد.
اندروید چگونه از لینوکس استفاده میکند؟
از نظر ظاهری، اندروید یک لانچر خوب است که اپلیکیشنها و بازیهای مختلف را اجرا میکند. اما در پشت صحنهی این رابط کاربری چندین سیستم پیچیده و فریمورک قرار دارد. اپلیکیشنها برای انجام کارهایی مانند ارسال نوتیفیکیشن، دسترسی به موقعیت مکانی، فونت، SSL و چندین کار دیگر باید از کتابخانهها و فریمورکهای موجود در اندروید استفاده کنند.
زیر تمام این کتابخانهها و فریمورکهای مختص اندروید، هستهی سیستمعامل لینوکس قرار دارد. همانطور که گفتیم این هسته در کنار مدیریت فرایندها، حاوی کدهایی برای تمام معماریهای مختلف تراشهها و درایورهای سختافزاری است. بهعنوان مثال میتوانیم به درایورهای مربوط به دوربین، بلوتوث، وایفای، فلش مموری، USB و صدا اشاره کنیم.
اندروید همچنین با افزودن برخی ویژگیهای خاص به هستهی لینوکس، آن را برای گوشیهای هوشمند مناسبتر کرده است. گوگل با اندروید ۸ از پروژهی Treble رونمایی کرد که با ماژولار شدن بخشهای مختلف اندروید، شرکتهای سازنده بدون نیاز به دست زدن به هستهی اصلی میتوانند مشخصههای مختلفی را توسعه دهند. به لطف همین مشخصه، شرکتها برای انتشار آپدیتهای نرمافزاری با چالشهای کمتری روبرو میشوند.
سازندگان گوشیها چگونه هستهی سیستمعامل را تغییر میدهند؟
با توجه به طیف وسیع گوشیهای اندرویدی، هستهی سیستمعامل در هر کدام از این گوشیها تا حدی با یکدیگر فرق دارند. شرکتهای سازندهی گوشیها باید با تولیدکنندگان تراشهها همکاری کنند تا هستهی سیستمعامل به بهینهترین شکل ممکن برای گوشیها آماده شود. به همین خاطر بیشتر اوقات بخشی از ویژگیهای هستهی اصلی کنار گذاشته میشود و در عوض درایورهای جدیدی به آن اضافه میکنند.
در همین زمینه میتوانیم به نحوهی استفاده از هستههای پردازنده اشاره کنیم. همانطور که احتمالا میدانید، تمام هستههای پردازنده عملکرد یکسانی ندارند و برخی برای انجام وظایف سنگین استفاده میشوند و برخی دیگر که کممصرف هستند، وظایف سبک را انجام میدهند. اما در این میان، شرکتهای سازندهی گوشیهای هوشمند با دستکاری پارامترهای هستهی سیستمعامل میتوانند کاری کنند که مثلا عملکرد بهتر در ازای مصرف انرژی بیشتر ارائه شود یا اینکه برای افزایش عمر باتری، تمام توان تراشه استفاده نشود.
با این حال، شرکتها گاهی اوقات در این زمینه تصمیمهای غلطی میگیرند. برخی از آنها برای افزایش عمر باتری، تا حد زیادی توان تراشه را کاهش میدهند که این موضوع با اعتراض کاربران روبهرو میشود. مثلا وانپلاس ۹ پرو برای افزایش طول عمر باتری از تمام توان تراشهی خود استفاده نمیکند و همچنین طی سالهای گذشته برخی شرکتها به دلیل دستکاری عملکرد پردازنده برای تقلب در بنچمارک با حواشی زیادی روبهرو شدهاند.
اندروید و آیندهی استفاده از هستهی سیستمعامل لینوکس
یکی از جنبههای منفی موفقیت لینوکس، سرعت زیاد تغییرات آن است. به همین خاطر نسخههای خاصی از هستهی لینوکس وجود دارد که به مدت چندین سال پشتیبانی میشود. اندروید با استفاده از این هستهها، هستههای جدید موسوم به ACK را آماده میکند که شامل بخشهای مختص این سیستمعامل هستند.
با اندروید ۱۱، روند یکپارچه کردن هستهی اصلی اندروید و خارج کردن بخشهای خاص مربوط به تراشه آغاز شد. با این کار، شرکتهای سازندهی گوشیها دیگر لازم نیست برای گوشیهای مختلف به هستهی اصلی دست بزنند و همین موضوع فرایند آمادهسازی نرمافزار آنها را راحتتر میکند. تعدادی از گوشیهای مبتنی بر اندروید ۱۲ از این مشخصه بهره میبرند.
به لطف این رویکرد، گوگل راحتتر از گذشته میتواند هستهی اندروید را برای شرکتهای مختلف بهروزرسانی کند که همین موضوع منجر به افزایش امنیت میشود. از طرف دیگر، باید به پتانسیل این رویکرد برای افزایش تعداد سالهایی که این گوشیها آپدیت دریافت میکنند، اشاره کنیم.
منبع: Android Authority