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: 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.
16.6. Implementasi Direktori Linier
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:
1. kita bisa menandai berkas tersebut misalnya melalui pemberian nama berkas yang khusus pada berkas tersebut.
2. Kedua, kita bisa menempatkan berkas tersebut pada sebuah list of free directory entries.
3. 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.
16.7. 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.
16.8. 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.
Rujukan
[Silberschatz2005] Avi Silberschatz, Peter Galvin, dan Grag Gagne. 2005. Operating Systems
Concepts. Seventh Edition. John Wiley & Sons.
[Tanenbaum1997] Andrew S Tanenbaum dan Albert S Woodhull. 1997. Operating Systems Design
and Implementation. Second Edition. Prentice-Hall.
[Bovet2002] Daniel P. Bovet dan Marco Cesati. 2002. Understanding the Linux Kernel. Second Edition. O'Reilly.
[WEBITC2006] Infoteknologi.com. 2006. http://infoteknologi.com/info/index.php?option . Diakses 30 Mei 2007.
Bab 17. Metode Alokasi Blok
17.1. Pendahuluan
Ruang untuk menyimpan berkas pada tempat penyimpanan utama, dalam hal ini memori, tidak cukup besar untuk menampung berkas dalam jumlah besar karena ukurannya yang terbatas dan harganya yang mahal, memory hanya dapat menyimpan berkas saat komputer dalam keadaan terhubung dengan arus listrik.Karena hal-hal tersebut di atas, maka diperlukan tempat penyimpanan sekunder (disk) yang dapat mempertahankan berkas walaupun tidak ada arus listrik yang mengalir ke komputer. Dalam bab ini, akan dijelaskan bagaimana caranya mengalokasikan blok untuk sebuah berkas agar disk dapat digunakan secara optimal dan agar berkas dapat diakses secara cepat.
Ada beberapa mekanisme dalam mengalokasikan blok untuk menyimpan berkas ke dalam disk yang akan dibahas, diantaranya:
1. Alokasi Berkesinambungan . 2. Alokasi Link .
3. Alokasi Berindeks.
beserta cara mengatur ruang kosong pada disk dan cara mempertahankan kekonsistenan berkas serta mencegah kehilangan data.
17.2. Alokasi Berkesinambungan
Jenis alokasi ini menempatkan berkas-berkas pada blok secara berkesinambungan atau berurutan dalam disk.
Alokasi berkesinambungan dari suatu berkas diketahui melalui alamat dan panjang disk dalam unit blok dari blok pertama. Sebagai contoh, jika ada berkas dengan panjang n blok dan mulai dari lokasi b maka berkas tersebut menempati blok b, b+1, b+2, #, b+n-1. Direktori untuk setiap berkas mengindikasikan alamat blok awal dan panjang area yang dialokasikan untuk berkas tersebut. Terdapat dua macam cara untuk mengakses berkas yang dialokasi dengan metode ini, yaitu:
• Akses secara berurutan. Sistem berkas mengetahui alamat blok terakhir dari disk dan membaca blok berikutnya jika diperlukan.
• Akses secara langsung. Untuk akses langsung ke blok i dari suatu berkas yang dimulai pada blok b, dapat langsung mengakses blok b+i.