Filesystem boong-boongan

Tugas IF 3055 Sistem Operasi kali ini adalah membuat simulasi filesystem. Ketimbang tugas kuliah S2 Manajemen Informasi yang disuruh bikin filesystem beneran sampai bikin kernel module untuk akses block device, jelas ini jauh lebih gampang 😀

Intinya cuman bikin simulasi sebuah filesystem pada sebuah file….. Udah gitu doang sih 😛 Gak sih, nantinya model ini akan berkomunikasi dengan sebuah terminal yang akan digunakan oleh pengguna, dengan terminal ini, pengguna dapat mengkopi file yang ada pada sistem operasi ke dalam model tersebut seakan-akan model tersebut adalah sebuah device beneran.

Inti dari tugasnya sebenarnya adalah desainnya.

Paling pertama itu adalah desain struktur filesystemnya.

(gambar diambil dari sini)

Kalau untuk tugas, sih, gak usah selengkap yang di atas 😛 Yang simpel aja asal semua fitur jalan 😛 Sebuah filesystem, menurut Pak Tanenbaum, paling tidak terdiri atas super block, free space management, inode list, root directory, dan files.

Kedua adalah desain inodenya. Inode itu apa sih? Inode cuman sebuah struktur data yang menyimpan informasi mengenai sebuah file atau directory. Biasanya atribut yang dibutuhkan pada sebuah file antara lain

  • Nama file.
  • Panjang file.
  • Offset (tempat data dari file tersebut pada device)
  • Owner
  • Permission.
  • dan lain-lain

Pada Linux, kebutuhan di atas diatur oleh dua buah struktur data, yakni dentry dan inode. Tapi untuk tugas kuliah, sebenarnya keduanya bisa dibuat menjadi sebuah struktur data saja. Karena memang tidak usah mengurusi permission, locking, ownership, hardlink/softlink, dan lain-lain.

Ketiga adalah implementasi alokasi filenya. Menurut Pak Tanenbaum, ada dua macam implementasi alokasi. Yang pertama adalah contiguous, dan kedua adalah linked-list.

Untuk alokasi kontigu, data block akan dibagi ke dalam blok-blok kecil. Sebuah blok dapat berukuran 1kB, 2kB, dst. Sebuah file berukuran 50kB akan menempati 25 buah blok jika ukuran blok 2kB, atau 25 buah blok jika ukuran blok 1kB. Kalau sebuah file berukuran 51kB dengan blok berukuran 5kB, berarti file akan menempati 11 blok, dengan 1 blok terakhir hanya terpakai 1kB. Kelebihan alokasi ini adalah kecepatannya. Sebuah file dapat langsung dibaca karena beruntunan. Kekurangannya adalah dalam manajemen filenya. Ketika file-file ditambahkan dan dikurangkan, maka data block nantinya akan terdapat banyak sekali lubang-lubang. Untuk dapat menambahkan file lagi, nantinya filesystem harus mengetahui besar dari file yang ingin ditambahkan (entah itu dengan best fit atau first fit). Hal yang lebih menyusahkan lagi adalah ketika ingin mengubah-ubah isi file tersebut.

Alokasi linked-list mengatasi masalah di atas. Di dalam alokasi ini, setiap file dipecah-pecah ke dalam sebuah blok di mana setiap blok menyimpan alamat dari blok yang lain dan sisanya adalah sebagian data dari file tersebut. Blok-blok dalam satu file tidak harus diletakkan secara berurutan. Oleh karena itu alokasi file dapat menempati ruang mana pun di dalam data block.

Misalnya terdapat data block berukuran 1024kB dengan block size berukuran 2kB. Dengan kata lain dalam data block tersebut terdapat 2^5 atau 512 blok. Sebuah blok dapat dialamatkan dengan alamat sebesar 5 bit (atau digenapkan 8 bit/1 byte). Pada kasus ini, pada sebuah blok akan terdapat 1 byte sebagai alamat dari blok lain dan sisanya adalah data dari file tersebut. Kekurangan dari jenis ini adalah kelambatannya. Karena sebuah file terdiri dari blok-blok yang belum tentu sekuensial, maka pembacaan akan dilakukan secara lompat-lompat dari satu blok ke blok yang lain.

Yang keempat adalah bagaimana mengimplementasikan penyimpanan nama file serta atribut file. Atribut-atribut file biasanya ukurannya sudah pasti, sementara ada sebuah kebutuhan nama file yang tidak terbatas panjangnya yang menyebabkan penyimpanan nama file dilakukan secara khusus.

Yang paling mudah adalah membatasi nama file misal hanya 255 char (byte) 😀 Dengan demikian, sebuah entry yang menyimpan atribut file memiliki besar yang sama sehingga memudahkan penyimpanan.

Cara kedua, entry tersebut ditambahkan sebuah atribut yakni panjang entry. Jadi ketika sebuah entry dibaca, sistem operasi akan tahu berapa panjang entry tersebut sebelum menemukan entry yang lain.

Lalu ketiga, entry ditambahkan dengan alamat penyimpanan nama file, sehingga panjang semua entry akan seragam. Setiap cara memiliki kekurangan dan kelebihan masing-masing.

Yang kelima yang penting dalam tugas adalah bagaimana mengatur free space pada device. Terdapat dua buah cara yang dapat digunakan.

Pertama, dengan menggunakan linked-list.  Pada cara pertama ini sebuah blok yang kosong disimpan nomornya pada sebuah linked-list yang diletakkan pada sebuah blok. Misalkan ukuran blok adalah 1kB dengan nomor blok sebesar 32 bit. Sebuah blok dapat menyimpan sebanyak 255 nomor blok yang kosong dan 1 buah slot sebagai alamat blok lain yang digunakan untuk menyimpan alamat blok-blok kosong.

Cara kedua dengan menggunakan bitmap yakni dengan mewakilkan sebuah blok dengan satu buah bit. Blok yang kosong akan ditandai dengan 0 dan blok yang isi akan ditandai dengan 1. Untuk kasus yang sama, sebuah blok berukuran 1kB dapat menandai 8192 blok atau 8MB data.

Kalo soal teori-teorinya ada semua di buku Pak Tanenbaum….. Sekarang tinggal masalah IPCnya aja, hehehe. Gimana yaa….

semua gambar disadur dari buku Modern Operating System
sumber utama : ini.

3 thoughts on “Filesystem boong-boongan”

  1. Di awal-awal jadi dosen, saya sempat ngajar OS beberapa kali. Jadi ingat lagi…
    Simulasi seperti ini memang perlu untuk meningkatkan pemahaman. Fitur untuk defragmentasi juga menarik untuk disimulasikan….

Leave a Reply