Virtual File System ( VFS )


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 :
1.     Superblock object Objek ini menyimpan informasi tentang mounted file system atau sistem berkas secara keseluruhan.
2.        Inode object Objek ini menyimpan informasi umum tentang file tertentu (individual file).
3.        File object Objek ini menyimpan informasi tentang file yang sedang dibuka.
4.      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.
Gambar 0.1 : 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:
1. Memisahkan operasi-operasi file system generic dari implementasi detailnya, dengan cara mendefinisikan virtual file system interface.
2.   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:
1.         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.
2.         Network file system Sistem berkas ini terdapat di network, misalnya NFS.
3.     Special file system.  Sistem berkas ini tidak terdapat di disk space, baik lokal maupun network, misalnya /proc file system.

A.            Pengertian Virtual File System
Suatu lapisan abstrak di atas sistem berkas yang sesungguhnya, yang menangani semua system call yang berhubungan dengan suatu sistem berkas di bawahnya. Tujuan dari VFS yaitu agar berbagai sistem berkas yang berbeda dapat di akses oleh aplikasi komputer dengan cara yang seragam. Virtual File System menyediakan antarmuka antara system call dengan sistem berkas yang sesungguhnya. Keberadaan VFS tentu dapat mengatasi perbedaan berbagai sistem berkas yang digunakan oleh berbagai sistem operasi saat ini seperti Windows, Mac OS, Linux, dan sebagainya, sehingga suatu aplikasi dapat mengakses berkas dari sistem berkas yang berbeda tanpa perlu mengetahui jenis sistem berkas yang digunakan dan detil implementasi dari masing-masing sistem berkas tersebut.
Tujuan dari VFS yaitu agar berbagai sistem berkas yang berbeda dapat di akses oleh aplikasi komputer dengan cara yang seragam.
Setiap berkas, directory, dan data lainnya pada VFS direpresentasikan oleh satu dan hanya satu VFS inode. VFS inode hanya terdapat di memori kernel dan disimpan di inode chace selama masih dibutuhkan oleh sistem. Beberapa informasi yang disimpan oleh VFS inode yaitu:
Ø  Device : Menunjukan device identifier dari suatu device yang menyimpan berkas, ataupun directory.
Ø  Inode Number : Merupakan nomor inode yang unik dalam sistem berkas.
Ø  Mode : Menggambarkan apa yang direpresentasikan oleh VFS inode.
Ø  User ID : Merupakan identifier bagi pemilik berkas.
Ø  Time : Menunjukkan kapan pembuatan, modifikasi, dan penulisan suatu berkas.
Ø  Blocksize : Menunjukkan ukuran dari block yang digunakan oleh berkas.
Ø  Inode Operations: Merupakan pointer ke suatu routine yang melakukan berbagai operasi pada inode.
Ø  Count : Menunjukkan berapa kali suatu sistem telah menggunakan suatu inode.
Ø  Lock : Digunakan untuk mengunci VFS inode.
Ø  Dirty : Mengindikasikan bahwa telah terjadi penulisan pada VFS inode, sehingga perubahan yang terjadi juga harus dituliskan ke sistem berkas yang sesungguhnya.
Ø  File System Specific Information : Menunjukkan informasi khusus yang dibutuhkan oleh suatu inode.

Superblock : Setiap sistem berkas yang di-mount akan direpresentasikan oleh sebuah VFS Superblock. Superblock digunakan untuk menyimpan informasi mengenai partisi tersebut. Pada dasarnya superblock merupakan suatu struktur data yang menyimpan beberapa informasi sebagai berikut:
Ø  Device : Merupakan suatu device identifier, contohnya /dev/hda1 adalah harddisk pertama yang terdapat pada sistem memiliki device identifier 0×300.
Ø  Inode Pointer : Merupakan suatu pointer yang menunjuk ke inode pertama pada sistem berkas.
Ø  Blocksize : Menunjukkan ukuran suatu block dari sistem berkas, contohnya 1024 bytes.
Ø  Superblock Operation : Merupakan suatu pointer ke sekumpulan superblock routine (fungsi) dari sistem berkas, contohnya read, write, dan sebagainya.
Ø  File System type : Menunjukkan tipe dari sistem berkas, contohnya EXT2, FAT, NTFS.
Ø  File System Specific : Merupakan suatu pointer ke informasi yang dibutuhkan oleh sistem berkas.

B.             STRUKTUR SISTEM FILE
File adalah unit penyimpan logika yang berisi sekumpulan informasi yang berhubungan. Sistem file berada pada penyimpan sekunder (disk). Sistem file diorganisasi ke dalam layer-layer seperti Gambar 1.1.
Gambar 1.1 : Layer System File

Pada level terendah, I/O control berisi device driver dan interrupt handler untuk mengirim informasi antara memori dan sistem disk. Basic file system berisi perintah bagi device driver untuk membaca dan menulis blok fisik pada disk. File organization module berisi modul untuk mengetahui blok logika pada blok fisik. Logical file system menggunakan struktur direktori untuk memberikan ke file organization module informasi tentang kebutuhan terakhir.
Informasi mengenai sebuah file disimpan pada struktur penyimpan yang disebut file control block seperti Gambar 1.2. 

Gambar 1.2 : File Control Block

Gambar 1.3 mengilustrasikan pentingnya struktur sistem file disediakan oleh sistem operasi. Pada saat membuka file (dengan menjalankan perintah open) blok-blok dari struktur direktori disimpan pada struktur direktori di memori dan mengubah file control block. Pada saat membaca file (dengan menjalankan perintah read), indeks yang dibaca di cari lokasi blok pada disk melalui tabel open file yang berada di memori.

 
Gambar 1.3 : (a) membuka File, (b) Membaca file

Virtual File Systems (VFS) merupakan implementasi sistem file yang berorientasi obyek. VFS memungkinkan antarmuka system call (API) yang sama digunakan untuk sistem file yang berbeda. API adalah lebih sebagai antarmuka VFS dan bukan untuk tipe sistem file tertentu. Skema VFS dapat dilihat pada Gambar 1.4

 
Gambar 1.4 : Skema Virtual File System

C.             IMPLEMENTASI DIREKTORI
Implementasi direktori menggunakan daftar nama file linier dengan pointer ke blok data. Hal ini berdampak pada pemrograman yang mudah tetapi memerlukan waktu yang lama untuk eksekusi.
Untuk mempercepat waktu eksekusi digunakan Tabel Hash berupa daftar linier dengan struktur data hash. Dengan struktur data hash akan mengurangi waktu pencarian direktori. Tetapi struktur hash mempunyai resiko bertabrakan apabila terjadi situasi dimana dua nama file hash yang berbeda berada pada lokasi yang sama. Struktur hash berukuran tetap.

D.            METODE ALOKASI
Metode alokasi berhubungan dengan bagaimana blok-blok pada disk dialokasikan untuk file. Terdapat beberapa metode alokasi antara lain alokasi berurutan (contiguous allocation), alokasi berhubungan (linked allocation) dan alokasi berindeks (indexed allocation).
1)             Alokasi Berurutan (Contiguous Allocation)
Pada alokasi berurutan, setiap file menempati sekumpulan blok yang berurutan pada disk (Gambar 1.5). Model ini sangat sederhana karena hanya membutuhkan lokasi awal (block #) dan panjang (jumlah blok). Akses pada blok disk dilakukan secara random dan memakan banyak ruang (permasalahan dynamic storage-allocation). File yang disimpan secara berurutan tidak dapat berkembang. 

 
Gambar 1.5 : Alokasi Berurutan

Beberapa sistem file yang baru (misalnya Veritas File System) menggunakan skema alokasi berurutan yang dimodifikasi. File sistem Extent-based mengalokasikan blok pada disk secara berkembang (extent). Extent adalah blok berurutan pada disk. Extent dialokasikan untuk alokasi file. Sebuah file terdiri dari satu atau lebih extent.

2)             Alokasi Berhubungan (Linked Allocation)
Pada alokasi berhubungan, setiap file adalah sebuah linked list dari blok-blok terpisah pada disk (Gambar 1.6). Pada setiap blok terdapat satu pointer yang menunjuk ke blok lain
block = pointer

 
Gambar 1.6 : Alokasi Berhubungan

Alokasi berhubungan mempunyai bentuk yang sederhana, hanya memerlukan alamat awal. Sistem manajemen ruang bebas pada alokasi berhubungan tidak memakan banyak ruang. Model ini tidak menggunakan random access. Blok yang diakses adalah blok ke-Q pada rantai link dari blok pada file. Perpindahan ke blok = R + 1. Contoh sistem file yang menggunakan alokasi berhubungan adalah file-allocation table (FAT) yang digunakan MS-DOS dan OS/2. Bentuk file allocation tabel dapat dilihat pada Gambar 1.7.
 
 
Gambar 1.7 : File Allocation Table

3)             Alokasi Berindeks (Indexed Allocation)
Pada alokasi berindeks, terdapat satu blok yang berisi pointer ke blok-blok file (Gambar 1.8). Alokasi berindeks berupa bentuk logika.

 
Gambar 1.8 : Alokasi Berindeks

Pada alokasi berindeks, memerlukan tabel indeks yang membawa pointer ke blok-blok file yang lain. Akses dilakukan secara random. Merupakan akses dinamis tanpa fragmentasi eksternal, tetapi mempunyai blok indeks yang berlebih. Pemetaan dari logika ke fisik dalam file ukuran maksimum 256K word dan ukuran blok 512 word hanya memerlukan 1 blok untuk tabel indeks.
Apabila pemetaan dari logika ke fisik dalam sebuah file dari ukuran tak hingga (ukuran blok adalah 512 word) maka digunakan skema menghubungkan blok link dari tabel indeks (ukuran tak terbatas). Untuk ukuran file maksimum 5123 digunakan skema two-level indeks (Gambar 1.9). Pada skema two-level indeks terdapat tabel indeks luar dan dalam. Indeks dipetakan ke tabel indeks luar kemudian dipetakan ke table indeks dalam setelah itu mengakses blok file yang dimaksud. Sistem operasi UNIX mengimplementasikan kombinasi alokasi berurutan dan alokasi berindeks seperti pada Gambar 1.10.

 
Gambar 1.9 : Skema two level indeks


 
Gambar 1.10 : Alokasi pada UNIX

E.             MANAJEMEN RUANG BEBAS
Daftar ruang bebas biasanya diimplementasikan sebagai bit map atai bit vector (vektor bit). Setiap blok direpresentasikan dengan 1 bit. Jika blok bebas, maka bit bernilai 1, sebaliknya jika blok dialokasikan, bit bernilai 0. Sebagai contoh, misalnya disk dengan blok 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 17, 18, 25, 26 dan 27 bebas dan sisanya dialokasikan. Maka bit map dari ruang bebas adalah :
001111001111110001100000011100000…
Perhitungan nomor blok yang bebas adalah sebagai berikut :
(jumlah bit per word) * (jumlah nilai-0 word) + offset dari bit 1 pertama Pemetaan bit biasanya membutuhkan ruang tambahan, misalnya ukuran blok = 212 byte, ukuran disk = 230 byte (1 gigabyte) maka
n = 230/212 = 218 bit (atau 32K byte)
Dengan menggunakan vector bit mudah untuk mendapatkan file yang berurutan. Pengembangan dari vector bit adalah dengan menggunakan linked list (free list) seperti Gambar 1.11. Akan tetapi model ini tidak mendapatkan ruang berurutan dengan mudah meskipun tidak memakan tempat. Modifikasi berikutnya melakukan pengelompokan blok yang bebas agar lebih mudah untuk mendapakan ruang yang berurutan.

F.              EFISIENSI DAN PERFORMANSI
Efisiensi penggunaan ruang disk tergantung pada alokasi disk dan algoritma directori serta tipe data disimpan pada entry direktory dari file. Untuk meningkatkan performansi penggunaan ruang disk digunakan disk cache yang digunakan pada bagian terpisah dari main memory untuk penggunaan blok yang sering. Selain itu juga menggunakan teknik untuk optimasi akses berurutan yang disebut free-behind dan read-ahead. – teknik untuk optimasi akses berurutan. Untuk meningkatkan performansi PC juga dapat menggunakan bagian tertentu dari memory sebagai virtual disk atau RAM disk.

 
Gambar 1.11 : Menghubungkan daftar ruang bebas pada disk

G.            PERBAIKAN
Untuk memperbaiki sistem file dilakukan dengan memeriksa konsistensi dengan cara membandingkan data pada struktur direktori dengan blok data pada disk dan mencoba memperbaiki inkonsistensi. Selain itu juga dapat menggunakan program sistem untuk back up data dari disk ke penyimpan lain (floppy disk, magnetic tape). Perbaikan akan Recover menghilangkan file atau disk dengan restoring data dari backup.

H.            SISTEM FILE LOG STRUCTURED
Sistem file Log structured (atau journaling) menyhimpan semua update ke file sistem sebagai transaksi. Semua transaksi ditulis ke log. Sebuah transaksi dijadikan committed jika ditulis ke log. Tetapi, kemngkinan sistem file tidak diupdate.
Transaksi pada log ditulis secara tidak beraturan ke sistem file. Jika sistem file dimodifikasi, transaksi dihapus dari log. Jika file bertabrakan, semua transaksi yang tersisa pada log harus dibentuk.

I.               SUN NETWORK FILE SYSTEM (NFS)
Network File System adalah implementasi dan spesifikasi dari sistem perangkat lunak untuk mengakses remote files melalui LAN (atau WAN). NFS merupakan bagian dari Solaris and SunOS yang berjalan pada Sun workstations menggunakan unreliable datagram protocol (UDP/IP) protocol dan Ethernet.
Workstation yang saling berhubungan dipandang sebagai mesin independent dengan file sistem yang independent, memungkinkan sharing diantara sistem file secara transparent. Directory remote di-mount ke directory sistem file lokal. Mounted directory terlihat sebagai subtree dari sistem file lokal, mengubah subtree secara descending dari directory lokal. Spesifikasi dari remote directory untuk operasi mount tidak transparant; host name dari remote directory harus disediakan. File pada remote directory dapat diakses secara transparant. Subyek ke akreditasi akses yang benar, sembarang sistem file (atau directory dalam sistem file), dapat di-mount secara remote ke top dari sembaran directory lokal.
NFS didesain untuk operasi pada lingkungan heterogen dari mesin, SO dan arsitektur network yang berbeda; spesifikasi NFS tidak tergantung dari media tersebut. Ketidak tergantungan dilakukan melalui penggunaan RPC pada bagian tertinggi dari protokol External Data Representation (XDR) yang digunakan antara 2 antarmuka independent. Spesifikasi NFS berbeda antara layanan tersedian dengan mekanisme mount dan layanan akses file remote actual.
Misalnya terdapat tiga file sistem yang independent seperti Gambar 1.12. Kemudian dilakukan mount dengan NFS maka file sistem hasil seperti Gambar 1.13. 

 
Gambar 1.12 : Tiga system file yang independen

 
Gambar 1.13 : Mounting pada NFS