هسته لینوکس

هسته لینوکس یک هسته سیستم‌عامل آزاد شبه یونیکس است که در ابتدا توسط لینوس توروالدز در سال ۱۹۹۱ ساخته شد و سپس با کمک توسعه‌دهندگان در سراسر جهان پیشرفت داده شد.
توروالدز این پروژه را به صورت تفریحی آغاز کرد اما اکنون این هسته سیستم‌عامل بخشی از سیستم‌عامل گنو/لینوکس است که توسط میلیون‌ها نفر بر روی تلفن‌های همراه و رایانه‌های رومیزی و وب‌سرورها در حال اجراست.
این کرنل در اصل بر روی پردازنده اینتل مدل ۸۰۳۸۶ و تقریبا بطور کامل با استفاده از زبان برنامه‌نویسی سی نوشته شده است. این کرنل سیستم‌عامل تحت مجوز عمومی گنو بصورت نرم‌افزار آزاد توزیع می‌شود.
لینوکس بهترین کرنل شناخته شده برای سیستم‌عامل گنو/لینوکس است. توزیع نرم‌افزار براساس این کرنل «توزیع گنو/لینوکس» نامیده می‌شود.
لینوکس یک کرنل سیستم‌عامل کامپیوتر شبه یونیکس هست. لینوکس یکی از پراستفاده‌ترین کرنل‌های سیستم‌عامل در جهان است، که سیستم عامل گنو/لینوکس مبتنی بر آن بوده و برای سامانه رایانه‌های سنتی، معمولا در شکل توزیع گنو/لینوکس، و هم‌چنین بر روی تجهیزات تعبیه شده مانند مسیریاب‌ها گسترش یافته است.
سیستم عامل اندروید برای تبلت‌ها، رایانه‌ها و تلفن‌های هوشمند نیز، ازکرنل لینوکس استفاده می‌کند.
در اصل، لینوکس در سال ۱۹۹۱ توسط یک دانشجوی علوم کامپیوتر فنلاندی به نام «لینوس توروالدز» خلق شد، برای کامپیوتر شخصی وی و بدون هیچ‌گونه قصد چند سکویی (نرم‌افزارهایی که در چندین سکوی رایانه قابل اجرا باشند)، اما دارای علم توسعه‌یافته‌ای بود که یک آرایه‌ای از معماری‌های کامپیوتر را، بیشتر از هر سیستم‌عامل دیگر یا کرنل، پشتیبانی کند. لینوکس به سرعت توسعه‌دهندگان و کاربرانی که کدهایی از پروژه‌های نرم‌افزاری رایگان برای استفاده سیستم‌عامل‌های جدید درست کردند را به خود جذب کرد. لینوکس کمک و همکاری‌های زیادی از جانب هزاران برنامه‌نویس دریافت کرد. با اینکه قسمتی از کرنل عاملیت هست، برنامه راه‌اندازی دستگاه‌ها سخت‌افزار را کنترل می‌کنند؛ (مین لاین) یا «وانیل» برنامه راه‌اندازی دستگاه‌ها به طور معمول ثابت و پایدار می‌باشد.
به‌هرحال، واسط بین کرنل و ”LKM” (یک فایلی که شامل کد برای اجرای کرنل می‌باشد)، بر خلاف بسیاری از کرنل‌ها و سیستم‌عامل‌های دیگر، خیلی ثابت و پایدار توسط طرح نمی‌باشد.
لینوکس، توسط شرکت‌کنندگان جهانی توسعه یافته است، که یک مثال برجسته از نرم‌افزارهای آزاد و بازمتن است. بحث‌های روزانه توسعه‌دهندگان، در فهرست پستی کرنل لینوکس (LKML) قرار دادند. لینوکس تحت GLPv2 منتشر شده، و با تعدادی میان افزار (Firmware) تحت پروانه‌های غیر آزاد گوناگون منتشر می‌شود.
پیشینه
در سال ۱۹۹۱ توروالدز بوجود آمدن این کرنل را با یک رایانامه تاریخی و مشهور بر روی یوزنت در گروه خبری comp.os.minix اعلام کرد
«من یک سیستم‌عامل آزاد و فقط یک سرگرمی که مثل گنو بزرگ و حرفه‌ای نخواهد شد، برای اجرا روی پردازشگرهای اینتل ۸۰۳۸۶ و ۸۰۴۸۶ نوشته‌ام…»
در این زمان پروژه گنو تعداد زیادی از اجزاء مورد نیاز یک سیستم‌عامل آزاد را ساخته بود اما کرنل جدید آن هنوز ناقص بود. بنابراین کرنل نوشته شده توسط توروالدز برای این سیستم‌عامل آزاد استفاده شد.
در سال ۱۹۹۱، سیستم‌عامل بی‌اس‌دی هنوز نتوانسته بود خود را از قید و بندهای قانونی رها کند. به همین دلیل، فضایی برای لینوکس گشوده شد و با وجود عملکرد محدود، نگارش‌های نخستین آن به سرعت توسعه‌دهندگان و کاربرهای خود را جمع کرد. به زودی هکرها در بهینه‌سازی دستورالعمل‌ها و ایده‌های لینوکس شرکت کردند و امروزه تعداد افرادی که در این موارد همکاری می‌کنند به صدها برنامه‌نویس رسیده است.
تاریخ
در اوریل ۱۹۹۱، لینوس توروالدز، یک دانشجوی ۲۱ ساله در دانشگاه هلسینکی(Helsinki)، در فنلاند بر روی بعضی از ایده‌های ساده یک سیستم عامل شروع به کار کرد. وی با یک task switcher (=رفتن از یک برنامه به برنامه دیگر بدون خروج از برنامه نخست) در زبان اسمبلی اینتل ۸۰۳۸۶ و یک راه انداز ترمینال شروع کرد. در ۲۵ اوت ۱۹۹۱، توروالدز اطلاعاتی رابر روی “comp.os.minix”، یک گروه خبری در Usenet قرار داد:من در حال انجام یک سیستم عامل رایگان (فقط برای سرگرمی و از روی علاقه، و بزرگ و حرفه‌ای مانند گنو نخواهد شد) برای هم نوع‌های 386(486)AT هستم. این از اوریل در حال ساخته شدن هست، و در حال آماده شدن می‌باشد. من هر بازخوردی در Minix بر روی چیزهایی که مردم می‌پسندند یا نمی‌پسندند را می‌خواهم، با این وجود سیستم عامل من هم تا حدی به این شباهت دارد (بعضی از ارایش‌های فیزیکی فابل‌های سیستم در میان اشیا دیگر).
در حال حاضر من بش(bash) 1.08و gcc(1.40) را انتقال داده‌ام، و هم‌چنین بخش‌هایی که بنظر می‌رسند که کار کنند. این نشان می‌دهد که در این چندین ماه، به کجا رسیده‌ام. بله، هیچ کد مینیکسی در آن نیست و یک سامانه پرونده چند رشته‌ای دارد. قابل انتقال نیست (از task switching 386 استفاده می‌کند)، و به درستی از سوی دیسک‌های سخت AT پشتیبانی نمی‌شود، این تمام چیزیست که من دارم .
… این را به طور معمول با زبان C نوشته شده، اما بیشتر مردم نخواهند گفت که من چه چیزی را باC نوشتم. این از هر ویژگی امکان پذیر۳۸۶ که من می‌توانم پیدا کنم استفاده می‌کند، همچنان که این یک پروژه ست به من درباره ۳۸۶ یاد داد. همان طور که اشاره شد، آن از MMU، برای صفحه بندی و همچنین برای قطعه سازی استفاده می‌کند.
آن تقسیم بندی که باعث می‌شود آن را واقعا به ۳۸۶ وابسته سازد (هر کاری دارای یک بخش 64 Mb برای کد و اطلاعات می‌باشد- بیشترین حد ۶۴ کار در 4Gb. هر شخصی که بیشتر از 64 Mb نیاز داشته باشد – کوکی‌های سخت)…. برخی تز فایل‌های C من (بویژه mm.c) تقریبا به اندازه اسمبلرها هستند. …
بعد از آن، بیشتر مردم کد به پروژه کمک کردند. در اوایل، انجمن MINIX کدهایی و ایده‌هایی به لینوکس کمک کرد.
در سپتامبر ۱۹۹۱، نسخه لینوکس ۰٫۰۱ بر روی سرور FTP(ftp.funet.fi) دانشگاه فنلاند و Research Network(FUNET) منتشر شد. آن دارای ۱۰۲۳۹ کد خط می‌باشد. در نهایت در اکتبر ۱۹۹۱، نسخه لینوکس ۰٫۰۲ منتشر شد.
در دسامبر۱۹۹۱، لینوکس ۰٫۱۱ منتشر شد. این نسخه اولین نسخه خود میزبان(self-hosted) لینوکس ۰٫۱۱ می‌توانست توسط یک کامپیوتر در حال اجرای لینوکس ۰٫۱۱ کامپایل شود.
وقتی او نسخه ۰٫۱۲ ر در فوریه ۱۹۹۲ منتشر کرد، توروالدزGPL را بر روی گواهی نامه پیش نویس قبلی خود، که اجازه توزیع مجدد تجاری نداشت، پذیرفت.
یک گروه خبری به اسم alt.os.linux شروع به کار کرد، و در ۱۹ ژانویه ۱۹۹۲، اواین اطلاعیه ساخته شد. در ۳۱ مارچ1992 alt.os.linux به comp.os.linux تبدیل شد.
سیستم XWindow به زودی به لینوکس منتقل شد. این پرش بزرگ اعداد نسخه (از ۰٫۱ تا ۰٫۹) این احساس را به وجود آورد که که یک نسخه با شماره ۱٫۰ بدون هیچگونه ضعفی نزدیک است و در حال آماده شدن است.
به هر حال، این مقدار کمی خوش بینی را اثبات می‌کند، و از ۱۹۹۳ تا اوایل ۱۹۹۴ ،۱۵ نسخه توسعه یافته ورژن ۰٫۹۹ ظاهر شد. در ۱۴ مارچ ۱۹۹۴، لینوکس ۱٫۰٫۰ منتشر شد، با ۱۷۶۲۵۰ خط کد. در مارچ ۱۹۹۵، لینوکس ۱٫۲٫۰ منتشر شد.(۳۱۰۹۵۰).
ورژن ۲ لینوکس، در ۹ ژوئن ۱۹۹۶، توسط نسخه‌های اصلی تحت عنوان نسخه ۲ در جریان افتاد.
ویژگی‌ها
«لینوکس» فقط نام کرنل سیستم‌عامل گنو/لینوکس است. واژه «کرنل»، به سامانه نرم‌افزاری سطح پایینی (به معنی نزدیک‌تر به سخت‌افزار در رده‌بندی معماری سیستم‌عامل) اشاره می‌کند که لایه‌ای در معماری سیستم‌عامل به نام لایه انتزاع سخت‌افزار را تامین می‌کند و دیسک‌ها و سامانه پرونده‌گردانی را بررسی می‌نماید و تراز کردن (Balancing) ذخیره‌سازی داده‌ها و شبکه‌بندی و برقراری امنیت را برعهده دارد.
باید توجه کرد که کرنل یک سامانه کامل نیست، ساخت یک سامانه کامل با کرنل لینوکس به نام سیستم‌عامل لینوکس شهرت یافت (اگرچه بعضی‌ها ترجیح می‌دهند آن را سیستم‌عامل گنو/لینوکس بنامند و بر سر این نکته مجادله بسیاری وجود دارد. مردم عموما کرنل و سیستم‌عامل را با هم اشتباه می‌گیرند و این مساله که سیستم‌عامل به عنوان «گنو/لینوکس» نامیده شود، تصورات اشتباه را به سمت صحیح هدایت می‌کند)
تاریخ‌های مهم
۲۱ آوریل ۱۹۹۱: در این زمان «لینوس تروالدز» فعالیت خود را بر روی تعدادی ایده برای یک سیستم‌عامل جدید آغاز کرد. او کار خود را با زبان برنامه‌نویسی اسمبلی روی یک رایانه مبتنی بر پردازنده اینتل ۸۰۳۸۶ آغاز کرد. اولین تلاش او در این راستا طراحی و پیاده‌سازی یک درایور بود.
مدل به‌کاررفته در طراحی کرنل
کرنل‌های متنوعی برای سیستم‌های عامل وجود دارد که از این بین می‌توان به مهمترین آنها اشاره کرد:
کرنل یکپارچه (کرنل یکپارچه)
ریزکرنل
کرنل ترکیبی (hybrid kernel)
برون کرنل (Exo-kernel)
مدل کرنل لینوکس یکپارچه است. لینوکس طراحی ساخت یافته(modular) دارد و چون ملحقات کرنل در فضای کرنل اجرا می‌شوند، از سرعت بالایی برخوردار می‌باشد.
مزایا
با اینکه کرنل لینوکس یکپارچه است ولی قابلیت بار کردن (Load) کردن پویای (Dynamic) ماژول‌های کرنل (kernel modules) را دارد.
کرنل لینوکس از چند پردازندگی موازی (Symmetric Multi Processing) حمایت می‌کند.
کرنل لینوکس غیر انحصاری است. (Preemptive)
از نخ‌های کرنل (Kernel Threads) برای ایجاد ساختار ریز کرنل هر چه کوچکتر استفاده می‌کند.
حالات فرایندها در لینوکس
اجرا (Running): در حال اجرا یا در وضعیت انتظار برای دریافت CPU
انتظار (Waiting): در حال انتظار برای یک وقفه یا رخداد که خود دوحالت دارد:
وقفه پذیر (Interruptible): فرایندهای منتظر می‌توانند توسط signalها وقفه پذیرند.
وقفه ناپذیر (Uninterruptible): در این حالت فرایند مستقیما با سخت‌افزار درگیر است و وقفه نمی‌پذیرد.
توقف (Stopped): فرایند متوقف شده است. حالت دیباگ هم جزو این وضعیت است.
زامبی (Zombie): فرایند به هر دلیلی halt شده ولی هنوز اشاره گری در بردار فرایند دارد.
Swapping: در ارتباط با حافظه مجازی است.
کرنل‌های بر پایه لینوکس
لینوکس-لیبره
لینوکس-لیبره نام پروژه‌ای از بنیاد نرم‌افزار آزاد آمریکای لاتین است که به نگهداری و نشر کرنل‌ای صددرصد آزاد بر پایه لینوکس می‌پردازد. بدین منظور کلیه نرم‌افزارهایی که بدون کد متن در لینوکس به کار رفته‌اند یا کد متنشان تا حدودی گیج‌کننده یا پنهان است، یا از پروانه‌های ناآزادی استفاده می‌کنند که اجازه تغییر در نرم‌افزار را نمی‌دهد، یا به نوعی لازم می‌دارند که از نرم‌افزارهای ناآزاد دیگر استفاده شود، کنار گذاشته می‌شود
موسی‌لینوکس
این کرنل مخصوص میکروکنترولرهایی طراحی شده که فاقد واحد مدیریت حافظه می‌باشند.