یوشا آل ایوب

وبگاه دست نوشته ها و تجربیات شخصی

یوشا آل ایوب

وبگاه دست نوشته ها و تجربیات شخصی

یوشا آل ایوب

دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم: آنکس که تخصص ندارد و کاری را می پذیرد، بی تقواست!

تبلیغات
Blog.ir بلاگ، رسانه متخصصین و اهل قلم، استفاده آسان از امکانات وبلاگ نویسی حرفه‌ای، در محیطی نوین، امن و پایدار bayanbox.ir صندوق بیان - تجربه‌ای متفاوت در نشر و نگهداری فایل‌ها، ۳ گیگا بایت فضای پیشرفته رایگان Bayan.ir - بیان، پیشرو در فناوری‌های فضای مجازی ایران
بایگانی

 

ماژول، قطعه ی نرم افزاری در بخشی جدا از Core سیستم هستش که در زمان فراخوانی، پیوند و فعال میشه و یکسری عملیات تعریف شده ای رو انجام میده.
این ماژول می تونه سرویس باشه، filesystem باشه، پروتکل شبکه باشه، تعدادی System call باشه و یا درایور یک سخت افزار باشه; که در هر صورت ماژول نام داره.

ماژول ها در لینوکس به دو گروه تقسیم میشن:

  1. Kernel module
  2. Loadable kernel module (یا LKM)

Kernel module: که با قرار دادن سورس ماژول در داخل پوشه های سورس Kernel، همراه با Kernel کامپایل میشه.
Loadable Kernel module: که با load کردن ماژول کامپایل شده در داخل سیستم در حال اجرا فعال میشه.

که ما در اینجا به بحث Loadale Kernel module ها می پردازیم.

ماژول های گروه Loadable Kernel module (یا LKM) قطعه نرم افزاری هستند که می تونن در حین up بودن سیستم(بدون نیاز به reboot کردن)، توسط فراخوانی Load و Unload بشن و یکسری عملیات تعریف شده ای رو انجام بدن.
برای درک بهتر این گروه از ماژول ها(LKM) میشه drive ها رو نام برد که موقع نصب فلش دیسک به سیستم، Load میشن و موقع جداسازی فلش دیسک از سیستم، Unload میشن. که البته به تازگی متوجه شدم که میشه ماژول های نوع LKM ای رو در boot سیستم هم قرار داد.

بعلاوه لازمه که بگم این ماژول های LKM جزوی از kernel-space هستند و مستقیماً با base Kernel در تعامل هستند. و در زمان Load شدن ماژول، به قسمتی از وجود Kernel تبدیل میشن.

همچنین بد نیست بدونید که از آغاز هسته لینوکس کلاً چیزی بنام ماژول وجود نداشته، و از نسخه 1 به بعد این امکان فراهم شده.


نکته: چون ماژول ها در kernel-space توسعه داده میشن، قادرند در انواع دیوایس های PC/desktop ،mobile و embedded ها هم استفاده بشن.

همونطور که گفتم برای استفاده از ماژول دو راه وجود داره: یکی قرار دادن سورس ماژول در داخل پوشه های سورس هسته و دومی Load کردن ماژول کامپایل شده در داخل سیستم در حال اجرا.
من راه اولی رو به چندین دلیل پیشنهاد نمی کنم:

  1. در هر بار توسعه مجدد یا رفع باگ ماژول، باید کل Kernel رو مجدداً کامپایل و نصب کنید.
  2. تشخصی خطا های منابع dependence شده بسیار مشکل هست.
  3. کوچیکترین باگی در ماژول باعث متوقف شدن boot موقع startup سیستم میشه; و باگ هم به سختی trace میشه.
  4. از سرعت پایینتری برخوردار هست.
  5. امکان ارسال پارامتر به ماژول وجود ندارد(باید reboot کنید و داستان...).
  6. ماژول همیشه بی جهت و بدون استفاده Load میشه. و باعث اشغال حافظه مجازی میشه.

در صورتی که راه دومی(یعنی ماژول نوع LKM) هیچ یک از این معایب رو نداره، و بر عکس مزایای بیشتری هم داره.
(البته شاید به دلایلی مجبور باشید از راه اول استفاده کنید که اون بحثش جداست)


موارد استفاده ماژول های LKM
ماژول های LKM در موارد بسیار زیادی مورد استفاده قرار می گیرند از جمله:

  • درایور سخت افزار: که واسط ارتباطات بین یک دستگاه(قطعه) خاص با سیستم عامل میشه تا بتونن با هم تعامل برقرار کنن. مثل کارت گرافیک، قفل های سخت افزاری، فلش دیسک و...
  • درایور filesystem: که مفسر نوع filesystem محتویات هارد دیسک(یا هر حافظه دیگه ای) هستش. مثل FAT32 NTFS Ext4 SWAP و...
  • System calls: که شامل پیامها و دستورات built-in در Kernel هستند و برنامه های user-space(مثل gimp firefox openoffice و...) از اونها برای دریافت سرویس، callback و اطلاعات استفاده می کنند. مثل shutdown ,readfile و...
  • درایور پروتکل شبکه: که مفسر و transformer اطلاعات رد و بدل شده در یک پروتوکل هستند. آنها اطلاعات رو توسط stream ها در بین لایه های هسته جابه جا و تفسیر می کنند. مثل http ,telnet ,ssh ,ftp و...
  • درایور پورت TTY: که واسط و تقویت کننده دستگاه هایی با رابط نوع ترمینال هستند(تصاویر). مثل بیسیم، فیش های هدفون، شارژر، ماشین های اداری، صنعتی...
  • و برنامه های کاربردی خاص که نیازمند توسعه در kernel-space رو دارند.


این مقاله تشریحی ماژول لینوکس به پایان رسید، در مقاله بعدی ساختار و طریقه نوشتن ماژول لینوکس رو آموزش میدم.

نظرات (۲)

۱۵ مهر ۹۵ ، ۱۸:۰۸ new nike sneakers
Great post.
سلام
مطلب مفیدی بود مرسی.
کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">