یوشا

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

یوشا

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

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

طبقه بندی موضوعی
تبلیغات
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 کردن ماژول کامپایل شده در داخل سیستم در حال اجرا فعال میشه.

ماژول های گروه 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 ،mobile و embedded ها هم استفاده بشن.

همونطور که گفته شد برای استفاده از ماژول دو راه وجود داره: یکی قرار دادن سورس ماژول در داخل پوشه های سورس Kernel و دومی 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="">