Program harus membaca dan menulis berkas, dan kadang kala
juga harus membuat dan menghapus berkas.
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 system 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 Masukan/Keluaran. 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 Masukan/Keluaran 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 system 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.
0 komentar:
Posting Komentar