هسته لینوکس یا Linux kernel میلیون ها دستگاه را در پشت پرده نیرو می دهد. اما همه نمی دانند که هسته واقعاً چگونه سخت افزار و نرم افزار را مدیریت می کند.
Linux kernel مانند پلی است که ارتباط محاسباتی بین برنامه ها و سخت افزار را امکان پذیر می کند و منابع سیستم را مدیریت می کند. Linus Torvalds هسته لینوکس را با C و اسمبلی توسعه داد و به این ترتیب، او موفق به ایجاد یک هسته سبک وزن و قابل حمل شد که به عنوان منبع باز برای عموم منتشر شد.
شما میتوانید هسته لینوکس را در بخشهای مختلف مانند فضا، رایانه، ساعتهای هوشمند، تلفنهای همراه، روباتیک و سلامت ببینید. اما آیا تا به حال از خود پرسیده اید که Linux kernel در زیر هود چگونه کار می کند؟
استفاده از سخت افزار در Linux
Linux kernel، اول از همه، کنترل میکند که چه سختافزاری اجرا میشود و زمانی که کامپیوترتان را روشن میکنید به چه روشی اجرا شود. علاوه بر این، کنترل نرم افزارهای سطح بالا به لطف رابط برنامه نویسی امکان پذیر است. برای مثالی از این کنترل ها، این امکان برای شما وجود دارد که اطلاعات مربوط به سخت افزارهای نصب شده در اسلات های مادربرد خود را مشاهده کرده و از این اطلاعات دقیق بهره مند شوید.
همچنین، این رابط برنامه نویسی یک لایه انتزاعی را فراهم می کند. به عنوان مثال، اگر می خواهید با دوستان خود مکالمه ویدیویی داشته باشید، به یک وب کم نیاز دارید. لایه انتزاعی این امکان را برای نرم افزار مورد استفاده شما فراهم می کند تا از این وب کم صرف نظر از ساخت و مدل آن استفاده کند. نرم افزار اینجا فقط می تواند از رابطی که برای لینوکس وجود دارد استفاده کند. هسته لینوکس فراخوانی های تابع این رابط را به دستورات سخت افزاری واقعی که وب کم نیاز دارد ترجمه می کند.
با استفاده از سیستمهای فایل مجازی /proc و /sys ، هسته لینوکس میتواند اطلاعات دقیقی درباره سختافزاری که شناسایی میکند صادر کند. در زیر می توانید چند ابزار مورد استفاده برای این کار و اینکه کدام دستگاه ها و کارت هایی را صادر می کنند را مشاهده کنید:
- lspci: برای دستگاه های PCI
- lsusb: برای دستگاه های USB
- lspcmcia: برای کارت های PCMCIA
همانطور که می بینید، توزیع لینوکس در تصویر بالا روی VirtualBox اجرا می شود. با این حال، شما این فرصت را دارید که اطلاعات زیادی مانند VGA، کنترلر USB، بریج ها (bridges) و کنترلر SATA را مشاهده کنید.
همچنین می توانید از پارامتر -v برای دریافت اطلاعات بسیار دقیق تر استفاده کنید.
در هسته لینوکس، برنامهها معمولاً از طریق فایلهای خاصی که در دایرکتوری /dev وجود دارند به دستگاهها دسترسی پیدا میکنند. این فایل های ویژه نشان دهنده درایوهای دیسک و سایر دستگاه های فیزیکی هستند. فایل هایی مانند /dev/hda, /dev/sdc, /dev/sdc3, /dev/input/mouse0 و dev/snd/* نمونه هایی از این فایل های خاص هستند.
Linux File System Management
File systems یکی از قابل توجه ترین اجزای Linux kernel هستند. سیستم فایل لینوکس یکی از بزرگترین مزایای آن است. همه فایل های یک سیستم لینوکس در یک شاخه جمع می شوند. بنابراین کاربران می توانند از این سلسله مراتب برای رسیدن به مکان های مورد نظر خود استفاده کنند.
نقطه شروع این سلسله مراتب دایرکتوری ریشه (/) است. سایر زیر شاخه ها در زیر پوشه ریشه قرار دارند. پرکاربردترین زیرشاخه زیر / دایرکتوری /home است. این زیر شاخه شامل زیر شاخه های دیگری است و هر دایرکتوری دارای فایل هایی است که داده های واقعی را ذخیره می کند.
به عنوان مثال، می توانید به یک فایل متنی روی دسکتاپ خود فکر کنید. اگر یک فایل متنی به نام helloworld.txt روی دسکتاپ خود ایجاد می کنید، می توانید به آن به عنوان /home/muo/Desktop/helloworld.txt اشاره کنید. مثال /muo در اینجا البته متفاوت خواهد بود. زیرا نام این زیر شاخه به نام کاربر فعلی شما بستگی دارد. با این سیستم نامگذاری، هسته لینوکس بین فضای ذخیره سازی واقعی و فیزیکی موجود بر روی دیسک ترجمه می شود.
همچنین، هسته لینوکس می تواند داده ها را از چندین دیسک ادغام کند. اینجاست که سیستم نصب وارد عمل می شود. از یکی از دیسک ها در سیستم ریشه استفاده می کند و بقیه را به دایرکتوری های موجود در سلسله مراتب نصب می کند. سپس دیسک های دیگر در زیر نقاط نصب قرار می گیرند. این به کاربران این امکان را می دهد که دایرکتوری home / را روی یک هارد دیسک دوم که شامل زیر شاخه های دیگری نیز می باشد، ذخیره کنند.
هنگامی که دیسکی را در فهرست /home قرار می دهید، می توانید از مکان های معمولی به این دایرکتوری ها دسترسی داشته باشید. بنابراین، مسیرهایی مانند /home/muo/Desktop/helloworld.txt به کار خود ادامه می دهند.
با دستور findmnt -A می توانید نقاط اتصال بین فایل های سیستم خود را مشاهده کنید.
با بسیاری از فرمت های file system ، می توانید داده ها را به صورت فیزیکی روی دیسک ذخیره کنید. شناخته شده ترین فرمت های سیستم فایل ext2، ext3 و ext4 در لینوکس هستند. با این حال، بسیاری از فرمت های سیستم فایل دیگر نیز وجود دارد. در هر صورت، شما باید فایل سیستم را قبل از نصب فرمت کنید. برای این کار می توانید از دستوراتی مانند mkfs.ext3 (mkfs مخفف make file system و ext3 سیستم فایل است) استفاده کنید.
این دستورات مسیر فایل دستگاهی را که می خواهید فرمت کنید به عنوان پارامتر می پذیرد. این یک عملیات مخرب است و اگر نمیخواهید یک سیستم فایل را پاک یا تنظیم مجدد کنید، باید با احتیاط از آن استفاده کنید.
جدای از اینها، سیستم های فایل شبکه ای مانند NFS نیز وجود دارد که Linux kernel از آنها استفاده می کند. NFS یک سیستم فایل شبکه است که در آن داده ها روی دیسک محلی ذخیره نمی شوند. با NFS، داده ها از طریق شبکه به سروری می رود که داده ها را ذخیره می کند. از آنجایی که داده ها روی یک سرور قرار می گیرند، کاربران مجبور نیستند دائماً با آن سروکار داشته باشند. آنها همچنین می توانند طبق معمول از سیستم فایل سلسله مراتبی سنتی لینوکس استفاده کنند.
همه نرم افزارهای سیستم لینوکس دارای عملکردهای مشترک هستند. به همین دلیل است که این توابع در کرنل لینوکس مرکزی هستند. به عنوان مثال، هنگام باز کردن یک فایل، می توانید آن را فقط با نام فایل باز کنید، بدون اینکه بدانید فایل در کجا ذخیره شده است و از چه توابع و عملیاتی استفاده می کند. همه این توابع از قبل در هسته وجود دارند.
می توانید فایل خود را روی هارد دیسک ذخیره کنید، آن را بین چندین هارد دیسک تقسیم کنید یا حتی آن را روی یک سرور راه دور نگه دارید. توابع ارتباط فایل مشترک در چنین مواردی مهم هستند. برنامه ها بدون توجه به نحوه انتقال داده ها، داده ها را مبادله می کنند. توابع ارتباطی مشترک برای انجام این مبادلات داده وجود دارد. این حرکت می تواند از طریق شبکه های بی سیم یا حتی یک خط تلفن ثابت باشد.
مدیریت فرآیند در لینوکس
یک نمونه فعال از یک برنامه که بر روی داده ها یا اطلاعات موجود در حافظه کار می کند به عنوان یک فرآیند شناخته می شود. وظیفه Linux kernel تولید و پیگیری این مناطق حافظه است. هسته حافظه را برای یک برنامه در حال اجرا اختصاص می دهد و کد اجرایی را از سیستم فایل در حافظه بارگذاری می کند. بلافاصله پس از آن، هسته کد را اجرا می کند.
هسته لینوکس از چند وظیفه ای پشتیبانی می کند. قادر به اجرای چندین فرآیند به طور همزمان است. هرچند در هر بازه زمانی معین فقط یک تراکنش وجود دارد. با این حال، هسته لینوکس زمان را به تکه های کوچک تقسیم می کند و در نتیجه، هر رویه به صورت متوالی انجام می شود.
از آنجایی که این بخشهای زمانی کوچک بر حسب میلیثانیه افزایش مییابند، فقط در زمانهای خاصی فعال هستند و بقیه زمانها بیکار میمانند. وظیفه Linux kernel در اینجا به حداکثر رساندن عملکرد با اجرای چندین فرآیند به طور همزمان است.
اگر بازه های زمانی بیش از حد طولانی باشد، برنامه در حال اجرا ممکن است آنطور که می خواهید پاسخگو نباشد. اگر بازههای زمانی خیلی کوتاه باشد، ممکن است مشکلاتی در تغییرات کار وجود داشته باشد. بسته به اولویت فرآیند، بازه زمانی مورد نیاز در اینجا متفاوت خواهد بود. شاید قبلاً در مورد فرآیندهای با اولویت بالا و فرآیندهای با اولویت پایین شنیده باشید. این یکی از توابعی است که هسته لینوکس آن را کنترل می کند.
این توضیح همیشه درست نیست. محدودیت واقعی این است که در یک زمان تنها یک فرآیند کارگر در هر هسته پردازنده وجود دارد. سیستم های چند پردازنده ای اجازه می دهند چندین فرآیند به صورت موازی اجرا شوند. یک سیستم پایه تقریباً همیشه دارای ده ها فرآیند در حال اجرا است.
Access Rights in Linux
مانند سایر سیستم عامل ها، می توانید کاربران زیادی را در یک سیستم لینوکس ایجاد کنید. در چنین مواردی، یک سیستم rights management وجود دارد که از تک تک کاربران و گروه ها پشتیبانی می کند. اینجاست که مجوزهای فایل و کاربر وارد عمل می شوند.
Linux kernel داده ها را مدیریت می کند و مجوزهای لازم را برای هر فرآیند بررسی می کند. برای مثال، اگر میخواهید فایلی را باز کنید، هسته باید شناسه فرآیند را در برابر مجوزهای دسترسی بررسی کند. اگر هسته بررسی کند و ببیند که شما مجوز دارید، فایل را باز می کند.
Linux kernel همه چیز را کنترل می کند
همانطور که می بینید، هسته لینوکس بر همه چیز از امنیت فایل شما تا ایجاد کاربر و دانلود فایل از اینترنت نظارت می کند. همه چیز در نظم خاصی است. هر کاربر حقوقی دارد. هسته لینوکس فرآیندها و شکاف های زمانی را برای حداکثر عملکرد مدیریت می کند.
علاوه بر این، file system ، که یکی از بزرگترین ویژگی هایی است که Linux kernel را از سایر سیستم عامل ها متمایز می کند، بسیار مهم است. لینوکس یک جعبه مخفی نیست. برعکس، همه فایل ها و کدهای منبع قابل دسترسی هستند. برای درک بهتر ماهیت کاربردی و قدرتمند هسته لینوکس، می توانید سلسله مراتب سیستم دایرکتوری لینوکس را بررسی کنید.