الملقم قيد التشغيل في نواة لينكس.يجب الاستماع يحدث في موضوع أو لا ؟

StackOverflow https://stackoverflow.com/questions/615483

  •  03-07-2019
  •  | 
  •  

سؤال

أنا أكتب العميل/الخادم في نواة لينكس (نعم.داخل النواة.تصميم المقرر اتخاذها في صيغتها النهائية.عدم تغيير)

الخادم يقرأ الحزم الواردة من الخام مأخذ.بروتوكول النقل لهذه الحزم (الذي الخام مأخذ الاستماع) هو العرف و UDP مثل.باختصار أنا لم يكن لديك للاستماع الاتصالات الواردة ثم شوكة موضوع التعامل مع هذا الصدد.

يجب أن مجرد عملية أي مخطط بيانات IP المقبلة على أن مأخذ التوصيل الخام.سوف استمر في القراءة على الحزم في حلقة لا نهائية على الخام مأخذ.في مستوى المستخدم برنامج يعادلها ، وأود أن إنشاء موضوع مستقل وأبقى الاستماع الحزم الواردة.

الآن نواة مستوى الخادم, لدي شكوك حول ما إذا كان يجب تشغيل الأمر في موضوع مستقل أو لا لأن:

  1. أعتقد أن قراءة() هو عملية إدخال/إخراج.حتى في مكان ما داخل قراءة () ، النواة يجب أن تكون الدعوة جدول() الدالة على التخلي عن السيطرة على معالج.وهكذا بعد استدعاء قراءة() على الخام المقبس الحالي نواة نشطة السياق سيتم تعليق (وضع النوم الانتظار ربما؟) حتى الحزم المتوفرة.عندما الحزم سيصل نواة يقطع السياق إشارة إلى أن قراءة السياق الذي هو النوم في انتظار مرة أخرى جاهزة للتشغيل.أنا باستخدام 'إطار' هنا على الغرض بدلا من 'الموضوع'.وبالتالي يجب أن لا تتطلب منفصلة لب الموضوع.

  2. من ناحية أخرى, إذا قرأت() لا يتخلى عن التحكم ثم بأكمله النواة سوف يكون قد تم حظره.

يمكن لأي شخص تقديم النصائح حول كيف ينبغي تصميم خدمة بلدي ؟ ما هي مغالطة الحجة التي قدمت في النقطة 1?

هل كانت مفيدة؟

المحلول

لست متأكدا ما إذا كنت بحاجة الخام مأخذ على الإطلاق في النواة.داخل النواة يمكنك إضافة netfilter هوك ، أو تسجيل أي شيء آخر (???) والتي سوف تتلقى جميع الحزم.قد يكون هذا ما تريد.

إذا كنت لم تستخدم الخام مأخذ داخل النواة, ثم ربما كنت بحاجة إلى أن يكون نواة الموضوع (أيبدأت kernel_thread) للاتصال قراءة() على ذلك.ولكن ليس من الضروري أن يكون نواة الموضوع ، يمكن أن يكون userspace الخيط الذي أدلى به للتو خاص syscall أو جهاز الدعوة إلى الكلمة المطلوبة kernel-وضع روتين.

إذا كان لديك ربط تسجيل سياق هذا يسمى في الأمر الذي لا ينبغي أن تفعل الكثير التجهيز ؛ أنا لا أعرف بالضبط ما يرجح أن يكون قد تكون "النصف السفلي معالج" أو "tasklet" مهما كانت هي (هذه الأنواع من السيطرة على هياكل تتغير من إصدار واحد إلى آخر).آمل انها ليست في الواقع خدمة روتين المقاطعة.


في الإجابة على سؤالك الأصلي:

  1. نعم sys_read كتلة موضوع الدعوة ، سواء كان ذلك في لب الموضوع أو userspace واحد.النظام لن يتعطل.ومع ذلك ، إذا كان موضوع الدعوة في الدولة حيث حجب المنطقي ، النواة سوف الذعر (جدولة في المقاطعة أو شيء)

نعم سوف تحتاج إلى القيام بذلك في موضوع مستقل ، لا لن يتعطل النظام.ومع ذلك ، مما يجعل نظام المكالمات في وضع kernel هو غير محدد جدا ، على الرغم من أنها لا تعمل (نوعا ما).

ولكن إذا قمت بتثبيت من نوع هوك بدلا من ذلك, أنت لا تحتاج إلى القيام بأي من ذلك.

نصائح أخرى

أعتقد قد يكون أفضل رهان لمحاكاة طريقة السائقين مكتوبة, أعتقد الملقم الظاهري الجهاز يجلس على رأس تلك الطلبات تأتي من.على سبيل المثال:الماوس سائق يقبل الإدخال المستمر, ولكن لا قفل النظام إذا مبرمجة بشكل صحيح ، شبكة محول هو على الارجح أكثر مماثلة إلى الحالة الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top