Bab 1. Pendahuluan
Pengertian
sistem operasi secara umum ialah pengelola seluruh sumber-daya yang terdapat
pada sistem komputer dan menyediakan sekumpulan layanan (system calls)
ke pemakai sehingga memudahkan dan menyamankan penggunaan serta pemanfaatan
sumber-daya sistem komputer.
Pada
kenyataannya tidak semua sistem operasi mempunyai struktur yang sama. Namun
menurut Avi Silberschatz, Peter Galvin, dan Greg Gagne, umumnya sebuah sistem
operasi modern mempunyai komponen sebagai berikut:
- Managemen
Proses.
- Managemen
Memori Utama.
- Managemen Secondary-Storage.
- Managemen
Sistem I/O.
- Managemen
Berkas.
- Sistem
Proteksi.
- Jaringan.
- Command-Interpreter
system.
Proses
adalah keadaan ketika sebuah program sedang di eksekusi. Sebuah proses
membutuhkan beberapa sumber daya untuk menyelesaikan tugasnya. sumber daya
tersebut dapat berupa CPU time, memori, berkas-berkas, dan
perangkat-perangkat I/O.
Sistem operasi bertanggung jawab atas
aktivitas-aktivitas yang berkaitan dengan managemen proses seperti:
- Pembuatan
dan penghapusan proses pengguna dan sistem proses.
- Menunda
atau melanjutkan proses.
- Menyediakan
mekanisme untuk proses sinkronisasi.
- Menyediakan
mekanisme untuk proses komunikasi.
- Menyediakan
mekanisme untuk penanganan deadlock.
Memori
utama atau lebih dikenal sebagai memori adalah sebuah array yang
besar dari word atau byte, yang ukurannya mencapai
ratusan, ribuan, atau bahkan jutaan. Setiap word atau byte mempunyai
alamat tersendiri. Memori Utama berfungsi sebagai tempat penyimpanan yang akses
datanya digunakan oleh CPU atau perangkat I/O. Memori utama termasuk tempat
penyimpanan data yang sementara (volatile), artinya data dapat hilang
begitu sistem dimatikan.
Sistem operasi bertanggung jawab atas
aktivitas-aktivitas yang berkaitan dengan managemen memori seperti:
- Menjaga track dari
memori yang sedang digunakan dan siapa yang menggunakannya.
- Memilih
program yang akan di-load ke memori.
- Mengalokasikan
dan meng-dealokasikan ruang memori sesuai kebutuhan.
Data yang
disimpan dalam memori utama bersifat sementara dan jumlahnya sangat kecil. Oleh
karena itu, untuk meyimpan keseluruhan data dan program komputer
dibutuhkan secondary-storage yang bersifat permanen dan mampu
menampung banyak data. Contoh dari secondary-storage adalah harddisk,
disket, dll.
Sistem operasi bertanggung-jawab atas
aktivitas-aktivitas yang berkaitan dengan disk-management seperti: free-space
management, alokasi penyimpanan, penjadualan disk.
Sering
disebut device manager. Menyediakan "device driver"
yang umum sehingga operasi I/O dapat seragam (membuka, membaca, menulis,
menutup). Contoh: pengguna menggunakan operasi yang sama untuk membaca berkas
pada hard-disk, CD-ROM dan floppy disk.
Komponen Sistem Operasi untuk sistem I/O:
- Buffer:
menampung sementara data dari/ ke perangkat I/O.
- Spooling:
melakukan penjadualan pemakaian I/O sistem supaya lebih efisien (antrian
dsb.).
- Menyediakan driver untuk
dapat melakukan operasi "rinci" untuk perangkat keras I/O
tertentu.
Berkas
adalah kumpulan informasi yang berhubungan sesuai dengan tujuan pembuat berkas
tersebut. Berkas dapat mempunyai struktur yang bersifat hirarkis (direktori,
volume, dll.). Sistem operasi bertanggung-jawab:
- Pembuatan
dan penghapusan berkas.
- Pembuatan
dan penghapusan direktori.
- Mendukung
manipulasi berkas dan direktori.
- Memetakan
berkas ke secondary storage.
- Mem-backup berkas
ke media penyimpanan yang permanen (non-volatile).
Proteksi
mengacu pada mekanisme untuk mengontrol akses yang dilakukan oleh program,
prosesor, atau pengguna ke sistem sumber daya. Mekanisme proteksi harus:
- membedakan
antara penggunaan yang sudah diberi izin dan yang belum.
- specify
the controls to be imposed.
- provide
a means of enforcement.
Sistem
terdistribusi adalah sekumpulan prosesor yang tidak berbagi memori atau clock.
Tiap prosesor mempunyai memori sendiri. Prosesor-prosesor tersebut terhubung
melalui jaringan komunikasi Sistem terdistribusi menyediakan akses pengguna ke
bermacam sumber-daya sistem. Akses tersebut menyebabkan:
- Computation
speed-up.
- Increased
data availability.
- Enhanced
reliability.
Sistem
Operasi menunggu instruksi dari pengguna (command driven). Program yang
membaca instruksi dan mengartikan control statements umumnya
disebut:control-card interpreter, command-line interpreter,
dan UNIX shell. Command-Interpreter System sangat
bervariasi dari satu sistem operasi ke sistem operasi yang lain dan disesuaikan
dengan tujuan dan teknologi I/O devices yang ada.
Contohnya: CLI, Windows, Pen-based (touch),
dan lain-lain.
Eksekusi program
adalah kemampuan sistem untuk "load" program ke memori dan
menjalankan program. Operasi I/O: pengguna tidak dapat secara langsung
mengakses sumber daya perangkat keras, sistem operasi harus menyediakan
mekanisme untuk melakukan operasi I/O atas nama pengguna. Sistem manipulasi
berkas dalah kemampuan program untuk operasi pada berkas (membaca, menulis,
membuat, and menghapus berkas). Komunikasi adalah pertukaran data/ informasi
antar dua atau lebih proses yang berada pada satu komputer (atau lebih). Deteksi error adalah
menjaga kestabilan sistem dengan mendeteksi "error", perangkat
keras mau pun operasi.
Efesisensi penggunaan sistem:
- Resource
allocator adalah mengalokasikan sumber-daya ke
beberapa pengguna atau job yang jalan pada saat yang
bersamaan.
- Proteksi
menjamin akses ke sistem sumber daya dikendalikan (pengguna dikontrol
aksesnya ke sistem).
- Accounting adalah
merekam kegiatan pengguna, jatah pemakaian sumber daya (keadilan atau
kebijaksanaan).
System call menyediakan interface antara program
(program pengguna yang berjalan) dan bagian OS. System call menjadi
jembatan antara proses dan sistem operasi. System call ditulis
dalam bahasa assembly atau bahasa tingkat tinggi yang dapat
mengendalikan mesin (C). Contoh: UNIX menyediakan system call: read,
write => operasi I/O untuk berkas.
Sering pengguna program harus memberikan data
(parameter) ke OS yang akan dipanggil. Contoh pada UNIX: read(buffer, max_size,
file_id);
Tiga cara memberikan parameter dari program ke sistem
operasi:
- Melalui
registers (sumber daya di CPU).
- Menyimpan
parameter pada data struktur (table) di memori, dan alamat table tsb
ditunjuk oleh pointer yang disimpan di register.
- Push (store)
melalui "stack" pada memori dan OS mengambilnya
melalui pop pada stack tsb.
Sebuah
mesin virtual (Virtual Machine) menggunakan misalkan terdapat sistem
program => control program yang mengatur pemakaian sumber daya perangkat
keras. Control program = trap System call + akses ke perangkat
keras. Control program memberikan fasilitas ke proses pengguna. Mendapatkan
jatah CPU dan memori. Menyediakan interface "identik"
dengan apa yang disediakan oleh perangkat keras => sharing devices untuk
berbagai proses.
Mesin
Virtual (MV) (MV) => control program yang minimal MV memberikan ilusi multitasking:
seolah-olah terdapat prosesor dan memori ekslusif digunakan MV. MV memilah
fungsi multitasking dan implementasi extended machine (tergantung
proses pengguna) => flexible dan lebih mudah untuk pengaturan. Jika setiap
pengguna diberikan satu MV => bebas untuk menjalankan OS (kernel) yang
diinginkan pada MV tersebut. Potensi lebih dari satu OS dalam satu komputer.
Contoh: IBM VM370: menyediakan MV untuk berbagai OS: CMS (interaktif), MVS,
CICS, dll. Masalah: Sharing disk => OS mempunyai sistem berkas yang mungkin
berbeda. IBM: virtual disk (minidisk) yang dialokasikan untuk pengguna melalui
MV.
Target
untuk pengguna: sistem operasi harus nyaman digunakan, mudah dipelajari, dapat
diandalkan, aman dan cepat. Target untuk sistem: sistem operasi harus gampang
dirancang, diimplementasi, dan dipelihara, sebagaimana fleksibel, error,
dan efisien.
Mekanisme dan Kebijaksanaan:
- Mekanisme
menjelaskan bagaimana melakukan sesuatu kebijaksanaan memutuskan apa yang
akan dilakukan. Pemisahan kebijaksanaan dari mekanisme merupakan hal yang
sangat penting; ini mengizinkan fleksibilitas yang tinggi bila
kebijaksanaan akan diubah nanti.
- Kebijaksanaan
memutuskan apa yang akan dilakukan.
Pemisahan kebijaksanaan dari mekanisme merupakan hal
yang sangat penting; ini mengizinkan fleksibilitas yang tinggi bila
kebijaksanaan akan diubah nanti.
Implementasi Sistem biasanya menggunakan bahas assembly,
sistem operasi sekarang dapat ditulis dengan menggunakan bahasa tingkat tinggi.
Kode yang ditulis dalam bahasa tingkat tinggi: dapat dibuat dengan cepat, lebih
ringkas, lebih mudah dimengerti dan didebug. Sistem operasi lebih mudah
dipindahkan ke perangkat keras yang lain bila ditulis dengan bahasa tingkat
tinggi.
System Generation (SYSGEN)
Sistem operasi dirancang untuk
dapat dijalankan di berbagai jenis mesin; sistemnya harus di konfigurasi untuk
tiap komputer. Program SYSGEN mendapatkan informasi mengenai konfigurasi khusus
dari sistem perangkat keras.
Secara
informal; proses adalah program dalam eksekusi. Suatu proses adalah lebih dari
kode program, dimana kadang kala dikenal sebagai bagian tulisan. Proses juga
termasuk aktivitas yang sedang terjadi, sebagaimana digambarkan oleh nilai pada
program counter dan isi dari daftar prosesor/ processor's register. Suatu
proses umumnya juga termasuk process stack, yang berisikan data temporer
(seperti parameter metoda, address yang kembali, dan variabel lokal) dan sebuah
data section, yang berisikan variabel global.
Kami
tekankan bahwa program itu sendiri bukanlah sebuah proses; suatu program adalah
satu entitas pasif; seperti isi dari sebuah berkas yang disimpan didalam
disket, sebagaimana sebuah proses dalam suatu entitas aktif, dengan
sebuah program counter yang mengkhususkan pada instruksi
selanjutnya untuk dijalankan dan seperangkat sumber daya/ resource yang
berkenaan dengannya.
Sebagaimana proses bekerja, maka proses tersebut
merubah state (keadaan statis/ asal). Status dari sebuah proses didefinisikan
dalam bagian oleh aktivitas yang ada dari proses tersebut. Tiap proses mungkin
adalah satu dari keadaan berikut ini:
- New:
Proses sedang dikerjakan/ dibuat.
- Running:
Instruksi sedang dikerjakan.
- Waiting:
Proses sedang menunggu sejumlah kejadian untuk terjadi (seperti sebuah
penyelesaian I/O atau penerimaan sebuah tanda/ signal).
- Ready:
Proses sedang menunggu untuk ditugaskan pada sebuah prosesor.
- Terminated:
Proses telah selsesai melaksanakan tugasnya/ mengeksekusi.
Nama-nama tersebut adalah arbitrer/ berdasar opini,
istilah tersebut bervariasi disepanjang sistem operasi. Keadaan yang mereka
gambarkan ditemukan pada seluruh sistem. Namun, sistem operasi tertentu juga
lebih baik menggambarkan keadaan/ status proses. Adalah penting untuk menyadari
bahwa hanya satu proses dapat berjalan pada prosesor mana pun pada waktu kapan
pun. Namun, banyak proses yang dapat ready atau waiting. Keadaan diagram yang
berkaitan dangan keadaan tersebut dijelaskan pada
Gambar
2-1. Keadaan Proses
Tiap proses digambarkan dalam sistem operasi oleh
sebuah process control block (PCB) - juga disebut sebuah control
block. Sebuah PCB ditunjukkan dalam PCB berisikan
banyak bagian dari informasi yang berhubungan dengan sebuah proses yang
spesifik, termasuk ini:
- Keadaan proses: Keadaan mungkin, new, ready, running, waiting, halted,
dan juga banyak lagi.
- Program counter: Counter mengindikasikan
address dari perintah selanjutnya untuk dijalankan untuk proses ini.
- CPU register: Register bervariasi dalam jumlah
dan jenis, tergantung pada rancangan komputer. Register tersebut termasuk
accumulator, index register, stack pointer, general-puposes register,
ditambah code information pada kondisi apa pun. Besertaan dengan program
counter, keadaan/ status informasi harus disimpan ketika gangguan terjadi,
untuk memungkinkan proses tersebut berjalan/ bekerja dengan benar
setelahnya.
- Informasi managemen memori: Informasi ini dapat
termasuk suatu informasi sebagai nilai dari dasar dan batas register,
tabel page/ halaman, atau tabel segmen tergantung pada sistem memori yang
digunakan oleh sistem operasi .
- Informasi pencatatan: Informasi ini termasuk
jumlah dari CPU dan waktu riil yang digunakan, batas waktu, jumlah akun,
jumlah job atau proses, dan banyak lagi.
- Informasi status I/O: Informasi termasuk daftar
dari perangkat I/O yang di gunakan pada proses ini, suatu daftar open
berkas dan banyak lagi.
- PCB hanya berfungsi sebagai tempat menyimpan/
gudang untuk informasi apa pun yang dapat bervariasi dari prose ke proses.
Model proses yang didiskusikan sejauh ini telah
menunjukkan bahwa suatu proses adalah sebuah program yang menjalankan eksekusi
thread tunggal. Sebagai contoh, jika sebuah proses menjalankan sebuah program
Word Processor, ada sebuah thread tunggal dari instruksi-instruksi yang sedang
dilaksanakan.
Kontrol thread tunggal ini hanya memungkinkan proses
untuk menjalankan satu tugas pada satu waktu. Banyak sistem operasi modern
telah memiliki konsep yang dikembangkan agar memungkinkan sebuah proses untuk
memiliki eksekusi multithreads, agar dapat dapat secara terus
menerus mengetik dalam karakter dan menjalankan pengecek ejaan didalam proses
yang sama. Maka sistem operasi tersebut memungkinkan proses untuk menjalankan
lebih dari satu tugas pada satu waktu.
Tujuan dari multiprogramming adalah untuk memiliki sejumlah
proses yang berjalan pada sepanjang waktu, untuk memaksimalkan penggunaan CPU.
Tujuan dari pembagian waktu adalah untuk mengganti CPU diantara proses-proses
yang begitu sering sehingga pengguna dapat berinteraksi dengan setiap program
sambil CPU bekerja. Untuk sistem uniprosesor, tidak akan ada lebih dari satu
proses berjalan. Jika ada proses yang lebih dari itu, yang lainnya akan harus
menunggu sampai CPU bebas dan dapat dijadualkan kembali.
Ketika proses memasuki sistem, mereka diletakkan dalam
antrian job. Antrian ini terdiri dari seluruh proses dalam sistem. Proses yang
hidup pada memori utama dan siap dan menunggu/ wait untuk mengeksekusi disimpan
pada sebuah daftar bernama ready queue. Antrian ini biasanya disimpan sebagai daftar
penghubung. Sebuah header ready queue berisikan penunjuk kepada PCB-PCB awal
dan akhir. Setiap PCB memiliki pointer field yang menunjukkan proses
selanjutnya dalam ready queue.
Juga ada antrian lain dalam sistem. Ketika sebuah
proses mengalokasikan CPU, proses tersebut berjalan/bekerja sebentar lalu
berhenti, di interupsi, atau menunggu suatu kejadian tertentu, seperti
penyelesaian suatu permintaan I/O. Pada kasus ini sebuah permintaan I/O,
permintaan seperti itu mungkin untuk sebuah tape drive yang telah
diperuntukkan, atau alat yang berbagi, seperti disket. Karena ada banyak proses
dalam sistem, disket bisa jadi sibuk dengan permintaan I/O untuk proses
lainnya. Maka proses tersebut mungkin harus menunggu untuk disket tersebut.
Daftar dari proses yang menunggu untuk peralatan I/O tertentu disebut sebuah
device queue. Tiap peralatan memiliki device queuenya sendiri.
Gambar 2-4. Device Queue.
Reprensentasi umum untuk suatu diskusi mengenai penjadualan proses adalah
diagram antrian, seperti pada. Setiap kotak segi empat menunjukkan sebuah antrian. Dua tipe antrian
menunjukan antrian yang siap dan suatu perangkat device queues. Lingkaran
menunjukkan sumber-sumber yang melayani sistem. Sebuah proses baru pertama-tama
ditaruh dalam ready queue. Lalu menunggu dalam ready queue sampai proses
tersebut dipilih untuk dikerjakan/lakukan atau di dispatched. Begitu proses
tersebut mengalokasikan CPU dan menjalankan/ mengeksekusi, satu dari beberapa
kejadian dapat terjadi.
- Proses tersebut dapat mengeluarkan sebuah permintaan
I/O, lalu di tempatkan dalam sebuah antrian I/O.
- Proses tersebut dapat membuat subproses yang baru
dan menunggu terminasinya sendiri.
- Proses tersebut dapat digantikan secara paksa
dari CPU, sebagai hasil dari suatu interupsi, dan diletakkan kembali dalam
ready queue.
Gambar 2-5. Diagram Anrian. Sumber: . . .
Sebuah proses berpindah antara berbagai penjadualan
antrian selama umur hidupnya. Sistem operasi harus memilih, untuk keperluan
penjadualan, memproses antrian-antrian ini dalam cara tertentu. Pemilihan
proses dilaksanakan oleh penjadual yang tepat/ cocok. Dalam sistem batch,
sering ada lebih banyak proses yang diserahkan daripada yang dapat dilaksanakan
segera. Proses ini dipitakan/ disimpan pada suatu alat penyimpan masal
(biasanya disket), dimana proses tersebut disimpan untuk eksekusi dilain waktu.
Penjadualan long term, atau penjadual job, memilih proses dari pool ini dan
mengisinya kedalam memori eksekusi.
Sebuah proses dapat mengeksekusi untuk hanya beberapa
milidetik sebelum menunggu permintaan I/O. Seringkali, penjadualan shorterm
mengeksekusi paling sedikit sekali setiap 100 milidetik. Karena durasi waktu
yang pendek antara eksekusi, penjadualan shorterm haruslah cepat. Jika
memerlukan 10 mili detik untuk menentukan suatu proses eksekusi selama 100 mili
detik, maka 10/(100 + 10) = 9 persen CPU sedang digunakan (terbuang) hanya
untuk pekerjaan penjadualan.
Penjadualan longterm pada sisi lain, mengeksekusi jauh
lebih sedikit. Mungkin ada beberapa menit antara pembuatan proses baru dalam
sistem. Penjadualan longterm mengkontrol derajat multiprogramming (jumlah
proses dalam memori). Jika derajat multiprogramming stabil, lalu tingkat
rata-rata dari penciptaan proses harus sama dengan tingkat kepergian rata rata
dari proses yang meninggalkan sistem. Maka penjadualan longterm mungkin
diperlukan untuk dipanggil hanya ketika suatu proses meninggalkan sistem.
Karena interval yang lebih panjang antara eksekusi, penjadualan longterm dapat
memakai waktu yang lebih lama untuk menentukan proses mana yang harus dipilih
untuk dieksekusi.
Adalah penting bagi penjadualan longterm membuat
seleksi yang hati-hati. Secara umum, kebanyakan proses dapat dijelaskan sebagai
I/O bound atau CPU bound. Sebuah proses I/O bound adalah salah satu yang
membuang waktunya untuk mengerjakan I/O dari pada melakukan perhitungan. Suatu
proses CPU-bound, pada sisi lain, adalah salah satu yang jarang menghasilkan
permintaan I/O, menggunakan lebih banyak waktunya melakukan banyak komputasi
daripada yang digunakan oleh proses I/O bound. Penting untuk penjadualan longterm
memilih campuran proses yang baik antara proses I/O bound dan CPU bound. Jika
seluruh proses adalah I/O bound, ready queue akan hampir selalu kosong, dan
penjadualan short term akan memiliki sedikit tugas. Jika seluruh proses adalah
CPU bound, I/O waiting queue akan hampir selalu kosong, peralatan akan tidak
terpakai, dan sistem akan menjadi tidak imbang. Sistem dengan kinerja yang
terbaik akan memiliki kombinasi proses CPU bound dan I/O bound.
Gambar 2-6. Penjadual Medium-term.
Pada sebagian sistem, penjadual long term dapat tidak turut serta atau
minimal. Sebagai contoh, sistem time-sharing seperti UNIX sering kali tidak
memiliki penjadual long term. Stabilitas sistem-sistem ini bergantung pada
keterbatasan fisik (seperti jumlah terminal yang ada) atau pada penyesuaian
sendiri secara alamiah oleh manusia sebagai pengguna. Jika kinerja menurun pada
tingkat yang tidak dapat diterima, sebagian pengguna akan berhenti.
Sebagian sistem operasi, seperti sistem time sharing, dapat memperkenalkan
sebuah tambahan, penjadualan tingkat menengah. Penjadual medium-term ini
digambarkan pada . Ide utama/kunci dibelakang sebuah penjadual medium term adalah kadang
kala akan menguntungkan untuk memindahkan proses dari memori (dan dari
pengisian aktif dari CPU), dan maka untuk mengurangi derajat dari
multiprogramming. Dikemudian waktu, proses dapat diperkenalkan kedalam memori
dan eksekusinya dapat dilanjutkan dimana proses itu di tinggalkan/ diangkat.
Skema ini disebut swapping. Proses di swapped out, dan
lalu diswapped in, oleh penjadual jangka menengah. Swapping mungkin
perlu untuk meningkatkan pencampuran proses, atau karena suatu perubahan dalam
persyaratan memori untuk dibebaskan
Mengganti CPU ke proses lain memerlukan penyimpanan
suatu keadaan proses lama (state of old process) dan kemudian beralih ke
proses yang baru. Tugas tersebut diketahui sebagai alih konteks (context
switch). Alih konteks sebuah proses digambarkan dalam PCB suatu proses;
termasuk nilai dari CPU register, status proses . dan informasi managemen memori. Ketika
alih konteks terjadi, kernel menyimpan konteks dari proses lama kedalam PCB nya
dan mengisi konteks yang telah disimpan dari process baru yang telah terjadual
untuk berjalan. Pergantian waktu konteks adalah murni overhead, karena sistem
melakukan pekerjaan yang tidak perlu. Kecepatannya bervariasi dari mesin ke
mesin, bergantung pada kecepatan memori, jumlah register yang harus di copy,
dan keberadaan instruksi khusus (seperti instruksi tunggal untuk mengisi atau
menyimpan seluruh register). Tingkat kecepatan umumnya berkisar antara 1 sampai
1000 mikro detik
Gambar 2-7. Alih Konteks.
Waktu alih konteks sangat begantung pada dukungan perangkat keras. Sebagai
contoh, prosesor seperti UltraSPARC menyediakan dua rangkap register. Sebuah
alih konteks hanya memasukkan perubahan pointer ke perangkat register yang ada.
Tentu saja, jika ada lebih proses-proses aktif yang ada dari pada yang ada di
perangkat register, sistem menggunakan bantuan untuk meng-copy data register
pada dan dari memori, sebagaimana sebelumnya. Semakin sistem operasi kompleks,
makin banyak pekerjaan yang harus dilakukan selama alih konteks. Sebagaimana
dilihat pada , teknik managemen memori tingkat lanjut dapat mensyaratkan data tambahan
untuk diganti dengan tiap konteks. Sebagai contoh, ruang alamat dari proses
yang ada harus dijaga sebagai ruang pada pekerjaan berikutnya untuk digunakan.
Bagaimana ruang alamat di jaga, berapa banyak pekerjaan dibutuhkan untuk
menjaganya, tergantung pada metoda managemen memori dari sistem operasi.
Sebagaimana akan kita lihat pada , alih konteks telah menjadi suatu keharusan, bahwa programmer menggunakan
struktur (threads) untuk menghindarinya kapan pun memungkinkan.
Gambar 2-8. Pohon Proses.
Proses dalam sistem dapat dieksekusi secara
bersama-sama, proses tersebut harus dibuat dan dihapus secara dinamis. Maka,
sistem operasi harus menyediakan suatu mekanisme umtuk pembuatan proses dan
terminasi proses.
Suatu proses dapat membuat beberapa proses baru,
melalui sistem pemanggilan pembuatan proses, selama jalur eksekusi. Pembuatan
proses dinamakan induk proses, sebagaimana proses baru di sebut anak dari
proses tersbut. Tiap proses baru tersebut dapat membuat proses lainnya,
membentuk suatu pohon proses.
Secara umum, suatu proses akan memerlukan sumber tertentu (waktu CPU,
memori, berkas, perangkat I/O) untuk menyelesaikan tugasnya. Ketika suatu
proses membuat sebuah subproses, sehingga subproses dapat mampu untuk
memperoleh sumbernya secara langsung dari sistem operasi. Induk mungkin harus
membatasi sumber diantara anaknya, atau induk dapat berbagi sebagian sumber
(seperti memori berkas) diantara beberapa dari anaknya. Membatasi suatu anak
proses menjadi subset sumber daya induknya mencegah proses apa pun dari
pengisian sistem yang telalu banyak dengan menciptakan terlalu banyak
subproses.
Sebagai tambahan pada berbagai sumber fisik dan logis bahwa suatu proses
diperoleh ketika telah dibuat, data pemula (masukan) dapat turut lewat oleh
induk proses sampai anak proses. Sebagai contoh, anggap suatu proses yang
fungsinya untuk menunjukkan status sebuah berkas, katakan F1, pada layar
terminal. Ketika dibuat, akan menjadi sebagai sebuah masukan dari proses
induknya, nama dari berkas F1, dan akan mengeksekusi menggunakan kumpulan data
tersebut untuk memperoleh informasi yang diinginkan. Proses tersebut juga
mendapat nama dari perangkat luar. Sebagian sistem operasi melewati
sumber-sumber ke anak proses. Pada sistem tersebut, proses baru bisa mendapat
dua berkas terbuka yang baru, F1 dan perangkat terminal dan hanya perlu untuk
mentransfer data antara kedua berkas tersebut.
Ketika suatu proses membuat proses baru, dua kemungkinan ada dalam term
eksekusi:
- Induk terus menerus untuk mengeksekusi secara
bersama-sama dengan anaknya.
- Induk menunggu sampai sebagian dari anaknya telah
diakhiri/terminasi.
Juga ada dua kemungkinan dalam term dari address space pada
proses baru:
- Anak proses adalah duplikat dari induk proses.
- Anak proses memiliki program yang terisikan
didalamnya.
Untuk mengilustrasikan implementasi yang berbeda ini, mari kita mempelajari
sistem operasi UNIX. Dalam UNIX, tiap proses diidentifikasi oleh
pengidentifikasi proses, yang merupakan integer yang unik. Proses baru dibuat
oleh sistem pemanggilan fork system call. Proses baru tersebut terdiri dari
sebuah copy ruang alamat dari proses aslinya (original). Mekanisme tersebut
memungkinkan induk proses untuk berkomunikasi dengan mudah dengan anak proses.
Kedua proses (induk dan anak) meneruskan eksekusi pada instruksi setelah fork
dengan satu perbedaan: Kode kembali untuk fork adalah nol untuk proses baru
(anak), sebagaimana proses pengidentifikasi non nol (non zero) dari anak
dikembalikan kepada induk.
Umumnya, sistem pemanggilan execlp digunakan setelah sistem pemanggilan
fork. Oleh satu dari dua proses untuk menggantikan proses ruang memori dengan
program baru. Sistem pemanggilan execlp mengisi suatu berkas binary kedalam
memori (menghancurkan gambar memori pada program yang berisikan sistem
pemanggilan execlp) dan memulai eksekusinya. Dengan cara ini, kedua proses
mampu untuk berkomunikasi, dan lalu untuk pergi ke arah yang berbeda. Induk
lalu dapat membuat anak yang lebh banyak atau jika induk tidak punya hal lain
untuk dilakukan ketika anak bekerja, induk dapat mengeluarkan sistem
pemanggilan wait untuk tidak menggerakkan dirinya sendiri pada suatu antrian
yang siap sampai anak berhenti.
Sebuah proses berakhir ketika proses tersebut selesai
mengeksekusi pernyataan akhirnya dan meminta sistem operasi untuk menghapusnya
dengan menggunakan sistem pemanggilan exit. Pada titik itu, proses tersebut
dapat mengembalikan data (keluaran) pada induk prosesnya (melalui sistem
pemanggilan wait) Seluruh sumber-sumber dari proses-termasuk memori fisik dan
virtual, membuka berkas, dan penyimpanan I/O di tempatkan kembali oleh sistem
operasi.
Ada situasi tambahan tertentu ketika terminasi
terjadi. Sebuah proses dapat menyebabkan terminasi dari proses lain melalui
sistem pemanggilan yang tepat (contoh abort). Biasanya, sistem seperti itu
dapat dipanggil hanya oleh induk proses tersebut yang akan diterminasi. Bila
tidak, pengguna dapat secara sewenang-wenang membunuh job antara satu sama
lain. Catat bahwa induk perlu tahu identitas dari anaknya. Maka, ketika satu
proses membuat proses baru, identitas dari proses yang baru diberikan kepada
induknya.
Induk dapat menterminasi/ mengakhiri satu dari anaknya
untuk beberapa alasan, seperti:
- Anak
telah melampaui kegunaannya atas sebagaian sumber yang telah diperuntukkan
untuknya.
- Pekerjaan
yang ditugaskan kepada anak telah keluar, dan sistem operasi tidak
memeperbolehkan sebuah anak untuk meneruskan jika induknya berakhir.
Untuk menentukan kasus pertama, induk harus memiliki
mekanisme untuk memeriksa status anaknya. Banyak sistem, termasuk VMS, tidak
memperbolehkan sebuah anak untuk ada jika induknya telah berakhir. Dalam sistem
seperti ini, jika suatu proses berakhir (walau secara normal atau tidak
normal), maka seluruh anaknya juga harus diterminasi. Fenomena ini, mengacu
pada terminasi secara cascading, yang normalnya dimulai oleh sistem
operasi.
Untuk mengilustrasikan proses eksekusi dan proses
terminasi, kita menganggap bahwa, dalam UNIX, kami dapat mengakhiri suatu
proses dengan sistem pemanggilan exit; proses induknya dapat menunggu untuk
terminasi anak proses dengan menggunakan sistem pemanggilan wait. Sistem
pemanggilan wait kembali ke pengidentifikasi proses dari anak yang telah
diterminasi, maka induk dapat memberitahu kemungkinanan anak mana yang telah
diterminasi. Jika induk menterminasi. Maka, anaknya masih punya sebuah induk
untuk mengumpulkan status mereka dan mengumpulkan statistik eksekusinya.
Hubungan Antara
Proses
Sebelumnya
kita telah ketahui seluk beluk dari suatu proses mulai dari pengertiannya, cara
kerjanya, sampai operasi-operasinya seperti proses pembentukannya dan proses
pemberhentiannya setelah selesai melakukan eksekusi. Kali ini kita akan
mengulas bagaimana hubungan antar proses dapat berlangsung, misal bagaimana
beberapa proses dapat saling berkomunikasi dan bekerja-sama.
Proses yang
Kooperatif
Proses
yang bersifat simultan (concurrent) dijalankan pada sistem operasi dapat
dibedakaan menjadi yaitu proses independent dan proses kooperatif. Suatu proses
dikatakan independen apabila proses tersebut tidak dapat terpengaruh atau
dipengaruhi oleh proses lain yang sedang dijalankan pada sistem. Berarti, semua
proses yang tidak membagi data apa pun (baik sementara/ tetap) dengan proses
lain adalah independent. Sedangkan proses kooperatif adalah proses yang dapat
dipengaruhi atau pun terpengaruhi oleh proses lain yang sedang dijalankan dalam
sistem. Dengan kata lain, proses dikatakan kooperatif bila proses dapat membagi
datanya dengan proses lain.Ada empat alasan untuk penyediaan sebuah lingkungan yang memperbolehkan terjadinya proses kooperatif:
1. Pembagian informasi:
apabila beberapa pengguna dapat tertarik pada bagian informasi yang sama
(sebagai contoh, sebuah berkas bersama), kita harus menyediakan sebuah lingkungan
yang mengizinkan akses secara terus menerus ke tipe dari sumber-sumber
tersebut.
2. Kecepatan
penghitungan/ komputasi: jika kita menginginkan sebuah tugas khusus untuk
menjalankan lebih cepat, kita harus membagi hal tersebut ke dalam subtask,
setiap bagian dari subtask akan dijalankan secara parallel dengan yang lainnya.
Peningkatan kecepatan dapat dilakukan hanya jika komputer tersebut memiliki
elemen-elemen pemrosesan ganda (seperti CPU atau jalur I/O).
3. Modularitas: kita
mungkin ingin untuk membangun sebuah sistem pada sebuah model modular-modular,
membagi fungsi sistem menjadi beberapa proses atau threads.
4. Kenyamanan: bahkan
seorang pengguna individu mungkin memiliki banyak tugas untuk dikerjakan secara
bersamaan pada satu waktu. Sebagai contoh, seorang pengguna dapat mengedit,
memcetak, dan meng-compile secara
paralel.
Komunikasi
Proses Dalam Sistem
Cara
lain untuk meningkatkan efek yang sama adalah untuk sistem operasi yaitu untuk
menyediakan alat-alat proses kooperatif untuk berkomunikasi dengan yang lain
lewat sebuah komunikasi dalam proses (IPC = Inter-Process Communication). IPC
menyediakan sebuah mekanisme untuk mengizinkan proses-proses untuk
berkomunikasi dan menyelaraskan aksi-aksi mereka tanpa berbagi ruang alamat
yang sama. IPC adalah khusus digunakan dalam sebuah lingkungan yang
terdistribusi dimana proses komunikasi tersebut mungkin saja tetap ada dalam
komputer-komputer yang berbeda yang tersambung dalam sebuah jaringan. IPC
adalah penyedia layanan terbaik dengan menggnakan sebuah sistem penyampaian
pesan, dan sistem-sistem pesan dapat diberikan dalam banyak cara.
Sistem Penyampaian Pesan
Fungsi
dari sebuah sistem pesan adalah untuk memperbolehkan komunikasi satu dengan
yang lain tanpa perlu menggunakan pembagian data. Sebuah fasilitas IPC menyediakan
paling sedikit dua operasi yaitu kirim (pesan) dan terima (pesan). Pesan
dikirim dengan sebuah proses yang dapat dilakukan pada ukuran pasti atau
variabel. Jika hanya pesan dengan ukuran pasti dapat dikirimkan, level sistem
implementasi adalah sistem yang sederhana. Pesan berukuran variabel menyediakan
sistem implementasi level yang lebih kompleks.Berikut ini ada beberapa metode untuk mengimplementasikan sebuah jaringan dan operasi pengiriman/ penerimaan secara logika:
·
Komunikasi langsung atau tidak langsung.
·
Komunikasi secara simetris/ asimetris.
·
Buffer otomatis
atau eksplisit.
·
Pengiriman berdasarkan salinan atau referensi.
·
Pesan berukuran pasti dan variabel.
Komunikasi Langsung
Proses-proses
yang ingin dikomunikasikan harus memiliki sebuah cara untuk memilih satu dengan
yang lain. Mereka dapat menggunakan komunikasi langsung/ tidak langsung.Setiap proses yang ingin berkomunikasi harus memiliki nama yang bersifat eksplisit baik penerimaan atau pengirim dari komunikasi tersebut. Dalam konteks ini, pengiriman dan penerimaan pesan secara primitive dapat dijabarkan sebagai:
·
Send (P, message) - mengirim sebuah pesan ke proses P.
·
Receive (Q, message) - menerima sebuah pesan dari proses Q.
Sebuah
jaringan komunikasi pada bahasan ini memiliki beberapa sifat, yaitu:
·
Sebuah jaringan yang didirikan secara otomatis diantara
setiap pasang dari proses yang ingin dikomunikasikan. Proses tersebut harus
mengetahui identitas dari semua yang ingin dikomunikasikan.
·
Sebuah jaringan adalah terdiri dari penggabungan dua
proses.
·
Diantara setiap pesan dari proses terdapat tepat sebuah
jaringan.
Pembahasan
ini memperlihatkan sebuah cara simetris dalam pemberian alamat. Oleh karena
itu, baik keduanya yaitu pengirim dan penerima proses harus memberi nama bagi
yang lain untuk berkomunikasi, hanya pengirim yang memberikan nama bagi
penerima sedangkan penerima tidak menyediakan nama bagi pengirim. Dalam konteks
ini, pengirim dan penerima secara sederhana dapat dijabarkan sebagai:
·
Send (P, message) - mengirim sebuah pesan kepada proses P.
·
Receive (id, message) - menerima sebuah pesan dari semua
proses. Variabel id diatur sebagai nama dari proses dengan komunikasi.
Komunikasi Tidak Langsung
Dengan
komunikasi tidak langsung, pesan akan dikirimkan pada dan diterima dari/
melalui mailbox (kotak surat) atau terminal-terminal,
sebuah mailbox dapat dilihat secara abstrak sebagai
sebuah objek didalam setiap pesan yang dapat ditempatkan dari proses dan dari
setiap pesan yang bias dipindahkan. Setiap kotak surat memiliki sebuah
identifikasi (identitas) yang unik, sebuah proses dapat berkomunikasi dengan
beberapa proses lain melalui sebuah nomor dari mailbox yang berbeda. Dua proses dapat saling
berkomunikasi apabila kedua proses tersebut sharing mailbox. Pengirim dan penerima
dapat dijabarkan sebagai:
·
Send (A, message) - mengirim pesan ke mailbox A.
·
Receive (A, message) - menerima pesan dari mailbox A.
Dalam
masalah ini, link komunikasi mempunyai sifat sebagai berikut:
·
Sebuah link dibangun diantara sepasang proses dimana kedua
proses tersebut membagi mailbox.
·
Sebuah link mungkin dapat berasosiasi dengan lebih dari dua
proses.
·
Diantara setiap pasang proses komunikasi, mungkin terdapat
link yang berbeda-beda, dimana setiap link berhubungan pada satu mailbox..
Sinkronisasi
Komunikasi antara proses membutuhkan
place by calls untuk mengirim dan menerima data primitive. Terdapat rancangan
yang berbeda-beda dalam implementasi setiap primitive. Pengiriman pesan mungkin
dapat diblok (blocking) atau tidak dapat dibloking (nonblocking)
- juga dikenal dengan nama sinkron atau asinkron.
·
Pengiriman yang diblok: Proses pengiriman di blok sampai
pesan diterima oleh proses penerima (receiving process) atau oleh mailbox.
·
Pengiriman yang tidak diblok: Proses pengiriman pesan dan
mengkalkulasi operasi.
·
Penerimaan yang diblok: Penerima mem blok samapai pesan
tersedia.
·
Penerimaan yang tidak diblok: Penerima mengembalikan pesan
valid atau null.
Buffering
Baik komunikasi itu langsung atau tak
langsung, penukaran pesan oleh proses memerlukan antrian sementara. Pada
dasarnya, terdapat tiga jalan dimana antrian tersebut diimplementasikan:
·
Kapasitas nol: antrian mempunyai panjang maksimum 0, maka
link tidak dapat mempunyai penungguan pesan (message waiting). Dalam
kasus ini, pengirim harus memblok sampai penerima menerima pesan.
·
Kapasitas terbatas: antrian mempunyai panjang yang telah
ditentukan, paling banyak n pesan dapat dimasukkan. Jika antrian tidak penuh
ketika pesan dikirimkan, pesan yang baru akan menimpa, dan pengirim pengirim
dapat melanjutkan eksekusi tanpa menunggu. Link mempunyai kapasitas terbatas.
Jika link penuh, pengirim harus memblok sampai terdapat ruang pada antrian.
·
Kapasitas tak terbatas: antrian mempunyai panjang yang tak
terhingga, maka, semua pesan dapat menunggu disini. Pengirim tidak akan pernah
di blok.
Bab 4. Penjadual CPU (CPU Scudelling)
Penjadual CPU adalah basis dari multi
programming sistem operasi. Dengan men-switch CPU diantara proses. Akibatnya
sistem operasi bisa membuat komputer produktif. Dalam bab ini kami akan
mengenalkan tentang dasar dari konsep penjadual dan beberapa algoritma
penjadual. Dan kita juga memaparkan masalah dalam memilih algoritma dalam suatu
sistem.
Konsep Dasar
Tujuan dari multi programming adalah untuk
mempunyai proses berjalan secara bersamaan, unutk memaksimalkan kinerja dari
CPU. Untuk sistem uniprosesor, tidak pernah ada proses yang berjalan lebih dari
satu. Bila ada proses yang lebih dari satu maka yang lain harus mengantri
sampai CPU bebas.Ide dari multi porgamming sangat sederhana. Ketika sebuah proses dieksekusi yang lain harus menunggu sampai selesai. Di sistem komputer yang sederhana CPU akan banyak dalam posisi idle.Semua waktu ini sangat terbuang. Dengan multiprogamming kita mencoba menggunakan waktu secara produktif. Beberapa proses di simpan dalam memori dalam satu waktu. Ketika proses harus menuggu. Sistem operasi mengmbil CPU untuk memproses proses tersebut dan meninggalkan proses yang sedang dieksekusi.
Penjadual adalah fungsi dasar dari suatu sistem operasi. Hampir semua sumber komputer dijadual sebelum digunakan. CPU salah satu sumber dari komputer yang penting yang menjadi sentral dari sentral penjadual di sistem operasi.
Siklus
Burst CPU-I/O
Keberhasilan dari penjadual CPU tergantung
dari beberapa properti prosesor. Proses eksekusi mengandung siklus CPU ekskusi
dan I/o Wait. Proses hanya akan bolak-balik dari dua state ini. Poses eksekusi
dimulai dengan CPU Burst, setelah itu diikuti oleh I/O burst, dan dilakukan
secara bergiliran.Durasi dari CPU bust ini ditelah diukur secara ekstensif, walau pun mereka sangat berbeda dari proses ke proses. Mereka mempunyai frekeunsi kurva yang sama seperti yang diperlihatkan gambar dibawah ini.
Gambar 2-26. CPU Burst. Sumber: . . .
Penjadual
CPU
Kapan pun CPU menjadi idle, sistem opersai
harus memilih salah satu proses untuk masuk kedalam antrian ready (siap) untuk
dieksekusi. Pemilihan tersebut dilakukan oleh penjadual short term. Penjadual
memilih dari sekian proses yang ada di memori yang sudah siap dieksekusi, den
mengalokasikan CPU untuk mengeksekusinyaPenjadual CPU mungkin akan dijalankan ketika proses:
1.
Berubah dari running ke waiting state.
2.
Berubah dari running ke ready state.
3.
Berubah dari waiting ke ready.
4.
Terminates.
Penjadual dari no 1 sampai 4 non premptive
sedangkan yang lain premptive. Dalam penjadual nonpreemptive sekali CPU telah dialokasikan untuk
sebuah proses, maka tidak bisa di ganggu, penjadual model seperti ini digunakan
oleh Windows 3.x; Windows 95 telah menggunakan penjadual preemptive.
Dispatcher
Komponen yang lain yang terlibat dalam
penjadual CPU adalan dispatcher. Dispatcher adalah modul yang memberikan kontrol
CPU kepada proses yang fungsinya adalah:
1.
Alih Konteks
2.
Switching to user mode.
3.
Lompat dari suatu bagian di progam user untuk mengulang
progam.
Dispatcher seharusnya secepat mungkin.
Kriteria
Penjadual
Algoritma penjadual CPU yang berbeda
mempunyai property yang berbeda. Dalam memilih algoritma yang digunakan untuk
situasi tertentu, kita harus memikirkan properti yang berbeda untuk algoritma
yang berbeda. Banyak kriteria yang dianjurkan utnuk membandingkan penjadual CPU
algoritma. Kritria yang biasanya digunakan dalam memilih adalah:
1.
CPU utilization: kita ingin menjaga CPU sesibuk mungkin.
CPU utilization akan mempunyai range dari 0 ke 100 persen. Di sistem yang
sebenarnya seharusnya ia mempunyai range dari 40 persen samapi 90 persen.
2.
Throughput: jika CPU sibuk mengeksekusi proses, jika begitu
kerja telah dilaksanakan. Salah satu ukuran kerja adalah banyak proses yang
diselesaikan per unit waktu, disebut througput. Untuk proses yang lama mungkin
1 proses per jam; untuk proses yang sebentar mungkin 10 proses perdetik.
3.
Turnaround time: dari sudur pandang proses tertentu,
kriteria yang penting adalah berapa lama untuk mengeksekusi proses tersebut.
Interval dari waktu yang diizinkan dengan waktu yang dibutuhkan untuk
menyelesaikan sebuah prose disebut turn-around time. Trun around time adalah
jumlah periode untuk menunggu untuk bisa ke memori, menunggu di ready queue,
eksekusi di CPU, dan melakukan I/O.
4.
Waiting time: algoritma penjadual CPU tidak mempengaruhi
waktu untuk melaksanakan proses tersebut atau I/O; itu hanya mempengaruhi
jumlah waktu yang dibutuhkan proses di antrian ready. Waiting time adalah
jumlah periode menghabiskan di antrian ready.
5.
Response time: di sistem yang interaktif, turnaround time
mungkin bukan waktu yang terbaik untuk kriteria. Sering sebuah proses bisa
memproduksi output diawal, dan bisa meneruskan hasil yang baru sementara hasil
yang sebelumnya telah diberikan ke user. Ukuran yang lain adalah waktu dari
pengiriamn permintaan sampai respon yang pertama di berikan. Ini disebut
response time, yaitu waktu untuk memulai memberikan respon, tetapi bukan waktu
yang dipakai output untu respon tersebut.
Biasanya yang dilakukan adalah
memaksimalkan CPU utilization dan throughput, dan minimalkan turnaround time,
waiting time, dan response time dalam kasus tertentu kita mengambil rata-rata.
Algoritma Penjadual First
Come, First Served
Penjadual CPU berurusan dengan
permasalahan memutuskan proses mana yang akan dillaksanakan, oleh karena itu
banyak bermacam algoritma penjadual, di seksi ini kita akan mendiskripsikan
beberapa algoritma.Ini merupakan algoritma yang paling sederhana, dengan skema proses yang meminta CPU mendapat prioritas. Implementasi dari FCFS mudah diatasi dengan FIFO queue.
Contoh:
Gambar 2-27. Kedatangan Proses:
misal urutan kedatangan adalah P1, P2, P3 Gantt Chart untuk ini adalah:
Gambar 2-28. Gannt Chart Kedatangan Proses I:
Gambar 2-29. Gannt Chart Kedatangan Proses II. Sumber: . . .
misal proses dibalik sehingga urutan kedatangan adalah P3, P2, P1.
Gantt chartnya adalah:
Gambar 2-30. Gannt Chart Kedatangan Proses III. Sumber: . . .
Gambar 2-31. Gannt Chart Kedatangan Proses IV. Sumber: . . .
Dari dua contoh diatas bahwa kasus kedua lebih baik dari kasus pertama, karena pengaruh kedatangan disamping itu FCFS mempunyai kelemahan yaitu convoy effect dimana seandainya ada sebuah proses yang kecil tetapi dia mengantri dengan proses yang membutuhkan waktu yang lama mengakibatkan proses tersebut akan lama dieksekusi.
Penjadual FCFS algoritma adalah nonpremptive. Ketika CPU telah dialokasikan untuk sebuah proses, proses tetap menahan CPU sampai selssai. FCFS algortima jelas merupakan masalah bagi sistem time-sharing, dimana sangat penting untuk user mendapatkan pembagian CPU pada regular interval. Itu akan menjadi bencana untuk megizinkan satu proses pada CPU untuk waktu yang tidak terbatas
Penjadual Shortest
Job First
Salah satu algoritma yang lain adalah
Shortest Job First. Algoritma ini berkaitan dengan waktu setiap proses. Ketika
CPU bebas proses yang mempunyai waktu terpendek untuk menyelesaikannya mendapat
prioritas. Seandainya dua proses atau lebih mempunyai waktu yang sama maka FCFS
algoritma digunakan untuk menyelsaikan masalah tersebut.Ada dua skema dalam SJFS ini yaitu:
1.
nonpremptive — ketika CPU memberikan kepada proses itu
tidak bisa ditunda hingga selesai.
2.
premptive — bila sebuah proses datang dengan waktu
prose lebih rendah dibandingkan dengan waktu proses yang sedang dieksekusi oleh
CPU maka proses yang waktunya lebih rendah mendapatkan prioritas. Skema ini
disebut juga Short - Remaining Time First (SRTF).
Contoh:
Gambar 2-32. Kedatangan Proses: . . .Gambar 2-33. Gannt Chart SJF Non-Preemtive: . . .
Gambar 2-34. Rata-rata Menunggu. Sumber: . . .
SJF algoritma mungkin adalah yang paling optimal, karena ia memberikan rata-rata minimum waiting untuk kumpulan dari proses yang mengantri. Dengan mengeksekusi waktu yang paling pendek baru yang paling lama. Akibatnya rata-rata waktu mnenuggu menurun.
Hal yang sulit dengan SJF algoritma adalah mengethaui waku dari proses berikutnya. Untuk penjadual long term (lama) di sistem batch, kita bisa menggunakan panjang batas waktu proses yang user sebutkan ketika dia mengirim pekerjaan. Oleh karena itu sjf sering digunakan di penjadual long term.
Walau pun SJF optimal tetapi ia tidak bisa digunakan untuk penjadual CPU short term. Tidak ada jalan untuk mengetahui panjang dari CPU burst berikutnya. Salah satu cara untuk mengimplementasikannya adalah dengan memprediksikan CPU burst berikutnya.
Contoh SJF premptive:
SJF algoritma mungkin adalah yang paling optimal, karena ia memberikan rata-rata minimum waiting untuk kumpulan dari proses yang mengantri.
Gambar 2-35. Kedatangan Proses
Gambar 2-36. Gannt Chart SJF Preemtive: . . .
Gambar 2-37. Rata-rata Menunggu. Sumber: . . .
Kita lihat bahwa dengan premptive lebih baik hasilnya daripada non preemptive.
Penjadual Prioritas
Penjadualan SJF (Shortest Job First)
adalah kasus khusus untuk algoritma penjadual Prioritas. Prioritas dapat
diasosiasikan masing-masing proses dan CPU dialokasikan untuk proses dengan
prioritas tertinggi. Untuk proritas yang sama dilakukan dengan FCFS.Ada pun algoritma penjadual prioritas adalah sebagai berikut:
·
Setiap proses akan mempunyai prioritas (bilangan integer).
Beberapa sistem menggunakan integer dengan urutan kecil untuk proses dengan
prioritas rendah, dan sistem lain juga bisa menggunakan integer urutan kecil untuk
proses dengan prioritas tinggi. Tetapi dalam teks ini diasumsikan bahwa integer
kecil merupakan prioritas tertinggi.
·
CPU diberikan ke proses dengan prioritas tertinggi (integer
kecil adalah prioritas tertinggi).
·
Dalam algoritma ini ada dua skema yaitu:
1.
Preemptive: proses dapat di interupsi jika terdapat
prioritas lebih tinggi yang memerlukan CPU.
2.
Nonpreemptive: proses dengan prioritas tinggi akan
mengganti pada saat pemakain time-slice habis.
·
SJF adalah contoh penjadual prioritas dimana prioritas ditentukan
oleh waktu pemakaian CPU berikutnya. Permasalahan yang muncul dalam penjadualan
prioritas adalah indefinite blocking atau starvation.
·
Kadang-kadang untuk kasus dengan prioritas rendah mungkin
tidak pernah dieksekusi. Solusi untuk algoritma penjadual prioritas adalah
aging
·
Prioritas akan naik jika proses makin lama menunggu waktu
jatah CPU.
Bab 5.
Manajemen Memori
Pengikatan Alamat
Dalam
banyak kasus, program akan berada dalam beberapa tahapan sebelum dieksekusi.
Alamat-alamat yang dbutuhkan mungkin saja direpresentasikan dalam cara yang
berbeda dalam tahapan-tahapan ini. Alamat dalam kode program masih berupa
simbolik. Alamat ini akan diikat oleh kompilator ke alamat memori yang dapat
diakses (misalkan 14 byte, mulai dari sebuah modul). Kemudian linkage
editor dan loader, akan
mengikat alamat fisiknya (misalkan 17014). Setiap pengikatan akan memetakan
suatu ruang alamat ke lainnya.Secara klasik, instruksi pengikatan dan data ke alamat memori dapat dilakukan dalam beberapa tahap:
·
waktu compile: jika
diketahui pada waktu compile, dimana proses ditempatkan di memori. Untuk
kemudian kode absolutnya dapat di buat. Jika keumdian amat awalnya berubah,
maka harus di compile ulang.
·
waktu penempatan: Jika tidak diketahui dimana poses
ditempatkan di memori, maka kompilator harus mmbuagt kode yang dapat
dialokasikan. Dalam kasus pengikatan akan ditunda sampai waktu penempatan. Jika
alamat awalnya berubah, kita hanya perlu menempatkan ulang kode, untuk
menyesuaikan dengan perubahan.
·
waktu eksekusi: Jika proses dapat dipindahkan dari suatu
segmen memori ke lainnya selama dieksekusi. Pengikatan akan ditunda sampai run-time.
Ruang Alamat Fisik dan
Logik
Alamat
yang dibuat CPU akan merujuk ke sebuah alamat logik. Sedangkan alamat yang
dilihat oleh memori adalah alamat yang dimasukkan ke register di memori,
merujuk pada alamat fisik pada pengikatan alamat, waktu compile dan
waktu penempatan mnghasilkan daerah dimana alamat logik dan alamat fisik sama.
Sedangkan pada waktu eksekusi menghasilkan alamat fisik dan logik yang berbeda.
Kita biasanya menyebut alamat logik dengan alamat virtual. Kumpulan alamat
logik yang dibuat oleh program adalah ruag alamat logik. Kumpulan alamat fisik
yang berkoresponddensi dengan alamat logik sibut ruang alamat fisik. Pemetaan
dari virtual ke alamat fisik dialkukan oleh Memory-Management
Unit (MMU),
yang merupakan sebuah perangkat keras.Register utamanya disebut relocation-register. Nilai pada relocation register bertambah setiap alamat dibuat oleh proses pengguna, pada waktu yang sama alamat ini dikirim ke memori. Program pengguna tidak dapat langsung mengakses memori. Ketika ada program yang menunjuk ke alamat memori, kemudian mengoperasikannya, dan menaruh lagi di memori, akan di lokasikan awal oleh MMU, karena program pengguna hanya bernterkasi dengan alamat logik.
Konsep untuk memisahkan ruang alamat logik dan ruang alamat fisik, adalah inti dari managemen memori yang baik.
Penempatan Dinamis
Telah
kita ketahui seluruh proses dan data berada memori fisik ketika di eksekusi.
Ukuran dari memori fisik terbatas. Untuk mendapatkan utilisasi ruang memori
yang baik, kita melakukan penempatan dinamis. Dengan penempatan dinamis, sebuah
rutin tidak akan ditempatkan sampai dipanggil. Semua rutin diletakan di disk,
dalam format yang dapat di lokasikan ulang. Program utama di tempatkan di
memori dan dieksekusi. Jika sebuah rutin memanggil rutin lainnya, maka akan di
cek dulu apakah rutin yang dipanggil ada di dalam memori atau tidak, jika tidak
ada maka linkage loader dipanggil untuk menempatkan rutin yang diinginkan ke
memori dan memperbaharui tabel alamat program untuk menyesuaikan perubahan.
Kemudian kontrol diletakan pada rutin yang baru ditempatkan.Keuntungan dari penempatan dinamis adalah rutin yang tidak digunakan tidak pernah ditempatkan. Metode ini berguna untuk kode dalam jumlah banyak, ketika muncul kasus-kasus yang tidak lazim, seperti rutin yang salah. Dalam kode yag besar, walau pun ukuran kode besar, tapi yang ditempatkan dapat jauh lebih kecil.
Penempatan Dinamis tidak didukung oleh sistem operasi. Ini adalah tanggung-jawab para pengguna untuk merancang program yang mengambil keuntungan dari metode ini. Sistem Operasi dapat membantu pembuat program dengan menyediakan libary rutin untuk mengimplementasi penempatan dinamis.
Perhubungan Dinamis dan
Berbagi Library
Pada
proses dengan banyak langkah, ditemukan juga perhubungan-perhubungan library yang
dinamis. Beberapa sistem operasi hanya mendukung perhubungan yang dinamis,
dimana sistem bahasa library diperlakukan
seperti objek modul yang lain, dan disatukan oleh pemuat kedalam tampilan
program biner. Konsep perhubungan dinamis, serupa dengan konsep penempatan
dinamis. Penempatan lebih banyak ditunda selama waktu eksekusi, dari pada lama
penundaan oleh perhubungan dinamis. Keistimewaan ini biasanya digunakan dalam library sistem,
seperti library bahasa
sub-rutin. Tanpa fasilitas ini, semua program dalam sebuah sistem, harus
mempunyai kopi dari libary bahasa mereka (atau setidaknya referensi rutin oleh
program) termasuk dalam tampilan yang dapat dieksekusi. Kebutuhan ini sangat
boros baik untuk disk, mau pun memori utama. Dengan penempatan dinamis, sebuah
potongan dimasukkan kedalam tampilan untuk setiap rujukan library subrutin.
Potongan ini adalah sebuah bagian kecil dari kode yang menunjukan bagaimana
mealokasikan libary rutin di memori denga tepat, atau bagaimana menempatkanlibrary jika
rutin belum ada.Ketika potongan ini dieksekusi, dia akan memeriksa dan melihat apakah rutin yang dibutuhkan sudah ada di memory. Jika rutin yang dibutuhkan tidak ada di memori, program akan menempatkannya ke memori. Jika rutin yang dibutuhkan ada dimemori, maka potongan akan mengganti dirinya dengan alamat dari rutin, dan mengeksekusi rutin. Demikianlah, berikutnya ketika segmentasi kode dicapai, rutin library dieksekusi secara langsung, dengan begini tidak ada biaya untuk penghubungan dinamis. Dalam skema ini semua proses yang menggunakan sebuah library bahasa, mengeksekusi hanya satu dari kopi kode library.
Fasilitas ini dapat diperluas menjadi pembaharuan library (seperti perbaikan bugs). Sebuah libary dapat ditempatkan lagi dengan versi yang lebih baru dan semua program yang merujuk ke library akan secara otomatis menggunakan versi yang baru. Tanpa penempatan dinamis, semua program akan akan membutuhkan penempatan kembali, untuk dapat mengakses library yang baru. Jadi semua program tidak secara sengaja mengeksekusi yang baru, perubahan versi library, informasi versi dapat dimasukkan kedalam memori, dan setiap program menggunakan informasi versi untuk memutuskan versi mana yang akan digunakan dari kopi library. Sedikit perubahan akan tetap meggunakan nomor versi yang sama, sedangkan perubhan besar akan menambah satu versi seblumnya. Karenanya program yang dikompile dengan versi yang baru akan dipengaruhi dengan perubahan yang terdapat di dalamnya. Program lain yang berhubungan sebelum library baru diinstal, akan terus menggunakan library lama. Sistem ini juga dikenal sebagai berbagi library.
Lapisan Atas
Karena
proses dapat lebih besar daripada memori yang dialokasikan, kita gunakan
lapisan atas. Idenya untuk menjaga agar di dalam memori berisi hanya instruksi
dan data yang dibutuhkan dalam satuan waktu. Ketika instruksi lain dibutuhkan
instruksi akan dimasukkan kedalam ruang yang ditempati sebelumnya oleh oleh
instruksi yang tidak lagi dibutuhkan.Sebagai contoh, sebuah two-pass assembler. selama pass1 dibangun sebuah tabel simbol, kemudian selama pass2, akan membuat kode bahasa mesin. kita dapat mempartisi sebuah assembler menjadi kode pass1, kode pass2, dan simbol tabel. dan rutin biasa digunakan untuk kedua pass1 dan pass2.
Untuk menempatkan semuanya sekaligus, kita akan membutuhkan 200K memori. Jika hanya 150K yang tersedia, kita tidak dapat menjalankan proses. Bagaimana pun perhatikan bahwa pass1 dan pass2 tidak harus berada di memori pada saat yang sama. Kita mendefinisikan dua lapisan atas. Lapisan atas A untuk pass1, tabel simbol dan rutin, lapisan atas 2 untuk simbol tabel, rutin, dan pass2.
Kita menambahkan sebuah driver lapisan atas (10K) dan mulai dengan lapisan atas A di memori. Ketika selesai pass1, lompat ke driver, dan membaca lapisan atas B kedalam memori, meniban lapisan atas A, dan mengirim kontrol ke pass2. Lapisan atas A butuh hanya 120K, dan B membutuhkan 150K memori. Kita sekarang dapat menjalankan assembler dalam 150K memori. Penempatan akan lebih cepat, karena lebih sedikit data yang ditransfer sebelum eksekusi dimulai. Jalan program akan lebih lambat, karena ekstra I/O dari kode lapisan atas B melalui kode lapisan atas A.
Seperti dalam penempatan dinamis, lapisan atas tidak membutuhkan dukungan tertentu dari sistem operasi. Implementasi dapat dilakukan secara lengkap oleh user dengan berkas struktur yang sederhana, membasa dari berkas ke memori, dan lompat dari memori tersebut, dan mengeksekusi instruksi yang baru dibaca. Sistem operasi hanya memperhatikan jika ada lebih banyak I/O dari biasanya.
Di sisi lain programmer harus mendesain program dengan struktur lapisan atas yang layak. Tugas ini membutuhkan pengetahuan yang komplit tentang struktur dari program, kode dan struktur data.
Pemakaian dari lapisan atas, dibatasi oleh mikrokomputer, dan sistem lain yang mempunyai batasan jumlah memori fisik, dan kurangnya dukungan perangkat keras, untuk teknik yang lebih maju. Teknik otomatis menjalankan program besar dalam dalam jumlah memori fisik yang terbatas, lebih diutamakan
Sebuah proses membutuhkan memori untuk dieksekusi. Sebuah proses dapat
ditukar sementara keluar memori ke backing store (disk), dan kemudian dibawa
masuk lagi ke memori untuk dieksekusi. Sebagai contoh, asumsi multiprogramming,
dengan penjadualan algoritma CPU Round-Robin. Ketika kuantum habis, manager
memori akan mulai menukar keluar proses yang selesai, dan memasukkan ke memori
proses yang bebas. Sementara penjadualan CPU akan mangalokasikan waktu untuk
proses lain di memori. Ketika tiap proses menghabiskan waktu kuantumnya, proses
akan ditukar dengan proses lain. Idealnya memori manager, dapat menukar
proses-proses cukup cepat, sehingga selalu ada proses dimemori, siap
dieksekusi, ketika penjadual CPU ingin menjadual ulang CPU. Besar kuantum juga
harus cukup besar, sehingga jumlah perhitungan yang dilakukan antar pertukaran
masuk akal.
Variasi dari kebijakan swapping ini, digunakan untuk
algoritma penjadualan berdasarkan prioritas. Jika proses yang lebih tinggi
tiba, dan minta dilayani, memori manager dapat menukar keluar proses dengan
prioritas yang lebih rendah, sehingga dapat memasukkan dan mengeksekusi proses
dengan prioritas yang lebih tinggi. Ketika proses dengan prioritas lebih tinggi
selesai, proses dengan prioritas yang lebih rendah, dapat ditukar masuk
kembali, dan melanjutkan. Macam-macam pertukaran ini kadang disebut roll out,
dan roll in.
Normalnya, sebuah proses yang ditukar keluar, akan dimasukkan kembali ke
tempat memori yang sama dengan yang digunakan sebelumnya. Batasan ini dibuat
oleh method pengikat alamat. Jika pengikatan dilakukan saat assemble atau load
time, maka proses tidak bisa dipindahkan ke lokasi yang berbeda. Jika
menggunakan pengikatan waktu eksekusi, maka akan mungkin menukar proses kedalam
tempat memori yang berbeda. Karena alamat fisik dihitung selama proses
eksekusi.
Pertukaran membutuhkan sebuah backing store. Backing store biasanya adalah
sebuah disk yang cepat. Cukup besar untuk mengakomodasi semua kopi tampilan
memori. Sistem memelihara ready queue terdiri dari semua
proses yang mempunyai tampilan memori yang ada di backing store, atau di memori
dan siap dijalankan. Ketika penjadual CPU memutuskan untuk mengeksekusi sebuah
proses, dia akan memanggil dispatcher, yang mengecek dan melihat apakah proses
berikutnya ada diantrian memori. Jika proses tidak ada, dan tidak ada ruang
memori yang kosong, dispatcher menukar keluar sebuah proses
dan memaasukan proses yang diinginkan. Kemudian memasukkan ulang register
dengan normal, dan mentransfer pengendali ke proses yang diinginkan.
Konteks waktu pergantian pada sistem swapping, lumayan tinggi. Untuk
efisiensi kegunaan CPU, kita ingin waktu eksekusi untuk tiap proses lebih lama
dari waktu pertukaran. Karenanya digunakan CPU penjadualan roun-robin, dimana
kuantumnya harus lebih besar dari waktu pertukaran.
Perhatikan bahwa bagian terbesar dari waktu pertukaran, adalah waktu
pengiriman. Total waktu pengiriman langsung didapat dari jumlah pertukaran
memori.
Proses dengan kebutuhan memori dinamis, akan membutuhkan system
call (meminta dan melepaskan memori), untuk memberi tahu sistem operasi
tentang perubahan kebutuhan memori.
Ada beberapa keterbatasan swapping. Jika kita ingin menukar
sebuah proses kita harus yakin bahwa proses sepenuhnya diam. Konsentrasi lebih
jauh, jika ada penundaan I/O. Sebuah proses mungkin menunggu I/O, ketika kita
ingin menukar proses itu untuk mengosongkan memori. Jika I/O secara asinkronus,
mengakses memori dari I/O buffer, maka proses tidak bisa ditukar. Misalkan I/O
operation berada di antrian, karena device sedang sibuk. Maka
bila kita menukar keluar proses P1 dan memasukkan P2, mungkin saja operasi I/O
akan berusaha masuk ke memori yang sekarang milik P2. Dua solusi utama masalah
ini adalah
- Jangan
pernah menukar proses yang sedang menunggu I/O.
- Untuk
mengeksekusi operasi I/O hanya pada buffer sistem
operasi.
Secara umum, ruang pertukaran dialokasikan sebagai potongan disk, terpisah
dari sistem berkas, sehingga bisa digunakan secepat mungkin.
Belakangan pertukaran standar pertukaran digunakan dibeberapa sistem. Ini
membutuhkan terlalu banyak waktu untuk menukar dari pada untuk mengeksekusi
untuk solusi managemen memori yang masuk akal. Modifikasi swapping digunakan
dibanyak versi di UNIX. Pertukaran awalnya tidak bisa, tapi akan mulai bila
banyak proses yang jalan dan menggunakan batas jumlah memori.
Segmentasi
Salah
satu aspek penting dari managemen memori yang tidak dapat dihindari dari
pemberian halaman adalah pemisahan cara pandang pengguna dengan tentang
bagaimana memori dipetakan dengan keadaan yang sebenarnya. Pada kenyataannya
pemetaan tersebut memperbolehkan pemisahan antara memori logis dan memori
fisik.
Metode Dasar
Bagaimanakah
cara pandang pengguna tentang bagaimana memori dipetakan? Apakah pengguna
menganggap bahwa memori dianggap sebagai sebuah kumpulan dari byte-byte, yang
mana sebagian berisi instruksi dan sebagian lagi merupakan data, atau apakah
ada cara pandang lain yang lebih layak digunakan? Ternyata programmer dari
sistem tidak menganggap bahwa memori adalah sekumpulan byte-byte yang
linear. Akan tetapi, mereka lebih senang dengan menganggap bahwa memori adalah
sebagai kumpulan dari segmen-segmen yang berukuran beragam tanpa adanya
pengurutan penempatan dalam memori fisik.Ketika kita menulis suatu program, kita akan menganggapnya sebagai sebuah program dengan sekumpulan dari subrutin, prosedur, fungsi, atau variabel. mungkin juga terdapat berbagai macam struktur data seperti: tabel, array, stack, variabel, dsb. Tiap-tiap modul atau elemen-elemen dari data ini dapat di-referensikan dengan suatu nama, tanpa perlu mengetahui dimana alamat sebenarnya elemen-elemen tersebut disimpan di memori. dan kita juga tidak perlu mengetahui apakah terdapat urutan penempatan dari program yang kita buat. Pada kenyataannya, elemen-elemen yang terdapat pada sebuah segmen dapat ditentukan lokasinya dengan menambahkan offset dari awal alamat segmen tersebut.
Segmentasi adalah sebuah bagian dari managemen memori yang mengatur pengalamatan dari memori yang terdiri dari segmen-segmen. logical address space adalah kumpulan dari segmen-segmen yang mana tiap-tiap segmen mempunyai nama dan panjang. alamat tersebut menunjukkan alamat dari segmen tersebut dan offset-nya didalam segmen-segmen tersebut. pengguna kemudian menentukan pengalamatan dari setiap segmen menjadi dua bentuk, nama segmen dan offset dari segmen tersebut (Hal ini berbeda dengan pemberian halaman, dimana pengguna hanya menentukan satu buah alamat, dimana pembagian alamat menjadi dua dilakukan oleh perangkat keras, semua ini tidak dapat dilihat oleh user).
Untuk kemudahan pengimplementasian, segmen-segmen diberi nomor dan direferensikan dengan menggunakan penomoran tersebut, daripada dengan menggunakan nama. maka, logical address space terdiri dari dua tuple yaitu: (nomor-segmen, offset) Pada umumnya, program dari pengguna akan dikompilasi, dan kompilator tersebut akan membuat segmen-segmen tersebut secara otomatis. Jika mengambil contoh kompilator dari Pascal, maka kemungkinan kompilator tersebut akan membuat beberapa segmen yang terpisah untuk
1. Variabel Global;
2. Prosedur dari
pemanggilan stack, untuk menyimpan parameter dan pengembalian alamat;
3. Porsi dari kode untuk
setiap prosedur atau fungsi; dan
4. Variabel lokal dari
setiap prosedur dan fungsi.
Perangkat Keras
Walau
pun pengguna sekarang dapat mengacu ke suatu objek yang berada di dalam program
dengan menggunakan pengalamatan secara dua dimensi, akan tetapi, pada
kenyataannya tetap saja pada memori fisik akan dipetakan ke dalam pengalamatan
satu dimensi yang terdiri dari urutan dari byte-byte. Maka,
kita harus mendefinisikan suatu implementasi untuk memetakan pengalamatan dua
dimensi yang dilakukan oleh pengguna ke dalam pengalamatan satu dimensi yang
terdapat di memori fisik. pemetaan ini dapat di lakukan dengan menggunakan
tabel segmen. Setiap anggota dari tabel segmen mempunyai basis dan limit yang akan
menentukan letak dari segmen tersebut di dalam memori.Gambar 4-10. Alamat Logis
Kegunaan tabel segmen dapat dilihat pada alamat logis terdiri dari dua bagian: bagian segmen, s, dan bagian offsetnya, d. Nomor dari segmen tersebut akan digunakan sebagai index di dalam tabel segmen. Offset dari d di alamat logis sebaiknya tidak melebihi limit dari alamat segmen, jika ini terjadi, maka sistem operasi sebaiknya dapat mengatasi hal ini, dengan melakukan trap.
Pemeliharaan dan
Pembagian
Dengan
dilakukannya pengelompokan antara segmen-segmen yang sama, maka pemeliharaan
dari segmen tersebut dapat menjadi lebih mudah, walau pun didalam segmen
tersebut sebagian berisi instruksi dan sebagian lagi berisi data. Dalam
arsitektur modern, instruksi-instruksi yang digunakan tidak dapat diubah tanpa
campur tangan pengguna, oleh karena itu, segmen yang berisi instruksi dapat
diberi label read
only atau
hanya dapat dijalankan saja. Perangkat keras yang bertugas untuk melakukan
pemetaan ke memori fisik akan melakukan pemeriksaan terhadap bit proteksi yang
terdapat pada segmen, sehingga pengaksesan memori secara ilegal dapat
dihindari, seperti suatu usaha untuk menulis ke area yang berstatus tidak boleh
dimodifikasi.Keuntungan lain dari segmentasi adalah menyangkut masalah pembagian penggunaan kode atau data. Setiap proses mempunyai tabel segmennya sendiri, dimana ini akan digunakan oleh dispatcher untuk menentukan tabel segmen dari perangkat keras yang mana akan digunakan ketika proses yang bersangkutan di eksekusi oleh CPU. Segmen akan berbagi ketika anggota dari elemen tabel segmen yang berasal dari dua proses yang berbeda menunjuk ke lokasi fisik yang sama. Pembagian tersebut terjadi pada level segmen, maka, informasi apa pun dapat dibagi jika didefinisikan pada level segmen. Bahkan beberapa segmen pun dapat berbagi, sehingga sebuah program yang terdiri dari beberapa segmen pun dapat saling berbagi pakai.
Fragmentasi
Penjadwalan
jangka-panjang harus mencari dan mengalokasikan memori untuk semua segmen dari
program pengguna. Situasi ini mirip dengan pemberian halaman kecuali bahwa
segmen-segmen ini mempunyai panjang yang variabel; sedangkan pada halaman,
semua mempunyai ukuran yang sama. maka, masalah yang dihadapi adalah
pengalamatan memori secara dinamis, hal ini biasanya dapat diselesaikan dengan
menggunakan algoritma best-fit atau
algoritma first-fit.
Bab 6. Memori Virtual
Selama bertahun-tahun, pelaksanaan
berbagai strategi managemen memori yang ada menuntut keseluruhan bagian proses
berada di memori sebelum proses dapat mulai dieksekusi. Dengan kata lain, semua
bagian proses harus memiliki alokasi sendiri pada memori fisiknya.Pada nyatanya tidak semua bagian dari program tersebut akan diproses, misalnya:
1. Terdapat
pernyataan-pernyataan atau pilihan yang hanya akan dieksekusi jika kondisi
tertentu dipenuhi. Apabila kondisi tersebut tidak dipenuhi, maka pilihan
tersebut tak akan pernah dieksekusi/ diproses. Contoh dari pilihan itu adalah:
pesan-pesan error yang hanya akan muncul bila terjadi kesalahan dalam eksekusi
program.
2. Terdapat
fungsi-fungsi yang jarang digunakan, bahkan sampai lebih dari 100x pemakaian.
3. Terdapat pealokasian
memori lebih besar dari yang sebenarnya dibutuhkan. Contoh pada: array, list, dan
tabel.
Hal-hal
di atas telah menurunkan optimalitasi utilitas dari ruang memori fisik. Pada
memori berkapasitas besar, hal ini mungkin tidak menjadi masalah. Akan tetapi,
bagaimana jika memori yang disediakan terbatas?Salah satu cara untuk mengatasinya adalah dengan overlay dan dynamic loading . Namun hal ini menimbulkan masalah baru karena implementasinya yang rumit dan penulisan program yang akan memakan tempat di memori. Tujuan semula untuk menghemat memori bisa jadi malah tidak tercapai apabila program untuk overlay dandynamic loading . malah lebih besar daripada program yang sebenarnya ingin dieksekusi.
Maka sebagai solusi untuk masalah-masalah ini digunakanlah konsep memori virtual.
Pengertian
Memori virtual merupakan suatu teknik yang
memisahkan antara memori logis dan memori fisiknya. Teknik ini mengizinkan
program untuk dieksekusi tanpa seluruh bagian program perlu ikut masuk ke dalam
memori.Berbeda dengan keterbatasan yang dimiliki oleh memori fisik, memori virtual dapat menampung program dalam skala besar, melebihi daya tampung dari memori utama yang tersedia.
Prinsip dari memori virtual yang patut diingat adalah bahwa: "Kecepatan maksimum eksekusi proses di memori virtual dapat sama, tetapi tidak pernah melampaui kecepatan eksekusi proses yang sama di sistem tanpa menggunakan memori virtual."
Konsep memori virtual pertama kali dikemukakan Fotheringham pada tahun 1961 pada sistem komputer Atlas di Universitas Manchester, Inggris (Hariyanto, Bambang : 2001).
Keuntungan
Sebagaimana dikatakan di atas bahwa hanya
sebagian dari program yang diletakkan di memori. Hal ini berakibat pada:
·
Berkurangnya I/O yang dibutuhkan (lalu lintas I/O menjadi
rendah). Misal, untuk program butuh membaca dari disk dan memasukkan dalam
memory setiap kali diakses.
·
Berkurangnya memori yang dibutuhkan (space menjadi
lebih leluasa). Contoh, untuk program 10 MB tidak seluruh bagian dimasukkan
dalam memori. Pesan-pesan error hanya
dimasukkan jika terjadi error.
·
Meningkatnya respon, sebagai konsekuensi dari menurunnya
beban I/O dan memori.
·
Bertambahnya jumlah user yang
dapat dilayani. Ruang memori yang masih tersedia luas memungkinkan komputer
untuk menerima lebih banyak permintaan dari user.
Implementasi
Gagasan dari memori virtual adalah ukuran
gabungan program, data dan stack melampaui
jumlah memori fisik yang tersedia. Sistem operasi menyimpan bagian-bagian
proses yang sedang digunakan di memori utama (main memory) dan sisanya
ditaruh di disk. Begitu bagian di disk diperlukan, maka bagian di memori yang
tidak diperlukan akan disingkirkan (swap-out) dan diganti (swap-in)
oleh bagian disk yang diperlukan itu.Memori virtual diimplementasikan dalam sistem multiprogramming. Misalnya: 10 program dengan ukuran 2 Mb dapat berjalan di memori berkapasitas 4 Mb. Tiap program dialokasikan 256 KByte dan bagian-bagian proses di-swap masuk dan keluar memori begitu diperlukan. Dengan demikian, sistem multiprogrammingmenjadi lebih efisien.
Memori virtual dapat dilakukan melalui dua cara:
1. Permintaan pemberian
halaman (demand paging).
2. Permintaan segmentasi
(demand segmentation). Contoh: IBM OS/2. Algoritma dari permintaan
segmentasi lebih kompleks, karenanya jarang diimplementasikan.
Permintaan Pemberian
Halaman (Demand Paging)
Merupakan implementasi yang paling umum
dari memori virtual.Prinsip permintaan pemberian halaman (demand paging) hampir sama dengan sistem penomoran (paging) dengan menggunakan swapping. Perbedaannya adalahpage pada permintaan pemberian halaman tidak akan pernah di-swap ke memori sampai ia benar-benar diperlukan. Untuk itu diperlukan adanya pengecekan dengan bantuan perangkat keras mengenai lokasi dari page saat ia dibutuhkan.
Permasalahan pada Page
Fault
Ada
tiga kemungkinan kasus yang dapat terjadi pada saat dilakukan pengecekan pada page yang
dibutuhkan, yaitu:
1. Page ada dan
sudah berada di memori.
2. Page ada
tetapi belum ditaruh di memori (harus menunggu sampai dimasukkan).
3. Page tidak
ada, baik di memori mau pun di disk (invalid reference --> abort).
Saat
terjadi kasus kedua dan ketiga, maka proses dinyatakan mengalami page
fault.
Skema Bit Valid - Tidak Valid
Dengan
meminjam konsep yang sudah pernah dijelaskan dalam Bab 9, maka dapat ditentukan
page mana yang ada di dalam memori dan mana yang tidak ada di dalam memori.Konsep itu adalah skema bit valid - tidak valid, di mana di sini pengertian "valid" berarti bahwa page legal dan berada dalam memori (kasus 1), sedangkan "tidak valid" berarti page tidak ada (kasus 3) atau page ada tapi tidak ditemui di memori (kasus 2).
Pengesetan bit:
Bit 1 -->
page berada di memori
Bit 0 -->
page tidak berada di
memori.
(Dengan inisialisasi: semua bit
di-set 0).
|
Penanganan Page Fault
Prosedur
penanganan page
fault sebagaimana
tertulis di buku Operating
System Concept 5th Ed. halaman
294 adalah sebagai berikut:
1. Cek tabel internal
yang dilengkapi dengan PCB untuk menentukan valid atau tidaknya bit.
2. Apabila tidak valid,
program akan di-terminate (interupsi
oleh illegal
address trap).
3. Memilih frame kosong
(free-frame), misal dari free-frame
list. Jika tidak ditemui ada frame yang
kosong, maka dilakukan swap-out dari
memori. Frame mana
yang harus di-swap-out akan
ditentukan oleh algoritma (lihat sub bab Page
Replacement).
4. Menjadualkan operasi
disk untuk membaca page yang
diinginkan ke frame yang
baru dialokasikan.
5. Ketika pembacaan
komplit, tabel internal akan dimodifikasi dan page diidentifikasi
ada di memori.
6. Mengulang instruksi
yang tadi telah sempat diinterupsi. Jika tadi page
fault terjadi
saat instruksi di-fetch, maka akan dilakukan fecthing lagi.
Jika terjadi saat operan sedang di-fetch, maka harus dilakukan fetch ulang, decode, dan fetch operan
lagi.
Permasalahan Lain yang berhubungan
dengan Demand Paging
Sebagaimana
dilihat di atas, bahwa ternyata penanganan page
fault menimbulkan
masalah-masalah baru pada proses restart
instruction yang
berhubungan dengan arsitektur komputer.Masalah yang terjadi, antara lain mencakup:
1. Bagaimana mengulang
instruksi yang memiliki beberapa lokasi yang berbeda?
2. Bagaimana
pengalamatan dengan menggunakan special-addresing
mode, termasuk autoincrement dan autodecrement
mode?
3. Bagaimana jika
instruksi yang dieksekusi panjang (contoh: block
move)?
Masalah
pertama dapat diatasi dengan dua cara yang berbeda.
·
komputasi microcode dan
berusaha untuk mengakses kedua ujung dari blok, agar tidak ada modifikasi page yang
sempat terjadi.
·
memanfaatkan register sementara (temporary register ) untuk
menyimpan nilai yang sempat tertimpa/ termodifikasi oleh nilai lain.
Masalah
kedua diatasi dengan menciptakan suatu special-status
register baru
yang berfungsi menyimpan nomor register dan banyak perubahan yang terjadi
sepanjang eksekusi instruksi.Sedangkan masalah ketiga diatasi dengan mengeset bit FPD (first phase done) sehingga restart instruction tidak akan dimulai dari awal program, melainkan dari tempat program terakhir dieksekusi.
Persyaratan Perangkat Keras
Pemberian
nomor halaman melibatkan dukungan perangkat keras, sehingga ada persyaratan
perangkat keras yang harus dipenuhi. Perangkat-perangkat keras tersebut sama
dengan yang digunakan untuk paging dan swapping,
yaitu:
·
Page-table,
menandai bit valid-tidak valid.
·
Secondary memory,
tempat menyimpan page yang
tidak ada di memori utama.
Lebih
lanjut, sebagai konsekuensi dari persyaratan ini, akan diperlukan pula
perangkat lunak yang dapat mendukung terciptanya pemberian nomor halaman.
Pemindahan Halaman
Pada
dasarnya, kesalahan halaman (page fault) sudah tidak lagi menjadi
masalah yang terlalu dianggap serius. Hal ini disebabkan karena masing-masing
halaman pasti akan mengalami paling tidak satu kali kesalahan dalam pemberian
halaman, yakni ketika halaman ini ditunjuk untuk pertama kalinya. Representasi
seperti ini sebenarnya tidaklah terlalu akurat. Berdasarkan pertimbangan
tersebut, sebenarnya proses-proses yang memiliki 10 halaman hanya akan
menggunakan setengah dari jumlah seluruh halaman yang dimilikinya. Kemudian demand
paging akan
menyimpan I/O yang dibutuhkan untuk mengisi 5 halaman yang belum pernah
digunakan. Kita juga dapat meningkatkan derajat multiprogramming dengan
menjalankan banyak proses sebanyak 2 kali.Jika kita meningkatkan derajat multiprogramming, itu sama artinya dengan melakukan over-allocating terhadap memori. Jika kita menjalankan 6 proses, dengan masing-masing mendapatkan 10 halaman, walau pun sebenarnya yang digunakan hanya 5 halaman, kita akan memiliki utilisasi CPU dan throughput yang lebih tinggi dengan 10 frame yang masih kosong.
Skema Dasar
Pemindahan
halaman mengambil pendekatan seperti berikut. Jika tidak ada frame yang
kosong, kita mencari frame yang
tidak sedang digunakan dan mengosongkannya. Kita dapat mengosongkan sebuah frame dengan
menuliskan isinya ke ruang pertukaran (swap
space), dan merubah tabel halaman (juga
tabel-tabel lainnya) untuk mengindikasikan bahwa halaman tesebut tidak akan
lama berada di memori. Sekarang kita dapat menggunakan frame yang
kosong sebagai penyimpan halaman dari proses yang salah. Rutinitas pemindahan
halaman:
1. Cari lokasi dari
halaman yang diinginkan pada disk
2. Cari frame kosong:
a. Jika ada frame kosong,
gunakan.
b. Jika tidak ada frame kosong,
gunakan algoritma pemindahan halaman untuk menyeleksi frame yang
akan digunakan.
c. Tulis halaman yang
telah dipilih ke disk, ubah tabel halaman dan tabel frame.
3. Baca halaman yang
diinginkan kedalam frame kosong
yang baru, ubah tabel halaman dan tabel frame.
4. Ulang dari awal
proses pengguna.
Jika
tidak ada frame yang
kosong, pentransferan dua halaman (satu masuk, satu keluar) akan dilakukan.
Situasi ini secara efektif akan menggandakan waktu pelayanan kesalahan halaman
dan meningkatkan waktu akses efektif. Kita dapat mengurangi pemborosan ini
dengan menggunakan bit tambahan. Masing- masing halaman atau frame mungkin
memiliki bit tambahan yang diasosiasikan didalam perangkat keras.Pemindahan halaman merupakan dasar dari demand paging. Yang menjembatani pemisahan antara memori lojik dan memori fisik. Dengan mekanisme seperti ini, memori virtual yang sangat besar dapat disediakan untuk programmer dalam bentuk memori fisik yang lebih kecil. Dengan nondemand paging, alamat dari userdipetakan kedalam alamat fisik, jadi 2 set alamat dapat berbeda. Seluruh halaman dari proses masih harus berada di memori fisik. Dengan demand paging, ukuran dari ruang alamat logika sudah tidak dibatasi oleh memori fisik.
Ada beberapa algoritma pemindahan halaman yang berbeda. Kemungkinan setiap Sistem Operasi memiliki skema pemindahan yang unik. Algoritma pemindahan yang baik adalah yang memiliki tingkat kesalahan halaman terendah.
Kita mengevaluasi algoritma dengan menjalankannya dalam string khusus di memori acuan dan menghitung jumlah kesalahan halaman. String dari memori acuan disebut string acuan (reference string).
Sebagai contoh, jika kita memeriksa proses khusus, kita mungkin akan mencatat urutan alamat seperti dibawah ini:
0100, 0432, 0101, 0612, 0102, 0103, 0104, 0101, 0611, 0102, 0103, 0104, 0101, 0610, 0102, 0103, 0104, 0101, 0609, 0102, 0105,
dimana pada 100 bytes setiap halaman, diturunkan menjadi string acuan seperti berikut:
1, 4, 1, 6, 1, 6, 1, 6, 1, 6, 1
Perlu diperhatikan bahwa selama jumlah frame meningkat, jumlah kesalahan halaman menurun. Penambahan memori fisik akan meningkatkan jumlah frame.
Pemindahan Halaman
Secara FIFO
Algoritma ini adalah algoritma paling
sederhana dalam hal pemindahan halaman. Algoritma pemindahan FIFO (First
In First Out) mengasosiasikan
waktu pada saat halaman dibawa kedalam memori dengan masing-masing halaman.
Pada saat halaman harus dipindahkan, halaman yang paling tua yang dipilih.
Sebagai contoh:Gambar 4-11. String Acuan: . . .
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 2 4 4 4 0 0 0 7 7 7
0 0 0 3 3 3 2 2 2 1 1 1 0 0
1 1 1 0 0 0 3 3 3 2 2 2 1
|
Dari contoh diatas, terdapat 15 kesalahan halaman. Algoritma FIFO mudah untuk dipahami dan diimplementasikan. Namun performance-nya tidak selalu bagus. Salah satu kekurangan dari algoritma FIFO adalah kemungkinan terjadinya anomali Beladi, dimana dalam beberapa kasus, tingkat kesalahan akan meningkat seiring dengan peningkatan jumlah frame yang dialokasikan.
Pemindahan Halaman
Secara Optimal
Salah satu akibat dari upaya mencegah
terjadinya anomali Beladi adalah algoritma pemindahan halaman secara optimal.
Algoritma ini memiliki tingkat kesalahan halaman terendah dibandingkan dengan
algoritma-algoritma lainnya. Algoritma ini tidak akan mengalami anomaly Belady.
Konsep utama dari algoritma ini adalah mengganti halaman yang tidak akan
digunakan untuk jangka waktu yang paling lama. Algoritma ini menjamin
kemungkinan tingkat kesalahan terendah untuk jumlahframe yang
tetap. Dari contoh diatas, terdapat 9 kesalahan halaman. Dengan hanya 9 kesalahan halaman, algoritma optimal jauh lebih baik daripada algoritma FIFO.
Perlu disayangkan, algoritma optimal susah untuk diimplementasikan kedalam program, karena algoritma ini menuntut pengetahuan tentang string acuan yang akan muncul.
Pemindahan Halaman
Secara LRU
Jika
algoritma optimal sulit untuk dilakukan, mungkin kita dapat melakukan
pendekatan terhadap algoritma tersebut. Jika kita menggunakan waktu yang baru
berlalu sebagai pendekatan terhadap waktu yang akan datang, kita akan
memindahkan halaman yang sudah lama tidak digunakan dalam jangka waktu yang
terlama. Pendekatan ini disebut algoritma LRU (Least
Recently Used).Algoritma LRU mengasosiasikan dengan masing-masing halaman waktu dari halaman yang terakhir digunakan. Ketika halaman harus dipindahkan, LRU memilih halaman yang paling lama tidak digunakan pada waktu yang lalu. Inilah algoritma LRU, melihat waktu yang telah lalu, bukan waktu yang akan datang. Sebagai contoh:
Gambar 4-13. String Acuan: . . .
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 4 4 4 0 1 1 1
0 0 0 0 0 0 3 3 3 0 0
1 1 3 3 2 2 2 2 2 7
|
Dari contoh diatas, terdapat 12 kesalahan halaman. Meski pun algoritma ini menghasilkan 12 kesalahan halaman, algoritma ini masih lebih baik daripada algoritma FIFO, yang menghasilkan 15 kesalahan halaman. Untuk mengimplementasikan algoritma LRU, terdapat 2 implementasi yang dapat digunakan, yaitu dengan counterdan stack.
Selain algoritma optimal, algoritma LRU juga dapat terhindar dari anomali Beladi. Salah satu kelas dari algoritma pemindahan halaman adalah algoritma stack, yang juga tidak akan pernah mengalami anomali Beladi. Algoritma stack ini menyimpan nomor-nomor halaman pada stack. Kapan pun suatu halaman ditunjuk, halaman ini dikeluarkan dari stack dan diletakkan di blok paling atas dari stack. Dengan cara seperti ini, blok paling atas dari stack selalu berisi halaman yang baru digunakan, sedangkan blok terbawah dari stack selalu berisi halaman yang sudah lama tidak digunakan. Karena suatu halaman dalam stack dapat dikeluarkan meski pun berada ditengah-tengah stack, maka implementasi terbaik untuk algoritma ini adalah dengan daftar mata rantai ganda (doubly linked list), dengan kepala dan ekor sebagai penunjuk. Pendekatan ini sangat tepat untuk perangkat lunak atau implementasi kode mikro dari algoritma LRU. Sebagai contoh:
Gambar 4-14. String Acuan: . . .
4 7 0 7 1 0 1 2 1 2 7 1 2
4 7 0 7 1 0 1 2 1 2 7 1 2
4 7 0 7 1 0 1 2 1 2 7 1
4 4 0 7 7 0 0 0 1 2 7
4 4 4 7 7 7 0 0 0
4 4 4 4 4 4
|
Pemindahan Halaman
Secara Perkiraan LRU
Hanya
sedikit sistem komputer yang menyediakan perangkat lunak yang memberikan cukup
dukungan terhadap algoritma pemindahan halaman secara LRU. Banyak sistem yang
tidak menyediakan perangkat lunak yang memberikan dukungan terhadap algoritma
LRU, sehingga terpaksa menggunakan algoritma lain, seperti FIFO. Banyak sistem
menyediakan bantuan untuk menangani masalah ini, misalnya dengan bit acuan. Bit
acuan untuk halaman diset oleh perangkat lunak kapan pun halaman tersebut
ditunjuk. Bit acuan diasosiasikan dengan masing-masing isi dari tabel halaman.Awalnya, seluruh bit dikosongkan oleh sistem operasi. Selama proses pengguna dijalankan, bit yang diasosiasikan ke masing-masing halaman acuan diset menjadi 1 oleh perangkat keras. Setelah beberapa waktu, kita dapat menentukan halaman mana yang sudah digunakan dan halaman mana yang belum digunakan dengan menguji bit-bit acuan. Informasi tersebut memberikan informasi penting untuk banyak algoritma pemindahan halaman yang memperkirakan halaman mana yang sudah lama tidak digunakan.
Algoritma Additional-Reference-Bit
Kita
bisa mendapatkan informasi tambahan mengenai urutan dengan mencatat bit-bit
acuan pada suatu interval yang tetap. Kita dapat menyimpan 8-bit byte untuk
masing-masing halaman pada tabel di memori. Pada interval tertentu, pencatat
waktu (timer) melakukan interupsi dengan mentransfer kontrol kepada
sistem operasi. Sistem operasi mengubah bit acuan untuk masing-masing halaman
kedalam bit high-order dari
8-bit byte ini dan membuang bit low-order.
Register pengganti 8-bit ini berisi sejarah penggunaan halaman dalam periode 8
waktu terakhir.Sebagai contoh, seandainya register pengganti berisi 00000000, maka itu berarti halaman sudah tidak digunakan dalam periode 8 waktu terakhir, halaman yang digunakan paling tidak 1 kali akan memiliki nilai register penggati 11111111.
Algoritma Second-Chance
Algoritma
"second-chance" didasari oleh algoritma FIFO. Pada saat suatu
halaman ditunjuk, kita akan menginspeksi bit acuannya. Jika bit acuan tersebut
bernilai 0, kita memproses untuk membuang halaman ini. Jika bit acuan tersebut
bernilai 1, kita berikan kesempatan kedua untuk halaman ini dan menyeleksi
halaman FIFO selanjutnya.Ketika suatu halaman mendapatkan kesempatan kedua, bit acuannya dikosongkan dan waktu tibanya direset menjadi saat ini. Karena itu, halaman yang mendapatkan kesempatan kedua tidak akan dipindahkan sampai seluruh halaman dipindahkan. Tambahan lagi, jika halaman yang digunakan cukup untuk menampung 1 set bit acuan, maka halaman ini tidak akan pernah dipindahkan.
Algoritma Second-Chance (Yang Diperbaiki)
Kita
dapat memperbaiki kekurangan dari algoritma second-chance dengan
mempertimbangkan 2 hal sekaligus, yaitu bit acuan dan bit modifikasi. Dengan 2
bit ini, kita akan mendapatkan 4 kemungkinan yang akan terjadi, yaitu:
·
(0,0) tidak digunakan dan tidak dimodifikasi, bit terbaik
untuk dipindahkan.
·
(0,1) tidak digunakan tapi dimodifikasi, tidak terlalu baik
untuk dipindahkan karena halaman ini perlu ditulis sebelum dipindahkan.
·
(1,0) digunakan tapi tidak dimodifikasi, terdapat
kemungkinan halaman ini akan segera digunakan lagi.
·
(1,1) digunakan dan dimodifikasi, halaman ini mungkin akan
segera digunakan lagi dan halaman ini perlu ditulis ke disk sebelum
dipindahkan.
Algoritma
ini digunakan dalam skema manajemen memori virtual Macintosh.
Dasar Perhitungan
Pemindahan Halaman
Banyak algoritma-algoritma lain yang dapat
digunakan untuk pemindahan halaman. Sebagai contoh, kita dapat menyimpan counter dari
nomor acuan yang sudah dibuat untuk masing-masing halaman, dan mengembangkan 2
skema dibawah ini:ALGORITMA PEMINDAHAN HALAMAN LFU Algoritma LFU (Least Frequently Used) menginginkan halaman dengan nilai terkecil untuk dipindahkan. Alasannya, halaman yang digunakan secara aktif akan memiliki nilai acuan yang besar.
ALGORITMA PEMINDAHAN HALAMAN MFU Algoritma MFU (Most Frequently Used) didasarkan pada argumen yang menyatakan bahwa halaman dengan nilai terkecil mungkin baru saja dimasukkan dan baru digunakan.
Kedua algoritma diatas tidaklah terlalu umum, hal ini disebabkan karena implementasi dari kedua algoritma diatas sangatlah mahal.
Algoritma Page-Buffering
Prosedur lain sering digunakan untuk
menambah kekhususan dari algoritma pemindahan halaman. Sebagai contoh, pada
umumnya sistem menyimpan pool dari frameyang
kosong. Prosedur ini memungkinkan suatu proses mengulang dari awal secepat
mungkin, tanpa perlu menunggu halaman yang akan dipindahkan untuk ditulis kedisk karena frame-nya
telah ditambahkan kedalam pool frame kosong.Teknik seperti ini digunakan dalam sistem VAX/ VMS, dengan algoritma FIFO. Ketika algoritma FIFO melakukan kesalahan dengan memindahkan halaman yang masih digunakan secara aktif, halaman tersebut akan dengan cepat diambil kembali dari penyangga frame-kosong, untuk melakukan hal tersebut tidak ada I/O yang dibutuhkan. Metode ini diperlukan oleh VAX karena versi terbaru dari VAX tidak mengimplementasikan bit acuan secara tepat.
Alokasi Frame
Terdapat
masalah dalam alokasi frame dalam
penggunaan memori virtual, masalahnya yaitu bagaimana kita membagi memori yang
bebas kepada berbagai proses yang sedang dikerjakan? Jika ada sejumlah frame
bebas dan ada dua proses, berapakah frame yang
didapatkan tiap proses?Kasus paling mudah dari memori virtual adalah sistem satu pemakai. Misalkan sebuah sistem mempunyai memori 128K dengan ukuran halaman 1K, sehingga ada 128 frame. Sistem operasinya menggunakan 35K sehingga ada 93 frame yang tersisa untuk proses tiap user. Untuk pure demand paging, ke-93 frame tersebut akan ditaruh pada daftar frame bebas. Ketika sebuah proses user mulai dijalankan, akan terjadi sederetan page fault. Sebanyak 93 page fault pertama akan mendapatkanframe dari daftar frame bebas. Saat frame bebas sudah habis, sebuah algoritma pergantian halaman akan digunakan untuk memilih salah satu dari 93 halaman di memori yang diganti dengan yang ke 94, dan seterusnya. Ketika proses selesai atau diterminasi, sembilan puluh tiga frame tersebut akan disimpan lagi pada daftarframe bebas.
Terdapat macam-macam variasi untuk strategi sederhana ini, kita bisa meminta sistem operasi untuk mengalokasikan seluruh buffer dan ruang tabel-nya dari daftarframe bebas. Saat ruang ini tidak digunakan oleh sistem operasi, ruang ini bisa digunakan untuk mendukung paging dari user. Kita juga dapat menyimpan tiga framebebas yang dari daftar frame bebas, sehingga ketika terjadi page fault, ada frame bebas yang dapat digunakan untuk paging. Saat pertukaran halaman terjadi, penggantinya dapat dipilih, kemudian ditulis ke disk, sementara proses user tetap berjalan.
Variasi lain juga ada, tetapi ide dasarnya tetap yaitu proses pengguna diberikan frame bebas yang mana saja. Masalah lain muncul ketika demand pagingdikombinasikan dengan multiprogramming. Hal ini terjadi karena multiprogramming menaruh dua (atau lebih) proses di memori pada waktu yang bersamaan.
Jumlah Frame Minimum
Jumlah minimum frame ditentukan
oleh arsitektur komputer. Sebagai contoh, instruksi move pada
PDP-11 adalah lebih dari satu kata untuk beberapa modus pengalamatan, sehingga
instruksi tersebut bisa membutuhkan dua halaman. Sebagai tambahan, tiap
operannya mungkin merujuk tidak langsung, sehingga total ada enam frame. Kasus
terburuk untuk IBM 370 adalah instruksi MVC. Karena instruksi tersebut adalah
instruksi perpindahan dari penyimpanan ke penyimpanan, instruksi ini butuh 6
bit dan dapat memakai dua halaman. Satu blok karakter yang akan dipindahkan dan
daerah tujuan perpindahan juga dapat memakai dua halaman, sehingga situasi ini
membutuhkan enam frame.Kesimpulannya, jumlah minimum frame yang dibutuhkan per proses tergantung dari arsitektur komputer tersebut, sementara jumlah maksimumnya ditentukan oleh jumlah memori fisik yang tersedia. Di antara kedua jumlah tersebut, kita punya pilihan yang besar untuk alokasi frame.
Algoritma Alokasi
Cara
termudah untuk membagi m frame terhadap
n proses adalah untuk memberikan bagian yang sama, sebanyak m/n frame untuk
tiap proses. Sebagai contoh ada 93 frame tersisa
dan 5 proses, maka tiap proses akanmendapatkan 18 frame. Frame
yang tersisa, sebanyak 3 buah dapat digunakan sebagai frame bebas
cadangan. Strategi ini disebut equal
allocation.Sebuah alternatif yaitu pengertian bahwa berbagai proses akan membutuhkan jumlah memori yang berbeda. Jika ada sebuah proses sebesar 10K dan sebuah proses basis data 127K dan hanya kedua proses ini yang berjalan pada sistem, maka ketika ada 62 frame bebas, tidak masuk akal jika kita memberikan masing-masing proses 31 frame. Proses pertama hanya butuh 10 frame, 21 frame lain akan terbuang percuma.
Untuk menyelesaikan masalah ini, kita menggunakan proportional allocation. Kita mengalokasikan memori yang tersedia kepada setiap proses tergantung pada ukurannya.
Let the size of the virtual memory for process pi be si, and define S = si.
Lalu, jika jumlah total dari frame yang tersedia adalah m, kita mengalokasikan proses ai ke proses pi, dimana ai mendekati
ai = si / S x m
Dalam kedua strategi ini, tentu saja, alokasi untuk setiap proses bisa bervariasi berdasarkan multiprogramming level-nya. Jika multiprogramming level-nya meningkat, setiap proses akan kehilangan beberapa frame guna menyediakan memori yang dibutuhkan untuk proses yang baru. Di sisi lain, jika multiprogramming level-nya menurun, frame yang sudah dialokasikan pada bagian process sekarang bisa disebar ke proses-proses yang masih tersisa.
Mengingat hal itu, dengan equal atau pun proportional allocation, proses yang berprioritas tinggi diperlakukan sama dengan proses yang berprioritas rendah. Berdasarkan definisi tersebut, bagaimanapun juga, kita ingin memberi memori yang lebih pada proses yang berprioritas tinggi untuk mempercepat eksekusi-nya, to the detriment of low-priority processes.
Satu pendekatan adalah menggunakan proportional allocation scheme dimana perbandingan frame-nya tidak tergantung pada ukuran relatif dari proses, melainkan lebih pada prioritas proses, atau tergantung kombinasi dari ukuran dan prioritas.
Alokasi Global lawan
Local
Faktor penting lain dalam cara-cara
pengalokasian frame ke
berbagai proses adalah penggantian halaman. Dengan proses-proses yang bersaing
mendapatkan frame, kita
dapat mengklasifikasikan algoritma penggantian halaman kedalam dua kategori broad:
Penggantian Global dan Penggantian Lokal. Penggantian Global memperbolehkan
sebuah proses untuk menyeleksi sebuah frame pengganti
dari himpunan semua frame, meski
pun frame tersebut
sedang dialokasikan untuk beberapa proses lain; satu proses dapat mengambil
sebuah frame dari
proses yang lain. Penggantian Lokal mensyaratkan bahwa setiap proses boleh
menyeleksi hanya dari himpunan frame yang
telah teralokasi pada proses itu sendiri.
Thrashing
Jika
suatu proses tidak memiliki frame yang
cukup, walau pun kita memiliki kemungkinan untuk mengurangi banyaknya frame yang
dialokasikan menjadi minimum, tetap ada halaman dalam jumlah besar yang
memiliki kondisi aktif menggunakannya. Maka hal ini akan mengakibatkan
kesalahan halaman. Pada kasus ini, kita harus mengganti beberapa halaman menjadi
halaman yang dibutuhkan walau pun halaman yang diganti pada waktu dekat akan
dibutuhkan lagi. Hal ini mengakibatkan kesalahan terus menerus.Aktivitas yang tinggi dari paging disebut thrashing. Suatu proses dikatakan thrashing jika proses menghabiskan waktu lebih banyak untuk paging daripada eksekusi (proses sibuk untuk melakukan swap-in swap-out).
Penyebab Thrashing
Penyebab
dari thrashing adalah
utilisasi CPU yang rendah. Jika utilisasi CPU terlalu rendah, kita menambahkan
derajat dari multiprogramming dengan
menambahkan proses baru ke sistem.Sejalan dengan bertambahnya derajat dari multiprogramming, utilisasi CPU juga bertambah dengan lebih lambat sampai maksimumnya dicapai. Jika derajat darimultiprogramming ditambah terus menerus, utilisasi CPU akan berkurang dengan drastis dan terjadi thrashing. Untuk menambah utilisasi CPU dan menghentikanthrashing, kita harus mengurangi derajat dari multiprogramming.
Gambar 4-15. Derajat dari Multiprogramming.
Kita dapat membatasi efek dari thrashing dengan menggunakan algoritma penggantian lokal atau prioritas. Dengan penggantian lokal, jika satu proses mulai thrashing, proses tersebut tidak dapat mencuri frame dari proses yang lain dan menyebabkan proses tersebut tidak langsung mengalami thrashing. Jika proses thrashing, proses tersebut akan berada di antrian untuk melakukan paging yang mana hal ini memakan banyak waktu. Rata-rata waktu layanan untuk kesalahan halaman akan bertambah seiring dengan makin panjangnya rata-rata antrian untuk melakukan paging. Maka, waktu akses efektif akan bertambah walau pun untuk suatu proses yang tidak thrashing.
Untuk menghindari thrashing, kita harus menyediakan sebanyak mungkin frame sesuai dengan kebutuhan suatu proses. Cara untuk mengetahui berapa frame yang dibutuhkan salah satunya adalah dengan strategi Working Set yang akan dibahas pada bagian 10.5.2 yang mana strategi tersebut dimulai dengan melihat berapa banyak frame yang sesungguhnya digunakan oleh suatu proses. Ini merupakan model lokalitas dari suatu eksekusi proses.
Selama suatu proses dieksekusi, model lokalitas berpindah dari satu lokalitas ke lokalitas lainnya. Lokalitas adalah kumpulan halaman yang secara aktif digunakan bersama. Suatu program pada umumnya dibuat pada beberapa lokalitas, sehingga ada kemungkinan dapat terjadi overlap. Thrashing dapat muncul bila ukuran lokalitas lebih besar dari ukuran memori total.
Model Working
Set
Model Working
Set didasarkan
pada asumsi lokalitas. Model ini menggunakan parameter (delta)
untuk mendefinisikan jendela Working
Set. Idenya adalah untuk menentukan halaman
yang dituju yang paling sering muncul. Kumpulan dari halaman dengan halaman
yang dituju yang paling sering muncul disebut Working
Set. Working
Set adalah
pendekatan dari program lokalitas.Contoh 4-1. Tabel Halaman
Jika terdapat tabel halaman yang dituju dengan
isinya
1 3 5 7 2 5 8 9 dengan
= 8,
Working Set pada waktu t1 adalah
{1, 2, 3, 5, 7, 8, 9}
|
·
Jika terlalu
kecil, tidak akan dapat mewakilkan keseluruhan dari lokalitas.
·
Jika terlalu
besar, akan menyebabkan overlap beberapa
lokalitas.
·
Jika tidak
terbatas, Working
Set adalah
kumpulan halaman sepanjang eksekusi proses.
Jika
kita menghitung ukuran dari Working
Set, WWSi, untuk setiap proses pada sistem,
kita hitung dengan D = WSSi,
dimana D merupakan total demand untukframe.Jika total demand lebih dari total banyaknya frame yang tersedia (D > m), thrashing dapat terjadi karena beberapa proses akan tidak memiliki frame yang cukup. Jika hal tersebut terjadi, dilakukan satu pengeblokan dari proses-proses yang sedang berjalan.
Strategi Working Set menangani thrashing dengan tetap mempertahankan derajat dari multiprogramming setinggi mungkin.
Kesulitan dari model Working Set ini adalah menjaga track dari Working Set. Jendela Working Set adalah jendela yang bergerak. Suatu halaman berada padaWorking Set jika halaman tersebut mengacu ke mana pun pada jendela Working Set. Kita dapat mendekati model Working Set dengan fixed interval timer interruptdan reference bit.
Contoh: = 10000 reference, Timer interrupt setiap 5000 reference.
Ketika kita mendapat interrupt, kita kopi dan hapus nilai reference bit dari setiap halaman. Jika kesalahan halaman muncul, kita dapat menentukan current referencebit dan 2 pada bit memori untuk memutuskan apakah halaman itu digunakan dengan 10000 ke 15000 reference terakhir.
Jika digunakan, paling sedikit satu dari bit-bit ini akan aktif. Jika tidak digunakan, bit ini akan menjadi tidak aktif.
Halaman yang memiliki paling sedikit 1 bit aktif, akan berada di working-set.
Hal ini tidaklah sepenuhnya akurat karena kita tidak dapat memberitahukan dimana pada interval 5000 tersebut, reference muncul. Kita dapat mengurangi ketidakpastian dengan menambahkan sejarah bit kita dan frekuensi dari interrupt.
Contoh: 20 bit dan interrupt setiap 1500 reference.
- Avi
Silberschatz, Peter Galvin, dan Greg Gagne, 2002, Applied
Operationg System Concepts, 1st Ed., John Wiley & Sons, Inc.
- William
Stallings, 2001, Operating Systems -- Fourth Edition, Prentice
Hall.
- R.M.
Samik-Ibrahim, 2001, Soal Mid Test 2001, Fakultas Ilmu Komputer,
Universitas Indonesia.
- http://www.cs.ui.ac.id/kuliah/IKI20230/materi/week4/Proses.PDF
- http://www.cs.ui.ac.id/kuliah/IKI20230/materi/week4/CPU-Scheduler.PDF
- http://www.cs.nyu.edu/courses/spring02/v22.0202-002/lecture-03.html
- http://www.risc.uni-linz.ac.at/people/schreine/papers/idimt97/multithread.gif
- http://www.unet.univie.ac.at/aix/aixprggd/genprogc/figures/genpr68.jpg
- http://www.unet.univie.ac.at/aix/aixprggd/genprogc/understanding_threads.htm
- http://www.etnus.com/Support/docs/rel5/html/cli_guide/images/procs_n_threads8a.gif
- http://www.etnus.com/Support/docs/rel5/html/cli_guide/procs_n_threads5.html
- http://www.crackinguniversity2000.it/boooks/1575211025/ch6.htm
- http://lass.cs.umass.edu/~shenoy/courses/fall01/labs/talab2.html
- http://www.isbiel.ch/~myf/opsys1/Exercises/Chap4/Problems1.html
- http://www.cs.wisc.edu/~cao/cs537/midterm-answers1.txt
Categories:
Education
,
Sistem Operasi