Pembuatan Proses Dan Thread
Linux menggunakan representasi yang sama untuk proses dan thread.
Secara sederhana thread dapat dikatakan sebuah proses baru yang
berbagi alamat yang sama dengan induknya. Perbedaannnya terletak
pada saat pembuatannya. Thread baru dibuat dengan system call
clone yang membuat proses baru dengan identitas sendiri, namun
diizinkan untuk berbagi struktur data dengan induknya.
Secara tradisional, sumber daya yang dimiliki oleh proses induk
akan diduplikasi ketika membuat proses anak. Penyalinan ruang
alamat ini berjalan lambat, sehingga untuk mengatasinya, salinan
hanya dibuat ketika salah satu dari mereka hendak menulis di
alamat tersebut. Selain itu, ketika mereka akan berbagi alamat
tersebut ketika mereka hanya membaca. Inilah proses ringan yang
dikenal juga dengan thread.
Thread dibuat dengan __clone(). __clone() merupakan rutin dari
library system call clone(). __clone memiliki 4 buah argumen yaitu:
*
fn
fungsi yang akan dieksekusi oleh thread baru
*
arg
pointer ke data yang dibawa oleh fn
*
flags
sinyal yang dikirim ke induk ketika anak berakhir dan
pembagian sumber daya antara anak dan induk.
*
child_stack
pointer stack untuk proses anak.
clone() mengambil argumen flags dan child_stack yang dimiliki oleh __clone
kemudian menentukan id dari proses anak yang akan mengeksekusi
fn dengan argumen arg.
Pembuatan anak proses dapat dilakukan dengan fungsi fork() dan vfork().
Implementasi fork() sama seperti system call clone() dengan sighandler
SIGCHLD di-set, semua bendera clone di-clear yang berarti tidak ada
sharing dan child_stack dibuat 0 yang berarti kernel akan membuat stack
untuk anak saat hendak menulis. Sedangkan vfork() sama seperti fork()
dengan tambahan bendera CLONE_VM dan CLONE_VFORK di-set. Dengan vfork(),
induk dan anak akan berbagi alamat, dan induk akan di-block hingga
anak selesai.
Untuk memulai pembuatan proses baru, clone() akan memanggil fungsi do_fork().
Hal yang dilakukan oleh do_fork() antara lain:
*
memanggil alloc_task_struct() yang akan menyediakan tempat di memori
dengan ukuran 8KB untuk deskriptor proses dan stack modus kernel.
*
memeriksa ketersediaan sumber daya untuk membuat proses baru.
*
find_empty_procees() memanggil get_free_taskslot() untuk mencari
sebuah slot di array task untuk pointer ke deskriptor proses yang baru.
*
memanggil copy_files/fm/sighand/mm() untuk menyalin sumber daya untuk
anak, berdasarkan nilai flags yang ditentukan clone().
*
copy_thread() akan menginisialisasi stack kernel dari proses anak.
*
mendapatkan PID baru untuk anak yang akan diberikan kembali
ke induknya ketika do_fork() selesai.
Beberapa proses sistem hanya berjalan dalam modus kernel di belakang layar.
Untuk proses semacam ini dapat digunakan thread kernel. Thread kernel hanya
akan mengeksekusi fungsi kernel, yaitu fungsi yang biasanya dipanggil oleh
proses normal melalui system calls. Thread kernel juga hanya dieksekusi dalam
modus kernel, berbeda dengan proses biasa. Alamat linier yang digunakan oleh
thread kernel lebih besar dari PAGE_OFFSET proses normal yang dapat berukuran
hingga 4GB. Thread kernel dibuat sebagai berikut: int kernel_thread(int (*fn) (void *),
void *arg, unsigned long flags); flags=CLONE_SIGHAND, CLONE_FILES, etc
Guna keperluan manajemen proses, kernel memelihara informasi tentang
setiap proses di sebuah deskriptor proses dengan tipe task_struct.
Setiap deskriptor proses mengandung informasi antara lain
status proses, ruang alamat, daftar berkas yang dibuka,
prioritas proses, dan sebagainya. Berikut gambaran isinya:
Isi deskriptor proses :
struct task_struct{
volatile long state;
/*-1 unrunnable,
0 runnable,
>0 stopped*/
unsigned long flags;
/* 1 untuk setiap flag proses */
mm_segment_t_addr_limit;
/* ruang alamat untuk thread */
struct exec_domain *exec_domain;
long need_resched;
long counter;
long priority;
/* SMP and runqueue state */
struct task_struct *next_task, *prev_task;
struct task_struct *next_run, *prev_run;
...
/* task state */
/* limits */
/* file system info */
/* ipc stuff */
/* tss for this task */
/* filesystem information */
/* open file information */
/* memory management info */
/* signal handlers */
...
};
Setiap proses di Linux memiliki status. Status proses merupakan array dari
flag yang mutually exclusive. Setiap proses memiliki tepat satu keadaan
(status) pada suatu waktu. Status tersebut adalah:
*
TASK_RUNNING
Pada status ini, proses sedang ataupun siap dieksekusi oleh CPU.
*
TASK_INTERRUPTIBLE
Pada status ini, proses sedang menunggu sebuah kondisi. Interupsi,
sinyal, ataupun pelepasan sumber daya akan membangunkan proses.
*
TASK_UNINTERRUPTIBLE
Pada status ini, proses sedang tidur dan tidak dapat dibangunkan
oleh suatu sinyal.
*
TASK_STOPPED
Pada status ini proses sedang dihentikan, misalnya oleh sebuah debugger.
*
TASK_ZOMBIE
Pada status ini proses telah berhenti, namun masih memiliki struktur
data task_struct di task vector dan masih memegang sumber daya yang sudah
tidak digunakan lagi.
Setiap proses ataupun eksekusi yang terjadwal secara independen memiliki
deskriptor prosesnya sendiri. Alamat dari deskriptor proses digunakan
untuk mengindentifikasi proses. Selain itu, nomor ID proses (PIDs) juga
digunakan untuk keperluan tersebut. PIDs adalah 32-bit bilangan yang
mengidentifikasikan setiap proses dengan unik. Linux membatasi PIDs
berkisar 0-32767 untuk menjamin kompatibilitas dengan sistem UNIX
tradisional.
Karena proses merupakan sesuatu yang dinamis, maka deskriptor proses
disimpan dalam memori yang dinamis pula. Untuk itu dialokasikan juga
memori sebesar 8KB untuk setiap proses untuk menyimpan proses deskriptornya
dan stack proses dari modus kernel. Keuntungan dari dal ini adalah pointer
dari deskriptor proses dari proses yang sedang berjalan (running) dapat
diakses dengan cepat menggunakan stack pointer. Selain itu,
8KB (EXTRA_TASK_STRUCT) dari memori akan di-cache untuk mem-bypass
pengalokasi memori kernel ketika sebuah proses dihapus dan sebuah proses
baru dibuat. Kedua perintah free_task_struct() dan alloc_task_struct()
akan digunakan untuk melepaskan atau mengalokasikan memori
seukuran 8KB sebagai cache.
Deskriptor proses juga membangun sebuah daftar proses dari semua proses
yang ada di sistem. Daftar proses tersebut merupakan sebuah doubly-linked
list yang dibangun oleh bagian next_task dan prev_task dari deskriptor
proses. Deskriptor init_task(mis:swapper) berada di awal daftar tersebut
dengan prev_task-nya menunjuk ke deskriptor proses yang paling akhir
masuk dalam daftar. Sedangkan makro for_each_task() digunakan untuk
memindai seluruh daftar.
Proses yang dijadwalkan untuk dieksekusi dari doubly-linked list dari
proses dengan status TASK_RUNNING disebut runqueue. Bagian prev_run dan
next_run dari deskriptor proses digunakan untuk membangun runqueue,
dengan init_task mengawali daftar tersebut. Sedangkan untuk memanipulasi
daftar di deskriptor proses tersebut, digunakan fungsi-fungsi:
add_to_runqueue(), del_from_runqueue(), move_first_runqueue(),
move_last_runqueue(). Makro NR_RUNNING digunakan untuk menyimpan
jumlah proses yang dapat dijalankan, sedangkan fungsi wake_up_process
membuat sebuah proses menjadi dapat dijalankan.
Untuk menjamin akurasinya, array task akan diperbarui setiap kali ada
proses baru dibuat ataupun dihapus. Sebuah daftar terpisah akan melacak
elemen bebas dalam array task itu. Ketika suatu proses dihapus, entrinya
ditambahkan di bagian awal dari daftar tersebut.
Proses dengan status task_interruptible dibagi ke dalam kelas-kelas yang
terkait dengan suatu event tertentu. Event yang dimaksud misalnya:
waktu kadaluarsa, ketersediaan sumber daya. Untuk setiap event ataupun
kelas terdapat antrian tunggu yang terpisah. Proses akan diberi sinyal
bangun ketika event yang ditunggunya terjadi. Berikut contoh dari
antrian tunggu tersebut:
void sleep_on(struct wait_queue **wqptr) {
struct wait_queue wait;
current_state=TASK_UNINTERRUPTIBLE;
wait.task=current;
add_wait_queue(wqptr, &wait);
schedule();
remove_wait_queue(wqptr, &wait);
}
Fungsi sleep_on() akan memasukkan suatu proses ke dalam antrian
tunggu yang diinginkan dan memulai penjadwal. Ketika proses itu
mendapat sinyal untuk bangun, maka proses tersebut akan dihapus
dari antrian tunggu.
Bagian lain konteks eksekusi proses adalah konteks perangkat keras,
misalnya: isi register. Konteks dari perangkat keras akan disimpan
oleh task state segment dan stack modus kernel. Secara khusus tss
akan menyimpan konteks yang tidak secara otomatis disimpan oleh
perangkat keras tersebut. Perpindahan antar proses melibatkan
penyimpanan konteks dari proses yang sebelumnya dan proses berikutnya.
Hal ini harus dapat dilakukan dengan cepat untuk mencegah terbuangnya
waktu CPU. Versi baru dari Linux mengganti perpindahan konteks
perangkat keras ini menggunakan piranti lunak yang mengimplementasikan
sederetan instruksi mov untuk menjamin validasi data yang disimpan
\serta potensi untuk melakukan optimasi.
Untuk mengubah konteks proses digunakan makro switch_to(). Makro
tersebut akan mengganti proses dari proses yang ditunjuk oleh prev_task
menjadi next_task. Makro switch_to() dijalankan oleh schedule() dan
merupakan salah satu rutin kernel yang sangat tergantung pada perangkat
keras (hardware-dependent). Lebih jelas dapat dilihat pada kernel/sched.c
dan include/asm-*/system.h.
Linux mengatur semua proses di dalam sistem melalui pemeriksaan
dan perubahan terhadap setiap struktur data task_struct yang
dimiliki setiap proses. Sebuah daftar pointer ke semua struktur
data task_struct disimpan dalam task vector. Jumlah maksimum
proses dalam sistem dibatasi oleh ukuran dari task vector.
Linux umumnya memiliki task vector dengan ukuran 512 entries.
Saat proses dibuat, task_struct baru dialokasikan dari memori
sistem dan ditambahkan ke task vector. Linux juga mendukung
proses secara real time. Proses semacam ini harus bereaksi
sangat cepat terhadap event eksternal dan diperlakukan berbeda
dari proses biasa lainnya oleh penjadwal.
Apakah Modul Kernel Linux itu?
Modul kernel Linux adalah bagian dari kernel Linux yang dapat dikompilasi, dipanggil dan dihapus secara
terpisah dari bagian kernel lainnya saat dibutuhkan. Modul kernel dapat menambah fungsionalitas kernel tanpa perlu me-reboot sistem. Secara teori tidak ada yang dapat membatasi apa yang dapat dilakukanoleh modul kernel. Kernel modul dapat mengimplementasikan antara lain device driver, sistem berkas, protokol jaringan.
Modul kernel Linux memudahkan pihak lain untuk meningkatkan fungsionalitas kernel tanpa harus membuat sebuah kernel monolitik dan menambahkan fungsi yang mereka butuhkan langsung ke dalam image dari kernel. Selain hal tersebut akan membuat ukuran kernel menjadi lebih besar, kekurangan lainnya adalah mereka harus membangun dan me-reboot kernel setiap saat hendak menambah fungsi baru. Dengan adanya modul maka setiap pihak dapat dengan mudah menulis fungsi-fungsi baru dan bahkan mendistribusikannya sendiri, di luar GPL.
Kernel modul juga memberikan keuntungan lain yaitu membuat sistem Linux dapat dinyalakan dengan kernel standar yang minimal, tanpa tambahan device driver yang ikut dipanggil. Device driver yang dibutuhkan dapat dipanggil kemudian secara eksplisit maupun secara otomatis saat dibutuhkan.
Terdapat tiga komponen untuk menunjang modul kernel Linux. Ketiga komponen tersebut adalah manajemen modul, registrasi driver, dan mekanisme penyelesaian konflik. Berikut akan dibahas ketiga komponen pendukung tersebut.
Shareable dan Unshareable
1. Shareable
Isinya dapat dishare (digunakan bersama) dengan sistem lain,
gunanya untuk menghemat tempat.
2. Unshareable
Isinya tidak dapat dishare(digunakan bersama) dengan sistem lain,
biasanya untuk alasan keamanan.
Variabel dan Static
1. Variabel
Isinya sering berubah-ubah.
2. Static
Sekali dibuat, kecil kemungkinan isinya akan berubah. Bisa berubah
jika ada campur tangan sistem admin.
proc file sistem menunjukkan bagaimana hebatnya virtual
file sistem yang ada pada linux. Proc file sistem sebenarnya
tidak ada secara fisik, baik subdirektorinya, maupun file-file
yang ada di dalamnya. Proc file sistem diregister oleh linux
virtual file sistem, jika virtual file sistem memanggilnya dan
meminta inode-inode dan file-file, proc file sistem membuat file
tersebut dengan informasi yang ada di dalam kernel. Contohnya,
"/proc/devices"
milik kernel dibuat dari data struktur kernel yang
menjelaskan device tersebut
X file sistem juga merupakan jurnaling file sistem. X file sistem
dibuat oleh SGI dan digunakan di sistem operasi SGI IRIX. X file
sistem juga tersedia untuk linux dibawah lisensi GPL. X file sistem
mengunakan B-tree untuk menangani file yang sangat banyak. X file
sistem digunakan pada server-server besar.
Resizer file sistem memiliki jurnal yang cepat. Ciri-cirinya mirip EXT3
file sistem. Reiser file sistem dibuat berdasarkan balance tree yang
cepat. Balance tree unggul dalam hal kinerja, dengan algoritma yang
lebih rumit tentunya.
Reiser file sistem lebih efisien dalam pemenfaatan ruang disk.
Jika kita menulis file 100 bytes, hanya ditempatkan dalam satu blok.
File sistem lain menempatkannya dalam 100 blok. Reiser file sistem
tidak memiliki pengalokasian yang tetap untuk inode. Resier file
sistem dapat menghemat disk sampai dengan 6 persen.
EXT3 adalah peningkatan dari EXT2 file sistem.
Peningkatan ini memiliki beberapa keuntungan, diantaranya:
Setelah kegagalan sumber daya, "unclean shutdown", atau kerusakan
sistem, EXT2 file sistem harus melalui proses pengecekan dengan
program e2fsck. Proses ini dapat membuang waktu sehingga proses
booting menjadi sangat lama, khususnya untuk disk besar yang
mengandung banyak sekali data. Dalam proses ini, semua data
tidak dapat diakses.
Jurnal yang disediakan oleh EXT3 menyebabkan tidak perlu lagi
dilakukan pengecekan data setelah kegagalan sistem. EXT3 hanya
dicek bila ada kerusakan hardware seperti kerusakan hard disk,
tetapi kejadian ini sangat jarang. Waktu yang diperlukan
EXT3 file sistem setelah terjadi "unclean shutdown" tidak
tergantung dari ukuran file sistem atau banyaknya file,
tetapi tergantung dari besarnya jurnal yang digunakan untuk
menjaga konsistensi. Besar jurnal default memerlukan waktu
kira-kira sedetik untuk pulih, tergantung kecepatan hardware.
Integritas data
EXT3 menjamin adanya integritas data setelah terjadi kerusakan atau
"unclean shutdown". EXT3 memungkinkan kita memilih jenis dan tipe
proteksi dari data.
Kecepatan
Daripada menulis data lebih dari sekali, EXT3 mempunyai throughput
yang lebih besar daripada EXT2 karena EXT3 memaksimalkan pergerakan
head hard disk. Kita bisa memilih tiga jurnal mode untuk
memaksimalkan kecepatan, tetapi integritas data tidak terjamin.
Mudah dilakukan migrasi
Kita dapat berpindah dari EXT2 ke sistem EXT3 tanpa melakukan format ulang.
Reiser file sistem
Reiser file sistem memiliki jurnal yang cepat. Ciri-cirinya mirip
EXT3 file sistem. Reiser file sistem dibuat berdasarkan balance tree
yang cepat. Balance tree unggul dalam hal kinerja, dengan algoritma
yang lebih rumit tentunya.
Reiser file sistem lebih efisien dalam pemenfaatan ruang disk.
Jika kita menulis file 100 bytes, hanya ditempatkan dalam satu blok.
File sistem lain menempatkannya dalam 100 blok. Reiser file sistem
tidak memiliki pengalokasian yang tetap untuk inode. Resier file
sistem dapat menghemat disk sampai dengan 6 persen.
X file sistem
X file sistem juga merupakan jurnaling file sistem. X file sistem
dibuat oleh SGI dan digunakan di sistem operasi SGI IRIX.
X file sistem juga tersedia untuk linux dibawah lisensi GPL.
\X file sistem mengunakan B-tree untuk menangani file yang sangat banyak.
X file sistem digunakan pada server-server besar.
Proc file sistem
proc file sistem menunjukkan bagaimana hebatnya virtual file sistem yang
ada pada linux. Proc file sistem sebenarnya tidak ada secara fisik,
baik subdirektorinya, maupun file-file yang ada di dalamnya. Proc file
sistem diregister oleh linux virtual file sistem, jika virtual file
sistem memanggilnya dan meminta inode-inode dan file-file, proc file
sistem membuat file tersebut dengan informasi yang ada di dalam kernel.
Contohnya, /proc/devices milik kernel dibuat dari data struktur kernel
yang menjelaskan device tersebut.
Pembagian file sistem secara ortogonal
Shareable dan Unshareable
1. Shareable
Isinya dapat dishare (digunakan bersama) dengan
sistem lain, gunanya untuk menghemat tempat.
2. Unshareable
Isinya tidak dapat dishare(digunakan bersama)
dengan sistem lain, biasanya untuk alasan keamanan.
Variabel dan Static
1. Variabel
Isinya sering berubah-ubah.
2. Static
Sekali dibuat, kecil kemungkinan isinya akan berubah.
Bisa berubah jika ada campur tangan sistem admin.
A. Keterangan
EXT2 adalah file sistem yang ampuh di linux. EXT2
juga merupakan salah satu file sistem yang paling
ampuh dan menjadi dasar dari segala distribusi linux.
Pada EXT2 file sistem, file data disimpan sebagai data blok.
Data blok ini mempunyai panjang yang sama dan meskipun panjangnya
bervariasi diantara EXT2 file sistem, besar blok tersebut ditentukan
pada saat file sistem dibuat dengan perintah mk2fs. Jika besar blok
adalah 1024 bytes, maka file dengan besar 1025 bytes akan memakai 2
blok. Ini berarti kita membuang setengah blok per file.
EXT2 mendefinisikan topologi file sistem dengan memberikan arti bahwa
setiap file pada sistem diasosiasiakan dengan struktur data inode.
Sebuah inode menunjukkan blok mana dalam suatu file tentang hak akses
setiap file, waktu modifikasi file, dan tipe file. Setiap file dalam
EXT2 file sistem terdiri dari inode tunggal dan setiap inode mempunyai
nomor identifikasi yang unik. Inode-inode file sistem disimpan dalam
tabel inode. Direktori dalam EXT2 file sistem adalah file khusus yang
mengandung pointer ke inode masing-masing isi direktori tersebut.
B. Inode dalam EXT2
Inode adalah kerangka dasar yang membangun EXT2. Inode dari setiap
kumpulan blok disimpan dalam tabel inode bersama dengan peta bit yang
menyebabkan sistem dapat mengetahui inode mana yang telah teralokasi
dana inode mana yang belum. MODE: mengandung 2 informasi, inode apa dan
ijin akses yang dimiliki user. OWNER INFO: user atau grop yang memiliki
file atau direktori SIZE: besar file dalam bytes TIMESTAMPS: kapan waktu
pembuatan inode dan waktu terakhir dimodifikasi. DATABLOKS: pointer ke
blok yang mengandung data.
EXT2 inode juga dapat menunjuk pada device khusus, yang mana device
khusus ini bukan merupakan file, tatapi dapat menangani program sehingga
program dapat mengakses ke device. Semua file device di dalam drektori
/dev dapat membantu program mengakses device.
C. Superblok dalam EXT2
Superblok mengandung informasi tentang ukuran dasar dan bentuk file sistem.
Informasi di dalamnya memungkinkan file sistem manager untuk menggunakan
dan merawat file sistem. Biasanya, hanya superblok di blok group 0 saat
file sistem di-mount tetapi setiap blok grup mengandung duplikatnya
untuk menjaga jika file sistem menjadi rusak. Informasi yang dikandung adalah:
1. Magic Number
meyakinkan software bahwa ini adalah superblok dari EXT2 file sistem.
2. Revision Level
menunjukkan revisi mayor dan minor dari file sistem.
3. Mount Count dan Maksimum Mount Count
menunjukkan pada sistem jika harus dilakukan pengecekan dan
maksimum mount yang diijikan sebelum e2fsck dijalankan.
4. Blocks per Size
besar blok dalam file sistem, contohnya 1024 bytes.
5. Blocks per Group
banyaknya blok per group.
6. Block Group Number
nomor blok group yang mengadung copy dari superblok.
7. Free Blocks
banyaknya blok yang kosong dalam file sistem.
8. Free Inode
banyak inode kosong dalam file sistem.
9. First Inode
nomor inode dalam inode pertama dalam file sistem, inode pertama
dalam EXT2 root file sistem adalah direktori "/".
Linux menyimpan cache dari inode aktif maupun dari inode yang
telah terakses sebelumnya. Ada 2 path dimana inode ini dapat
diakses. Yang pertama telah disebutkan sebelumnya, setiap entri
dalam cache menunjuk pada suatu inode dan menjaga inode tetap
dalam cache. Yang kedua melalui inode hash table. Setiap inode
mempunyai alamat 8 bit sesuai dengan alamat dari file sistem
superblok dan nomor inode. Inode dengan nilai hash yang sama
kemudian dirangkai di doubly linked list.
Perubahan pada cache melibatkan penambahan dan penghapusan
entri-entri dari cache itu sendiri. Entri-entri yang tidak
dibutuhkan lagi akan di unhash sehingga tidak akan tampak
dalam pencarian berikutnya.
Operasi diperkirakan akan mengubah struktur cache harus
dikunci selama melakukan perubahan. Unhash tidak memerlukan
semaphore karena ini bisa dilakukan secara atomik dalam kernel lock.
Banyak operasi file memerlukan 2 langkah proses. Yang pertama adalah
melakukan pencarian nama di dalam direktori. Langkah kedua adalah
melakukan operasi pada file yang telah ditemukan. Untuk menjamin
tidak terdapatnya proses yang tidak kompatibel diantara kedua
proses itu, setelah proses kedua, virtual file sistem protokol
harus memeriksa bahwa parent entry tetap menjadi parent dari entri
childnya. Yang menarik dari cache locking adalah proses rename,
karena mengubah 2 entri dalam sekali operasi.
Linux virtual file sistem
Objek dasar dalam layer-layer virtual file system
1.
File
File adalah sesuatu yang dapat dibaca dan ditulis.
File ditempatkan pada memori. Penempatan pada memori
tersebut sesuai dengan konsep file deskriptor yang dimiliki unix.
2.
Inode
Inode merepresentasikan objek dasar dalam file sistem. Inode bisa
saja file biasa, direktori, simbolik link dan lain sebagainya.
Virtual file sistem tidak memiliki perbedaan yang jelas di antara
objek, tetapi mengacu kepada implementasi file sistem yang
menyediakan perilaku yang sesuai. Kernel tingkat tinggi menangani
objek yang berbeda secara tidak sama.
File dan inode hampir mirip diantara keduanya. Tetapi terdapat perbedaan
yang penting diantara keduanya. Ada sesuatu yang memiliki inode tetapi
tidak memiliki file, contohnya adalah simbolik link. Ada juga file
yang tidak memiliki inode seperti pipes dan socket.
3.
File sistem
File system adalah kumpulan dari inode-inode dengan satu inode pembeda
yaitu root. Inode lainnya diakses mulai dari root inode dan pencarian
nama file untuk menuju ke inode lainnya.
File sistem mempunyai beberapa karakteristik yang mencakup seluruh
inode dalam file sistem. Salah satu yang terpenting adalah blocksize.
4.
Nama inode
Semua inode dalam file sistem diakses melalui namanya. Walaupun
pencarian nama inode bisa menjadi terlalu berat untuk beberapa
sistem, virtual file sistem pada linux tetap memantau cache
dan nama inode yang baru saja terpakai agar kinerja meningkat.
Cache terdapat di memori sebagai tree, ini berarti jika sembarang
inode dari file terdapat di dalam cache, maka parent dari inode
tersebut juga terdapat di dalam cache.
Virtual file system layer menangani semua pengaturan nama path dari
file dan mengubahnya menjadi masukan di dalam cache sebelum mengijinkan
file sistem untuk mengaksesnya. Ada pengecualian pada target dari
simbolik link, akan diakses file sistem secara langsung. File sistem
diharapkan untuk menginterpretasikannya.