Kamis, 08 Januari 2009

SISTEM OPERASI

Alhamdulillah bulan januari ni bisa posting lagi. Kali ini kita akan mempelajari SISTEM OPERASI.

Sebuah proses adalah suatu program yang sedang dieksekusi. Proses lebih dari sebuah kode program tetapi juga mencakup program counter, stack, dan sebuah data section. Dalam pengeksekusiannya sebuah proses juga memiliki status yang mencerminkan keadaan dari proses tersebut. Status dari proses dapat berubah-ubah setiap saat sesuai dengan kondisinya. Status tersebut mungkin menjadi satu dari lima status berikut: new, ready, running, waiting, atau terminated. Setiap proses juga direpresentasikan oleh Proces Control Block (PCB) yang menyimpan segala informasi yang berkaitan dengan proses tersebut.
Thread adalah sebuah alur kontrol dari sebuah proses. Suatu proses yang multithreaded mengandung beberapa perbedaan alur kontrol dengan ruang alamat yang sama. Keuntungan dari multithreaded meliputi peningkatan respon dari pengguna, pembagian sumber daya proses,ekonomis, dan kemampuan untuk mengambil keuntungan dari arsitektur multiprosesor. Thread tingkat pengguna adalah thread yang tampak oleh programer dan tidak diketahui oleh kernel. Thread tingkat pengguna secara tipikal dikelola oleh sebuah pustaka thread di ruang pengguna. Thread tingkat kernel didukung dan dikelola oleh kernel sistem operasi. Secara umum, thread tingkat
pengguna lebih cepat dalam pembuatan dan pengelolaan dari pada kernel thread.
Ada tiga perbedaan tipe dari model yang berhubungan dengan pengguna dan kernel thread yaitu One-to One model, Many-to-One model, Many-to-Many model.
• Model Many-to-One: memetakan beberapa pengguna level thread hanya ke satu buah kernel thread.
• Model One-to-One: memetakan setiap thread pengguna ke dalam satu kernel thread berakhir.
• Model Many-to-Many: mengizinkan pengembang untuk membuat thread pengguna sebanyak mungkin, konkurensi tidak dapat tercapai karena hanya satu thread yang dapat dijadwalkan oleh kernel dalam satu waktu
Thread cancellation adalah tugas untuk memberhentikan thread sebelum ia menyelesaikan tugasnya. Thread yang akan diberhentikan disebut target thread Pemberhentian target thread dapat terjadi melalui dua cara yang berbeda:
• Asynchronous cancellation: suatu thread seketika itu juga memberhentikan target thread.
• Deffered cancellation: target thread secara periodik memeriksa apakah dia harus berhenti, cara ini memperbolehkan target thread untuk memberhentikan dirinya sendiri secara terurut.
Thread Pools adalah cara kerja dengan membuat beberapa thread pada proses startup dan menempatkan mereka ke pools.
Keuntungan Thread Pools
• Biasanya lebih cepat untuk melayani permintaan dengan thread yang ada dibanding dengan menunggu thread baru dibuat.
• Thread pool membatasi jumlah thread yang ada pada suatu waktu. Hal ini penting pada system yang tidak dapat mendukung banyak thread yang berjalan secara concurrent
Thread di Linux dianggap sebagai task. System call yang dipakai antara lain fork dan clone.
Perbedaan antara keduanya adalah clone selain dapat membuat duplikat dari proses induknya seperti fork, juga dapat berbagi ruang alamat yang sama antara proses induk dengan proses anak. Seberapa besar kedua proses tersebut dapat berbagi tergantung banyaknya flag yang ditandai. Java adalah unik karena telah mendukung thread didalam tingkatan bahasanya. Semua program Java sedikitnya terdiri dari kontrol sebuah thread tunggal dan mempermudah membuat control untuk multiple thread dengan program yang sama. JAVA juga menyediakan library berupa API untuk membuat thread, termasuk method untuk suspend dan resume suatu thread, agar thread tidur untuk jangka waktu tertentu dan menghentikan thread yang berjalan. Sebuah java thread juga mempunyai empat kemungkinan keadaan, diantaranya: New, Runnable, Blocked dan Dead.
Perbedaan API untuk mengelola thread seringkali mengganti keadaan thread itu sendiri.
Salah satu ciri yang membuat Java menjadi bahasa pemrograman yang ampuh adalah dukungannya terhadap pengembangan aplikasi multithread sebagai bagian yang terpadu dari bahasa. Java merupakan bahasa pemrograman yang pertama kali memiliki dukungan intrensif terhadap operasi-operasi thread didalam bahasanya. Thread di Java dapat dibuat melalui 2 cara, dengan meng-extends class thread atau dengan meng-implements Runnable interface. Siklus hidupnya dapat melewati 6 tahap, Born(baru dibuat), Ready(method start() dipanggil), Running(diproses), Blocked, Wait (method wait() dipanggil, sampai menunggu notify() atau ntotifyAll()), Sleep ( sleep selama milisecond yang ditentukan), dan Dead(diterminasi). Untuk beberapa kemudahan dan alasan keamanan. Beberapa thread dapat digabungkan kedalam sebuah ThreadGroup. Dalam ThreadGroup yang sama sebuah thread dapat memanipulasi thread lain dalam Group tersebut. Thread-thread dalam ThreadGroup tersebut dapat dimanage dengan mudah.
Untuk menterminasi thread, terdapat berbagai cara, antara lain dengan memanggil Thread.interrupt(), Thread.stop(), dan Thread.destroy(). Jika sebuah thread di interrupt, maka seharusnya thread tersebut melepas segala sumberdaya yang dimilikinya. Kedua cara lainnya tidak aman digunakan karena berpotensi menyebabkan deadlock.

Konsep Penjadwalan
Sebuah proses, ketika sedang tidak dieksekusi, ditempatkan pada antrian yang sama. Disini ada dua
kelas besar dari antrian dalam sebuah sistem operasi: permintaan antrian M/K dan ready queue.
Ready queue memuat semua proses yang siap untuk dieksekusi dan yang sedang menunggu untuk
dijalankan pada CPU. PCB dapat digunakan untuk mencatat sebuah ready queue. Penjadwalan
Long-term adalah pilihan dari proses-proses untuk diberi izin menjalankan CPU. Normalnya,
penjadwalan long-term memiliki pengaruh yang sangat besar bagi penempatan sumber daya,
terutama manajemen memori. Penjadwalan short-term adalah pilihan dari satu proses dari ready
queue.
Sebuah proses, ketika sedang tidak dieksekusi, ditempatkan pada antrian yang sama. Disini ada dua
kelas besar dari antrian dalam sebuah sistem operasi: permintaan antrian M/K dan ready queue.
Ready queue memuat semua proses yang siap untuk dieksekusi dan yang sedang menunggu untuk
dijalankan pada CPU. PCB dapat digunakan untuk mencatat sebuah ready queue. Penjadwalan
Long-term adalah pilihan dari proses-proses untuk diberi izin menjalankan CPU. Normalnya,
penjadwalan long-term memiliki pengaruh yang sangat besar bagi penempatan sumber daya,
terutama manajemen memori. Penjadwalan short-term adalah pilihan dari satu proses dari ready
queue.

Penjadwalan CPU adalah pemilihan proses dari antrian ready untuk dapat dieksekusi. Penjadulan CPU merupakan konsep dari multiprogramming, dimana CPU digunakan secara bergantian untuk proses yang berbeda.suatu proses terdiri dari dua siklus yaitu M/K burst dan CPU burst yang dilakukan bergantian hingga proses selesai. Penjadulan CPU mungkin diajalankan ketika proses:
i. running -> waiting time.
ii. running -> ready state.
iii. waiting -> ready state.
iv. terminates.
Proses 1 dan 4 adalah proses non-preemptive, dimana proses tersebut tidak bisa di interrupt, seangkan 2 dan 3 adalah preemptive, dimana proses boleh di interrupt. Komponen yang lain dalam penjadwalan CPU adalah dispatcher, dispatcher adalah modul yang memberikan kendali CPU kepada proses.dalam menilai baik atau buruknya suatau algoritma penjadwalan kita bisa memakai beberapa kriteria, diantaranya CPU utilization, throughput, turnaround time,waiting time, dan response time. algoritma yang baik adalah yang mampu memaksimalkan CPU utilization dan throughput, dan mampu meminimalkan turnaroud time, waiting time, dan response time.
Waktu yang diperlukan oleh dispatcher untuk menghentikan suatu proses dan memulai proses yang lain disebut dengan dispatch latency.
Jika dalam suatu proses CPU Burst jauh lebih besar daripada M/K Burst maka disebut CPU Bound.
Demikian unutk sebaliknya disebut dengan M/K Bound.
ALgoritma Penjadwalan
Algoritma diperlukan untuk mengatur giliran proses-proses diready queue yang mengantri untuk
dialokasikan ke CPU. Terdapat berbagai macam algoritma,antara lain:
• First come first serve. Algoritma ini mendahulukan proses yang lebih dulu datang.
Kelemahannya,waiting time rata-rata cukup lama.
• Shortest job first. Algoritma ini mendahulukan proses dengan CPU burst terkecil yang akan
mengurangi waiting time rata-rata.
• Priority. Algoritma ini mendahulukan prioritas terbesar. Kelemahannya, prioritas kecil tidak
mendapat jatah CPU. Hal ini dapat diatasi dengan aging,yaitu semakin lama menunggu,prioritas
semakin tinggi.
• Round Robin. Algoritma ini menggilir proses-proses yang ada diantrian dengan jatah time
quantum yang sama. Jika waktu habis,CPU dialokasikan keproses selanjutnya.
• Multilevel Queue. Algoritma ini membagi beberapa antrian yang akan diberi prioritas
berdasarkan tingkatan. Tingkatan lebih tinggi menjadi prioritas utama.
• Multilevel Feedback Queue. Pada dasarnya sama dengan Multilevel Queue,bedanya pada algoritma ini diizinkan untuk pindah antrian.
Keenam algoritma penjadualan memiliki karakteristik beserta keunggulan dan kelemahannya
masing-masing. Namun, Multilevel Feedback Queue Scheduling sebagai algoritma yang paling
kompleks, adalah algoritma yang paling banyak digunakan saat ini
Telah dibahas mengenai penjadwalan prosesor jamak, penjadwalan waktu nyata, penjadwalan
thread, penjadwalan Java, serta evaluasi algoritma. Penjadwalan CPU pada prosesor jamak dibagi
menjadi dua, yaitu: proses jamak asimetris dan proses jamak simetris. Semua sistem operasi modern
mendukung proses jamak simetris, termasuk Windows XP, Windows 2000, Solaris, Linux, dan Mac
OS X.
Proses waktu nyata adalah proses yang memiliki batasan waktu. Ciri-ciri proses waktu nyata, yaitu:
deterministik, bersifat primitif, responsif, dan sulit berkolaborasi dengan virtual machine dan sistem
prosesor jamak. Sistem waktu nyata dapat dibagi dua, yaitu sistem Hard Real Time dan sistem Soft
Real Time .
Ada dua jenis thread, yaitu kernel thread dan user thread. Kernel thread dijadwalkan oleh sistem
operasi sedangkan user thread dijadwalkan oleh perpustakaan thread. Perpustakaan thread
menyediakan 3 jenis penjadwalan, yaitu: SCHED_FIFO, SCHED_RR, dan SCHED_OTHER.
Java mendukung konsep multithreading, dimana penjadwalan thread pada Java mengunakan konsep
Round-Robin dan FIFO.
Kriteria kinerja algoritma yang baik adalah:
i. Maksimalisasi utilisasi CPU dengan response time maksimal = 1 detik.
ii. Maksimalisasi throughput sehingga rata-rata turnaround time menjadi sebanding terhadap total
waktu eksekusi.
Ada empat metoda evaluasi untuk memenuhi kriteria tersebut, yaitu: permodelan deterministik,
model antrian, simulasi, dan implementasi
Sinkronisasi
Suatu proses yang bekerja bersama-sama dan saling berbagi data dapat mengakibatkan race condition atau pengaksesan data secara bersama-sama. Critical section adalah suatu segmen kode
dari proses-proses itu yang yang memungkinkan terjadinya critical section. Untuk mengatasi
masalah critical section ini, suatu data yang sedang diproses tidak boleh diganggu proses lain. Solusi
selengkapnya akan dibahas di bab selanjutnya.
Solusi dari critical section harus memenuhi tiga syarat, yaitu:
1. mutual exclusion
2. terjadi kemajuan (progress)
3. ada batas waktu tunggu (bounded waiting)
Solusi dari critical section dibagi menjadi dua jenis, yaitu solusi perangkat lunak dan solusi
perangkat keras. Solusi dengan perangkat lunak yaitu dengan menggunakan algoritma 1, algoritma 2
dan algoritma 3 seperti yang telah dijelaskan. Dari ketiga algoritma itu, hanya algoritma 3 yang
memenuhi ketiga syarat solusi critical section. Untuk menyelesaikan masalah critical section untuk
lebih dari dua proses, maka dapat digunakan algoritma tukang roti.
Hardware merupakan faktor pendukung yang sangat berperan dalam proses sinkronisasi. Banyak
dari para perancang prosesor yang membuat fasilitas atomic instruction dalam produknya. Ada 2
metode dalam sinkronisasi hardware, yaitu: Processor Synchronous dan Memory Synchronous.
Semafor merupakan konsep yang dibuat oleh Djikstra dengan mengandalkan sebuah variable integer
dan fasilitas atomic instruction dari prosesor. Semafor merupakan primitif dalam pembuatan alat
sinkronisasi yang lebih tinggi lagi. Semafor dapat menyelesaikan permasalahan seperti: Critical
section, sinkronisasi baris, counting semaphore, Dining philosopher, readers-writers, dan
producer-consumer. banyak dipakai oleh para programer, sebagai contoh dapat dilihat di
pemrograman Win32API. Tetapi ternyata Javatm tidak menggunakan semafor secara explisit namun
memakai konsep monitor yang dibangun dari semafor ini.
Banyak mesin yang menyediakan instruksi hardware istimewa yang tidak bisa di-Interrupt.
Instruksi-instruksi semacam ini dikenal dengan nama Instruksi Atomik.
Sebuah semafor S adalah sebuah variabel integer yang, selain saat inisiasi, hanya bisa diakses oleh
dua buah operasi atomik standar, wait dan signal.
Critical Region merupakan bagian kode yang selalu dilaksanakan dalam kondisi mutual eksklusif.
Perbedaannya adalah bahwa yang mengkondisikan mutual eksklusif adalah kompilator dan bukan
programer sehingga mengurangi resiko kesalahan programer. Monitor merupakan kumpulan dari
prosedur, variabel, dan struktur data dalam satu modul. Dengan mempergunakan monitor, sebuah
proses dapat memanggil prosedur di dalam monitor, tetapi tidak dapat mengakses struktur data
(termasuk variabel- variabel) internal dalam monitor. Dengan karakteristik demikian, monitor dapat
mengatasi manipulasi yang tidak sah terhadap variabel yang diakses bersama-sama karena variabel
lokal hanya dapat diakses oleh prosedur local
Deadlock
Sebenarnya deadlock dapat disebabkan oleh empat hal yaitu:
1. Proses Mutual Exclusion
2. Proses memegang dan menunggu
3. Proses Preemption
4. Proses Menunggu dengan siklus deadlock tertentu
Penanganan deadlock deadlock:
1. mengabaikan masalah deadlock.
2. mendeteksi dan memperbaiki
3. penghindaran yang terus menerus dan pengalokasian yang baik.
4. pencegahan yang secara struktur bertentangan dengan empat kondisi terjadinya deadlock.
Deadlock adalah suatu kondisi dimana sekumpulan proses tidak dapat berjalan kembali akibat kompetisi memperebutkan sumber daya.
Sebuah proses berada dalam keadaan deadlock apabila semua proses berada dalam keadaan menunggu (di dalam waiting queue) peristiwa yang hanya bisa dilakukan oleh proses yang berada dalam waiting queue tersebut.
Algoritma Bankir digunakan sebagai salah satu cara untuk menangani deadlock. Secara umum algoritma bankir mempunyai struktur data yaitu tersedia, alokasi, maksimum, dan kebutuhan. Apabila pada sebuah sistem tidak tersedia pencegahan ataupun penghindaran deadlock, kemungkinan besar deadlock dapat terjadi. Pada keadaan seperti ini, sistem harus menyediakan algoritma pendeteksian deadlock algoritma pemulihan deadlock.
Untuk mendeteksi deadlock dan menyelesaikannya dapat digunakan graf sebagai visualisasinya.
Jika tidak ada cycle, berarti tidak ada deadlock. Jika ada cycle, ada potensi terjadi deadlock.
Resource dengan satu instans dan cycle mengakibatkan deadlock
Memori adalah pusat kegiatan pada komputer karena setiap proses yang akan dijalankan harus
melalui memori terlebih dahulu. CPU mengambil instruksi dari memori sesuai dengan yang ada
pada program counter. Alamat-alamat yang dihasilkan oleh CPU merupakan alamat virtual (logic),
alamat-alamat ini akan dipetakan ke alamat-alamat fisik (alamat-alamat memori yang sebenarnya).
Pemetaan ini dapat dilakukan pada saat kompilasi, saat pemuatan (loading) atau saat eksekusi.
Adakalanya ukuran program yang akan dieksekusi melebihi ukuran memori, hal ini dapat diatasi
dengan menggunakan dynamic loading dan overlays. Overlays memungkinkan suatu program yang
mempunyai ukuran yang besar dapat dieksekusi oleh memori dengan kapasitas yang lebih kecil.
Penggunaan overlays ini dikarenakan pada masa lalu memori yang ada sangatlah kecil, sehingga
banyak program yang kapasitasnya jauh lebih besar daripada memori yang tersedia. Tetapi dewasa
ini overlays sudah tidak digunakan lagi karena sudah ada virtual memori yang memungkinkan
memori dapat mengeksekusi program manapun.


Tidak ada komentar:

Posting Komentar