प्रमुख, मामूली संख्या अद्वितीय हैं


11

क्या major, minorनंबर यूनिक हैं?

क्या हमारे पास इसका कोई उद्धरण और संदर्भ है?

NAME   MAJ:MIN RM   SIZE RO MOUNTPOINT
sda      8:0    0 465.8G  0 
├─sda1   8:1    0 298.2M  0 
├─sda2   8:2    0     3G  0 
├─sda3   8:3    0 458.7G  0 /
├─sda4   8:4    0     1K  0 
└─sda5   8:5    0   3.8G  0 
sr0     11:0    1  1024M  0 

मेजर हार्डवेयर है, माइनर प्रमुख हार्डवेयर का सब डिवीजन है
किवी

जवाबों:


20

से लिनक्स प्रोग्रामिंग इंटरफेस , §14.1

प्रत्येक डिवाइस फ़ाइल में एक प्रमुख आईडी नंबर और एक मामूली आईडी नंबर होता है। प्रमुख आईडी डिवाइस के सामान्य वर्ग की पहचान करता है, और इस प्रकार के डिवाइस के लिए उपयुक्त ड्राइवर को देखने के लिए कर्नेल द्वारा उपयोग किया जाता है। मामूली आईडी विशिष्ट रूप से एक सामान्य वर्ग के भीतर एक विशेष उपकरण की पहचान करती है। डिवाइस फ़ाइल की प्रमुख और मामूली आईडी को ls -l कमांड द्वारा प्रदर्शित किया जाता है।

[...]

प्रत्येक डिवाइस ड्राइवर एक विशिष्ट प्रमुख डिवाइस आईडी के साथ अपने जुड़ाव को पंजीकृत करता है, और यह एसोसिएशन डिवाइस विशेष फ़ाइल और डिवाइस के बीच संबंध प्रदान करता है। डिवाइस फ़ाइल का नाम कोई प्रासंगिकता नहीं है जब डिवाइस ड्राइवर के लिए कर्नेल दिखता है।

इस पुराने (2001) लिनक्स डिवाइस ड्राइवर्स (2e) अध्याय को भी देखें

इसका मतलब यह है कि डिवाइस के लिए प्रमुख: नाबालिग का एक अनूठा मानचित्रण प्रदान करना है: प्रत्येक प्रकार के उपकरण के लिए उदाहरण। सख्ती से, आपके पास एक ही प्रमुख के साथ दो अलग-अलग डिवाइस हो सकते हैं: नाबालिग, जब तक कि एक चार है और एक ब्लॉक है:

# ls -l /dev/ram1 /dev/mem
crw-r----- 1 root kmem 1, 1 Jan  1  1970 /dev/mem
brw-rw---- 1 root disk 1, 1 Jan  1  1970 /dev/ram1

लिनक्स पर, किसी भी समय एक सिस्टम पर प्रमुख: प्रत्येक प्रकार के डिवाइस के लिए छोटी संख्या अद्वितीय है। हालाँकि समय के साथ संख्या में परिवर्तन हो सकता है, और विभिन्न लिनक्स सिस्टम (समान वितरण, कर्नेल और हार्डवेयर) पर समान नहीं होना चाहिए। ध्यान दें कि चरित्र और ब्लॉक डिवाइसेस में अलग-अलग नंबरिंग स्पेस होते हैं, उदाहरण के लिए, ब्लॉक प्रमुख 1 को रैम डिस्क को सौंपा गया है, चार्ट प्रमुख 1 को कर्ल डिवाइस के एक सेट को सौंपा गया है जिसमें नल और शून्य शामिल हैं।

ऐतिहासिक रूप से डिवाइस की बड़ी मात्राएं (ज्यादातर) एक रजिस्ट्री के माध्यम से सांख्यिकीय रूप से आवंटित की गईं ( अभी भी मौजूद हैं, हालांकि अस्वाभाविक, कर्नेल स्रोत में Documentation/devices.txt)। इन दिनों कई उपकरणों को गतिशील रूप से आवंटित किया जाता है , यह udev द्वारा प्रबंधित किया जाता है , और मैपिंग देखने योग्य है /proc/devices। फिक्स्ड डिवाइस अभी भी मौजूद हैं incude/uapi/linux/major.h(हाल ही में स्थानांतरित include/major.h)

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

एक आम उपयोग एक शून्य, शून्य और यादृच्छिक उपकरणों को क्रियोट में बना रहा है:

# find /dev /var/chroot -regextype posix-extended -regex ".*/(zero|null|random)" -type c | 
xargs ls -l
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /dev/zero
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /var/chroot/sendmail/dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /var/chroot/sendmail/dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /var/chroot/sendmail/dev/zero

नाम सिर्फ उपनाम हैं, कर्नेल ज्यादातर नामों या स्थानों के बारे में ज्यादा परवाह नहीं करता है, यह प्रमुख संख्या के बारे में परवाह करता है ताकि यह सही ड्राइवर का चयन कर सके, और चालक (आमतौर पर) मामूली संख्या के बारे में परवाह करता है, इसलिए यह चयन कर सकता है सही उदाहरण।

अधिकांश नाम केवल सम्मेलन हैं (हालांकि कुछ POSIX द्वारा परिभाषित हैं )। यह भी ध्यान दें कि एक उपकरण कई प्रमुख नंबरों के लिए पंजीकरण कर सकता है, sdड्राइवर की जांच कर सकता है /proc/devices; ड्राइवर मॉड्यूल नाम ( .ko) को डिवाइस नाम के समान नहीं होना चाहिए /dev, और डिवाइस नोड के रूप में समान नहीं होना चाहिए और एक ड्राइवर मॉड्यूल कई तार्किक / भौतिक उपकरणों या डिवाइस नामों का प्रबंधन कर सकता है।


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

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


कुछ रोचक इतिहास को अपडेट करें और कुछ * बीएसडी परिप्रेक्ष्य को पौल -हेनिंग काम्प की 2002 BSDCon प्रस्तुति में पाया जा सकता है : https://www.usenix.org/legacy/events/bsdcon/full_papers/kamp/kamp_html/

यदि आप 1978 के समय में वापस आते हैं (अल्काटेल-ल्यूसेंट के सौजन्य से, बेल सिस्टम तकनीकी जर्नल जूल -अगस्त 1978) ' यूनिक्स टाइम शेयरिंग सिस्टम ' इसे स्पष्ट रूप से सेट करता है (p1937):

डिवाइस एक प्रमुख डिवाइस नंबर, एक मामूली डिवाइस नंबर, और एक वर्ग (ब्लॉक या चरित्र) की विशेषता है। प्रत्येक वर्ग के लिए, डिवाइस ड्राइवरों में प्रवेश बिंदुओं की एक सरणी होती है। किसी विशेष डिवाइस ड्राइवर के लिए कोड को कॉल करते समय सरणी को अनुक्रमित करने के लिए प्रमुख डिवाइस नंबर का उपयोग किया जाता है। मामूली डिवाइस नंबर को तर्क के रूप में डिवाइस ड्राइवर को दिया जाता है। नाबालिग संख्या का इसके अलावा कोई महत्व नहीं है कि इसके लिए चालक द्वारा जिम्मेदार ठहराया गया है। आमतौर पर, चालक कई समान भौतिक उपकरणों में से एक का उपयोग करने के लिए मामूली संख्या का उपयोग करता है।


तो क्या हमारे पास एक ही जोड़ी या MAJ:Minसंख्या के साथ दो उपकरण हो सकते हैं
डिपैक इंगोले

1
हाँ, बाधाओं के साथ। अपडेट किया गया।
mr.spuratic

2

जब एक डिवाइस फ़ाइल द्वारा बनाई जाती है mknode, majorऔर minorनंबर की आपूर्ति की जाती है। ये कैसे लिनक्स एक डिवाइस फ़ाइल के साथ जुड़े अंतर्निहित हार्डवेयर डिवाइस की पहचान करता है। ज्यादातर मामलों में वे majorसंख्या को चालक की पहचान करते हैं, जबकि minorचालक द्वारा नियंत्रित विभिन्न उपकरणों को अलग करता है।

जैसे कि संख्या प्रत्येक डिवाइस के लिए अद्वितीय होनी चाहिए या उन सभी के लिए सही डिवाइस फ़ाइलें बनाना संभव नहीं होगा।


0

नहीं, लिनक्स पर वे हमेशा अद्वितीय नहीं होते हैं।

लिनक्स devptspseudoterminals (ptys) प्रदान करने के लिए एक वर्चुअल फाइल सिस्टम का उपयोग कर रहा है , और यह कि वर्चुअल फाइलसिस्टम को एक से अधिक बार और अलग-अलग स्थानों पर लगाया जा सकता है, जो कि चेरोट्स या नेमस्पेस कंटेनर सेट करते समय व्यावहारिक होता है। जबकि major:minorट्यूल devptsसिस्टम फ़ाइल सिस्टम उदाहरण पर अद्वितीय है , यह एक रनिंग सिस्टम पर अद्वितीय नहीं है:

# mount -t devpts devpts /dev/pts
# script -q /dev/null
# stat -c '%n %t:%T   %d:%i' `tty`
/dev/pts/0 88:0   34:3
# mount -t devpts devpts /dev/pts
# script -q /dev/null
# stat -c '%n %t:%T   %d:%i' `tty`
/dev/pts/0 88:0   35:3

ऊपर के उदाहरण में, script(1)कमांड एक छद्म टर्मिनल बनाता है और इसके अंदर एक शेल चलाता है। यह स्पष्ट है कि पहली scriptप्रक्रिया द्वारा बनाया गया छद्म-टर्मिनल वैसा नहीं है जैसा कि दूसरे द्वारा बनाया गया है, फिर भी उनके पास एक ही नाम और प्रमुख, छोटी संख्या है।

विशिष्ट रूप से एक स्यूडोटर्मिनल की पहचान करने के लिए, आपको उनके device:inodeटपल का उपयोग करने की आवश्यकता होती है , या उनके साथ डिवाइस नंबर (डेविस फाइलसिस्टम के) को संयोजित करने की आवश्यकता होती है major:minor। समस्या यह है कि /proc/PID/stat(7 वें नंबर के "tty" फ़ील्ड , proc(5)मैनपेज को देखें ; यह वह जगह है जहाँ उपकरण जैसे lsofया psअपनी जानकारी प्राप्त करते हैं) में केवल st_rdevtty (पैक्ड major:minor) शामिल होता है; अगर यह एक पिटी गुलाम है, तो devptsफाइलसिस्टम के लिए कोई संकेत नहीं है जो इसे प्रदान करता है। समान समस्याएं TIOCGDEVioctl के साथ प्राप्य डिवाइस नंबर को प्रभावित करती हैं ।

AFAICS लिनक्स पर एक प्रक्रिया के नियंत्रण टर्मिनल की पहचान करने के लिए कोई विश्वसनीय तरीका नहीं है। सुधार और सुझाव अन्यथा स्वागत है!

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