Virtual File
System
Sistem operasi
modern harus mampu mengimplementasikan berbagai sistem berkas dengan tipe yang
berbeda dalam waktu yang bersamaan. Salah satu teknik yang digunakan sebagai
solusinya adalah dengan menggunakan virtual file system (VFS). VFS saat
ini banyak digunakan oleh berbagai sistem operasi. Ide dari VFS adalah
meletakkan informasi di kernel untuk merepresentasikan keseluruhan tipe sistem
berkas, dan juga terdapat sebuah fungsi untuk setiap operasi yang dimiliki
sistem berkas. Sehingga, untuk setiap system call seperti fungsi read(), write(), open(), dan lainnya, kernel akan mensubstitusikannya menjadi actual function
yang dimiliki oleh setiap sitem berkas dengan berbagai tipe.
VFS menggunakan konsep object oriented dalam
mengimplementasikan sistem berkas. Di dalam VFS terdapat sebuah berkas
yang merepresentasikan seluruh tipe sistem berkas yang ada, berkas ini
dinamakan common file model. Berkas inilah yang menggunakan konsep object
oriented, yang di dalamnya terdapat struktur data dan method yang
diimplementasikan.
Terdapat empat objek di dalam common file model,
diantaranya :
- Superblock object. Objek ini menyimpan informasi tentang mounted file system atau sistem berkas secara keseluruhan.
- Inode object. Objek ini menyimpan informasi umum tentang file tertentu (individual file).
- File object. Objek ini menyimpan informasi tentang file yang sedang dibuka.
- Dentry object. Objek ini menyimpan informasi tentang link-link dari sebuah entry directory file.
Struktur data dan method yang diimplementasikan,
digunakan untuk menyembunyikan implementasi detail dari actual function
pada sistem berkas dengan system call yang mengaksesnya. Oleh karena
itu, dalam mengimplementasikan sistem berkas, terdapat tiga layer utama,
seperti pada Gambar 16.5, “Virtual
File System Layer”.
|
Lapisan yang pertama adalah file system interface.
Contohnya adalah beberapa system call seperti read(), write(), open() dan lainnya. System call ini tidak berhubungan langsung dengan
sistem, namun terhubung melalui sebuah lapisan abstrak yaitu virtual file
system.
Lapisan yang Kedua adalah VFS Interface. Virtual
file system memiliki dua fungsi penting, yaitu:
- Memisahkan operasi-operasi file system generic dari implementasi detailnya, dengan cara mendefinisikan virtual file system interface.
- Virtual file system interface didasarkan pada struktur representasi berkas yang disebut vnode, yang memiliki numerical designator yang unik untuk setiap network file.
Lapisan yang ketiga adalah sistem berkas dengan berbagai
tipe. Secara umum, terdapat tiga macam tipe sistem berkas, yaitu:
- Disk-based file system. Sistem berkas ini mengatur ruang memori yang tersedia di dalam partisi disk lokal. Misalnya, Ext2 (Second Extended file system), Ext3 (Third Extended file system), dan Reiser file system yang tedapat di Linux.
- Network file system. Sistem berkas ini terdapat di network, misalnya NFS.
- Special file system. Sistem berkas ini tidak terdapat di disk space, baik lokal maupun network, misalnya /proc file system.
Implementasi Direktori Linier
|
||
Bab 16. Implementasi Sistem Berkas
|
Pemilihan algoritma untuk pencarian sebuah direktori merupakan salah satu
penentu tingkat efisiensi dan performance suatu sistem berkas. Salah
satu algoritma itu adalah implementasi direktori linier. Algoritma ini
merupakan algoritma yang paling sederhana dalam pembuatan program yang
mengimplementasikan linier list dari nama-nama berkas yang memiliki
pointer ke blok-blok data. Namun, algoritma ini tidak efisien apabila digunakan
pada suatu direktori yang memiliki jumlah berkas yang sangat banyak karena
proses eksekusi berkas membutuhkan waktu yang lama. Misalnya, untuk membuat
berkas, kita harus memastikan bahwa dalam direktori tidak ada berkas yang
mempunyai nama yang sama. Kemudian, berkas yang baru tersebut ditambahkan pada
akhir direktori tersebut. Untuk menghapus sebuah berkas, kita mencari terlebih
dahulu nama berkas yang hendak dihapus dalam direktori, kemudian membebaskan space
yang dialokasikan pada berkas tersebut. Apabila kita menginginkan untuk
menggunakan kembali entry berkas tersebut, ada beberapa alternatif yang
bisa kita gunakan, yaitu:
- kita bisa menandai berkas tersebut misalnya melalui pemberian nama berkas yang khusus pada berkas tersebut.
- Kedua, kita bisa menempatkan berkas tersebut pada sebuah list of free directory entries.
- alternatif yang ketiga adalah dengan menyalin entry terakhir dalam direktori ke suatu freed location.
Salah satu
kerugian yang ditimbulkan dalam penggunaan algoritma ini adalah pencarian
berkas dilakukan secara linier search. Oleh karena itu, banyak sistem
operasi yang mengimplementasikan sebuah software cache yang menyimpan
informasi tentang direktori yang paling sering digunakan, sehingga pengaksesan
ke disk bisa dikurangi. Berkas-berkas yang terurut dapat mengurangi rata-rata
waktu pencarian karena dilakukan secara binary search. Namun, untuk
menjaga agar berkas-berkas selalu dalam keadaan terurut, pembuatan maupun
penghapusan berkas akan lebih rumit. Struktur data tree seperti B-tree
bisa digunakan untuk mengatasi masalah ini.
Implementasi
Direktori Hash
|
||
Bab 16.
Implementasi Sistem Berkas
|
Implementasi Direktori Hash
Pada implementasi ini, linier list
tetap digunakan untuk menyimpan direktori, hanya saja ada tambahan berupa
struktur data hash. Prosesnya yaitu hash table mengambil
nilai yang dihitung dari nama berkas dan mengembalikan sebuah pointer
ke nama berkas yang ada di linier list. Oleh karena itu, waktu
pencarian berkas bisa dikurangi. Akan tetapi, ada suatu keadaan yang
menyebabkan terjadinya peristiwa collisions, yaitu suatu kondisi di
mana terdapat dua berkas yang memiliki nilai hash yang sama, sehingga
menempati lokasi yang sama. Solusi yang dipakai untuk mengatasi hal tersebut
yaitu dengan menggunakan chained-overflow hash table, yaitu setiap hash
table mempunyai linked list dari nilai individual dan crash
dapat diatasi dengan menambah tempat pada linked list tersebut. Efek
samping dari penambahan chained-overflow tersebut adalah dapat
memperlambat pencarian.
Ada beberapa kelemahan dari implementasi direktori hash, yaitu
ukurannya yang tetap dan adanya ketergantungan fungsi hash dengan
ukuran hash table. Sebagai contoh, misalnya kita membuat sebuah linear-probing
hash table yang memiliki 32 entry. Sebuah fungsi hash
dibutuhkan untuk mengubah nama berkas menjadi bilangan bulat dari 0 s.d. 31,
misalnya dengan menggunakan fungsi modulo 32. Jika kita ingin untuk menambahkan
sebuah berkas yang harus diletakkan pada lokasi yang ke-33, kita harus
memperbesar ukuran dari hash table tersebut, sehingga diperlukan
sebuah fungsi hash baru untuk disesuaikan dengan ukuran hash table
tersebut. Oleh karena itu, berkas-berkas yang sebelumnya sudah ditempatkan di
suatu lokasi pada hash table yang lama harus dicari tempat yang
bersesuaian dengan menggunakan fungsi hash yang baru.
Rangkuman
Untuk memberikan akses yang
efisien ke disk, sistem operasi mengizinkan satu atau lebih sistem berkas yang
digunakan untuk menyimpan, meletakkan, dan mengambil data dengan mudah. Sistem
berkas tersebut terdiri dari beberapa lapisan yang mana setiap lapisan akan
menyediakan fitur-fitur untuk dipergunakan pada lapisan di atasnya. Lapisan
tersebut (dari tingkat yang terbawah) antara lain device driver, I/O
control, basic file system, file-organization module, logical file system,
dan application program. Berbagai operasi yang dilakukan pada sistem
berkas, seperti membuka maupun membaca berkas, sangat membutuhkan informasi
tentang berkas yang hendak digunakan. Semua informasi tentang berkas tersebut
didapatkan pada file control block.
Dalam pengimplementasiannya,
sistem operasi harus mampu mendukung berbagai jenis sistem berkas. Teknik yang
digunakan oleh sistem operasi untuk mendukung kemampuan ini disebut Virtual
File System (VFS). Konsep dalam mengimplementasikan VFS ini adalah konsep object
oriented yaitu menggunakan sebuah berkas yang dapat merepresentasikan
seluruh tipe berkas. Berkas ini disebut common file model. Oleh karena
itu, digunakanlah tiga lapisan utama dalam mengimplementasikan sistem berkas,
diantaranya file system interface, VFS interface, dan file system
types.
Algoritma untuk mencari berkas
dalam sebuah direktori juga digunakan sebagai parameter performance
dari sebuah sistem operasi. Ada dua algoritma yang sering digunakan dalam
pengimplementasian direktori, yaitu implementasi direktori linier dan hash.
Masing-masing bentuk implementasi ini memiliki kelebihan dan kekurangan
tersendiri. Untuk implementasi linier, kelebihannya adalah sederhana dalam
pembuatan programnya dan kekurangannya adalah lamanya mengakses berkas apabila
terdapat banyak sekali berkas dalam sebuah direktori. Sedangkan pada
implementasi direktori hash, kecepatan pencarian berkas lebih cepat
dibandingkan dengan pencarian dalam direktori linier dan kekurangannya adalah
ukuran tabel yang statis, sehingga perlu dilakukan pengubahan fungsi hash
apabila ingin mengubah ukuran tabel hash.