محمد نصیری
بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

HAL چیست ؟ Hardware Abstraction Layer به زبان زیادی ساده

طبیعی هست که دوستان ITPRO ی من همیشه دوست دارند به زبان ساده مطالب را درک کنند ، امروز می خواهیم در خصوص یک مفهوم به نام HAL یا Hardware Abstraction Layer در همه سیستم عامل ها صحبت کنیم ، مهم نیست که این مطلب را در انجمن لینوکس می خوانید یا در انجمن ویندوز ، مهم این است که این مفهوم در همه سیستم عامل ها امروزه وجود دارد و متاسفانه آنقدر سخت توضیح داده می شود که بعضا در دوره های آموزشی لینوکس باعث گنگ شدن دانشجویان می شود.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

قبل از شروع توجه کنید که این مطلب برای مدیران لینوکسی است نه برنامه نویس های لینوکس بنابراین به زبان زیادی ساده توضیح داده می شود. خوب بریم سر اصل مطلب ، توجه کنید که شما وقتی یک سخت افزار را به سیستم متصل می کنید این سخت افزار برای خودش یک درایور و قطعا یک شناسه منحصر به فرد یا ID دریات می کند که به آن Device ID گفته می شود. شما یادتون نمیاد اما ما به خاطر داریم که ( یعنی کشته مرده این یه دفه ادبیاتی شدن یه دفه خودمونی شدن خودم هستم :D ) زمانیکه می خواستیم یک سخت افزار جدید بر روی سیستم عامل نصب کنیم در هر بار نصب بایستی یکبار سیستم عامل Restart می شد تا سیستم تنظیمات مربوط به آن سخت افزار را در Kernel ایجاد کند و لیستی از سخت افزارها را ایجاد کند.

کاربرد 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 شما در تنظیمات یه چیزی شبیه به 555.77.ii.99.00 ببینید که قشنگ نیست.

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

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

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

دیگه واقعا از این ساده تر نمیشد توضیح داد ، امیدوارم مورد توجه شما قرار گرفته باشد ، اگر نظری در این خصوص دارید خوشحال می شوم که در ادامه همین مطلب قرار بدید. ITPRO باشید

نویسنده : محمد نصیری

منبع : جزیره لینوکس و متن باز وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد

#لایه_واسط_سخت_افزار_و_نرم_افزار #hal_چیست #hardware_abstraction_layer_چیست #لایه_جداکننده_سخت_افزار_چیست #معرفی_دایرکتوری_/dev_لینوکس #کاربرد_hal_در_سیستم_عامل #معرفی_دایرکتوری_های_پیشفرض_لینوکس #udev_چیست #hal_چه_کاری_در_سیستم_عامل_می_کند

محمد نصیری
محمد نصیری

بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

محمد نصیری هستم ، هکر قانونمند و کارشناس امنیت سایبری ، سابقه همکاری با بیش از 50 سازمان دولتی ، خصوصی ، نظامی و انتظامی در قالب مشاور ، مدرس و مدیر پروژه ، مدرس دوره های تخصص شبکه ، امنیت ، هک و نفوذ ، در حال حاضر در ایران دیگه رسما فعالیتی غیر از مشاوره انجام نمیدم و مقیم کشور ترکیه هستم ، عاشق آموزش و تدریس هستم و به همین دلیل دوره های آموزشی که ضبط می کنم در دنیا بی نظیر هستند.

نظرات