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:
pembuatan berkas,
modifikasi terakhir yang dilakukan pada
berkas, dan
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