Procfs और sysfs के बीच अंतर क्या है?


71

Procfs और sysfs के बीच अंतर क्या है? उन्हें फ़ाइल सिस्टम के रूप में क्यों बनाया गया है? जैसा कि मैं इसे समझता हूं, सिस्टम में चल रही प्रक्रियाओं के बारे में तत्काल जानकारी संग्रहीत करने के लिए proc केवल कुछ है।

जवाबों:


61

Procfs और sysfs के बीच अंतर क्या है?

procयह पुराना है, यह नियमों और संरचना के बिना अधिक या कम है। और कुछ बिंदु पर यह तय किया गया कि procथोड़ा बहुत अराजक था और एक नए तरीके की आवश्यकता थी।

तब sysfsबनाया गया था, और जो नया सामान जोड़ा गया था उसे sysfsडिवाइस की जानकारी में डाल दिया गया था ।

इसलिए कुछ अर्थों में वे ऐसा ही करते हैं, लेकिन sysfsथोड़ा अधिक संरचित है।

उन्हें फ़ाइल सिस्टम के रूप में क्यों बनाया गया है?

UNIX दर्शन हमें बताता है कि सब कुछ एक "फ़ाइल" है, इसलिए इसे बनाया गया था इसलिए यह फ़ाइलों के रूप में व्यवहार करता है।

जैसा कि मैं इसे समझता हूं, सिस्टम में चल रही प्रक्रियाओं के बारे में तत्काल जानकारी संग्रहीत करने के लिए proc केवल कुछ है।

वे हिस्से हमेशा से रहे हैं और वे शायद कभी नहीं जाएंगे sysfs

लेकिन अधिक पुराना सामान है जिसे आप पा सकते हैं proc, जिसे स्थानांतरित नहीं किया गया है।


2
जवाब के लिए धन्यवाद .. लेकिन क्यों cpuinfo और meminfo जैसी चीजें अभी भी procfs में बनाए रखी हैं? क्यों उन्हें sysfs में नहीं लाया जा सकता?
सेन

5
मुझे लगता है कि वे नए सामान को sysfs में रखते हैं, और पुराने को छोड़ देते हैं क्योंकि यह बैकवर्ड कम्पैटिबिलिटी का कुछ स्तर रखता है। सामान की एक बहुत कुछ है जो उन चीजों पर निर्भर करता है ...
जोहान

74

शुरुआत में (यूनिक्स में वापस), जिस तरह से प्रोग्राम को सिस्टम पर चल रही प्रक्रियाओं के बारे में पता चला वह सीधे कर्नेल मेमोरी (ओपनिंग / देव / मेम, और सीधे कच्चे डेटा की व्याख्या) से प्रोसेस प्रोसेस स्ट्रक्चर्स के माध्यम से था। इस प्रकार पहले 'ps' कमांड ने काम किया। समय के साथ, सिस्टम कॉल के माध्यम से कुछ जानकारी उपलब्ध कराई गई थी।

हालाँकि, यह सिस्टम डेटा को सीधे उपयोगकर्ता-स्पेस के माध्यम से / dev / mem के माध्यम से उजागर करने के लिए बुरा रूप है, और हर बार जब आप प्रक्रिया डेटा के कुछ नए टुकड़े को निर्यात करना चाहते थे, तो हर बार नई प्रणाली कॉल बनाने के लिए अप्रिय और इसलिए एक नया तरीका बनाया गया था। प्रक्रिया विशेषताओं के बारे में जानने के लिए उपयोगकर्ता-अंतरिक्ष अनुप्रयोगों के लिए संरचित डेटा का उपयोग करना। यह / proc फाइलसिस्टम था। / Proc के साथ, इंटरफेस और स्ट्रक्चर्स (डायरेक्टरीज़ और फाइल्स) को समान रखा जा सकता है, यहाँ तक कि कर्नेल में अंतर्निहित डेटा स्ट्रक्चर्स को भी बदला जा सकता है। यह पहले की प्रणाली की तुलना में बहुत कम नाजुक था, और यह बेहतर तरीके से बढ़ा।

/ Proc फाइलसिस्टम मूल रूप से प्रक्रिया की जानकारी और कुछ प्रमुख सिस्टम विशेषताओं को प्रकाशित करने के लिए डिज़ाइन किया गया था, जिन्हें 'ps', 'टॉप', 'फ्री' और कुछ अन्य सिस्टम यूटिलिटीज की आवश्यकता होती है। हालाँकि, क्योंकि इसे उपयोग करना आसान था (कर्नेल पक्ष और उपयोगकर्ता-अंतरिक्ष पक्ष दोनों), यह पूरी प्रणाली जानकारी के लिए डंपिंग ग्राउंड बन गया। साथ ही, यह फ़ाइलों को पढ़ने / लिखने के लिए, सेटिंग्स को समायोजित करने और कर्नेल या इसके विभिन्न उप-प्रणालियों के संचालन को नियंत्रित करने के लिए उपयोग किया जाना शुरू हुआ। हालांकि, नियंत्रण इंटरफेस को लागू करने की कार्यप्रणाली तदर्थ थी, और / खरीद जल्द ही एक उलझी हुई गंदगी में बदल गई।

इस गड़बड़ी में संरचना को जोड़ने और कर्नेल से उपयोगकर्ता-स्थान के लिए सिस्टम की जानकारी और नियंत्रण बिंदु (सेवेबल सिस्टम और ड्राइवर विशेषताओं) को उजागर करने के लिए एक समान तरीका प्रदान करने के लिए sysfs (या / sys फाइलसिस्टम) को डिज़ाइन किया गया था। अब, कर्नेल में चालक ढांचा स्वचालित रूप से / sys के तहत निर्देशिका बनाता है, जब चालक पंजीकृत होते हैं, चालक प्रकार और उनके डेटा संरचनाओं में मान के आधार पर। इसका मतलब यह है कि एक विशेष प्रकार के ड्राइवरों में सभी समान तत्व होंगे जो sysfs के माध्यम से उजागर होंगे।

विरासत प्रणाली की जानकारी और नियंत्रण बिंदुओं में से कई अभी भी / खरीद में सुलभ हैं, लेकिन सभी नए busses और ड्राइवरों को sysfs के माध्यम से अपनी जानकारी और नियंत्रण बिंदुओं को उजागर करना चाहिए।


8
एक कारण यह है कि इसका उपयोग करने के लिए "खराब रूप" है /dev/memऔर /dev/kmemयह है कि उन्हें रूट एक्सेस की आवश्यकता होती है, इसलिए जो एप्लिकेशन उनका उपयोग करते हैं उन्हें सेट करना होगा।
Barmar

2
कई यूनिक्स प्रणालियों और लिनक्स पर उन डिवाइस फ़ाइलों को समूह द्वारा स्वामित्व में रखा गया है kmem, और जैसे उपकरण psSGID हैं kmem
प्रतिमा

2
वास्तव में, कर्नेल के लिए सीधे एक्सेस करने की पुरानी विधि तेज थी /dev/memया /dev/kmemइसलिए क्योंकि उपयोगकर्ता मोड प्रक्रिया केवल mmapफ़ाइल पढ़ सकती है और रैम पढ़कर सभी जानकारी प्राप्त कर सकती है । /procफाइलसिस्टम से किसी भी जानकारी को प्राप्त करने के लिए एक syscall की आवश्यकता होती है openऔर दूसरे के लिए readयह बहुत धीमी होती है। हालांकि, /procमेमोरी को पढ़ने के लिए कर्नेल विशिष्ट हैक्स की आवश्यकता नहीं होती है और उपयोगकर्ता मोड प्रक्रियाओं के लिए बहुत कम संवेदनशील डेटा को उजागर करता है।
मिको रानाल्टेन ने

10

procfs मनमाना अनुमति देता है file_operations, sysfs अधिक प्रतिबंधित है


3

sysfs, डिवाइस की जानकारी दिखाने के लिए 2.6 कर्नेल रिलीज चक्र के दौरान बनाया गया वर्चुअल फाइलसिस्टम है क्योंकि इस प्रकार की सूचनाओं को procfs ने अच्छी तरह से नहीं किया है।

मेमोरी आदि को sysfs में पोर्ट नहीं किया गया है क्योंकि यह उस प्रकार की जानकारी को दिखाने के लिए कभी नहीं था, इसलिए यह संभावना नहीं है कि इसे सभी पर पोर्ट किया जाएगा।


मेमोरी आदि को sysfs में पोर्ट नहीं किया गया है। पोर्टिंग से आपका क्या मतलब है? और उस प्रकार की जानकारी दिखाने का इरादा क्यों नहीं था? क्या आप मुझे समझा सकते हैं।
सेन

पोर्ट किए गए से मेरा मतलब था कि यदि मेमोरी वगैरह आपके प्रश्न का उत्तर था तो उसे sysfs में ले जाया जाएगा। और यह केवल डिवाइस की जानकारी दिखाने के लिए ही किया गया था क्योंकि यह वह चीज थी जो खरीद अच्छी तरह से नहीं करती थी, फिर भी अन्य प्रकार की जानकारी के लिए procfs उत्कृष्ट है।
kemra102

1

जैसा कि मैं यहां भी जोड़ना चाहता हूं ... जैसा कि / पुराने संस्करण में यह पुराने समय की कर्नेल डिवाइस की जानकारी सम्‍मिलित है..जैसे sysfs 2.6 कर्नेल संस्करण के साथ आया था, इसलिए डिवाइस ड्राइवर जानकारी उनकी अपनी निर्देशिका बनाता है जिसके द्वारा यह होता है थोड़ा संरचित और उपयोग करने में आसान ।।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.