بل على مكونات الأجهزة الأخرى أيضًا. ترتبط بعض هذه المكونات بشكل خاص باستقبال المدخلات أو توجيه المخرجات، ميزات جهاز الإدخال/الإخراج مساحة الجهاز متنوعة للغاية. تأتي الأجهزة بجميع الأشكال والأحجام مع الكثير من التباين في بنية الأجهزة ووظائفها وواجهاتها. ستركز مناقشتنا على الميزات الرئيسية للجهاز الذي يتيح دمجه في النظام. سيحتوي الجهاز على مجموعة من سجلات التحكم التي يمكن الوصول إليها بواسطة وحدة المعالجة المركزية وتسمح بتفاعلات وحدة المعالجة المركزية/الجهاز. يتم تقسيم هذه السجلات عادةً إلى: سجلات الأوامر ، التي تستخدمها وحدة المعالجة المركزية للتحكم في الجهاز؛ التي تستخدمها وحدة المعالجة المركزية لنقل البيانات داخل وخارج الجهاز؛ سجلات الحالة التي تستخدمها وحدة المعالجة المركزية لفهم ما يحدث على الجهاز. سيدمج الجهاز كل المنطق الآخر الخاص بالجهاز. بالإضافة إلى أي منطق آخر يحتاجه الجهاز. قد تحتاج بعض الأجهزة إلى شرائح لتحويل الإشارات التناظرية إلى رقمية. قد تحتاج أجهزة الشبكة إلى شرائح للتفاعل مع وسيط الشبكة الفعلي، ربط جهاز وحدة المعالجة المركزية تتفاعل الأجهزة مع بقية النظام عبر وحدة تحكم يتم دمجها عادةً كجزء من حزمة الجهاز المستخدمة لتوصيل الجهاز ببقية مجمع وحدة المعالجة المركزية عبر بعض التوصيلات البينية لوحدة المعالجة المركزية/الجهاز. إن ناقل PCI ليس هو الوصلة البينية الوحيدة الممكنة التي يمكن أن تكون موجودة في النظام. تحدد وحدات التحكم في الجهاز نوع الاتصال البيني الذي يمكن للجهاز الاتصال به. يمكن لوحدات التحكم في الجسور التعامل مع أي اختلاف بين الأنواع المختلفة من الوصلات البينية. تحتاج أنظمة التشغيل إلى تضمين برنامج تشغيل الجهاز لكل نوع من الأجهزة المضمنة في النظام. برامج تشغيل الأجهزة مسؤولة عن جميع جوانب الوصول إلى الجهاز وإدارته والتحكم فيه . يتضمن ذلك المنطق الذي يحدد كيفية تمرير الطلبات من المكونات ذات المستوى الأعلى إلى الجهاز وكيفية استجابة هذه المكونات للأخطاء أو الإشعارات الواردة من الجهاز. تعمل أنظمة التشغيل على توحيد واجهاتها مع برامج تشغيل الأجهزة. أجهزة الحظر - مثل الأقراص - على دقة كتل البيانات التي يتم تسليمها من وإلى الجهاز عبر التوصيل البيني لوحدة المعالجة المركزية. من الخصائص الأساسية لأجهزة الحظر أنه يمكن الوصول إلى الكتل الفردية. إذا كان لديك عشر كتل من البيانات على القرص، يتم توحيد الواجهة التي يعرضها الجهاز لنظام التشغيل بناءً على نوع الجهاز. يجب أن تدعم جميع أجهزة الحظر عمليات قراءة وكتابة كتلة من البيانات. يحتفظ نظام التشغيل ببعض التمثيل لكل جهاز من الأجهزة المتوفرة على النظام الأساسي. يتم ذلك عادةً باستخدام تجريد الملف حيث يمثل كل ملف جهازًا. يسمح هذا لنظام التشغيل بالتفاعل مع الأجهزة عبر نفس الواجهة الموجودة بالفعل للتفاعل مع الملفات. سيتم التعامل مع هذه العمليات بطريقة معينة خاصة بالجهاز. تظهر سجلات الجهاز لوحدة المعالجة المركزية كمواقع للذاكرة في عنوان فعلي محدد. تدرك وحدة تحكم PCI المدمجة أنه يجب توجيه عمليات الوصول هذه إلى الجهاز المناسب. وهذا يعني أن جزءًا من الذاكرة الفعلية على النظام مخصص لتفاعلات الجهاز. تحدد الأنظمة الأساسية x86 تعليمات دخول/خروج معينة تُستخدم للوصول إلى الأجهزة. تحتاج كل تعليمات إلى تحديد الجهاز المستهدف - منفذ الإدخال/الإخراج - بالإضافة إلى بعض القيمة التي سيتم تمريرها إلى الجهاز. يمكن أن يأخذ المسار من الجهاز إلى مجمع وحدة المعالجة المركزية طريقين. الجانب السلبي هو معالجات المقاطعة. هناك الخطوات الفعلية المتضمنة في معالج المقاطعة والتي تكلف دورات وحدة المعالجة المركزية. يمكن للجهاز تشغيل المقاطعات بمجرد حصول الجهاز على معلومات لوحدة المعالجة المركزية. يمكن لهذه الإستراتيجية أن تؤدي إلى تأخير في كيفية ملاحظة الحدث أو التعامل معه، نظرًا لأن المعالجة تحدث في مرحلة ما بعد إنشاء الحدث بواسطة الجهاز. بالإضافة إلى ذلك، الوصول إلى الجهاز PIO مع الدعم الأساسي فقط من الاتصال البيني مثل PCI، تتحكم وحدة المعالجة المركزية في حركة البيانات من/إلى الجهاز عن طريق القراءة/الكتابة في سجلات البيانات الخاصة بالجهاز. دعونا نفكر في كيفية قيام العملية التي تعمل على وحدة المعالجة المركزية بإرسال حزمة شبكة عبر جهاز بطاقة واجهة الشبكة (NIC). أولاً، تحتاج وحدة المعالجة المركزية إلى الكتابة إلى سجل الأوامر الموجود على الجهاز. يحتاج هذا الأمر إلى توجيه الجهاز الذي يحتاجه لإجراء نقل البيانات التي ستوفرها وحدة المعالجة المركزية. على سبيل المثال، قد يكون لدينا حزمة بحجم 1500 بايت ونرغب في إرسالها باستخدام سجلات بيانات ذات 8 بايت. يلزم الوصول إلى 189 وحدة المعالجة المركزية لإرسال الحزمة. تتطلب هذه الطريقة دعمًا قويًا إضافيًا في شكل وحدة تحكم DMA. بالنسبة للأجهزة التي تدعم DMA، ومع ذلك، والعكس صحيح. دعونا نفكر في كيفية قيام العملية التي تعمل على وحدة المعالجة المركزية بإرسال حزمة شبكة عبر جهاز بطاقة واجهة الشبكة (NIC). أولاً، يحتاج هذا الأمر إلى توجيه الجهاز الذي يحتاجه لإجراء نقل البيانات التي ستوفرها وحدة المعالجة المركزية. يجب أن يكون هذا الأمر مصحوبًا بعملية تقوم بتكوين وحدة تحكم DMA بمعلومات حول عنوان الذاكرة وحجم المخزن المؤقت الذي يحتفظ بحزمة الشبكة. إذا كانت لدينا حزمة 1500 بايت ونرغب في إرسالها باستخدام مسجلات بيانات ذات 8 بايت، فستتطلب العملية بأكملها وصولاً واحدًا لوحدة المعالجة المركزية (CPU) إلى سجل الأوامر ثم عملية تكوين DMA واحدة. سيظل PIO أكثر كفاءة. لكي يعمل DMA، وهذا يعني أن مناطق الذاكرة المشاركة في DMA مثبتة . فهي غير قابلة للتبديل. الوصول إلى الجهاز النموذجي ستقوم العملية بإجراء استدعاء نظام لتحديد العملية المناسبة. على سبيل المثال، قد تشكل النواة حزمة TCP/IP من مخزن مؤقت غير منسق. سيقوم برنامج تشغيل الجهاز بعد ذلك بإجراء تكوين الطلب على الجهاز. على سبيل المثال، يتحمل برامج التشغيل مسؤولية ضمان عدم الكتابة فوق أي أوامر وبيانات يحتاجها الجهاز أو عدم تسليمها. وأخيرًا، سيقوم الجهاز بتنفيذ الطلب الفعلي. على سبيل المثال، أي نتائج/أحداث تنشأ على الجهاز سوف تعبر هذه السلسلة في الاتجاه المعاكس: من الجهاز إلى برنامج التشغيل إلى النواة وأخيرًا إلى عملية المستخدم. تجاوز نظام التشغيل ليس من الضروري المرور عبر النواة للوصول إلى الجهاز. وهذا ما يسمى تجاوز نظام التشغيل . في تجاوز نظام التشغيل، تكون أي ذاكرة/سجلات مخصصة للاستخدام بواسطة الجهاز متاحة مباشرة لعملية المستخدم. يشارك نظام التشغيل في إتاحة تسجيلات الجهاز لعملية المستخدم عند الإنشاء، ولكنه بعد ذلك يكون بعيدًا عن الطريق. فإننا نحتاج إلى برنامج تشغيل على مستوى المستخدم - في الأساس مكتبة - يرتبط به المستخدم من أجل التفاعل مع الجهاز. يجب أن يحتفظ نظام التشغيل ببعض التحكم في الحبوب الخشنة. على سبيل المثال، لا يزال بإمكان نظام التشغيل تمكين/تعطيل جهاز أو إضافة أذونات لإضافة المزيد من العمليات لاستخدام الجهاز. يجب أن يحتوي الجهاز على سجلات كافية حتى يتمكن نظام التشغيل من تعيين بعضها في عملية مستخدم واحدة أو أكثر مع الاحتفاظ بإمكانية الوصول إلى عدد قليل من السجلات نفسها حتى يتمكن من التفاعل مع الجهاز على مستوى عالٍ. عندما يحتاج الجهاز إلى تمرير بعض البيانات إلى إحدى العمليات المتفاعلة معه، تُترك هذه المسؤولية للجهاز نفسه. المزامنة مقابل الوصول غير المتزامن حتى لو كان مجرد إقرار. يمكن السماح لعملية المستخدم بالتحقق مما إذا كانت الاستجابة متاحة. والتجريد النموذجي المتعلق بالتخزين الذي تستخدمه التطبيقات هو الملف. لا نفكر في التفاعل مع كتل التخزين. أسفل الواجهة القائمة على الملفات التي تستخدمها التطبيقات يوجد نظام الملفات. سيتلقى نظام الملفات عمليات القراءة/الكتابة من عملية المستخدم لملف معين، وسيكون لديه المعلومات اللازمة للعثور على الملف، وتحديد ما إذا كان بإمكان عملية المستخدم الوصول إليه والجزء الذي يجب الوصول إليه. تسمح أنظمة التشغيل بتعديل نظام الملفات أو استبداله بالكامل بنظام ملفات مختلف . واجهة برمجة التطبيقات القياسية هي POSIX API، والتي تتضمن مكالمات النظام للقراءة والكتابة. والنتيجة هي أنه يمكن تبديل أنظمة الملفات دون تعطيل تطبيقات المستخدم/ إذا تم تخزين الملفات على أجهزة محظورة، فسيحتاج نظام الملفات إلى التفاعل مع هذه الأجهزة عبر برامج تشغيل الأجهزة الخاصة بها. يمكن استخدام أنواع مختلفة من أجهزة الحظر للتخزين الفعلي وسيتطلب التفاعل الفعلي معها واجهات برمجة تطبيقات معينة خاصة بالبروتوكول. على الرغم من أن الأجهزة قد تكون جميعها أجهزة محظورة، فمن الممكن أن تكون هناك اختلافات بين واجهات برمجة التطبيقات (APIs) الخاصة بها في كثير من الأحيان. تقدم حزمة جهاز الكتلة طبقة أخرى: طبقة الكتلة العامة . الهدف من هذه الطبقة هو توفير معيار لنظام تشغيل معين لجميع أنواع أجهزة الكتلة. لا تزال ميزات الجهاز الكاملة متاحة ويمكن الوصول إليها من خلال برنامج تشغيل الجهاز، ولكن يتم تجريدها بعيدًا عن نظام الملفات نفسه. بنفس الطريقة التي يوفر بها نظام الملفات واجهة برمجة تطبيقات ملفات متسقة لعمليات المستخدم، نظام الملفات الظاهري ماذا لو أردنا التأكد من أن تطبيق المستخدم يمكنه رؤية الملفات بسلاسة عبر أجهزة متعددة كنظام ملفات واحد متماسك ؟ ويمكن الوصول إليها عبر الشبكة؟ لحل المشاكل الأساسية التي تطرحها هذه الأسئلة، تستمر التطبيقات في التفاعل مع VFS باستخدام نفس واجهة برمجة تطبيقات POSIX كما كان من قبل، ويحدد VFS مجموعة أكثر تفصيلاً من التجريدات المتعلقة بنظام الملفات والتي يجب على كل نظام ملفات أساسي تنفيذها. تجريدات نظام الملفات الظاهري تجريد الملف العناصر التي يعمل عليها VFS. مثل القراءة والكتابة والإغلاق. يحتفظ inode بقائمة بجميع كتل البيانات المقابلة للملف. وحجم الملف، تعتبر Inodes مهمة لأن الملف لا يحتاج إلى تخزينه بشكل متجاور على القرص. يحتفظ Linux ببنية بيانات تسمى dentry (إدخال الدليل). إذا كنا نحاول الوصول إلى ملف في /users/ ada ، فسيقوم نظام الملفات بإنشاء أسنان لكل مكون مسار - لـ / و /users و /users/ ada . لم تستمر. أخيرًا، يوفر تجريد الكتلة الفائقة معلومات حول كيفية وضع نظام ملفات معين على بعض أجهزة التخزين. يحتفظ كل نظام ملفات ببعض البيانات الوصفية الإضافية في الكتلة الفائقة. تقوم أنظمة الملفات المختلفة بتخزين بيانات تعريف مختلفة. هياكل بيانات نظام الملفات الظاهري هي كيانات برمجية. يتم إنشاؤها وصيانتها بواسطة مكون نظام ملفات نظام التشغيل. ستتوافق المكونات المتبقية من نظام الملفات مع الكتل الموجودة على القرص. تتم كتابة الملفات على القرص ككتل. وأي الكتل تحتوي على inodes وأي الكتل مجانية - تحتفظ الكتلة الفائقة بخريطة شاملة لجميع الأقراص الموجودة على جهاز معين. نظام الملفات الموسع الثاني نظام الملفات ext2 هو نظام الملفات الافتراضي في Linux حتى تم استبداله بـ ext3 و ext4 مؤخرًا. قسم القرص المستخدم كنظام ملفات ext2 Linux كما يلي. لا يتم استخدام الكتلة الأولى بواسطة Linux وغالبًا ما يتم استخدامها لتشغيل النظام. حجم مجموعات الكتل هذه ليس له علاقة بفيزياء القرص الفعلي الذي تلخصه هذه المجموعة. • صور نقطية • عدد العقد الحرة يمكن للمخصصين ذوي المستوى الأعلى قراءة الصور النقطية لتحديد الكتل والرموز الداخلية المجانية والمستخدمة بسهولة. كل inode في ext2 عبارة عن بنية بيانات 128B تصف ملفًا واحدًا بالضبط. inode Inodes دورًا رئيسيًا في تنظيم كيفية تخزين الملفات على القرص لأنها تدمج بشكل أساسي فهرسًا لجميع كتل القرص التي تتوافق مع ملف معين. يتم تعريف الملف بشكل فريد من خلال inode الخاص به . يحتوي inode على قائمة بجميع الكتل التي تتوافق مع الملف الفعلي. بالإضافة إلى قائمة الكتل، يحتوي inode أيضًا على معلومات بيانات تعريف إضافية. يحتوي الملف الموضح أعلاه على 5 كتل مخصصة له. إذا كنا بحاجة إلى مساحة تخزين أكبر للملف، فيمكن لنظام الملفات تخصيص كتلة مجانية، وببساطة تحديث inode ليحتوي على الإدخال السادس، الجانب السلبي لهذا الأسلوب هو أن هناك حدًا لحجم الملف للملفات التي يمكن فهرستها باستخدام بنية البيانات هذه. على سبيل المثال، إذا كان لدينا inode 128B يحتوي على مؤشرات كتلة 4B، وهو مقيد للغاية. inodes مع مؤشرات غير مباشرة إحدى الطرق لحل مشكلة حدود حجم الملف هي استخدام المؤشرات غير المباشرة . ستشير المؤشرات المباشرة إلى 1 كيلو بايت لكل إدخال. لتوسيع عدد كتل القرص التي يمكن معالجتها عبر عنصر inode واحد ، مع الحفاظ أيضًا على حجم inode صغير ، يمكننا استخدام مؤشرات غير مباشرة. حيث يشير كل مؤشر إلى البيانات. ويبلغ حجم المؤشر 4 بايت، سيشير المؤشر المزدوج غير المباشر إلى كتلة من المؤشرات غير المباشرة المفردة، بينما سيشير إلى مؤشرات البيانات. تتمثل فوائد المؤشرات غير المباشرة في أنها تسمح لنا باستخدام inodes صغيرة نسبيًا مع القدرة على معالجة الملفات الأكبر حجمًا والكبيرة. باستخدام المؤشرات المزدوجة غير المباشرة، تحسينات الوصول إلى القرص ستتم كتابة المحتوى وقراءته من ذاكرات التخزين المؤقت هذه، ولكنه يمكن أن يقلل بشكل كبير من زمن وصول الوصول عن طريق زيادة معدل دخول ذاكرة التخزين المؤقت. تعمل جدولة الإدخال/الإخراج على تقليل الوصول العشوائي، ولكنها تحافظ على البيانات في الذاكرة.