Anda di halaman 1dari 84

SISTEM BERKAS

7.1. Pengertian
Sistem berkas merupakan mekanisme penyimpanan on-line serta untuk akses, baik data
maupun program yang berada dalam Sistem Operasi. Terdapat dua bagian penting dalam
sistem berkas, yaitu:

kumpulan berkas, sebagai tempat penyimpanan data, serta

struktur direktori, yang mengatur dan menyediakan informasi mengenai seluruh


berkas dalam sistem.

Pada bab ini, akan dibahas tentang berbagai aspek dari berkas dan struktur, cara
menangani proteksi berkas, cara mengalokasikan ruang pada disk, melacak lokasi data,
serta meng-interface bagian-bagian lain dari sistem operasi ke penyimpanan sekunder.

7.2. Berkas
7.2.1. 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 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.

7.2.2. 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, 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 bersifat nonvolatile, sehingga keduanya harus disimpan pada sebuah device dan baru dibawa bagian
per bagian ke memori pada saat dibutuhkan.

7.2.3. Operasi Pada 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 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.

7.2.4. Jenis Berkas


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.
Tabel 5-1. Tabel Jenis 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

7.2.5. Struktur Berkas


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 bitbit 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.

7.2.6. Struktur Berkas Pada Disk


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.

7.2.7. 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.

7.3. Metode Akses


7.3.1. Akses Secara Berurutan
Ketika digunakan, informasi penyimpanan berkas harus dapat diakses dan dibaca ke
dalam memori komputer. Beberapa sistem hanya menyediakan satu metode akses untuk
berkas. Pada sistem yang lain, contohnya IBM, terdapat banyak dukungan metode akses
yang berbeda. Masalah pada sistem tersebut adalah memilih yang mana yang tepat
untuk digunakan pada satu aplikasi tertentu.
Sequential Access merupakan metode yang paling sederhana. Informasi yang disimpan
dalam berkas diproses berdasarkan urutan. Operasi dasar pada suatu berkas adalah
tulis dan baca. Operasi baca membaca berkas dan meningkatkan pointer berkas selama
di jalur lokasi I/O. Operasi tulis menambahkan ke akhir berkas dan meningkatkan ke
akhir berkas yang baru. Metode ini didasarkan pada tape model sebuah berkas, dan
dapat bekerja pada kedua jenis device akses (urut mau pun acak).

7.3.2. Akses Langsung

Direct Access merupakan metode yang membiarkan program membaca dan menulis
dengan cepat pada berkas yang dibuat dengan fixed-length logical order tanpa adanya
urutan. Metode ini sangat berguna untuk mengakses informasi dalam jumlah besar.
Biasanya database memerlukan hal seperti ini. Operasi berkas pada metode ini harus
dimodifikasi untuk menambahkan nomor blok sebagai parameter.
Pengguna menyediakan nomor blok ke sistem operasi biasanya sebagai nomor blok
relatif, yaitu indeks relatif terhadap awal berkas. Penggunaan nomor blok relatif bagi
sistem operasi adalah untuk memutuskan lokasi berkas diletakkan dan membantu
mencegah pengguna dari pengaksesan suatu bagian sistem berkas yang bukan bagian
pengguna tersebut.

7.3.3. Akses Dengan Menggunakan Indeks


Metode ini merupakan hasil dari pengembangan metode direct access. Metode ini
memasukkan indeks untuk mengakses berkas. Jadi untuk mendapatkan suatu
informasi suatu berkas, kita mencari dahulu di indeks, lalu menggunakan pointer untuk
mengakses berkas dan mendapatkan informasi tersebut. Namun metode ini memiliki
kekurangan, yaitu apabila berkas-berkas besar, maka indeks berkas tersebut akan
semakin besar. Jadi solusinya adalah dengan membuat 2 indeks, indeks primer dan
indeks sekunder. Indeks primer memuat pointer ke indeks sekunder, lalu indeks
sekunder menunjuk ke data yang dimaksud.

7.4. Struktur Direktori


7.4.1. Operasi Pada Direktori
Operasi-operasi yang dapat dilakukan pada direktori adalah:
1. Mencari berkas, kita dapat menemukan sebuah berkas didalam sebuah struktur
direktori. Karena berkas-berkas memiliki nama simbolik dan nama yang sama dapat
mengindikasikan keterkaitan antara setiap berkas-berkas tersebut, mungkin kita
berkeinginan untuk dapat menemukan seluruh berkas yang nama-nama berkas
membentuk pola khusus.
2. Membuat berkas, kita dapat membuat berkas baru dan menambahkan berkas
tersebut kedalam direktori.
3. Menghapus berkas, apabila berkas sudah tidak diperlukan lagi, kita dapat
menghapus berkas tersebut dari direktori.
4. Menampilkan isi direktori, kita dapat menampilkan seluruh berkas dalam direktori,
dan kandungan isi direktori untuk setiap berkas dalam daftar tersebut.
5. Mengganti nama berkas, karena nama berkas merepresentasikan isi dari berkas
kepada user, maka user dapat merubah nama berkas ketika isi atau penggunaan
berkas berubah. Perubahan nama dapat merubah posisi berkas dalam direktori.
6. Melintasi sistem berkas, ini sangat berguna untuk mengakses direktori dan berkas
didalam struktur direktori.

7.4.2. Direktori Satu Tingkat


Ini adalah struktur direktori yang paling sederhana. Semua berkas disimpan di dalam
direktori yang sama. Struktur ini tentunya memiliki kelemahan jika jumlah berkasnya
bertambah banyak, karena tiap berkas mesti memiliki nama yang unik.

7.4.3. Direktori Dua Tingkat


Kelemahan yang ada pada direktori tingkat satu dapat diatas pada sistem direktori dua
tingkat. Caranya ialah dengan membuat direktori secara terpisah. Pada direktori tingkat
dua, setiap pengguna memiliki direktori berkas sendiri (UFD). Setiap UFD memiliki
struktur yang serupa, tapi hanya berisi berkas-berkas dari seorang pengguna.
Ketika seorang pengguna login, master direktori berkas (MFD) dicari. Isi dari MFD adalah
indeks dari nama pengguna atau nomor rekening, dan tiap entri menunjuk pada UFD
untuk pengguna tersebut. Ketika seorang pengguna ingin mengakses suatu berkas,
hanya UFD-nya sendiri yang diakses. Jadi pada setiap UFD yang berbeda, boleh terdapat
nama berkas yang sama.

7.4.4. Direktori Dengan Struktur Tree


Struktur direktori dua tingkat bisa dikatakan sebagai pohon dua tingkat. Sebuah
direktori dengan struktur pohon memiliki sejumlah berkas atau subdirektori lagi. Pada
penggunaan yang normal setiap pengguna memiliki direktorinya sendiri-sendiri. Selain
itu pengguna tersebut dapat memiliki subdirektori sendiri lagi.
Dalam struktur ini dikenal dua istilah, yaitu path relatif dan path mutlak. Path relatif
adalah path yang dimulai dari direktori yang aktif. Sedangkan path mutlak adalah path
yang dimulai dari direktori akar.

7.4.5. Direktori Dengan Struktur Acyclic-Graph


Jika ada sebuah berkas yang ingin diakses oleh dua pengguna atau lebih, maka struktur
ini menyediakan fasilitas "sharing", yaitu penggunaan sebuah berkas secara bersamasama. Hal ini tentunya berbeda dengan struktur pohon, dimana pada struktur tersebut
penggunaan berkas atau direktori secara bersama-sama dilarang. Pada struktur "AcyclicGraph", penggunaan berkas atau direktori secara bersama-sama diperbolehkan. Tapi
pada umumnya struktur ini mirip dengan struktur pohon.

7.4.6. Direktori Dengan Struktur Graph


Masalah yang sangat utama pada struktur direktori "Acyclic-Graph" adalah kemampuan
untuk memastikan tidak-adanya siklus. Jika pada struktur 2 tingkat direktori, seorang
pengguna dapat membuat subdirektori, maka akan kita dapatkan direktori dengan
struktur pohon. Sangatlah mudah untuk tetap mempertahankan sifat pohon setiap kali

ada penambahan berkas atau subdirektori pada direktori dengan struktur pohon. Tapi
jika kita menambahkan sambungan pada direktori dengan struktur pohon, maka akan
kita dapatkan direktori dengan struktur graph sederhana.
Proses pencarian pada direktori dengan struktur "Acyclic-Graph", apabila tidak ditangani
dengan baik (algoritma tidak bagus) dapat menyebabkan proses pencarian yang berulang
dan menghabiskan banyak waktu. Oleh karena itu, diperlukan skema pengumpulan
sampah ("garbage-collection scheme"). Skema ini menyangkut memeriksa seluruh sistem
berkas dengan menandai tiap berkas yang dapat diakses. Kemudian mengumpulkan apa
pun yang tidak ditandai sebagai tempat kosong. Hal ini tentunya dapat menghabiskan
banyak waktu.

7.5. Proteksi Berkas


Ketika kita menyimpan informasi dalam sebuah sistem komputer, ada dua hal yang
harus menjadi perhatian utama kita. Hal tersebut adalah:
1. Reabilitas dari sebuah sistem
Maksud dari reabilitas sistem adalah kemampuan sebuah sistem untuk melindungi
informasi yang telah disimpan agar terhindar dari kerusakan, dalam hal ini adalah
perlindungan secara fisik pada sebuah berkas. Reabilitas sistem dapat dijaga dengan
membuat cadangan dari setiap berkas secara manual atau pun otomatis, sesuai
dengan layanan yang dari sebuah sistem operasi. Reabilitas Sistem akan dibahas
lebih lanjut pada Bagian 6.10.
2. Proteksi (Perlindungan) terhadap sebuah berkas
Perlindungan terhadap berkas dapat dilakukan dengan berbagai macam cara. Pada
bagian ini, kita akan membahas secara detil mekanisme yang diterapkan dalam
melindungi sebuah berkas.

7.5.1. Tipe Akses Pada Berkas


Salah satu cara untuk melindungi berkas dalam komputer kita adalah dengan
melakukan pembatasan akses pada berkas tersebut. Pembatasan akses yang
dimaksudkan adalah kita, sebagai pemilik dari sebuah berkas, dapat menentukan
operasi apa saja yang dapat dilakukan oleh pengguna lain terhadap berkas tersebut.
Pembatasan ini berupa sebuah permission atau pun not permitted operation, tergantung
pada kebutuhan pengguna lain terhadap berkas tersebut. Di bawah ini adalah beberapa
operasi berkas yang dapat diatur aksesnya:
1. Read: Membaca dari berkas
2. Write: Menulis berkas
3. Execute: Meload berkas kedalam memori untuk dieksekusi.
4. Append: Menambahkan informasi kedalam berkas di akhir berkas.

5. Delete: Menghapus berkas.


6. List: Mendaftar properti dari sebuah berkas.
7. Rename: Mengganti nama sebuah berkas.
8. Copy: Menduplikasikan sebuah berkas.
9. Edit: Mengedit sebuah berkas.
Selain operasi-operasi berkas diatas, perlindungan terhadap berkas dapat dilakukan
dengan mekanisme yang lain. Namun setiap mekanisme memiliki kelebihan dan
kekurangan. Pemilihan mekanisme sangatlah tergantung pada kebutuhan dan spesifikasi
sistem.

7.5.2. Akses List dan Group


Hal yang paling umum dari sistem proteksi adalah membuat akses tergantung pada
identitas pengguna yang bersangkutan. Implementasi dari akses ini adalah dengan
membuat daftar akses yang berisi keterangan setiap pengguna dan keterangan akses
berkas dari pengguna yang bersangkutan. Daftar akses ini akan diperiksa setiap kali
seorang pengguna meminta akses ke sebuah berkas. Jika pengguna tersebut memiliki
akses yang diminta pada berkas tersebut, maka diperbolehkan untuk mengakses berkas
tersebut. Proses ini juga berlaku untuk hal yang sebaliknya. Akses pengguna terhadap
berkas akan ditolak, dan sistem operasi akan mengeluarkan peringatan Protection
Violation.
Masalah baru yang timbul adalah panjang dari daftar akses yang harus dibuat. Seperti
telah disebutkan, kita harus mendaftarkan semua pengguna dalam daftar akses tersebut
hanya untuk akses pada satu berkas saja. Oleh karena itu, teknik ini mengakibatkan 2
konsekuensi yang tidak dapat dihindarkan:
1. Pembuatan daftar yang sangat panjang ini dapat menjadi pekerjaan yang sangat
melelahkan sekaligus membosankan, terutama jika jumlah pengguna dalam sistem
tidak dapat diketahui secara pasti.
2. Manajemen ruang harddisk yang lebih rumit, karena ukuran sebuah direktori dapat
berubah-ubah, tidak memiliki ukuran yang tetap.
Kedua konsekuensi diatas melahirkan sebuah teknik daftar akses yang lebih singkat.
Teknik ini mengelompokkan pengguna berdasarkan tiga kategori:
1. Owner: User yang membuat berkas.
2. Group: Sekelompok pengguna yang memiliki akses yang sama terhadap sebuah
berkas, atau men-share sebuah berkas.
3. Universe: Seluruh pengguna yang terdapat dalam sistem komputer.
Dengan adanya pengelompokkan pengguna seperti ini, maka kita hanya membutuhkan
tiga field untuk melindungi sebuah berkas. Field ini diasosiasikan dengan 3 buah bit
untuk setiap kategori. Dalam sistem UNIX dikenal bit rwx dengan bit r untuk mengontrol
akses baca, bit w sebagai kontrol menulis dan bit x sebagai bit kontrol untuk

pengeksekusian. Setiap field dipisahkan dengan field separator. Dibawah ini adalah
contoh dari sistem proteksi dengan daftar akses pada sistem UNIX.
Tabel 5-2. Contoh sistem daftar akses pada UNIX
drwx

rwx

rwx

owner group universe

pbg

staf

512

group owner ukuran

Apr 16

bekas.txt

waktu

nama
berkas

7.5.3. Pendekatan Sistem Proteksi yang Lain


Sistem proteksi yang lazim digunakan pada sistem komputer selain diatas adalah dengan
menggunakan password (kata sandi) pada setiap berkas. Beberapa sistem operasi
mengimplementasikan hal ini bukan hanya pada berkas, melainkan pada direktori.
Dengan sistem ini, sebuah berkas tidak akan dapat diakses selain oleh pengguna yang
telah mengetahui password untuk berkas tersebut. Akan tetapi, masalah yang muncul
dari sistem ini adalah jumlah password yang harus diingat oleh seorang pengguna untuk
mengakses berkas dalam sebuah sistem operasi. Masalah yang lain adalah keamanan
password itu sendiri. Jika hanya satu password yang digunakan, maka kebocoran
password tersebut merupakan malapetaka bagi pengguna yang bersangkutan. Sekali
lagi, maka kita harus menggunakan password yang berbeda untuk setiap tingkatan yang
berbeda.

7.6. Struktur Sistem Berkas


Disk menyediakan sebagian besar tempat penyimpanan dimana sistem berkas dikelola
dikelola. Untuk meningkatkan efisiensi I/O, pengiriman data antara memori dan disk
dilakukan dalam setiap blok. Setiap blok merupakan satu atau lebih sektor. Setiap disk
memiliki ukuran yang berbeda-beda, biasanya berukuran 512 bytes. Disk memiliki dua
karakteristik penting yang menjadikan disk sebagai media yang tepat untuk menyimpan
berbagai macam berkas, yaitu:

Disk tersebut dapat ditulis ulang di disk tersebut, hal ini memungkinkan untuk
membaca, memodifikasi, dan menulis di disk tersebut.

Dapat diakses langsung ke setiap blok di disk. Hal ini memudahkan untuk
mengakses setiap berkas baik secara berurut mau pun tidak berurut, dan berpindah
dari satu berkas ke berkas lain dengan hanya mengangkat head disk dan menunggu
disk berputar.

7.6.1. Organisasi Sistem Berkas


Sistem operasi menyediakan sistem berkas agar data mudah disimpan, diletakkan dan
diambil kembali dengan mudah. Terdapat dua masalah desain dalam membangun suatu
sistem berkas. Masalah pertama adalah definisi dari sistem berkas. Hal ini mencakup
definisi berkas dan atributnya, operasi ke berkas, dan struktur direktori dalam

mengorganisasikan berkas-berkas. Masalah kedua adalah membuat algoritma dan


struktur data yang memetakan struktur logikal sistem berkas ke tempat penyimpanan
sekunder. Pada dasarnya sistem berkas tersusun atas beberapa tingkatan, yaitu (dari
yang terendah):

I/O control, terdiri atas driver device dan interrupt handler. Driver device adalah
perantara komunikasi antara sistem operasi dengan perangkat keras.

Basic file system, diperlukan untuk mengeluarkan perintah generik ke device driver
untuk baca dan tulis pada suatu blok dalam disk.

File-organization module, informasi tentang alamat logika dan alamat fisik dari
berkas tersebut.

Modul ini juga mengatur sisa disk dengan melacak alamat yang belum dialokasikan
dan menyediakan alamat tersebut saat user ingin menulis berkas ke dalam disk.

Logical file system, tingkat ini berisi informasi tentang simbol nama berkas, struktur
dari direktori, dan proteksi dan sekuriti dari berkas tersebut.

Gambar 7.1. Lapisan pada sistem berkas.

7.6.2. Mounting Sistem Berkas


Seperti halnya sebuah berkas yang harus dibuka terlebih dahulu sebelum digunakan,
sistem berkas harus di mount terlebih dahulu sebelum sistem berkas tersebut siap
untuk memproses dalam sistem. Sistem operasi diberikan sebuah alamat mounting
(mount point) yang berisi nama device yang bersangkutan dan lokasi dari device tersebut.

7.7. Metode Alokasi Berkas


Kemudahan dalam mengakses langsung suatu disk memberikan fleksibilitas dalam

mengimplementasikan sebuah berkas. Masalah utama dalam implementasi adalah


bagaimana mengalokasikan berkas-berkas ke dalam disk, sehingga disk dapat terutilisasi
dengan efektif dan berkas dapat diakses dengan cepat. Ada tiga metode utama, menurut
buku "Applied Operating System Concepts: First Edition" oleh Avi Silberschatz, Peter
Galvin dan Greg Gagne untuk mengalokasi ruang disk yang digunakan secara luas yaitu,
contiguous, linked, dan indexed.

7.7.1. Alokasi Secara Berdampingan (Contiguous Allocation)


Metode ini menempatkan setiap berkas pada satu himpunan blok yang berurut di dalam
disk. Alamat disk menyatakan sebuah urutan linier. Dengan urutan linier ini maka head
disk hanya bergerak jika mengakses dari sektor terakhir suatu silinder ke sektor pertama
silinder berikutnya. Waktu pencarian (seek time) dan banyak disk seek yang dibutuhkan
untuk mengakses berkas yang di alokasi secara berdampingan ini sangat minimal.
Contoh dari sistem operasi yang menggunakan contiguous allocation adalah IBM VM/
CMS karena pendekatan ini menghasilkan performa yang baik.
Contiguous allocation dari suatu berkas diketahui melalui alamat dan panjang disk
(dalam unit blok) dari blok pertama. Jadi, misalkan ada berkas dengan panjang n blok
dan mulai dari lokasi b maka berkas tersebut menempati blok b, b+1, b+2, ..., b+n-1.
Direktori untuk setiap berkas mengindikasikan alamat blok awal dan panjang area yang
dialokasikan untuk berkas tersebut. Terdapat dua macam cara untuk mengakses berkas
yang dialokasi dengan metode ini, yaitu:

Sequential access, sistem berkas mengetahui alamat blok terakhir dari disk dan
membaca blok berikutnya jika diperlukan.

Direct access, untuk akses langsung ke blok i dari suatu berkas yang dimulai pada
blok b, dapat langsung mengakses blok b+i.

Kesulitan dari metode alokasi secara berdampingan ini adalah menemukan ruang untuk
berkas baru. Masalah pengalokasian ruang disk dengan metode ini merupakan aplikasi
masalah dari dynamic storage-allocation (alokasi tempat penyimpanan secara dinamik),
yaitu bagaimana memenuhi permintaan ukuran n dari daftar ruang kosong. Strategistrategi yang umum adalah first fit dan best fit. Kedua strategi tersebut mengalami
masalah fragmentasi eksternal, dimana jika berkas dialokasi dan dihapus maka ruang
kosong disk terpecah menjadi kepingan-kepingan kecil. Hal ini akan menjadi masalah
ketika banyak kepingan kecil tidak dapat memenuhi permintaan karena kepingankepingan kecil tidak cukup besar untuk menyimpan berkas, sehingga terdapat banyak
ruang yang terbuang.
Masalah yang lain adalah menentukan berapa banyak ruang yang diperlukan untuk
suatu berkas. Ketika berkas dibuat, jumlah dari ruang berkas harus ditentukan dan
dialokasikan. Jika ruang yang dialokasikan terlalu kecil maka berkas tidak dapat
diperbesar dari yang telah dialokasikan. Untuk mengatasi hal ini ada dua kemungkinan.
Pertama, program pengguna dapat diakhiri dengan pesan error yang sesuai. Lalu,
pengguna harus mengalokasikan tambahan ruang dan menjalankan programnya lagi,
tetapi hal ini cost yang dihasilkan lebih mahal. Untuk mengatasinya, pengguna dapat
melakukan estimasi yang lebih terhadap ruang yang harus dialokasikan pada suatu

berkas tetapi hal ini akan membuang ruang disk.


Kemungkinan yang kedua adalah mencari ruang kosong yang lebih besar, lalu menyalin
isi dari berkas ke ruang yang baru dan mengkosongkan ruang yang sebelumnya. Hal ini
menghabiskan waktu yang cukup banyak. Walaupun jumlah ruang yang diperlukan
untuk suatu berkas dapat diketahui, pengalokasian awal akan tidak efisien. Ukuran
berkas yang bertambah dalam periode lama harus dapat dialokasi ke ruang yang cukup
untuk ukuran akhirnya, walaupun ruang tersebut tidak digunakan dalam waktu yang
lama. Hal ini akan menyebabkan berkas dengan jumlah fragmentasi internal yang besar.
Untuk menghindari hal-hal tersebut, beberapa sistem operasi memodifikasi skema
metode alokasi secara berdampingan, dimana kepingan kecil yang berurut dalam ruang
disk diinisialisasi terlebih dahulu, kemudian ketika jumlah ruang disk kurang besar,
kepingan kecil yang berurut lainnya, ditambahkan pada alokasi awal. Kejadian seperti ini
disebut perpanjangan. Fragmentasi internal masih dapat terjadi jika perpanjanganperpanjangan ini terlalu besar dan fragmentasi eksternal masih menjadi masalah begitu
perpanjangan-perpanjangan dengan ukuran yang bervariasi dialokasikan dan
didealokasi.

7.7.2. Alokasi Secara Berangkai (Linked Allocation)


Metode ini menyelesaikan semua masalah yang terdapat pada contiguous allocation.
Dengan metode ini, setiap berkas merupakan linked list dari blok-blok disk, dimana blokblok disk dapat tersebar di dalam disk. Setiap direktori berisi sebuah penunjuk (pointer)
ke awal dan akhir blok sebuah berkas. Setiap blok mempunyai penunjuk ke blok
berikutnya. Untuk membuat berkas baru, kita dengan mudah membuat masukan baru
dalam direktori. Dengan metode ini, setiap direktori masukan mempunyai penunjuk ke
awal blok disk dari berkas. Penunjuk ini diinisialisasi menjadi nil (nilai penunjuk untuk
akhir dari list) untuk menandakan berkas kosong. Ukurannya juga diset menjadi 0.
Penulisan suatu berkas menyebabkan ditemukannya blok yang kosong melalui sistem
manajemen ruang kosong (free-space management system), dan blok baru ini ditulis dan
disambungkan ke akhir berkas. Untuk membaca suatu berkas, cukup dengan membaca
blok-blok dengan mengikuti pergerakan penunjuk.
Metode ini tidak mengalami fragmentasi eksternal dan kita dapat menggunakan blok
kosong yang terdapat dalam daftar ruang kosong untuk memenuhi permintaan
pengguna. Ukuran dari berkas tidak perlu ditentukan ketika berkas pertama kali dibuat,
sehingga ukuran berkas dapat bertambah selama masih ada blok-blok kosong.
Metode ini tentunya mempunyai kerugian, yaitu metode ini hanya dapat digunakan
secara efektif untuk pengaksesan berkas secara sequential (sequential-access file). Untuk
mencari blok ke-i dari suatu berkas, harus dimulai dari awal berkas dan mengikuti
penunjuk sampai berada di blok ke-i. Setiap akses ke penunjuk akan membaca disk dan
kadang melakukan pencarian disk (disk seek). Hal ini sangat tidak efisien untuk
mendukung kemampuan akses langsung (direct-access) terhadap berkas yang
menggunakan metode alokasi link.
Kerugian yang lain dari metode ini adalah ruang yang harus disediakan untuk penunjuk.

Solusi yang umum untuk masalah ini adalah mengumpulkan blok-blok persekutuan
terkecil dinamakan clusters dan mengalokasikan cluster-cluster daripada blok. Dengan
solusi ini maka, penunjuk menggunakan ruang disk berkas dengan persentase yang
sangat kecil. Metode ini membuat mapping logikal ke fisikal blok tetap sederhana, tetapi
meningkatkan disk throughput dan memperkecil ruang yang diperlukan untuk alokasi
blok dan management daftar kosong (free-list management). Akibat dari pendekatan ini
adalah meningkatnya fragmentasi internal, karena lebih banyak ruang yang terbuang
jika sebuah cluster sebagian penuh daripada ketika sebuah blok sebagian penuh. Alasan
cluster digunakan oleh kebanyakan sistem operasi adalah kemampuannya yang dapat
meningkatkan waktu akses disk untuk berbagai macam algoritma.
Masalah yang lain adalah masalah daya tahan metode ini. Karena semua berkas saling
berhubungan dengan penunjuk yang tersebar di semua bagian disk, apa yang terjadi jika
sebuah penunjuk rusak atau hilang. Hal ini menyebabkan berkas menyambung ke daftar
ruang kosong atau ke berkas yang lain. Salah satu solusinya adalah menggunakan
linked list ganda atau menyimpan nama berkas dan nomor relative blok dalam setiap
blok, tetapi solusi ini membutuhkan perhatian lebih untuk setiap berkas.
Variasi penting dari metode ini adalah penggunaan file allocation table (FAT), yang
digunakan oleh sistem operasi MS-DOS dan OS/2. Bagian awal disk pada setiap partisi
disingkirkan untuk menempatkan tabelnya. Tabel ini mempunyai satu masukkan untuk
setiap blok disk, dan diberi indeks oleh nomor blok. Masukkan direktori mengandung
nomor blok dari blok awal berkas. Masukkan tabel diberi indeks oleh nomor blok itu lalu
mengandung nomor blok untuk blok berikutnya dari berkas. Rantai ini berlanjut sampai
blok terakhir, yang mempunyai nilai akhir berkas yang khusus sebagai masukkan tabel.
Blok yang tidak digunakan diberi nilai 0. Untuk mengalokasi blok baru untuk suatu
berkas hanya dengan mencari nilai 0 pertama dalam tabel, dan mengganti nilai akhir
berkas sebelumnya dengan alamat blok yang baru. Metode pengalokasian FAT ini dapat
menghasilkan jumlah pencarian head disk yang signifikan, jika berkas tidak di cache.
Head disk harus bergerak dari awal partisi untuk membaca FAT dan menemukan lokasi
blok yang ditanyakan, lalu menemukan lokasi blok itu sendiri. Kasus buruknya, kedua
pergerakan terjadi untuk setiap blok. Keuntungannya waktu random akses meningkat,
akibat dari head disk dapat mencari lokasi blok apa saja dengan membaca informasi
dalam FAT.

7.7.3. Alokasi Dengan Indeks (Indexed Allocation)


Metode alokasi dengan berangkai dapat menyelesaikan masalah fragmentasi eksternal
dan pendeklarasian ukuran dari metode alokasi berdampingan. Bagaimana pun tanpa
FAT, metode alokasi berangkai tidak mendukung keefisiensian akses langsung, karena
penunjuk ke bloknya berserakan dengan bloknya didalam disk dan perlu didapatkan
secara berurutan. Metode alokasi dengan indeks menyelesaikan masalah ini dengan
mengumpulkan semua penunjuk menjadi dalam satu lokasi yang dinamakan blok indeks
(index block). Setiap berkas mempunyai blok indeks, yang merupakan sebuah larik array
dari alamat-alamat disk-blok. Direktori mempunyai alamat dari blok indeks. Ketika
berkas dibuat, semua penunjuk dalam blok indeks di set menjadi nil. Ketika blok ke-i
pertama kali ditulis, sebuah blok didapat dari pengatur ruang kosong free-space

manager dan alamatnya diletakkan ke dalam blok indeks ke-i.


Metode ini mendukung akses secara langsung, tanpa mengalami fragmentasi eksternal
karena blok kosong mana pun dalam disk dapat memenuhi permintaan ruang
tambahan. Tetapi metode ini dapat menyebabkan ada ruang yang terbuang.
Penunjuk yang berlebihan dari blok indeks secara umum lebih besar dari yang terjadi
pada metode alokasi berangkai.
Mekanisme untuk menghadapi masalah berapa besar blok indeks yang diperlukan
sebagai berikut:

Linked scheme: untuk berkas-berkas yang besar, dilakukan dengan menyambung


beberapa blok indeks menjadi satu.

Multilevel index: sebuah varian dari representasi yang berantai adalah dengan
menggunakan blok indeks level pertama menunjuk ke himpunan blok indeks level
kedua, yang akhirnya menunjuk ke blok-blok berkas.

Combined scheme: digunakan oleh sistem BSD UNIX yaitu dengan menetapkan 15
penunjuk dari blok indeks dalam blok indeksnya berkas. 12 penunjuk pertama
menunjuk ke direct blocks yang menyimpan alamat-alamat blok yang berisi data dari
berkas. 3 penunjuk berikutnya menunjuk ke indirect blocks. Penunjuk indirect blok
yang pertama adalah alamat dari single indirect block, yang merupakan blok indeks
yang berisi alamat-alamat blok yang berisi data. Lalu ada penunjuk double indirect
block yang berisi alamat dari sebuah blok yang berisi alamat-alamat blok yang berisi
penunjuk ke blok data yang sebenarnya.

7.7.4. Kinerja Sistem Berkas


Salah satu kesulitan dalam membandingkan performa sistem adalah menentukan
bagaimana sistem tersebut akan digunakan. Sistem yang lebih banyak menggunakan
akses sekuensial (berurutan) akan memakai metode yang berbeda dengan sistem yang
lebih sering menggunakan akses random (acak). Untuk jenis akses apa pun, alokasi yang
berdampingan hanya memerlukan satu akses untuk mendapatkan sebuah blok disk.
Karena kita dapat menyimpan initial address dari berkas di dalam memori, maka alamat
disk pada blok ke-i dapat segera dikalkulasi dan dibaca secara langsung.
Untuk alokasi berangkai (linked list), kita juga dapat menyimpan alamat dari blok
selanjutnya ke dalam memori, lalu membacanya secara langsung. Metode ini sangat baik
untuk akses sekuensial, namun untuk akses langsung, akses menuju blok keikemungkinan membutuhkan pembacaan disk sebanyak i kali. Masalah ini
mengindikasikan bahwa alokasi berangkai sebaiknya tidak digunakan untuk aplikasi
yang membutuhkan akses langsung.
Oleh sebab itu, beberapa sistem mendukung akses langsung dengan menggunakan
alokasi berdampingan (contiguous allocation), serta akses berurutan dengan alokasi
berangkai. Untuk sistem-sistem tersebut, jenis akses harus dideklarasikan pada saat
berkas dibuat. Berkas yang dibuat untuk akses sekuensial (berurutan) akan

dirangkaikan dan tidak dapat digunakan untuk akses langsung. Berkas yang dibuat
untuk akses langsung akan berdampingan dan dapat mendukung baik akses langsung
mau pun akses berurutan, dengan mendeklarasikan jarak maksimum. Perhatikan
bahwa sistem operasi harus mendukung struktur data dan algoritma yang sesuai untuk
mendukung kedua metode alokasi di atas.
Alokasi dengan menggunakan indeks lebih rumit lagi. Jika blok indeks telah terdapat
dalam memori, akses dapat dilakukan secara langsung. Namun, menyimpan blok indeks
dalam memori memerlukan ruang (space) yang besar. Jika ruang memori tidak tersedia,
maka kita mungkin harus membaca blok indeks terlebih dahulu, baru kemudian blok
data yang diinginkan. Untuk indeks dua tingkat, pembacaan dua blok indeks mungkin
diperlukan. Untuk berkas yang berukuran sangat besar, mengakses blok di dekat akhir
suatu berkas akan membutuhkan pembacaan seluruh blok indeks agar dapat mengikuti
rantai penunjuk sebelum blok data dapat dibaca. Dengan demikian, performa alokasi
dengan menggunakan indeks ditentukan oleh: struktur indeks, ukuran berkas, dan
posisi dari blok yang diinginkan.
Beberapa sistem mengkombinasikan alokasi berdampingan dengan alokasi indeks.
Caranya adalah dengan menggunakan alokasi berdampingan untuk berkas berukuran
kecil (3-4 blok), dan beralih secara otomatis ke alokasi indeks jika berkas semakin
membesar.

7.8. Managemen Ruang Kosong (Free Space)


Semenjak hanya tersedia tempat yang terbatas pada disk maka sangat berguna untuk
menggunakan kembali tempat dari berkas yang dihapus untuk berkas baru, jika
dimungkinkan,karena pada media yang sekali tulis (media optik) hanya dimungkinkan
sekali menulis dan menggunakannyanya kembali secara fisik tidak mungkin. Untuk
mencatat tempat kosong pada disk, sistem mempunyai daftar tempat kosong (free space
list). Daftar ini menyimpan semua blok disk yang kosong yang tidak dialokasikan pada
sebuah berkas atau direktori. Untuk membuat berkas baru, sistem mencari ke daftar
tersebut untuk mencarikan tempat kosong yang di butuhkan, lalu tempat tersebut
dihilangkan dari daftar. Ketika berkas dihapus, alamat berkas tadi ditambahkan pada
daftar.

7.8.1. Menggunakan Bit Vektor


Seringnya daftar ruang kosong diimplementasikan sebagai bit map atau bit vektor. Tiap
blok direpresentasikan sebagai 1 bit. Jika blok tersebut kosong maka isi bitnya 1 dan jika
bloknya sedang dialokasikan maka isi bitnya 0. Sebagai contoh sebuah disk dimana blok
2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 17, 18, 25, 26 dan 27 adalah kosong, dan sisanya
dialokasikan. Bit mapnya akan seperti berikut:
001111001111110001100000011100000...
Keuntungan utama dari pendekatan ini adalah relatif sederhana dan efisien untuk

mencari blok pertama yang kosong atau berturut-turut n blok yang kosong pada disk.
Banyak komputer yang menyediakan instruksi manipulasi bit yang dapat digunakan
secara efektif untuk tujuan ini. Sebagai contohnya, dari keluarga prosesor Intel dimulai
dari 80386 dan keluarga Motorola dimulai dari 68020 (prosesor yang ada di PC dan
Macintosh) mempunyai instruksi yang mengembalikan jarak di word dari bit pertama
dengan nilai 1. Sistem operasi Apple Macintosh menggunakan metode bit vektor untuk
mengalokasikan tempat pada disk. Dalam hal ini perangkat keras mendukung perangkat
lunak tetapi bit vektor tidak efisien kecuali seluruh vektor disimpan dalam memori utama
(dan ditulis di disk untuk kebutuhan pemulihan). Menyimpan dalam memori utama
dimungkinkan untuk disk yang kecil pada mikro komputer, tetapi tidak untuk disk yang
besar. Sebuah disk 1,3 GB dengan 512-byte blok akan membutuhkan bit map sebesar
332K untuk mencatat blok yang kosong.

7.8.2. Linked List


Pendekatan lain adalah untuk menghubungkan semua blok yang kosong, menyimpan
pointer ke blok pertama yang kosong di tempat yang khusus pada disk dan
menyimpannya di memori. Blok pertama ini menyimpan pointer ke blok kosong
berikutnya dan seterusnya. Pada contoh sebelumnya kita akan menyimpan pointer ke
blok ke 2 sebagai blok kosong pertama, blok 2 akan menyimpan pointer ke blok 3, yang
akan menunjuk ke blok 4 dan seterusnya. Bagaimana pun metode ini tidak efisien
karena untuk traverse daftar tesebut kita perlu membaca tiap blok yang membutuhkan
waktu I/O. Untungnya traverse ini tidak sering digunakan. Umumnya, sistem operasi
membutuhkan blok kosong untuk mengalokasikan blok tersebut ke berkas, maka blok
pertama pada daftar ruang kosong digunakan.

7.8.3. Grouping
Modifikasi lainnya adalah dengan menyimpan alamat dari n blok kosong pada blok
kosong pertama. Pada n-1 pertama dari blok-blok ini adalah kosong. Blok terakhir
menyimpan alamat n blok kosong lainnya dan seterusnya. Keuntungannya dari
implementasi seperti ini adalah alamat dari blok kosong yang besar sekali dapat
ditemukan dengan cepat, tidak seperti pendekatan standar linked-list.

7.8.4. Counting
Pendekatan lain adalah dengan mengambil keuntungan dari fakta bahwa beberapa blok
yang berkesinambungan akan dialokasikan atau dibebaskan secara simultan. Maka dari
itu dari pada menyimpan daftar dari banyak alamat disk, kita dapat menyimpan alamat
dari blok kosong pertama dan jumlah dari blok kosong yang berkesinambungan yang
mengikuti blok kosong pertama. Tiap isi dari daftar menyimpan alamat disk dan
penghitung (counter). Meski pun setiap isi membutuhkan tempat lebih tetapi secara
keseluruhan daftar akan lebih pendek, selama count lebih dari satu.

7.9. Implementasi Direktori

Pemilihan dalam algoritma alokasi direktori dan manajemen direktori mempunyai efek
yang besar dalam efisiensi, performa, dan kehandalan dari sistem berkas.

7.9.1. Linear List


Metode paling sederhana dalam mengimplementasikan sebuah direktori adalah dengan
menggunakan linear list dari nama berkas dengan penunjuk ke blok data. Linear list dari
direktori memerlukan pencarian searah untuk mencari suatu direktori didalamnya.
Metode sederhana untuk di program tetapi memakan waktu lama ketika dieksekusi.
Untuk membuat berkas baru kita harus mencari di dalam direktori untuk meyakinkan
bahwa tidak ada berkas yang bernama sama. Lalu kita tambahkan sebuah berkas baru
pada akhir direktori. Untuk menghapus sebuah berkas, kita mencari berkas tersebut
dalam direktori, lalu melepaskan tempat yang dialokasikan untuknya. Untuk
menggunakan kembali suatu berkas dalam direktori kita dapat melakukan beberapa hal.
Kita dapat menandai berkas tersebut sebagai tidak terpakai (dengan menamainya secara
khusus, seperti nama yang kosong, atau bit terpakai atau tidak yang ditambahkan pada
berkas), atau kita dapat menambahkannya pada daftar direktori bebas. Alternatif lainnya
kita dapat menyalin ke tempat yang dikosongkan pada direktori. Kita juga bisa
menggunakan linked list untuk mengurangi waktu untuk menghapus berkas. Kelemahan
dari linear list ini adalah percarian searah untuk mencari sebuah berkas. Direktori yang
berisi informasi sering digunakan, implementasi yang lambat pada cara aksesnya akan
menjadi perhatian pengguna.
Faktanya, banyak sistem operasi mengimplementasikan software cache untuk
menyimpan informasi yang paling sering digunakan. Penggunaan cache menghindari
pembacaan informasi berulang-ulang pada disk. Daftar yang telah diurutkan
memperbolehkan pencarian biner dan mengurangi waktu rata-rata pencarian.
Bagaimana pun juga penjagaan agar daftar tetap terurut dapat merumitkan operasi
pembuatan dan penghapusan berkas, karena kita perlu memindahkan sejumlah
direktori untuk mengurutkannya. Tree yang lebih lengkap dapat membantu seperti Btree. Keuntungan dari daftar yang terurut adalah kita dapatkan daftar direktori yang
terurut tanpa pengurutan yang terpisah.

7.9.2. Hash Table


Struktur data lainnya yang juga digunakan untuk direktori berkas adalah hash table.
Dalam metode ini linear list menyimpan direktori, tetapi struktur data hash juga
digunakan.
Hash table mengambil nilai yang dihitung dari nama berkas dan mengembalikan sebuah
penunjuk ke nama berkas yang ada di-linear list. Maka dari itu dapat memotong banyak
biaya pencarian direktori. Memasukkan dan menghapus berkas juga lebih mudah dan
cepat. Meski demikian beberapa aturan harus dibuat untuk mncegah tabrakan, situasi
dimana dua nama berkas pada hash mempunyai tempat yang sama. Kesulitan utama
dalam hash table adalah ukuran tetap dari hash table dan ketergantungan dari fungsi
hash dengan ukuran hash table. Sebagai contoh, misalkan kita membuat suatu linearprobing hash table yang dapat menampung 64 data.

Fungsi hash mengubah nama berkas menjadi nilai dari 0 sampai 63. Jika kita membuat
berkas ke 65 maka ukuran tabel hash harus diperbesar sampai misalnya 128 dan kita
membutuhkan suatu fungsi hash yang baru yang dapat memetakan nama berkas dari
jangkauan 0 sampai 127, dan kita harus mengatur data direktori yang sudah ada agar
memenuhi fungsi hash yang baru. Sebagai alternatif dapat digunakan chained-overflow
hash table, setiap hash table mempunyai daftar yang terkait (linked list) dari pada nilai
individual dan kita dapat mengatasi tabrakan dengan menambah tempat pada daftar
terkait tersebut. Pencarian dapat menjadi lambat, karena pencarian nama memerlukan
tahap pencarian pada daftar terkait. Tetapi operasi ini lebih cepat dari pada pencarian
linear terhadap seluruh direktori.

7.10. Efisiensi dan Unjuk Kerja


Setelah kita membahas alokasi blok dan pilihan manajemen direktori maka dapat
dibayangkan bagaimana efek mereka dalam keefisiensian dan unjuk kerja penggunaan
disk. Hal ini dikarenakan disk selalu menjadi "bottle-neck" dalam unjuk kerja sistem.

7.10.1. Efisiensi
Disk dapat digunakan secara efisien tergantung dari teknik alokasi disk serta algoritma
pembentukan direktori yang digunakan. Contoh, pada UNIX, direktori berkas
dialokasikan terlebih dahulu pada partisi. Walau pun disk yang kosong pun terdapat
beberapa persen dari ruangnya digunakan untuk direktori tersebut. Unjuk kerja sistem
berkas meningkat akibata dari pengalokasian awal dan penyebaran direktori ini pada
partisi. Sistem berkas UNIX melakukan ini agar blok-blok data berkas selalu dekat
dengan blok direktori berkas sehingga waktu pencariannya berkurang.
Ada pula keefesiensian pada ukuran penunjuk yang digunakan untuk mengakses data.
Masalahnya dalam memilih ukuran penunjuk adalah merencanakan efek dari perubahan
teknologi. Masalah ini diantisipasi dengan menginisialisasi terlebih dahulu sistem
berkasnya dengan alasan keefisiensian.
Pada awal, banyak struktur data dengan panjang yang sudah ditentu kan dan dialokasi
pada ketika sistem dijalankan. Ketika tabel proses penuh maka tidak ada proses lain
yang dapat dibuat. Begitu juga dengan tabel berkas ketika penuh, tidak ada berkas yang
dapat dibuka. Hal ini menyebabkan sistem gagal melayani permintaan pengguna. Ukuran
tabel-tabel ini dapat ditingkatkan hanya dengan mengkompilasi ulang kernel dan boot
ulang sistemnya. Tetapi sejak dikeluarkannya Solaris 2, hampir setiap struktur kernel
dialokasikan secara dinamis sehingga menghapus batasan buatan pada unjuk kerja
sistem.

7.10.2. Kinerja
Ketika metode dasar disk telah dipilih, maka masih ada beberapa cara untuk
meningkatkan unjuk kerja. Salah satunya adalah dengan mengguna kan cache, yang
merupakan memori lokal pada pengendali disk, dimana cache cukup besar untuk
menampung seluruh track pada satu waktu. Beberapa sistem mengatur seksi terpisah

dari memori utama untuk disk-cache, yang diasumsikan bahwa blok-blok disimpan
karena mereka akan digunakan dalam waktu dekat. Ada juga sistem yang menggunakan
memori fisik yang tidak digunakan sebagai penyangga yang dibagi atas sistem halaman
(paging) dan sistem disk-blok cache.
Suatu sistem melakukan banyak operasi I/O akan menggunakan sebagian banyak
memorinya sebagai blok cache, dimana suatu sistem mengeksekusi banyak program
akan menggunakan sebagian besar memori-nya untuk ruang halaman.
Beberapa sistem mengoptimalkan disk-cache nya dengan menggunakan berbagai macam
algoritma penempatan ulang (replacement algorithms), tergantung dari macam tipe akses
dari berkas. Pada akses yang sekuen sial dapat dioptimasi dengan teknik yang dikenal
dengan nama free-behind dan read-ahead. Free-behind memindahkan sebuah blok dari
penyangga secepatnya ketika blok berikutnya diminta. Hal ini dilakukan karena blok
sebelumnya tidak lagi digunakan sehingga akan membuang ruang yang ada di
penyangga. Sedangkan dengan read ahead, blok yang diminta dan beberapa blok
berikutnya dibaca dant ditempatkan pada cache. Hal ini dilakukan karena kemungkinan
blok-blok berikutnya akan diminta setelah blok yang sedang diproses. Hal ini juga mem
beri dampak pada waktu yang digunakan akan lebih cepat.
Metode yang lain adalah dengan membagi suatu seksi dari memori untuk disk virtual
atau RAM disk. Pada RAM disk terdapat operasi-operasi standar yang terdapat pada disk,
tetapi semua operasi tersebut terjadi di dalam suatu seksi memori, bukan pada disk.
Tetapi, RAM disk hanya berguna untuk penyimpanan sementara, karena jika komputer di
boot ulang atau listrik mati maka isi dalam RAM disk akan terhapus.
Perbedaan antara RAM disk dan disk cache adalah dalam masalah siapa yang
mengendalikan disk tersebut. RAM disk dikendalikan oleh peng guna sepenuhnya,
sedangkan disk cache dikendalikan oleh sistem operasi.

7.11. Recovery
Karena semua direktori dan berkas disimpan di dalam memori utama dan disk, maka
kita perlu memastikan bahwa kegagalan pada sistem tidak menyebabkan hilangnya data
atau data menjadi tidak konsiten.

7.11.1. Pemeriksaan Rutin


Informasi direktori pada memori utama pada umumnya lebih up to date daripada
informasi yang terdapat di disk dikarenakan penulisan dari informasi direktori cached ke
disk tidak langsung terjadi pada saat setelah peng-update-an terjadi. Consistency
checker membandingkan data yang terdapat di struktur direktori dengan blok-blok data
pada disk, dan mencoba memperbaiki semua ketidak konsistensian yang terjadi akibat
crash-nya komputer. Algoritma pengalokasian dan management ruang kosong
menentukan tipe dari masalah yang ditemukan oleh checker dan seberapa sukses dalam
memperbaiki masalah-masalah tersebut.

7.11.2. Back Up and Restore


Karena kadang-kadang magnetik disk gagal, kita harus memastikan bahwa datanya
tidak hilang selamanya. Karena itu, kita menggunakan program sistem untuk mem-back
up data dari disk ke alat penyimpanan yang lain seperti floopy disk, magnetic tape, atau
optical disk. Pengembalian berkas-berkas yang hilang hanya masalah menempatkan lagi
data dari back up data yang telah dilakukan.
Untuk meminimalisir penyalinan, kita dapat menggunakan informasi dari setiap
masukan direktori berkas. Umpamanya, jika program back up mengetahui bahwa back
up terakhir dari berkas sudah selesai dan penulisan terakhir pada berkas dalam
direktori menandakan berkas tidak terjadi perubahan maka berkas tidak harus disalin
lagi. Penjadualan back up yang umum sebagai berikut:

Hari 1: Salin ke tempat penyimpanan back up semua berkas dari disk, disebut
sebuah full backup.

Hari 2: Salin ke tempat penyimpanan lain semua berkas yang berubah sejak hari 1,
disebut incremental backup.

Hari 3: Salin ke tempat peyimpanan lain semua berkas yang berubah sejak hari 2.

Hari N: salin ke tempat penyimpanan lain semua berkas yang berubah sejak hari N-1,
lalu kembali ke hari 1.

Keuntungan dari siklus backup ini adalah kita dapat menempatkan kembali berkas
mana pun yang tidak sengaja terhapus pada waktu siklus dengan mendapatkannya dari
back up hari sebelumnya. Panjang dari siklus disetujui antara banyaknya tempat
penyimpanan backup yang diperlukan dan jumlah hari kebelakang dari penempatan
kembali dapat dilakukan.
Ada juga kebiasaan untuk mem-backup keseluruhan dari waktu ke waktu untuk
disimpan selamanya daripada media backupnya digunakan kembali. Ada bagusnya
menyimpan backup-backup permanent ini di lokasi yang jauh dari backup yang biasa,
untuk menghindari kecelakaan seperti kebakaran dan lain-lain. Dan jangan
menggunakan kembali media backup terlalu lama karena media tersebut akan rusak jika
terlalu sering digunakan kembali.

7.12. Macam-macam Sistem Berkas


7.12.1. Sistem Berkas Pada Windows
Direktori dan Berkas
Sistem operasi Windows merupakan sistem operasi yang telah dikenal luas. Sistem
operasi ini sangat memudahkan para penggunanya dengan membuat struktur direktori
yang sangat user-friendly. Para pengguna Windows tidak akan menemui kesulitan dalam
menggunakan sistem direktori yang telah dibuat oleh Microsoft. Windows menggunakan
sistem drive letter dalam merepresentasikan setiap partisi dari disk. Sistem operasi

secara otomatis akan terdapat dalam partisi pertama yang diberi label drive C. Sistem
operasi Windows dibagi menjadi dua keluarga besar, yaitu keluarga Windows 9x dan
keluarga Windows NT (New Technology).
Direktori yang secara otomatis dibuat dalam instalasi Windows adalah:
1. Direktori C:\WINDOWS
Direktori ini berisikan sistem dari Windows. Dalam direktori ini terdapat pustakapustaka yang diperlukan oleh Windows, device driver, registry, dan program-program
esensial yang dibutuhkan oleh Windows untuk berjalan dengan baik.
2. Direktori C:\Program Files
Direktori ini berisikan semua program yang diinstal ke dalam sistem operasi. Semua
program yang diinstal akan menulis entry ke dalam registry agar program tersebut
dapat dijalankan dalam sistem Windows.
3. Direktori C:\My Documents
Direktori ini berisikan semua dokumen yang dimiliki oleh pengguna sistem.
Sistem operasi Windows dapat berjalan diatas beberapa macam sistem berkas. Setiap
sistem berkas memiliki keunggulan dan kekurangan masing-masing. Semua keluarga
Windows yang berbasis Windows NT dapat mendukung sistem berkas yang digunakan
oleh keluarga Windows 9x, namun hal tersebut tidak berlaku sebaliknya.
Sistem Berkas yang terdapat dalam sistem operasi Windows adalah:
1. FAT 16: Sistem berkas ini digunakan dalam sistem operasi DOS dan Windows 3.1
2. FAT 32: Sistem ini digunakan oleh keluarga Windows 9x.
3. NTFS: Merupakan singkatan dari New Technology File System. Sistem berkas ini
adalah system berkas berbasis journaling dan dapat digunakan hanya pada keluarga
Windows NT. Keunggulan dari sistem berkas ini adalah fasilitas recovery yang
memungkinkan dilakukannya penyelamatan data saat terjadi kerusakan pada sistem
operasi.
4. WinFS: dibangun di atas keberadaan Windows NTFS (tetapi bukan NTFS), WinFS
hanya mendukung file system di windows Vista (longhorn), dengan menggunakan
teknologi mesin relasional dari Microsoft SQL Server 2005. Sistem penyimpanannya
menjanjikan kemudahan bagi user untuk menemukan dokumen dan e-mail. WinFS
yang merupakan relational file system for Windows ini adalah bagian penting
dari Integrated Storage Strategy dari Microsoft, dimana WinFS menjembatani gap
antara file systems dan database. Dengan WinFS, para developer akan mampu
menggunakan item Data Model, menghadirkan relational organization constructs for
data dan menciptakan aplikasi yang memanfaatkan data dengan lebih kuat. WinFS
adalah development platform yang akan meningkatkan produktivitas developer dan

mengurangi waktu untuk memasuki pasar.

7.12.2. Sistem Berkas pada UNIX (dan turunannya)


Ketika kita login ke UNIX, kita akan ditempatkan di direktori root kita. Direktori root kita
dikenal sebagai direktori home kita dan dispesifikasi dengan environment variable yang
dinamakan HOME. Environment variable ini menentukan karakteristik dari shell kita
dan interaksi pengguna dengan shell tersebut. Environment variable yang umum adalah
variabel PATH, yang mendefinisikan dimana shell akan mencari ketika perintah dari
pengguna. Untuk melihat daftar environment variable, gunakan saja perintah printenv.
Sedangkan untuk mengatur environment variable, gunakan setenv.
Ada beberapa direktori yang umum terdapat dalam instalasi UNIX:
1. Direktori "/" (root)
Direktori ini terletak pada level teratas dari struktur direktori UNIX. Biasanya
direktori root ini diberi tanda / atau slash. Direktori ini biasanya hanya terdiri dari
direktori-direktori lainnya yang terletak pada level dibawah level direktori root.
Berkas-berkas dapat disimpan pada direktori root tetapi usahakan tidak menyimpan
berkas-berkas biasa sehingga direktori ini tetap terjaga keteraturannya.
Perubahan penamaan direktori-direktori yang ada pada direktori root akan
menyebabkan sebagian besar dari sistem menjadi tidak berguna. Karena sebagian
besar dari direktori-direktori ini berisi fungsi-fungsi yang sifatnya kritikal yang
dimana sistem operasi dan semua aplikasi memerlukan direktori-direktori ini dengan
nama yang sudah diberikan pada awal instalasi. Tetapi kita bisa membuat direktori
lain pada level ini. Direktori home juga bisa ditemukan pada level ini hasil pembuatan
oleh administrator sistem.
2. Direktori "/bin"
Direktori ini berisi program-program yang esensial agar sistem operasi dapat bekerja
dengan benar. Dalam direktori ini dapat ditemukan perintah-perintah navigasi,
program-program shell, perintah pencarian dan lain-lainnya. bin adalah singkatan
dari kata binary. Di UNIX, sebuah binary adalah berkas yang dapat dieksekusi.
Sebagian besar dari perintah dalam UNIX merupakan binary, perintah-perintah
tersebut merupakan program-program kecil yang dapat dieksekusi oleh pengguna.
Ada beberapa perintah yang disebut perintah built-in dimana fungsi mereka
dikendalikan oleh program shell sehingga mereka tidak beroperasi sebagai binary
yang terpisah.
Terkadang direktori bin terhubung ke direktori lain yang dinamakan /usr/bin.
Direktori /usr/bin biasanya adalah lokasi sebenarnya dari binary-binary pengguna
disimpan.Dalam hal ini, /bin adalah gerbang untuk mencapai /usr/bin.
3. Direktori "/dev"

Direktori ini berisi berkas-berkas alat atau alat I/O. Sistem UNIX menganggap semua
hal sebagai berkas. Hal-hal seperti monitor, CD-ROM, printer dan lain-lainnya
dianggap hanya sebagai berkas saja oleh sistem operasi. Jika UNIX memerlukan
perangkat-perangkat tersebut maka UNIX akan mencarinya ke direktori dev.
4. Direktori "/etc"
Direktori yang dibaca et-see ini berisi beberapa konfigurasi berkas pengguna dan
sistem, dan berkas yang ditunjuk sistem sebagai operasi normal seperti berkas kata
sandi, pesan untuk hari ini, dan lain-lainnya.
5. Direktori "/lib"
Direktori ini berisi pustaka-pustaka (libraries) yang dibagi (shared). Pustaka ini
adalah rutin perangkat lunak (software routines) yang digunakan lebih dari satu
bagian dari sistem operasi. Ketika kita menginstalasi perangkat lunak yang baru
maka ada pustaka-pustaka baru yang ditambahkan ke direktori lib. Jika pada waktu
berusaha menjalankan aplikasi terdapat pesan error, hal ini diakibatkan ada pustaka
yang hilang dari direktori lib. Aplikasi-aplikasi di UNIX biasanya memeriksa lib ketika
menginstalasi, untuk memeriksa apakah pustaka-pustaka yang diperlukan oleh
aplikasi sudah tersedia atau belum. Jika sudah tersedia, UNIX biasanya tidak
menimpa pustaka tersebut.
6. Direktori "/sbin"
Direktori ini berisi binary-binary juga seperti pada direktori bin.Tetapi,bedanya
adalah binary-binary pada direktori ini berhubungan dengan fungsi-fungsi sistem
administrasi pada sistem operasi UNIX. Binary-binary ini bukan yang biasa
digunakan oleh pengguna tetapi digunakan agar komputer dapat beroperasi secara
efisien.
7. Direktori "/usr"
Direktori ini terdiri dari banyak direktori seperti pada direktori root. Direktori ini
berisi berkas-berkas yang dapat diakses oleh para pengguna biasa. Struktur dari
direktori ini mirip dengan struktur direktori "/". Beberapa direktori yang terdapat
dalam direktori ini berhubungan dengan direktori yang ada di direktori /.
8. Direktori "/var"
Direktori ini berisi data yang bermacam-macam (vary). Perubahan data dalam sistem
yang aktif sangatlah cepat. Data-data seperti ini ada dalam waktu yang singkat.
Karena sifatnya yang selalu berubah tidak memungkinkan disimpan dalam direktori
seperti "/etc". Oleh karena itu, data-data seperti ini disimpan di direktori var.

7.12.3. Perbandingan antara Windows dan UNIX

Sistem berkas UNIX berbeda dengan sistem berkas Windows (DOS) karena sistem berkas
UNIX lebih hebat dan mudah diatur daripada Windows (DOS). Penamaan dalam UNIX
dan Windows berbeda. Karena sistem Windows ingin memudahkan pengguna maka
sistem mereka mengubah nama menjadi nama yang lebih mudah bagi para pengguna.
Contohnya adalah nama folder dalam adalah perubahan dari directory yang masih
digunakan oleh UNIX. Penggunaan back slash (\) digunakan untuk memisahkan
direktori-direktori dalam Windows, tetapi hal ini tidak ada dalam UNIX. Sistem UNIX
menggunakan case sensitive, yang artinya nama suatu berkas yang sama jika dibaca,
tetapi penulisan namanya berbeda dalam hal ada satu file yang menggunakan huruf
kapital dalam penamaan dan satu tidak akan berbeda dalam UNIX.
Contohnya ada berkas bernama berkasdaku.txt dan BerkasDaku.txt, jika dibaca nama
berkasnya sama tetapi dalam UNIX ini merupakan dua berkas yang jauh berbeda. Jika
berkas-berkas ini berada di sistem Windows, mereka menunjuk ke berkas yang sama
yang berarti Windows tidak case sensitive.
Hal lain yang membedakan sistem berkas UNIX dengan Windows adalah UNIX tidak
menggunakan drive letter seperti C:, D: dalam Windows. Tetapi semua partisi dan drive
ekstra di mount didalam sub-direktori di bawah direktori root. Jadi pengguna tidak
harus bingung di drive letter mana suatu berkas berada sehingga seluruh sistem seperti
satu sistem berkas yang berurutan dari direktori root menurun secara hierarki.

7.12.4. Macam-macam Sistem Berkas di UNIX


Secara garis besar, sistem berkas di sistem UNIX terbagi menjadi dua, yaitu sistem
berkas dengan fasilitas journaling dan yang tidak memiliki fasilitas tersebut. Dibawah ini
adalah beberapa sistem berkas yang digunakan dalam sistem UNIX pada umumnya:
1. EXT2
2. EXT3
3. JFS (Journaling File System)
4. ReiserFS
5. dan Lain-lain.

7.13. Kesimpulan
Sistem berkas merupakan mekanisme penyimpanan on-line serta untuk akses, baik data
mau pun program yang berada dalam Sistem Operasi. Terdapat dua bagian penting
dalam sistem berkas, yaitu:
1. Kumpulan berkas, sebagai tempat penyimpanan data, serta
2. Struktur direktori, yang mengatur dan menyediakan informasi mengenai seluruh
berkas dalam sistem.

Berkas adalah kumpulan informasi berkait yang diberi nama dan direkam pada
penyimpanan sekunder. Atribut berkas terdiri dari:
1. Nama; merupakan satu-satunya informasi yang tetap dalam bentuk yang bisa dibaca
oleh manusia (human-readable form)
2. Type; dibutuhkan untuk sistem yang mendukung beberapa type berbeda
3. Lokasi; merupakan pointer ke device dan ke lokasi berkas pada device tersebut
4. Ukuran (size); yaitu ukuran berkas pada saat itu, baik dalam byte, huruf, atau pun
blok
5. Proteksi; adalah informasi mengenai kontrol akses, misalnya siapa saja yang boleh
membaca, menulis, dan mengeksekusi berkas
6. Waktu, tanggal dan identifikasi pengguna; informasi ini biasanya disimpan untuk:
-

pembuatan berkas

modifikasi terakhir yang dilakukan pada berkas, dan

modifikasi terakhir yang dilakukan pada berkas, dan

modifikasi terakhir yang dilakukan pada berkas, dan

penggunaan terakhir berkas

Operasi Pada Berkas


1. Membuat sebuah berkas.
2. Menulis pada sebuah berkas.
3. Membaca sebuah berkas.
4. Menempatkan kembali sebuah berkas.
5. Menghapus sebuah berkas.
6. Memendekkan berkas.
Metode Akses
1. Akses Berurutan.
2. Akses Langsung.
3. Akses menggunakan Indeks.
Operasi Pada Direktori
Operasi-operasi yang dapat dilakukan pada direktori adalah:
1. Mencari berkas.
2. Membuat berkas.
3. Menghapus berkas.

4. Menampilkan isi direktori.


5. Mengganti nama berkas.
6. Melintasi sistem berkas.
Macam-macam Direktori
1. Direktori Satu Tingkat.
2. Direktori Dua Tingkat.
3. Direktori Dengan Struktur "Tree".
4. Direktori Dengan Struktur "Acyclic-Graph".
5. Direktori Dengan Struktur Graph.
Metode Alokasi Berkas
1. Alokasi Secara Berdampingan (Contiguous Allocation).
2. Alokasi Secara Berangkai (Linked Allocation).
3. Alokasi Dengan Indeks (Indexed Allocation).
Manajemen Free Space
1. Menggunakan Bit Vektor.
2. Linked List.
3. Grouping.
4. Counting.
Implementasi Direktori
1. Linear List.
2. Hash Table.
Sistem Berkas pada Windows
Direktori yang secara otomatis dibuat dalam instalasi Windows adalah:
1. Direktori C:\WINDOWS
2. Direktori C:\Program Files
3. Direktori C:\My Documents
Sistem Berkas yang terdapat dalam sistem operasi Windows adalah:
1. FAT 16

: Sistem berkas ini digunakan dalam sistem operasi DOS dan Windows 3.1

2. FAT 32

: Sistem ini digunakan oleh keluarga Windows 9x

3. NTFS
: Sistem ini digunakan pada Windows 2000 Profesional, Windows XP dan
Windows Server 2000 hingga 2003

4. WinFS
: Sistem ini digunakan pada Windows versi terbaru (Windows Vista atau
longhorn) dan Windows Server Longhorn 2006)
Sistem Berkas pada UNIX (dan turunannya)
Ada beberapa direktori yang umum terdapat dalam instalasi UNIX:
1. Direktori /root.
2. Direktori /bin.
3. Direktori /dev.
4. Direktori /etc.
5. Direktori /lib.
6. Direktori /sbin.
7. Direktori /usr.
8. Direktori /var.
Macam-macam Sistem Berkas di UNIX
1. EXT2.
2. EXT3.
3. JFS (Journaling File System).
4. ReiserFS.
5. dan Lain-lain.

7.14. Soal-Soal Sistem Berkas


1. Sebutkan macam-macam atribut pada berkas!
2. Operasi apa sajakah yang dapat diterapkan pada sebuah berkas?
3. Sebutkan informasi yang terkait dengan pembukaan berkas!
4. Sebutkan dan jelaskan metode alokasi pada sistem berkas!
5. Sebutkan dan jelaskan operasi pada direktori?
6. Sebutkan dan Jelaskan tentang tipe akses pada berkas?
7. Sebutkan dan jelaskan bagaimana cara mengatur free space?
8. Bagaimanakah implementasi dari sebuah direktori dalam disk
9. Sebutkan keunggulan dari sistem berkas dalam UNIX dengan sistem berkas pada

WINDOWS?

BAB
8

10. Bagaimanakah langkah-langkah dalam proses back-up?

I/O dan Disk


8.1. Perangkat Keras I/O
Secara umum, terdapat beberapa jenis seperti device penyimpanan (disk, tape),
transmission device (network card, modem), dan human-interface device (screen,
keyboard, mouse). Device tersebut dikendalikan oleh instruksi I/O. Alamat-alamat yang
dimiliki oleh device akan digunakan oleh direct I/O instruction dan memory-mapped I/O.
Beberapa konsep yang umum digunakan ialah port, bus (daisy chain/ shared direct
access), dan controller (host adapter). Port adalah koneksi yang digunakan oleh device
untuk berkomunikasi dengan mesin. Bus adalah koneksi yang menghubungkan
beberapa device menggunakan kabel-kabel. Controller adalah alat-alat elektronik yang
berfungsi untuk mengoperasikan port, bus, dan device.
Langkah yang ditentukan untuk device adalah command-ready, busy, dan error. Host
mengeset command-ready ketika perintah telah siap untuk dieksekusi oleh controller.
Controller mengeset busy ketika sedang mengerjakan sesuatu, dan men clear busy ketika
telah siap untuk menerima perintah selanjutnya. Error diset ketika terjadi kesalahan.

8.1.1. Polling
Busy-waiting/ polling adalah ketika host mengalami looping yaitu membaca status
register secara terus-menerus sampai status busy di-clear. Pada dasarnya polling dapat
dikatakan efisien. Akan tetapi polling menjadi tidak efisien ketika setelah berulang-ulang
melakukan looping, hanya menemukan sedikit device yang siap untuk men-service,
karena CPU processing yang tersisa belum selesai.

Gambar 8.1. Polling Operation. Sumber: SO Bahan Kuliah IKI-20230, hal.169

8.1.2. Interupsi
8.1.2.1. Mekanisme Dasar Interupsi
Ketika CPU mendeteksi bahwa sebuah controller telah mengirimkan sebuah sinyal ke
interrupt request line (membangkitkan sebuah interupsi), CPU kemudian menjawab
interupsi tersebut (juga disebut menangkap interupsi) dengan menyimpan beberapa
informasi mengenai state terkini CPUcontohnya nilai instruksi pointer, dan memanggil
interrupt handler agar handler tersebut dapat melayani controller atau alat yang
mengirim interupsi tersebut.
8.1.2.2. Fitur Tambahan pada Komputer Modern
Pada arsitektur komputer modern, tiga fitur disediakan oleh CPU dan interrupt controller
(pada perangkat keras) untuk dapat menangani interrupsi dengan lebih bagus. Fitur-fitur
ini antara lain adalah kemampuan menghambat sebuah proses interrupt handling
selama prosesi berada dalam critical state, efisiensi penanganan interupsi sehingga tidak
perlu dilakukan polling untuk mencari device yang mengirimkan interupsi, dan fitur
yang ketiga adalah adanya sebuah konsep multilevel interupsi sedemikian rupa sehingga
terdapat prioritas dalam penanganan interupsi (diimplementasikan dengan interrupt
priority level system).
8.1.2.3. Interrupt Request Line
Pada peranti keras CPU terdapat kabel yang disebut interrupt request line, kebanyakan
CPU memiliki dua macam interrupt request line, yaitu nonmaskable interrupt dan
maskable interrupt. Maskable interrupt dapat dimatikan/ dihentikan oleh CPU sebelum
pengeksekusian deretan critical instruction (critical instruction sequence) yang tidak
boleh diinterupsi. Biasanya, interrupt jenis ini digunakan oleh device controller untuk
meminta pelayanan CPU.

8.1.2.4. Interrupt Vector dan Interrupt Chaining


Sebuah mekanisme interupsi akan menerima alamat interrupt handling routine yang
spesifik dari sebuah set, pada kebanyakan arsitektur komputer yang ada sekarang ini,
alamat ini biasanya berupa sekumpulan bilangan yang menyatakan ofset pada sebuah
tabel (biasa disebut interrupt vector). Tabel ini menyimpan alamat-alamat interrupt
handler spesifik di dalam memori. Keuntungan dari pemakaian vektor adalah untuk
mengurangi kebutuhan akan sebuah interrupt handler yang harus mencari semua
kemungkinan sumber interupsi untuk menemukan pengirim interupsi.
Akan tetapi, interrupt vector memiliki hambatan karena pada kenyataannya, komputer
yang ada memiliki device (dan interrupt handler) yang lebih banyak dibandingkan dengan
jumlah alamat pada interrupt vector. Karena itulah, digunakanlah teknik interrupt
chaining dimana setiap elemen dari interrupt vector menunjuk/ merujuk pada elemen
pertama dari sebuah daftar interrupt handler. Dengan teknik ini, overhead yang
dihasilkan oleh besarnya ukuran tabel dan inefisiensi dari penggunaan sebuah interrupt
handler (fitur pada CPU yang telah disebutkan sebelumnya) dapat dikurangi, sehingga
keduanya menjadi kurang lebih seimbang.
8.1.2.5. Penyebab Interupsi
Interupsi dapat disebabkan berbagai hal, antara lain exception, page fault, interupsi yang
dikirimkan oleh device controllers, dan system call Exception adalah suatu kondisi
dimana terjadi sesuatu/ dari sebuah operasi didapat hasil tertentu yang dianggap
khusus sehingga harus mendapat perhatian lebih, contohnya pembagian dengan 0 (nol),
pengaksesan alamat memori yang restricted atau bahkan tidak valid, dan lain-lain.
System call adalah sebuah fungsi pada aplikasi (perangkat lunak) yang dapat
mengeksekusikan instruksi khusus berupa software interrupt atau trap.
8.1.3.1. Definisi
DMA adalah sebuah prosesor khusus (special purpose processor) yang berguna untuk
menghindari pembebanan CPU utama oleh program I/O (PIO).

Gambar 8.2. DMA Interface. Sumber: SO Bahan Kuliah IKI-20230, hal.171


8.1.3.2. Transfer DMA

Untuk memulai sebuah transfer DMA, host akan menuliskan sebuah DMA command
block yang berisi pointer yang menunjuk ke sumber transfer, pointer yang menunjuk ke
tujuan/ destinasi transfer, dan jumlah byte yang ditransfer, ke memori. CPU kemudian
menuliskan alamat command block ini ke DMA controller, sehingga DMA controller dapat
kemudian mengoperasikan bus memori secara langsung dengan menempatkan alamatalamat pada bus tersebut untuk melakukan transfer tanpa bantuan CPU. Tiga langkah
dalam transfer DMA:
1. Prosesor menyiapkan DMA transfer dengan menyedia kan data-data dari device,
operasi yang akan ditampilkan, alamat memori yang menjadi sumber dan tujuan
data, dan banyaknya byte yang di transfer.
2. DMA controller memulai operasi (menyiapkan bus, menyediakan alamat, menulis dan
membaca data), sampai seluruh blok sudah di transfer.
3. DMA controller meng-interupsi prosesor, dimana selanjutnya akan ditentukan
tindakan berikutnya.
Pada dasarnya, DMA mempunyai dua metode yang berbeda dalam mentransfer data.
Metode yang pertama adalah metode yang sangat baku dan simple disebut HALT, atau
Burst Mode DMA, karena DMA controller memegang kontrol dari sistem bus dan
mentransfer semua blok data ke atau dari memori pada single burst. Selagi transfer
masih dalam progres, sistem mikroprosessor di-set idle, tidak melakukan instruksi
operasi untuk menjaga internal register. Tipe operasi DMA seperti ini ada pada
kebanyakan komputer.
Metode yang kedua, mengikut-sertakan DMA controller untuk memegang kontrol dari
sistem bus untuk jangka waktu yang lebih pendek pada periode dimana mikroprosessor
sibuk dengan operasi internal dan tidak membutuhkan akses ke sistem bus. Metode
DMA ini disebut cycle stealing mode. Cycle stealing DMA lebih kompleks untuk
diimplementasikan dibandingkan HALT DMA, karena DMA controller harus mempunyai
kepintaran untuk merasakan waktu pada saat sistem bus terbuka.

Gambar 8.3. DMA Controller. Sumber: SO Bahan Kuliah IKI-20230, hal.172


8.1.3.3. Handshaking
Proses handshaking antara DMA controller dan device controller dilakukan melalui
sepasang kabel yang disebut DMA-request dan DMA-acknowledge. Device controller
mengirimkan sinyal melalui DMA-request ketika akan mentransfer data sebanyak satu
word. Hal ini kemudian akan mengakibatkan DMA controller memasukkan alamatalamat yang dinginkan ke kabel alamat memori, dan mengirimkan sinyal melalui kabel
DMA-acknowledge. Setelah sinyal melalui kabel DMA-acknowledge diterima, device
controller mengirimkan data yang dimaksud dan mematikan sinyal pada DMA-request.
Hal ini berlangsung berulang-ulang sehingga disebut handshaking. Pada saat DMA
controller mengambil alih memori, CPU sementara tidak dapat mengakses memori
(dihalangi), walau pun masih dapat mengaksees data pada cache primer dan sekunder.
Hal ini disebut cycle stealing, yang walau pun memperlambat komputasi CPU, tidak
menurunkan kinerja karena memindahkan pekerjaan data transfer ke DMA controller
meningkatkan performa sistem secara keseluruhan.
8.1.3.4. Cara-cara Implementasi DMA
Dalam pelaksanaannya, beberapa komputer menggunakan memori fisik untuk proses

DMA , sedangkan jenis komputer lain menggunakan alamat virtual dengan melalui tahap
"penerjemahan" dari alamat memori virtual menjadi alamat memori fisik, hal ini disebut
direct virtual-memory address atau DVMA. Keuntungan dari DVMA adalah dapat
mendukung transfer antara dua memory mapped device tanpa intervensi CPU.

8.2. Interface Aplikasi I/O


Ketika suatu aplikasi ingin membuka data yang ada dalam suatu disk, sebenarnya
aplikasi tersebut harus dapat membedakan jenis disk apa yang akan diaksesnya. Untuk
mempermudah pengaksesan, sistem operasi melakukan standarisasi cara pengaksesan
pada peralatan I/O. Pendekatan inilah yang dinamakan interface aplikasi I/O.
Interface aplikasi I/O melibatkan abstraksi, enkapsulasi, dan software layering. Abstraksi
dilakukan dengan membagi-bagi detail peralatan-peralatan I/O ke dalam kelas-kelas
yang lebih umum. Dengan adanya kelas-kelas yang umum ini, maka akan lebih mudah
untuk membuat fungsi-fungsi standard (interface) untuk mengaksesnya. Lalu kemudian
adanya device driver pada masing-masing peralatan I/O, berfungsi untuk enkapsulasi
perbedaan-perbedaan yang ada dari masing-masing anggota kelas-kelas yang umum
tadi. Device driver mengenkapsulasi tiap -tiap peralatan I/O ke dalam masing-masing 1
kelas yang umum tadi (interface standar). Tujuan dari adanya lapisan device driver ini
adalah untuk menyembunyikan perbedaan-perbedaan yang ada pada device controller
dari subsistem I/O pada kernel. Karena hal ini, subsistem I/O dapat bersifat independen
dari hardware.
Karena subsistem I/O independen dari hardware maka hal ini akan sangat
menguntungkan dari segi pengembangan hardware. Tidak perlu menunggu vendor
sistem operasi untuk mengeluarkan support code untuk hardware-hardware baru yang
akan dikeluarkan oleh vendor hardware.

8.2.1. Peralatan Block dan Karakter


Peralatan block diharapkan dapat memenuhi kebutuhan akses pada berbagai macam
disk drive dan juga peralatan block lainnya. Block device diharapkan dapat
memenuhi/mengerti perintah baca, tulis dan juga perintah pencarian data pada
peralatan yang memiliki sifat random-access.
Keyboard adalah salah satu contoh alat yang dapat mengakses stream-karakter. System
call dasar dari interface ini dapat membuat sebuah aplikasi mengerti tentang bagaimana
cara untuk mengambil dan menuliskan sebuah karakter. Kemudian pada pengembangan
lanjutannya, kita dapat membuat library yang dapat mengakses data/pesan per-baris.

8.2.2. Peralatan Jaringan


Karena adanya perbedaan dalam kinerja dan pengalamatan dari jaringan I/O, maka
biasanya sistem operasi memiliki interface I/O yang berbeda dari baca, tulis dan
pencarian pada disk. Salah satu yang banyak digunakan pada sistem operasi adalah

interface socket.

Socket berfungsi untuk menghubungkan komputer ke jaringan. System call pada socket
interface dapat memudahkan suatu aplikasi untuk membuat local socket, dan
menghubungkannya ke remote socket. Dengan menghubungkan komputer ke socket,
maka komunikasi antar komputer dapat dilakukan.

8.2.3. Jam dan Timer


Adanya jam dan timer pada hardware komputer, setidaknya memiliki tiga fungsi,
memberi informasi waktu saat ini, memberi informasi lamanya waktu sebuah proses,
sebagai trigger untuk suatu operasi pada suatu waktu. Fungsi fungsi ini sering
digunakan oleh sistem operasi. Sayangnya, system call untuk pemanggilan fungsi ini
tidak di-standarisasi antar sistem operasi Hardware yang mengukur waktu dan
melakukan operasi trigger dinamakan programmable interval timer. Dia dapat di set
untuk menunggu waktu tertentu dan kemudian melakukan interupsi. Contoh
penerapannya ada pada scheduler, dimana dia akan melakukan interupsi yang akan
memberhentikan suatu proses pada akhir dari bagian waktunya.
Sistem operasi dapat mendukung lebih dari banyak timer request daripada banyaknya
jumlah hardware timer. Dengan kondisi seperti ini, maka kernel atau device driver
mengatur list dari interupsi dengan urutan yang duluan datang yang duluan dilayani.

8.2.4. Blocking dan Nonblocking I/O


Ketika suatu aplikasi menggunakan sebuah blocking system call, eksekusi aplikasi itu
akan diberhentikan untuk sementara. aplikasi tersebut akan dipindahkan ke wait queue.
Dan setelah system call tersebut selesai, aplikasi tersebut dikembalikan ke run queue,
sehingga pengeksekusian aplikasi tersebut akan dilanjutkan. Physical action dari
peralatan I/O biasanya bersifat asynchronous. Akan tetapi, banyak sistem operasi yang
bersifat blocking, hal ini terjadi karena blocking application lebih mudah dimengerti dari
pada nonblocking application.

8.3. Kernel I/O Subsystem


Kernel menyediakan banyak service yang berhubungan dengan I/O. Pada bagian ini, kita
akan mendeskripsikan beberapa service yang disediakan oleh kernel I/O subsystem, dan
kita akan membahas bagaimana caranya membuat infrastruktur hardware dan devicedriver. Service yang akan kita bahas adalah I/O scheduling, bufering, caching, spooling,
reservasi device, error handling.

8.3.1. I/O Scheduling


Untuk menjadualkan sebuah set permintaan I/O, kita harus menetukan urutan yang

bagus untuk mengeksekusi permintaan tersebut. Scheduling dapat meningkatkan


kemampuan sistem secara keseluruhan, dapat membagi device secara rata di antara
proses-proses, dan dapat mengurangi waktu tunggu rata-rata untuk menyelesaikan I/O.
Ini adalah contoh sederhana untuk menggambarkan definisi di atas. Jika sebuah arm
disk terletak di dekat permulaan disk, dan ada tiga aplikasi yang memblokir panggilan
untuk membaca untuk disk tersebut. Aplikasi 1 meminta sebuah blok dekat akhir disk,
aplikasi 2 meminta blok yang dekat dengan awal, dan aplikasi 3 meminta bagian tengah
dari disk. Sistem operasi dapat mengurangi jarak yang harus ditempuh oleh arm disk
dengan melayani aplikasi tersebut dengan urutan 2, 3, 1. Pengaturan urutan pekerjaan
kembali dengan cara ini merupakan inti dari I/O scheduling.
Sistem operasi mengembangkan implementasi scheduling dengan menetapkan antrian
permintaan untuk tiap device. Ketika sebuah aplikasi meminta sebuah blocking sistem
I/O, permintaan tersebut dimasukkan ke dalam antrian untuk device tersebut.
Scheduler I/O mengatur urutan antrian untuk meningkatkan efisiensi dari sistem dan
waktu respon rata-rata yang harus dialami oleh aplikasi. Sistem operasi juga mencoba
untuk bertindak secara adil, seperti tidak ada aplikasi yang menerima service yang
buruk, atau dapat seperti memberi prioritas service untuk permintaan penting yang
ditunda. Contohnya, pemintaan dari subsistem mungkin akan mendapatkan prioritas
lebih tinggi daripada permintaan dari aplikasi. Beberapa algoritma scheduling untuk
disk I/O akan dijelaskan ada bagian Disk Scheduling.
Satu cara untuk meningkatkan efisiensi I/O subsistem dari sebuah komputer adalah
dengan mengatur operasi I/O. Cara lain adalah dengan menggunakan tempat
penyimpanan pada memori utama atau pada disk, melalui teknik yang disebut bufering,
caching, dan spooling.

8.3.2. Buffering
Bufer adalah area memori yang menyimpan data ketika mereka sedang dipindahkan
antara dua device atau antara device dan aplikasi. Bufering dilakukan untuk tiga buah
alasan. Alasan pertama adalah untuk men-cope dengan kesalahan yang terjadi karena
perbedaan kecepatan antara produsen dengan konsumen dari sebuah stream data.
Sebagai contoh, sebuah file sedang diterima melalui modem dan ditujukan ke media
penyimpanan di hard disk. Kecepatan modem tersebut kira-kira hanyalah 1/1000
daripada harddisk. Jadi bufer dibuat di dalam memori utama untuk mengumpulkan
jumlah byte yang diterima dari modem. Ketika keseluruhan data di bufer sudah sampai,
bufer tersebut dapat ditulis ke disk dengan operasi tunggal. Karena penulisan disk tidak
terjadi dengan instan dan modem masih memerlukan tempat untuk menyimpan data
yang berdatangan, maka dipakai 2 buah bufer. Setelah modem memenuhi bufer
pertama, akan terjadi request untuk menulis di disk. Modem kemudian mulai memenuhi
bufer kedua sementara bufer pertama dipakai untuk penulisan ke disk. Pada saat
modem sudah memenuhi bufer kedua, penulisan ke disk dari bufer pertama
seharusnya sudah selesai, jadi modem akan berganti kembali memenuhi bufer pertama
dan bufer kedua dipakai untuk menulis. Metode double bufering ini membuat pasangan
ganda antara produsen dan konsumen sekaligus mengurangi kebutuhan waktu di antara
mereka.

Alasan kedua dari bufering adalah untuk menyesuaikan device-device yang mempunyai
perbedaan dalam ukuran transfer data. Hal ini sangat umum terjadi pada jaringan
komputer, dimana bufer dipakai secara luas untuk fragmentasi dan pengaturan kembali
pesan-pesan yang diterima. Pada bagian pengirim, sebuah pesan yang besar akan
dipecah ke paket-paket kecil. Paket-paket tersebut dikirim melalui jaringan, dan
penerima akan meletakkan mereka di dalam bufer untuk disusun kembali.
Alasan ketiga untuk bufering adalah untuk mendukung copy semantics untuk aplikasi
I/O. Sebuah contoh akan menjelaskan apa arti dari copy semantics. Jika ada sebuah
aplikasi yang mempunyai bufer data yang ingin dituliskan ke disk. Aplikasi tersebut
akan memanggil sistem penulisan, menyediakan pointer ke bufer, dan sebuah integer
untuk menunjukkan ukuran bytes yang ingin ditulis. Setelah pemanggilan tersebut,
apakah yang akan terjadi jika aplikasi tersebut merubah isi dari bufer, dengan copy
semantics, keutuhan data yang ingin ditulis sama dengan data waktu aplikasi ini
memanggil sistem untuk menulis, tidak tergantung dengan perubahan yang terjadi pada
bufer.
Sebuah cara sederhana untuk sistem operasi untuk menjamin copy semantics adalah
membiarkan sistem penulisan untuk mengkopi data aplikasi ke dalam bufer kernel
sebelum mengembalikan kontrol kepada aplikasi. Jadi penulisan ke disk dilakukan pada
bufer kernel, sehingga perubahan yang terjadi pada bufer aplikasi tidak akan membawa
dampak apa-apa. Mengcopy data antara bufer kernel data aplikasi merupakan sesuatu
yang umum pada sistem operasi, kecuali overhead yang terjadi karena operasi ini karena
clean semantics. Kita dapat memperoleh efek yang sama yang lebih efisien dengan
memanfaatkan virtual-memori mapping dan proteksi copy-on-wire dengan pintar.

8.3.3. Caching
Sebuah cache adalah daerah memori yang cepat yang berisikan data kopian. Akses ke
sebuah kopian yang di-cached lebih efisien daripada akses ke data asli. Sebagai contoh,
instruksi-instruksi dari proses yang sedang dijalankan disimpan ke dalam disk, dan tercached di dalam memori physical, dan kemudian dicopy lagi ke dalam cache secondary
and primary dari CPU. Perbedaan antara sebuah bufer dan ache adalah bufer dapat
menyimpan satu-satunya informasi datanya sedangkan sebuah cache secara definisi
hanya menyimpan sebuah data dari sebuah tempat untuk dapat diakses lebih cepat.
Caching dan bufering adalah dua fungsi yang berbeda, tetapi terkadang sebuah daerah
memori dapat digunakan untuk keduanya. sebagai contoh, untuk menghemat copy
semantics dan membuat scheduling I/O menjadi efisien, sistem operasi menggunakan
bufer pada memori utama untuk menyimpan data. Bufer ini juga digunakan sebagai
cache, untuk meningkatkan efisiensi I/O untuk file yang digunakan secara bersamasama oleh beberapa aplikasi, atau yang sedang dibaca dan ditulis secara berulang-ulang.
Ketika kernel menerima sebuah permintaan file I/O, kernel tersebut mengakses bufer
cacheuntuk melihat apakah daerah memori tersebut sudah tersedia dalam memori
utama. Jika iya, sebuah physical disk I/O dapat dihindari atau tidak dipakai. penulisan
disk juga terakumulasi ke dalam bufer cache selama beberapa detik, jadi transfer yang
besar akan dikumpulkan untuk mengefisiensikan schedule penulisan. Cara ini akan
menunda penulisan untuk meningkatkan efisiensi I/O akan dibahas pada bagian Remote

File Access.

8.3.4. Spooling dan Reservasi Device


Sebuah spool adalah sebuah bufer yang menyimpan output untuk sebuah device,
seperti printer, yang tidak dapat menerima interleaved data streams. Walau pun printer
hanya dapat melayani satu pekerjaan pada waktu yang sama, beberapa aplikasi dapat
meminta printer untuk mencetak, tanpa harus mendapatkan hasil output mereka
tercetak secara bercampur. Sistem operasi akan menyelesaikan masalah ini dengan
meng-intercept semua output kepada printer. Tiap output aplikasi sudah di-spooled ke
disk file yang berbeda. Ketika sebuah aplikasi selesai mengeprint, sistem spooling akan
melanjutkan ke antrian berikutnya. Di dalam beberapa sistem operasi, spooling ditangani
oleh sebuah sistem proses daemon. Pada sistem operasi yang lain, sistem ini ditangani
oleh in-kernel thread. Pada kedua kasus, sistem operasi menyediakan interfacekontrol
yang membuat users and system administrator dapat menampilkan antrian tersebut,
untuk mengenyahkan antrian-antrian yang tidak diinginkan sebelum mulai di-print.
Untuk beberapa device, seperti drive tapedan printer tidak dapat me-multiplex
permintaan I/O dari beberapa aplikasi. Spooling merupakan salah satu cara untuk
mengatasi masalah ini. Cara lain adalah dengan membagi koordinasi untuk multiple
concurrent ini. Beberapa sistem operasi menyediakan dukungan untuk akses device
secara eksklusif, dengan mengalokasikan proses ke device idledan membuang device
yang sudah tidak diperlukan lagi. Sistem operasi lainnya memaksakan limit suatu file
untuk menangani device ini. Banyak sistem operasi menyediakan fungsi yang membuat
proses untuk menangani koordinat exclusive akses diantara mereka sendiri.

8.3.5. Error Handling


Sebuah sistem operasi yang menggunakan protected memory dapat menjaga banyak
kemungkinan error akibat hardware mau pun aplikasi. Devices dan transfer I/O dapat
gagal dalam banyak cara, bisa karena alasan transient, seperti overloaded pada network,
mau pun alasan permanen yang seperti kerusakan yang terjadi pada disk controller.
Sistem operasi seringkali dapat mengkompensasikan untuk kesalahan transient. Seperti,
sebuah kesalahan baca pada disk akan mengakibatkan pembacaan ulang kembali dan
sebuah kesalahan pengiriman pada network akan mengakibatkan pengiriman ulang
apabila protokolnya diketahui. Akan tetapi untuk kesalahan permanent, sistem operasi
pada umumnya tidak akan bisa mengembalikan situasi seperti semula.
Sebuah ketentuan umum, yaitu sebuah sistem I/O akan mengembalikan satu bit
informasi tentang status panggilan tersebut, yang akan menandakan apakah proses
tersebut berhasil atau gagal. Sistem operasi pada UNIX menggunakan integer tambahan
yang dinamakan errno untuk mengembalikan kode kesalahan sekitar 1 dari 100 nilai
yang mengindikasikan sebab dari kesalahan tersebut. Akan tetapi, beberapa perangkat
keras dapat menyediakan informasi kesalahan yang detail, walau pun banyak sistem

operasi yang tidak mendukung fasilitas ini.

8.3.6. Kernel Data Structure


Kernel membutuhkan informasi state tentang penggunakan komponen I/O. Kernel
menggunakan banyak struktur yang mirip untuk melacak koneksi jaringan, komunikasi
karakter-device, dan aktivitas I/O lainnya.
UNIX menyediakan akses sistem file untuk beberapa entiti, seperti file user, raw devices,
dan alamat tempat proses. Walau pun tiap entiti ini didukung sebuah operasi baca,
semantics-nya berbeda untuk tiap entiti. Seperti untuk membaca file user, kernel perlu
memeriksa bufer cache sebelum memutuskan apakah akan melaksanakan I/O disk.
Untuk membaca sebuah raw disk, kernel perlu untuk memastikan bahwa ukuran
permintaan adalah kelipatan dari ukuran sektor disk, dan masih terdapat di dalam batas
sektor. Untuk memproses citra, cukup perlu untuk mengkopi data ke dalam memori.
UNIX mengkapsulasikan perbedaan-perbedaan ini di dalam struktur yang uniform
dengan menggunakan teknik object oriented.
Beberapa sistem operasi bahkan menggunakan metode object oriented secara lebih
extensif. Sebagai contoh, Windows NT menggunakan implementasi message-passing
untuk I/O. Sebuah permintaan I/O akan dikonversikan ke sebuah pesan yang dikirim
melalui kernel kepada I/O manager dan kemudian ke device driver, yang masing-masing
bisa mengubah isi pesan. Untuk output, isi message adalah data yang kan ditulis. Untuk
input, message berisikan bufer untuk menerima data. Pendekatan message-passing ini
dapat menambah overhead, dengan perbandingan dengan teknik prosedural yang menshare struktur data, tetapi akan mensederhanakan struktur dan design dari sistem I/O
tersebut dan menambah fleksibilitas.
Kesimpulannya, subsistem I/O mengkoordinasi kumpulan-kumpulan service yang
banyak sekali, yang tersedia dari aplikasi mau pun bagian lain dari kernel. Subsistem
I/O mengawasi:
1. Manajemen nama untuk file dan device.
2. Kontrol akses untuk file dan device.
3. Kontrol operasi, contoh: model yang tidak dapat dikenali.
4. Alokasi tempat sistem file.
5. Alokasi device.
6. Bufering, caching, spooling.
7. I/O scheduling
8. Mengawasi status device, error handling, dan kesalahan dalam recovery.

9. Konfigurasi dan utilisasi driver device.

8.4.

Penanganan Permintaan I/O

Di bagian sebelumnya, kita mendeskripsikan handshaking antara device driver dan


device controller, tapi kita tidak menjelaskan bagaimana Sistem Operasi
menyambungkan permintaan aplikasi untuk menyiapkan jaringan menuju sektor disk
yang spesifik.
Sistem Operasi yang modern mendapatkan fleksibilitas yang signifikan dari tahapantahapan tabel lookup di jalur diantara permintaan dan physical device controller. Kita
dapat mengenalkan device dan driver baru ke komputer tanpa harus meng-compile ulang
kernelnya. Sebagai fakta, ada beberapa sistem operasi yang mampu untuk me-load
device drivers yang diinginkan. Pada waktu boot, sistem mula-mula meminta bus piranti
keras untuk menentukan device apa yang ada, kemudian sistem me-load ke dalam driver
yang sesuai; baik sesegera mungkin, mau pun ketika diperlukan oleh sebuah permintaan
I/O.
UNIX Sistem V mempunyai mekanisme yang menarik, yang disebut streams, yang
membolehkan aplikasi untuk men-assemble pipeline dari kode driver secara dinamis.
Sebuah stream adalah sebuah koneksi full duplex antara sebuah device driver dan
sebuah proses user-level. Stream terdiri atas sebuah stream head yang merupakan
antarmuka dengan user process, sebuah driver end yang mengontrol device, dan nol atau
lebih stream modules diantara mereka. Modules dapat didorong ke stream untuk
menambah fungsionalitas di sebuah layered fashion. Sebagai gambaran sederhana,
sebuah proses dapat membuka sebuah alat port serial melalui sebuah stream, dan dapat
mendorong ke sebuah modul untuk memegang edit input. Stream dapat digunakan
untuk interproses dan komunikasi jaringan. Faktanya, di Sistem V, mekanisme soket
diimplementasikan dengan stream.
Berikut dideskripsikan sebuah lifecycle yang tipikal dari sebuah permintaan pembacaan
blok.
1. Sebuah proses mengeluarkan sebuah blocking read system call ke sebuah file
deskriptor dari berkas yang telah dibuka sebelumnya.
2. Kode system-call di kernel mengecek parameter untuk kebenaran. Dalam kasus
input, jika data telah siap di bufer cache, data akan dikembalikan ke proses dan
permintaan I/O diselesaikan.
3. Jika data tidak berada dalam bufer cache, sebuah physical I/O akan bekerja,
sehingga proses akan dikeluarkan dari antrian jalan (run queue) dan diletakkan
di antrian tunggu (wait queue) untuk alat, dan permintaan I/O pun dijadwalkan.
Pada akhirnya, subsistem I/O mengirimkan permintaan ke device driver.
Bergantung pada sistem operasi, permintaan dikirimkan melalui call subrutin
atau melalui pesan in-kernel.
4. Device driver mengalokasikan ruang bufer pada kernel untuk menerima data,

dan menjadwalkan I/O. Pada akhirnya, driver mengirim perintah ke device


controller dengan menulis ke register device control.
5. Device controller mengoperasikan piranti keras device untuk melakukan transfer
data.
6. Driver dapat menerima status dan data, atau dapat menyiapkan transfer DMA ke
memori kernel.
1. Kita mengasumsikan bahwa transfer diatur oleh sebuah DMA controller, yang
meggunakan interupsi ketika transfer selesai.
7. Interrupt handler yang sesuai menerima interupsi melalui tabel vektor-interupsi,
menyimpan sejumlah data yang dibutuhkan, menandai device driver, dan kembali
dari interupsi.
8. Device driver menerima tanda, menganalisa permintaan I/O mana yang telah
diselesaikan, menganalisa status permintaan, dan menandai subsistem I/O
kernel yang permintaannya telah terselesaikan.
9. Kernel mentransfer data atau mengembalikan kode ke ruang alamat dari proses
permintaan, dan memindahkan proses dari antrian tunggu kembali ke antrian
siap.
10. Proses tidak diblok ketika dipindahkan ke antrian siap. Ketika penjadwal
(scheduler) mengembalikan proses ke CPU, proses meneruskan eksekusi pada
penyelesaian dari system call.

8.5. Kinerja I/O


8.5.1. Pengaruh I/O pada Kinerja
I/O sangat berpengaruh pada kinerja sebuah sistem komputer. Hal ini dikarenakan I/O
sangat menyita CPU dalam pengeksekusian device driver dan penjadwalan proses,
demikian sehingga alih konteks yang dihasilkan membebani CPU dan cache perangkat
keras. Selain itu, I/O juga memenuhi bus memori saat mengkopi data antara controller
dan physical memory, serta antara bufer pada kernel dan application space data. Karena
besarnya pengaruh I/O pada kinerja komputer inilah bidang pengembangan arsitektur
komputer sangat memperhatikan masalah-masalah yang telah disebutkan diatas.

8.5.2. Cara Meningkatkan Efisiensi I/O


1. Menurunkan jumlah alih konteks.
2. Mengurangi jumlah pengkopian data ke memori ketika sedang dikirimkan antara
device dan aplikasi.
3. Mengurangi frekuensi interupsi, dengan menggunakan ukuran transfer yang besar,
smart controller, dan polling.

4. Meningkatkan concurrency dengan controller atau channel yang mendukung DMA.


5. Memindahkan kegiatan processing ke perangkat keras, sehingga operasi kepada
device controller dapat berlangsung bersamaan dengan CPU.
6. Menyeimbangkan antara kinerja CPU, memory subsystem, bus, dan I/O.

8.5.3. Implementasi Fungsi I/O


Pada dasarnya kita mengimplementasikan algoritma I/O pada level aplikasi. Hal ini
dikarenakan kode aplikasi sangat fleksible, dan bugs aplikasi tidak mudah menyebabkan
sebuah sistem crash. Lebih lanjut, dengan mengembangkan kode pada level aplikasi, kita
akan menghindari kebutuhan untuk reboot atau reload device driver setiap kali kita
mengubah kode. Implementasi pada level aplikasi juga bisa sangat tidak efisien. Tetapi,
karena overhead dari alih konteks dan karena aplikasi tidak bisa mengambil keuntungan
dari struktur data kernel internal dan fungsionalitas dari kernel (misalnya, efisiensi dari
kernel messaging, threading dan locking.
Pada saat algoritma pada level aplikasi telah membuktikan keuntungannya, kita
mungkin akan mengimplementasikannya di kernel. Langkah ini bisa meningkatkan
kinerja tetapi perkembangannya dari kerja jadi lebih menantang, karena besarnya kernel
dari sistem operasi, dan kompleksnya sistem sebuah perangkat lunak. Lebih lanjut , kita
harus men-debug keseluruhan dari implementasi in-kernel untuk menghindari korupsi
sebuah data dan sistem crash.
Kita mungkin akan mendapatkan kinerja yang optimal dengan menggunakan
implementasi yang special pada perangkat keras, selain dari device atau controller.
Kerugian dari implementasi perangkat keras termasuk kesukaran dan biaya yang
ditanggung dalam membuat kemajuan yang lebih baik dalam mengurangi bugs,
perkembangan waktu yang maju dan fleksibilitas yang meningkat. Contohnya, RAID
controller pada perangkat keras mungkin tidak akan menyediakan sebuah efek pada
kernel untuk mempengaruhi urutan atau lokasi dari individual block reads dan write,
meski pun kernel tersebut mempunyai informasi yang spesial mengenai workload yang
dapat mengaktifkan kernel untuk meningkatkan kinerja dari I/O.

8.6. Struktur Disk


Disk menyediakan penyimpanan sekunder bagi sistem komputer modern. Magnetic tape
sebelumnya digunakan sebagai media penyimpanan sekunder, tetapi waktu aksesnya
lebih lambat dari disk. Oleh karena itu, sekarang tape digunakan terutama untuk
backup, untuk penyimpanan informasi yang tidak sering, sebagai media untuk
mentransfer infromasi dari satu sistem ke sistem yang lain, dan untuk menyimpan
sejumlah data yang terlalu besar untuk sistem disk.
Disk drive modern dialamatkan sebagai suatu array satu dimensi yang besar dari blok

lojik, dimana blok lojik merupakan unit terkecil dari transfer. Ukuran dari blok lojik
biasanya adalah 512 bytes, walau pun sejumlah disk dapat diformat di level rendah (low
level formatted) untuk memilih sebuah ukuran blok lojik yang berbeda, misalnya 1024
bytes. Array satu dimensi dari blok logic dipetakan ke bagian dari disk secara
sekuensial. Sektor 0 adalah sektor pertama dari trek pertama di silinder paling luar
(outermost cylinder). Pemetaan kemudian memproses secara berurutan trek tersebut,
kemudian melalui trek selanjutnya di silinder tersebut, dan kemudian sisa silinder dari
yang paling luar sampai yang paling dalam.
Dengan menggunakan pemetaan, kita dapat minimal dalam teori mengubah sebuah
nomor blok logikal ke sebuah alamat disk yang bergaya lama (old-style disk address) yang
terdiri atas sebuah nomor silinder, sebuah nomor trek di silinder tersebut, dan sebuah
nomor sektor di trek tersebut. Dalam prakteknya, adalah sulit untuk melakukan
translasi ini, dengan 2 alasan. Pertama, kebanyakan disk memiliki sejumlah sektor yang
rusak, tetapi pemetaan menyembunyikan hal ini dengan mensubstitusikan dengan
sektor yang dibutuhkan dari mana-mana di dalam disk. Kedua, jumlah dari sektor per
trek tidaklah konstan. Semakin jauh sebuah trek dari tengah disk, semakin besar
panjangnya, dan juga semakin banyak sektor yang dipunyainya. Oleh karena itu, disk
modern diatur menjadi zona-zona silinder. Nomor sektor per trek adalah konstan dalam
sebuah zona. Tetapi seiring kita berpindah dari zona dalam ke zona luar, nomor sektor
per trek bertambah. Trek di zona paling luar tipikalnya mempunyai 40 persen sektor
lebih banyak daripada trek di zona paling dalam.
Nomor sektor per trek telah meningkat seiring dengan peningkatan teknologi disk, dan
adalah lazim untuk mempunyai lebih dari 100 sektor per trek di zona yang lebih luar dari
disk. Dengan analogi yang sama, nomor silinder per disk telah meningkat, dan sejumlah
ribuan silinder adalah tak biasa.

8.7. Penjadualan Disk


Salah satu tanggung jawab sistem operasi adalah menggunakan hardware dengan
efisien. Khusus untuk disk drives, efisiensi yang dimaksudkan di sini adalah dalam hal
waktu akses yang cepat dan aspek bandwidth disk. Waktu akses memiliki dua komponen
utama yaitu waktu pencarian dan waktu rotasi disk. Waktu pencarian adalah waktu
yang dibutuhkan disk arm untuk menggerakkan head ke bagian silinder disk yang
mengandung sektor yang diinginkan. Waktu rotasi disk adalah waktu tambahan yang
dibutuhkan untuk menunggu rotasi atau perputaran disk, sehingga sektor yang
diinginkan dapat dibaca oleh head. Pengertian Bandwidth adalah total jumlah bytes yang
ditransfer dibagi dengan total waktu antara permintaan pertama sampai seluruh bytes
selesai ditransfer. Untuk meningkatkan kecepatan akses dan bandwidth, kita dapat
melakukan penjadualan pelayanan atas permintaan I/O dengan urutan yang tepat.
Sebagaimana kita ketahui, jika suatu proses membutuhkan pelayanan I/O dari atau
menuju disk, maka proses tersebut akan melakukan system call ke sistem operasi.
Permintaan tersebut membawa informasi-informasi antara lain:
1. Apakah operasi input atau output.

2. Alamat disk untuk proses tersebut.


3. Alamat memori untuk proses tersebut
4. Jumlah bytes yang akan ditransfer
Jika disk drive beserta controller tersedia untuk proses tersebut, maka proses akan
dapat dilayani dengan segera. Jika ternyata disk drive dan controller tidak tersedia atau
sedang sibuk melayani proses lain, maka semua permintaan yang memerlukan
pelayanan disk tersebut akan diletakkan pada suatu antrian penundaan permintaan
untuk disk tersebut. Dengan demikian, jika suatu permintaan telah dilayani, maka
sistem operasi memilih permintaan tertunda dari antrian yang selanjutnya akan dilayani.

8.7.1. Penjadualan FCFS


Bentuk paling sederhana dalam penjadualan disk adalah dengan sistem antrian (queue)
atau First Come First Served (FCFS). Algoritma ini secara intrinsik bersifat adil, tetapi
secara umum algoritma ini pada kenyataannya tidak memberikan pelayanan yang paling
cepat. Sebagai contoh, antrian permintaan pelayanan disk untuk proses I/O pada blok
dalam silinder adalah sebagai berikut: 98, 183, 37, 122, 14, 124, 65, 67. Jika head pada
awalnya berada pada 53, maka head akan bergerak dulu dari 53 ke 98, kemudian 183,
37, 122, 14, 124, 65, dan terakhir 67, dengan total pergerakan head sebesar 640 silinder.
Permasalahan dengan menggunakan penjadualan jenis ini dapat diilustrasikan dengan
pergerakan dari 122 ke 14 dan kembali lagi ke 124. Jika permintaan terhadap silinder 37
dan 14 dapat dikerjakan/dilayani secara bersamaan, baik sebelum mau pun setelah
permintaan 122 dan 124, maka pergerakan total head dapat dikurangi secara signifikan,
sehingga dengan demikian pendayagunaan akan meningkat.

8.7.2. Penjadualan SSTF


Sangat beralasan jika kita menutup semua pelayanan pada posisi head saat ini, sebelum
menggerakkan head ke tempat lain yang jauh untuk melayani suatu permintaan. Asumsi
ini mendasari algoritma penjadualan kita yang kedua yaitu shortest-seek-time-first
(SSTF). Algoritma ini memilih permintaan dengan berdasarkan waktu pencarian atau
seek time paling minimum dari posisi head saat itu. Karena waktu pencarian meningkat
seiring dengan jumlah silinder yang dilewati oleh head, maka SSTF memilih permintaan
yang paling dekat posisinya di disk terhadap posisi head saat itu.
Perhatikan contoh antrian permintaan yang kita sajikan pada penjadualan FCFS,
permintaan paling dekat dengan posisi head saat itu (53) adalah silinder 65. Jika kita
penuhi permintaan 65, maka yang terdekat berikutnya adalah silinder 67. Dari 67,
silinder 37 letaknya lebih dekat ke 67 dibandingkan silinder 98, jadi 37 dilayani duluan.
Selanjutnya, dilanjutkan ke silinder 14, 98, 122, 124, dan terakhir adalah 183. Metode
penjadualan ini hanya menghasilkan total pergerakan head sebesar 236 silinder -- kirakira sepertiga dari yang dihasilkan penjadualan FCFS. Algoritma SSTF ini memberikan
peningkatan yang cukup signifikan dalam hal pendayagunaan atau performance sistem.
Penjadualan SSTF merupakan salah satu bentuk dari penjadualan shortest-job-first

(SJF), dan karena itu maka penjadualan SSTF juga dapat mengakibatkan starvation
pada suatu saat tertentu. Kita ketahui bahwa permintaan dapat datang kapan saja.
Anggap kita memiliki dua permintaan dalam antrian, yaitu untuk silinder 14 dan 186.
Selama melayani permintaan 14, kita anggap ada permintaan baru yang letaknya dekat
dengan 14. Karena letaknya lebih dekat ke 14, maka permintaan ini akan dilayani dulu
sementara permintaan 186 menunggu gilirannya. Jika kemudian berdatangan lagi
permintaan-permintaan yang letaknya lebih dekat dengan permintaan terakhir yang
dilayani jika dibandingkan dengan 186, maka permintaan 186 bisa saja menunggu
sangat lama. Kemudian jika ada lagi permintaan yang lebih jauh dari 186, maka juga
akan menunggu sangat lama untuk dapat dilayani.
Walau pun algoritma SSTF secara substansial meningkat jika dibandingkan dengan
FCFS, tetapi algoritma SSTF ini tidak optimal. Seperti contoh diatas, kita dapat
menggerakkan head dari 53 ke 37, walau pun bukan yang paling dekat, kemudian ke
14, sebelum menuju 65, 67, 98, 122, dan 183. Strategi ini dapat mengurangi total
gerakan head menjadi 208 silinder.

8.7.3. Penjadualan SCAN


Pada algoritma SCAN, pergerakan disk arm dimulai dari salah satu ujung disk,
kemudian bergerak menuju ujung yang lain sambil melayani permintaan setiap kali
mengunjungi masing-masing silinder. Jika telah sampai di ujung disk, maka disk arm
bergerak berlawanan arah, kemudian mulai lagi melayani permintaan-permintaan yang
muncul. Dalam hal ini disk arm bergerak bolak-balik melalui disk.
Kita akan menggunakan contoh yang sudah dibarikan diatas. Sebelum melakukan SCAN
untuk melayani permintaan-permintaan 98, 183, 37, 122, 14, 124, 65, dan 67, kita
harus mengetahui terlebih dahulu pergerakan head sebagai langkah awal dari 53. Jika
disk arm bergerak menuju 0, maka head akan melayani 37 dan kemudian 14. Pada
silinder 0, disk arm akan bergerak berlawanan arah dan bergerak menuju ujung lain dari
disk untuk melayani permintaan 65, 67, 98, 122, 124, dan 183. Jika permintaan terletak
tepat pada head saat itu, maka akan dilayani terlebih dahulu, sedangkan permintaan
yang datang tepat dibelakang head harus menunggu dulu head mencapai ujung disk,
berbalik arah, baru kemudian dilayani.
Algoritma SCAN ini disebut juga algoritma lift/ elevator, karena kelakuan disk arm sama
seperti elevator dalam suatu gedung, melayani dulu orang-orang yang akan naik ke atas,
baru kemudian berbalik arah untuk melayani orang-orang yang ingin turun ke bawah.
Kelemahan algoritma ini adalah jika banyak permintaan terletak pada salah satu ujung
disk, sedangkan permintaan yang akan dilayani sesuai arah arm disk jumlahnya sedikit
atau tidak ada, maka mengapa permintaan yang banyak dan terdapat pada ujung yang
berlawanan arah dengan gerakan disk arm saat itu tidak dilayani duluan? Ide ini akan
mendasari algoritma penjadualan berikut yang akan kita bahas.

8.7.4. Penjadualan C-SCAN


Circular-SCAN adalah varian dari algoritma SCAN yang sengaja didesain untuk

menyediakan waktu tunggu yang sama. Seperti halnya SCAN, C-SCAN akan
menggerakkan head dari satu ujung disk ke ujung lainnya sambil melayani permintaan
yang terdapat selama pergerakan tersebut. Tetapi pada saat head tiba pada salah satu
ujung, maka head tidak berbalik arah dan melayani permintaan-permintaan, melainkan
akan kembali ke ujung disk asal pergerakannya. Jika head mulai dari ujung 0, maka
setelah tiba di ujung disk yang lainnya, maka head tidak akan berbalik arah menuju
ujung 0, tetapi langsung bergerak ulang dari 0 ke ujung satunya lagi.

8.7.5. Penjadualan LOOK


Perhatikan bahwa SCAN dan C-SCAN menggerakkan disk arm melewati lebar seluruh
disk. Pada kenyataanya algoritma ini tidak diimplementasikan demikian (pergerakan
melewati lebar seluruh disk). Pada umumnya, arm disk bergerak paling jauh hanya pada
permintaan terakhir pada masing-masin arah pergerakannya. Kemudian langsung
berbalik arah tanpa harus menuju ujung disk. Versi SCAN dan C-SCAN yang berprilaku
seperti ini disebut LOOK SCAN dan LOOK C-SCAN, karena algoritma ini melihat dulu
permintaan-permintaan sebelum melanjutkan arah pergerakannya.

8.7.6. Pemilihan Algoritma Penjadualan Disk


Dari algoritma-algoritma diatas, bagaimanakah kita memilih algoritma terbaik yang akan
digunakan? SSTF lebih umum dan memiliki prilaku yang lazim kita temui. SCAN dan CSCAN memperlihatkan kemampuan yang lebih baik bagi sistem yang menempatkan
beban pekerjaan yang berat kepada disk, karena algoritma tersebut memiliki masalah
starvation yang paling sedikit. Untuk antrian permintaan tertentu, mungkin saja kita
dapat mendefinisikan urutan akses dan pengambilan data dari disk yang optimal, tapi
proses komputasi membutuhkan penjadualan optimal yang tidak kita dapatkan pada
SSTF atau SCAN.
Dengan algoritma penjadualan yang mana pun, kinerja sistem sangat tergantung pada
jumlah dan tipe permintaan. Sebagai contoh, misalnya kita hanya memiliki satu
permintaan, maka semua algoritma penjadualan akan dipaksa bertindak sama, karena
algoritma-algoritma tersebut hanya punya satu pilihan dari mana menggerakkan disk
head: semuanya berprilaku seperti algoritma penjadualan FCFS.
Perlu diperhatikan pula bahwa pelayanan permintaan disk dapat dipengaruhi pula oleh
metode alokasi file. Sebuah program yang membaca alokasi file secara terus menerus
mungkin akan membuat beberapa permintaan yang berdekatan pada disk, menyebabkan
pergerakan head menjadi terbatas. File yang memiliki link atau indeks, dilain pihak,
mungkin juga memasukkan blok-blok yang tersebar luas pada disk, menyebabkan
pergerakan head yang sangat besar.
Lokasi blok-blok indeks dan directory juga tidak kalah penting. Karena file harus dibuka
sebelum digunakan, proses pembukaan file membutuhkan pencarian pada struktur
directory, dengan demikian directory akan sering diakses. Kita anggap catatan directory
berada pada awal silinder, sedangkan data file berada pada silinder terakhir. Pada kasus
ini, disk head harus bergerak melewati sepanjang lebar disk. Membuat tempat
penyimpanan sementara dari blok-blok indeks dan directory ke dalam memori dapat

membantu mengurangi pergerakan disk arm, khususnya untuk permintaan membaca


disk.
Karena kerumitan inilah, maka algoritma penjadualan disk harus ditulis dalam modul
terpisah dari sistem operasi, jadi dapat saling mengganti dengan algoritma lain jika
diperlukan. Baik SSTF mau pun LOOK keduanya merupakan pilihan yang paling masuk
akal sebagai algoritma yang paling dasar.

8.8. Managemen Disk


8.8.1. Memformat Disk
Sebuah disk magnetik yang baru sebenarnya hanyalah sebuah slate kosong yang berupa
piringan magnetik untuk menyimpan sesuatu. Sebelum disk tersebut dapat menyimpan
data, harus dilakukan proses low-level formatting/ physical formatting, yaitu membagi
disk menjadi beberapa sektor dan mengisinya dengan struktur data tertentu (biasanya
header, area data, dan trailer) agar dapat dibaca dan ditulis oleh disk controller.
Salah satu informasi yang dibutuhkan oleh disk controller adalah error-correcting code
(ECC). Disebut seperti itu karena jika terdapat satu atau dua bit data yang corrupt,
controller dapat mengidentifikasi bit mana yang berubah dan mengoreksi nya. Proses ini
otomatis dilakukan oleh controller setiap membaca atau menulis pada disk.
Low-level formatting berfungsi agar pihak manufaktur dapat mengetes disk dan
menginisialisasi mapping dari lojikal nomor blok ke pendeteksi sektor kosong. Semakin
besar ukuran sektor yang diformat, semakin sedikit sektor yang dapat diisi pada
masing-masing track dan semakin sedikit header dan trailer yang ditulis pada setiap
track. Hal ini berarti ruang yang dapat digunakan untuk data semakin besar.
Agar disk dapat menggunakan suatu berkas, sistem operasi membutuhkan untuk
menyimpan struktur datanya pada disk. Langkah pertama adalah membagi disk menjadi
satu/ lebih silinder (partition), sehingga sistem operasi dapat memperlakukannya sebagai
disk yang terpisah. Langkah kedua adalah logical formatting, atau membuat sistem
berkas. Pada langkah ini, sistem operasi menyimpan struktur data yang telah
diinisialisasi ke disk.
Raw I/O adalah array pada blok lojikal yang memiliki kemampuan untuk menggunakan
suatu partisi disk tanpa struktur data dari sistem berkas. Dengan partisi raw ini, untuk
beberapa aplikasi tertentu akan lebih efisien dari segi penyimpanan. Tetapi kebanyakan
aplikasi akan berjalan lebih baik dengan servis sistem berkas biasa.

8.8.2. Boot Block


Ketika pertama kali menjalankan komputer, dibutuhkan program yang sudan
diinisialisasi, yaitu bootstrap. Yang diinisialisasi adalah segala aspek sistem, dari CPU
register sampai device controller dan isi dari main memory, kemudian menjalankan

sistem operasi. Untuk itu bootstrap mencari kernel sistem operasi pada disk, me-loadnya ke memori, dan menggunakan alamat yang telah diinisialisasi untuk mulai
menjalankan sistem operasi.
Hampir semua komputer menyimpan bootstrap pada Read-Only Memory (ROM).
Alasannya karena ROM tidak membutuhkan inisialisasi dan berada pada lokasi yang
tetap dimana prosesor tetap dapat mengeksekusinya ketika komputer baru dinyalakan/
di-reset. Kelebihan lainnya karena ROM read-only, ia tidak dapat terkena virus. Tetapi
masalah yang timbul adalah jika kita mengubah kode bootstrap berarti mengubah chip
ROM juga. Untuk mengatasinya, sistem menyimpan bootstrap loader di ROM, yang hanya
berfungsi untuk memasukkan seluruh program bootstrap dari disk. Boot blocks adalah
suatu partisi untuk menyimpan seluruh program bootstrap. Boot disk atau system disk
adalah disk yang memiliki partisi boot.

6.8.3. Bad Blocks


Bad blocks adalah satu/lebih sektor yang rusak pada suatu disk. Pada disk sederhana,
bad blocks diatasi secara manual. Untuk disk yang lebih kompleks seperti disk SCSI, bad
blocks diatasi dengan sector sparing atau forwarding, yaitu controller dapat mengganti
sektor yang rusak dengan sebuah sektor yang terpisah. Alternatif lainnya adalah
mengganti sektor tersebut dengan cara sector slipping. Mengganti blok yang rusak bukan
sepenuhnya merupakan proses yang otomatis, karena data-data yang tersimpan sebelum
nya akan terhapus.

8.9. Penanganan Swap-Space


Penanganan (management) swap-space (tempat pertukaran; tetapi karena istilah swapspace sudah umum dipakai, maka untuk seterusnya kita tetap memakai istilah swapspace) adalah salah satu dari low-level task pada sebuah sistem operasi.
Memori Virtual menggunakan disk space sebagai perpanjangan (atau space tambahan)
dari memori utama. Karena kecepatan akses disk lebih lambat daripada kecepatan akses
memori, menggunakan swap-space akan mengurangi performa sistem secara signifikan.
Tujuan utama dari perancangan dan implementasi swap-space adalah untuk
menghasilkan kinerja memori virtual yang optimal. Dalam sub-bab ini, kita akan
membicarakan bagaimana swap-space digunakan, dimana letak swap-space pada disk,
dan bagaimana penanganan swap-space.

8.9.1. Penggunaan Swap-Space


Penggunaan swap-space pada berbagai macam sistem operasi berbeda-beda, tergantung
pada algoritma memory management yang diimplementasikan. Sebagai contoh, sistem
yang mengimplementasikan swapping mungkin akan menggunakan swap-space untuk
menyimpan (dan mengerjakan) sebuah proses, termasuk segmen kode dan datanya.
Sistem yang menggunakan paging hanya akan menyimpan page (atau "halaman " proses)
yang sudah dikeluarkan dari memori utama. Besarnya swap-space yang dibutuhkan

sebuah sistem bermacam-macam, tergantung dari banyaknya physical memory (RAM,


seperti EDO DRAM, SDRAM, RD RAM), memori virtual yang disimpan di swap-space, dan
caranya memori virtual digunakan. Besarnya bervariasi, antara beberapa megabytes
sampai ratusan megabytes atau lebih.
Beberapa sistem operasi, seperti UNIX, menggunakan swap-space sebanyak yang diperlu
kan. Swap-space ini biasanya disimpan dalam beberapa disk yang terpisah, jadi beban
yang diterima oleh sistem I/O dari paging dan swapping bisa didistribusikan ke berbagai
I/O device pada sistem.
Harap dicatat bahwa menyediakan swap-space yang berlebih lebih aman daripada
kekurangan swap-space, karena bila kekurangan maka ada kemungkinan sistem
terpaksa menghentikan sebuah atau lebih proses atau bahkan membuat sistem menjadi
crash. Swap-space yang berlebih memang membuang disk space yang sebenarnya bisa
digunakan untuk menyimpan berkas ( file), tapi setidaknya tidak menimbulkan resiko
yang lain.

8.9.2. Lokasi Swap-Space


Ada dua tempat dimana swap-space bisa berada: swap-space bisa diletakkan pada partisi
yang sama dengan sistem operasi, atau pada partisi yang berbeda. Apabila swap-space
yang dipakai hanya berupa sebuah berkas yang besar di dalam sistem berkas, maka
sistem berkas yang dipakai bisa digunakan untuk membuat, menamakan, dan
mengalokasikan tempat swap-space. Maka dari itu, pendekatan seperti ini mudah untuk
diimplementasikan. Sayangnya, juga tidak efisien. Menelusuri struktur direktori dan
struktur data alokasi disk memakan waktu, dan berpotensi untuk mengakses disk lebih
banyak dari yang diperlukan. Fragmentasi eksternal bisa membuat swapping lebih lama
dengan memaksakan pencarian sekaligus banyak (multiple seeks) ketika sedang
membaca atau menulis sebuah proses. Kita bisa meningkatkan performa dengan mengcache informasi lokasi blok pada physical memory, dan dengan menggunakan aplikasi
khusus untuk mengalokasikan blok-blok yang contiguous (tidak terputus) untuk berkas
swap-nya, dengan waktu tambahan untuk menelusuri struktur data file-system masih
tetap ada.
Metode yang lebih umum adalah untuk membuat swap-space di partisi yang terpisah.
Tidak ada sistem file atau struktur direktori di dalam partisi ini. Justru sebuah swapspace storage manager yang terpisah digunakan untuk mengalokasikan dan melepaskan
blok-blok yang digunakan. Manajer ini menggunakan algoritma yang dioptimalkan untuk
kecepatan, daripada efisiensi tempat. Fragmentasi internal mungkin akan meningkat,
tetapi ini bisa diterima karena data dalam swap-space biasanya umurnya lebih singkat
daripada data-data di sistem file, dan swap area-nya diakses lebih sering. Pendekatan ini
membuat besar swap-space yang tetap selagi mempartisi disk. Menambah jumlah swapspace bisa dilakukan hanya me lalui mempartisi ulang disk (dimana juga termasuk
memindahkan atau menghancurkan dan mengembalikan partisi file-system lainnya dari
backup), atau dengan menambahkan swap-space di tempat lain.
Beberapa sistem operasi cukup fleksibel dan bisa swapping baik di partisi mentah (raw,
belum di-format) dan di file-system. Contohnya Solaris 2. Policy dan implementasinya

terpisah, sehingga administrator mesinnya (komputernya) bisa memutus kan mana yang
akan digunakan. Pertimbangannya adalah antara kemu dahan alokasi dan pengelolaan
file-system, dan performa dari swapping pada partisi yang raw.

8.9.3. Pengelolaan Swap-Space


Untuk mengilustrasikan metode-metode yang digunakan untuk mengelola swap-space,
kita sekarang akan mengikuti evolusi dari swapping dan paging pada GNU/ Linux.
Seperti yang akan dibahas sepenuhnya pada Bab 7, GNU/ Linux memulai dengan
implemen tasi swapping yang menyalin seluruh proses antara daerah disk yang
contiguous (tidak terputus) dan memori. UNIX berevolusi menjadi kombinasi dari
swapping dan paging dengan tersedianya hardware untuk paging.
Dalam 4.3BSD, swap-space dialokasikan untuk proses ketika sebuah proses dimulai.
Tempat yang cu kup disediakan untuk menampung program, yang juga dikenal sebagai
halaman-halaman teks (text pages) atau segmen teks, dan segmen data dari proses itu.
Alokasi dini tempat yang dibutuhkan dengan cara seperti ini umumnya mencegah
sebuah proses untuk kehabisan swap-space selagi proses itu dikerjakan. Ketika proses
mulai, teks di dalamnya di-page dari file system. Halaman-halaman (pages) ini akan
ditaruh di swap bila perlu, dan dibaca kembali dari sana, jadi sistem file akan diakses
sekali untuk setiap text page. Halaman-halaman dari segmen data dibaca dari sistem file,
atau dibuat (bila belum sebelumnya), dan ditaruh di swap space dan di-page kembali bila
perlu. Satu contoh optimisasi (sebagai contoh, ketika dua pengguna menggunakan editor
yang sama) adalah proses-proses dengan text page yang identik membagi halamanhalaman (pages) ini, baik di memori mau pun di swap-space.
Dua peta swap untuk setiap proses digunakan oleh kernel untuk melacak penggunaan
swap-space. Segmen teks besarnya tetap, maka swap space yang dialokasikan sebesar
512K setiap potong (chunks), kecuali untuk potongan terakhir, yang menyimpan sisa
halaman-halaman (pages) tadi, dengan kenaikan (increments) sebesar 1K.
Peta swap dari Segmen data lebih rumit, karena segmen data bisa mem besar setiap
saat. Petanya sendiri besarnya tetap, tapi menyimpan a lamat-alamat swap untuk blokblok yang besarnya bervariasi. Misalkan ada index i, bla-bla-bla, dengan besar
maksimun 2 megabytes. Data struktur ini ditunjukkan oleh gambar 13.8. (Besar
minimum dan maksi mum blok bervariasi, dan bisa diubah ketika me-reboot sistem.)
Ketika sebuah proses mencoba untuk memperbesar segmen datanya melebihi blok yang
dialokasikan di tempat swap, sistem operasi mengalokasikan blok lain lagi, dua kali
besarnya yang pertama. Skema ini menyebab kan proses-proses yang kecil menggunakan
blok-blok kecil. Ini juga meminimalisir fragmentasi. Blok-blok dari proses yang besar bisa
di temukan dengan cepat, dan peta swap tetap kecil.
Pada Solaris 1 (SunOS 4), para pembuatnya membuat perubahan pada me tode standar
UNIX untuk meningkatkan efisiensi dan untuk mencermin kan perubahan teknologi.
Ketika sebuah proses berjalan, halaman-hala man (pages) dari segmen teks dibawa
kembali dari sistem berkas, diak ses di memori utama, dan dibuang bila diputuskan
untuk di-pageout. A kan lebih efisien untuk membaca ulang sebuah halaman (page) dari
sis tem berkas daripada menaruhnya di swap-space dan membacanya ulang dari sana.

Lebih banyak lagi perubahan pada Solaris 2. Perubahan terbesar ada lah Solaris 2
mengalokasikan swap-space hanya ketika sebuah halaman (page) dipaksa keluar dari
memori, daripada ketika halaman (page) da ri memori virtual pertama kali dibuat.
Perubahan ini memberikan per forma yang lebih baik pada komputer-komputer modern,
yang sudah mem punyai memori lebih banyak daripada komputer-komputer dengan
sistem yang sudah lama, dan lebih jarang melakukan paging.

8.10. Kehandalan Disk


Disk memiliki resiko untuk mengalami kerusakan. Kerusakan ini dapat berakibat
turunnya performa atau pun hilangnya data. Meski pun terdapat backup data, tetap saja
ada kemungkinan data yang hilang karena adanya perubahan setelah terakhir kali data
di-backup. Karenanya reliabilitas dari suatu disk harus dapat terus ditingkatkan.
Berikut adalah beberapa macam penyebab terjadinya hilangnya data:
1. Ketidaksengajaan dalam menghapus.
Bisa saja pengguna secara tidak sengaja menghapus suatu berkas, hal ini dapat
dicegah seminimal mungkin dengan cara melakukan backup data secara reguler.
2. Hilangnya tenaga listrik
Hilangnya tenaga listrik dapat mengakibatkan adanya corrupt data.
3. Blok rusak pada disk.
Rusaknya blok pada disk dapat saja disebabkan dari umur disk tersebut. Seiring
dengan waktu, banyaknya blok pada disk yang rusak dapat terus terakumulasi. Blok
yang rusak pada disk, tidak akan dapat dibaca.
4. Rusaknya Disk.
Bisa saja karena suatu kejadian disk rusak total. Sebagai contoh, dapat saja disk
jatuh atau pun ditendang ketika sedang dibawa.
5. System Corrupt.
Ketika komputer sedang dijalankan, bisa saja terjadi OS error, program error, dan lain
sebagainya. Hal ini tentu saja dapat menyebabkan hilangnya data.
Berbagai macam cara dilakukan untuk meningkatkan kinerja dan juga reliabilitas dari
disk. Biasanya untuk meningkatkan kinerja, dilibatkan banyak disk sebagai satu unit
penyimpanan. Tiap-tiap blok data dipecah ke dalam beberapa subblok, dan dibagi-bagi
ke dalam disk-disk tersebut. Ketika mengirim data disk-disk tersebut bekerja secara
pararel. Ditambah dengan sinkronisasi pada rotasi masing-masing disk, maka kinerja
dari disk dapat ditingkatkan.

Cara ini dikenal sebagai RAID (Redundant Array of Independent Disks). Selain masalah
kinerja RAID juga dapat meningkatkan reabilitas dari disk dengan jalan melakukan
redundansi data.
Salah satu cara yang digunakan pada RAID adalah dengan mirroring atau shadowing,
yaitu dengan membuat duplikasi dari tiap-tiap disk. Pada cara ini, berarti diperlukan
media penyimpanan yang dua kali lebih besar daripada ukuran data sebenarnya. Akan
tetapi, dengan cara ini pengaksesan disk yang dilakukan untuk membaca dapat
ditingkatkan dua kali lipat. Hal ini dikarenakan setengah dari permintaan membaca
dapat dikirim ke masing-masing disk. Cara lain yang digunakan pada RAID adalah block
interleaved parity. Pada cara ini, digunakan sebagian kecil dari disk untuk penyimpanan
parity block. Sebagai contoh, dimisalkan terdapat 10 disk pada array. Karenanya setiap 9
data block yang disimpan pada array, 1 parity block juga akan disimpan. Bila terjadi
kerusakan pada salah satu block pada disk maka dengan adanya informasi pada parity
block ini, ditambah dengan data block lainnya, diharapkan kerusakan pada disk tersebut
dapat ditanggulangi, sehingga tidak ada data yang hilang. Penggunaan parity block ini
juga akan menurunkan kinerja sama seperti halnya pada mirroring. Pada parity block
ini, tiap kali subblock data ditulis, akan terjadi perhitungan dan penulisan ulang pada
parity block.

8.11. Implementasi Stable-Storage


Pada bagian sebelumnya, kita sudah membicarakan mengenai write-ahead log, yang
membutuhkan ketersediaan sebuah storage yang stabil. Berdasarkan definisi, informasi
yang berada di dalam stable storage tidak akan pernah hilang. Untuk
mengimplementasikan storage seperti itu, kita perlu mereplikasi informasi yang
dibutuhkan ke banyak peralatan storage (biasanya disk-disk) dengan failure modes yang
independen. Kita perlu mengkoordinasikan penulisan update-update dalam sebuah cara
yang menjamin bila terjadi kegagalan selagi meng-update tidak akan membuat semua
kopi yang ada menjadi rusak, dan bila sedang recover dari sebuah kegagalan, kita bisa
memaksa semua kopi yang ada ke dalam keadaan yang bernilai benar dan konsisten,
bahkan bila ada kegagalan lain yang terjadi ketika sedang recovery. Untuk selanjutnya,
kita akan membahas bagaimana kita bisa mencapai kebutuhan kita.
Sebuah disk write menyebabkan satu dari tiga kemungkinan:
1. Successful completion.
Data disimpan dengan benar di dalam disk.
2. Partial failure.
Kegagalan terjadi di tengah-tengah transfer, menyebabkan hanya bebe rapa sektor
yang diisi dengan data yang baru, dan sektor yang diisi ketika terjadi kegagalan
menjadi rusak.
3. Total failure.

Kegagalan terjadi sebelum disk write dimulai, jadi data yang sebe lumnya ada pada
disk masih tetap ada.

Kita memerlukan, kapan pun sebuah kegagalan terjadi ketika sedang me nulis ke sebuah
blok, sistem akan mendeteksinya dan memanggil sebuah prosedur recovery untuk merestore blok tersebut ke sebuah keadaan yang konsisten. Untuk melakukan itu, sistem
harus menangani dua blok physical untuk setiap blok logical. Sebuah operasi output
dieksekusi seperti berikut:
1. Tulis informasinya ke blok physical yang pertama.
2. Ketika penulisan pertama berhasil, tulis informasi yang sama ke blok physical yang
kedua.
3. Operasi dikatakan berhasil hanya jika penulisan kedua berhasil.
Pada saat recovery dari sebuah kegagalan, setiap pasang blok physi cal diperiksa. Jika
keduanya sama dan tidak terdeteksi adanya kesa lahan, tetapi berbeda dalam isi, maka
kita mengganti isi dari blok yang pertama dengan isi dari blok yang kedua. Prosedur
recovery se perti ini memastikan bahwa sebuah penulisan ke stable storage akan sukses
atau tidak ada perubahan sama sekali.
Kita bisa menambah fungsi prosedur ini dengan mudah untuk memboleh kan
penggunaan dari kopi yang banyak dari setiap blok pada stable storage. Meski pun
sejumlah besar kopi semakin mengurangi kemungkin an untuk terjadinya sebuah
kegagalan, maka biasanya wajar untuk men simulasi stable storage hanya dengan dua
kopi. Data di dalam stable storage dijamin aman kecuali sebuah kegagalan
menghancurkan semua ko pi yang ada.

8.12. Tertiary-Storage Structure


Ciri-ciri Tertiary-Storage Structure:

Biaya produksi lebih murah.

Menggunakan removable media.

Data yang disimpan bersifat permanen.

8.12.1. Macam-macam Tertiary-Strorage Structure


8.12.1.1. Floppy Disk

Gambar 8.4. Floppy Disk. Sumber: SO Bahan Kuliah IKI-20230, hal.191


Floopy disk adalah fleksible disk yang tipis, dilapisi material yang bersifat magnet, dan
ditutupi oleh plastik. Ciri-ciri:

Umumnya mempunyai kapasitas antara 1-2 MB.

Kemampuan akses hampir seperti hardisk.

8.12.1.2. Magneto-optic disk

Gambar 8.5. Magneto Optic. Sumber: SO Bahan Kuliah IKI-20230, hal.191


Magneto-optic Disk adalah Piringan optic yang keras dilapisi oleh material yang bersifat
magnet, kemudian dilapisi pelindung dari plastik atau kaca yang berfungsi untuk
menahan head yang hancur.

Drive ini mempunyai medan magnet. Pada suhu kamar, medan magnet terlalu kuat dan
terlalu lemah untuk memagnetkan satu bit ke disk. Untuk menulis satu bit, disk head
akan mengeluarkan sinar laser ke permukaan disk. Sinar laser ini ditujukan pada spot
yang kecil. Spot ini adalah tempat yang ingin kita tulis satu bit. Spot yang ditembak sinar
laser menjadi rentan terhadap medan magnet sehingga menulis satu bit dapat dilakukan
baik pada saat medan magnet kuat mau pun lemah.
Magneto-optic disk head berjarak lebih jauh dari permukaan disk daripada magnetic disk
head. Walau pun demikian, drive tetap dapat membaca bit, yaitu dengan bantuan sinar
laser (disebut Kerr efect).

8.12.1.3. Optical Disk

Gambar 8.6. Optical Disk. Sumber: SO Bahan Kuliah IKI-20230, hal.193


Disk ini tidak menggunakan sifat magnet, tetapi menggunakan bahan khusus yang
dimodifikasi menggunakan sinar laser. Setelah dimodifikasi dengan dengan sinar laser
pada disk akan terdapat spot yang gelap atau terang. Spot ini menyimpan satu bit.
Optical-disk teknologi terbagi atas:
1. Phase-change disk, dilapisi oleh material yang dapat membeku menjadi crystalline
atau amorphous state. Kedua state ini memantulkan sinar laser dengan kekuatan
yang berbeda. Drive menggunakan sinar laser pada kekuatan yang berbeda untuk
mencairkan dan membekukan spot di disk sehingga spot berubah antara crystalline
atau amorphous state.
2. Dye-polimer disk, merekam data dengan membuat bump. Disk dilapisi plastik yang
mengandung dye yang dapat menyerap sinar laser. Sinar laser membakar spot yang

kecil sehingga spot membengkak dan membentuk bump. Sinar laser juga dapat
menghangatkan bump sehingga spot menjadi lunak dan bump menjadi datar.
8.12.1.4. WORM Disk (Write Once, Read Many Times)

Gambar 8.7. Worm Disk. Sumber: SO Bahan Kuliah IKI-20230, hal.194


WORM adalah Aluminium film yang tipis dilapisi oleh piringan plastik atau kaca pada
bagian atas dan bawahnya. Untuk menulis bit, drive tersebut menggunakan sinar laser
untuk membakar hole yang kecil pada aluminium. Hole ini tidak dapat diubah seperti
sebelumnya. Oleh karena itu, disk hanya dapat ditulis sekali.
Ciri-ciri:
Data hanya dapat ditulis sekali.
Data lebih tahan lama dan dapat dipercaya.
Read Only disk, seperti CD-ROM dan DVD yang berasal dari pabrik sudah berisi data.

8.12.1.5. Tapes

Gambar 8.8. Tape. Sumber: SO Bahan Kuliah IKI-20230, hal.195

Walau pun harga tape drive lebih mahal daripada disk drive, harga tape cartridge lebih
murah daripada disk cartridge apabila dilihat dari kapasitas yang sama. Jadi, untuk
penggunaan yang lebih ekonomis lebih baik digunakan tape. Tape drive dan disk drive
mempunyai transfer rate yang sama. Tetapi, random access tape lebih lambat daripada
disk karena tape menggunakan operasi forward dan rewind.
Seperti disebutkan diatas, tape adalah media yang ekonomis apabila media yang ingin
digunakan tidak membutuhkan kemampuan random access, contoh: backup data dari
data disk, menampung data yang besar. Tape digunakan oleh supercomputer center yang
besar untuk menyimpan data yang besar. Data ini gunakan oleh badan penelitian ilmiah
dan perusahaan komersial yang besar.
Pemasangan tape yang besar menggunakan robotic tape changers. robotic tape changers
memindahkan beberapa tape antara beberapa tape drive dan beberapa slot penyimpanan
yang berada di dalam tape library. library yang menyimpan beberapa tape disebut tape
stacker. library yang menyimpan ribuan tape disebut tape silo.
Robotic tape library mengurangi biaya penyimpanan data. File yang ada di disk dapat
dipindahkan ke tape dengan tujuan mengurangi biaya penyimpanan. Apabila file itu ingin
digunakan, maka komputer akan memindahkan file tadi ke disk.

8.12.2. Masalah-Masalah yang Berkaitan Dengan Sistem Operasi


1. Tugas terpenting dari sistem operasi adalah mengatur physical devices dan
menampilkan abstarksi mesin virtual dari aplikasi (Interface aplikasi).
2. Untuk hardisk, OS menyediakan dua abstaksi, yaitu:

Raw device = array dari beberapa data blok.

File sistem = sistem operasi mengantrikan dan menjadwalkan beberapa


permintaan interleaved yang berasal dari beberapa aplikasi.

8.12.3. Interface Aplikasi


Kebanyakan sistem operasi menangani removable media hampir sama dengan fixed disk,
yaitu cartridge di format dan dibuat file sistem yang kosong pada disk. Tapes ditampilkan
sebagai media raw storage dan aplikasi tidak membuka file pada tape, tetapi tapes
dibuka kesemuanya sebagai raw device. Biasanya tape drive disediakan untuk
penggunaan khusus dari suatu aplikasi sampai aplikasi berakhir atau menutup tape
drive. Penggunaan khusus ini dikarenakan random access tape membutuhkan waktu
yang lama. Jadi, interleaving random access oleh tape oleh beberapa aplikasi akan
menyebabkan thrashing.
Sistem operasi tidak menyediakan file system sehingga aplikasi harus memutuskan

bagaimana cara menggunakan array dari blok-blok. Sebagai contoh, program yang membackup hardisk ke tape akan mendaftar nama file dan kapasitas file pada permulaan
tape. Kemudian, program meng-copy data file ke tape. Setiap aplikasi mempunyai
caranya masing-masing untuk mengatur tape sehingga tape yang telah penuh terisi data
hanya dapat digunakan oleh program yang membuatnya.
Operasi dasar tape drive berbeda dengan operasi dasar disk drive. Contoh operasi dasar
tape drive:

Operasi locate berfungsi untuk menetapkan posisi tape head ke sebuah logical blok.
Operasi ini mirip operasi yang ada di disk, yaitu: operasi seek. Operasi seek berfungsi
untuk menetapkan posisi semua track.

Operasi read position berfungsi memberitahu posisi tape head dengan menunjukkan
nomor logical blok.

Operasi space berfungsi memindahkan posisi tape head. Misalnya operasi space -2
akan memindahkan posisi tape head sejauh dua blok ke belakang.

Kapasitas blok ditentukan pada saat blok ditulis. Apabila terdapat area yang rusak pada
saat blok ditulis, maka area yang rusak itu tidak dipakai dan penulisan blok dilanjutkan
setelah daerah yang rusak tersebut.
Tape drive "append-only" devices, maksudnya adalah apabila kita meng-update blok yang
ada di tengah berarti kita akan menghapus semua data sebelumnya pada blok tersebut.
Oleh karena itu, meng-update blok tidak diperbolehkan.

Untuk mencegah hal tadi digunakan tanda EOT (end-of-tape). Tanda EOT ditaruh setelah
sebuah blok ditulis. Drive menolak ke lokasi sebelum tanda EOT, tetapi drive tidak
menolak ke lokasi tanda EOT kemudian drive mulai menulis data. Setelah selesai
menulis data, tanda EOT ditaruh setelah blok yang baru ditulis tadi.

6.12.4. Penamaan Berkas


Menamakan berkas pada removable media cukup sulit terutama pada saat kita menulis
data pada removable cartridge pada suatu komputer, kemudian menggunakan cartridge
ini pada komputer yang lain. Jika jenis komputer yang digunakan sama dan jenis
cartridge yang digunakan sama, maka permasalahannya adalah mengetahui isi dan data
layout dari cartridge. Tetapi, bila jenis komputer yang digunakan dan jenis drive yang
digunakan berbeda, maka berbagai masalah akan muncul. Apabila hanya jenis drive
yang digunakan sama, komputer yang berbeda menyimpan bytes dengan berbagai cara
dan juga menggunakan encoding yang berbeda untuk binary number atau huruf.
Pada umumnya sistem operasi sekarang tidak memperdulikan masalah penamaan space
pada removable media. Hal ini tergantung kepada aplikasi dan user bagaimana cara
mengakses dan menterjemahkan data. Tetapi, beberapa jenis removable media (contoh:
CDs) distandarkan cara menggunakannya untuk semua jenis komputer.

8.12.5. Managemen Penyimpanan Hirarkis


Managemen Penyimpanan Hirarkis (Hierachical Storage management) menjelaskan
storage hierarchy antara primary memory dan secondary storage untuk membentuk
tertiary storage. Tertiary storage biasanya diimplementasikan sebagai jukebox dari tapes
atau removable media.
Walau pun tertiary storage dapat memepergunakan sistem virtual-memory, cara ini tidak
baik. Karena pengambilan data dari jukebox membutuhkan waktu yang agak lama.
Selain itu diperlukan waktu yang agak lama untuk demand paging dan untuk bentuk
lain dari penggunaan virtual-memory.
File yang kapasitasnya kecil dan sering digunakan disimpan di disk. Sedangkan file yang
kapasitasnya besar, sudah lama, dan tidak aktif akan diarsipkan di jukebox. Pada
beberapa sistem file-archiving, directory entry untuk file selalu ada, tetapi isi file tidak
berada di secondary storage. Jika aplikasi mencoba membuka file, pemanggilan open
system akan ditunda sampai isi file dikirim dari tertiary storage. Ketika isi file sudah ada
di secondary storage, operasi open dikembalikan ke aplikasi. Hierachical Storage
management biasanya ditemukan pada pusat supercomputing dan installasi besar
lainnya yang mempunyai data yang besar.

8.13. Rangkuman
8.13.1. I/O
Dasar dari elemen perangkat keras yang terkandung pada I/O adalah bus, device
controller, dan I/O itu sendiri. Kinerja kerja pada data yang bergerak antara device dan
memori utama di jalankan oleh CPU, di program oleh I/O atau mungkin DMA controller.
Modul kernel yang mengatur device adalah device driver. System-call interface yang
disediakan aplikasi dirancang untuk menghandle beberapa dasar kategori dari perangkat
keras, termasuk block devices, character devices, memory mapped files, network sockets
dan programmed interval timers.
Subsistem I/O kernel menyediakan beberapa servis. Diantaranya adalah I/O schedulling,
bufering, spooling, error handling dan device reservation. Salah satu servis dinamakan
translation, untuk membuat koneksi antara perangkat keras dan nama file yang
digunakan oleh aplikasi.
I/O system calls banyak dipakai oleh CPU, dikarenakan oleh banyaknya lapisan dari
perangkat lunak antara physical device dan aplikasi. Lapisan ini mengimplikasikan
overhead dari alih konteks untuk melewati kernels protection boundary, dari sinyal dan
interrupt handling untuk melayani I/O devices.

8.13.2. Disk

Disk drives adalah major secondary-storage I/O device pada kebanyakan komputer.
Permintaan untuk disk I/O digenerate oleh sistem file dan sistem virtual memori. Setiap
permintaan menspesifikasikan alamat pada disk untuk dapat direferensikan pada form
di logical block number.
Algoritma disk schedulling dapat meningkatkan efektifitas bandwith, average response
time, dan variance response time. Algoritma seperti SSTF, SCAN, C-SCAN, LOOK dan CLOOK didesain untuk membuat perkembangan dengan menyusun ulang antrian disk
untuk meningkatkan total waktu pencarian.
Kinerja dapat rusak karena external fragmentation. Satu cara untuk menyusun ulang
disk untuk mengurangi fragmentasi adalah untuk back up dan restore seluruh disk atau
partisi. Blok-blok dibaca dari lokasi yang tersebar, me-restore tulisan mereka secara
berbeda. Beberapa sistem mempunyai kemampuan untuk men-scan sistem file untuk
mengidentifikasi file terfragmentasi, lalu menggerakan blok-blok mengelilingi untuk
meningkatkan fragmentasi. Men-defragmentasi file yang sudah di fragmentasi (tetapi
hasilnya kurang optimal) dapat secara signifikan meningkatkan kinerja, tetapi sistem ini
secara umum kurang berguna selama proses defragmentasi sedang berjalan. Sistem
operasi me-manage blok-blok pada disk. Pertama, disk baru di format secara low level
untuk menciptakan sektor pada perangkat keras yang masih belum digunakan. Lalu,
disk dapat di partisi dan sistem file diciptakan, dan blok-blok boot dapat dialokasikan.
Terakhir jika ada blok yang terkorupsi, sistem harus mempunyai cara untuk me-lock out
blok tersebut, atau menggantikannya dengan cadangan.
Tertiary storage di bangun dari disk dan tape drives yang menggunakan media yang
dapat dipindahkan. Contoh dari tertiary storage adalah magnetic tape, removable
magnetic, dan magneto-optic disk.
Untuk removable disk, sistem operasi secara general menyediakan servis penuh dari
sistem file interface, termasuk space management dan request-queue schedulling. Untuk
tape, sistem operasi secara general hanya menyediakan interface yang baru. Banyak
sistem operasi yang tidak memiliki built-in support untuk jukeboxes. Jukebox support
dapat disediakan oleh device driver.

8.14. Soal Latihan

Perangkat Keras I/O


1. Gambarkan diagram dari Interrupt Driven I/O Cycle.
2. Sebutkan langkah-langkah dari transfer DMA!

3. Apakah perbedaan dari polling dan interupsi?


4. Apa hubungan arsitektur kernel yang di-thread dengan implemen tasi interupsi?

Interface Aplikasi I/O


1. Kenapa dibutuhkan interface pada aplikasi I/O?
2. Apa tujuan adanya device driver? Berikan contoh keuntungan yang kita dapatkan
dengan adanya hal ini!

Kernel I/O Subsystem


1. Apakah yang dimaksud dengan proses pooling? (jelaskan dengan jelas)
2. Mengapa diperlukan proses pooling?
3. Apakah yang dimaksud dengan bufer?
4. Jelaskan dengan singkat mengenai I/O Scheduling!

Penanganan Permintaan I/O


1. Apakah kegunaan dari Streams pada Sistem V UNIX?
2. Jelaskan lifecycle dari permintaan pembacaan blok!

Performa I/O
1. Gambarkan bagan mengenai komunikasi antar komputer
2. Bagaimana cara meningkatkan efisiensi performa I/O
3. Jelaskan mengenai implementasi dari fungsi I/O

Struktur Disk
1. Sebutkan bagian-bagian dari disk
2. Apa keuntungan penggunaan pemetaan pada disk?

Penjadualan Disk
1. Buatlah dengan pemikiran Anda sendiri, strategi penjadualan disk yang tepat dan
efisien menurut Anda
2. Menurut Anda, diantara algoritma-algoritma penjadualan disk diatas manakah yang
paling cepat, manakah yang paling efisien (hemat/tidak mahal), dan manakah yang
paling lambat dan tidak efisien? Jelaskan!

Managemen Disk
1. Bagaimana cara disk SCSI me-recovery blok yang rusak? Jelaskan selengkap
mungkin!

Penanganan Swap-Space
1. Bagaimana penanganan swap space pada disk?
2. Bagaimana pengelolaan swap space pada disk?

Reabilitas Disk
1. Terangkan bagaimana RAID dapat meningkatkan reabilitas dari disk?
2. Adakah batas waktu hidup suatu disk? Jika ada, berapa lama? Jika tidak, kenapa?

Implementasi Stable-Storage
1. Sebutkan kemungkinan-kemungkinan dari disk write!
2. Bagaimanakah suatu operasi output dieksekusi?

Tertiary-Storage Structure
1. Sebutkan kelebihan tertiary storage structure?
2. Apakah kegunaan EOT pada tapes? Jelaskan cara kerjanya?
3. Jelaskan tugas sistem operasi terhadap tertiary-storage structure?

8.15. Rujukan

CATATAN: Situs (URL) rujukan ini pernah diakses pada pertengahan tahun 2003 yang
lalu. Terdapat kemungkinan, bahwa situs tersebut sekaranga ini telah berubah, atau
telah dihapus.
1. Applied Operating System Concept, Silberschatz, Galvin, Gagne, 1999
2. RAID and Data Protection Solutions for Linux (http://linas.org/linux/raid.html)
3. DMA Interface (http://www.eso.org/projects/iridt/irace/aboutirace.html)
4. I/O Transfer Method (http://www.ebiz.com.pk/pakistan/dma.doc)

8.16. Daftar Istilah


I/O = I/O (Input/Output) hardware ->

BAB
9

MANAJEMEN PROSES

9.1.

Pendahuluan

Linux mengatur semua proses di dalam sistem melalui pemeriksaan dan perubahan
terhadap setiap struktur data task_struct yang dimiliki setiap proses. Sebuah daftar
pointer ke semua struktur data task_struct disimpan dalam task vector. Jumlah
maksimum proses dalam sistem dibatasi oleh ukuran dari task vector. Linux umumnya
memiliki task vector dengan ukuran 512 entries. Saat proses dibuat, task_struct baru
dialokasikan dari memori sistem dan ditambahkan ke task vector. Linux juga
mendukung proses secara real time. Proses semacam ini harus bereaksi sangat cepat
terhadap event eksternal dan diperlakukan berbeda dari proses biasa lainnya oleh
penjadwal.
Proses akan berakhir ketika ia memanggil exit(). Kernel akan menentukan waktu
pelepasan sumber daya yang dimiliki oleh proses yang telah selesai tersebut. Fungsi
do_exit()
akan
dipanggil
saat
terminasi
yang
kemudian
memanggil
__exit_mm/files/fs/sighand() yang akan membebaskan sumber daya. Fungsi exit_notify()
akan memperbarui hubungan antara proses induk dan proses anak, semua proses anak
yang induknya berakhir akan menjadi anak dari proses init. Terakhir akan dipanggil
scheduler untuk menjalankan proses baru.

9.2.

Deskriptor Proses

Guna keperluan manajemen proses, kernel memelihara informasi tentang setiap proses
di sebuah deskriptor proses dengan tipe task_struct. Setiap deskriptor proses
mengandung informasi antara lain status proses, ruang alamat, daftar berkas yang
dibuka, prioritas proses, dan sebagainya. Berikut gambaran isinya:
Contoh 9-1. Isi Deskriptor Proses
struct task_struct{
volatile long state;
/*-1 unrunnable,
0 runnable,
>0 stopped*/
unsigned long flags;

/* 1 untuk setiap flag proses */


mm_segment_t_addr_limit;
/* ruang alamat untuk thread */ struct exec_domain *exec_domain; long need_resched;
long counter;
long priority;
/* SMP and runqueue state */
struct task_struct *next_task, *prev_task;
struct task_struct *next_run, *prev_run;
...
/* task state */
/* limits */
/* file system info */
/* ipc stuf */
/* tss for this task */
/* filesystem information */
/* open file information */
/* memory management info */
/* signal handlers */
...
};
Setiap proses di Linux memiliki status. Status proses merupakan array dari flag yang
mutually exclusive. Setiap proses memiliki tepat satu keadaan (status) pada suatu waktu.
Status tersebut adalah:

TASK_RUNNING

Pada status ini, proses sedang atau pun siap dieksekusi oleh CPU.

TASK_INTERRUPTIBLE

Pada status ini, proses sedang menunggu sebuah kondisi. Interupsi, sinyal, atau pun
pelepasan sumber daya akan membangunkan proses.

TASK_UNINTERRUPTIBLE

Pada status ini, proses sedang tidur dan tidak dapat dibangunkan oleh suatu sinyal.

TASK_STOPPED

Pada status ini proses sedang dihentikan, misalnya oleh sebuah debugger.

TASK_ZOMBIE

Pada status ini proses telah berhenti, namun masih memiliki struktur data task_struct di
task vector dan masih memegang sumber daya yang sudah tidak digunakan lagi.
Setiap proses atau pun eksekusi yang terjadwal secara independen memiliki deskriptor
prosesnya sendiri. Alamat dari deskriptor proses digunakan untuk mengindentifikasi

proses. Selain itu, nomor ID proses (PIDs) juga digunakan untuk keperluan tersebut.
PIDs adalah 32-bit bilangan yang mengidentifikasikan setiap proses dengan unik. Linux
membatasi PIDs berkisar 0-32767 untuk menjamin kompatibilitas dengan sistem UNIX
tradisional.
Karena proses merupakan sesuatu yang dinamis, maka deskriptor proses disimpan
dalam memori yang dinamis pula. Untuk itu dialokasikan juga memori sebesar 8KB
untuk setiap proses untuk menyimpan proses deskriptornya dan stack proses dari
modus kernel. Keuntungan dari dal ini adalah pointer dari deskriptor proses dari proses
yang sedang berjalan (running) dapat diakses dengan cepat menggunakan stack pointer.
Selain itu, 8KB (EXTRA_TASK_STRUCT) dari memori akan di-cache untuk mem-bypass
pengalokasi memori kernel ketika sebuah proses dihapus dan sebuah proses baru
dibuat. Kedua perintah free_task_struct() dan alloc_task_struct() akan digunakan untuk
melepaskan atau mengalokasikan memori seukuran 8KB sebagai cache.
Deskriptor proses juga membangun sebuah daftar proses dari semua proses yang ada di
sistem. Daftar proses tersebut merupakan sebuah doubly-linked list yang dibangun oleh
bagian next_task dan prev_task dari deskriptor proses. Deskriptor init_task(mis:swapper)
berada di awal daftar tersebut dengan prev_task-nya menunjuk ke deskriptor proses yang
paling akhir masuk dalam daftar. Sedangkan makro for_each_task() digunakan untuk
memindai seluruh daftar.
Proses yang dijadwalkan untuk dieksekusi dari doubly-linked list dari proses dengan
status TASK_RUNNING disebut runqueue. Bagian prev_run dan next_run dari deskriptor
proses digunakan untuk membangun runqueue, dengan init_task mengawali daftar
tersebut. Sedangkan untuk memanipulasi daftar di deskriptor proses tersebut,
digunakan
fungsi-fungsi:
add_to_runqueue(),
del_from_runqueue(),
move_first_runqueue(), move_last_runqueue(). Makro NR_RUNNING digunakan untuk
menyimpan jumlah proses yang dapat dijalankan, sedangkan fungsi wake_up_process
membuat sebuah proses menjadi dapat dijalankan.
Untuk menjamin akurasinya, array task akan diperbarui setiap kali ada proses baru
dibuat atau pun dihapus. Sebuah daftar terpisah akan melacak elemen bebas dalam
array task itu. Ketika suatu proses dihapus, entrinya ditambahkan di bagian awal dari
daftar tersebut.
Proses dengan status task_interruptible dibagi ke dalam kelas-kelas yang terkait dengan
suatu event tertentu. Event yang dimaksud misalnya: waktu kadaluarsa, ketersediaan
sumber daya. Untuk setiap event atau pun kelas terdapat antrian tunggu yang terpisah.
Proses akan diberi sinyal bangun ketika event yang ditunggunya terjadi. Berikut contoh
dari antrian tunggu tersebut:

Contoh 9-2. Antrian Tunggu


void
sleep_on(struct
wait_queue
**wqptr)
{
struct
wait_queue
wait;
current_state=TASK_UNINTERRUPTIBLE;
wait.task=current;
add_wait_queue(wqptr,
&wait); schedule();

remove_wait_queue(wqptr, &wait);
}
Fungsi sleep_on() akan memasukkan suatu proses ke dalam antrian tunggu yang
diinginkan dan memulai penjadwal. Ketika proses itu mendapat sinyal untuk bangun,
maka proses tersebut akan dihapus dari antrian tunggu.
Bagian lain konteks eksekusi proses adalah konteks perangkat keras, misalnya: isi
register. Konteks dari perangkat keras akan disimpan oleh task state segment dan stack
modus kernel. Secara khusus tss akan menyimpan konteks yang tidak secara otomatis
disimpan oleh perangkat keras tersebut. Perpindahan antar proses melibatkan
penyimpanan konteks dari proses yang sebelumnya dan proses berikutnya. Hal ini harus
dapat dilakukan dengan cepat untuk mencegah terbuangnya waktu CPU. Versi baru dari
Linux mengganti perpindahan konteks perangkat keras ini menggunakan piranti lunak
yang mengimplementasikan sederetan instruksi mov untuk menjamin validasi data yang
disimpan serta potensi untuk melakukan optimasi.

Untuk mengubah konteks proses digunakan makro switch_to(). Makro tersebut akan
mengganti proses dari proses yang ditunjuk oleh prev_task menjadi next_task. Makro
switch_to() dijalankan olehschedule() dan merupakan salah satu rutin kernel yang sangat
tergantung pada perangkat keras (hardware-dependent). Lebih jelas dapat dilihat pada
kernel/sched.c dan include/asm-*/system.h.

9.3. Pembuatan Proses Dan Thread


Linux menggunakan representasi yang sama untuk proses dan thread. Secara sederhana
thread dapat dikatakan sebuah proses baru yang berbagi alamat yang sama dengan
induknya. Perbedaannnya terletak pada saat pembuatannya. Thread baru dibuat dengan
system call clone yang membuat proses baru dengan identitas sendiri, namun diizinkan
untuk berbagi struktur data dengan induknya.
Secara tradisional, sumber daya yang dimiliki oleh proses induk akan diduplikasi ketika
membuat proses anak. Penyalinan ruang alamat ini berjalan lambat, sehingga untuk
mengatasinya, salinan hanya dibuat ketika salah satu dari mereka hendak menulis di
alamat tersebut. Selain itu, ketika mereka akan berbagi alamat tersebut ketika mereka
hanya membaca. Inilah proses ringan yang dikenal juga dengan thread.
Thread dibuat dengan __clone(). __clone() merupakan rutin dari library system call
clone(). __clone memiliki 4 buah argumen yaitu:

fn

fungsi yang akan dieksekusi oleh thread baru

arg

pointer ke data yang dibawa oleh fn

flags

sinyal yang dikirim ke induk ketika anak berakhir dan pembagian sumber daya antara
anak dan induk.

child_stack

pointer stack untuk proses anak.


clone() mengambil argumen flags dan child_stack yang dimiliki oleh __clone kemudian
menentukan id dari proses anak yang akan mengeksekusi fn dengan argumen arg.
Pembuatan anak proses dapat dilakukan dengan fungsi fork() dan vfork(). Implementasi
fork() sama seperti system call clone() dengan sighandler SIGCHLD di-set, semua bendera
clone di-clear yang berarti tidak ada sharing dan child_stack dibuat 0 yang berarti kernel
akan membuat stack untuk anak saat hendak menulis. Sedangkan vfork() sama seperti
fork() dengan tambahan bendera CLONE_VM dan CLONE_VFORK di-set. Dengan vfork(),
induk dan anak akan berbagi alamat, dan induk akan di-block hingga anak selesai.
Untuk memulai pembuatan proses baru, clone() akan memanggil fungsi do_fork(). Hal
yang dilakukan oleh do_fork() antara lain:

memanggil alloc_task_struct() yang akan menyediakan tempat di memori dengan


ukuran 8KB untuk deskriptor proses dan stack modus kernel.

memeriksa ketersediaan sumber daya untuk membuat proses baru.

find_empty_procees() memanggil get_free_taskslot() untuk mencari sebuah slot di


array task untuk pointer ke deskriptor proses yang baru.

memanggil copy_files/fm/sighand/mm() untuk menyalin sumber daya untuk anak,


berdasarkan nilai flags yang ditentukan clone().

copy_thread() akan menginisialisasi stack kernel dari proses anak.

mendapatkan PID baru untuk anak yang akan diberikan kembali ke induknya ketika
do_fork() selesai.

Beberapa proses sistem hanya berjalan dalam modus kernel di belakang layar. Untuk
proses semacam ini dapat digunakan thread kernel. Thread kernel hanya akan
mengeksekusi fungsi kernel, yaitu fungsi yang biasanya dipanggil oleh proses normal
melalui system calls. Thread kernel juga hanya dieksekusi dalam modus kernel, berbeda
dengan proses biasa. Alamat linier yang digunakan oleh thread kernel lebih besar dari
PAGE_OFFSET proses normal yang dapat berukuran hingga 4GB. Thread kernel dibuat
sebagai berikut: int kernel_thread(int (*fn) (void *), void *arg, unsigned long flags);
flags=CLONE_SIGHAND, CLONE_FILES, etc

9.4.

Penjadual

Penjadual adalah suatu pekerjaan yang dilakukan untuk mengalokasikan CPU time
untuk tasks yang berbeda-beda dalam sistem operasi. Pada umumnya, kita berfikir
penjadualan sebagai menjalankan dan menginterupsi suatu proses, untuk linux ada
aspek lain yang penting dalam penjadualan: seperti menjalankan dengan berbagai kernel
tasks. Kernel tasks meliputi task yang diminta oleh proses yang sedang dijalankan dan
tasks yand dieksekusi internal menyangkut device driver yang berkepentingan.

9.4.1. Sinkronisasi Kernel


Cara penjadualan kernel pada operasinya secara mendasar berbeda dengan cara
penjadualan suatu proses. Terdapat dua cara agar sebuah permintaan akan eksekusi
kernel-mode dapat terjadi. Sebuah program yang berjalan dapat meminta service sistem
operasi, dari system call atau pun secara implisit (untuk contoh:ketika page fault terjadi).
Sebagai alternatif, device driver dapat mengirim interupsi perangkat keras yang
menyebabkan CPU memulai eksekusi kernel-define handler untuk suatu interupsi.
Problem untuk kernel muncul karena berbagai tasksmungkin mencoba untuk
mengakses struktur data internal yang sama. Jika hanya satu kernel task ditengah
pengaksesan struktur data ketika interupsi service routine dieksekusi, maka service
routine tidak dapat mengakses atau merubah data yang sama tanpa resiko mendapatkan
data yang rusak. Fakta ini berkaitan dengan ide dari critical section (baca sinkronisasi
proses).
Sehagai hasilnya, sinkronisasi kernel melibatkan lebih banyak dari hanya penjadualan
proses saja. sebuah framework dibutuhkan untuk memperbolehkan kernels critical
sections berjalan tanpa diinterupsi oleh critical section yang lain.
Solusi pertama yang diberikan oleh linux adalah membuat normal kernel code
nonpreemptible (baca proses). Biasanya, ketika sebuah timer interrupt diterima oleh
kernel, membuat penjadualan proses, kemungkinan besar akan menunda eksekusi
proses yang sedang berjalan pada saat itu dan melanjutkan menjalankan proses yang
lain. Biar bagaimana pun, ketika timer interrupt diterima ketika sebuah proses
mengeksekusi kernel-system service routine, penjadualan ulang tidak dilakukan secara
mendadak;
cukup, kernel need_resched flag terset untuk memberitahu kernel untuk menjalankan
penjadualan kembali setelah system call selesai dan control dikembalikan ke user mode.
Sepotong kernel code mulai dijalankan, akan terjamin bahwa itu adalah satu-satunya
kernel code yang dijalankan sampai salah satu dari aksi dibawah ini muncul:

interupsi

page fault

kernel code memanggil fungsi penjadualan sendiri

Interupsi adalah suatu masalah bila mengandung critical section-nya sendiri. Timer

interrupt tidak secara langsung menyebabkan terjadinya penjadualan ulang suatu


proses; hanya meminta suatu jadual untuk dilakukan kemudian, jadi kedatangan suatu
interupsi tidak mempengaruhi urutan eksekusi dari noninterrupt kernel code. Sekali
interrupt serviceselesai, eksekusi akan menjadi lebih simpel untuk kembali ke kernel
code yang sedang dijalankan ketika interupsi mengambil alih.
Page faults adalah suatu masalah yang potensial; jika sebuah kernel routine mencoba
untuk membaca atau menulis ke user memory, akan menyebabkan terjadinya page fault
yang membutuhkan I/O diskuntuk selesai, dan proses yang berjalan akan di tunda
sampai I/O selesai. Pada kasus yang hampir sama, jika system call service routine
memanggil penjadualan ketika sedang berada di mode kernel, mungkin secara eksplisit
dengan membuat direct call pada code penjadualan atau secara implisit dengan
memanggil sebuah fungsi untuk menunggu I/O selesai, setelah itu proses akan
menunggu dan penjadualan ulang akan muncul. Ketika proses jalan kembali, proses
tersebut akan melanjutkan untuk mengeksekusi dengan mode kernel, melanjutkan
intruksi setelah call (pemanggilan) ke penjadualan.
Kernel code dapat terus berasumsi bahwa ia tidak akan diganggu (pre-empted) oleh
proses lainnya dan tidak ada tindakan khusus dilakukan untuk melindungi critical
section. Yang diperlukan adalah critical section tidak mengandung referensi ke user
memory atau menunggu I/O selesai.
Teknik kedua yang di pakai Linux untuk critical section yang muncul pada saat interrupt
service routines. Alat dasarnya adalah perangkat keras interrupt-control pada processor.
Dengan meniadakan interupsi pada saat critical section, maka kernel menjamin bahwa
ia dapat melakukan proses tanpa resiko terjadinya ketidak-cocokan akses dari struktur
data yang di share.
Untuk meniadakan interupsi terdapat sebuah pinalti. Pada arsitektur perangkat keras
kebanyakan, pengadaan dan peniadaan suatu interupsi adalah sesuatu yang mahal.
Pada prakteknya, saat interupsi ditiadakan, semua I/O ditunda, dan device yang
menunggu untuk dilayani akan menunggu sampai interupsi diadakan kembali, sehingga
kinerja meningkat. Kernel Linux menggunakan synchronization architecture yang
mengizinkan critical section yang panjang dijalankan untuk seluruh durasinya tanpa
mendapatkan peniadaan interupsi.
Kemampuan secara spesial berguna pada networking code: Sebuah interupsi pada
network device driver dapat memberikan sinyal kedatangan dari keseluruhan paket
network, dimana akan menghasilkan code yang baik dieksekusi untuk disassemble,
route, dan forward paket ditengah interrupt service routine.
Linux mengimplementasikan arsitektur ini dengan memisahkan interrupt service routine
menjadi dua seksi: the top half dan the bottom half . The top half adalah interupsi yang
normal, dan berjalan dengan rekursive interupt ditiadakan (interupsi dengan prioritas
yang lebih tinggi dapat menginterupsi routine, tetapi interupsi dengan prioritas yang
sama atau lebih rendah ditiadakan). The bottom half service routine berjalan dengan
semua interupsi diadakan, oleh miniatur penjadualan yang menjamin bahwa bottom
halves tidak akan menginterupsi dirinya sendiri. The bottom half scheduler dilakukan

secara otomatis pada saat interupt service routine ada.


Pemisahan itu berarti bahwa kegiatan proses yang komplek dan harus selesai diberi
tanggapan untuk suatu interupsi dapat diselesaikan oleh kernel tanpa kecemasan
tentang diinterupsi oleh interupsi itu sendiri. Jika interupsi lain muncul ketika bottom
half dieksekusi, maka interupsi dapat meminta kepada bottom half yang sama untuk
dieksekusi, tetapi eksekusinya akan dilakukan setelah proses yang sedang berjalan
selesai. Setiap eksekusi dari bottom half dapat di interupsi oleh top half tetapi tidak
dapat diinterupsi dengan bottom half yang mirip.
Arsitektur Top-half bottom-half komplit dengan mekanisme untuk meniadakan bottom
halver yang dipilih ketika dieksekusi secara normal, foreground kernel code. Kernel dapat
meng-codekan critical section secara mudah dengan mengunakan sistem ini:
penanganan interupsi dapat meng-codekan critical section-nya sebagai bottom halves,
dan ketika foreground kernel ingin masuk ke critical section, setiap bottom halves
ditiadakan untuk mencegah critical section yang lain diinterupsi. Pada akhir dari critical
section, kernel dapat kembali mengadakan bottom halves dan menjalankan bottom half
tasks yang telah di masukkan kedalam queue oleh top half interrupt service routine pada
saat critical section.

9.4.2. Penjadualan Proses


Ketika kernel telah mencapai titik penjadualan ulang, entah karena terjadi interupsi
penjadualan ulang mau pun karena proses kernel yang sedang berjalan telah diblokir
untuk menunggu beberapa signal bangun, harus memutuskan proses selanjutnya yang
akan dijalankan. Linux telah memiliki dua algoritma penjadualan proses yang terpisah
satu sama lain. Algoritma yang pertama adalah algoritma time-sharing untuk
penjadualan preemptive yang adil diantara sekian banyak proses. Sedangkan algoritma
yang kedua didesain untuk tugas real-time dimana proritas mutlak lebih utama daripada
keadilan mendapatkan suatu pelayanan.
Bagian dari tiap identitas proses adalah kelas penjadualan, yang akan menentukan
algoritma yang digunakan untuk tiap proses. Kelas penjadualan yang digunakan oleh
Linux, terdapat dalam standar perluasan POSIX untuk sistem komputer waktu nyata.
Untuk proses time-sharing, Linux menggunakan teknik prioritas, sebuah algoritma yang
berdasarkan pada kupon. Tiap proses memiliki sejumlah kupon penjadualan; dimana
ketika ada kesempatan untuk menjalankan sebuah tugas, maka proses dengan kupon
terbanyaklah yang mendapat giliran. Setiap kali terjadi interupsi waktu, proses yang
sedang berjalan akan kehilangan satu kupon; dan ketika kupon yang dimiliki sudah
habis maka proses itu akan ditunda dan proses yang lain akan diberikan kesempatan
untuk masuk.
Jika proses yang sedang berjalan tidak meiliki kupon sama sekali, linux akan melakukan
operasi pemberian kupon, memberikan kupon kepada tiap proses dalam sistem, dengan
aturan main: kupon = kupon / 2 + prioritas Algoritma ini cenderung untuk
menggabungkan dua faktor yang ada: sejarah proses dan prioritas dari proses itu
sendiri. Satu setengah dari kupon yang dimiliki sejak operasi pembagian kupon terakhir

akan tetap dijaga setelah algoritma telah dijalankan, menjaga beberapa sejarah sikap
proses. Proses yang berjalan sepanjang waktu akan cenderung untuk menghabiskan
kupon yang dimilikinya dengan cepat, tapi proses yang lebih banyak menunggu dapat
mengakumulasi kuponnya dari. Sistem pembagian kupon ini, akan secara otomatis
memberikan proritas yang tinggi ke proses I/O bound atau pun interaktif, dimana respon
yang cepat sangat diperlukan.
Kegunaan dari proses pemberian prioritas dalam menghitung kupon baru, membuat
prioritas dari suatu proses dapat ditingkatkan. Pekerjaan background batch dapat
diberikan prioritas yang rendah; proses tersebut akan secara otomatis menerima kupon
yang lebih sedikit dibandingkan dengan pekerjaan yang interaktif, dan juga akan
menerima persentase waktu CPU yang lebih sedikit dibandingan dengan tugas yang
sama dengan prioritas yang lebih tinggi. Linux menggunakan sistem prioritas ini untuk
menerapkan mekanisme standar pembagian prioritas proses yang lebih baik.
Penjadualan waktu nyata Linux masih tetap lebih sederhana. Linux, menerapkan dua
kelas penjadualan waktu nyata yang dibutuhkan oleh POSIX 1.b: First In First Out dan
round-robin. Pada keduanya, tiap proses memiliki prioritas sebagai tambahan kelas
penjadualannya. Dalam penjadualan time-sharing, bagaimana pun juga proses dengan
prioritas yang berbeda dapat bersaing dengan beberapa pelebaran; dalam penjadualan
waktu nyata, si pembuat jadual selalu menjalankan proses dengan prioritas yang tinggi.
Diantara proses dengan prioritas yang sama, maka proses yang sudah menunggu lama,
akan dijalankan. Perbedaan satu - satunya antara penjadualan FIFO dan round-robin
adalah proses FIFO akan melanjutkan prosesnya sampai keluar atau pun diblokir,
sedangkan proses round-robin akan di-preemptive-kan setelah beberapa saat dan akan
dipindahkan ke akhir antrian, jadi proses round-robin dengan prioritas yang sama akan
secara otomatis membagi waktu jalan antar mereka sendiri.
Perlu diingat bahwa penjadualan waktu nyata di Linux memiliki sifat yang lunak.
Pembuat jadual Linux menawarkan jaminan yang tegas mengenai prioritas relatif dari
proses waktu nyata, tapi kernel tidak menjamin seberapa cepat penjadualan proses
waktu-nyata akan dijalankan pada saat proses siap dijalankan. Ingat bahwa kode kernel
Linux tidak akan pernah bisa dipreemptive oleh kode mode pengguna. Apabila terjadi
interupsi yang membangunkan proses waktu nyata, sementara kernel siap untuk
mengeksekusi sebuah sistem call sebagai bagian proses lain, proses waktu nyata harus
menunggu sampai sistem call yang sedang dijalankan selesai atau diblokir.

9.4.3. Symmetric Multiprocessing


Kernel Linux 2.0 adalah kernel Linux pertama yang stabil untuk mendukung perangkat
keras symmetric multiprocessor (SMP). Proses mau pun thread yang berbeda dapat
dieksekusi secara paralel dengan processor yang berbeda. Tapi bagaimana pun juga
untuk menjaga kelangsungan kebutuhan sinkronisasi yang tidak dapat di-preemptive
dari kernel, penerapan SMP ini menerapkan aturan dimana hanya satu processor yang
dapat dieksekusi dengan kode mode kernel pada suatu saat. SMP menggunakan kernel
spinlock tunggal untuk menjalankan aturan ini. Spinlock ini tidak memunculkan
permasalahan untuk pekerjaan yang banyak menghabiskan waktu untuk menunggu
proses komputasi, tapi untuk pekerjaan yang melibatkan banyak aktifitas kernel,

spinlock dapat menjadi sangat mengkhawatirkan.


Sebuah proyek yang besar dalam pengembangan kernel Linux 2.1 adalah untuk
menciptakan penerapan SMP yang lebih masuk akal, dengan membagi kernel spinlock
tunggal menjadi banyak kunci yang masing-masing melindungi terhadap masuknya
kembali sebagian kecil data struktur kernel. Dengan menggunakan teknik ini,
pengembangan kernel yang terbaru mengizinkan banyak processor untuk dieksekusi
oleh kode mode kernel secara bersamaan.

9.5.

Managemen Memori di Linux

9.5.1. Managemen Memori Fisik


Bagian ini menjelaskan bagaimana linux menangani memori dalam sistem. Memori
managemen merupakan salah satu bagian terpenting dalam sistem operasi. Karena
adanya keterbatasan memori, diperlukan suatu strategi dalam menangani masalah ini.
Jalan keluarnya adalah dengan menggunakan memori virtual. Dengan memori virtual,
memori tampak lebih besar daripada ukuran yang sebenarnya.
Dengan memori virtual kita dapat:
1. Ruang alamat yang besar
Sistem operasi membuat memori terlihat lebih besar daripada ukuran memori
sebenarnya. Memori virtual bisa beberapa kali lebih besar daripada memori fisiknya.
2. Pembagian memori fisik yang adil
Managemen memori membuat pembagian yang adil dalam pengalokasian memori
antara proses-proses.
3. Perlindungan
Memori managemen menjamin setiap proses dalam sistem terlindung dari prosesproses lainnya. Dengan demikian, program yang crash tidak akan mempengaruhi
proses lain dalam sistem tersebut.
4. Penggunaan memori virtual bersama
Memori virtual mengizinkan dua buah proses berbagi memori diantara keduanya,
contohnya dalam shared library. Kode library dapat berada di satu tempat, dan tidak
dikopi pada dua program yang berbeda.

9.5.2. Memori Virtual

Gambar 9-2. Pemetaan Memori Virtual ke Alamat Fisik. Sumber: SO Bahan Kuliah IKI20230, hal.223
Memori fisik dan memori virtual dibagi menjadi bagian-bagian yang disebut page. Page
ini memiliki ukuran yang sama besar. Tiap page ini punya nomor yang unik, yaitu Page
Frame Number (PFN). Untuk setiap instruksi dalam program, CPU melakukan mapping
dari alamat virtual ke memori fisik yang sebenarnya.
Penerjemahan alamat di antara virtual dan memori fisik dilakukan oleh CPU
menggunakan tabel page untuk proses x dan proses y. Ini menunjukkan virtial PFN 0
dari proses x dimap ke memori fisik PFN 1. Setiap anggota tabel page mengandung
informasi berikut ini:
1. Virtual PFN
2. PFN fisik
3. informasi akses page dari page tersebut
Untuk menerjemahkan alamat virtual ke alamat fisik, pertama-tama CPU harus
menangani alamat virtual PFN dan ofsetnya di virtual page. CPU mencari tabel page
proses dan mancari anggota yang sesuai degan virtual PFN. Ini memberikan PFN fisik
yang dicari. CPU kemudian mengambil PFN fisik dan mengalikannya dengan besar page
untuk mendapat alamat basis page tersebut di dalam memori fisik. Terakhir, CPU
menambahkan ofset ke instruksi atau data yang dibutuhkan. Dengan cara ini, memori
virtual dapat dimap ke page fisik dengan urutan yang teracak.
9.5.2.1. Demand Paging
Cara untuk menghemat memori fisik adalah dengan hanya meload page virtual yang
sedang digunakan oleh program yang sedang dieksekusi. Tehnik dimana hanya meload

page virtual ke memori hanya ketika program dijalankan disebut demand paging.
Ketika proses mencoba mengakses alamat virtual yang tidak ada di dalam memori, CPU
tidak dapat menemukan anggota tabel page. Contohnya, dalam gambar, tidak ada
anggota tabel page untuk proses x untuk virtual PFN 2 dan jika proses x ingin membaca
alamat dari virtual PFN 2, CPU tidak dapat menterjemahkan alamat ke alamat fisik.
Saat ini CPU bergantung pada sistem operasi untuk menangani masalah ini. CPU
menginformasikan kepada sistem operasi bahwa page fault telah terjadi, dan sistem
operasi membuat proses menunggu selama sistem operasi menagani masalah ini.
CPU harus membawa page yang benar ke memori dari image di disk. Akses disk
membutuhkan waktu yang sangat lama dan proses harus menunggu sampai page selesai
diambil. Jika ada proses lain yang dapat dijalankan, maka sistem operai akan
memilihnya untuk kemudian dijalankan. Page yang diambil kemudian dituliskan di
dalam page fisik yang masih kosong dan anggota dari virtual PFN ditambahkan dalam
tabel page proses. Proses kemudian dimulai lagi pada tempat dimana page fault terjadi.
Saat ini terjadi pengaksesan memori virtual, CPU membuat penerjemahan dan kemudian
proses dijalankan kembali.
Demand paging terjadi saat sistem sedang sibuk atau saat image pertama kali diload ke
memori. Mekanisme ini berarti sebuah proses dapat mengeksekusi image dimana hanya
sebagian dari image tersebut terdapat dalam memori fisik.
9.5.2.2. Swaping
Jika memori fisik tiba-tiba habis dan proses ingin memindahkan sebuah page ke memori,
sistem operasi harus memutuskan apa yang harus dilakukan. Sistem operasi harus adil
dalam mambagi page fisik dalam sistem diantara proses yang ada, bisa juga sistem
operasi menghapus satu atau lebih page dari memori untuk membuat ruang untuk page
baru yang dibawa ke memori. Cara page virtual dipilih dari memori fisik berpengaruh
pada efisiensi sistem.
Linux menggunakan tehnik page aging agar adil dalam memilih page yang akan dihapus
dari sistem. Ini berarti setiap page memiliki usia sesuai dengan berapa sering page itu
diakses. Semakin sering sebuah page diakses, semakin muda page tersebut. Page yang
tua adalah kandidat untuk diswap.
9.5.2.3. Pengaksesan Memori Virtual Bersama
Memori virtual mempermudah proses untuk berbagi memori saat semua akses ke
memori menggunakan tabel page. Proses yang akan berbagi memori virtual yang sama,
page fisik yang sama direference oleh banyak proses. Tabel page untuk setiap proses
mengandung anggota page table yang mempunyai PFN fisik yang sama.
9.5.2.4. Efisiensi
Desainer dari CPU dan sistem operasi berusaha meningkatkan kinerja dari sistem.
Disamping membuat prosesor, memori semakin cepat, jalan terbaik adalah

manggunakan cache. Berikut ini adalah beberapa cache dalam managemen memori di
linux:
1. Page Cache
Digunakan untuk meningkatkan akses ke image dan data dalam disk. Saat dibaca
dari disk, page dicache di page cache. Jika page ini tidak dibutuhkan lagi pada suatu
saat, tetapi dibutuhkan lagi pada saat yang lain, page ini dapat segera diambil dari
page cache.
2. Bufer Cache
Page mungkin mengandung bufer data yang sedang digunakan oleh kernel, device
driver dan lain-lain. Bufer cache tampak seperti daftar bufer. Contohnya, device
driver membutuhkan bufer 256 bytes, adalah lebih cepat untuk mengambil bufer
dari bufer cache daripada mengalokasikan page fisik lalu kemudian memecahnya
menjadi 256 bytes bufer-bufer.
3. Swap Cache
Hanya page yang telah ditulis ditempatkan dalam swap file. Selama page ini tidak
mengalami perubahan setelah ditulis ke dalam swap file, maka saat berikutnya page
di swap out tidak perlu menuliskan kembali jika page telah ada di swap file. Di sistem
yang sering mengalami swap, ini dapat menghemat akses disk yang tidak perlu.
Salah satu implementasi yang umum dari hardware cache adalah di CPU, cache dari
anggota tabel page. Dalam hal ini, CPU tidak secara langsung membaca tabel page,
tetap mencache terjemahan page yang dibutuhkan.

9.5.3. Load dan Eksekusi Program


1. Penempatan program dalam memori
Linux membuat tabel-tabel fungsi untuk loading program, memberikan kesempatan
kepada setiap fungsi untuk meload file yang diberikan saat sistem call exec
dijalankan. Pertama-tama file binari dari page ditempatkan pada memori virtual.
Hanya pada saat program mencoba mengakses page yang telah diberikan terjadi page
fault, maka page akan diload ke memori fisik.
2. Linking statis dan linking dinamis
a. Linking statis:
librari-librari yang digunakan oleh program ditaruh secara langsung dalam file
binari yang dapat dieksekusi. Kerugian dari linking statis adalah setiap program
harus mengandung kopi library sistem yang umum.
b. Linking dinamis:

hanya sekali meload librari sistem menuju memori. Linking dinamis lebih efisien
dalam hal memori fisik dan ruang disk.

9.6. Sistem Berkas Linux


9.6.1. Sistem Berkas Virtual
9.6.1.1. Objek dasar dalam layer-layer virtual file system
1. File
File adalah sesuatu yang dapat dibaca dan ditulis. File ditempatkan pada memori.
Penempatan pada memori tersebut sesuai dengan konsep file deskriptor yang dimiliki
unix.
2. Inode
Inode merepresentasikan objek dasar dalam file sistem. Inode bisa saja file biasa,
direktori, simbolik link dan lain sebagainya. Virtual file sistem tidak memiliki
perbedaan yang jelas di antara objek, tetapi mengacu kepada implementasi file sistem
yang menyediakan perilaku yang sesuai. Kernel tingkat tinggi menangani objek yang
berbeda secara tidak sama.
File dan inode hampir mirip diantara keduanya. Tetapi terdapat perbedaan yang
penting diantara keduanya. Ada sesuatu yang memiliki inode tetapi tidak memiliki
file, contohnya adalah simbolik link. Ada juga file yang tidak memiliki inode seperti
pipes dan socket.
3. File sistem
File system adalah kumpulan dari inode-inode dengan satu inode pembeda yaitu root.
Inode lainnya diakses mulai dari root inode dan pencarian nama file untuk menuju
ke inode lainnya. File sistem mempunyai beberapa karakteristik yang mencakup
seluruh inode dalam file sistem. Salah satu yang terpenting adalah blocksize.
4. Nama inode
Semua inode dalam file sistem diakses melalui namanya. Walau pun pencarian nama
inode bisa menjadi terlalu berat untuk beberapa sistem, virtual file sistem pada linux
tetap memantau cache dan nama inode yang baru saja terpakai agar kinerja
meningkat. Cache terdapat di memori sebagai tree, ini berarti jika sembarang inode
dari file terdapat di dalam cache, maka parent dari inode tersebut juga terdapat di
dalam cache.
Virtual file system layer menangani semua pengaturan nama path dari file dan
mengubahnya menjadi masukan di dalam cache sebelum mengizinkan file sistem untuk
mengaksesnya. Ada pengecualian pada target dari simbolik link, akan diakses file sistem

secara langsung. File sistem diharapkan untuk menginterpretasikannya.


9.6.1.2. Operasi-operasi Dalam Inode
Linux menyimpan cache dari inode aktif mau pun dari inode yang telah terakses
sebelumnya. Ada 2 path dimana inode ini dapat diakses. Yang pertama telah disebutkan
sebelumnya, setiap entri dalam cache menunjuk pada suatu inode dan menjaga inode
tetap dalam cache. Yang kedua melalui inode hash table. Setiap inode mempunyai alamat
8 bit sesuai dengan alamat dari file sistem superblok dan nomor inode. Inode dengan
nilai hash yang sama kemudian dirangkai di doubly linked list.
Perubahan pada cache melibatkan penambahan dan penghapusan entri-entri dari cache
itu sendiri. Entri-entri yang tidak dibutuhkan lagi akan di unhash sehingga tidak akan
tampak dalam pencarian berikutnya. Operasi diperkirakan akan mengubah struktur
cache harus dikunci selama melakukan perubahan.
Unhash tidak memerlukan semaphore karena ini bisa dilakukan secara atomik dalam
kernel lock. Banyak operasi file memerlukan 2 langkah proses. Yang pertama adalah
melakukan pencarian nama di dalam direktori. Langkah kedua adalah melakukan
operasi pada file yang telah ditemukan. Untuk menjamin tidak terdapatnya proses yang
tidak kompatibel diantara kedua proses itu, setelah proses kedua, virtual file sistem
protokol harus memeriksa bahwa parent entry tetap menjadi parent dari entri childnya.
Yang menarik dari cache locking adalah proses rename, karena mengubah 2 entri dalam
sekali operasi.

9.6.2. Sistem Berkas Linux


9.6.2.1. Sistem Berkas EXT2
a. Keterangan
EXT2 adalah file sistem yang ampuh di linux. EXT2 juga merupakan salah satu file
sistem yang paling ampuh dan menjadi dasar dari segala distribusi linux. Pada EXT2 file
sistem, file data disimpan sebagai data blok. Data blok ini mempunyai panjang yang
sama dan meski pun panjangnya bervariasi diantara EXT2 file sistem, besar blok
tersebut ditentukan pada saat file sistem dibuat dengan perintah mk2fs. Jika besar blok
adalah 1024 bytes, maka file dengan besar 1025 bytes akan memakai 2 blok. Ini berarti
kita membuang setengah blok per file.
EXT2 mendefinisikan topologi file sistem dengan memberikan arti bahwa setiap file pada
sistem diasosiasiakan dengan struktur data inode. Sebuah inode menunjukkan blok
mana dalam suatu file tentang hak akses setiap file, waktu modifikasi file, dan tipe file.
Setiap file dalam EXT2 file sistem terdiri dari inode tunggal dan setiap inode mempunyai
nomor identifikasi yang unik. Inode-inode file sistem disimpan dalam tabel inode.
Direktori dalam EXT2 file sistem adalah file khusus yang mengandung pointer ke inode
masing-masing isi direktori tersebut.

Gambar 9-3. Struktur Sistem Berkas EXT2. Sumber: SO Bahan Kuliah IKI-20230,
hal.228
b. Inode dalam EXT2

Gambar 9-4. Inode Sistem Berkas EXT2. Sumber: SO Bahan Kuliah IKI-20230, hal.228
Inode adalah kerangka dasar yang membangun EXT2. Inode dari setiap kumpulan blok
disimpan dalam tabel inode bersama dengan peta bit yang menyebabkan sistem dapat
mengetahui inode mana yang telah teralokasi dana inode mana yang belum. MODE:
mengandung dia informasi, inode apa dan izin akses yang dimiliki user. OWNER INFO:
user atau grop yang memiliki file atau direktori SIZE: besar file dalam bytes
TIMESTAMPS: kapan waktu pembuatan inode dan waktu terakhir dimodifikasi.

DATABLOKS: pointer ke blok yang mengandung data.


EXT2 inode juga dapat menunjuk pada device khusus, yang mana device khusus ini
bukan merupakan file, tatapi dapat menangani program sehingga program dapat
mengakses ke device. Semua file device di dalam drektori /dev dapat membantu program
mengakses device.
c. Superblok dalam EXT2
Superblok mengandung informasi tentang ukuran dasar dan bentuk file sistem.
Informasi di dalamnya memungkinkan file sistem manager untuk menggunakan dan
merawat file sistem. Biasanya, hanya superblok di blok group 0 saat file sistem di-mount
tetapi setiap blok grup mengandung duplikatnya untuk menjaga jika file sistem menjadi
rusak. Informasi yang dikandung adalah:
a. Magic Number
meyakinkan software bahwa ini adalah superblok dari EXT2 file sistem.
b. Revision Level
menunjukkan revisi mayor dan minor dari file sistem.
c. Mount Count dan Maksimum Mount Count
menunjukkan pada sistem jika harus dilakukan pengecekan dan maksimum mount
yang diijikan sebelum e2fsck dijalankan.
d. Blocks per Size
besar blok dalam file sistem, contohnya 1024 bytes.
e. Blocks per Group
banyaknya blok per group.
f.

Block Group Number


nomor blok group yang mengadung copy dari superblok.

g. Free Blocks
banyaknya blok yang kosong dalam file sistem.
h. Free Inode
banyak inode kosong dalam file sistem. i. First Inode nomor inode dalam inode
pertama dalam file sistem, inode pertama dalam EXT2 root file sistem adalah
direktori "/".
9.6.2.2. Sistem Berkas EXT3
EXT3 adalah peningkatan dari EXT2 file sistem. Peningkatan ini memiliki beberapa
keuntungan, diantaranya:
a. Setelah kegagalan sumber daya, "unclean shutdown", atau kerusakan sistem
EXT2 file sistem harus melalui proses pengecekan dengan program e2fsck. Proses ini

dapat membuang waktu sehingga proses booting menjadi sangat lama, khususnya
untuk disk besar yang mengandung banyak sekali data. Dalam proses ini, semua
data tidak dapat diakses.
Jurnal yang disediakan oleh EXT3 menyebabkan tidak perlu lagi dilakukan
pengecekan data setelah kegagalan sistem. EXT3 hanya dicek bila ada kerusakan
hardware seperti kerusakan hard disk, tetapi kejadian ini sangat jarang. Waktu yang
diperlukan EXT3 file sistem setelah terjadi "unclean shutdown" tidak tergantung dari
ukuran file sistem atau banyaknya file, tetapi tergantung dari besarnya jurnal yang
digunakan untuk menjaga konsistensi. Besar jurnal default memerlukan waktu kirakira sedetik untuk pulih, tergantung kecepatan hardware.
b. Integritas data
EXT3 menjamin adanya integritas data setelah terjadi kerusakan atau "unclean
shutdown". EXT3 memungkinkan kita memilih jenis dan tipe proteksi dari data.
c. Kecepatan
Daripada menulis data lebih dari sekali, EXT3 mempunyai throughput yang lebih
besar daripada EXT2 karena EXT3 memaksimalkan pergerakan head hard disk. Kita
bisa memilih tiga jurnal mode untuk memaksimalkan kecepatan, tetapi integritas
data tidak terjamin.
d. Mudah dilakukan migrasi
Kita dapat berpindah dari EXT2 ke sistem EXT3 tanpa melakukan format ulang.

9.6.2.3. Sistem Berkas Reiser


Reiser file sistem memiliki jurnal yang cepat. Ciri-cirinya mirip EXT3 file sistem. Reiser
file sistem dibuat berdasarkan balance tree yang cepat. Balance tree unggul dalam hal
kinerja, dengan algoritma yang lebih rumit tentunya.
Reiser file sistem lebih efisien dalam pemenfaatan ruang disk. Jika kita menulis file 100
bytes, hanya ditempatkan dalam satu blok. File sistem lain menempatkannya dalam 100
blok. Reiser file sistem tidak memiliki pengalokasian yang tetap untuk inode. Resier file
sistem dapat menghemat disk sampai dengan 6 persen.
9.6.2.4. Sistem Berkas X
X file sistem juga merupakan jurnaling file sistem. X file sistem dibuat oleh SGI dan
digunakan di sistem operasi SGI IRIX. X file sistem juga tersedia untuk linux dibawah
lisensi GPL. X file sistem mengunakan B-tree untuk menangani file yang sangat banyak.
X file sistem digunakan pada server-server besar.
9.6.2.5. Sistem Berkas Proc
Sistem Berkas Proc Proc File Sistem menunjukkan bagaimana hebatnya virtual file

sistem yang ada pada linux. Proc file sistem sebenarnya tidak ada secara fisik, baik
subdirektorinya, mau pun file-file yang ada di dalamnya. Proc file sistem diregister oleh
linux virtual file sistem, jika virtual file sistem memanggilnya dan meminta inode-inode
dan file-file, proc file sistem membuat file tersebut dengan informasi yang ada di dalam
kernel. Contohnya, /proc/devices milik kernel dibuat dari data struktur kernel yang
menjelaskan device tersebut.

9.6.3. Pembagian Sistem Berkas Secara Ortogonal


Shareable dan Unshareable
1. Shareable
Isinya dapat dishare (digunakan bersama) dengan sistem lain, gunanya untuk
menghemat tempat.
2. Unshareable
Isinya tidak dapat dishare(digunakan bersama) dengan sistem lain, biasanya untuk
alasan keamanan.

Variabel dan Statik


1. Variabel
Isinya sering berubah-ubah.
2. Statik
Sekali dibuat, kecil kemungkinan isinya akan berubah. Bisa berubah jika ada campur
tangan sistem admin.

Anda mungkin juga menyukai