जवाबों:
Procfs और sysfs के बीच अंतर क्या है?
proc
यह पुराना है, यह नियमों और संरचना के बिना अधिक या कम है। और कुछ बिंदु पर यह तय किया गया कि proc
थोड़ा बहुत अराजक था और एक नए तरीके की आवश्यकता थी।
तब sysfs
बनाया गया था, और जो नया सामान जोड़ा गया था उसे sysfs
डिवाइस की जानकारी में डाल दिया गया था ।
इसलिए कुछ अर्थों में वे ऐसा ही करते हैं, लेकिन sysfs
थोड़ा अधिक संरचित है।
उन्हें फ़ाइल सिस्टम के रूप में क्यों बनाया गया है?
UNIX दर्शन हमें बताता है कि सब कुछ एक "फ़ाइल" है, इसलिए इसे बनाया गया था इसलिए यह फ़ाइलों के रूप में व्यवहार करता है।
जैसा कि मैं इसे समझता हूं, सिस्टम में चल रही प्रक्रियाओं के बारे में तत्काल जानकारी संग्रहीत करने के लिए proc केवल कुछ है।
वे हिस्से हमेशा से रहे हैं और वे शायद कभी नहीं जाएंगे sysfs
।
लेकिन अधिक पुराना सामान है जिसे आप पा सकते हैं proc
, जिसे स्थानांतरित नहीं किया गया है।
शुरुआत में (यूनिक्स में वापस), जिस तरह से प्रोग्राम को सिस्टम पर चल रही प्रक्रियाओं के बारे में पता चला वह सीधे कर्नेल मेमोरी (ओपनिंग / देव / मेम, और सीधे कच्चे डेटा की व्याख्या) से प्रोसेस प्रोसेस स्ट्रक्चर्स के माध्यम से था। इस प्रकार पहले 'ps' कमांड ने काम किया। समय के साथ, सिस्टम कॉल के माध्यम से कुछ जानकारी उपलब्ध कराई गई थी।
हालाँकि, यह सिस्टम डेटा को सीधे उपयोगकर्ता-स्पेस के माध्यम से / dev / mem के माध्यम से उजागर करने के लिए बुरा रूप है, और हर बार जब आप प्रक्रिया डेटा के कुछ नए टुकड़े को निर्यात करना चाहते थे, तो हर बार नई प्रणाली कॉल बनाने के लिए अप्रिय और इसलिए एक नया तरीका बनाया गया था। प्रक्रिया विशेषताओं के बारे में जानने के लिए उपयोगकर्ता-अंतरिक्ष अनुप्रयोगों के लिए संरचित डेटा का उपयोग करना। यह / proc फाइलसिस्टम था। / Proc के साथ, इंटरफेस और स्ट्रक्चर्स (डायरेक्टरीज़ और फाइल्स) को समान रखा जा सकता है, यहाँ तक कि कर्नेल में अंतर्निहित डेटा स्ट्रक्चर्स को भी बदला जा सकता है। यह पहले की प्रणाली की तुलना में बहुत कम नाजुक था, और यह बेहतर तरीके से बढ़ा।
/ Proc फाइलसिस्टम मूल रूप से प्रक्रिया की जानकारी और कुछ प्रमुख सिस्टम विशेषताओं को प्रकाशित करने के लिए डिज़ाइन किया गया था, जिन्हें 'ps', 'टॉप', 'फ्री' और कुछ अन्य सिस्टम यूटिलिटीज की आवश्यकता होती है। हालाँकि, क्योंकि इसे उपयोग करना आसान था (कर्नेल पक्ष और उपयोगकर्ता-अंतरिक्ष पक्ष दोनों), यह पूरी प्रणाली जानकारी के लिए डंपिंग ग्राउंड बन गया। साथ ही, यह फ़ाइलों को पढ़ने / लिखने के लिए, सेटिंग्स को समायोजित करने और कर्नेल या इसके विभिन्न उप-प्रणालियों के संचालन को नियंत्रित करने के लिए उपयोग किया जाना शुरू हुआ। हालांकि, नियंत्रण इंटरफेस को लागू करने की कार्यप्रणाली तदर्थ थी, और / खरीद जल्द ही एक उलझी हुई गंदगी में बदल गई।
इस गड़बड़ी में संरचना को जोड़ने और कर्नेल से उपयोगकर्ता-स्थान के लिए सिस्टम की जानकारी और नियंत्रण बिंदु (सेवेबल सिस्टम और ड्राइवर विशेषताओं) को उजागर करने के लिए एक समान तरीका प्रदान करने के लिए sysfs (या / sys फाइलसिस्टम) को डिज़ाइन किया गया था। अब, कर्नेल में चालक ढांचा स्वचालित रूप से / sys के तहत निर्देशिका बनाता है, जब चालक पंजीकृत होते हैं, चालक प्रकार और उनके डेटा संरचनाओं में मान के आधार पर। इसका मतलब यह है कि एक विशेष प्रकार के ड्राइवरों में सभी समान तत्व होंगे जो sysfs के माध्यम से उजागर होंगे।
विरासत प्रणाली की जानकारी और नियंत्रण बिंदुओं में से कई अभी भी / खरीद में सुलभ हैं, लेकिन सभी नए busses और ड्राइवरों को sysfs के माध्यम से अपनी जानकारी और नियंत्रण बिंदुओं को उजागर करना चाहिए।
/dev/mem
और /dev/kmem
यह है कि उन्हें रूट एक्सेस की आवश्यकता होती है, इसलिए जो एप्लिकेशन उनका उपयोग करते हैं उन्हें सेट करना होगा।
kmem
, और जैसे उपकरण ps
SGID हैं kmem
।
/dev/mem
या /dev/kmem
इसलिए क्योंकि उपयोगकर्ता मोड प्रक्रिया केवल mmap
फ़ाइल पढ़ सकती है और रैम पढ़कर सभी जानकारी प्राप्त कर सकती है । /proc
फाइलसिस्टम से किसी भी जानकारी को प्राप्त करने के लिए एक syscall की आवश्यकता होती है open
और दूसरे के लिए read
यह बहुत धीमी होती है। हालांकि, /proc
मेमोरी को पढ़ने के लिए कर्नेल विशिष्ट हैक्स की आवश्यकता नहीं होती है और उपयोगकर्ता मोड प्रक्रियाओं के लिए बहुत कम संवेदनशील डेटा को उजागर करता है।
procfs मनमाना अनुमति देता है file_operations
, sysfs अधिक प्रतिबंधित है
procfs प्रविष्टियों एक प्राप्त file_operations
struct, जो समारोह संकेत दिए गए हैं, जो निर्धारित क्या हर फ़ाइल आधारित प्रणाली कॉल, जैसे करने के लिए होता होता है open
, read
, mmap
, आदि, और आप उन लोगों से मनमाने ढंग से कार्रवाई कर सकते हैं।
न्यूनतम उदाहरण:
sysfs निम्नलिखित इंद्रियों में अधिक प्रतिबंधित है:
show
और store
है, जो लिनक्स लागू करने के लिए उपयोग करता है open
, close
, read
, write
और lseek
आप के लिए। यह भी देखें: प्लेटफ़ॉर्म ड्राइवर में sysfs विशेषता के लिए फ़ाइल संचालन कैसे संलग्न करें? | स्टैक ओवरफ़्लोkobject
न्यूनतम उदाहरण: लिनक्स कर्नेल v3.2 में एक सरल sysfs वर्ग विशेषता कैसे बनाएँ स्टैक ओवरफ़्लो
sysfs, डिवाइस की जानकारी दिखाने के लिए 2.6 कर्नेल रिलीज चक्र के दौरान बनाया गया वर्चुअल फाइलसिस्टम है क्योंकि इस प्रकार की सूचनाओं को procfs ने अच्छी तरह से नहीं किया है।
मेमोरी आदि को sysfs में पोर्ट नहीं किया गया है क्योंकि यह उस प्रकार की जानकारी को दिखाने के लिए कभी नहीं था, इसलिए यह संभावना नहीं है कि इसे सभी पर पोर्ट किया जाएगा।
जैसा कि मैं यहां भी जोड़ना चाहता हूं ... जैसा कि / पुराने संस्करण में यह पुराने समय की कर्नेल डिवाइस की जानकारी सम्मिलित है..जैसे sysfs 2.6 कर्नेल संस्करण के साथ आया था, इसलिए डिवाइस ड्राइवर जानकारी उनकी अपनी निर्देशिका बनाता है जिसके द्वारा यह होता है थोड़ा संरचित और उपयोग करने में आसान ।।