تحتاج نواة نظام التشغيل إلى توفير عملية تحكم كاملة في الإدخال / الإخراج وإعداد عدد كبير من هياكل البيانات المختلفة لإدارة تدفق الإدخال / الإخراج بين الوحدات النمطية المختلفة. تشمل هذه الوحدات: طبقة دليل VFS ، وطبقة ذاكرة التخزين المؤقت للصفحة ، وطبقة نظام الملفات ، وطبقة معالجة الشبكة ، وطبقة الكتلة المشتركة ، وطبقة جدولة الإدخال / الإخراج ، وطبقة محرك جهاز الكتلة ، وطبقة محرك وحدة تحكم قناة الإدخال / الإخراج الخارجية. تشكل هذه الطبقات معًا مجموعة بروتوكولات إدخال / إخراج كبيرة ومعقدة. أنا متأكد من أن لديك فكرة بالفعل عن كيفية استخدام البرامج لأجهزة الإدخال / الإخراج. تنقسم أجهزة الإدخال / الإخراج الأكثر شيوعًا إلى ثلاث فئات: بطاقة الشبكة الأجهزة، أجهزة التخزين(st2400mm0129) , والأجهزة التفاعلية مثل لوحات المفاتيح / الماوس. يمكن توصيل هذه الأجهزة بالنظام من خلال منافذ PCIE أو USB. السؤال هو ، كيف يتم إنشاء البيانات المرسلة إليهم وإرسالها على طول الطريق إلى برنامج تشغيل الجهاز وإلى الجهاز؟ إذا أراد برنامج وضع المستخدم قراءة محتويات القطاع 0 من مروحة القرص الصلب ، فلا يمكنه معالجة القرص الصلب مباشرةً ، لأنه لا يمكنه استدعاء الوظائف التي يوفرها جهاز القرص الصلب السائق على الإطلاق ، يمكنه فقط تفويض كود النواة للقيام بذلك من خلال استدعاء نظام القراءة. في معلمات استدعاء نظام القراءة ، يجب على البرنامج من جانب المستخدم أن يخبر النواة على الأقل: أي جهاز يقرأ ، أي بايت من الجهاز يقرأ منه ، ومكان إعادة البيانات التي تمت قراءتها في الذاكرة ، والمعلمات الأخرى (مثل ما طريقة القراءة عند القراءة ، وما إلى ذلك). الشيء نفسه ينطبق على قراءة الملفات.