معماری سیستم عامل؛ کرنل و عملکرد آن چیست؟
احتمالا از زمانی که صاحب گوشی اندرویدی هستید یا استفادهی تخصصی از سیستم عامل کامپیوتر خود دارید با عبارت «کرنلِ لینوکس» آشنا شدهاید؛ با ما همراه باشید تا در این مقاله به بررسی کرنل و عملکرد آن بپردازیم.
همان طور که مطلع هستید سیستم عامل اندروید از کرنل لینوکس استفاده میکند و شاید از این مبحث با لینوکس آشنایی دارید؛ لینوکس یک سیستم عامل متنباز و از خانوادهی شبه یونیکس است. همه توزیعهای لینوکس بر پایه هسته اصلی آن یا کرنل بنا شدهاند که نرم افزارهای رایگان با آن تلفیق شده و نسخه کامل یا همان توزیع را تشکیل میدهند. این سیستم عامل توزیعهای متعددی دارد که هر توزیع بر اساس یکی از نیازهای کاربران توسعه داده شدهاند که از مهمترین و محبوبترین آنها میتوان به اوبونتو (توزیع دسکتاپ-نیاز کاربر معمولی)، کالی لینوکس (توزیع امنیتی) و ردهت (توزیع تجاری) و دیگر توزیعهای اصلی مانند دبیان، آرچ لینوکس و CentOS و دیگر توزیعها اشاره کرد. اما کرنل یا هسته سیستم عامل چیست؟
مقاله مرتبط
شاید مهمترین و سادهترین تعریف در خصوص کامپیوترها، گنگ بودن آنها است؛ کامپیوترها تنها یک عبارت ساده یعنی «اجرای دستورات» را میفهمند. دستورات به طور پیدرپی و با اولویتهای بخصوص اجرا میشوند. از لحظهای که کامپیوتر روشن میشود برای ادامهی کار به دستورات نیاز دارد و در حقیقت بدون دریافت دستورات قادر به انجام هیچ کاری نیست. حتی زمانی که دستگاه اندرویدی روشن میشود و لوگوی بوت مخصوص خود را نشان میدهد، سیپییو سیستم در حال دریافت دستورات و اجرای آنها است. در ظاهر، ما از اندروید تنها یک لانچر زیبا به همراه تعدادی اپلیکیشن میبینیم اما در حقیقت همانند دیگر سیستم عاملها در پشت پرده دستورات متعددی اجرا میشوند.
در کنار رابط کاربری، بخشی از سیستم در پشت پرده وجود دارد که از جملهی آنها میتوان به ماشین مجازی جاوا و SurfaceFlinger که وظیفهی جمع آوری همهی اجزای لازم برای نمایش گرافیک را دارد نام برد.
اما سیستم عاملی مانند اندروید از یک هستهی قوی بهرهمند است که با بررسی جزئیتر به این سطح میرسیم؛ این سطح کرنل یا هستهی سیستم عامل نام دارد که در اندروید، کرنل لینوکس است. همگی عملیات چند وظیفهای در سیستم عاملها از کرنل بهره میبرند. مثلا سیستم عاملهایی مانند ویندوز، OS X، آیاواس، ویندوزفون و اندروید هر کدام کرنل مخصوص خود را دارند. اما در بین همهی این سیستم عاملها، تنها اندروید از کرنلِ لینوکس استفاده میکند. سیستم عاملهای ویندوز و ویندوزفون کرنل خاص خود را دارند که معمولا با نام NT Kernel شناخته میشود و کرنلهای OS X و آیاواس، Darwin نام دارد.
علاوه بر این، تعدادی کرنل نیز وجود دارد که از جملهی آنها میتوان به کرنلهای شبه یونیکس در پروژهی FreeBSD و NetBSD، کرنل زمان واقعی در پروژهی FreeRTOS، کرنلهای نهفته یا سیستمهای embedded در پروژهی Contiki، کرنل کم قدرت مانند کرنل mbed OS از کمپانی آرم نام برد. به عبارت کلی همهی دستگاههای موجود از اینترنت اشیا گرفته تا ابزارهای پوشیدنی و ابر رایانهها، از کرنل استفاده میکنند.
کرنل به زبان سادهتر برنامهی هستهی سیستم است که منابع سیپییو، حافظهی سیستم، دستگاهها، فایل سیستم، شبکه و پردازشها را مدیریت میکند.
زمانی که اپلیکیشنی را اجرا میکنید، این کرنل است که وظیفهی انتقال اپ به حافظه و ایجاد پروسههای لازم برای اجرای آن را برعهده دارد؛ زمانی که اپلیکیشن به فضای حافظه نیاز دارد، کرنل حافظه را به آن اختصاص میدهد و حتی در مواقعی که اپلیکیشن برای برقراری ارتباط شبکهای نیاز دارد این کرنل است که ارتباطهای سطح پایین را برای آن فراهم میکند. درایور دستگاههایی مانند بلوتوث نیز در کرنل قرار دارد. زمانی که اپلیکیشنی قصد اجرای دستوراتی را در پشت پرده دارد، این کرنل است که تمامی پردازشهای بکگراند را به عهده میگیرد و هنگامی که اپلیکیشنی بسته میشود این کرنل است که حافظه و دیگر منابع در حال استفادهی این اپلیکیشن را پاکسازی میکند.
همان طوری که متوجه شدید کرنل تکه نرم افزار پیچیدهای است؛ کرنل لینوکس دارای بیش از ۱۵ میلیون خط در کدمنبع خود است که همهی این کدها شامل تمامی درایورها (درایورها ۷۰ درصد از کد کرنل را تشکیل میدهند)، کدهای پشتیبانی از دیگر معماری سیستمها مانند ARM, x86, MIPS, IBM, PowerPC و SPARC است. زمانی که کرنلی برای یک دستگاه مانند گوشی هوشمند توسعه داده میشود، همهی ۱۵ میلیون خط کد استفاده نمیشود و تنها کدهایی که لازمهی مصرف است مورد استفاده قرار میگیرد.
کرنلِ Monolithic و میکرو کرنل
با پیچیدهتر شدن سیستمها، کرنلها نیز با معماریهای مختلفی عرضه میشوند. دو نوع کرنل رایج با طراحیهای متفاوتی وجود دارند که کرنل Monolithic و میکرو کرنل نام دارند. کرنل لینوکس از نوع کرنل Monolithic است؛ بدان معنی که خود کرنل درون یک فضای خاص خود در حافظه اجرا میشود. در مقابل این کرنل، میکروکرنل قرار دارد که فرآیندهای مختلف کرنل را در بخشهای جداگانه قرار میدهد؛ بنابراین این نوع کرنل، پروسههای مختلف را تحت عنوان سرورها یا سرویسها اجرا میکند.
در سال ۱۹۹۲ که لینوکس تازه متولد شده بود، لینوس توروالدز و پروفسور اندرو تننبائوم در حال بحث دربارهی معماریهای مختلف کرنل Monolithic و میکرو کرنل بودند. در آن زمان تننبائوم میکروکرنل را ترجیح داد و لینوس کرنل Monolithic را نوشت. به همین دلیل این نوع کرنل به دلیل ترجیح لینوس، در سیستم لینوکس و به دنبال آن در اندروید نیز استفاده شد.
از آنجایی که کرنل لینوکس monolithic است، بنابراین راهی وجود دارد که بتوان بخشهای مختلف کرنل را بر اساس نیاز فعال یا غیرفعال کرد. این کار حین کامپایل به وسیلهی سیستمی که به کرنل اجازهی تنظیم، تلفیق و پیکربندی را میدهد قابل انجام است. بعضی از کانفیگها علاوه بر فعال و غیرفعال کردن برخی توابع خاص، قادر به تغییر نوع عملکرد کرنل نیز هستند. چون لینوکس و اندروید متنباز هستند، از اینرو میتوان نسخهای از اندروید را با کرنل بهینه شده ساخت تا برخلاف کرنل معمولی، از تنظیمات مختلف استفاده کند. این کرنل را میتوان به جای کرنل پیش فرض گوشی هوشمند استفاده کرد. برای این منظور یا باید بوت لودر گوشی هوشمند را آنلاک کرد یا گوشی را روت کرد.
شاید شناخته شدهترین کرنل جایگزین برای اندروید کرنلِ The Franco باشد که برای دستگاههای مختلف نکسوسی فراهم شده است. همچنین برای استفادهی راحت از این کرنل، اپلیکیشنی نیز طراحی شده است. البته The Franco تنها کرنل جایگزین برای اندروید نیست، کرنلهای دیگری مانند ElementalX و The Jolla نیز وجود دارند.
مزایا و معایب
برای شروع استفاده از دیگر کرنلها ابتدا باید دستگاه اندرویدی خود را روت کنید. برخی از کاربران با روت کردن گوشیهای خود مشکلی ندارند اما در مقابل افراد دیگری هستند که وسواس بیشتری را برای انجام دادن این اقدام به خرج میدهند. روت کردن نیاز به تجربه فنی نیز دارد که در نهایت جایگزین کردن کرنل نیز مهارت هر فردی نیست. علاوه بر این، باید به سازندهی کرنل نیز اطمینان داشت؛ این موضوع نه تنها به خاطر کدهایی است که وی در کرنل به کار برده، بلکه بیشتر به دلیل تعهد او در ارائهی خدمات پشتیبانی و برطرف کردن باگها است. جایگزین کردن کرنل معایبی زیادی دارد که ممکن است درنهایت به معیوب کردن بوت گوشی هوشمند بینجامد. زمانی که گوشی هوشمند اندرویدی خود را تهیه میکنید، فریمور این گوشی قبل از عرضه چندین بار مورد تست قرار گرفته است. اگر قصد نصب کرنل جدید را دارید، باید در حین بروز مشکل و زمانی که سازندهی کرنل پاسخگوی برطرف کردن باگها نیست، دارای این مهارت باشید که هنگام بروز چنین مشکلی، منشا آن را پیدا کنید.
این نکته را هم در نظر داشته باشید که در صورت روت کردن گوشی و جایگزین کردن کرنل آن، دستگاهتان دیگر شامل گارانتی نخواهد بود. معمولا سازندگان کرنلها که کرنلهای خود را در انجمنهایی مانند XDA منتشر میکنند، همواره تاکید دارند که در صورت نصب کرنل در دستگاه، گارانتی از بین رفته و هیچ مسئولیتی را در قبال خرابی دستگاه برعهده نمیگیرند.
در مقابل معایب، نصب کرنل مزایایی نیز دارد که میتوان با نصب آن، به تنظیمات متعددی دسترسی داشت. پس از نصب یک کرنل دیگر، میتوان به تمامی پورتهای دستگاه و تنظیماتی که در حالت پیش فرض در دسترس نیستند، دست یافت. همچنین میتوان به نسخههای متعدد کرنل لینوکس نیز دسترسی داشت. کاستوم کرنلها میتوانند مصرف باتری و عملکرد دستگاه را بر اساس تنظیمات کرنل و میزان استفادهی کاربر بهبود ببخشند. اما همان طور که قبلا بحث شد، بیشتر سازندهی دستگاههای هوشمند همانند گوگل، اپل و مایکروسافت در حال رقابت با یکدیگر هستند تا بهترین گوشیهای هوشمند با بهترین قیمت عرضه کنند. بنابراین اگر میتوان به نصب یک کرنل دیگر باتری را بهبود داد پس میتوان مطمئن شد که این سازندگان نیز توانایی عرضهی دستگاه هوشمند با باتری بهینه شده را دارند! از اینرو بهینه شدن مصرف باتری پس از نصب کاستوم کرنل به این معنی است که عملکرد دستگاه کاهش مییابد و در مقابل بهبود عملکرد دستگاه به معنی کاهش عمر باتری است. در حالت کلی هدف از نصب کرنل جایگزین این است که همزمان هم مصرف باتری و هم عملکرد دستگاه را بهبود بخشید.
نتیجه گیری
تمامی سیستم عاملهای چند وظیفهای دارای کرنل هستند؛ این کرنل است که وظیفهی مدیریت منابع سیستم از جمله حافظه، پردازشها و درایورها را بر عهده دارد. دیگر اجزای سیستم عاملها مانند ویندوز، OS X، اندروید و آیاواس در سطوحی مجزا از کرنل قرار دارند. کرنل مورد استفاده در اندروید، کرنل لینوکس است. از آنجایی که هر دو کرنل لینوکس و اندروید متنباز هستند، بنابراین قابلیت ایجاد کاستوم کرنل به همراه تنظیمات مختلف برای اندروید وجود دارد و میتوان از آن به عنوان کرنل جایگزین در دستگاه اندرویدی استفاده کرد. برای این منظور ابتدا باید دستگاه اندرویدی را روت و بوت لودر آن را آنلاک کرد. از کرنلهای محبوب میتوان به the Franco و ElementalX اشاره کرد.