HAL یا Hardware Abstraction Layer چیست؟

2 سال پیش
Rate this post

در این مقاله ما می خواهیم در مورد مفهومی به نام HAL یا Hardware Abstraction Layer در سیستم عامل ها صحبت کنیم. این مفهوم در تمام سیستم عامل های امروز وجود دارد. چون اکثرا افرادی که تازه می خواهند دوره های لینوکس (LPIC 1 ) را بگذرانند و اشنایی کمی با سیستم عامل داردند در این بخش سردرگم می شوند و برای این افراد سنگین می باشد. ما در این مقاله سعی خود را می کنیم که این مبحث را به طور ساده بیان کنیم . با ما باشید.

HAL یا Hardware Abstraction Layer چیست؟

وقتی یک سخت افزار را به سیستم عامل وصل می کنید این سخت افزار طبیعاتا یک درایور و یک Devise ID دریافت می کند. که در سیستم عامل لینوکس این درایور در کرنل ( Kernel ) بوده و به صورت اتوماتیک نصب می شود. در سیستم عامل های قدیمی سناریو اینطور بود که شما بعد از این که یک سخت افزار را نصب می کردیم باید سیستم عامل را ریستارت ( Restart ) می کردیم تا تنظیمات مربوطه را سیستم به کرنل اضافه کند و لیستی از سخت افزار ها را ایجاد کند.HAL

این لیست با هر بار Restart شدن سیستم بروز رسانی می شود ، ما این لیست را در لینوکس به عنوان دایرکتوری یا فایل سیستمی به نام udev می شناسیم ، بنابراین تا اینجا متوجه شدید که با restart شدن سیستم این دایرکتوری udev است که لیست سخت افزارها به همراه Device ID های آنها را تهیه و لیست می کند اما مشکل اینجاست که این لیست بروز رسانی نمی شود ، یعنی زمانیکه شما یک سخت افزار جدید به سیستم اضافه کنید هیچ تغییری در دایرکتوری udev انجام نمی شود و در اصطلاح ما می گوییم که دایرکتوری udev ما در حالت static است و تغییر نمی کند و update نمی شود مگر اینکه سیستم عامل restart شود. تا اینجای کار در ذهن داشته باشید که دایرکتوری udev در واقع پایگاه داده یا دیتابیس درایورها و Device ID های شما است و با بروز شدن آن لیست سخت افزارهای شما نیز بروز می شود. شما می توانید udev لینوکس را به عنوان device manager یا نرم افزار مدیریت سخت افزارهای سیستم نیز در نظر بگیرید ، در واقع مفهومی که در سیستم عامل ویندوز نیز داریم ، اما به مرور زمان udev پیشرفت کرد و از static udev تبدیل به dynamic udev شد.

این تعریف کاملا من درآوردی است و فقط برای درک بهتر شما بنابراین زیاد درگیر جستجوی dynamic udev در اینترنت نشوید. اما dynamic udev چکار می کند ؟ dynamic udev این امکان را به شما می دهد که لیست سخت افزارهایی که بصورت static تعریف شده اند را بروز رسانی کنید ! یعنی اینکه بلافاصله بعد از اینکه شما دستگاهی رو به سیستم وصل کنید این دستگاه رو سیستم شناسایی می کنه و یک سخت افزار جدید شناسایی می کنه ، یا روش دیگه اینکه ممکن هست چندین سخت افزار رو شما از سیستم جدا کنید و مجددا به سیستم متصل کنید ، مدیریت اینها که همیشه بلافاصله Device ID قبلی رو بگیرند و … بر عهده این dynamic udev در لینوکس هست ، خوب یک مقدار از سادگی عبور کردیم ، با سیستم عامل ویندوز حتما کار کردید ، قابلیت Automatic Plug and Play را میدانید چه هست؟ یعنی وقتی یک USB به سیستم می زنید نیازی نیست سیستم عامل Restart بشه تا سیستم این USB رو بشناسه ، قبلا اینجوری بود که باید Restart می شود ، این همون کاری هست که در لینوکس با udev و دایرکتوری /dev انجام می شود.

حالا بعد از این همه ماجرا به سراغ HAL می رویم ، اول بهتره ترجمه این واژه ها رو بدونید Hardware میشه سخت افزار ، Abstraction میشه جدا کردن ( انتزاع ، اختلاس ، دزدی … به خدا اینا ترجمش میشه تو دیکشنری زدم !!! ) و در نهایت Layer میشه لایه ، البته روایت داریم که قسمت دوم رو به عنوان Annotation به معنی حاشیه و قسمت سوم رو هم Library یا کتابخانه هم تفسیر کردند اما شما همون اولی رو در نظر بگیرید ، بنابراین ترجمه HAL میشه لایه جدا کننده سخت افزار ، خود لایه جدا کننده سخت افزار ، این سخت افزار رو از چه چیزی جدا می کنه ؟ نکته جالب اینجاست که شما اول باید بدونید سخت افزار به چه شکلی داخل سیستم عامل دیده میشه ، اگه واقعا شکل دیده شدن سخت افزار رو میخاین بدونید فکر می کنم براتون چندان جالب نباشه چون همش کد و عدد و ارقام و حروف عجیب و غریب هست و اینها رو شما به عنوان یک انسان و حتی Application ها هم سخت هست که درک کنند ، تصور کنید به جای دیدن Network Connection 1 شما در تنظیمات یه چیزی شبیه به ۵۵۵٫۷۷٫ii.99.00 ببینید که قشنگ نیست.

حالا HAL چیکار می کنه میاد یک لایه واسط ایجاد می کنه بین udev که اعداد و ارقام و همین موارد هست و بین نرم افزارهای کاربردی ( البته شما الان اینجوری تصور کنید چون نمیخام راجع به dbus توضیح بدم ) ، HAL میاد اسامی رو از udev میگیره میده به سیستم عامل و نرم افزارها که با شکل و ظاهر مشخص تری دیده بشن و قابل فهم تر باشن ، یک مثال میزنم تا همه چیز جا بیوفته ، گفتم یک کارت شبکه در لینوکس در واقع عدد و ارقام هست و از برند های مختلف می تونه باشه مثلا یک کارت شبکه intel و یک کارت شبکه dlink زمین تا آسمون کد شناساییشون متفاوت هست اما HAL میاد کاری می کنه که شما داخل سیستم عامل خودتون هر تعداد کارت شبکه که اضافه کنید به ترتیب به شکل eth0 و eth1 و eth2 و … می شناسید و هیچ اهمیتی نداره از چه برند و محصولی باشن چون HAL کار شما رو راحت کرده و لایه udev رو گفته باهاش کاری نداشته باشید.

خوب امیدوارم کمی متوجه شده باشید ،اما پاراگراف آخر باز هم تعریف HAL : این نرم افزار یا ابزار یا تکنیک سخت افزار را از نرم افزار جدا می کند و برای نرم افزارها پیچیدگی های موجود در کار کردن با سخت افزارها را کاهش می دهد ، هدف اصلی HAL این است که سخت افزارهای مختلف با کارایی های مختلف و معماری های مختلف به صورت یک سیستم یکپارچه برای سیستم عامل به نمایش گذاشته شوند. HAL به این دلیل در سیستم عامل ها قرار گرفته است برای اینکه دیگر نیازی نباشد برای اینکه یک نرم افزار بتواند از یک سخت افزار استفاده کند لازم باشد در Kernel سیستم عامل دستکاری شود ، شما با HAL دیگر درگیری های سخت افزاری و معماری های مختلف سخت افزاری و هماهنگ کردن آنها با سیستم عامل و نرم افزارهایتان را نخواهید داشت. HAL قابلیت های زیر را به شما می تواند ارائه بدهد :

  1. امکان استفاده حداکثری از کارایی منابع سخت افزاری
  2. امکان کار کردن نرم افزارها فارق از معماری موجود در سخت افزارهای مختلف
  3. امکان مستقل کردن نرم افزارها از سخت افزارها و از بردن وابستگی های آنها
  4. امکان دسترسی مستقیم درایورها به سخت افزارها
  5. ایجاد کردن امکانات توسعه نرم افزارهای قابل حمل یا portable

 

Rate this post
۰
برچسب ها :

دیدگاه شما

6 + یک =

بدون دیدگاه