Bismillahirrahmanirohim

Cari Blog Ini

Senin, 25 Juli 2011

Membuat Sub Domain CO.CC


Mungkin sudah banyak oran-orang yang mengetahui trick ini, sampai-sampai orang yang akan membacanya-pun enggan membaca Artikel tersebut, tapi, yang mereka ajarkan adalah menggunakan dnspark.net yang ada masa expired atau massa berlakunya, meskipun suangat lama, tapi, sewaktu-waktu kita pastinya akan merasa tidak nyaman bukan?

Nah, disini saya ingin memperlihatkan kepada anda bagaimana caranya membuat Sub-Domain langsung didalam Co.cc secara realive, gak percaya ? Simak Gan ( KasKus langue mode : On)

1. Masuk kedalam co.cc dengan Account anda masing-masing di https://www.co.cc/log_in_out/login.php


2. Setelah itu, anda akan disuguhkan dengan sebuah Form yang berisikan 4 alamat domain yang sudah anda buat ( Apabila anda berhasil Login ).


3. Pilih domain yang akan anda jadikan Sub-Domain, disini dan didalam contoh ini, saya akan memakai proxyesterday.co.cc
4. Klik Setup
5. Setelah itu, anda akan disuguhkan Form Setup


6. Klik zone record
7. Didalam Host, isikan apa yang ingin anda jadikan Sub domainnya, misalkan oom
8. Dan otomatis, domain yang akan keluar adalah oom.aktifiskaskus.co.cc
9. Didalam Value, isikan ghs.google.com


10. Klik Setup
11. Berhasil !!!!!

Lalu, apa yang harus kita lakukan selanjutnya?

Setup Sub-Domain didalam Platform kita sendiri, disini saya menggunakan blogspot.com

1. Login kedalam Account Platform anda ( Didalam contoh ini saya menggunakan Blogspot )
2. Setelah berhasil, masuk kedalam menu Pengaturan → Publikasikan dan disana yang harus anda pilih adalah Domain Ubah Suaian


3. Kemudian pilih Beralih ke pengaturan lanjut


4. Masukkan Sub Domain yang sudah anda masukkan dan Setup tadi, yaitu oom.aktifiskaskus.co.cc
5. Masukkan Capcay ( Verifikasi Kata )
6. Klik Simpan Setelan
7. Berhasil !!!!!!!


8. Kemudian klik Lihat Blog

Selamat, Sub-Domain oom.aktifiskaskus.co.cc berhasil dibuat !



  

Software Pencari Driver Otomatis


3DP

Saya sering sekali mendapatkan komentar untuk mencarikan Driver suatu hardware oleh pengunjung Maniac Download. Memang untuk mencari driver yang sesuai dengan hardware yang kita punya bisa dibilang susah - susah gampang.

Gampang memang kalau hardware yang kita punya terkenal atau memang banyak orang yang menggunakan hardware tersebut, atau driver yang anda butuhkan sudah tersedia di situs resminya, jadi anda tinggal download.
Tapi bagaimana kalau driver yang anda cari tidak ada yang cocok?



CD Driver yang anda dapatkan sudah hilang entah kemana, situs resmi dari hardware yang anda gunakan tidak menyediakan. Jika kasus anda seperti ini, pasti anda bisa di bilang sudah cape dan stres untuk mencarinya.

Tapi tenang dulu, saya punya solusinya.
Dengan software 3DP Chip ini, anda tidak usah bersusah payah untuk mencari - cari driver yang cocok untuk hardware anda. Yang anda perlukan hanya jalankan aplikasi ini tanpa perlu menginstalnya karena bersifat portable, lalu anda tinggal klik driver apa yang ingin anda download.


Screen Shot

Setelah anda klik, lalu sofware ini akan memberikan link download dari driver yang anda butuhkan. Anda bisa lihat pada gambar dibawah ini.

Driver

Anda tinggal download dech, gampang kan?
Tapi untuk memakai software ini pastikan dulu PC anda terkoneksi dengan internet.

Untuk mendownload 3D Chip V.9.12 ini silakan anda klik link download dibawah ini..
 
    Download Via Ziddu                                  Download Via 4Shared
 

Buku Tamu di Sidebar

Memasang sebuah buku tamu (shoutbox/guestbook) pada sebuah blog adalah hal yang cukup lumayan penting,karena buku tamu ini merupakan salah satu sarana untuk berinteraksi antara yang mpunya blog dengan para pengunjung blog. Dengan di pajangnya buku tamu di dalam blog, maka para pengunjung dapat mengungkapkan isi hatinya tentang blog yang anda buat, yang pasti isi dari sebuah buku tamu ini sangatlah bervariasi bisa merupakan pujian, pertanyaan, sekedar iseng, atau ada juga merupakan kritikan terhadap isi blog anda, dan justru dengan adanya variasi itulah membuat blog kita jadi hidup lebih hidu (kaya iklan aja).

Ok, terlalu lama intermezonya ya, sekarang kita kembali (ke lap...top) ke topikbahasan. Bagaimana caranya mendapatkan sebuah buku tamu. Untuk mendapatkannya sangat mudah, anda tinggal mencarinya pada mesin pencari semisal google ataupun yahoo, silahkan ketikan kata free shoutbox atau free guestbook pada search engine masing-masing situs, maka dalam beberapa detik saja akan muncul berpuluh-puluh situs penyedia buku tamu tadi, anda tinggal klik lalu coba lihat-lihat. Tapi untuk menghemat waktu pencarian anda, maka di sini saya akan langsung memberikan alamat situs penyedia buku tamu yang servernya lumayan bagus dan jarang sekali mengalami down yakni http://www.shoutmix.com. Untuk caranya silahkan anda ikuti langkah-langkah berikut ini :


  1. Seperti biasa anda harus daftar terlebih dahulu dengan cara mengklik tulisan Get One noe, free>>, ataupun dengan mengklik tulisan Sign Up, silahkan anda tulis data-data anda pada form yang telah di sediakan.
  2. Jika sudah tedaftar, dan di terima jadi anggota shoutmix, silahkan anda login dengan id anda
  3. Pada kolom yang berjudul Style, klik menu appearance.
  4. Silahkan klik menu pulldown di samping tulisan Load From Preset untuk mengatur tampilan buku tamu anda, silahkan pilih yang sesuai dengan keinginan anda. Jika sudah selesai klik Save Setting.
  5. Untuk mendapatkan kode HTML dari shoutbox anda, silahkan klik Use Shoutbox yang berada di bawah menu Quick Start
  6. Klik tulisan Place Shoutbox on web page. Isi lebar dan tinggi shoutbox yang di inginkan
  7. Copy seluruh kode HTML yang ada pada text area yang berada di bawah tulisan Generated Codes, lalu simpan di program Notepad anda
  8. Klik Log out yang berada di atas layar anda untuk keluar dari halaman shoutmix anda. Silahkan close situs tersebut.
  9. Selesai

Untuk menempatkan kode HTML shoutbox tadi pada blog anda, silahkan ikuti langkah-langkah berikut ini.
Untuk blogger dengan template klasik :
  1. Log in terlebih dahulu ke blogger.com dengan id anda
  2. Klik menu Template
  3. Klik Edit HTML
  4. Paste kode HTML shoutbox anda yang telah di copy pada notepad tadi di tempat yang anda inginkan
  5. Untuk jelasnya saya ambil contoh dengan shoubox milik saya, untuk menempatkannya tinggal klik Edit pada browser lalu pilih Find (on this page).. trus tuliskan kata buku tamu lalu klik find, maka kita akan langsung di bawa ke tulisan tersebut. Jika sudah ketemu tulisan tadi silahkan paste kode HTML shoutbox nya.
  6. Klik tombol Preview untuk melihat perubahan yang kita buat.
  7. Jika sudah cocok dengan perubahan tadi, klik Save Template Changes
  8. Selesai

Sedikit Clue, agar shoutbox anda sesuai dengan ukuran lebar sidebar , anda bisa merubah ukuran lebar ataupun tinggi dari shoutbox , caranya anda tinggal merubah angka Width (untuk lebar) dan Height (untuk tinggi) dari dalam kode HTML shoutbox tersebut.

Untuk Blogger baru :
  1. Silahkan Login dengan id anda
  2. Klik menu Layout
  3. Klik Page Element
  4. Klik Add a Page Element
  5. Klik tombol Add to Blog yang berada di bawah tulisan HTML/JavaScript
  6. Tuliskan judul shoutbox anda pada form title. Contoh : Buku tamu ku, atau my guestbook atau apa saja yang anda suka
  7. Copy paste kode HTML shoutbox anda di dalam form Content
  8. Klik tombol Save Changes
  9. Drag & Drop element yang telah anda buat tadi di tempat yang di sukai
  10. Tekan tombol Save
  11. Selesai

Selamat mencoba !

Sebagai tambahan, guestbook yang sering dipakai para blogger lainnya :
  1. http://oggix.com
Untuk langkah-langkahnya hampir sama dengan langkah diatas

Kumpulan Gambar Laptop Tercanggih


Kumpulan Gambar Laptop Tercanggih Ini adalah Kumpulan Gambar Laptop Tercanggih yang terbaru di blog kami. Bagi anda yang ingin memngetahui Laptop Tercanggih pas banget dengan Kumpulan Gambar Laptop Tercanggih.
Gambar Laptop Tercanggih
Gambar Laptop Tercanggih

Laptop Tercanggih
Laptop Tercanggih
Laptop Tercanggih 2011
Laptop Tercanggih 2011
Foto Laptop Tercanggih
Foto Laptop Tercanggih
Kumpulan Gambar Laptop Tercanggih
Kumpulan Gambar Laptop Tercanggih
Itulah “Kumpulan Gambar Laptop Tercanggih” semoga bermanfaat bagi anda

10 Game Tersulit Sepanjang Masa


Game adalah media hiburan yang paling efektif untuk menghilangkan stress, setidaknya itu yang dipikirkan oleh orang awam terhadap industri kreatif ini. Pandangan bahwa game hanya fokus pada hal-hal yang menyenangkan dan tidak memerlukan kemampuan otak untuk memainkannya benar-benar harus diubah. Kenapa? Karena orang awam juga harus mengerti bahwa bagi gamer seperti kita, game adalah sebuah tantangan yang harus ditaklukkan. Apalah artinya sebuah tantangan tanpa hadirnya hal-hal yang membuat kita frustrasi terlebih dahulu. Game menyediakan itu semua.

Pernahkah Anda memainkan sebuah game yang justru menyerap semua energi kehidupan Anda begitu saja? Yang bukannya menghadirkan hiburan, tetapi emosi negatif seperti marah, kecewa, dan frustrasi? Setidaknya ada beberapa game yang berdampak begitu buru. Terkadang rasanya ingin memecahkan setiap keping CD atau melempar monitor keluar rumah ketika kita sama sekali tidak menemukan cara untuk menyelesaikan game-game ini. Tetapi rasa frustrasi seperti inilah yang mampu menghadirkan pengalaman bermain yang sesungguhnya.

Dari cukup banyak game yang sudah pernah dimainkan, sedikitnya tidak menemukan lebih dari 50 game yang menimbulkan rasa frustrasi yang hebat. Karena kalau iya, tidak tertutup kemungkinan Anda akan akan masuk ke rumah sakit jiwa terdekat dengan diagnosa yang berat. Apa saja 10 game tersebut,..??? cekidot..


10. Catherine

Pada dasarnya Catherine merupakan game puzzle yang dikemas dalam bentuk yang sangat menarik. Dating, misteri, pilihan moral, dan perselingkuhan dipadukan dalam game menyusun balok yang sulit.
Memainkan game ini di mode NORMAL saja sudah cukup membuat Anda pusing. Semua balok disusun secara acak dengan tujuan yang sederhana, Anda menggunakannya untuk mencapai pintu keluar di puncak. Percayalah, game ini memang terdengar gampang, tetapi ketika Anda mencobanya, Anda akan seringkali mengulang level yang sama terus-menerus hingga berjam-jam sebelum menemukan komposisi balok yang pas. Jika Anda tidak tahan dengan tekanan, Catherine akan membawa mimpi buruk.


9. Super Meat Boy

Anda mungkin jatuh cinta dengan karakter bertubuh merah yang menggemaskan ini, namun jika harus memainkannya di Super Meat Boy? Bersiaplah untuk mencapai frustrasi tingkat tinggi. Dalam game yang dirilis untuk XBOX Live Arcade ini, Anda berperan sebagai Meat Boy yang harus menyelamatkan pacarnya, Bandage girl, di setiap misi yang ada. Jangan berharap mudah, karena game ini menawarkan jebakan-jebakan yang tampak mustahil untuk diselesaikan. Tumpukan gergaji besi dan senjata berat akan berusaha menghancurkan tubuh Anda tanpa sisa. Jika Anda termasuk orang yang pantang menyerah, silakan coba game ini.


8. Touhou

Ini mungkin reaksi pertama yang Anda rasakan ketika pertama kali memainkan salah satu seri dari Touhou Project. Karakter dan Boss dengan desain khas anime dipadukan dengan soundtrack lagu yang keren memang membuat kita terbuai akan keindahannya. Namun ketika Anda berusaha menamatkan game shooter ini? Tunggu dulu, Touhou menyimpan tantangan yang akan menguras air mata Anda dengan cepat.
Untuk memainkan sebuah game shooter dua dimensi, gamer pasti dituntut untuk memiliki tingkat konsentrasi yang tinggi untuk menghindari setiap peluru yang datang ke karakter Anda. Untuk Touhou? Anda harus meningkatkan konsentrasi tersebut ke level yang jauh lebih tinggi lagi. Walaupun tembakan yang hadir tampak begitu berwarna, namun yakinlah bahwa setiap darinya cukup untuk membuat Anda hancur berkeping-keping. Bayangkan saja bagaimana caranya menghindari peluru tembakan yang tampak tidak menyisakan ruang kosong di layar. Ini masih mode normal. Ketika Anda menginjak tingkat kesulitan yang lebih tinggi? Bye-bye....


7. Microsoft Flight Simulator

Game harus menyenangkan. Tentu saja, kita sangat setuju dengan itu. Bagaimana jika ada game yang hadir tanpa menawarkan apapun yang berkaitan dengan kesenangan, dan hanya rasa frustrasi, apakah masih layak disebut sebagai sebuah game? Jika itu yang Anda cari, maka Anda harus mencoba memainkan Microsoft Flight Simulator.
Menyandang nama simulator, tentu saja Anda jangan berharap menerbangkan pesawat ala Ace Combat atau HAWX. Di simulator ini, Anda benar-benar berperan sebagai seorang pilot yang mengawaki pesawat komersil. Anda tentunya pasti pernah melihat panel-panel bertebaran di kokpit pesawat? Ya, itu yang harus Anda otak-atik dan atur untuk dapat menerbangkan pesawat yang Anda pimpin. Kesalahan sedikit dapat berakibat sangat fatal.


6. Minesweeper

Solitaire mungkin menjadi game yang seringkali Anda mainkan ketika membutuhkan hiburan ringan di sela-sela kesibukan. Game wajib pengguna sistem operasi Windows tersebut memang membutuhkan sedikit strategi untuk menundukkannya, dan seringkali berhasil. Perasaan bahagia tersebut yang membuat Solitaire digemari. Tapi tahukah Anda bahwa Anda memiliki opsi untuk membuat hari jauh lebih buruk dengan hanya sebuah game sederhana dari Windows? Saran saya, mainkanlah Minesweeper.Dalam minesweeper, Anda harus membuka area tanpa menyentuh sama sekali ranjau yang ada. Lokasi ranjau dapat dipantau dari setiap angka area yang terbuka. Angka tersebut menunjukkan jumlah ranjau yang terdapat di area 8 kotak di sekitarnya. Bagi saya? Angka ini sama sekali tidak berarti, karena seperti Rambo, saya seringkali tidak mengerti clue yang ada dan akhirnya memilih ranjau. Bedanya dengan Rambo? Saya tidak pernah menang di minesweeper.


5. Metal Slug Arcade Edition

Siapa yang pernah memainkan Metal Slug di konsol? Hampir dari semua gamer akan mengangkat tangan mereka. Game side-scrolling shooter ini memang fun dan menarik untuk dimainkan. Walaupun grafis yang dihadirkan boleh dikatakan standar, namun ada kepuasan di setiap kali Anda berhasil menundukkannya. Sekarang mari kita hitung, berapa kali Anda mati dan harus melakukan continue dalam permainan? Lebih dari sepuluh kali? Bukan masalah jika Anda memainkannya di konsol. Bagaimana jika Anda memainkannya di Arcade yang membutuhkan koin?
Pemborosan yang menyenangkan jika kita dapat menyimpulkannya, karena Metal Slug Arcade Edition benar-benar terasa jauh lebih sulit. Entah karena memang didesain seperti itu, atau setiap koin uang yang kita keluarkan memang membuat game ini terasa semakin berat. Saya mengacungkan semua jempol yang saya punya jika Anda berani mengklaim tidak menggunakan continue sama sekali di Metal Slug Arcade Edition.


4. Grandia Extreme

Grandia, salah satu nama besar di dunia RPG yang tidak perlu diragukan lagi kualitasnya. Salah satu alasan yang membuat gamer mencintai dunia RPG adalah karena sensasi fun yang dihadirkannya. Memainkan Grandia Extreme akan membuat Anda dari cinta menjadi sangat benci dengan dunia ini. Bagaimana tidak, Anda harus menghadapi musuh yang levelnya lebih tinggi dengan kemampuan yang lebih rendah, plus karena sistem dungeon, Anda hanya bisa melakukan save setiap 10 lantai saja. Yang membuatnya semakin membuat Anda ingin menangis? Sebelum dapat melakukan save, Anda harus mengalahkan boss terlebih dahulu. Kalah dari boss berarti mengulang dari lantai 1 lagi.


3. Demons Souls

Hampir semua gamer akan setuju bahwa Demons Souls merupakan game RPG tersulit yang pernah ada. Mengapa? Pertama, karena Anda tidak bisa sembarangan melakukan hack and slash begitu saja melawan semua musuh yang ada. Perlu strategi untuk setiap perlawanan Anda. Yang kedua, jangan kaget jika Anda bertemu dengan musuh yang bisa membunuh Anda dengan hanya satu kali pukulan, bahkan di awal permainan. (What the?). Sangat sulit untuk menggambarkan rasa frustrasi yang dilahirkan Demon Souls. Anda harus merasakannya sendiri untuk dapat mengerti apa yang berusaha kita sampaikan. Yang pasti, Demons Souls benar-benar akan membuat Anda merasa ada iblis yang tinggal di hati Anda,


2. Myst

Myst mungkin merupakan game point dan click belaka, tetapi jangan sekali-kali Anda meremehkan game ini. Setiap misteri yang harus Anda pecahkan selalu berkaitan dengan puzzle-puzzle yang membuat kepala terasa lebih berat setiap harinya. Mencari jalan keluar? Anda tidak akan menemukan clue yang secara eksplisit mengarahkan Anda pada tujuan yang harus dicapai. Penjelajahan yang harus Anda tempuh harus didasarkan pada informasi yang Anda dapatkan melalui proses eksplorasi di sekitar wilayah yang ada. Kehilangan sebuah clue saja sudah cukup membuat Anda uring-uringan mencarinya. Myst benar-benar epic dari segi menghadirkan gejala sakit jiwa bagi para gamer.


1. I Wanna Be the Guy

Game tersulit yang pernah saya mainkan? Tentu saja I Wanna Be The Guy. Game indie yang dapat Anda temukan dan unduh secara mudah lewat internet ini memang menawarkan rasa frustrasi belaka tanpa kesenangan sama sekali (kecuali Anda mengkategorikan tertawa frustrasi itu lambang kebahagiaan). Memiliki gameplay yang mirip dengan Super Meat Boy, I Wanna be The Guy adalah game plaform yang sangat sulit untuk diselesaikan. Mengapa? Karena hampir setiap tanah yang Anda injak memiliki jebakan yang dapat membuat Anda terbunuh seketika. Beberapa bagian bahkan tampak sangat mustahil untuk diselesaikan oleh manusia biasa, bahkan yang aura karisma nya mampu memukau dunia. Anda butuh wangsit dan kemampuan supernatural tingkat tinggi untuk menyelesaikan game ini. I dont wanna be the guy!

List di atas merupakan game-game yang menurut saya paling sulit untuk dimainkan. Beberapa di antaranya mampu menghadirkan rasa frustrasi yang hebat ...
Silahkan anda mencoba sendiri, eitss .... tapi jangan pakai cheat yaa..

Rabu, 20 Juli 2011

Proses dan Penjadwalan Cpu Bagan IV

Prioritas dan Multiprosesor

Penjadwalan pada multiprosesor jelas lebih kompleks, karena kemungkinan masalah yang timbul jauh lebih banyak daripada prosesor tunggal.

Apa itu Prioritas

Prioritas adalah suatu istilah yang digunakan untuk menentukan tingkat urutan atau hirarki suatu proses yang sedang masuk dalam ready queue .

Multiprosesor

Mengacu pada buku Operating System Edisi ke-6 karya Silberschatz, sistem dengan prosesor jamak yang dimaksud adalah suatu sistem dimana prosesor-prosesornya identik. Dalam hal ini berarti tiap proses dapat masuk antrian manapun dari prosesor-prosesor yang ada. Yang patut diperhatikan, tiap prosesor dapat memilih proses apa saja yang ingin dijalankan dari ready queue . Dengan kata lain, prioritas proses ditentukan secara independen oleh masing-masing prosesor. Jadi salah satu prosesor bisa saja idle ketika ada proses yang sedang ditunda . Oleh karena itu, tiap prosesor harus di synchronize lebih dulu agar tidak ada dua prosesor atau lebih yang berebut mengeksekusi proses yang sama dan mengubah shared data . Sistem seperti ini dikenal juga dengan sebutan synchronous . Selain synchronous ,ada juga sistem lain yang disebut asynchronous , yang juga dikenal dengan struktur " master-slave " dimana salah satu prosesor dialokasikan khusus untuk mengatur penjadwalan. Sedangkan prosesor yang lain ditujukan untuk mengkomputasikan proses yang telah dijadwalkan sebelumnya oleh master prosesor. Peningkatan dari sistem ini adalah mengalokasikan penjadwalan, pemrosesan I/O, dan kegiatan sistem lainnya kepada satu prosesor tertentu kepada master . Sedangkan prosesor yang lain hanya bertugas mengeksekusi user code .


Sistem Waktu Nyata

Pada sub bab ini, kami akan mencoba sedikit menggambarkan fasilitas penjadualan yang dibutuhkan untuk mendukung komputasi real-time dengan bantuan sistem komputer.
Suatu sistem komputasi dinamakan real-time jika sistem tersebut dapat mendukung eksekusi program/aplikasi dengan waktu yang memiliki batasan. Dengan kata lain, sistem real-time harus memenuhi kondisi berikut: 1. Batasan waktu: memenuhi deadline, artinya bahwa aplikasi harus menyelesaikan tugasnya dalam waktu yang telah dibatasi. 2. Dapat diprediksi: artinya bahwa sistem harus bereaksi terhadap semua kemungkinan kejadian selama kejadian tersebut bisa diprediksi. 3. Proses bersamaan: artinya jika ada beberapa proses yang terjadi bersamaan, maka semua deadline nya harus terpenuhi.
Komputasi real-time ada 2 jenis, yaitu sistem Hard real-time dan sistem Soft real-time.

Sistem Hard Real-Time

Sistem hard real-time dibutuhkan untuk menyelesaikan critical task dengan jaminan waktu tertentu. Jika kebutuhan waktu tidak terpenuhi, maka aplikasi akan gagal. Dalam definisi lain disebutkan bahwa kontrol sistem hard real-time dapat mentoleransi keterlambatan tidak lebih dari 100 mikro detik. Secara umum, sebuah proses di kirim dengan sebuah pernyataan jumlah waktu dimana dibutuhkan untuk menyelesaikan atau menjalankan I/O. Kemudian penjadual bisa menjamin proses untuk selesai atau menolak permintaan karena tidak mungkin dilakukan. Mekanisme ini dikenal dengan resource reservation. Oleh karena itu setiap operasi harus dijamin dengan waktu maksimum. Pemberian jaminan seperti ini tidak dapat dilakukan dalam sistem dengan secondary storage atau virtual memory , karena sistem seperti ini tidak dapat meramalkan waktu yang dibutuhkan untuk mengeksekusi suatu proses.
Contoh dalam kehidupan sehari-hari adalah pada sistem pengontrol pesawat terbang. Dalam hal ini, keterlambatan sama sekali tidak boleh terjadi, karena dapat berakibat tidak terkontrolnya pesawat terbang. Nyawa penumpang yang ada dalam pesawat tergantung dari sistem ini, karena jika sistem pengontrol tidak dapat merespon tepat waktu, maka dapat menyebabkan kecelakaan yang merenggut korban jiwa.

Sistem Soft Real-Time

Komputasi soft real-time memiliki sedikit kelonggaran. Dalam sistem ini, proses yang kritis menerima prioritas lebih daripada yang lain. Walaupun menambah fungsi soft real-time ke sistem time sharing mungkin akan mengakibatkan ketidakadilan pembagian sumber daya dan mengakibatkan delay yang lebih lama, atau mungkin menyebabkan starvation , hasilnya adalah tujuan secara umum sistem yang bisa mendukung multimedia, grafik berkecepatan tinggi, dan variasi tugas yang tidak bisa diterima di lingkungan yang tidak mendukunng komputasi soft real-time.
Contoh penerapan sistem ini dalam kehidupan sehari-hari adalah pada alat penjual/pelayan otomatis. Jika mesin yang menggunakan sistem ini telah lama digunakan, maka mesin tersebut dapat mengalami penurunan kualitas, misalnya waktu pelayanannya menjadi lebih lambat dibandingkan ketika masih baru. Keterlambatan pada sistem ini tidak menyebabkan kecelakaan atau akibat fatal lainnya, melainkan hanya menyebabkan kerugian keuangan saja. Jika pelayanan mesin menjadi lambat, maka para pengguna dapat saja merasa tidak puas dan akhirnya dapat menurunkan pendapatan pemilik mesin.
Untuk lebih memahami tentang perbedaan kedua sistem ini dapat diperhatikan dari diagram dibawah ini.
Gambar 3-14. Grafik Hard Real-Time

http://www.ncst.ernet.in/education/pgdst/coosfac/slides/rtos.pdf
Gambar 3-15. Grafik Soft Real-Time

http://www.ncst.ernet.in/education/pgdst/coosfac/slides/rtos.pdf
Setelah batas waktu yang diberikan telah habis, pada sistem hard real-time, aplikasi yang dijalankan langsung dihentikan. Akan tetapi, pada sistem soft real-time, aplikasi yang telah habis masa waktu pengerjaan tugasnya, dihentikan secara bertahap atau dengan kata lain masih diberikan toleransi waktu.
Mengimplementasikan fungsi soft real time membutuhkan design yang hati-hati dan aspek yang berkaitan dengan sistem operasi. Pertama, sistem harus punya prioritas penjadualan, dan proses real-time harus memiliki prioritas tertinggi, tidak melampaui waktu, walaupun prioritas non real time bisa terjadi. Kedua, dispatch latency harus lebih kecil. Semakin kecil latency, semakin cepat real time proses mengeksekusi.
Untuk menjaga dispatch tetap rendah, kita butuh agar system call untuk preemptible . Ada beberapa cara untuk mencapai tujuan ini. Pertama adalah dengan memasukkan preemption points di durasi system call yang lama, yang memeriksa apakah prioritas utama butuh untuk dieksekusi. Jika sudah, maka contex switch mengambil alih, ketika high priority proses selesai, proses yang diinterupsi meneruskan dengan system call. Points premption bisa diganti hanya di lokasi yang aman di kernel dimana kernel struktur tidak bisa dimodifikasi.
Metoda yang lain adalah dengan membuat semua kernel preemptible. Karena operasi yang benar bisa dijamin, semua struktur data kernel harus diproteksi dengan mekanisme sinkronisasi. Dengan metode ini, kernel bisa selalu di preemptible , karena setiap data kernel yang sedang di update diproteksi dengan pemberian prioritas yang tinggi. Jika ada proses dengan prioritas tinggi ingin membaca atau memodifikasi data kernel yang sedang dijalankan, prioritas yang tinggi harus menunggu sampai proses dengan prioritas rendah tersebut selesai. Situasi seperti ini dikenal dengan priority inversion. Kenyataanya, serangkaian proses dapat saja mengakses sumber daya yang sedang dibutuhkan oleh proses yang lebih tinggi prioritasnya. Masalah ini dapat diatasi dengan priority-inheritance protocol, yaitu semua proses yang sedang mengakses sumber daya mendapat prioritas tinggi sampai selesai menggunakan sumber daya. Setelah selesai, prioritas proses ini dikembalikan menjadi seperti semula.


Proses dan Penjadwalan Cpu Bagan II

Konsep Thread

Apa itu Thread

Thread adalah unit dasar dari penggunaan CPU, thread mengandung Thread ID, program counter , register set , dan stack . Sebuah Thread berbagi code section , data section , dan sumber daya sistem operasi dengan Thread lain yang dimiliki oleh proses yang sama. Thread juga sering disebut lightweight process . Sebuah proses tradisional atau heavyweight process mempunyai thread tunggal yang berfungsi sebagai pengendali. Perbedaan antara proses dengan thread tunggal dengan proses dengan thread yang banyak adalah proses dengan thread yang banyak dapat mengerjakan lebih dari satu tugas pada satu satuan waktu
Gambar 3-8. Thread
Banyak software yang berjalan pada PC modern didesain secara multithreading . Sebuah aplikasi biasanya diimplementasi sebagai proses yang terpisah dengan beberapa thread yang berfungsi sebagai pengendali. Contohnya sebuah web browser mempunyai thread untuk menampilkan gambar atau tulisan sedangkan thread yang lain berfungsi sebagai penerima data dari network.
Kadang kala ada situasi dimana sebuah aplikasi diperlukan untuk menjalankan beberapa tugas yang serupa. Sebagai contohnya sebuah web server bisa mempunyai ratusan klien yang mengaksesnya secara concurrent . Kalau web server berjalan sebagai proses yang hanya mempunyai thread tunggal maka ia hanya bisa melayani satu klien pada pada satu satuan waktu. Bila ada klien lain yang ingin mengajukan permintaan maka ia harus menunggu sampai klien sebelumnya selesai dilayani. Solusinya adalah dengan membuat web server menjadi multithreading . Dengan ini maka sebuah web server akan membuat thread yang akan mendengar permintaan klien, ketika permintaan lain diajukan maka web server akan menciptakan thread lain yang akan melayani permintaan tersebut.
Java mempunyai pengunaan lain dari thread. Perlu dikeahui bahwa java tidak mempunyai konsep asynchronous . Sebagai contohnya kalau program java mencoba untuk melakukan koneksi ke server maka ia akan berada dalam keadaan block state sampai koneksinya jadi ( bisa dibayangkan apa yang terjadi apabila servernya mati ). Karena java tidak memiliki konsep asynchronous maka solusinya adalah dengan membuat thread yang mencoba untuk melakukan koneksi ke server dan thread lain yang pertamanya tidur selamabeberap waktu ( misalnya 60 detik ) kemudian bangun. Ketika waktu tidurnya habis maka ia akan bangun dan memeriksa apakah thread yang melakukan koneksi ke server masih mencoba untuk melakukan koneksi ke server, kalau thread tersebut masih dalam keadaan mencoba untuk melakukan koneksi ke server maka ia akan melakukan interrupt dan mencegah thread tersebut untuk mencoba melakukan koneksi ke server.

Keuntungan Thread

Keuntungan dari program yang multithrading dapat dipisah menjadi empat kategori :
  1. Responsi : Membuat aplikasi yang interaktif menjadi multithreading dapat membuat sebuah program terus berjalan meskipun sebagian dari program tersebut diblok atau melakukan operasi yang panjang, karena itu dapat meningkatkan respons kepada pengguna. Sebagai contohnya dalam web browser yang multithreading , sebuah thread dapat melayani permintaan pengguna sementara thread lain berusaha menampilkan image.
  2. Berbagi sumber daya : thread berbagi memori dan sumber daya dengan thread lain yang dimiliki oleh proses yang sama. Keuntungan dari berbagi kode adalah mengijinkan sebuah aplikasi untuk mempunyai beberapa thread yang berbeda dalam lokasi memori yang sama.
  3. Ekonomi : dalam pembuatan sebuah proses banyak dibutuhkan pengalokasian memori dan sumber daya. Alternatifnya adalah dengan penggunaan thread, karena thread berbagi memori dan sumber daya proses yang memilikinya maka akan lebih ekonomis untuk membuat dan context switch thread. Akan susah untuk mengukur perbedaan waktu antara proses dan thread dalam hal pembuatan dan pengaturan, tetapi secara umum pembuatan dan pengaturan proses lebih lama dibandingkan thread. Pada Solaris, pembuatan proses lebih lama 30 kali dibandingkan pembuatan thread, dan context switch proses 5 kali lebih lama dibandingkan context switch thread.
  4. Utilisasi arsitektur multiprocessor : Keuntungan dari multithreading bisa sangat meningkat pada arsitektur multiprocessor , dimana setiap thread dapat berjalan secara pararel di atas processor yang berbeda. Pada arsitektur processor tunggal, CPU menjalankan setiap thread secara bergantian tetapi hal ini berlangsung sangat cepat sehingga menciptakan ilusi pararel, tetapi pada kenyataannya hanya satu thread yang dijalankan CPU pada satu-satuan waktu( satu -satuan waktu pada CPU biasa disebut time slice atau quantum ).

User dan Kernel Threads

User Thread

User thread didukung diatas kernel dan diimplementasi oleh thread library pada user level. Library meneyediakan fasilitas untuk pembuatan thread, penjadwalan thread, dan manajemen thread tanpa dukungan dari kernel. Karena kernel tidak menyadari user-level thread maka semua pembuatan dan penjadwalan thread dilakukan di user space tanpa intervensi dari kernel. Oleh karena itu, user -level thread biasanya cepat untuk dibuat dan diatur. Tetapi user thread mempunyai kelemahan yaitu apabila kernelnya merupakan thread tunggal maka apabila salah satu user-level thread menjalankan blocking system call maka akan mengakibatkan seluruh proses diblok walaupun ada thread lain yang bisa jalan dalam aplikasi tersebut. Contoh user-thread libraries adalah POSIX Pthreads, Mach C-threads, dan Solaris threads.

Kernel Thread

Kernel thread didukung langsung oleh sistem operasi. Pembuatan, penjadwalan, dan manajeman thread dilakukan oleh kernel pada kernel space . Karena pengaturan thread dilakukan oleh sistem operasi maka pembuatan dan pengaturan kernel thread lebih lambat dibandingkan user thread. Keuntungannya adalah thread diatur oleh kernel, karena itu jika sebuah thread menjalankan blocking system call maka kernel bisa menjadwalkan thread lain di aplikasi untuk melakukan eksekusi. Keuntungan lainnya adalah pada lingkungan multiprocessor , kernel bisa menjadwal thread-thread pada processor yang berbeda. Contoh sistem operasi yang mendukung kernel thread adalah Windows NT, Solaris, Digital UNIX.

Multithreading Models

Many-to-One Model

Many-to-One model memetakan banyak user-level thread ke saru kernel thread. Pengaturan thread dilakukan di user space, oleh karena itu ia efisien tetapi ia mempunyai kelemahan yang sama dengan user thread. Selain itu karena hanya satu thread yang bisa mengakses thread pada suatu waktu maka multiple thread tidak bisa berjalan secara pararel pada multiprocessor . User-level thread yang diimplementasi pada sistem operasi yang tidak mendukung kernel thread menggunakan Many-to-One model.
Gambar 3-9. Many-To-One

One-to-One Model

One-to-One model memetakan setiap user thread ke kernel thread. Ia menyediakan lebih banyak concurrency dibandingkan Many-to-One model. Keuntungannya sama dengan keuntungan kernel thread. Kelemahannya model ini adalah setiap pembuatan user thread membutuhkan pembuatan kernel thread. Karena pembuatan thread bisa menurunkan performa dari sebuah aplikasi maka implmentasi dari model ini membatasi jumlah thread yang dibatasi oleh sistem. Contoh sistem operasi yang mendukung One-to-One model adalah Windows NT dan OS/2.
Gambar 3-10. One-To-One

Many-to-Many Model

Many-to-many model multiplexes banyak user-level thread ke kernel thread yang jumlahnya lebih kecil atau sama banyaknya dengan user-level thread. Jumlah kernel thread bisa spesifik untuk sebagian aplikasi atau sebagian mesin. Many-to-One model mengijinkan developer ntuk membuat user thread sebanyak yang ia mau tetapi concurrency tidak dapat diperoleh karena hanya satu thread yang bisa dijadwal oleh kernel pada suatu waktu. One-to-One menghasilkan concurrency yang lebih tetapi developer harus hati-hati untuk tidak menciptakan terlalu banyak thread dalam suatu aplikasi( dalam beberapa hal, developer hanya bisa membuat thread dalam jumlah yang terbatas ). Many-to-Many model tidak menderita kelemahan dari 2 model di atas. Developer bisa membuat user thread sebanyak yang diperlukan, dan kernel thread yang bersangkutan bisa bejalan secara pararel pada multiprocessor . Dan juga ketika suatu thread menjalankan blocking system call maka kernel dapat menjadwalkan thread lain untuk melakukan eksekusi. Contoh sistem operasi yang mendukung model ini adalah Solaris, IRIX, dan Digital UNIX.
Gambar 3-11. Many-To-Many

Fork dan exec System Call

Ada 2 kemungkinan dalam system UNIX jika fork dipanggil oleh salah satu thread dalam proses:
  1. Semua thread diduplikasi.
  2. Hanya thread yang memanggil fork .
Kalau thread memanggil exec System Call maka program yang dispesifikasi di parameter exec akan mengganti keseluruhan proses termasuk thread dan LWP.
Penggunaan 2 versi dari fork diatas tergantung dari aplikasi. Kalau exec dipanggil seketika sesudah fork, maka duplikasi seluruh thread tidak dibutuhkan, karena program yang dispesifikasi di parameter exec akan mengganti seluruh proses. Pada kasus ini cukup hanya mengganti thread yang memanggil fork . Tetapi jika proses yang terpisah tidak memanggil exec sesudah fork maka proses yang terpisah tersebut hendaknya menduplikasi seluruh thread.

Cancellation

Thread cancellation adalah tugas untuk memberhentikan thread sebelum ia menyelesaikan tugasnya. Sebagi contohnya jika dalam program java kita hendak mematikan JVM( Java Virtual Machine ) maka sebelum JVM-nya dimatikan maka seluruh thread yang berjalan dihentikan terlebuh dahulu. Thread yang akan diberhentikan biasa disebut target thread.
Pemberhentian target thread bisa terjadi melalui 2 cara yang berbeda :
  1. Asynchronous cancellation : suatu thread seketika itu juga memberhentikan target thread.
  2. Defered cancellation : target thread secara perodik memeriksa apakah dia harus berhenti, cara ini memperbolehkan targetthread untuk memberhentikan dirinya sendiri secara terurut.
Hal yang sulit dari pemberhentian thread ini adalah ketika terjadi situasi dimana sumber daya sudah dialokasikan untuk thread yang akan diberhentikan. Selain itu kesulitan lain adalah ketika thread yang diberhentikan sedang meng-update data yang ia bagi dengan thread lain. Hal ini akan menjadi masalah yang sulit apabila digunakan asynchronous cancellation . Sistem operasi akan mengambil kembali sumber daya dari thread yang diberhentikan tetapi seringkali sistem operasi tidak mengambil kembali semua sumber daya dari thread yang diberhentikan.
Alternatifnya adalah dengan menggunakan Deffered cancellation . Cara kerja dari deffered cancellation adalah dengan menggunakan 1 thread yang berfungsi sebagai pengindikasi bahwa target thread hendak diberhentikan. Tetapi pemberhentian hanya akan terjadi jika target thread memeriksa apakah ia harus berhenti atau tidak. Hal ini memperbolehkan thread untuk memeriksa apakah ia harus berhenti pada waktu dimana ia bisa diberhentikan secara aman yang aman. Pthread merujuk tersebut sebagai cancellation points .
Pada umumnya sistem operasi memperbolehkan proses atau thread untuk diberhentikan secara asynchronous . Tetapi Pthread API menyediakan deferred cancellation . Hal ini berarti sistem operasi yang mengimplementasikan Pthread API akan mengijinkan deferred cancellation .

Penanganan Sinyal

Sebuah sinyal digunakan di sistem UNIX untuk notify sebuah proses kalau suatu peristiwa telah terjadi. Sebuah sinyal bisa diterima secara synchronous atau asynchronous tergantung dari sumber dan alasan kenapa peristiwa itu memberi sinyal.
Semua sinyal( asynchronous dan synchronous ) mengikuti pola yang sama :
  1. Sebuah sinyal dimunculkan oleh kejadian dari suatu persitiwa.
  2. Sinyal yang dimunculkan tersebut dikirim ke proses.
  3. Sesudah dikirim, sinyal tersebut harus ditangani.
Contoh dari sinyal synchronous adalah ketika suatu proses melakukan pengaksesan memori secarai ilegal atau pembagian dengan nol, sinyal dimunculkan dan dikirim ke proses yang melakukan operasi tersebut. Contoh dari sinyal asynchronous misalnya kita mengirimkan sinyal untuk mematikan proses dengan keyboard( alt-f4 ) maka sinyal asynchronous dikirim ke proses tersebut. Jadi ketika suatu sinyal dimunculkan oleh peristiwa diluar proses yang sedang berjalan maka proses tersebut menerima sinyal tersebut secara asynchronous .
Setiap sinyal bisa ditangani oleh salah satu dari 2 penerima sinyal :
  1. Penerima sinyal yang merupakan set awal dari sistem operasi.
  2. Penerima sinyal yang didefinisikan sendiri ole user.
Penanganan sinyal pada program yang hanya memakai thread tunggal cukup mudah yaitu hanya dengan mengrimkan sinyal ke prosesnya. Tetapi mengirimkan sinyal lebih rumit pada program yang multithreading , karena sebuah proses bisa memiliki beberapa thread.
Secara umum ada 4 pilihan kemana sinyal harus dikirim :
  1. Mengirimkan sinyal ke thread yang dituju oleh sinyal tersebut.
  2. Mengirimkan sinyal ke setiap thread pada proses tersebut.
  3. Mengirimkan sinyal ke thread tertentu dalam proses.
  4. 4. Menugaskan thread khusus untuk menerima semua sinyal yang ditujukan pada proses.
Cara untuk mengirimkan sebuah sinyal tergantung dari tipe sinyal yang dimunculkan. Sebagai contoh sinyal synchronous perlu dikirimkan ke thread yang memunculkan sinyal tersebut bukan thread lain pada proses tersebut. Tetapi situasi dengan sinyal asynchronous menjadi tidak jelas. Beberapa sinyal asynchronous seperti sinyal yang berfungsi untuk mematikan proses ( contoh : alt-f4 ) harus dikirim ke semua thread. Beberapa versi UNIX yang multithreading mengijinkan thread menerima sinyal yang akan ia terima dan menolak sinyal yang akan ia tolak. Karena itu sinyal asynchronouns hanya dikirimkan ke thread yang tidak memblok sinyal tersebut. Solaris 2 mengimplementasikan pilihan ke-4 untuk menangani sinyal. Windows 2000 tidak menyediakan fasilitas untuk mendukung sinyal, sebagai gantinya Windows 2000 menggunakan asynchronous procedure calls( APCs ) . Fasilitas APC memperbolehkan user thread untuk memanggil fungsi tertentu ketika user thread menerima notifikasi peristiwa tertentu.

Thread Pools

Pada web server yang multithreading ada 2 masalah yang timbul :
  1. Ukuran waktu yang diperlukan untuk menciptakan thread untuk melayani permintaan yang diajukan terlebih pada kenyataannya thread dibuang ketika ia seketika sesudah ia menyelesaikan tugasnya.
  2. Pembuatan thread yang tidak terbatas jumlahnya dapat menurunkan performa dari sistem.
Solusinya adalah dengan penggunaan Thread Pools, cara kerjanya adalah dengan membuat beberapa thread pada proses startup dan menempatkan mereka ke pools , dimana mereka duduk diam dan menunggu untuk bekerja. Jadi ketika server menerima permintaan maka maka ia akan membangunkan thread dari pool dan jika threadnya tersedia maka permintaan tersebut akan dilayani. Ketika thread sudah selesai mengerjakan tugasnya maka ia kembali ke pool dan menunggu pekerjaan lainnya. Bila tidak thread yang tersedia pada saat dibutuhkan maka server menunggu sampai ada 1 thread yang bebas.
Keuntungan thread pool :
  1. Biasanya lebih cepat untuk melayani permintaan dengan thread yang ada dibanding dengan menunggu thread baru dibuat.
  2. Thread pool membatasi jumlah thread yang ada pada suatu waktu. Hal ini pentingpada sistem yang tidak bisa mendukung banyak thread yang berjalan secara concurrent .
Jumlah thread dalam pool bisa tergantung dari jumlah CPU dalam sistem, jumlah memori fisik, dan jumlah permintaan klien yang concurrent .

Hal-Hal Lainnya dari Thread

Thread-Specific Data

Thread yang dimiliki oleh suatu proses memang berbagi data tetapi setiap thread mungkin membutuhkan duplikat dari data tertentu untuk dirinya sendiri dalam keadaan tertentu. Data ini disebut thread -specific data.

Pthreads

Pthreads merujuk kepada POSIX standard( IEEE 1003.1 c ) mendefinisikan sebuah API untuk pembuatan thread dan sinkronisasi. Pthreads adalah spesifikasi untuk thread dan bukan merupakan suatu implementasi. Desainer sistem operasi boleh mengimplementasikan spesifikasi tersebut dalam berbagai cara yang mereka inginkan. Secara umum Libraries yang mengimplementasikan Pthreads dilarang pada sistem berbasis UNIX seperti Solaris 2. Sistem operasi Windows secara umum belum mendukung Pthreads, walaupun versi shareware -nya sudah ada di domain publik.


Ilustrasi Thread dengan Linux dan Java

Dewasa ini, banyak sistem operasi yang telah mendukung proses multithreading. Setiap sistem operasi memiliki konsep tersendiri dalam mengimplementasikannya ke dalam sistem.

Thread dengan Linux

Kernel Linux mulai menggunakan thread pada versi 2.2. Thread dalam Linux dianggap sebagai task , seperti halnya proses. Kebanyakan sistem operasi yang mengimplementasikan multithreading menjalankan sebuah thread terpisah dari proses. Linus Torvalds mendefinisikan bahwa sebuah thread adalah Context of Execution (COE), yang berarti bahwa hanya ada sebuah Process Control Block (PCB) dan sebuah penjadwal yang diperlukan. Linux tidak mendukung multithreading , struktur data yang terpisah, atau pun rutin kernel.
Linux menyediakan dua macam system call , yaitu fork dan clone. fork memiliki fungsi untuk menduplikasi proses dimana proses anak yang dihasilkan bersifat independent. clone memiliki sifat yang mirip dengan fork yaitu sama-sama membuat duplikat dari proses induk. Namun demikian, selain membuat proses baru yang terpisah dari proses induk, clone juga mengizinkan terjadinya proses berbagi ruang alamat antara proses anak dengan proses induk, sehingga proses anak yang dihasilkan akan sama persis dengan proses induknya.
Setiap proses memiliki struktur data yang unik. Namun demikian, proses-proses di Linux hanya menyimpan pointer-pointer ke struktur data lainnya dimana instruksi disimpan, sehingga tidak harus menyimpan instruksi ke setiap struktur data yang ada. Hal ini menyebabkan context switch antar proses di Linux menjadi lebih cepat.
Ketika fork dieksekusi, sebuah proses baru dibuat bersamaan dengan proses penyalinan struktur data dari proses induk. Ketika clone dieksekusi, sebuah proses baru juga dibuat, namun proses tersebut tidak menyalin struktur data dari proses induknya. Proses baru tersebut hanya menyimpan pointer ke struktur data proses induk. Oleh karena itu, proses anak dapat berbagi ruang alamat dan sumber daya dengan proses induknya. Satu set flag digunakan untuk mengindikasikan seberapa banyak kedua proses tersebut dapat berbagi. Jika tidak ada flag yang ditandai, maka tidak ada sharing, sehingga clone berlaku sebagai fork. Jika kelima flag ditandai, maka proses induk harus berbagi semuanya dengan proses anak.

Tabel 3-1. Tabel Flag dan Fungsinya
FlagKeterangan
CLONE_VMBerbagi data dan Stack
CLONE_FSBerbagi informasi sistem berkas
CLONE_FILESBerbagi berkas
CLONE_SIGHANDBerbagi sinyal
CLONE_PIDBerbagi PID dengan proses induk

Thread dengan Java

Sistem operasi mendukung thread pada tingkat kernel atau tingkat pengguna. Java merupakan salah satu dari sedikit bahasa pemrograman yang mendukung thread di tingkat bahasa untuk pembuatan dan manajemen thread. Karena thread dalam Java diatur oleh Java Virtual Machine (JVM), tidak dengan user level library ataupun kernel, sulit mengelompokkan thread di Java apakah di tingkat pengguna atau kernel.
Setiap program dalam Java memiliki minimal sebuah thread, yaitu main thread yang merupakan single-thread tersendiri di JVM. Java juga menyediakan perintah untuk membuat dan memodifikasi thread tambahan sesuai kebutuhan di program.

Pembuatan Thread

Ada dua cara untuk membuat thread dalam Java. Pertama, thread dapat dibuat secara eksplisit dengan cara membuat objek baru dari class yang telah meng- extends class Thread yang menyebabkan class tersebut mewarisi method - method dan field dari class super. Dalam kasus ini, sebuah class hanya bisa meng- extends sebuah class. Keterbatasan ini dapat diatasi dengan cara kedua yaitu meng- implements interface Runnable, yang merupakan cara yang paling sering digunakan untuk membuat thread, sehingga class tersebut dapat meng- extends class lain.
Sebuah objek yang berasal dari subkelas Thread dapat dijalankan sebagai thread pengontrol yang terpisah dalam JVM. Membuat objek dari class Thread tidak akan membuat thread baru. Hanya dengan method start thread baru akan terbentuk. Memanggil method start untuk membuat objek baru akan mengakibatkan 2 hal, yaitu:
1. Pengalokasian memori dan menginisialisasikan sebuah thread baru dalam JVM.
2. Memanggil method run, yang sudah di- override, membuat thread dapat dijalankan oleh JVM
(Catatan: Method run dijalankan jika method start dipanggil. Memanggil method run secara langsung hanya menghasilkan sebuah single-thread tambahan selain main thread)
Contoh pembuatan thread dengan membuat objek baru dari class yang meng-extends class Thread:
public class TestThread1 {
    public static void main (String[] args) {    
        BuatThread1 b = new BuatThread1();
        for(int i = 0; i < angka; i++) {
            b.start();
        }
    }
}

class BuatThread1 extends Thread {  
    public void run() {
        try {
            System.out.println("Thread baru dibuat.");
        }
        catch (InterruptedException e) {
        } }

JVM dan Host Operating System

Implementasi umum dari JVM adalah di atas sebuah host operating system . Hal ini memungkinkan JVM untuk menyembunyikan implementasi detail dari sistem operasi tempat JVM dijalankan dan menyediakan lingkungan abstrak dan konsisten yang memungkinkan program-program Java untuk beroperasi di atas platform apa pun yang mendukung JVM. Spesifikasi untuk JVM tidak mengindikasikan bagaimana thread-thread Java dipetakan ke sistem operasi tempat JVM dijalankan, melainkan menyerahkan keputusan tersebut kepada implementasi tertentu dari JVM. Windows 95/98/NT/2000 menggunakan model One-to-One , sehingga setiap thread Java untuk JVM pada sistem operasi tersebut dipetakan kepada sebuah kernel thread . Solaris 2 awalnya mengimplementasikan JVM menggunakan model Many-to-One (disebut Green Threads) . Akan tetapi, sejak JVM versi 1.1 dengan Solaris 2.6, mulai diimplementasikan menggunakan model Many-to-Many .

Kamis, 07 Juli 2011

Mengubah XP Menjadi Mac X OS Leopard

Leopard

Banyak yang meminta/request kepada saya untuk memposting theme untuk windows xp, tapi disini saya akan memberikan lebih dari sekedar theme, yaitu Transformation Pack.

Mungkin anda masih banyak yang tidak tahu, atau bingung apa perbedaan antara theme dengan Transformation Pack, saya akan sedikit menjelaskan. Theme itu biasanya merubah tampilan dari jendela - jendelanya saja, sedangkan Transformation Pack lebih lengkap tidak hanya tampilan, hampir semua dirubah.

Dengan Transformation Pack Mac OS Leopard ini, anda akan merasakan tampilan seperti tampilan asli dari Mac OS. Mulai dari cursor, menu, folder, dan lainnya.

Jadi anda tidak perlu meng-isntal satu persatu untuk memiliki tampilan seperti Leopard, anda hanya perlu menginstal satu aplikasi ini, kemudian tinggal tunggu dan restart PC, Otomatis PC anda akan langsung memiliki tampilan yang berbeda.

explorerOffice

Tampilan Windows XP anda akan berubah menjadi tampilan seperti gambar diatas, jika anda sudah bosan dengan tampilan XP yang standart, sedangkan anda ingin memiliki tampilan yang berbeda, seperti tampilan Leopard ini.

Anda tidak perlu bersusah payah, apalagi mengganti PC anda, hanya untuk memiliki tampilan Leopard, anda tinggal install aplikasi ini, dan lihat penampilan windows xp anda yang baru.

Jika anda ingin mengembalikan ke awal, anda tinggal unisntal aplikasi ini, maka secara otomatis akan kembali ke tampilan sebelum software ini ter-instal. Untuk lebih aman lagi, anda bisa membuat restore point sebelum aplikasi ini diinstal.

Baiklah untuk mendownload BricoPack Mac OS X Leopard ini, silakan anda klik link download dibawah ini..


 Download Software                            Download Direct

ROBOT HARDWARE


Below is a list of robotics hardware suppliers.

Surveyor SRV-1

Designed for research, education, and exploration, Surveyor's SRV-1 internet-controlled robot integrates a 60MIPS ARM7TDMI 32-bit processor, a digital video camera with resolution from 80x64 to 640x480 pixels, infrared sensors, and Zigbee 802.15.4 wireless communications on a dual-motor tracked mobile robotic base, to explore, discover and report back to home. Designed to operate as a remotely-controlled webcam or a self-navigating autonomous robot, the SRV-1 can be managed from a Windows, Mac OS/X or Linux base station, and multiple SRV-1's can be controlled by a single base station.

Servo City

Servo City sells servos, servo accessories, robot parts, and some custom servo gears etc.

Lynxmotion

We have a nice selection of intelligently designed, precision engineered robot kits and components. We have many innovative solutions to common robotics problems. In addition to lots of cool products, we also have tons of information on doing hobby robotics.

Zagros Robotics

The MAX ‘99’ mobile base platform is the mobile robotics platform of the future. The base comes with two 12-inch diameter (30cm) decks. It features dual casters and dual drive motors making it very stable. This robot will turn on it own axis making it very maneuverable.

Jameco's Robot Store

The Best In Robots from the Internet's Original Robot Site - Since 1994! In 2005, Jameco Electronics purchased RobotStore.com to expand their existing line of robot products. With plans to become the one-stop site for the robotics community, Jameco is expanding the depth and breadth of product and service offerings to meet the needs of the unique robotics hobbyists.

Acroname

Acroname's mission is to provide expertise, applications and high quality products in robotics. We aim not to just make money, but to advance our field with applications that benefit people.

KIPR Robot Products

Products to support the Botball competition

Spark Fun Electronics

Prototyping Supplies, BlueTooth modems etc.

MaxStream

MaxStream supplies OEMs and integrators with reliable radio modems and radio modules that meet the unique needs of industry and commerce. The wireless modems are easy-to-use and provide reliable delivery of critical data between devices.

Menaruh Elemen Halaman Di Bawah Header



Menaruh Elemen Halaman Di Bawah Header - Dapat dikatakan juga menempatkan widget di bawah header. Jika anda punya keinginan seperti itu, silahkan ikuti langkah-langkah sebagai berikut :
  1. Login ke blogger dengan Username / id dan Pasword anda
  2. Klik Tata Letak.
  3. Klik tab Elemen Halaman, lihat pada struktur layout template anda. Biasanya bagian header akan seperti ini :
    elemenheader
  4. Sekarang kita akan memodifikasinya, let’s go to party.
  5. Klik Tab Edit HTML.
  6. Klik Tulisan Download Template Lengkap, silahkan di backup dulu (penting).
  7. Cari Kode yang mirip seperti ini :
    <b:section class='header' id='header' maxwidgets='1' showaddelement='no'>

  8. Hapus kode di atas dan ganti dengan kode di bawah ini : <b:section class='header' id='header' preferred='yes'>
  9. Klik tombol Simpan template. Tunggu beberapa saat sampai template anda tersimpan.
  10. Klik tab Elemen halaman. Dan sekarang layout template anda akan menjadi seperti ini :

    header-elemen
  11. Sekarang anda bisa menambahkan berbagai elemen langsung di bawah header.
  12. Untuk menambah elemen halaman tinggal klik Tambah Elemen Halaman. Silahkan tambahkan apa yang anda mau, apabila sudah di tambahkan tinggal geser elemen yang baru di buat tadi ke bawah elemen header.
  13. Klik Tombol SIMPAN yang ada di bagian atas.
  14. Selesai, sekarang tinggal lihat hasilnya

Proses dan Penjadwalan Cpu Bagan I

Konsep Proses

Jika kita berdiskusi mengenai sistem operasi, maka akan timbul sebuah pertanyaan yaitu mengenai istilah apa yang tepat untuk menyebut semua aktivitas yang dilakukan oleh CPU. Sistem Batch mengeksekusi jobs sebagaimana suatu sistem time-share menggunakan program pengguna ( user programs ) atau tasks . Bahkan pada sistem dengan satu penggunapun, seperti pada Microsoft Windows dan Macintosh OS, seorang pengguna mampu menjalankan beberapa program pada saat yang sama, contohnya Word Processor, Web Browser, dan paket e-mail. Bahkan jika pengguna hanya dapat menjalankan satu program pada satu waktu, sistem operasi perlu untuk mendukung aktivitas program internalnya sendiri, seperti managemen memori. Dalam banyak hal, seluruh aktivitas ini adalah serupa, maka kita menyebut seluruh program itu proses-proses.
Istilah job dan proses digunakan hampir dapat dipertukarkan pada tulisan ini. Walau kami sendiri lebih menyukai istilah proses, banyak teori dan terminologi sistem-operasi dikembangkan selama suatu waktu ketika aktivitas utama sistem operasi adalah job processing . Akan membingungkan jika kita menghindari penggunaan istilah yang telah diterim oleh publik yang memasukkan kata job hanya karena proses memiliki istilah job sebagai pengganti atau pendahulunya.

Definisi Proses

Secara tidak langsung, proses adalah program yang sedang dieksekusi. Menurut SilberSchatz, suatu proses adalah lebih dari sebuah kode program, yang terkadang disebut text section . Proses juga mencakup program counter , yaitu sebuah stack untuk menyimpan alamat dari instruksi yang akan dieksekusi selanjutnya dan register. Sebuah proses pada umumnya juga memiliki sebuah stack yang berisikan data-data yang dibutuhkan selama proses dieksekusi (seperti parameter method, alamat return dan variabel lokal), dan sebuah data section yang menyimpan variabel global.
Sama halnya dengan SilberSchatz, Tanenbaum juga berpendapat bahwa proses adalah sebuah program yang dieksekusi yang mecakup program counter , register, dan variabel di dalamnya.
Kami tekankan bahwa program itu sendiri bukanlah sebuah proses; suatu program adalah satu entitas pasif; seperti isi dari sebuah berkas yang disimpan didalam disket. Sedangkan sebuah proses dalam suatu entitas aktif, dengan sebuah program counter yang menyimpan alamat instruksi selanjut yang akan dieksekusi dan seperangkat sumber daya ( resource yang dibutuhkan agar sebuah proses dapat dieksekusi.
Untuk mempermudah kita membedakan program dengan proses, kita akan menggunakan analogi yang diberikan oleh Tanenbaum. Misalnya ada seorang tukang kue yang ingin membuat kue ulang tahun untuk anaknya. Tukang kue tersebut memiliki resep kue ulang tahun dan bahan-bahan yang dibutuhkan untuk membuat kue ulang tahun di dapurnya seperti: tepung terigu, telur, gula, bubuk vanila dan bahan-bahan lainnya. Dalam analogi ini, resep kue ulang tahun adalah sebuah program, si tukang kue tersebut adala prosesor (CPU), dan bahan-bahan untuk mebuat kue tersebut adalah data input. Sedangkan proses-nya adalah kegiatan sang tukang kue untuk membaca resep, mengolah bahan, dan memanggang kue tersebut.
Walau dua proses dapat dihubungkan dengan program yang sama, program tersebut dianggap dua urutan eksekusi yang berbeda. Sebagai contoh, beberapa pengguna dapat menjalankan copy yang berbeda pada mail program, atau pengguna yang sama dapat meminta banyak copy dari program editor. Tiap-tiap proses ini adakah proses yang berbeda dan walau bagian text-section adalah sama, data section -nya bervariasi. Adalah umum untuk memiliki proses yang menghasilkan banyak proses begitu ia bekerja. Hal ini akan dijelaskan lebih detail pada subbab Hubungan Antar Proses.

Status Proses

Bila sebuah proses dieksekusi, maka statusnya akan berubah-ubah. Status dari sebuah proses mencerminkan aktivitas atau keadaan dari proses itu sendiri. Berikut ini adalah status-status yang mungkin dimiliki sebuah proses menurut Tanenbaum:

  • Running: pada saat menggunakan CPU pada suatu waktu
  • Ready: proses diberhentikan sementara karena menunggu proses lain untuk dieksekusi
  • Blocked: tidak dijalankan sampai event dari luar (yang berhubungan dengan proses tersebut) terjadi
Sedangkan menurut SilberSchatz, terdapat 5 macam jenis status yang mungkin dimiliki oleh suatu proses:

  • New: status yang dimiliki pada saat proses baru saja dibuat
  • Running: status yang dimiliki pada saat instruksi-instruksi dari sebuah proses dieksekusi
  • Waiting: status yang dimiliki pada saat proses menunggu suatu event (contohnya: proses I/O)
  • Ready: status yang dimiliki pada saat proses siap untuk dieksekusi oleh prosesor
  • Terminated: status yang dimililki pada saat proses telah selesai dieksekusi
Nama-nama tersebut adalah berdasar opini, istilah tersebut bervariasi di sepanjang sistem operasi. Keadaan yang mereka gambarkan ditemukan pada seluruh sistem. Namun, pada sistem operasi tertentu lebih baik menggambarkan keadaan/status proses. Penting untuk diketahui bahwa hanya satu proses yang dapat berjalan pada prosesor mana pun pada satu waktu. Namun, banyak proses yang dapat berstatus ready atau waiting. Keadaan diagram yang berkaitan dangan keadaan tersebut dijelaskan pada Gambar 3-1.
Gambar 3-1. Status Proses

http://bebas.vlsm.org/v06/Kuliah/SistemOperasi/BUKU/SistemOperasi/img/4-1.png
Ada tiga kemungkinan bila sebuah proses memilki status running:

  • Jika program telah selesai dieksekusi maka status dari proses tersebut akan berubah menjadi Terminated.
  • Jika waktu yang disediakan oleh OS untuk proses tersebut sudah habis maka akan terjadi interrupt dan proses tersebut kini berstatus Ready.
  • Jika suatu event terjadi pada saat proses dieksekusi (seperti ada request I/O) maka proses tersebut akan menunngu event tersebut selesai dan proses berstatus Waiting.

Process Control Block

Tiap proses digambarkan dalam sistem operasi oleh sebuah process control block PCB - juga disebut sebuah control block. Sebuah PCB ditunjukkan dalam Gambar 2-2. PCB berisikan banyak bagian dari informasi yang berhubungan dengan sebuah proses yang spesifik, termasuk hal-hal dibawah ini:

  • Status proses: status mungkin, new, ready, running, waiting, halted, dan juga banyak lagi.
  • Program counter: suatu stack yang berisi alamat dari instruksi selanjutnya untuk dieksekusi untuk proses ini.
  • CPU register: Register bervariasi dalam jumlah dan jenis, tergantung pada rancangan komputer. Register tersebut termasuk accumulator , indeks register, stack pointer , general-purposes register , ditambah code information pada kondisi apa pun. Besertaan dengan program counter, keadaaan/status informasi harus disimpan ketika gangguan terjadi, untuk memungkinkan proses tersebut berjalan/bekerja dengan benar setelahnya (lihat Gambar 2-3).
  • 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 (lihat Bab Managemen memori).
  • 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 berkas-berkas yang sedang diakses dan banyak lagi.
  • PCB hanya berfungsi sebagai tempat penyimpanan informasi yang dapat bervariasi dari proses yang satu dengan yang lain.
Gambar 3-2. Process Control Block

http://bebas.vlsm.org/v06/Kuliah/SistemOperasi/BUKU/SistemOperasi/img/4-2.png
Gambar 3-3.


Threads

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 secara terus menerus mengetik dan menjalankan pengecek ejaan didalam proses yang sama, maka sistem operasi tersebut memungkinkan proses untuk menjalankan lebih dari satu tugas pada satu waktu. Pada subbab Thread akan dibahas proses multithreaded lebih lanjut.


Penjadwalan Proses

Multiprogramming bertujuan untuk memaksimalkan penggunaan CPU dengan cara mengatur alokasi waktu yang digunakan oleh CPU,sehingga proses berjalan sepanjang waktu dan meperkecil waktu idle . Untuk sistem yang bersifat uniprosesor , hanya ada satu proses yang bisa berjalan setiap waktunya. Jika proses yang ada lebih dari satu, maka proses yang lain harus menunggu sampai CPU bebas dan siap untuk dijadwalkan kembali.

Queue Scheduling

Ketika sebuah proses memasuki sistem, proses itu diletakkan di dalam job queue . Pada antrian ini terdapat seluruh proses yang berada dalam sistem. Sedangkan proses yang berada pada memori utama, siap dan menunggu untuk mengeksekusi disimpan dalam sebuah daftar yang bernama ready queue . Antrian ini biasanya disimpan sebagai linked list . Header dari ready queue berisi pointer untuk PCB pertama dan PCB terakhir pada list. Setiap PCB memiliki pointer field yang menunjuk kepada PCB untuk proses selanjutnya dalam ready queue .
Sistem operasi juga memiliki antrian lain. Ketika sebuah proses dialokasikan ke CPU, proses tersebut berjalan sebentar lalu berhenti, di-interupsi, atau menunggu suatu hal tertentu, seperti selesainya suatu permintaan I/O. Dalam permintaan I/O, bisa saja yang diminta itu adalah tape drive , atau peralatan yang di- share secara bersama-sama, seperti disk. Karena ada banyak proses dalam sistem, disk bisa saja sibuk dengan permintaan I/O dari proses lainnya. Untuk itu proses tersebut mungkin harus menunggu disk tersebut. Daftar dari proses-proses yang menunggu peralatan I/O tertentu disebut dengan device queue . Tiap peralatan memiliki device queue -nya masing-masing. Gambar 3-4 .
Gambar 3-4. Device Queue

http://bebas.vlsm.org/v06/Kuliah/SistemOperasi/BUKU/SistemOperasi/img/4-4.png
Penjadwalan proses dapat direpresentasikan secara umum dalam bentuk diagram antrian, seperti yang ditunjukkan oleh Gambar 3-5. Setiap kotak segi empat menunjukkan sebuah antrian. Dua tipe antrian menunjukan antrian yang siap dan seperangkat device queues . Lingkaran menunjukkan sumber daya yang melayani antrian, dan tanda panah mengindikasikan alur dari proses-proses yang ada dalam sistem.
Gambar 3-5. Diagram Antrian

http://bebas.vlsm.org/v06/Kuliah/SistemOperasi/BUKU/SistemOperasi/img/4-5.png
Sebuah proses baru pertama-tama diletakkan dalam ready queue . Proses tersebut menunggu di dalam ready antrian sampai dia dipilih untuk eksekusi, atau dengan kata lain di- dispatched . Begitu proses tersebut dialokasikan ke CPU dan sedang berjalan, beberapa kemungkinan di bawah ini dapat terjadi:
  • Proses tersebut mengeluarkan permintaan I/O, lalu ditempatkan dalam sebuah antrian I/O
  • Proses tersebut dapat membuat sub proses yang baru dan menunggu untuk di-terminasi
  • Proses tersebut dapat dikeluarkan secara paksa dari CPU, sebagai hasil dari suatu interupsi, dan diletakkan kembali dalam ready queue
Pada dua kemungkinan pertama (proses meminta I/O atau membuat sub proses baru), proses berganti keadaan dari waiting state menjadi ready state , lalu diletakkan kembali dalam ready queue . Proses akan meneruskan siklus ini sampai dia di-terminasi , yaitu saat dimana proses tersebut dikeluarkan dari seluruh antrian yang ada dan memiliki PCB-nya sendiri dan seluruh sumber daya yang dia gunakan dialokasikan kembali.

Scheduler

Sebuah proses berpindah-pindah di antara berbagai penjadwalan antrian seumur hidupnya. Sistem operasi harus memilih dan memproses antrian-antrian ini berdasarkan kategorinya dengan cara tertentu. Oleh karena itu, proses seleksi ini harus dilakukan oleh scheduler yang tepat.
Dalam sistem batch , seringkali proses yang diserahkan lebih banyak daripada yang dapat dilaksanakan dengan segera. Proses-proses ini disimpan pada suatu mass-storage device (semacam disk), dimana proses tersebut disimpan untuk eksekusi di lain waktu. Long-term scheduler , atau job scheduler , memilih proses dari tempat ini dan mengisinya ke dalam memori. Sedangkan short-term scheduler , atau CPU scheduler , hanya memilih proses yang sudah siap untuk melakukan eksekusi, dan mengalokasikan CPU untuk proses tersebut.
Hal yang cukup jelas untuk membedakan kedua jenis scheduler ini adalah frekuensi dari eksekusinya. Short-term scheduler harus memilih proses baru untuk CPU sesering mungkin. Sebuah proses dapat mengeksekusi hanya dalam beberapa milidetik sebelum menunggu permintaan I/O. Seringkali, short-term scheduler mengeksekusi paling sedikit sekali setiap 100 milidetik. Karena durasi waktu yang pendek antara eksekusi-eksekusi tersebut, short-term scheduler seharusnya cepat. Jika memerlukan waktu 10 mili detik untuk menentukan suatu proses eksekusi selama 100 mili detik, maka 10/(100 + 10) = 9 persen dari CPU sedang digunakan (atau terbuang) hanya untuk pekerjaan penjadwalan.
Long-term scheduler , pada sisi lain, mengeksekusi jauh lebih jarang. Mungkin ada beberapa menit waktu yang dibutuhkan untuk pembuatan proses baru dalam sistem. Long-term scheduler mengontrol degree of multiprogramming (jumlah proses dalam memori). Jika degree of multiprogramming stabil, maka tingkat rata-rata penciptaan proses harus sama dengan tingkat rata rata proses meninggalkan sistem. Maka dari itu long-term scheduler mungkin dipanggil hanya ketika suatu proses meninggalkan sistem. Karena interval yang lebih panjang antara eksekusi, long-term scheduler dapat menggunakan waktu yang lebih lama untuk menentukan proses mana yang harus dipilih untuk dieksekusi.
Sangat penting bagi long-term scheduler membuat seleksi yang hati-hati. Secara umum, proses dapat dibedakan atas dua macam, yaitu proses I/O bound dan proses CPU bound . Proses I/O bound adalah proses yang lebih banyak menghabiskan waktunya untuk mengerjakan I/O dari pada melakukan komputasi. Proses CPU-bound , di sisi lain, jarang melakukan permintaan I/O, dan menggunakan lebih banyak waktunya untuk melakukan komputasi. Oleh karena itu, long-term scheduler harus memilih gabungan 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 short-term scheduler 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 seimbang.Sistem dengan kinerja yang terbaik akan memiliki kombinasi yang baik antara proses CPU bound dan I/O bound .
Pada sebagian sistem, long-term scheduler bisa jadi tidak ada atau kerjanya sangat minim. Sebagai contoh, sistem time-sharing seperti UNIX sering kali tidak memiliki long-term scheduler . Stabilitas sistem-sistem seperti 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 scheduler tambahan, yaitu medium-term scheduler . Scheduler ini digambarkan pada Gambar 3-6. Ide utama atau kunci dari scheduler ini terkadang akan menguntungkan untuk memindahkan proses dari memori (dan dari pengisian aktif dari CPU), dan akibatnya degree of multiprogramming akan berkurang. Di kemudian waktu, proses dapat dibawa kembali dalam memori dan eksekusinya dapat dilanjutkan pada keadaan dimana proses itu dipindahkan tadi. Skema ini disebut swapping . Proses di- swapped out dan di- swapped in oleh scheduler ini. Swapping mungkin diperlukan untuk meningkatkan mutu penggabungan proses, atau karena perubahan dalam kebutuhan memori yang mengakibatkan memori harus dibebaskan. Swapping dibahas dalam bagian berjudul Penukaran di Bab 5.
Gambar 3-6. Medium-term Scheduler

http://bebas.vlsm.org/v06/Kuliah/SistemOperasi/BUKU/SistemOperasi/img/4-6.png

Context Switch

Mengganti CPU ke proses lain memerlukan penyimpanan keadaan dari proses lama dan mengambil keadaan dari proses yang baru. Hal ini dikenal dengan sebutan context switch . Context switch sebuah proses direpresentasikan dalam PCB dari suatu proses; termasuk nilai dari CPU register, status proses (bisa dilihat pada Gambar 3-7)dan informasi manajemen memori. Ketika context switch terjadi, kernel menyimpan data dari proses lama ke dalam PCB nya dan mengambil data dari proses baru yang telah terjadwal untuk berjalan. Waktu context switch adalah murni overhead , karena sistem melakukan pekerjaan yang tidak begitu berarti selama melakukan pengalihan. Kecepatannya bervariasi dari mesin ke mesin, bergantung pada kecepatan memori, jumlah register yang harus di-copy, dan ada tidaknya instruksi khusus (seperti instruksi tunggal untuk mengisi atau menyimpan seluruh register). Tingkat kecepatan umumnya berkisar antara 1 sampai 1000 mikro detik.
Gambar 3-7. Context Switch

http://bebas.vlsm.org/v06/Kuliah/SistemOperasi/BUKU/SistemOperasi/img/4-3.png
Waktu context switch sangat begantung pada dukungan perangkat keras. Sebagai contoh, prosesor seperti UltraSPARC menyediakan beberapa set register. Sebuah proses context switch hanya memasukkan perubahan pointer ke set register yang ada saat itu. Tentu saja, jika proses aktif yang ada lebih banyak daripada proses yang ada pada set register, sistem menggunakan bantuan untuk meng-copy data register dari dan ke memori, sebagaimana sebelumnya. Semakin kompleks suatu sistem operasi, semakin banyak pekerjaan yang harus dilakukan selama context switch . Bisa dilihat pada Bab Memori, teknik managemen memori tingkat lanjut dapat mensyaratkan data tambahan untuk diganti dengan tiap data. Sebagai contoh, ruang alamat dari proses yang ada saat itu harus dijaga sebagai ruang alamat untuk proses yang akan dikerjakan berikutnya. Bagaimana ruang alamat dijaga, berapa banyak pekerjaan dibutuhkan untuk menjaganya, tergantung pada metode managemen memori dari sistem operasi. Akan kita lihat pada Bab Memori, context switch terkadang bisa menyebabkan bottleneck , dan programmer menggunakan struktur baru (threads) untuk menghindarinya kapan pun memungkinkan.


Interaksi Proses

Proses yang dijalankan pada suatu sistem operasi dapat bekerja secara bersama-sama ataupun sendiri saja. Bagian sebelum ini telah menjelaskan mengenai konsep proses dan bagaimana penjadwalan proses itu. Disini kita akan melihat bagaimana hubungan antara proses-proses itu.

Proses yang Kooperatif

Proses yang bersifat concurrent bekerja sama dengan proses lain. Proses itu kooperatif jika mereka dapat saling mempengaruhi. Kerja sama antar proses itu penting karena beberapa alasan :
  • Pembagian informasi : Beberapa proses dapat mengakses beberapa data yang sama.
  • Kecepatan komputasi : Tugas yang dijalankan dapat berjalan dengan lebih cepat jika tugas tersebut dipecah-pecah menjadi beberapa sub bagian dan dieksekusi secara paralel dengan sub bagian yang lain. Peningkatan kecepatan ini dapat dilakukan jika komputer tersebut mempunyai beberapa elemen pemrosesan, seperti CPU atau jalur I/O.
  • Modularitas : Akan lebih mudah untuk mengatur tugas yang kompleks jika tugas tersebut dipecah menjadi beberapa sub bagian, kemudian mempunyai proses atau thread yang berbeda untuk menjalankan setiap sub bagian.
  • Kenyamanan : User bisa dengan mudah mengerjakan sesuatu yang berbeda dalam waktu yang sama. Contohnya satu user dapat mengetik, mengedit, dan mencetak suatu halaman tertentu secara bersamaan.
Kerja sama antar proses membutuhkan suatu mekanisme yang memperbolehkan proses-proses untuk mengkomunikasikan data dengan yang lain dan meng- synchronize kerja mereka sehingga tidak ada yang saling menghalangi. Salah satu cara proses dapat saling berkomunikasi adalah Interprocess Communication (IPC) yang akan dijelaskan lebih lanjut di bagian berikut.

Masalah Produser/Konsumer

Produser membuat suatu informasi yang dapat dibagi dengan proses lainnya. Konsumer menghabiskan data yang dibuat oleh produser. Misalnya program cetak memproduksi karakter yang dipakai oleh printer .
Masalah yang biasanya dihadapi oleh produser dan konsumer adalah bagaimana caranya mensinkronisasikan kerja mereka sehingga tidak ada yang saling mengganggu. Salah satu contoh bagaimana masalah ini dapat terjadi adalah Bounded Buffer Problem .
Solusi pembagian memori untuk Bounded Buffer Problem diterangkan dengan program sebagai berikut :
import java.util.*;

public class BoundedBuffer {

    public BoundedBuffer() {
        // buffer diinisialisasikan kosong
        count   = 0;
        in      = 0;
        out     = 0;

        buffer = new Object[BUFFER_SIZE];
    }

    // produser memanggil method ini
    public void enter( Object item ) {
        while ( count == BUFFER_SIZE )
        ; // tidak melakukan apa-apa

        // menambahkan suatu item ke dalam buffer
        ++count;
        buffer[in]  = item;
        in  = ( in + 1 ) % BUFFER_SIZE;

        if ( count == BUFFER_SIZE )
            System.out.println( "Producer Entered " +
            item + " Buffer FULL" );
        else
            System.out.println( "Producer Entered " +
            item + " Buffer Size = " + count );
    }

    // konsumer memanggil method ini  
    public Object remove() {
        Object item ;

        while ( count == 0 )
        ; // tidak melakukan apa-apa
    
        // menyingkirkan suatu item dari buffer
        --count;
        item  = buffer[out];
        out   = ( out + 1 ) % BUFFER_SIZE;

        if ( count == 0 )
        System.out.println( "Consumer consumed " +
        item + " Buffer EMPTY" );
        else
        System.out.println( "Consumer consumed " +
        item + " Buffer Size = " +count );

        return item;
    }

    public static final int NAP_TIME = 5;
    private static final int BUFFER_SIZE = 5;

    private volatile int count;
    private int in;     // arahkan ke posisi kosong selanjutnya
    private int out;        // arahkan ke posisi penuh selanjutnya
    private Object[] buffer;
}
    
Buffer adalah tempat penyimpanan data dimana produser mengisinya dan konsumer mengosongkan buffer tersebut. Jika buffer kosong, konsumer harus menunggu, dan ketika buffer penuh, produser harus menunggu. Disinilah produser harus bekerja sama dengan konsumer. Konsumer harus menunggu sampai ada barang yang diproduksi.
Program dibawah ini menggambarkan proses yang dijalankan oleh produser untuk Bounded Buffer Problem
//Producer.java
import java.util.*;

public class Producer extends Thread {
    public Producer(BoundedBuffer b) {
        buffer = b;
    }
    public void run() {
        Date message;
        while (true) {
           int sleeptime = 
             (int) (BoundedBuffer.NAP_TIME * Math.random() );
           System.out.println("Producer sleeping for " 
             + sleeptime + " seconds");
       
           try { sleep(sleeptime*1000); } 
           catch(InterruptedException e) {}
           // membuat suatu barang & memasukkannya ke buffer
           message = new Date();      
           System.out.println("Producer produced " + message);
           buffer.enter(message);
       }
    }
    private  BoundedBuffer buffer;
}
    
Program berikut menggambarkan proses yang dijalankan oleh konsumer pada Bounded Buffer Problem
// Consumer.java
 
import java.util.*;

public class Consumer extends Thread {
    public Consumer(BoundedBuffer b) {
       buffer = b;
    }
    public void run() {
       Date message;
       while (true) {
          int sleeptime = 
            (int) (BoundedBuffer.NAP_TIME * Math.random() );
          System.out.println("Consumer sleeping for " 
            + sleeptime + " seconds");
 
          try { sleep(sleeptime*1000); } 
          catch(InterruptedException e) {}
     
          // mengambil barang dari buffer
          System.out.println("Consumer wants to consume.");
          message = (Date)buffer.remove();
       }
    }  
   
    private  BoundedBuffer buffer;}
    
Masalah produser-konsumer dengan unbounded-buffer tidak menempatkan batas praktikal pada ukuran pada buffer . Konsumer harus menunggu untuk barang baru, tetapi produser dapat selalu memproduksi barang baru. Sedangkan masalah produser-konsumer bounded-buffer mengasumsikan ukuran buffer yang ditetapkan. Pada kasus ini, konsumer harus menunggu sampai buffer kosong dan produser harus menunggu sampai buffer penuh.


Hubungan Antara Proses dan Client/Server 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.
Kalau pada sub-bab sebelumnya kita banyak membahas mengenai buffer, dan lingkungan yang berbagi memori. Pada bagian ini kita lebih banyak membahas teknik komunikasi antara proses melalui kirim(send) dan terima (recive) yang biasa dikenal sebagai IPC.
Selain itu pada bagian ini kita akan menyingung sedikit mengenai client/server proses. Beberapa topik yang akan dibahas adalah Java RMI (Remote Method Invocation) dan RPC (Remote Procedure Call). Yang keduanya juga menggunakan mekanisme komunikasi IPC, namun menggunkan sistem yang terdistribusi yang melibatkan jaringan. Pada bagian ini juga akan dibahas mengenai infrastruktur dasar jaringan yaitu socket.

Hubungan Antara Proses

Proses yang Kooperatif

Proses yang bersifat simultan (concurrent) dijalankan pada sistem operasi dapat dibedakaan menjadi yaitu proses independen 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 4 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 mengijinkan 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 parallel.
import java.util.*;

public class BoundedBuffer {
    public BoundedBuffer() {
        // buffer diinisialisasikan kosong
        count   = 0;
        in      = 0;
        out     = 0;

        buffer = new Object[BUFFER_SIZE];
     }

     // produser memanggil method ini
     public void enter( Object item ) {
        while ( count == BUFFER_SIZE )
            ; // do nothing
        // menambahkan suatu item ke dalam buffer
        ++count;
        buffer[in]  = item;
        in  = ( in + 1 ) % BUFFER_SIZE;
        if ( count == BUFFER_SIZE )
            System.out.println( "Producer Entered " +
                item + " Buffer FULL" );
        else
            System.out.println( "Producer Entered " +
                item + " Buffer Size = " + count );
    }

    // consumer memanggil method ini  
    public Object remove() {
        Object item ;
        while ( count == 0 )
            ; // do nothing
        // menyingkirkan suatu item dari buffer
        --count;
        item  = buffer[out];
        out   = ( out + 1 ) % BUFFER_SIZE;
        if ( count == 0 )
            System.out.println( "Consumer consumed " +
              item + " Buffer EMPTY" );
        else
            System.out.println( "Consumer consumed " +
              item + " Buffer Size = " +count );
        return item;
    }
    public static final int NAP_TIME = 5;
    private static final int BUFFER_SIZE = 5;
    private volatile int count;
    private int in; // arahkan ke posisi kosong selanjutnya
    private int out;    // arahkan ke posisi penuh selanjutnya
    private Object[] buffer;
}
        
Sebuah produsen proses membentuk informasi yang dapat digunakan oleh konsumen proses. Sebagai contoh sebuah cetakan program yang membuat banyak karakter yang diterima oleh driver pencetak. Untuk memperbolehkan produser dan konsumer proses agar dapat berjalan secara terus menerus, kita harus menyediakan sebuah item buffer yang dapat diisi dengan proses produser dan dikosongkan oleh proses konsumer. Proses produser dapat memproduksi sebuah item ketika konsumer sedang mengkonsumsi item yang lain. Produser dan konsumer harus dapat selaras. Konsumer harus menunggu hingga sebuah item diproduksi.

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 megijinkan 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 2 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.
Jika dua buah proses ingin berkomonikasi, misalnya proses P dan proses Q, mereka harus mengirim pesan atau menirima pesan dari satu ke yang lainnya. Jalur ini dapat diimplentasikan dengan banyak cara, namun kita hanya akan memfokuskan pada implementasi logiknya saja, bukan implementasi fisik(seperti shared memory, hardware bus, atau jaringan).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.

Penamaan

Proses-proses yang ingin dikomunikasikan harus memiliki sebuah cara untuk memilih satu dengan yang lain. Mereka dapat menggunakan komunikasi langsung / tidak langsung.
Komunikasi 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 2 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.
Kerugian dari kedua cara yang disebutkan diatas adalah adanya kebatasan modularitas, merubah nama proses mungkin mengharuskan kita untuk merubah semua definisi proses yang lain. Semua referensi kepada nama yang lama harus ditemukan.
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 setipap 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 2 proses.
  • Diantara setiap pasang proses komunikasi, mungkin terdapat link yang berbeda-beda, dimana setiap link berhubungan pada satu mailbox.
Misalkan terdapat proses P1, P2 dan P3 yang semuanya share mailbox. Proses P1 mengirim pesan ke A, ketika P2 dan P3 masing-masing mengeksekusi sebuah kiriman dari A. Proses mana yang akan menerima pesan yang dikirim P1?. Jawabannya tergantung dari jalur yang kita pilih :

  • Mengijinkan sebuah link berasosiasi dengan paling banyak 2 proses.
  • Mengijinkan paling banyak 1 proses pada suatu waktu untuk mengeksekusi hasil kiriman (receive operation).
  • Mengijinkan sistem untuk memilih secara mutlak proses mana yang akan menerima pesan (apakah itu P2 atau P3 tetapi tidak keduanya, tidak akan menerima pesan). Sistem mungkin mengidentifikasi penerima kepada pengirim.
Mailbox mungkin dapat dimiliki oleh sebuah proses atau sistem operasi. Jika mailbox dimiliki oleh proses, maka kita mendefinisikan antara pemilik (yang hanya dapat menerima pesan melalui mailbox) dan pengguna dari mailbox (yang hanya dapat mengirim pesan ke mailbox). Selama setiap mailbox mempunyai kepemilikan yang unik, maka tidak akan ada kebingungan tentang siapa yang harus menerima pesan dari mailbox. Ketika proses yang memiliki mailbox tersebut diterminasi, mailbox akan hilang. Semua proses yang mengirim pesan ke mailbox ini diberi pesan bahwa mailbox tersebut tidak lagi ada.
Dengan kata lain, mempunyai mailbox sendiri yang independent, dan tidak melibatkan proses yang lain. Maka sistem operasi harus memiliki mekanisme yang mengijinkan proses untuk melakukan hal-hal dibawah ini :
  • Membuat mailbox baru.
  • Mengirim dan menerima pesan melalui mailbox.
  • Menghapus mailbox.

Proses yang membuat mailbox pertama kali secara default akan memiliki mailbox tersebut. Untuk pertama kali, pemilik adalah satu-satunya proses yang dapat menerima pesan melalui mailbox ini. Bagaimanapun, kepemilikan dan hak menerima pesan mungkin dapat dialihkan ke proses lain melalui sistem pemanggilan.

Sinkronisasi

Komunikasi antara proses membutuhkan place by calls untuk mengirim dan menerima data primitive. Terdapat design 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.

Contoh Produser-Konsumer

Sekarang kita mempunyai solusi problem produser-konsumer yang menggunakan penyampaian pesan. Produser dan konsumer akan berkomunikasi secara tidak langsung menggunakan mailbox yang dibagi. Buffer menggunakan java.util.Vector class sehingga buffer mempunyai kapasitas tak terhingga. Dan send() dan read() method adalah nonblocking. Ketika produser memproduksi suatu item, item tersebut diletakkan ke mailbox melalui send() method. Konsumer menerima item dari mailbox menggunakan receive() method. Karena receive() nonblocking, consumer harus mengevaluasi nilai dari Object yang direturn dari receive(). Jika null, mailbox kosong.
import java.util.*;
    
    public class Producer extends Thread {
        private MessageQueueueue mbox;
        public Producer( MessageQueueueue m ) {
            mbox  = m;
        }
        public void run() {
            Date message;
            while ( true ) {
                int sleeptime   = ( int ) ( Server.NAP_TIME * Math.random() );
                System.out.println( "Producer sleeping for " + sleeptime + " seconds" );
                try {
                    Thread.sleep(sleeptime*1000);
                } catch( InterruptedException e ) {}
                message = new Date();
                System.out.println( "Producer produced " + message );
                mbox.send( message );
            }
        }
    }
      
import java.util.*;
    
    public class Consumer extends Thread {
        private MessageQueueueue mbox;
        public Consumer( MessageQueueueue m ) {
            mbox  = m;
    }
        
    public void run() {
        Date message;
        while ( true ) {
            int sleeptime = ( int ) ( Server.NAP_TIME * Math.random());
            System.out.println("Consumer sleeping for " + sleeptime + " seconds" );
            try {
                Thread.sleep( sleeptime * 1000 );
            } catch( InterruptedException e ) {}
            message = ( Date ) mbox.receive();
            if ( message != null )
                System.out.println("Consumer consume " + message );
            }
        }
    }
      
Kita memiliki dua aktor di sini, yaitu Produser dan Konsumer. Produser adalah thread yang menghasilkan waktu (Date) kemudian menyimpannya ke dalam antrian pesan. Produser juga mencetak waktu tersebut di layer (sebagai umpan balik bagi kita). Konsumer adalah thread yang akan mengakses antrian pesan untuk mendapatkan waktu (date) itu dan tak lupa mencetaknya di layer. Kita menginginkan supaya konsumer itu mendapatkan waktu sesuatu dengan urutan sebagaimana produser menyimpan waktu tersebut. Kita akan menghadapi salah satu dari dua kemungkinan situasi di bawah ini :

  • Bila p1 lebih cepat dari c1, kita akan memperoleh output sebagai berikut :

    . . .
    Consumer consume Wed May 07 14:11:12 ICT 2003
    Consumer sleeping for 3 seconds
    Producer produced Wed May 07 14:11:16 ICT 2003
    Producer sleeping for 4 seconds
    // p1 sudah mengupdate isi mailbox waktu dari Wed May 07 
    // 14:11:16 ICT 2003 ke Wed May 07 14:11:17 ICT 2003,   
    // padahal c1 belum lagi mengambil waktu Wed May 07 14:11:16
    Producer produced Wed May 07 14:11:17 ICT 2003
    Producer sleeping for 4 seconds
    Consumer consume Wed May 07 14:11:17 ICT 2003
    Consumer sleeping for 4 seconds  
    // Konsumer melewatkan waktu Wed May 07 14:11:16
    . . .
                  
  • Bila p1 lebih lambat dari c1, kita akan memperoleh keluaran seperti berikut :

    . . .
    Producer produced Wed May 07 14:11:11 ICT 2003
    Producer sleeping for 1 seconds
    Consumer consume Wed May 07 14:11:11 ICT 2003
    Consumer sleeping for 0 seconds
    // c1 sudah mengambil isi dari mailbox, padahal p1 belum 
    // lagi megupdate isi dari mailbox dari May 07 14:11:11
    // ICT 2003 ke May 07 14:11:12 ICT 2003, c1 mendapatkan 
    // waktu Wed May 07 14:11:11 ICT 2003 dua kali.
    Consumer consume Wed May 07 14:11:11 ICT 2003
    Consumer sleeping for 0 seconds
    Producer sleeping for 0 seconds
    Producer produced Wed May 07 14:11:12 ICT 2003 
    . . .
                  
Situasi di atas dikenal dengan race conditions. Kita dapat menghindari situasi itu dengan mensinkronisasikan aktivitas p1 dan c1 (sehubungan dengan akses mereka ke mailbox. Proses tersebut akan didiskusikan pada chapter yang akan datang (chapter 5).

Mailbox

import java.util.*;

public class MessageQueue {
    private Vector q;
    public MessageQueue() {
        q = new Vector();
    }
    
    // Mengimplementasikan pengiriman nonblocking
    public void send( Object item ) {
        q.addElement( item );
    }
    
    // Mengimplementasikan penerimaan nonblocking
    public Object receive() {
        Object item;
        if ( q.size() == 0 ) {
            return null;
        }
        else {
            item = q.firstElement();
            q.removeElementAt(0);
            return item;
        }
    }
}
      

  1. Menunggu sampai batas waktu yang tidak dapat ditentukan sampai terdapat ruang kosong pada mailbox.
  2. Menunggu paling banyak n milidetik.
  3. Tidak menunggu, tetapi kembali (return) secepatnya.
  4. Satu pesan dapat diberikan kepada sistem operasi untuk disimpan, walaupun mailbox yang dituju penuh. Ketika pesan dapat disimpan pada mailbox, pesan akan dikembalikan kepada pengirim(sender). Hanya satu pesan kepada mailbox yang penuh yang dapat diundur (pending) pada suatu waktu untuk diberikan kepada thread pengirim.

Client/Server System

Dengan makin berkembangnya teknologi jaringan komputer, sekarang ini ada kecenderungan sebuah sistem yang bekerja sama menggunakan jaringan. Dalam topik ini akan kita bahas beberapa metoda komunikasi antar proses yang melibatkan jaringan komputer.

Socket

Socket adalah sebuah endpoint untuk komunikasi didalam jaringan. Sepasang proses atau thread berkomunikasi dengan membangun sepasang socket, yang masing-masing proses memilikinya. Socket dibuat dengan menyambungkan dua buah IP Address melalui port tertentu. Secara umum socket digunakan dalam client/server system, dimana sebuah server akan menunggu client pada port tertentu. Begitu ada client yang mengkontak server maka server akan menyetujui komunikasi dengan client melalui socket yang dibangun.

Server dan Thread

Pada umumnya sebuah server melayani client secara konkuren, oleh sebab itu dibutuhkan thread yang masing-masing thread melayani clientnya masing-masing. Jadi server akan membentuk thread baru begitu ada koneksi dari client yang diterima (accept)
Server menggunakan thread apabila client melakukan koneksi, sehingga server memiliki tingkat reabilitas yang tinggi. Pada sistem yang memiliki banyak pemakai sekaligus thread mutlak dibutuhkan, karena setiap pemakai sistem pasti menginginkan respon yang baik dari server.

Java Socket

Java menyediakan dua buah tipe socket yang berbeda dan sebuah socket spesial. Semua soket ini tersedia dalam paket jaringan, yang merupakan paket standar java. Berikut ini soket yang disediakan oleh java :
  • Connection-Oriented (TCP) socket, yang diimplementasikan pada kelas java.net.Socket
  • Connectionless Socket (UDP), yang diimplentasikan oleh kelas java.net.DatagramSocket
  • Dan yang terakhir adalah java.net.MulticastSocket, yang merupakan perluasan (extended) dari Socket UDP. Tipe socket ini memiliki kemampuan untuk mengirim pesan kebanyak client sekaligus (Multicast), sehingga baik digunakan pada sistem yang memiliki jenis layanan yang sama.
...
public WebServer(int port, String docRoot) throws IOException
{
 this.docRoot =  new File(docRoot);
 if(!this.docRoot.isDirectory())
 {
  throw new IOException(docRoot + " bukan direktori.");
 }
 System.out.println("Menghidupkan Web server ");
 System.out.println("port : " + port);
 System.out.println("docRoot : " + docRoot);
 try
 {
  serverSocket = new ServerSocket(port);
 }
 catch(IOException ioe)
 {
  System.out.println("Port sudah digunakan");
  System.exit(1);
 }
}
                                                                                                                             
                                                                                                                             
public void run()
{
 while(true)
 {
  try{
   System.out.println("Menanti connection ... ");
   Socket socket = serverSocket.accept();
   String alamatClient = socket.getInetAddress().getHostAddress();
                                                                                                                             
   System.out.println("Menangkap connection dari " + alamatClient);
   InputStream inputStream = socket.getInputStream();
   InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
   BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                                                                                                                             
   OutputStream outputStream = socket.getOutputStream();
   ... 
        
Potongan kode diatas memperlihatkan teknik yang digunakan oleh java untuk membuka socket (pada kasus ini server socket). Selanjutnya server dapat berkomunikasi dengan clientnya menggunakan InputStream untuk menerima pesan dan OutputStream untuk mengirim pesan.

RPC (Remote Procedure Call)

Remote Procedure Call (RPC) adalah sebuah metoda yang memungkinkan kita untuk mengakses sebuah prosedur yang berada di komputer lain. Untuk bisa melakukan ini sebuah komputer (server) harus menyediakan layanan remote prosedur. Pendekatan yang dilakuan adalah, sebuah server membuka socket, menunggu client yang meminta proseduryang disediakan oleh server.
Remote Procedure Call masih menggunakan cara primitive dalam pemrograman, yaitu menggunakan paradigma procedural programming. Hal itu membuat kita sulit ketika menyediakan banyak remote procedure.
RPC menggunakan soket untuk berkomunikasi dengan proses lainnya. Pada beberapa sistem (Seperti SUN) RPC secara default sudah terinstall kedalam sistemnya, biasanya RPC ini digunakan untuk administrasi sistem. Sehingga seorang administrator jaringan bisa mengakses sistemnya dan memanajemen sistemnya dari mana saja, selama sistemnya terhubung kejaringan.

Java RMI

Pendekatan kedua yang akan kita bahas adalah RMI (Remote Method Invocation), sebuah teknik pemanggilan method remote yang lebih secara umum lebih baik daripada RPC. RMI menggunakan paradigma pemrograman berorientasi objek (OOP).Dengan RMI memungkinkan kita untuk mengirim objek sebagai parameter dari remote method. Dengan dibolehkannya program java memanggil method pada remote objek, RMI membuat user dapat mengembangkan aplikasi java yang terdistribusi pada jaringan
Untuk membuat remote method bisa diakses RMI mengimplementasikan remote object menggukan stub dan skleton. Stub bertindak sebagai proxy disisi client, yaitu yang menghubungkan client dengan skleton yang berada disisi server. Stub yang ada disisi client bertanggung jawab untuk membungkus nama method yang akan diakses, dan parameternya, hal ini biasa dikenal dengan marshalling. Stub mengirim paket yang sudah dibungkus ini ke server dan akan di buka (unmarshalling) oleh skleton. Skleton akan menerima hasil keluaran yang telah diproses oleh method yang dituju, lalu akan kembali dibungkus (marshal) dan dikirim kembali ke client yang akan diterima oleh stub dan kembali dibuka paketnya (unmarshall).
Pembuatan Remote Objek
Untuk membuat remote objek kita harus mendefinisikan semua method yang akan kita sediakan pada jaringan, setelah itu dapat digunakan RMI compiler untuk membuat stub dan skleton. Setelah itu kita harus mem-binding remote objek yang kita sediakan kedalam sebuah RMI registry. Setelah itu client dapat mengakses semua remote method yang telah kita sediakan menggunkan stub yang telah dicompile menggunakan RMI compiler terebut.
Akses ke Remote Objek
Sekali objek didaftarkan ke server, client dapat mengakses remote object dengan menjalankan Naming.lookup() method. RMI menyediakan url untuk pengaksesan ke remote objek yaitu rmi://host/objek, dimana host adalah nama server tempat kita mendaftarkan remote objek dan objek adalah parameter yang kita gunakan ketika kita memanggil method Naming.rebind(). Client juga harus menginstall RMISecurityManager untuk memastikan keamanan client ketika membuka soket kejaringan.
Java memilki sistem security yang baik sehingga user dapat lebih nyaman dalam melakukan komunikasi pada jaringan. Selain itu java sudah mendukung pemorograman berorientasi object, sehingga pengembangan software berskala besar sangat dimungkinkan dilakukan oleh java. RMI sendiri merupakan sistem terdistribusi yang dirancang oleh SUN pada platfrom yang spesifik yaitu Java, apabila anda tertarik untuk mengembangkan sistem terdistribusi yang lebih portable dapat digunakan CORBA sebagai solusi alternatifnya.



 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes