کرنل لینوکس چیست و چگونه کار میکند و وظایف آن چیست | ۲۰۲۲


کرنل لینوکس چیست و چگونه کار میکند و وظایف آن چیست | ۲۰۲۲
کرنل لینوکس چیست لینوکس ، پرکاربردترین نرم افزار سورسکد اپنسورس در تاریخ نرم افزارهای کامپیوتری است و در هر جایی که بتوانید تصور کنید وجود دارد. در کامپیوتر، سرور، تلفن همراه، تلویزیون، زیردریایی، هواپیما، ماشین های خودکششی و حتی ایستگاه فضایی بین المللی! اما شاید کمتر کسی بداند که کرنل واقعا چیست و چگونه کار می کند؟ پاسخ کامل مطمئناً در این مقاله گنجانده نشده است، اما ما در مورد چگونگی عملکرد مهم ترین بخش های لینوکس کرنل صحبت خواهیم کرد.
تا به امروز (۲۰۲۲)، لینوکس کرنل شامل بیش از ۲۲ میلیون خط کد است که هر کدام حاوی دستورالعمل های مهمی است، اما قبل از شروع بحث درباره نحوه عملکرد لینوکس کرنل ، باید بدانیم خود کرنل چیست و چه مسئولیت هایی دارد.
کرنل چیست
کرنل هسته سیستم عامل، که از منابع سیستم مانند پردازنده، حافظه، و غیره اختصاص است از برنامه های دیگر. فکر می کنم از کرنل به عنوان یک زیرساخت و یک ساختمان اصلی؛ تمام دستگاه های استفاده از زیرساخت های ساخت و ساز برای استفاده مناسب است. به عنوان مثال، استفاده از یخچال و فریزر ما نیاز به یک محل ثابت و یک پریز. آشپزخانه، پیریز و سیم کشی ساختمان بخشی از زیرساخت اصلی و ارائه منابع لازم مانند برق برای لوازم مربوطه.
کرنل مفاهیم انتزاعی برای توسعه دهندگان که می خواهند به توسعه برنامه های کاربردی برای پلت فرم خود را فراهم می کند. این مفاهیم انتزاعی شامل ساده سازی وظایف پیچیده (برای مثال، برای مفاهیم انتزاعی، در نظر ذخیره سازی فایل بر روی هارد دیسک.. برای انجام این کار، شما لازم نیست به دانستن محل از بلاکها و کلاسترهای ها و خوشه اشغال شده توسط فایل روی هارد دیسک شما می دانید که فایل X، برای مثال، بر روی دستگاه C ذخیره می شود).
کرنل فقط یک بخشی از نرم افزار از سیستم عامل که شامل مفاهیم انتزاعی، آن است که در واقع یکی از مهمترین قسمت های مهم آن نیست. درایور سخت افزار ارتباط برقرار (و یا در واقع بحث) با بخش های دیگر را از طریق کرنل ، به طوری که کرنل ندارد به یاد بگیرند که چگونه به صحبت می کنند
بخش های فردی از سخت افزار که ساخته شده است. این چیزی است که باعث می شود کار هسته به تنهایی در بسیاری از مارک ها و مدل سخت افزار های مختلف.
منظور از مفاهیم انتزاعی در لینوکس چیست؟
وقتی از مفاهیم انتزاعی صحبت می کنیم، باید بدانیم که دقیقاً منظورمان از مفاهیم انتزاعی چیست. مفاهیم انتزاعی مرتبط با لینوکس بسیار شبیه به مفاهیم انتزاعی مورد استفاده در هنر هستند و به طور کلی مفاهیم انتزاعی نوعی مفهوم هستند که همه به سادگی از درک آن ناتوان هستند! به طور کلی، انتزاع در علوم کامپیوتر راهی برای پنهان کردن جزئیات و مفاهیم پیچیده پشت یک فرآیند است.
به عنوان مثال، خواندن و نوشتن متغیرها در RAM را در نظر بگیرید. هر مادربرد ممکن است شامل انواع مختلفی از کنترلرهای حافظه باشد. ممکن است رایانه شما از پردازنده های ARM، Intel، AMD، SPARC، POWERPC یا MIPS استفاده کند، اما این نباید ربطی به برنامه Hello World که نوشتید داشته باشد، زیرا کرنل بین سخت افزارهای مختلف در قالب یک رابط تمایز قائل می شود. به صورت کلی و انتزاعی نشان می دهد.
استفاده از این رابط برای توسعه دهندگان از یک طرف شبیه به یک تابع فراخوانی است، اما از طرف دیگر چیزی متفاوت است زیرا یک سیستم فراخوانی است. فراخوانی سیستم تابعی است که به چیزی از کرنل نیاز دارد. در این مرحله، کرنل بدون توجه به سخت افزار مورد استفاده در سیستم، درخواست را اجرا می کند (کرنل Linux از استاندارد POSIX برای تماس های سیستمی استفاده می کند).
مهمترین وظایف کرنل لینوکس چیست ؟
ارتباط بین کاربر و سیستم
همچنین هسته لینوکس باید اطلاعات و منابع سیستمی را در اختیار کاربر قرار دهد تا کاربر هر زمان که خواست به اطلاعات مورد نیاز خود دسترسی داشته باشد و تغییرات مورد نظر خود را اعمال کند.
مدیریت فرآیند پردازش
یکی دیگر از وظایف لینوکس کرنل این است که هر پردازنده زمان کافی برای تکمیل فعالیت خود را داشته باشد، در واقع لینوکس کرنل به عنوان مدیر فرآیند هر فرآیند را بررسی کرده و محتوا و ضرورت فرآیند را اولویت بندی می کند.
مدیریت حافظه و رم
RAM برای اجرای هر نرم افزار و هر پردازشی که روی سیستم انجام می شود مورد نیاز است. کرنل لینوکس وظیفه مدیریت حافظه هر فرآیند را بر عهده دارد تا مشکلی در سایر فرآیندها وجود نداشته باشد.
مدیریت سختافزارها و نرمافزارها به کمک درایورها
قطعات بی شماری مانند هارد، کارت گرافیک، کارت صدا، رم و غیره در کامپیوتر وجود دارد. که توسط هسته لینوکس مدیریت و هماهنگ می شوند. کرنل با کمک رانندگان دانش لازم را برای تمامی قطعات دارد و زمینه را برای اتصال قطعات با یکدیگر و فعالیت مونتاژ فراهم می کند.
دسترسی به شبکه به منظور ارسال و دریافت دادهها روی یک شبکه کامپیوتری
Physical Media Agnostic (اترنت، وایرلس، LTE، دایلآپ) راهی است برای گفتن اینکه هیچ فرض قبلی در مورد ساختار شبکه وجود ندارد و در شبکه های معیوب انعطاف بیشتری می دهد. برای مسائل نرم افزاری و سخت افزاری استفاده می شود. به عنوان مثال، سیستم عامل ها و دستگاه های مختلف مانند تلفن همراه، تبلت و لپ تاپ را می توان از طریق پروتکل Wi-Fi به یکدیگر متصل کرد.
زمانبندی کارها
اشتراکگذاری زمانی پردازنده
لود بالانسینگ و اولویتبندی کارها
پروتکل ابزارها (USB, FireWire, Serial, Parallel)
فلش یواسبی
وبکم
ماوس و کیبورد
امنیت
صدور پِرمیشن برای کاربران و گروههای کاربری
صدور پِرمیشن به منابع
کرنل لینوکس با فراهم کردن سرویسهای ذکر شده به صورت انواع مختلف فراخوانهای سیستمی، توسعهٔ برنامهها را آسانتر میکند. بیایید به برخی از روشهایی که باعث سادهسازی توسعه و تولید بیشتر میشود نگاهی بیاندازیم.
زمانبندی کارها
زمان بندی وظایف مختلف یک موضوع بسیار پیچیده و مهم در لینوکس است. بنابراین، ما در مورد الگوریتمهای زمانبندی صحبت نمیکنیم، بلکه فقط در مورد مسئولیتها و وظایف کرنل صحبت میکنیم، و اینکه چگونه کرنل ترتیب هر فرآیند را برای استفاده از CPU تعیین میکند، حتی اگر صدها فرآیند مختلف به طور همزمان وجود داشته باشد.
قبل از ظهور پردازندههای چند هستهای، کامپیوترها میتوانستند فقط یک کار را در یک زمان انجام دهند. هر فرآیند دارای زمان مساوی برای پردازش متوالی بود، اما این کار به قدری سریع انجام شد که تصور اشتباهی از اجرای همزمان فرآیندها ایجاد کرد.
قبل از پردازندههای چند هستهای، تولیدکنندگان کامپیوتر مجبور بودند بیش از یک پردازنده را در مادربرد تعبیه کنند تا همزمان بیش از یک پردازش را اجرا کنند.
این کار هنوز انجام می شود، اما با پردازنده های چند هسته ای و با استفاده از مفهومی به نام Hyperthreading که به دو فرآیند اجازه می دهد به طور همزمان روی هسته یکسان برخی از مدل های پردازنده اینتل اجرا شوند (این ویژگی به سیستم ها اجازه می دهد تا بیش از صدها رشته را به طور همزمان اجرا کنند. ).
هر فرآیند به زمان پردازش CPU نیاز دارد و کرنل چیزی است که تضمین می کند که هر فرآیند به موقع برنامه ریزی شود. علاوه بر این، برخی از فرآیندها باید به تعویق بیفتند، که ممکن است به دلیل انتظار برای عملیات I / O یا هر چیز دیگری باشد. اکنون، به جای اشغال CPU در حین انتظار، ممکن است فرآیند دیگری بیاید و برود، و فرآیند اصلی ممکن است پس از سپری شدن زمان مورد نیاز به حالت اجرا برگردد.
در نتیجه عملکرد کلی سیستم را افزایش می دهد.به طور کلی، زمانبندی به این معنی است که توسعهدهنده نگران اجرای سایر فرآیندها در رایانه نیست و فقط باید نگران اجرای روان برنامه باشد.
دسترسی به شبکه
وقتی صحبت از شبکه می شود، همه چیز کمی متفاوت است زیرا هر پروتکل فرمت خاص خود را دارد. بنابراین، نیاز به رمزگذاری جداگانه برای پشتیبانی از هر یک از پروتکل های شبکه وجود دارد (خوشبختانه فقط از پروتکل های IPv4 و IPv6 به طور گسترده استفاده می شود، در غیر این صورت برای توسعه دهندگان لینوکس کرنل بسیار دشوار خواهد بود). البته بسیاری از پروتکل های دیگر مانند DECnet، IPX و AppleTalk در لینوکس پشتیبانی می شوند، اما استفاده و پشتیبانی از آنها در برنامه های جدیدتر کاربرد چندانی ندارد.
بیایید به IPv4 و IPv6 برگردیم. هر دو ساختار آدرس دهی بسیار متفاوتی دارند، اما این به همان اندازه مفید است که مشکل ساز است. پروتکل مورد نیاز – برای تشخیص هسته – به راحتی توسط آدرس IP تعیین می شود. علاوه بر این، کرنل پشتیبانی از TCP، UDP، SCTP و ICMP را فراهم می کند که هر یک از آنها از طریق تماس های سیستمی قابل دسترسی هستند.
فرقی نمی کند که سیستم شما از طریق پروتکل اترنت به شبکه متصل باشد یا LTE یا Dialup. تماس های سیستمی به همان صورت باقی خواهند ماند.
تصور کنید بسته به اینکه از WiFi یا Ethernet استفاده کرده اید، به نسخه های مختلف کروم یا فایرفاکس نیاز دارید. اجرای این روش برای توسعه دهندگان خسته کننده بود. اما این ویژگی کرنل Linux نیز یک مفهوم بسیار قدرتمند است و انعطاف پذیری قابل توجهی را ارائه می دهد که بهره وری توسعه دهنده و راحتی کاربر را افزایش می دهد.
ذخیرهسازی اطلاعات
دو راه برای ذخیره اطلاعات، ذخیره سازی موقت و ذخیره سازی دائمی وجود دارد. تا به ذخیره سازی موقت از رم همان؛ همه چیز در رم نیازی به طور دائمی ذخیره می شود. نمونه ای از یک درک بهتر از این هنگام گشت و گذار در اینترنت است. شما هر صفحه شما را مشاهده به طور دائم بر روی کامپیوتر شما ذخیره می شود را نمی خواهم.
کرنل لینوکس اجازه می دهد تا شما را به صورت شفاف به خواندن و نوشتن دادهها به رم، صرف نظر از سخت افزار استفاده می شود. مهم نیست که اگر شما در حال اجرا هستند لینوکس بر روی اینتل i386 را پردازنده های قدیمی تر و یا از آخرین مدل های مبتنی بر ARM روی تلفن های آندروید. در همان زمان، شما لازم نیست به هر گونه سازگاری و یا تغییر کد در همه.
توجه داشته باشید که کرنل بخشی از لینوکس است که اصلاح را به حمایت از سخت افزار های مختلف است، و تغییرات در کرنل به شما اجازه استفاده از رابط عمومی را بدون استفاده از سخت افزار یکپارچه شده است.
علاوه بر این، فروشگاه های کرنل تمام فرآیندهای در حافظه خود را، که بدان معنی است که فرآیندهای خود لازم نیست بدانید که چه بخشی از حافظه آنها چرا که تمام حافظه است که به آنها قابل مشاهده متعلق به آنها است. در واقع، این روش تخصیص حافظه امنیتی بدون نیاز به مداخله توسعه را افزایش می دهد.
ذخیره سازی دائم ذخیره سازی بر روی هارد یا فلش دیسک سخت خود است. به طور مشابه، پوست کش کرنل تفاوت در ارتباط با SATA، PATA، SCSI، USB، M.2 و دیگر پروتکل های ذخیره سازی، اجازه می دهد یک نرم افزار برای خواندن و نوشتن فایل ها بر روی هر رابط با استفاده از هر پروتکل شناخته شده و فایل سیستم کار خواهد کرد
بدون هیچ گونه تغییر برنامه، و این ویژگی کرنل می دهد قدرت غیر قابل مقایسه به هر دو توسعه دهنده و کاربر.این همچنین استفاده مجدد از کد و بهره وری توسعه دهنده را افزایش می دهد زیرا نیازی به کد جداگانه برای پیکربندی های مختلف نیست.
انواع هسته های لینوکس
هسته یا کرنل لینوکس انواع مختلفی دارد که در ادامه به طور مختصر آنها را بررسی خواهیم کرد :
– هسته یکپارچه (Monolithic Kernel):
معماری سیستم در این حالت به گونهای است که فضای مجازی تمام درخواستهای سیستمی ابتدایی که در تمام وظایف کرنل مانند مدیریت حافظه، مدیریت فرآیندها و … نیاز است را در بر میگیرد. در واقع تمام سرویسها در یک فضا در هسته انجام میشوند به همین دلیل حجم کرنل و به دنبال آن حجم سیستم عامل افزایش مییابد. البته در این حالت پردازشها سریعتر انجام میشوند.
این نوع معماری نقطه مقابل ریز هسته یا kernel Micro است.
هستههای یونیکس ( BSD ها از جمله OpenBSD ، NetBSD ، FreeBSD و solaris، IBM AIX ، HP – UX
، Mini ) و هستههای شبه یونیکس ( لینوکس ) نمونههایی از این نوع معماری هستند.
مزایای هسته یکپارچه:
• به دلیل نبود فضای جداگانه برای کرنل و کاربر فرآیندها به سرعت انجام میشوند.
• وظایف کرنل مانند مدیریت فرآیند پردازش با تماسهای سیستمی انجام میشود.
معایب هسته یکپارچه:
• در صورت اضافه شدن سرویس جدید تمام سیستم عامل نیاز به بررسی و ویرایش مجدد خواهد داشت.
• در صورت خراب شدن هر قسمت از سرویسها تمام سیستم عامل از کار میافتد.
– ریز هسته (Micro Kernel):
در ریز هسته یا میکرو کرنل سرویسهای هسته و سازوکار خدمات برای کاربر در فضاهای مختلفی انجام میشود و این تمایز فضاها باعث میشود حجم کرنل و در نتیجه حجم سیستم عامل کاهش یابد. البته عیب این حالت این است که در این حالت چون فضاها متفاوت هستند ارتباط بین اپلیکیشنها و سرویسها با پیام میسر است که سرعت ارتباط را کاهش میدهد.
در این ساختار، ریز هسته تنها بخشی است که بالاترین سطح دسترسی را دارد که آن را وضعیت هسته مینامند.
در ساختار میکرو کرنل اضافه شدن نرمافزار جدید به سادگی امکان پذیر است.
– هسته ترکیبی (Hybrid Kernel):
در این ساختار هستهی سیستم عامل به طور همزمان هم ویژگیهای ریز هسته و هم ویژگیهای هستهی یکپارچه را دارد. هدف از این ساختار این بوده است که ساختار هسته شبیه به حالت ریز هسته باشد ولی مانند هستهی یکپارچه عمل کند.
در هسته ترکیبی ( بر خلاف ریز هستهها ) تقریبا تمام خدمات و سرویسهای سیستم عامل در فضای هسته قرار دارد که مشابه هسته یکپارچه است ولی بر خلاف هستههای یکپارچه در زمانی که سیستم در حال اجراست نمیتوان ماژول جدیدی به هسته اضافه یا ماژولی را حذف کرد.هستههای ترکیبی با نام Modular Kernel نیز شناخته میشوند.
سیستم عاملهای شرکت مایکروسافت مانند NT 4.0 و NT 3.51 و NT 3.5 و NT 3.1 و ۲۰۰۰ و Vista و XP و ۸ و ۷ و ۸.۱ و ۱۰ و سیستم عامل شرکت اپل Mac OS X از نمونههای هستههای ترکیبی هستند.
– نانو کرنل (Nano Kernel):
Nano Kernel یک سرویس مجازی و بسیار کوچکتر از میکرو کرنل است و از نانو ثانیه پشتیبانی میکند.
– ابرون هسته (ExoKernel) :
هدف از ساختار این هسته جدا کردن مدیریت و حفاظت از منابع است. ExoKernel ها عملکرد محدودی دارند به همین دلیل حجم کوچکی نیز اشغال میکنند.
۲۲ میلیون خط کسی میتونه بتنهایی تو همه اون متخصص باشه؟ من فکر کنم خود لینوس توروالدز هم حساب کار از دستش در رفته، احتمالا این توانایی فقط در اختیار چند تا معدود شرکت بزرگ مثل گوگل و … باشه