यह निर्धारित करने के लिए आगे के संदर्भ के बिना अस्पष्ट है कि क्या स्टालिंग इन-मेमोरी इनोड टेबल या फाइलसिस्टम के साथ तालिकाओं के बारे में बात कर रहा है। मैंने किसी को पुस्तक का बहुत पुराना संस्करण दिया, लेकिन उसे कभी वापस नहीं लिया; इसलिए मैं खुद इस संदर्भ को नहीं देख सकता।
तीन "फाइल टेबल" हैं, लेकिन यहां जिस पर चर्चा की जा रही है, उसे आमतौर पर " इन-मेमोरी इनोड टेबल " कहा जाता है; दूसरे को आमतौर पर " ओपन फाइल टेबल " कहा जाता है , और प्रति प्रक्रिया मौजूद है। दोनों तालिकाएँ कर्नेल मेमोरी में हैं और किसी प्रोग्राम के लिए पहुँच योग्य नहीं हैं। तीसरा "टेबल" वास्तव में फाइलसिस्टम (डिस्क पर) के भीतर तालिकाओं के दो सेट हैं, पहला ऑन-डिस्क इनोड टेबल है और दूसरा डेटा ब्लॉक स्वयं हैं (नोट: यह चर्चा पारंपरिक यूनिक्स फाइलसिस्टम प्रबंधन, नई प्रणालियों की चिंता कर सकती है) अलग-अलग संगठन हैं)। इनकोड तालिका में प्रविष्टियों के डेटा ब्लॉक में उन संदर्भों के अनुक्रम होते हैं जिनमें अप्रत्यक्ष संदर्भ ब्लॉक या वास्तविक डेटा होते हैं। एक फ़ाइल की कुंजीफाइलसिस्टम इनोड है, न कि डेटा स्वयं को ब्लॉक करता है। जब स्टालिंग ऑन-डिस्क "फाइल टेबल" के बारे में बात कर रहा है, तो यह आम तौर पर डिस्क पर "छोटा" टेबल होगा जो फ़ाइलों को दर्शाता है, जैसे कि इनोड टेबल या एफएटी सिस्टम में ब्लॉक डेफिनेशन टेबल।
इन-मेमोरी टेबल के संदर्भ में, इनोड को फाइल सिस्टम से लोड किया जाता है, इसके st_nlink मान को बढ़ाया जाता है और फिर सिस्टम के बाकी हिस्सों में पहुंच योग्य बनाया जाता है, जब इनोड डेटा को डिस्क पर लिखा जाता है, तो st_ctime अपडेट किया जाता है। यदि इनकोड की स्मृति में आवश्यकता नहीं है, तो st_nlink मान को घटा दिया जाता है और तालिका में प्रविष्टि को निःशुल्क चिह्नित किया जाता है। प्रत्येक प्रक्रिया इन-मेमोरी इनोड टेबल में लगभग तीन या पाँच प्रविष्टियों के संदर्भों के साथ शुरू होगी: इन-ऑफ stdin
, इन stdout
, stderr
- ये अक्सर एक डिवाइस फ़ाइल (ट्टी) होती हैं - और फिर वर्तमान निर्देशिका और रूट निर्देशिका के संदर्भ में। एक इनोड केवल एक बार तालिका में रहता है, इसलिए तालिका में एक एकल इनोड के कई संदर्भ हो सकते हैं।
खुली हुई फ़ाइल तालिका को प्रति प्रक्रिया में रखा जाता है और इसमें इन-मेमोरी इनोड टेबल के साथ-साथ बफ़र्स को पॉइंटर्स और राज्य सूचना (जैसे fseek(2)
मान और फ़्लैग से संदर्भ) शामिल होते हैं open(2)
। फ़ाइल डिस्क्रिप्टर का शाब्दिक अर्थ है ओपन फ़ाइल टेबल में एक इंडेक्स; लेकिन; लोग "फ़ाइल डिस्क्रिप्टर" के बारे में बात करते समय खुली फ़ाइल तालिका में प्रविष्टि का उल्लेख करते हैं।
जब फ़ाइल का उपयोग करके खोला जाता है open(2)
, तो खुली फ़ाइल तालिका में एक उपलब्ध प्रविष्टि पाई जाती है, पथनाम द्वारा फ़ाइल संदर्भ का इनोड निर्धारित किया जाता है, कि इनोड को इन-मेमोरी इनोड टेबल में लोड किया जाता है, यदि पहले से लोड नहीं है, तो st_nlink गिनती को बढ़ाया जाता है और फाइल डिस्क्रिप्टर में इनोड एंट्री को संदर्भित किया जाता है, झंडे लगाए जाते हैं और बफ़र आवंटित किए जाते हैं। बंद होने पर, रिवर्स होता है।
गिरी भीतर दिनचर्या "कहा जाता है फ़ाइल प्रबंधन प्रणाली " और " फाइल सिस्टम " डिस्क पर संगठन है। इन दिनों modprobe(8)
डिस्क पर विभिन्न संगठनों के लिए फ़ाइल प्रबंधन प्रणाली में लोड किए जा सकने वाले 'प्लगेबल' मॉड्यूल हैं । उदाहरण के लिए, ext2 / ext3 / ext4 फाइलसिस्टम प्रकार हैं, और उनमें से प्रत्येक के कर्नेल फ़ाइल प्रबंधन प्रणाली में एक अलग मॉड्यूल है; ntfs, sbfs, nfs, vfat, jfs, आदि के साथ भी ऐसा ही है।
यह मूल रूप से इच्छित की तुलना में थोड़ा अधिक लंबा है, इसलिए मैं यहां रुकूंगा।