درایور دستگاه (Device Driver) در سیستم عامل چیست؟ آشنایی با مفهوم درایور و وظایف آن

0 61
۵/۵ - (۳ امتیاز)

فهرست

درایور (Driver) چیست؟

ارائه یک تعریف دقیق برای اصطلاح درایور (Driver) چالش برانگیز است. بطور کلی، درایور یک جز نرم افزاری است که به سیستم عامل و یک دستگاه اجازه می دهد با یکدیگر ارتباط برقرار کنند. یعنی ارتباط میان سیستم عامل و سخت افزار موجود را برقرار می کند. به عنوان مثال، فرض کنید یک برنامه می خواهد داده هایی را از یک دستگاه بخواند. برنامه یک تابع پیاده سازی شده توسط سیستم عامل و سیستم عامل یک تابع پیاده سازی شده توسط درایور را فراخوانی می کند. درایور که توسط همان شرکتی که دستگاه را طراحی و تولید کرده نوشته شده است، می داند که چگونه با سخت افزار دستگاه ارتباط برقرار کند تا داده ها را دریافت کند. پس از اینکه درایور، داده ها را از دستگاه دریافت کرد، داده ها را به سیستم عامل برمی گرداند و در نهایت داده ها به برنامه مذکور می رسد.

تعریف دقیق تر درایور (Driver)

توضیح ما تاکنون از چند جهت بسیار ساده شده است و می توان گفت نادقیق بوده است:

  • لازم نیست همه درایورها توسط شرکتی که دستگاه را طراحی کرده نوشته شوند.

در بسیاری از موارد، یک دستگاه بر اساس یک استاندارد سخت افزاری منتشر شده طراحی می شود. این بدان معناست که درایور توسط دیگر افراد (یا مایکروسافت) نوشته می شود و طراح دستگاه نیازی به ارائه درایور ندارد.

  • همه درایورها مستقیماً با یک دستگاه ارتباط برقرار نمی کنند.

برای یک درخواست ورودی/خروجی معین (مانند خواندن داده‌ها از یک دستگاه)، اغلب چندین درایور، لایه‌بندی شده در یک پشته درایور (Driver Stack)، وجود دارند که همگی درگیر درخواست ارسال شده می شوند. روش مرسوم برای تجسم پشته با اولین شرکت کننده در بالا و آخرین شرکت کننده در پایین است، همانطور که نمودار زیر نشان داده شده است. برخی از درایورهای موجود در پشته ممکن است با تبدیل درخواست از یک فرمت به فرمت دیگر شرکت کنند. این درایورها مستقیماً با دستگاه ارتباط برقرار نمی کنند. آنها فقط درخواست را دستکاری می کنند و درخواست را به درایورهایی ارسال می کنند که در قسمت پایین تر پشته هستند.

جایگاه درایور

فانکشن درایور (Function Driver): درایوری که در پشته مستقیماً با دستگاه ارتباط برقرار می کند، فانکشن درایور نامیده می شود.

فیلتر درایور (Filter Driver): درایورهایی که پردازش کمکی را انجام می دهند فیلتر درایور نامیده می شوند.

برخی از فیلتر درایورها اطلاعات مربوط به درخواست های ورودی/خروجی را مشاهده و ضبط می کنند اما فعالانه در آنها شرکت نمی کنند. به عنوان مثال، برخی از فیلتر درایورها به عنوان تأیید کننده (Verifier) عمل می کنند تا مطمئن شوند که درایورهای دیگر در پشته درخواست I/O را به درستی مدیریت می کنند.

درایور چه کار می کند؟

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

هدف اصلی درایورها، ارائه انتزاع (Abstraction) بیشتر می باشد. به این صورت که به عنوان یک مترجم بین سیستم عامل و سخت افزار بین این دو المان قرار می گیرند. برنامه نویسان می توانند کد برنامه های سطح بالاتر را مستقل از هر سخت افزار خاصی که کاربر نهایی استفاده می کند بنویسند.

درایورهای نرم افزاری

تعریف فوق از درایور، تا حد معقولی دقیق است اما هنوز ناقص است زیرا برخی از درایورها اصلاً با هیچ دستگاه سخت افزاری مرتبط نیستند. به عنوان مثال، فرض کنید باید ابزاری بنویسید که به ساختارهای داده اصلی سیستم عامل دسترسی داشته باشد، که فقط با کدهای در حال اجرا در حالت هسته قابل دسترسی است. شما می توانید این کار را با تقسیم ابزار به دو جزء انجام دهید. اولین جزء در حالت کاربر اجرا می شود و رابط کاربری را ارائه می دهد. جزء دوم در حالت هسته اجرا می شود و به داده های سیستم عامل اصلی دسترسی دارد. مؤلفه ای که در حالت کاربر اجرا می شود برنامه کاربردی و مؤلفه ای که در حالت هسته اجرا می شود درایور نرم افزار نامیده می شود. درایور نرم افزار با دستگاه سخت افزاری مرتبط نیست.

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

مود کرنل و مود یوزر (Kernel Mode / User Mode)

درایورهای دستگاه، به‌ویژه در پلتفرم‌های مدرن مایکروسافت ویندوز، می‌توانند در حالت هسته (Ring 0 در پردازنده‌های x86) یا در حالت کاربر (Ring 3 در CPU‌های x86) اجرا شوند. مزیت اصلی اجرای یک درایور در حالت کاربر، ثبات بهبود یافته است، زیرا یک درایور دستگاه در حالت کاربر ضعیف نمی تواند سیستم را با بازنویسی حافظه هسته خراب کند. از سوی دیگر، انتقال حالت کاربر/کرنل معمولاً سربار عملکرد قابل توجهی را تحمیل می‌کند، بنابراین درایورهای حالت هسته برای شبکه‌های با تأخیر کم ترجیح داده می‌شوند.

فضای کرنل توسط ماژول کاربر فقط از طریق تماس های سیستمی قابل دسترسی است. برنامه های کاربر نهایی مانند پوسته یونیکس یا سایر برنامه های کاربردی مبتنی بر رابط کاربری گرافیکی بخشی از فضای کاربر هستند. این برنامه ها از طریق توابع پشتیبانی شده از هسته با سخت افزار تعامل دارند.

توسعه درایور (Driver) چگونه است؟

نوشتن درایور دستگاه نیاز به درک عمیقی از نحوه عملکرد سخت افزار و نرم افزار برای یک عملکرد پلت فرم معین دارد. از آنجایی که درایورها برای کار کردن نیاز به دسترسی سطح پایین به عملکردهای سخت‌افزاری دارند، درایورها معمولاً در یک محیط بسیار ممتاز کار می‌کنند و در صورت بروز مشکل می‌توانند باعث مشکلات عملیاتی سیستم شوند. در مقابل، اکثر نرم‌افزارهای سطح کاربر در سیستم‌عامل‌های مدرن را می‌توان بدون تأثیر زیادی روی بقیه سیستم متوقف کرد. حتی درایورهایی که در حالت کاربر اجرا می شوند، در صورتی که دستگاه به اشتباه برنامه ریزی شده باشد، می توانند سیستم را خراب کنند. این عوامل تشخیص مشکلات را دشوارتر و خطرناک تر می کند. یکی از منابع بسیار خوب برای توسعه درایور در سیستم عامل لینوکس کتاب Linux Device Drivers است.

بنابراین وظیفه نوشتن درایورها معمولاً بر عهده مهندسان نرم افزار یا مهندسین کامپیوتر است که برای شرکت های توسعه سخت افزار کار می کنند. این به این دلیل است که آنها اطلاعات بهتری نسبت به سایر افراد خارجی در مورد طراحی سخت افزار خود دارند. علاوه بر این، به طور سنتی به نفع سازنده سخت افزار در نظر گرفته می شد که تضمین کند که مشتریان می توانند از سخت افزار خود به روشی بهینه استفاده کنند. به طور معمول، Logical Device Driver (LDD) توسط فروشنده سیستم عامل نوشته می شود، در حالی که Physical Device Driver (PDD) توسط فروشنده دستگاه پیاده سازی می شود. با این حال، در سال‌های اخیر، غیرفروشندگان درایورهای دستگاه متعددی را برای دستگاه‌های اختصاصی نوشته‌اند، که عمدتاً برای استفاده در سیستم‌عامل‌های رایگان و منبع باز هستند. در چنین مواردی، مهم است که سازنده سخت افزار اطلاعاتی در مورد نحوه ارتباط دستگاه ارائه دهد. اگرچه این اطلاعات را می توان در عوض با مهندسی معکوس آموخت، اما این کار با سخت افزار بسیار دشوارتر از نرم افزار است.

درباره ما

ترجنس | thregence.ir
آکادمی ترجنس | edu.thregence.ir
دوره‌های آکادمی ترجنس | courses.thregence.ir
اینستاگرام | instagram.com/thregence
تلگرام | t.me/thregence
یوتوب | https://bit.ly/30mGowo
آپارات | aparat.com/thregence

ارسال یک پاسخ