CPU এ চলমান সফটওয়্যারটি বিভিন্ন পিসিতে চলমান হার্ডওয়্যারগুলির সাথে যোগাযোগ করতে পারে।
বোঝার সবচেয়ে সহজ I / O পোর্ট। সফ্টওয়্যার একটি আই / ও পোর্টের সময় 8, 16, বা 32 বিট লিখতে আউটপুট নির্দেশনা ব্যবহার করে। একইভাবে, সফ্টওয়্যারটি একটি I / O পোর্ট থেকে পড়ার জন্য IN নির্দেশনাটি ব্যবহার করে। I / O পোর্ট পৃথক আলাদা 16-বিট অ্যাড্রেস স্পেসে থাকে, প্রধান মেমরি দ্বারা ব্যবহৃত অ্যাড্রেস স্পেসের সাথে সম্পর্কিত নয়। I / O পোর্ট ব্যবহার করে হার্ডওয়্যারের প্রতিটি অংশে I / O ঠিকানাগুলির একটি পরিসীমা রয়েছে; এই ঠিকানাগুলির প্রতিটি থেকে লেখা এবং পড়ার একটি ভিন্ন প্রভাব রয়েছে (এবং প্রায়শই পড়া এবং একই ঠিকানায় লেখার বিভিন্ন প্রভাব রয়েছে)।
আরেকটি উপায় হল মেমরি-ম্যাপেড I / O, যেখানে মেমরি অ্যাড্রেস স্পেসের অংশ হার্ডওয়্যারের একটি অংশে ম্যাপ করা হয়। প্রধান স্মৃতিতে যাওয়ার পরিবর্তে, মেমরির সেই অঞ্চল থেকে পড়া এবং লিখতে সংশ্লিষ্ট হার্ডওয়্যারগুলিতে যান। হার্ডওয়্যার ও অঞ্চলে এটির অর্থ কী তা নির্ভর করে (হার্ডওয়্যারের একই অংশে একাধিক মেমরি-ম্যাপযুক্ত আই / ও অঞ্চলটি অসাধারণ নয়); এটি পড়ার এবং লেখার একটি বিশেষ প্রভাব থাকতে পারে (যেমন আই / ও পোর্টগুলির সাথে সাধারণ) অথবা এটি কেবল হার্ডওয়্যারে মেমরিতে সরাসরি পড়তে এবং লিখতে পারে (উদাহরণস্বরূপ, একটি ভিডিও কার্ডের ফ্রেম বাফার)।
অন্যদিকে (বাকি হার্ডওয়্যারটি CPU এ চলমান সফ্টওয়্যার নিয়ে কথা বলা), সেখানে বিভিন্ন উপায়ে রয়েছে। সর্বাধিক সহজ সফটওয়্যারটি জিজ্ঞাসা করার জন্য অপেক্ষা করতে হবে (হয় একটি আই / ও পোর্টের মাধ্যমে অথবা মেমরি-ম্যাপড আই / ও); একা ব্যবহার করা, এই খুব অদক্ষ হতে পারে।
হার্ডওয়্যারটি মূল মেমরিতে সরাসরি লিখার আরেকটি উপায়। এটি বিশাল পরিমাণে ডেটা স্থানান্তর করার জন্য খুব কার্যকরী এবং এটি অন্য দিকেও ব্যবহার করা যেতে পারে (প্রধান মেমরি থেকে পড়তে)। যাইহোক, সফ্টওয়্যার এখনও স্থানান্তরের সমাপ্তি যখন জানতে হবে।
শেষ উপায় interrupts হয়। CPU বিঘ্নিত সংখ্যা সহ একত্রিত অনুরোধ প্রাপ্ত করে। সিপিইউটি হস্তক্ষেপ করে (এভাবে নামটি) এটি কী করছে, এবং কোডটির অন্য অংশে স্থানান্তরিত হয় (কোন অংশটি বাধাগ্রস্ত সংখ্যাটির উপর নির্ভর করে)। সাধারণত প্রতিটি হার্ডওয়্যার একটি একক সংঘাতের সংখ্যার সাথে সঙ্গতিপূর্ণ, তবে বিঘ্নিত সংখ্যাগুলি প্রায়ই বেশ কয়েকটি বিঘ্নিত উৎস দ্বারা ভাগ করা হয়। বিশেষ ধরনের বাধা রয়েছে যা কোন সংখ্যা নেই; উদাহরণস্বরূপ, এনএমআই।
একটি বাস্তব উদাহরণের জন্য, আসুন একটি সহজ নেটওয়ার্ক ইন্টারফেস কার্ড গ্রহণ করা যাক। এই নেটওয়ার্ক কার্ডটিতে নিবন্ধগুলির একটি সেট রয়েছে, যা I / O পোর্টের মাধ্যমে বা মেমরি-ম্যাপযুক্ত I / O এর মাধ্যমে গ্রহণ করা যেতে পারে। এটি মূল মেমরি থেকেও পড়তে এবং লিখতে পারে এবং এতে একটি বাধা পিন থাকে।
নেটওয়ার্কে একটি প্যাকেট পাঠানোর জন্য, নেটওয়ার্ক কার্ড ড্রাইভার প্রথমে 4 বাইটের একাধিক একাউন্টে মেমরিতে পূর্ণ প্যাকেট লিখে। এটি নেটওয়ার্ক ইন্টারফেস কার্ডে কয়েকজন নিবন্ধকের কাছে লিখেছে, এটি মেমরি ঠিকানা, প্যাকেট আকার এবং কিছু অন্যান্য তথ্য বলছে। নেটওয়ার্ক কার্ড তারপর মেমরি থেকে প্যাকেট পড়তে, নেটওয়ার্ক এটি পাঠায়, এবং বিঘ্ন সংকেত। ইন্টারট্রাক কন্ট্রোলার (হার্ডওয়ারের একটি পৃথক টুকরা) CPU- এ বিঘ্নিত অনুরোধ প্রেরণ করে এবং এটি বিঘ্নিত সংখ্যাটিকে বলে। হস্তক্ষেপকারী হ্যান্ডলারের মধ্যে, ড্রাইভারটি কার্ড থেকে একটি নিবন্ধ লিখেছেন যা বলে যে এটি একটি প্যাকেট পাঠানো হচ্ছে সে সম্পর্কে বাধা দেয়, কোন প্যাকেটটি পাঠানো হয়েছে তা খুঁজে পেতে অন্য নিবন্ধটি পড়ে এবং জানে যে এটি এখন যে প্যাকেটটি লিখেছে তা স্মৃতি পুনঃব্যবহার করতে পারে ।
নেটওয়ার্ক থেকে প্যাকেট পাওয়ার জন্য, নেটওয়ার্ক কার্ড ড্রাইভার প্যাকেটের জন্য স্টোরেজ হিসাবে ব্যবহারযোগ্য মেমরির একটি ব্লক বরাদ্দ করে এবং কার্ডে বেশ কয়েকজন রেজিস্ট্রার লিখে মেমরি ব্লকের মেমরি ঠিকানা, তার আকার এবং কিছু অন্যান্য তথ্য । যখন নেটওয়ার্ক থেকে একটি প্যাকেট পাওয়া যায়, তখন নেটওয়ার্ক কার্ডটি প্যাকেটের আকার এবং কিছু অন্যান্য তথ্য সহ মেমরি ব্লকের সাথে এটি লিখে। এটি কিছু নিবন্ধককে আপডেট করে যা এটি এবং ড্রাইভার উভয়কে বলে দেয় যে মেমরির ব্লকের কতটা মুক্ত স্থান রয়েছে, যেখানে মুক্ত স্থানটি শুরু হয় এবং যেখানে ব্যবহৃত স্থানটি শুরু হয় (বাফারটি বৃত্তাকার হয়, তাই শেষ হওয়ার পরে এটি শেষ হয়ে যায় শুরুতে)। অবশেষে, এটি তার বিঘ্ন সংকেত। ড্রাইভার প্যাকেট (গুলি) প্রাপ্তির জন্য রেজিস্টার এবং মেমরি পড়বে,
অন্যান্য কিছু আছে যা কার্ড ড্রাইভারকে তার নিবন্ধক লিখে এবং কোনও বাধা সংকেত দিয়ে বলতে পারে; উদাহরণস্বরূপ, যে নেটওয়ার্ক তারের আনপ্ল্যাগ করা হয়েছিল, এটি একটি ট্রান্সমিশন ত্রুটি ছিল, ইত্যাদি।