Konsep Dasar
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 nonvolatile , sehingga kandungan di dalamnya tidak akan hilang
jika terjadi gagal listrik maupun 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 maupun bentuk objek) dan
data. Data dari berkas dapat bersifat numerik, alfabetik, alfanumerik, ataupun
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 tipe informasi yang dapat disimpan dalam berkas. Hal ini
disebabkan oleh struktur tertentu yang dimiliki oleh berkas, sesuai dengan
tipenya 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.
- Executab
le file;
adalah rangkaian code section yang dapat dibawa loader ke dalam
memori dan dieksekusi.
Atribut Pada Berkas
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, ataupun block
- 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-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 bersifat nonvolatile , sehingga keduanya harus disimpan pada sebuah
device dan baru dibawa bagian per bagian ke memori pada saat dibutuhkan.
Sebuah berkas adalah tipe 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
mengijinkan 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 virtual-memory systems . Hal
tersebut mengijinkan bagian dari berkas ditempatkan pada suatu alamat di virtual
memory . 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 virtual memory yang digunakan oleh
proses.
Pertimbangan utama dalam perancangan sistem berkas dan seluruh
sistem operasi, apakah sistem operasi harus mengenali dan mendukung tipe
berkas. Jika suatu sistem operasi mengenali tipe 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 tipe berkas
adalah menambahkan tipe berkas dalam nama berkas. Nama dibagi dua, nama dan
akhiran (ekstensi), biasanya dipisahkan dengan karakter titik. Sistem
menggunakan akhiran tersebut untuk mengindikasikan tipe berkas dan tipe 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 tipe dari berkas dapat menjadi petunjuk
aplikasi apa yang dapat mengoperasikannya.
Sistem UNIX tidak dapat menyediakan dukungan untuk akhiran
berkas karena menggunakan angka-angkaajaib yang disimpan di depan berkas untuk
mengenali tipe 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 tipe isi dari suatu berkas.
Struktur Berkas
Kita juga dapat menggunakan tipe 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