เป็นตารางไฟล์ในระบบไฟล์หรือในหน่วยความจำหรือไม่?


9

ในบริบทของตารางควบคุมระบบปฏิบัติการคำว่า "ตารางไฟล์" อ้างถึงโครงสร้างข้อมูลที่เป็นส่วนหนึ่งของระบบไฟล์หรือที่อยู่ในหน่วยความจำหลัก (และในกรณีที่ฉันถือว่ามันจะมีการอ้างอิงไฟล์ที่เปิดเท่านั้น) ? หนังสือเรียนของฉัน1บอกว่า

ตารางจัดเตรียมข้อมูลเกี่ยวกับการมีอยู่ของไฟล์ตำแหน่งของพวกเขาในหน่วยความจำรองสถานะปัจจุบันและคุณลักษณะอื่น ๆ ข้อมูลนี้อาจได้รับการดูแลรักษาและใช้งานโดยระบบจัดการไฟล์เป็นจำนวนมากซึ่งในกรณีนี้ระบบปฏิบัติการมีความรู้เกี่ยวกับไฟล์เพียงเล็กน้อยหรือไม่มีเลย

นอกจากนี้ระบบจัดการไฟล์คืออะไร? นั่นหมายความว่าระบบไฟล์หรือไม่

1 Stallings, ระบบปฏิบัติการ , 7 th ed., p. 127

คำตอบ:


22

ไม่ชัดเจนโดยไม่มีบริบทเพิ่มเติมเพื่อพิจารณาว่า Stalling กำลังพูดถึงตาราง inode ในหน่วยความจำหรือตารางที่มีในระบบไฟล์ ฉันยืมหนังสือรุ่นก่อนหน้านี้มาให้กับใครบางคน แต่ไม่ได้รับคืน ดังนั้นฉันไม่สามารถค้นหาบริบทด้วยตนเอง

มีสามตารางไฟล์ "แต่ตารางที่กล่าวถึงที่นี่มักเรียกกันว่า" inode memory inode table "; ที่สองเรียกว่า " open file table " และมีอยู่ต่อกระบวนการ ตารางทั้งสองอยู่ในหน่วยความจำเคอร์เนลและไม่สามารถเข้าถึงโปรแกรมได้ "ตาราง" ที่สามเป็นตารางสองชุดภายในระบบแฟ้ม (บนดิสก์) ชุดแรกคือตาราง inode บนดิสก์และชุดที่สองเป็นตัวบล็อกข้อมูล (หมายเหตุ: การสนทนานี้เกี่ยวข้องกับการจัดการระบบไฟล์ UNIX แบบดั้งเดิมระบบใหม่สามารถ มีองค์กรต่าง ๆ ) รายการในตาราง inode มีลำดับของการอ้างอิงในบล็อกข้อมูลที่มีบล็อกอ้างอิงทางอ้อมหรือข้อมูลจริง กุญแจสำคัญในการไฟล์บนระบบไฟล์เป็น inode ไม่ใช่บล็อกข้อมูล เมื่อ Stalling กำลังพูดถึงตารางไฟล์ "บนดิสก์" โดยทั่วไปจะเป็นตาราง "เล็กกว่า" บนดิสก์ที่ระบุถึงไฟล์เช่นตาราง inode หรือตารางนิยาม block ในระบบ FAT

ในแง่ของตาราง inode ในหน่วยความจำ inode จะถูกโหลดจากระบบไฟล์ค่า st_nlink ของมันจะเพิ่มขึ้นและทำให้เข้าถึงส่วนที่เหลือของระบบเมื่อข้อมูล inode ถูกเขียนไปยังดิสก์ st_ctime จะถูกอัพเดต หากไม่จำเป็นต้องใช้ไอโหนดในหน่วยความจำอีกต่อไปค่า st_nlink จะลดลงและรายการในตารางจะถูกทำเครื่องหมายว่าว่าง ทุกขั้นตอนจะเริ่มต้นด้วยการอ้างอิงถึงประมาณสามหรือห้ารายการลงในหน่วยความจำในตาราง inode: inodes ของstdin, stdout, stderr- เหล่านี้มักจะเป็นแฟ้มอุปกรณ์ (TTY) - แล้วการอ้างอิงไปยังไดเรกทอรีปัจจุบันและไดเรกทอรีราก ไอโหนดจะอยู่ในตารางเพียงครั้งเดียวดังนั้นอาจมีการอ้างอิงหลายไอเท็มกับไอโหนดเดี่ยวในตาราง

ตารางไฟล์เปิดถูกเก็บไว้ต่อกระบวนการและมีการอ้างอิงลงในตาราง inode ในหน่วยความจำเช่นเดียวกับตัวชี้ไปยังบัฟเฟอร์และข้อมูลสถานะ (เช่นfseek(2)ค่าและธงจากopen(2)ตัวบ่งชี้ไฟล์เป็นดัชนีแท้จริงลงในตารางไฟล์เปิด แต่ส่วนใหญ่ ผู้คนอ้างถึงรายการในตารางไฟล์เปิดเมื่อพูดถึง "file descriptor"

เมื่อเปิดไฟล์โดยใช้open(2)จะพบรายการที่มีอยู่ในตารางเปิดไฟล์ inode ของการอ้างอิงไฟล์โดยชื่อพา ธ ถูกกำหนด, inode นั้นจะถูกโหลดลงในตาราง inode ของหน่วยความจำหากยังไม่ได้โหลดนับ st_nlink ถูกเพิ่มและรายการ inode ถูกอ้างอิงใน file descriptor แฟล็กถูกตั้งค่าและบัฟเฟอร์ถูกจัดสรร เมื่อปิดแล้วจะเกิดการย้อนกลับ

รูทีนภายในเคอร์เนลเรียกว่า " ระบบการจัดการไฟล์ " และ " ระบบไฟล์ " เป็นองค์กรบนดิสก์ วันนี้มีจำนวนโมดูล 'plugable' ที่สามารถโหลดได้ ( modprobe(8)) ลงในระบบการจัดการไฟล์สำหรับองค์กรต่าง ๆ บนดิสก์ ตัวอย่างเช่นมีประเภทระบบไฟล์ ext2 / ext3 / ext4 และแต่ละชนิดมีโมดูลที่แตกต่างกันในระบบจัดการไฟล์ของเคอร์เนล เหมือนกันกับ ntfs, sbfs, nfs, vfat, jfs ฯลฯ

นี่เป็นลมที่ยืดยาวกว่าที่ฉันตั้งใจไว้เล็กน้อยดังนั้นฉันจะหยุดที่นี่


นี่เป็นคำตอบที่ดีอย่างเหลือเชื่อ
Kazark

ใช่โปรดอย่าหยุดตัวเองเมื่อคุณให้คำตอบที่ดีและครอบคลุม
Lizardx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.