Seperti
yang telah kita ketahui, komputer dapat menyimpan informasi ke beberapa media
penyimpanan yang berbeda, seperti magnetic
disks, magnetic tapes,
dan optical disks. Agar
komputer dapat digunakan dengan nyaman, sistem operasi menyediakan sistem
penyimpanan dengan sistematika yang seragam. Sistem Operasi mengabstraksi
properti fisik dari media penyimpanannya dan mendefinisikan unit penyimpanan
logis, yaitu berkas. Berkas dipetakan ke media fisik oleh sistem operasi. Media
penyimpanan ini umumnya bersifat non-volatile,
sehingga kandungan di dalamnya tidak akan hilang jika terjadi gagal listrik mau
pun system reboot.
Berkas adalah kumpulan informasi berkait yang diberi nama dan direkam pada penyimpanan sekunder. Dari sudut pandang pengguna, berkas merupakan bagian terkecil dari penyimpanan logis, artinya data tidak dapat ditulis ke penyimpanan sekunder kecuali jika berada di dalam berkas. Biasanya berkas merepresentasikan program (baik source mau pun bentuk objek) dan data. Data dari berkas dapat bersifat numerik, alfabetik, alfanumerik, atau pun biner. Format berkas juga bisa bebas, misalnya berkas teks, atau dapat juga diformat pasti. Secara umum, berkas adalah urutan bit, byte, baris, atau catatan yang didefinisikan oleh pembuat berkas dan pengguna.
Informasi
dalam berkas ditentukan oleh pembuatnya. Ada banyak beragam jenis informasi
yang dapat disimpan dalam berkas. Hal ini disebabkan oleh struktur tertentu
yang dimiliki oleh berkas, sesuai dengan jenisnya masing-masing. Contohnya:
§ Text file; yaitu
urutan karakter yang disusun ke dalam baris-baris.
§ Source file; yaitu
urutan subroutine dan fungsi, yang nantinya akan
dideklarasikan.
§ Object file; merupakan
urutan byte yang diatur ke dalam blok-blok yang dikenali oleh linker dari sistem.
§ Executable file;
adalah rangkaian code section yang dapat dibawa loader ke dalam
memori dan dieksekusi.
Berkas
diberi nama, untuk kenyamanan bagi pengguna, dan untuk acuan bagi data yang
terkandung di dalamnya. Nama berkas biasanya berupa string atau karakter.
Beberapa sistem membedakan penggunaan huruf besar dan kecil dalam penamaan
sebuah berkas, sementara sistem yang lain menganggap kedua hal di atas
sama.Ketika berkas diberi nama, maka berkas tersebut akan menjadi mandiri
terhadap proses, pengguna, bahkan sistem yang membuatnya. Atribut berkas
terdiri dari:
§ Nama; merupakan
satu-satunya informasi yang tetap dalam bentuk yang bisa dibaca oleh manusia
(human-readable form)
§ Type; dibutuhkan untuk
sistem yang mendukung beberapa type berbeda
§ Lokasi; merupakan
pointer ke device dan ke lokasi berkas pada device tersebut
§ Ukuran (size); yaitu
ukuran berkas pada saat itu, baik dalam byte, huruf, atau pun blok
§ Proteksi; adalah
informasi mengenai kontrol akses, misalnya siapa saja yang boleh membaca,
menulis, dan mengeksekusi berkas
§ Waktu, tanggal dan identifikasi pengguna; informasi ini biasanya disimpan untuk:
1 . pembuatan berkas,
2 . modifikasi terakhir yang dilakukan pada berkas, dan
3 . penggunaan terakhir berkas.
Data
tersebut dapat berguna untuk proteksi, keamanan, dan monitoring penggunaan dari
berkas.
Informasi
tentang seluruh berkas disimpan dalam struktur direktori yang terdapat pada
penyimpanan sekunder. Direktori, seperti berkas, harus bersifatnon-volatile,
sehingga keduanya harus disimpan pada sebuah device dan baru dibawa bagian per bagian ke
memori pada saat dibutuhkan.
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.
Pertimbangan
utama dalam perancangan sistem berkas dan seluruh sistem operasi, apakah sistem
operasi harus mengenali dan mendukung jenis berkas. Jika suatu sistem operasi
mengenali jenis dari berkas, maka ia dapat mengoperasikan berkas tersebut.
Contoh apabila pengguna mencoba mencetak berkas yang merupakan kode biner dari
program yang pasti akan menghasilkan sampah, hal ini dapat dicegah apabila
sistem operasi sudah diberitahu bahwa berkas tersebut merupakan kode biner.
Teknik
yang umum digunakan dalam implementasi jenis berkas adalah menambahkan jenis
berkas dalam nama berkas. Nama dibagi dua, nama dan akhiran (ekstensi),
biasanya dipisahkan dengan karakter titik. Sistem menggunakan akhiran tersebut
untuk mengindikasikan jenis berkas dan jenis operasi yang dapat dilakukan pada
berkas tersebut. Sebagai contoh hanya berkas yang berakhiran .bat, .exe atau .com yang bisa dijalankan (eksekusi).
Program aplikasi juga menggunakan akhiran tersebut untuk mengenal berkas yang
dapat dioperasikannya. Akhiran ini dapat ditimpa atau diganti jika
diperbolehkan oleh sistem operasi.
Beberapa
sistem operasi menyertakan dukungan terhadap akhiran, tetapi beberapa
menyerahkan kepada aplikasi untuk mengatur akhiran berkas yang digunakan,
sehingga jenis dari berkas dapat menjadi petunjuk aplikasi apa yang dapat
mengoperasikannya.
Sistem
UNIX tidak dapat menyediakan dukungan untuk akhiran berkas karena menggunakan
angka ajaib yang disimpan di depan berkas untuk mengenali jenis berkas. Tidak
semua berkas memiliki angka ini, jadi sistem tidak bisa bergantung pada
informasi ini. Tetapi UNIX memperbolehkan akhiran berkas tetapi hal ini tidak
dipaksakan atau tergantung sistem operasi, kebanyakan hanya untuk membantu
pengguna mengenali jenis isi dari suatu berkas.
Jenis
berkas
|
Akhiran
|
Fungsi
|
executable
|
exe,
com, bat, bin
|
program
yang siap dijalankan
|
objek
|
obj,
o
|
bahasa
mesin, kode terkompilasi
|
kode
asal (source code)
|
c,
cc, pas, java, asm, a
|
kode
asal dari berbagai bahasa
|
batch
|
bat,
sh
|
perintah
pada shell
|
text
|
txt,
doc
|
data
text, document
|
pengolah
kata
|
wpd,
tex, doc
|
format
jenis pengolah data
|
library
|
lib,
a, DLL
|
library
untuk rutin program
|
print,
gambar
|
ps,
dvi, gif
|
format
aSCII atau biner untuk dicetak
|
archive
|
arc,
zip, tar
|
beberapa
berkas yang dikumpulkan menjadi satu berkas. Terkadang dimampatkan untuk
penyimpanan
|
Kita
juga dapat menggunakan jenis berkas untuk mengidentifikasi struktur dalam dari
berkas. Berkas berupa source dan objek memiliki struktur yang cocok dengan
harapan program yang membaca berkas tersebut. Suatu berkas harus memiliki
struktur yang dikenali oleh sistem operasi. Sebagai contoh, sistem operasi
menginginkan suatu berkas yang dapat dieksekusi memiliki struktur tertentu agar
dapat diketahui dimana berkas tersebut akan ditempatkan di memori dan di mana
letak instruksi pertama berkas tersebut. Beberapa sistem operasi mengembangkan
ide ini sehingga mendukung beberapa struktur berkas, dengan beberapa operasi
khusus untuk memanipulasi berkas dengan struktur tersebut.
Kelemahan
memiliki dukungan terhadap beberapa struktur berkas adalah: Ukuran dari sistem
operasi dapat menjadi besar, jika sistem operasi mendefinisikan lima struktur
berkas yang berbeda maka ia perlu menampung kode untuk yang diperlukan untuk
mendukung semuanya. Setiap berkas harus dapat menerapkan salah satu struktur
berkas tersebut. Masalah akan timbul ketika terdapat aplikasi yang membutuhkan
struktur informasi yang tidak didukung oleh sistem operasi tersebut.
Beberapa
sistem operasi menerapkan dan mendukung struktur berkas sedikit struktur
berkas. Pendekatan ini digunakan pada MS-DOS dan UNIX. UNIX menganggap setiap
berkas sebagai urutan 8-bit byte, tidak ada interpretasi sistem operasi
terhadap dari bit-bit ini. Skema tersebut menawarkan fleksibilitas tinggi
tetapi dukungan yang terbatas. Setiap aplikasi harus menambahkan sendiri kode
untuk menerjemahkan berkas masukan ke dalam struktur yang sesuai. Walau
bagaimana pun juga sebuah sistem operasi harus memiliki minimal satu struktur
berkas yaitu untuk berkas yang dapat dieksekusi sehingga sistem dapat memuat
berkas dalam memori dan menjalankannya.
Sangat
berguna bagi sistem operasi untuk mendukung struktur berkas yang sering
digunakan karena akan menghemat pekerjaan pemrogram. Terlalu sedikit struktur
berkas yang didukung akan mempersulit pembuatan program, terlalu banyak akan
membuat sistem operasi terlalu besar dan pemrogram akan
bingung.
Menempatkan
batas dalam berkas dapat menjadi rumit bagi sistem operasi. Sistem disk
biasanya memiliki ukuran blok yang sudah ditetapkan dari ukuran sektor. Semua
I/O dari disk dilakukan dalam satuan blok dan semua blok ('physical record')
memiliki ukuran yang sama. Tetapi ukuran dari 'physical record' tidak
akan sama dengan ukuran 'logical record'. Ukuran dari 'logical record'
akan bervariasi. Memuatkan beberapa 'logical record' ke dalam 'physical
record' merupakan solusi umum dari masalah ini.
Sebagai
contoh pada sistem operasi UNIX, semua berkas didefinisikan sebagai kumpulan
byte. Setiap byte dialamatkan menurut batasnya dari awal berkas sampai akhir.
Pada kasus ini ukuran 'logical record' adalah 1 byte. Sistem berkas
secara otomatis memuatkan byte-byte tersebut kedalam blok pada disk.
Ukuran
'logical record', ukuran blok pada disk, dan teknik untuk memuatkannya
menjelaskan berapa banyak 'logical record' dalam tiap-tiap 'physical
record'. Teknik memuatkan dapat dilakukan oleh aplikasi pengguna atau oleh
sistem operasi.
Berkas
juga dapat dianggap sebagai urutan dari beberapa blok pada disk. Konversi dari
'logical record' ke 'physical record' merupakan masalah perangkat lunak.
Tempat
pada disk selalu berada pada blok, sehingga beberapa bagian dari blok terakhir
yang ditempati berkas dapat terbuang. Jika setiap blok berukuran 512 byte,
sebuah berkas berukuran 1.949 byte akan menempati empat blok (2.048 byte) dan
akan tersisa 99 byte pada blok terakhir. Byte yang terbuang tersebut
dipertahankan agar ukuran dari unit tetap blok bukan byte disebut fragmentasi
dalam disk. Semua sistem berkas pasti mempunyai fragmentasi dalam disk, semakin
besar ukuran blok akan semakin besar fragmentasi dalam disknya.
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.

Tidak ada komentar:
Posting Komentar