Sebuah
berkas adalah jenis data abstrak. Untuk mendefinisikan berkas secara
tepat, kita perlu melihat operasi yang dapat dilakukan pada berkas
tersebut. Sistem operasi menyediakan
system calls untuk membuat,
membaca, menulis, mencari, menghapus, dan sebagainya. Berikut dapat kita
lihat apa yang harus dilakukan sistem operasi pada keenam operasi dasar
pada berkas.
•
Membuat sebuah berkas: Ada dua cara dalam membuat berkas.
Pertama, tempat baru di dalam sistem berkas harus di alokasikan untuk
berkas yang akan dibuat. Kedua, sebuah direktori harus mempersiapkan
tempat untuk berkas baru, kemudian direktori tersebut akan mencatat nama
berkas dan lokasinya pada sistem berkas.
•
Menulis pada sebuah berkas: Untuk menulis pada berkas, kita menggunakan
system call beserta
nama berkas yang akan ditulisi dan informasi apa yang akan ditulis pada
berkas. Ketika diberi nama berkas, sistem mencari ke direktori untuk
mendapatkan lokasi berkas. Sistem juga harus menyimpan penunjuk tulis
pada berkas dimana penulisan berikut akan ditempatkan. Penunjuk tulis
harus diperbaharui setiap terjadi penulisan pada berkas.
•
Membaca sebuah berkas: Untuk dapat membaca berkas, kita menggunakan
system call beserta
nama berkas dan di blok memori mana berkas berikutnya diletakkan. Sama
seperti menulis, direktori mencari berkas yang akan dibaca, dan sistem
menyimpan penunjuk baca pada berkas dimana pembacaan berikutnya akan
terjadi. Ketika pembacaan dimulai, penunjuk baca harus
diperbaharui.Sehingga secara umum, suatu berkas ketika sedang dibaca
atau ditulis, kebanyakan sistem hanya mempunyai satu penunjuk, baca dan
tulis menggunakan penunjuk yang sama, hal ini menghemat tempat dan
mengurangi kompleksitas sistem.
•
Menempatkan kembali sebuah berkas: Direktori yang
bertugas untuk mencari berkas yang bersesuaian, dan mengembalikan lokasi
berkas pada saat itu. Menempatkan berkas tidak perlu melibatkan proses
I/O. Operasi sering disebut pencarian berkas.
•
Menghapus sebuah berkas: Untuk menghapus berkas kita
perlu mencari berkas tersebut di dalam direktori. Setelah ditemukan
kita membebaskan tempat yang dipakai berkas tersebut
(sehingga dapat digunakkan oleh berkas lain) dan menghapus
tempatnya di direktori.
•
Memendekkan berkas: Ada suatu keadaan dimana pengguna
menginginkan atribut dari berkas tetap sama tetapi ingin menghapus isi
dari berkas tersebut. Fungsi ini mengizinkan semua atribut tetap sama
tetapi panjang berkas menjadi nol, hal ini lebih baik dari pada memaksa
pengguna untuk menghapus berkas dan membuatnya lagi.
Enam operasi dasar ini sudah mencakup operasi minimum yang
di butuhkan. Operasi umum lainnya adalah menyambung informasi baru di
akhir suatu berkas, mengubah nama suatu berkas, dan lain-lain.
Operasi dasar ini kemudian digabung untuk melakukan operasi lainnya.
Sebagai contoh misalnya kita menginginkan salinan dari suatu berkas,
atau menyalin berkas ke peralatan I/O lainnya seperti
printer, dengan cara membuat berkas lalu membaca dari berkas lama dan menulis ke berkas yang baru.
Hampir semua operasi pada berkas melibatkan pencarian berkas pada
direktori. Untuk menghindari pencarian yang lama, kebanyakan sistem akan
membuka berkas apabila berkas tersebut digunakan secara aktif. Sistem
operasi akan menyimpan tabel kecil yang berisi informasi semua
berkas yang dibuka yang disebut ”tabel berkas terbuka”. Ketika
berkas sudah tidak digunakan lagi dan sudah ditutup oleh yang
menggunakan, maka sistem operasi mengeluarkan berkas tersebut dari tabel
berkas terbuka.
Beberapa sistem terkadang langsung membuka berkas ketika berkas
tersebut digunakan dan otomatis menutup berkas tersebut jika program
atau pemakainya dimatikan. Tetapi pada sistem lainnya terkadang
membutuhkan pembukaan berkas secara tersurat dengan
system call (
open) sebelum berkas dapat digunakan.
Implementasi dari buka dan tutup berkas dalam lingkungan
dengan banyak perngguna seperti UNIX, lebih rumit. Dalam sistem seperti
itu pengguna yang membuka berkas mungkin lebih dari satu dan pada waktu
yang hampir bersamaan. Umumnya sistem operasi menggunakan tabel
internal dua level. Ada tabel yang mendata proses mana saja yang membuka
berkas tersebut, kemudian tabel tersebut menunjuk ke tabel yang lebih
besar yang berisi informasi yang berdiri sendiri seperti lokasi berkas
pada disk, tanggal akses dan ukuran berkas. Biasanya tabel tersebut
juga memiliki data berapa banyak proses yang membuka berkas tersebut.
Jadi, pada dasarnya ada beberapa informasi yang terkait dengan pembukaan berkas yaitu:
•
Penunjuk Berkas: Pada sistem yang tidak mengikutkan batas
berkas sebagai bagian dari system call baca dan tulis, sistem
tersebut harus mengikuti posisi dimana terakhir proses baca dan
tulis sebagai penunjuk. Penunjuk ini unik untuk setiap operasi pada
berkas, maka dari itu harus disimpan terpisah dari atribut berkas yang
ada pada disk.
•
Penghitung berkas yang terbuka: Setelah
berkas ditutup, sistem harus mengosongkan kembali tabel berkas
yang dibuka yang digunakan oleh berkas tadi atau tempat di tabel akan
habis. Karena mungkin ada beberapa proses yang membuka berkas secara
bersamaan dan sistem harus menunggu sampai berkas tersebut ditutup
sebelum mengosongkan tempatnya di tabel. Penghitung ini mencatat
banyaknya berkas yang telah dibuka dan ditutup, dan menjadi nol
ketika yang terakhir membaca berkas menutup berkas tersebut barulah
sistem dapat mengosongkan tempatnya di tabel.
•
Lokasi berkas pada disk: Kebanyakan operasi pada
berkas memerlukan sistem untuk mengubah data yang ada pada berkas.
Informasi mengenai lokasi berkas pada disk disimpan di memori agar
menghindari banyak pembacaan pada disk untuk setiap operasi.
Beberapa sistem operasi menyediakan fasilitas untuk memetakan berkas
ke dalam memori pada sistem memori virtual. Hal tersebut mengizinkan
bagian dari berkas ditempatkan pada suatu alamat di memori virtual.
Operasi baca dan tulis pada memori dengan alamat tersebut dianggap
sebagai operasi baca dan tulis pada berkas yang ada di alamat tersebut.
Menutup berkas mengakibatkan semua data yang ada pada alamat memori
tersebut dikembalikan ke disk dan dihilangkan dari memori
virtual yang digunakan oleh proses.
Penggunaan Berkas Secara Bersama-sama
Konsistensi semantik adalah parameter yang penting untuk evaluasi
sistem berkas yang mendukung penggunaan berkas secara bersama. Hal ini
juga merupakan karakterisasi dari sistem yang menspesifikasi semantik
dari banyak pengguna yang mengakses berkas secara bersama-sama. Lebih
khusus, semantik ini seharusnya dapat menspesifikasi kapan
suatu modifikasi suatu data oleh satu pengguna dapat diketahui oleh pengguna lain.
Terdapat beberapa macam konsistensi semantik. Di bawah ini akan dijelaskan kriteria yang digunakan dalam UNIX.
Berkas sistem UNIX mengikuti konsistensi semantik:
• Penulisan ke berkas yang dibuka oleh pengguna dapat
dilihat langsung oleh pengguna lain yang sedang mengakses ke berkas
yang sama.
• Terdapat bentuk pembagian dimana pengguna membagi pointer lokasi
ke berkas tersebut. Sehingga perubahan pointer satu pengguna akan
mempengaruhi semua pengguna
sharingnya