जवाबों:
मेटा-उत्तर: लिनक्स कर्नेल के लिए होने वाला सभी कच्चा सामान lkml (लिनक्स कर्नेल मेलिंग सूची) से होकर जाता है । खोजपूर्ण सारांश के लिए, पढ़ें या खोज करें lwn (लिनक्स साप्ताहिक समाचार) ।
उत्तर: जोनाथन कार्बेट द्वारा ioctl () के नए तरीके से :
ioctl()
कर्नेल के शेष हिस्सों में से एक है जो बिग कर्नेल लॉक (BKL) के तहत चलता है। अतीत में, बीकेएल के उपयोग नेioctl()
असंबंधित प्रक्रियाओं के लिए लंबी विलंबता बनाने के लिए लंबे समय तक चलने वाले तरीकों के लिए संभव बना दिया है।
पेश किए गए unlocked_ioctl
और compat_ioctl
2.6.11 में पैच की व्याख्या का अनुसरण करता है । क्षेत्र का निष्कासनioctl
बहुत बाद में हुआ, 2.6.36 में।
स्पष्टीकरण: जब ioctl
निष्पादित किया गया था, तो यह बिग कर्नेल लॉक (BKL) लिया गया था , इसलिए कुछ भी एक ही समय में निष्पादित नहीं किया जा सकता था। मल्टीप्रोसेसर मशीन पर यह बहुत बुरा है, इसलिए बीकेएल से छुटकारा पाने के लिए एक बड़ा प्रयास था। सबसे पहले, unlocked_ioctl
पेश किया गया था। यह प्रत्येक ड्राइवर लेखक को यह चुनने देता है कि इसके बजाय किस लॉक का उपयोग करना है। यह मुश्किल हो सकता है, इसलिए संक्रमण की अवधि थी, जिसके दौरान पुराने ड्राइवरों ने अभी भी काम किया (उपयोग कर रहे थे ioctl
) लेकिन नए ड्राइवर बेहतर इंटरफ़ेस ( unlocked_ioctl
) का उपयोग कर सकते थे । आखिरकार सभी ड्राइवरों को परिवर्तित कर दिया गया और ioctl
उन्हें हटाया जा सका।
compat_ioctl
वास्तव में असंबंधित है, भले ही इसे उसी समय जोड़ा गया हो। इसका उद्देश्य 32-बिट उपयोगकर्ता के कार्यक्रमों को ioctl
64-बिट कर्नेल पर कॉल करने की अनुमति देना है । अंतिम तर्क का अर्थ ioctl
ड्राइवर पर निर्भर करता है, इसलिए ड्राइवर-स्वतंत्र रूपांतरण करने का कोई तरीका नहीं है।
unlocked_ioctl
एक में struct file_ops
जब यह शुरू होता है, और वे से भर जाती है struct file_ops
जब फ़ाइल को खोलने पर फ़ाइल वस्तु में। mknod
इसमें कोई भूमिका नहीं।
mknod
से ही (के माध्यम से unlocked_ioctl
) संबंधित फ़ाइल संचालन को पुनर्निर्देशित करने से पहले एक चरित्र डिवाइस के माध्यम से अपने इंटरफ़ेस को उजागर करना होगा ।
ऐसे मामले होते हैं जब कर्नेल 2.6.36 में कंपोजिट_आईएक्टल () के लिए (फाइल / लाइन / एफएचएच) स्ट्रक्चर फाइल_ऑपरेशन मेथड ioctl () शामिल नहीं है (जैसे कुछ डिवाइस ड्राइवर्स के लिए) और अनलॉक किए गए .ioctl () का उपयोग नहीं किया जाना चाहिए।
unlocked_ioctl
ऐसा होता है? तथ्य यह है कि एक फ़ंक्शन पॉइंटर प्रति फ़ाइल (इस मामले मेंstruct file
) का उपयोग किया जाता है, ऐसा लगता है कि मैं करीब हो सकता हूं। क्याunlocked_ioctl
ड्राइवर की शुरुआत के बाद चरित्र फ़ाइलों के लिए पंजीकृत हैmknod
?