سختافزار ورودی–خروجی (I/O) در سیستم عامل – راهنمای جامع


یکی از مهمترین وظایف یک سیستم عامل مدیریت دستگاههای ورودی/خروجی مختلف مانند ماوس، کیبورد، تاچپد، دیسک درایوها، آداپتورهای نمایش، دستگاههای USB، صفحههای بیتمپ، LED، مبدل آنالوگ به دیجیتال، سوئیچ روشن/خاموش، اتصالهای شبکه، ورودی/خروجی صوتی، پرینترها و غیره است.
یک سیستم I/O برای دریافت درخواست I/O یک اپلیکیشن و ارسال آن به دستگاه فیزیکی و سپس دریافت پاسخ بازگشتی از دستگاه و ارسال آن به اپلیکیشن مورد نیاز است. دستگاههای I/O را میتوان به دو دسته کلی تقسیم کرد:
- دستگاههای بلوکی – منظور از دستگاه بلوک، دستگاهی است که درایور آن با ارسال بلوکهای کلی داده با سیستم ارتباط میگیرد. برای نمونه هارددیسکها، دوربینهای USB، Disk-On-Key و غیره.
- دستگاههای کاراکتری – دستگاه کاراکتری از نوعی است که درایور آن با ارسال و دریافت کاراکترهای منفرد (بایت یا اوکتت) با سیستم ارتباط میگیرد. برای نمونه پورتهای سریال، پورتهای موازی، کارتهای صوتی و غیره.
کنترلرهای دستگاهها
درایورهای دستگاهها ماژولهای نرمافزاری هستند که میتوان روی یک سیستم عامل نصب کرد تا به مدیریت دستگاههای خاصی بپردازند. سیستم عامل از درایورهای دستگاهها برای مدیریت همه دستگاههای ورودی/خروجی کمک میگیرد.
کنترلر دستگاه مانند رابطی بین دستگاه و درایور آن عمل میکند. واحدهای ورودی/خروجی (کیبورد، ماوس، پرینتر و غیره) معمولاً شامل اجزای فیزیکی و اجزای الکترونیکی هستند که بخشهای الکترونیکی به نام کنترلر دستگاه شناخته میشوند.
همواره یک کنترلر و یک درایور برای هر دستگاه وجود دارد که با سیستمهای عامل در ارتباط هستند. کنترلر دستگاه در برخی موارد میتواند با سیستم عامل ارتباط داشته باشد. کنترلر دستگاه میتواند چندین دستگاه را مدیریت کند. کنترلر دستگاه مانند یک واسط، جریانهای بیتی را به بلوکهایی از بایتها تبدیل کرده و اصلاح خطا را در موارد نیاز بر عهده میگیرد.
هر دستگاه با استفاده از یک پلاگ و سوکت به رایانه اتصال مییابد و سوکت به کنترلر دستگاه متصل است. در تصویر زیر مدل اتصال CPU، حافظه، کنترلرها و دستگاههای I/O را میبینید که در آن سیپییو و کنترلرهای دستگاهها همگی از یک باس مشترک برای ارتباط استفاده میکنند.
I/O همگام یا ناهمگام
- در ورودی/خروجی همگام، اجرای CPU در زمان انجام عملیات ورودی/خروجی متوقف میشود.
- در ورودی/خروجی ناهمگام، عملیات I/O همزمان با اجرای CPU صورت میگیرد.
ارتباط با دستگاههای I/O
CPU باید راهی برای ارسال اطلاعات و دریافت آنها از هر دستگاه ورودی/ خروجی داشته باشد. سه رویکرد برای ارتباط بین CPU و دستگاه وجود دارد:
- دستورالعمل خاص I/O
- نگاشت حافظهای I/O
- دسترسی مستقیم حافظه I/O
دستورالعمل خاص I/O
در این روش از دستورالعملهای CPU که به طور خاص برای کنترل کردن دستگاههای I/O طراحی شدهاند استفاده میشود. این دستورالعملها به طور معمول امکان ارسال دادهها به یک دستگاه I/O و یا خواندن اطلاعات از آن دستگاه را ممکن میسازند.
نگاشت حافظهای I/O
زمانی که از نگاشت حافظهای I/O استفاده میشود، فضای آدرس یکسانی بین حافظه و دستگاههای I/O به اشتراک گذارده میشود. این دستگاه به طور مستقیم به مکانهای حافظه اصلی متصل میشود به طوری که دستگاه I/O میتواند بلوک دادهها را بدون عبور از CPU به /از حافظه انتقال دهد.
سیستم عامل هنگام استفاده از نگاشت حافظهای I/O بافر سیستمی را در حافظه تخصیص میدهد و به دستگاه I/O اطلاع میدهد که از بافر برای ارسال دادهها به CPU استفاده کند. دستگاه I/O به صورت همگام با CPU عمل میکند و هنگامی که کارش پایان یابد، وقفهای به CPU ارسال میکند.
مزیت این روش آن است که هر دستورالعمل که بتواند به حافظه دسترسی داشته باشد، میتواند برای دستکاری دستگاه I/O مورد استفاده قرار گیرد. نگاشت حافظهای I/O در اغلب دستگاههای I/O با سرعت بالا مانند دیسکها، واسطهای ارتباطی و غیره استفاده میشود.
دسترسی مستقیم حافظه (DMA)
دستگاههای کُندی مانند کیبوردها پس از انتقال هر بایت، وقفهای در CPU اصلی ایجاد میکنند. اگر یک دستگاه سریع مانند دیسک بخواهد برای هر بایت یک وقفه ایجاد کند، سیستم عامل باید اغلب زمان خود را صرف مدیریت این وقفهها بکند. بنابراین یک رایانه به طور معمول از سخت افزار دسترسی مستقیم حافظه (DMA) برای کاهش سربار استفاده میکند.
دسترسی مستقیم حافظه (DMA) بدین معنی است که CPU به ماژول ورودی/خروجی بدون درگیر شدن، مجوز خواندن و نوشتن حافظه را اعطا میکند. ماژول DMA خودش مبادله دادهها بین حافظه اصلی و دستگاه I/O را کنترل میکند. CPU تنها در آغاز و انتهای انتقال درگیر میشود و تنها پس از این که کل بلوک انتقال یافت، وقفهای ایجاد میشود.
دسترسی مستقیم حافظه به سختافزار خاصی که کنترلر DMA یا DMAC نامیده میشود نیاز دارد تا انتقال دادهها و خصوصیات و دسترسی به باس سیستم را مدیریت کند. کنترلرها به وسیله اشارهگرهای مبدأ و مقصد (این که دادهها را کجا باید بخوانند/بنویسند)، شمارندههایی برای ردگیری تعداد بایتهای ارسالی، و تنظیمات که شامل انواع I/O و حافظه، وقفهها و وضعیتهای چرخههای CPU است، برنامهریزی شدهاند.
سیستم عامل از سختافزار DMA در موارد زیر استفاده میکند:
گام | توضیح |
---|---|
1 | درایور دستگاه طوری دستورالعملدهی میشود که دادههای دیسک به یک بافر در آدرس X انتقال یابند. |
2 | سپس درایور دیسک دستورالعملهای کنترلر دیسک و انتقال دادهها به بافر را بر عهده میگیرد. |
3 | کنترلر دیسک انتقال DMA را آغاز میکند. |
4 | کنترلر دیسک هر بایت را به کنترلر DMA ارسال میکند. |
5 | کنترلر DMA بایتها را به بافر انتقال داده و آدرس حافظه را افزایش و شمارنده C را کاهش میدهد تا جایی که C سفر شود. |
6 | وقتی C صفر شد، DMA وقفهای به CPU ارسال میکند تا تکمیل شدن فرایند انتقال را اعلام کند. |
Polling در برابر وقفههای I/O
یک رایانه باید روشی برای تشخیص رسیدن هر نوع ورودی داشته باشد. دو روش برای این کار وجود دارند که به نامهای Polling و وقفه (interrupt) نامیده میشوند. هر دو این تکنیکها به پردازنده امکان مدیریت رویدادهایی که ممکن است هر زمان رخ بدهند و ربطی به پردازش کنونی در حال اجرا ندارند را میدهد.
Polling I/O
Polling سادهترین روش برای یک دستگاه I/O جهت ارتباط با پردازنده است. فرایند بررسی دورهای وضعیت دستگاه برای مشاهده این که زمان عملیات I/O رسیده است یا نه Polling نامیده میشود. دستگاه I/O به سادگی اطلاعات خود را در یک رجیستر Status قرار میدهد تا پردازنده این اطلاعات را دریافت کند.
در اغلب موارد دستگاهها نیازمند توجه نیستند و زمانی که نیازمند ارتباط باشند، باید تا دفعه بعدی که برنامه Polling به آنها سر میزند صبر کنند. این روش ناکارآمدی است، چون اغلب زمان پردازنده به خاطر poll-های غیرضروری هدر میرود.
این وضعیت مشابه معلمی است که به طور مداوم و یکی پس از دیگری از دانشآموزان کلاسش سؤال میکند که آیا به کمک نیاز دارند یا نه. بدیهی است که روش کارآمدتر این است که دانشآموز در صورت نیاز به کمک، از معلم درخواست کمک کند.
وقفههای I/O
روش جایگزین برای مدیریت ورودی/خروجی روش مبتنی بر وقفه است. منظور از وقفه علامتی است که یک دستگاه هنگام نیاز به توجه پردازنده به آن ارسال میکند.
کنترلر دستگاه هنگامی که به توجه CPU نیاز داشته باشد، یک سیگنال وقفه را روی باس قرار میدهد و زمانی که CPU این وقفه را دریافت کند، وضعیت کنونی را ذخیره کرده و دستگیره مناسب وقفه را با استفاده از بردار وقفه (آدرسهای روالهای سیستم عامل برای مدیریت رویدادهای مختلف) فراخوانی میکند. وقتی نیاز دستگاه تولیدکننده وقفه رفع شد، CPU به وظیفه اولیه خود بازمیگردد، گویی هیچ وقفهای رخ نداده است.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای علوم کامپیوتر
- آموزش سیستم های عامل
- مجموعه آموزشهای مهندسی نرمافزار
- مشخصات سیستم عامل — راهنمای جامع
- آموزش سیستم عامل لینوکس (Linux) – مقدماتی
- سرویس ها در سیستم عامل — راهنمای جامع
==
سلام. این مقاله خیلی در فهم مطالب به من کمک کرد. خیلی ممنونم.