یکی از عملکردهای بسیار مهم و اصلی سیستم عامل کنترل و مدیریت دستگاههای ورودی/ خروجی (I/O) در کامپیوتر است. سیستم عامل باید فرمانهایی را به این دستگاهها بفرستد، وقفه ها را بگیرد و خطاها را اداره کند. و همچنین باید یک رابط بین دستگاهها و بقیه سیستم به منظور استفاده ساده تر از آنها فراهم نماید.
اصول سخت افزاری I/O
دید افراد مختلف نسبت به سخت افزار I/O متفاوت است. مهندسین برق و الکترونیک آن را بصورت مدارهای مجتمع، مدار چاپی، منابع تغذیه، موتورها و دیگر اجزاء فیزیکی تشکیل دهنده سخت افزار می بینند. برنامه نویسان آن رابه شکل واسطه ارائه شده به نرم افزار، فرامین مورد قبول سخت افزار، توابع قابل اجرا و خطاهای احتمالی و گزارش آنها می بینند. از یک دیدگاه، دستگاههای ورودی/ خروجی بطور کلی به دو دسته تقسیم می شوند.
1- دستگاه های بلوکی BLOCK DEVICE
2- دستگاههای کارکتری CHARACTER DEVICE
یک دستگاه بلوکی وسیله ای است که اطلاعات را در یک بلوک با اندازه معین ذخیره می کند که هر کدام با آدرس خودشان مشخص شده اند. حدود اندازه بلوکهای معمولی از 512 بایت تا 32768 بایت می باشند خاصیت اساسی یک دستگاه بلوکی این است که خواندن و نوشتن هر بلوک را بطور مستقل از بقیه ممکن می سازد دیسکها از متداولترین دستگاههای بلوکی هستند.
نوع دیگری از دستگاههای ورودی/ خروجی، دستگاههای کارکتری است. یک دستگاه کارکتری یک جریان از کارکترها را بدون توجه به هیچ ساختار بلوکی، دریافت نموده و یا تحویل می دهد، بنابراین قابلیت آدرس دهی و جستجو در آن وجود ندارد. چاپگرها، واسطه های شبکه، موشواره ها و دیگر دستگاههایی که شبیه دیسک نیستند، به عنوان دستگاه کارکتری در نظر گرفته می شوند. از دیدگاه دیگر دستگاههای ورودی/ خروجی به سه طبقه تقسیم می شوند:
1- قابل خواندن توسط انسان:
مناسب برای ارتباط با کاربر، مانند پایانه های نمایش دهنده تصویر، صفحه کلید و…
2- خواندن توسط ماشین:
مناسب برای ارتباط با وسائل الکترونیکی، مانند گردانندهای دیسک و نوار، حس کنندهها، کنترل کننده ها و محرکها.
3- ارتباطات:
مناسب برای ارتباط با دستگاههای دور مانند، گرداننده های دیجیتالی خط و مودمها. تفاوتهای زیادی در بین هر طبقه وجود دارد که مهمترین آنها عبارتند از:
نرخ انتقال، کاربرد، پیچیدگی کنترل، واحد انتقال، نمایش داده ها، شرایط خطا.
سازمان عمل ورودی/ خروجی
الف) ورودی/ خروجی برنامه ریزی شده: پردازنده یک فرمان ورودی/ خروجی را از جانب فرایندی به یک مولفه ورودی/ خروجی صادر می کند. سپس آن فرایند قبل از ادامه، تا کامل شدن عمل ورودی/ خروجی به انتظار می ماند.
ب) ورودی/ خروجی مبتنی بر وقفه: پردازنده یک فرمان ورودی/ خروجی را از جانب فرایند صادر می کند، سپس به اجرای دستورالعملهای بعدی ادامه می دهد و با کامل شدن عمل ورودی/ خروجی یا وقفه مولفه ورودی/ خروجی مواجه می شود. دستورالعملهای بعدی می توانند از همان فرایند باشند البته به شرطی که فرایند نیازی به انتظار برای تکمیل ورودی/ خروجی نداشته باشد. در غیر این صورت فرایند در انتار وقفه معلق می گردد و کار دیگری انجام می گیرد.
پ) دسترسی مستقیم به حافظه DMA: مولفه DMA تبادل داده ها بین حافظه اصلی و مولفه ورودی/ خروجی را کنترل می کند. پردازنده تقاضایی برای انتقال یک بلوک از داده ها را به مولفه DMA می فرستد و فقط پس از انتقال کل بلوک مورد وقفه قرار می گیرد.
تکامل عمل ورودی/ خروجی
می توان گامهای تکاملی را بصورت زیر خلاصه نمود:
1- کنترل دستگاه جانبی بطور مستقیم.
2- یک کنترل کننده یا مولفه ورودی/ خروجی افزوده شده است. پردازنده از ورودی/ خروجی برنامه ریزی شده بدون وقفه استفاده می کند. با این گام پردازنده از جزئیات اختصاصی واسط های دستگاه خارجی جدا می گردد.
3- همان پیکربندی گام دوم، ولی این بار از وقفه استفاده شده است. دیگر وقت پردازنده تلف نمی شود.
4- از طریق DMA کنترل مستقیم حافظه به مولفه ورودی/ خروجی داده شده است. حال می توان بلوکی از داده را بدون دخالت پردازنده به/ از حافظه انتقال داد.
5- مولفه ورودی/ خروجی تا حد پردازنده ای مجزا، با مجموعه ای دستورالعملهای خاصی برای ورودی/ خروجی ارتقاء یافته است. پردازنده مرکزی (CPU)، پردازنده ورودی/ خروجی را برای اجرای برنامه ورودی/ خروجی از حافظه هدایت می کند، پردازنده ورودی/ خروجی این دستورالعملها را بدون دخالت پردازنده مرکزی واکنشی و اجرا می کند.
6- مولفه ورودی/ خروجی دارای حافظه محلی اختصاصی و در واقع به نوبه خود یک کامپیوتر است. با این معماری، مجموعه بزرگی از دستگاههای ورودی/ خروجی با حداقل دخالت پردازنده مرکزی می تواند کنترل شود.
دسترسی مستقیم به حافظه
اساساً مولفه DMA باید فقط زمانی از گذرگاه استفاده کند که پردازنده به آن نیازی ندارد، یا باید پردازنده را وادار کند که بطور موقت عملیات خود را معلق نماید. روش اخیر بیشتر معمول است و به آن ربودن چرخه می گویند. روش DMA به این صوتر کار می کند که، هرگاه پردازنده در صدد خواندن یا نوشتن بلوکی از داده ها برآید، فرمانی به مولفه DMA می دهد و از این طریق اطلاعات زیر را به آن مولفه میفرستد.
- اینکه درخواست خواندن یا نوشتن.
- آدرس دستگاه ورودی/ خروجی درگیر.
- آدرس مکان شروع خواندن یا نوشتن در حافظه.
- تعداد کلماتی که باید خوانده یا نوشته شود.
سپس پردازنده به کارهای دیگر پرداخته و عمل ورودی/ خروجی را به مولفه DMA محول می کند. مولفه DMA همه بلوک داده ها را به صورت یک کلمه در هر زمان به طور مستقیم و بدون عبور از پردازنده به/ از حافظه انتقال می دهد. هنگامیکه انتقال کامل شده مولفه DMA یک علامت وقفه به پردازنده ارسال می کند. بنابراین پردازنده فقط در آغاز و پایان انتقال درگیر می باشد.
اصول نرم افزاری I/O
هدف اصلی نرم افزار I/O، سازماندهی نرم افزار بصورت یک سری از لایه ها است که کار لایه های پایینی پنهان ساختن ویژگی های پیچیده سخت افزار از لایه های بالاتر و کار لایه های بالایی نشان دادن یک واسطه منظم، ساده و شفاف برای استفاده کننده است. از این اهداف می توان به موارد زیر اشاره نمود.
- برنامه ها تا حد ممکن باید از دستگاه مستقل باشند. یعنی باید بتوانیم برنامه هایی بنویسیم که قادر باشد فایلهای روی یک دیسک نرم، دیسک سخت و یا CD-ROM را بخواند.
- یکی دیگر از اهداف نرم افزار I/O که ارتباط نزدیکی با مفهوم نرم افزار مستقل دستگاه دارد، نامگذاری یکسان می باشد. نام یک فایل یا یک دستگاه بطور ساده باید یک رشته یا یک عدد صحیح باشد و به هیچ وجه به دستگاه بستگی نداشته باشد.
- دیگر اینکه نرم افزار I/O بتواند خطاها را اداره کند. بطور کلی خطاها باید در حد امکان نزدیک به سخت افزار اداره شوند. اگر کنترل کننده یک خطای خواندن را کشف کند باید سعی کند که اگر می تواند خودش خطا را اصلاح کند و اگر نمی تواند این کار را به گرداننده دستگاه (لایه بعدی) بسپارد.
- هدف دیگر، که یک موضوع کلیدی است، انتقال همگام (بلوکه کردن)در مقابل انتقال های ناهمگام (مبتنی بر وقفه) می باشد.
- مورد دیگر، دستگاههای قابل بهره وری مشترک در مقابل دستگاههای انحصاری می باشند. بعضی از دستگاههای I/O از قبیل دیسکها می توانند توسط چندین کاربر بصورت همزمان استفاده شوند. هیچ مشکلی از این بابت که کاربرهای متعدد، فایلها را روی یک دیسک و در یک زمان باز کنند بوجود نمی آید. دستگاههای دیگر از قبیل نوار گردان باید فقط به یک کاربر اختصاص یابند و تاپایان کار آن کاربر، در اختیار روی باقی بماند.