Apakah tabel file di sistem file atau di memori?

9

Dalam konteks tabel kontrol sistem operasi, apakah istilah "tabel file" merujuk pada struktur data yang merupakan bagian dari sistem file, atau yang ada di memori utama (dan dalam hal ini saya berasumsi hanya memiliki referensi untuk membuka file) ? Buku teks 1 saya mengatakan,

Tabel menyediakan informasi tentang keberadaan file, lokasinya pada memori sekunder, status saat ini, dan atribut lainnya. Banyak, jika tidak semua, informasi ini dapat dipertahankan dan digunakan oleh sistem manajemen file, dalam hal ini OS memiliki sedikit atau tidak ada pengetahuan tentang file.

Juga, apa itu sistem manajemen file? Apakah itu berarti sistem file?

1 Stallings, Sistem Operasi , edisi ke- 7 , hal. 127

Kazark
sumber

Jawaban:

22

Tidak jelas tanpa konteks lebih lanjut untuk menentukan apakah Stalling berbicara tentang tabel inode di-memori atau tabel dengan di sistem file. Saya meminjamkan buku edisi yang jauh lebih awal kepada seseorang, tetapi tidak pernah mendapatkannya kembali; jadi saya tidak bisa melihat konteksnya sendiri.

Ada tiga "tabel file", tetapi yang sedang dibahas di sini lebih sering disebut " inode memory table "; yang kedua biasanya disebut " tabel file terbuka ", dan ada per proses. Kedua tabel berada dalam memori kernel dan tidak dapat diakses oleh suatu program. "Tabel" ketiga adalah benar-benar dua set tabel dalam sistem file (pada disk), yang pertama adalah tabel in-disk pada disk dan yang kedua adalah blok data itu sendiri (catatan: diskusi ini menyangkut manajemen sistem file UNIX tradisional, sistem yang lebih baru dapat punya organisasi yang berbeda). Entri dalam tabel inode memiliki urutan referensi ke dalam blok data yang berisi baik blok referensi tidak langsung atau data aktual. Kunci filepada filesystem adalah inode, bukan blok data itu sendiri. Ketika Stalling berbicara tentang "tabel file" pada disk, "itu biasanya akan menjadi tabel" lebih kecil "pada disk yang menunjukkan file, seperti tabel inode atau tabel definisi blok dalam sistem FAT.

Dalam hal tabel inode di-memori, inode diambil dari sistem file, nilai st_nlink-nya bertambah dan kemudian dapat diakses oleh seluruh sistem, ketika data inode ditulis ke disk, st_ctime diperbarui. Jika inode tidak lagi diperlukan dalam memori, nilai st_nlink dikurangi dan entri dalam tabel ditandai sebagai bebas. Setiap proses akan mulai dengan referensi untuk sekitar tiga atau lima entri ke dalam inode table di memori: inode dari stdin, stdout, stderr- ini sering file perangkat (tty) - dan kemudian referensi ke direktori saat ini dan direktori root. Sebuah inode hanya akan berada di tabel sekali, jadi mungkin ada beberapa referensi ke satu inode dalam tabel.

Tabel file terbuka disimpan per proses dan berisi referensi ke dalam tabel inode di-memori serta pointer ke buffer, dan nyatakan informasi (seperti fseek(2)nilai dan flag dari open(2). Deskriptor file secara harfiah adalah indeks ke dalam tabel file terbuka; tetapi sebagian besar orang merujuk pada entri di tabel file terbuka ketika berbicara tentang "file descriptor".

Ketika file dibuka menggunakan open(2), entri yang tersedia di tabel file terbuka ditemukan, inode dari referensi file oleh pathname ditentukan, bahwa inode dimuat ke dalam tabel inode di-memori, jika belum dimuat, jumlah st_nlink dihitung ditingkatkan dan entri inode direferensikan dalam deskriptor file, flag ditetapkan dan buffer dialokasikan. Ketika ditutup, terjadi kebalikannya.

Rutinitas dalam kernel disebut " sistem manajemen file " dan " sistem file " adalah organisasi pada disk. Saat ini ada sejumlah modul 'plugable' yang dapat dimuat ( modprobe(8)) ke dalam sistem manajemen file untuk berbagai organisasi pada disk. Sebagai contoh, ada tipe sistem file ext2 / ext3 / ext4, dan masing-masing memiliki modul yang berbeda dalam sistem manajemen file kernel; sama dengan ntfs, sbfs, nfs, vfat, jfs, dll.

Ini sedikit lebih panjang daripada yang saya maksudkan, jadi saya akan berhenti di sini.

Arcege
sumber
Ini jawaban yang sangat bagus.
Kazark
Ya, tolong jangan hentikan diri Anda ketika Anda memberikan jawaban yang begitu baik dan komprehensif.
Lizardx