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:
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:
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.
Nama; merupakan satu-satunya informasi yang tetap dalam bentuk yang bisa dibaca
oleh manusia (human-readable form)
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.
3.
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.
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.
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.
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
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.
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.
Akhiran
Fungsi
executable
objek
obj, o
batch
bat, sh
text
txt, doc
pengolah kata
library
lib, a, DLL
print, gambar
archive
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.
Penulisan ke berkas yang dibuka oleh pengguna dapat dilihat langsung oleh
pengguna lain yang sedang mengakses ke berkas yang sama.
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.
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.
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
pbg
staf
512
Apr 16
bekas.txt
waktu
nama
berkas
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.
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.
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
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.
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.
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.
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.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.
Pemilihan dalam algoritma alokasi direktori dan manajemen direktori mempunyai efek
yang besar dalam efisiensi, performa, dan kehandalan dari sistem berkas.
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.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.
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.
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
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.
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.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
: Sistem berkas ini digunakan dalam sistem operasi DOS dan Windows 3.1
2. FAT 32
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.
WINDOWS?
BAB
8
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.
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.
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.
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.
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.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.4.
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.
(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.
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.
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.
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.
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.
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.
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.
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).
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)
8.12.1.5. Tapes
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.
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.
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.
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)
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;
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:
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.
fn
arg
flags
sinyal yang dikirim ke induk ketika anak berakhir dan pembagian sumber daya antara
anak dan induk.
child_stack
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.
interupsi
page fault
Interupsi adalah suatu masalah bila mengandung critical section-nya sendiri. Timer
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.5.
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.
hanya sekali meload librari sistem menuju memori. Linking dinamis lebih efisien
dalam hal memori fisik dan ruang disk.
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.
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.
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.