Sabtu, 27 Februari 2016

Introduction to Web Programming with Java

Pemrograman Web :
Java masih salah satu bahasa yang paling kuat dan populer untuk web dan pengembangan aplikasi yang digunakan saat ini. Programmer dengan yayasan yang baik dalam pemrograman Java juga umumnya memiliki kemampuan untuk memahami bahasa berbasis java seperti JavaScript, membuat pengembang java lebih dicari di industri pengembangan web. Java dapat digunakan untuk desain web responsif, untuk pengembangan aplikasi yang berdiri sendiri dan untuk pengembangan aplikasi android. Jika Anda ingin mendapatkan kepala mulai dan belajar cara membuat program Anda di Jawa sekarang, kemudian bergabung lebih dari empat ribu mahasiswa dan mendaftarkan diri di Pemrograman Java untuk Pemula . Kursus ini dirancang untuk pemula mutlak dan tidak membutuhkan pengalaman pemrograman sebelumnya apapun. Hal ini dirancang untuk menunjukkan Anda bagaimana program di Jawa pada kecepatan Anda sendiri sehingga Anda akan coding seperti pro pada akhir kursus. Kursus ini menawarkan 59 pelajaran yang akan memperkenalkan Anda ke dunia pemrograman Java. Ini akan mengajarkan Anda konsep dasar, alat dan fungsi yang Anda butuhkan untuk membangun program java yang berfungsi penuh. Hal ini juga akan menunjukkan cara untuk bekerja di lingkungan berorientasi objek dan apa objek pemrograman berorientasi memerlukan. Kursus ini akan mengajarkan Anda cara menginstal JDK dan cara menginstal Eclipse IDE.
Tutorial ini akan menunjukkan cara untuk membuat kelas Java pertama Anda untuk pengembangan aplikasi web. Kami akan menggunakan JDK dan IDE gerhana untuk pengembangan sehingga Anda perlu memiliki JDK dan Eclipse diinstal pada PC Anda.

Mulai Eclipse dan Buat Proyek Java New

Mulai Eclipse dan kemudian pilih ruang kerja Anda ingin bekerja di. Ruang kerja adalah hanya folder file di komputer Anda di mana Eclipse akan menyimpan file proyek. Setelah Eclipse telah dimulai, maka Anda perlu untuk membuat proyek Java baru sehingga Eclipse dapat membuat dan merakit semua file proyek yang Anda butuhkan untuk proyek tersebut.
Buat proyek Java baru pilih "file" dan kemudian pilih "baru" dan kemudian pilih "New Java Project" dari menu utama. Ini akan membuka jendela proyek baru yang akan memungkinkan Anda untuk nama proyek Java pertama Anda.
Java1
Untuk tutorial ini, saya telah diberi nama proyek "Myfirstproject". Anda kemudian dapat pergi untuk memilih pilihan Anda dari JRE atau Java Runtime Environment. Untuk keperluan tutorial ini kita akan meninggalkan pengaturan ini pada pengaturan default.Klik "Finish" dan Eclipse akan membuat semua file saja yang Anda butuhkan untuk aplikasi.
Setelah Anda memiliki program baru dan file yang Anda butuhkan, Anda perlu membuat paket baru untuk proyek Anda. Konvensi penamaan paket berikut konvensi penamaan situs sehingga kita akan memanggil paket org.myfirstproject.tutorial kami. Eclipse akan membuat paket untuk Anda secara otomatis:
Java2
Dalam tutorial ini kita akan membuat satu kelas dengan beberapa metode dan konstruktor. Ini membentuk tulang punggung dari setiap program. Kami tidak akan membuat program yang sebenarnya itu sendiri.
Untuk belajar pemrograman Java, yang Programming Java untuk Pemula - The Ultimate Java Tutorial tentu saja mengandung 115 pelajaran dan lebih dari 10 jam dari konten untuk membantu Anda menjadi master Java. Anda akan mempelajari semua tentang bahasa pemrograman berorientasi objek dan bagaimana mereka bekerja. Kursus ini akan mengajarkan Anda tentang kelas, objek, loop dan banyak lagi. Kursus ini dirancang untuk programmer pemula sampai dengan kecepatan cepat dan untuk membantu programmer berpengalaman meningkatkan keterampilan Java mereka. Pelatihan visual yang ditawarkan oleh kursus akan membantu siswa menyimpan informasi dan mempercepat pembelajaran mereka.

Membuat Kelas untuk Java Anda Pengembangan Aplikasi Web

Menciptakan kelas dalam Eclipse cukup sederhana. klik kanan paket Anda dalam folder paket dan pilih "baru" dan kemudian pilih "kelas". Ini akan membuka wizard yang akan memungkinkan Anda untuk membuat kelas baru. Kelas pertama akan kita buat akan "teman" jadi masukkan teman ke dalam nama kelas dan kemudian meninggalkan pengaturan di default dan klik finish. Ini akan membuat kelas yang disebut "teman" untuk Anda dan kode untuk kelas ini secara otomatis akan terbuka di panel tengah:
Java3
Sekarang kita telah menciptakan kelas, kita perlu menciptakan bidang dalam kelas. Bidang adalah elemen dalam kelas yang menyimpan data. Bidang dalam "teman" kelas akan menjadi lapangan sederhana yang menyimpan nama teman kita. Karena nama tersebut akan disimpan sebagai karakter abjad jenis lapangan adalah string. Untuk menambah lapangan hanya menyatakan string disebut "fname" di kelas. Berikut adalah kode untuk melakukan itu:
Java4
Penting untuk diingat bahwa semua nama adalah case sensitif di Jawa sehingga Anda perlu memastikan bahwa Anda diingat bahwa ketika penamaan kelas dan bidang.
Sekarang kita memiliki kelas, kita perlu menambahkan konstruktor untuk menginisialisasi kelas. Untuk membuat konstruktor untuk menginisialisasi kelas semua yang perlu kita lakukan adalah membuat nilai awal untuk variabel kita buat:
java5
Memperhatikan editor. Eclipse secara otomatis memeriksa untuk memformat dan kesalahan coding. Jika Anda klik pada kesalahan di sisi kiri dari kode, maka Eclipse akan menawarkan berbagai solusi untuk memperbaiki masalah dalam kode Anda.
Jika Anda ingin mempelajari lebih lanjut tentang kelas dan objek Java, atau bagaimana mendefinisikan variabel di Jawa, Jawa 101: Java Programming untuk Pemula menawarkan pengenalan yang luar biasa untuk pemrograman Java untuk pemula. Kursus ini dimulai dengan mengajar Anda apa objek pemrograman berorientasi dan kemudian bergerak ke sintaks Java dasar. Kursus ini berisi 37 pelajaran yang akan mengajarkan Anda bagaimana menyiapkan lingkungan pengembangan java dengan benar. Anda kemudian akan belajar bagaimana bekerja dengan berbagai variabel termasuk bilangan bulat, variabel floating point, fungsi matematika dan string. Kursus ini akan mengajarkan Anda apa yang conditional sederhana dan kompleks dan bagaimana untuk membuat mereka dan itu akan menunjukkan cara untuk membuat sementara, dilakukan sementara dan untuk loop. Anda juga akan belajar untuk bekerja dengan array standar dan multidimensi. Kursus ini akan menunjukkan bagaimana kode objek ArrayList dan kemudian akan mengajarkan Anda bagaimana untuk membuat fungsi sederhana dan kustom untuk program Anda.

Tambahkan Metode untuk Kelas

Sekarang kita memiliki kelas, kita perlu menambahkan beberapa metode untuk kelas. Untuk tutorial ini kita akan menambahkan satu sederhana "pengambil" dan metode "setter" untuk kelas. getter mendapatkan data dari kelas dan elemen setter memungkinkan Anda untuk mengatur informasi untuk kelas, misalnya, jika Anda memiliki input pengguna dan ingin menyimpan masukan itu untuk kelas Anda. Kami akan menggunakan set sangat sederhana dari kode untuk mendapatkan nama dan menetapkan nama. Lihatlah kode yang dibutuhkan di bawah ini:
java6
The getFname akan mengembalikan nama teman-teman dan metode setFname akan menetapkan nama yang diberikan sama dengan fname. Perhatikan bahwa elemen nama set berisi parameter dalam kurung dan nama get tidak memerlukan parameter.Kami sekarang memiliki kelas lengkap yang berisi bidang, konstruktor dan metode dan kami siap untuk menggunakan kelas ini.
Untuk mempelajari lebih lanjut tentang kelas dan parameter, mendaftar untuk Java Fundamentals I dan II saja sekarang. Kursus ini memiliki 149 ceramah yang akan mengajarkan Anda prinsip-prinsip Java inti termasuk bagaimana menggunakan kelas, objek dan metode dalam program Anda. Ini mencakup teknik OOP kunci dan bagaimana pewarisan dan polimorfisme karya. Ini juga mencakup konsep Jawa seperti penanganan eksepsi dan desain antarmuka pengguna.

Gunakan Scrapbook Membuat Kode

Anda dapat menggunakan fitur memo dalam Eclipse untuk menulis dan menguji kode Java Anda atau Anda dapat menggunakan mode uji JUnit. Fitur ini sangat bagus untuk menulis dan menguji kode pada saat yang sama. Untuk membuat halaman lembar memo untuk proyek Anda, pilih proyek dari menu utama, pilih "baru", "java" dan kemudian "Lain". Pilih "Java Run / Debug" dan pilih halaman lembar memo. Halaman lembar memo baru ditambahkan ke proyek Anda:
Java7
Anda dapat menguji elemen dan kode dalam lembar memo dan uji JUnit halaman untuk memastikan kode Anda bekerja dengan benar saat Anda mengembangkan program Anda.
Sekarang bahwa Anda memiliki kelas dengan metode, Anda memiliki dasar-dasar untuk sebuah program. Untuk pelatihan lebih lanjut tentang pengembangan Java, mendaftar untuk Pengenalan Java Pelatihan Co urse sekarang. Kursus ini menawarkan 205 kuliah dan lebih dari 20 jam dari konten untuk membantu Anda benar-benar mengambil keahlian pemrograman Java Anda ke tingkat berikutnya. Anda akan belajar untuk menulis aplikasi mandiri di Jawa menggunakan Eclipse IDE. Anda akan mempelajari semua tentang konsep-konsep pemrograman berorientasi objek dan bagaimana mereka bekerja. Kursus ini akan mengajarkan Anda tentang kelas Java, objek dan fitur lainnya dan Anda akan belajar bagaimana untuk membuat kelas dengan baik scoped menggunakan paket. Anda akan belajar menulis pengecualian penanganan kesalahan untuk program Anda untuk memastikan mereka berjalan lancar tanpa kesalahan. Anda akan belajar untuk membaca dan menulis data output stream dan Anda akan belajar menggunakan Java koleksi kerangka kerja untuk bekerja dengan kelompok-kelompok benda.

Senin, 18 Januari 2016

CONCURRENCY & DEADLOCK

PENGERTIAN CONCURRENCY

Concurensy merupakan landasan umum perancangan sistem operasi. Proses-proses disebut concurrensy jika proses-proses (lebih dari satu proses) berada pada saat yang sama. Proses-proses yang mengalami kongkuren dapat berdiri sendiri (independen) atau dapat saling berinteraksi, sehingga membutuhkan sinkronisasi atau koordinasi proses yang baik. Untuk penanganan kongkuren, bahasa pemograman saat ini telah memiliki mekanisme kongkurensi dimana dalam penerapannya perlu dukungan sistem operasi dimana bahasa berada.
Proses yang kongkuren ini mempunyai beberapa masalah yang harus diselesaikan, yaitu :
  1. Mutual Exclusion
               Mutual Exclusion adalah suatu cara yang menjamin jika ada sebuah proses yang menggunakan variabel atau berkas yang sama (digunakan juga oleh proses lain), maka proses lain akan dikeluarkan dari pekerjaan yang sama. Jadi, Mutual Exclusive terjadi ketika hanya ada satu proses yang boleh memakai sumber daya, dan proses lain yang ingin memakai sumber daya tersebut harus menunggu hingga sumber daya tadi dilepaskan atau tidak ada proses yang memakai sumber daya tersebut.
Pengertian lain Mutual exclusion adalah jaminan hanya satu proses yang mengakses sumber daya pada suatu interval waktu tertentu, sedangkan proses lain dilarang mengerjakan hal yang sama -> contoh : sumberdaya printer hanya bisa diakses 1 proses, tidak bisa bersamaan -> sumber daya ini disebut sumber daya kritis dan bagian program yang menggunakan sumber daya kritis disebut critical region / section. Hanya satu program pada satu saat yang diijinkan masuk ke critical region. Pemrogram tidak dapat bergantung pada sistem operasi untuk memahami dan memaksakan batasan ini, karena maksud program tidak dapat diketahui oleh sistem operasi. Hanya saja, system operasi menyediakan layanan (system call) yang bertujuan untuk mencegah proses lain masuk ke critical section yang sedang digunakan proses tertentu. Pemrograman harus menspesifikasikan bagian-bagian critical section, sehingga sistem operasi akan menjaganya. Pentingnya mutual exclusion adalah jaminan hanya satu proses yang mengakses sumber daya pada suatu interval waktu.
Pemaksaan atau pelanggaran mutual exclusion menimbulkan :
  • Deadlock
  • Starvation
  • Deadlock (buntu)
  • Sinkronisasi
  1. Syncronization
Sinkronisasi adalah proses pengaturan jalannya beberapa proses pada saat yang bersamaan. Tujuan utama sinkronisasi adalah menghindari terjadinya inkonsitensi data karena pengaksesan oleh beberapa proses yang berbeda (mutual exclusion) serta untuk mengatur urutan jalannya proses-proses sehingga dapat berjalan dengan lancar dan terhindar dari deadlock dan starvation. Sinkronisasi umumnya dilakukan dengan bantuan perangkat sinkronisasi. Penyelesaian terhadap masalah ini sangat penting karena perkembangan teknologi sistem komputer menuju ke sistem multiprocessing, terdistribusi dan paralel yang mengharuskan adanya proses-proses kongkuren.
  •    Concurrency Deadlock
      Deadlock adalah suatu kondisi dimana dua proses atau lebih saling menunggu proses yang lain untuk melepaskan resource yang sedang dipakai. Karena beberapa proses itu saling menunggu, maka tidak terjadi kemajuan dalam kerja proses-proses tersebut. Deadlock adalah masalah yang biasa terjadi ketika banyak proses yang membagi sebuah resource yang hanya boleh dirubah oleh satu proses saja dalam satu waktu. Di kehidupan nyata, deadlock dapat digambarkan dalam gambar berikut.Padagambar diatas, deadlock dianalogikan sebagai dua antrian mobil yang akan menyeberangi jembatan. Dalam kasus diatas, antrian di sebelah kiri menunggu antrian kanan untuk mengosongkan jembatan (resource), begitu juga dengan antrian kanan. Akhirnya tidak terjadi kemajuan dalam kerja dua antrian tersebut.Misal ada proses A mempunyai resource X, proses B mempunyai resource Y. Kemudian kedua proses ini dijalankan bersama, proses A memerlukan resource Y dan proses B memerlukanresource X, tetapi kedua proses tidak akan memberikan resource yang dimiliki sebelum proses dirinya sendiri selesai dilakukan. Sehingga akan terjadi tunggu-menunggu.
  • Starvation
      Starvation adalah kondisi yang biasanya terjadi setelah deadlock. Proses yang kekurangan resource (karena terjadi deadlock) tidak akan pernah mendapat resourceyang dibutuhkan sehingga mengalami starvation (kelaparan). Namun, starvation juga bisa terjadi tanpa deadlock. Hal ini ketika terdapat kesalahan dalam sistem sehingga terjadi ketimpangan dalam pembagian resouce. Satu proses selalu mendapat resource, sedangkan proses yang lain tidak pernah mendapatkannya. Ilustrasi starvation tanpadeadlock di dunia nyata dapat dilihat di bawah ini.Pada gambar diatas, pada antrian kanan terjadi starvation karena resource (jembatan) selalu dipakai oleh antrian kiri, dan antrian kanan tidak mendapatkan giliran.
a,  Penanganan Deadlock
Terdapat beberapa cara dalam menangani deadlock, yang secara umumnya ada 4 cara untuk menangani keadaan deadlock, yaitu:
  1. Pengabaian. Maksud dari pengabaian dari kata tersebut yaitu sistem mengabaikan terjadinya deadlock dan berpura-pura tidak mengetahui jika deadlock telah terjadi. Dalam penanganan dengan cara ini dikenal dengan istilah ostrich algorithm. Pelaksanaan algoritma ini yaitu sistem tidak mendeteksi adanya deadlock dan secara otomatis mematikan proses atau program yang mengalami deadlock. Kebanyakan sistem operasi yang ada mengadaptasi cara ini untuk menangani keadaan deadlock. Cara penanganan dengan mengabaikan deadlock banyak digunakan karena masalah deadlock tersebut jarang terjadi dan relatif rumit dan kompleks untuk diselesaikan. Sehingga biasanya diabaikan oleh sistem untuk kemudian diselesaikan masalahnya oleh user atau pengguna dengan cara melakukan terminasi dengan Ctrl+Alt+Del atau melakukan restart terhadap komputer.
  2. Pencegahan. Penanganan ini dengan cara mencegah munculnya salah satu karakteristik deadlock. Penanganan ini dilaksanakan pada saat deadlock belum terjadi pada sistem. Yang terutama memastikan agar sistem tidak akan pernah berada pada kondisi deadlock.
  3. Penghindaran. Menghindari keadaan deadlock. Bagian yang perlu diperhatikan yaitu bahwa antara pencegahan dan penghindaran adalah berbeda. Pencegahan lebih mengarah kepada mencegah salah satu dari empat karakteristik terjadinya deadlock, sehingga deadlock pun tidak terjadi. Sedangkan penghindaran merupakan memprediksi apakah tindakan yang diambil oleh sistem, dalam kaitannya dengan permintaan proses akan sumber daya, dapat mengakibatkan terjadi deadlock.
  4. Pendeteksian dan Pemulihan. Pada sistem yang sedang berada pada kondisi deadlock, tindakan yang harus diambil adalah tindakan yang bersifat represif. Tindakan tersebut adalah dengan mendeteksi adanya deadlock, kemudian memulihkan kembali sistem. Proses pendeteksian akan menghasilkan informasi apakah sistem sedang deadlock atau tidak serta proses mana yang mengalami deadlock.
  5. Metode untuk Mengatasinya
Metode untuk megatasinya adalah sebagai berikut:
  1. Masalah Mutual Eksklusif Kondisi ini tidak dapat dilarang, jika aksesnya perlu bersifat spesial untuk satu proses, maka hal ini harus di dukung oleh kemampuan sistem operasi. Jadi diusahakan agar tidak mempergunakan kondisi spesial tersebut sehingga sebisa mungkin deadlock bisa dihindari.
  2. Masalah Kondisi Menunggu dan Memegang Penanggulangan deadlock dari kondisi ini lebih baik dan menjanjikan, asalkan kita bisa menahan proses yang memegang sumber daya untuk tidak menunggu sumber daya laun, kita bisa mencegah deadlock. Caranya ialah dengan meminta semua sumber daya yang ia butuhkan sebelum proses berjalan. Tetapi masalahnya sebagian proses tidak mengetahui keperluannya sebelum ia berjalan. Jadi untuk mengatasi hal ini, kita dapat menggunakan algoritma bankir. Yang mengatur hal ini bisa sistem operasi ataupun sebuah protokol. Hasil yang bisa terjadi ialah sumber daya lebih di-spesifikasi dan kelaparan sumber daya, atau proses yang membutuhkan sumber daya yang banyak harus menunggu sekian lama untuk mendapat sumber daya yang dibutuhkan.
  3. Masalah tidak ada Preemption.Hal ketiga ialah jangan sampai ada preemption pada sumber daya yang telah dialokasikan. Untuk memastikan hal ini, kita bisa menggunakan protokol. Jadi jika sebuah proses meminta sumber daya yang tidak dapat dipenuhi saat itu juga, maka proses mengalami preempted. Atau dengan kata lain ada sumber daya dilepaskan dan diberikan ke proses yang menunggu, dan proses itu akan menunggu sampai kebutuhan sumber dayanya dipenuhi. Atau kita harus mencek sumber daya yang dimaui oleh proses di cek dahulu apakah tersedia. Jika ya maka kita langsung alokasikan, sedangkan jika tidak tersedia maka kita melihat apakah ada proses lain yang menunggu sumber daya juga. Jika ya, maka kita ambil sumber daya dari proses yang menunggu tersebut dan memberikan pada proses yang meminta tersebut. Jika tidak tersedia juga, maka proses itu harus menunggu. Dalam menunggu, beberapa dari sumber dayanya bisa saja di preempted, tetapi jika ada proses yang memintanya. Cara ini efektif untuk proses yang menyimpan dalam memory atau register.
  4. Masalah Circular Wait Masalah ini dapat ditangani oleh sebuah protokol yang menjaga agar sebuah proses tidak membuat lingkaran siklus yang bisa mengakibatkan deadlock

PENGERTIAN DEADLOCK

Deadlock adalah keadaan dimana 2 atau lebih proses saling menunggu meminta resources untuk waktu yang tidak terbatas lamanya. Analoginya seperti pada kondisi jalan raya dimana terjadi kemacetan parah. Deadlock adalah efek samping dari sinkronisasi, dimana satu variabel digunakan oleh 2 proses. Deadlock bisa digambarkan sebagai berikut :
Kejadian Deadlock selalu tidak lepas dari sumber daya, bahwa hampir seluruhnya merupakan
masalah sumber daya yang digunakan bersama-sama. Oleh karena itu, kita juga perlu tahu tentang
jenis sumber daya, yaitu: sumber daya dapat digunakan lagi berulang-ulang dan sumber daya yang
dapat digunakan dan habis dipakai atau dapat dikatakan sumber daya sekali pakai.
Sumber daya ini tidak habis dipakai oleh proses mana pun.Tetapi setelah proses berakhir, sumber
daya ini dikembalikan untuk dipakai oleh proses lain yang sebelumnya tidak kebagian sumber daya ini.
Contohnya prosesor, Channel I/O, disk, semaphore. Contoh peran sumber daya jenis ini pada
terjadinya Deadlock ialah misalnya sebuah proses memakai disk A dan B, maka akan terjadi Deadlock
jika setiap proses sudah memiliki salah satu disk dan meminta disk yang lain. Masalah ini tidak hanya
dirasakan oleh pemrogram tetapi oleh seorang yang merancang sebuah sistem operasi. Cara yang
digunakan pada umumnya dengan cara memperhitungkan dahulu sumber daya yang digunakan oleh
proses-proses yang akan menggunakan sumber daya tersebut. Contoh lain yang menyebabkan
Deadlock dari sumber yang dapat dipakai berulang-ulang ialah berkaitan dengan jumlah proses yang
memakai memori utama.
Ada empat kondisi yang dapat menyebabkan terjadinya deadlock. Keempat kondisi tersebut tidak
dapat berdiri sendiri, namun saling mendukung.
1. Mutual exclusion. Hanya ada satu proses yang boleh memakai sumber daya, dan proses lain
yang ingin memakai sumber daya tersebut harus menunggu hingga sumber daya tadi dilepaskan
atau tidak ada proses yang memakai sumber daya tersebut.
2. Hold and wait. Proses yang sedang memakai sumber daya boleh meminta sumber daya lagi
maksudnya menunggu hingga benar-benar sumber daya yang diminta tidak dipakai oleh proses
lain, hal ini dapat menyebabkan kelaparan sumber daya sebab dapat saja sebuah proses tidak
mendapat sumber daya dalam waktu yang lama.
3. No preemption. Sumber daya yang ada pada sebuah proses tidak boleh diambil begitu saja oleh
proses lainnya. Untuk mendapatkan sumber daya tersebut, maka harus dilepaskan terlebih
dahulu oleh proses yang memegangnya, selain itu seluruh proses menunggu dan
mempersilahkan hanya proses yang memiliki sumber daya yang boleh berjalan.
4. Circular wait. Kondisi seperti rantai, yaitu sebuah proses membutuhkan sumber daya yang
dipegang proses berikutnya.
  • Strategi mengatasi Deadlock :
Add beberapa cara untuk menanggulangi terjadinya deadlock, diantaranya adalah:
a. Mengabaikan masalah deadlock.
b. Mendeteksi dan memperbaiki
c. Penghindaran yang terus menerus dan pengalokasian yang baik dengan menggunakan protokol
untuk memastikan sistem tidak pernah memasuki keadaan deadlock. Yaitu dengan deadlock
avoidance sistem untuk mendata informasi tambahan tentang proses mana yang akan meminta
dan menggunakan sumber daya.
d. Pencegahan yang secara struktur bertentangan dengan empat kondisi terjadinya deadlock
dengan deadlock prevention sistem untuk memastikan bahwa salah satu kondisi yang penting
tidak dapat menunggu.
  • Mengabaikan Masalah Deadlock
Untuk memastikan sistem tidak memasuki deadlock, sistem dapat menggunakan pencegahan
deadlock atau penghindaran deadlock. Penghindaran deadlock membutuhkan informasi tentang
sumber daya yang mana yang akan suatu proses meminta dan berapa lama akan digunakan. Dengan
informasi tersebut dapat diputuskan apakah suatu proses harus menunggu atau tidak. Hal ini
disebabkan oleh keberadaan sumber daya, apakah ia sedang digunakan oleh proses lain atau tidak.
Metode ini lebih dikenal dengan Algoritma Ostrich. Dalam algoritma ini dikatakan bahwa untuk
menghadapi Deadlock ialah dengan berpura-pura bahwa tidak ada masalah apa pun. Hal ini seakanakan
melakukan suatu hal yang fatal, tetapi sistem operasi Unix menanggulangi Deadlock dengan
cara ini dengan tidak mendeteksi Deadlock dan membiarkannya secara otomatis mematikan program
sehingga seakan-akan tidak terjadi apa pun. Jadi jika terjadi Deadlock, maka tabel akan penuh,
sehingga proses yang menjalankan proses melalui operator harus menunggu pada waktu tertentu dan
mencoba lagi.
  • Mendeteksi dan Memperbaiki
Caranya ialah dengan cara mendeteksi jika terjadi deadlock pada suatu proses maka dideteksi sistem
mana yang terlibat di dalamnya. Setelah diketahui sistem mana saja yang terlibat maka diadakan
proses untuk memperbaiki dan menjadikan sistem berjalan kembali.
Jika sebuah sistem tidak memastikan deadlock akan terjadi, dan juga tidak didukung dengan
pendeteksian deadlock serta pencegahannya, maka kita akan sampai pada kondisi deadlock yang
dapat berpengaruh terhadap performance sistem karena sumber daya tidak dapat digunakan oleh
proses sehingga proses-proses yang lain juga terganggu. Akhirnya sistem akan berhenti dan harus
direstart.
Hal-hal yang terjadi dalam mendeteksi adanya Deadlock adalah:
• Permintaan sumber daya dikabulkan selama memungkinkan.
• Sistem operasi memeriksa adakah kondisi circular wait secara periodik.
• Pemeriksaan adanya deadlock dapat dilakukan setiap ada sumber daya yang hendak digunakan
oleh sebuah proses.
• Memeriksa dengan algoritma tertentu.
Ada beberapa jalan untuk kembali dari Deadlock, yaitu:
  • Lewat Preemption
Dengan cara untuk sementara waktu menjauhkan sumber daya dari pemakainya, dan memberikannya
pada proses yang lain. Ide untuk memberi pada proses lain tanpa diketahui oleh pemilik dari sumber
daya tersebut tergantung dari sifat sumber daya itu sendiri. Perbaikan dengan cara ini sangat sulit
atau dapat dikatakan tidak mungkin. Cara ini dapat dilakukan dengan memilih korban yang akan
dikorbankan atau diambil sumber dayanya untuk sementara, tentu saja harus dengan perhitungan
yang cukup agar waktu yang dikorbankan seminimal mungkin. Setelah kita melakukan preemption
dilakukan pengkondisian proses tersebut dalam kondisi aman. Setelah itu proses dilakukan lagi dalam
kondisi aman tersebut.
  • Lewat Melacak Kembali
Setelah melakukan beberapa langkah preemption, maka proses utama yang diambil sumber dayanya
akan berhenti dan tidak dapat melanjutkan kegiatannya, oleh karena itu dibutuhkan langkah untuk
kembali pada keadaan aman dimana proses masih berjalan dan memulai proses lagi dari situ. Tetapi
untuk beberapa keadaan sangat sulit menentukan kondisi aman tersebut, oleh karena itu umumnya
dilakukan cara mematikan program tersebut lalu memulai kembali proses. Meski pun sebenarnya
lebih efektif jika hanya mundur beberapa langkah saja sampai deadlock tidak terjadi lagi. Untuk
beberapa sistem mencoba dengan cara mengadakan pengecekan beberapa kali secara periodik dan
menandai tempat terakhir kali menulis ke disk, sehingga saat terjadi deadlock dapat mulai dari tempat
terakhir penandaannya berada.
  • Lewat mematikan proses yang menyebabkan Deadlock
Cara yang paling umum ialah mematikan semua proses yang mengalami deadlock. Cara ini paling
umum dilakukan dan dilakukan oleh hampir semua sistem operasi. Namun, untuk beberapa sistem,
kita juga dapat mematikan beberapa proses saja dalam siklus deadlock untuk menghindari deadlock
dan mempersilahkan proses lainnya kembali berjalan. Atau dipilih salah satu korban untuk
melepaskan sumber dayanya, dengan cara ini maka masalah pemilihan korban menjadi lebih selektif,
sebab telah diperhitungkan beberapa kemungkinan jika si proses harus melepaskan sumber dayanya.
Kriteria pemilihan korban ialah:
• Yang paling jarang memakai prosesor
• Yang paling sedikit hasil programnya
• Yang paling banyak memakai sumber daya sampai saat ini
• Yang alokasi sumber daya totalnya tersedkit
• Yang memiliki prioritas terkecil
  • Menghindari Deadlock
Pada sistem kebanyakan permintaan terhadap sumber daya dilakukan sebanyak sekali saja. Sistem
sudah harus dapat mengenali bahwa sumber daya itu aman atau tidak (tidak terkena deadlock),
setelah itu baru dialokasikan. Ada dua cara yaitu:
1. Jangan memulai proses apa pun jika proses tersebut akan membawanya pada kondisi deadlock,
sehingga tidak mungkin terjadi deadlock karena pada saat akan menuju deadlock, proses sudah
dicegah.
2. Jangan memberi kesempatan pada suatu proses untuk meminta sumber daya lagi jika
penambahan ini akan membawa kita pada suatu keadaan deadlock.
Jadi diadakan dua kali penjagaan, yaitu saat pengalokasian awal, dijaga agar tidak deadlock dan
ditambah dengan penjagaan kedua saat suatu proses meminta sumber daya, dijaga agar jangan
sampai terjadi deadlock. Pada sistem deadlock avoidance (penghindaran) dilakukan dengan cara
memastikan bahwa program memiliki maksimum permintaan. Dengan kata lain cara sistem ini
memastikan terlebih dahulu bahwa sistem akan selalu dalam kondisi aman. Baik mengadakan
permintaan awal atau pun saat meminta permintaan sumber daya tambahan, sistem harus selalu
berada dalam kondisi aman.
SOAL DEADLOCK
 
Nomor 1 :
 
a
JAWAB :
 
Ada 3 buah proses yaitu proses A, B, dan C.
 
Lalu Saldo di Bank ada = 3+2+2+3 = 10
 
Lalu kita tentukan proses tersebut safe / unsafe dan cari RB dengan cara:
 
  • proses A butuh 9 tapi baru punya 3, jadi 9-3=6
  • proses B butuh 4 tapi baru punya 2, jadi 4-2=2
  • proses C butuh 7 tapi baru punya 2, jadi 7-2=5
Lalu Bank meminjamkan kepada proses yang paling memungkinkan untuk dipinjami yaitu adalah B karena memiliki selisih saldo paling kecil :
 
  • Bank pinjamin proses B sebanyak 2, jadi saldo di Bank = 3-2 = 1;
  • B balikin 4 ke Bank, jadi saldo di Bank = 1+4 = 5;
  • Bank pinjamin proses C sebanyak 5, jadi saldo di Bank = 5-5 = 0;
  • C balikin 7 ke Bank, jadi saldo di Bank = 0+7 = 7;
  • Bank pinjamin proses A sebanyak 6, jadi saldo di Bank = 7-6 = 1;
  • A balikin 9 ke Bank, jadi saldo di Bank = 1+9 = 10;
  • Jadi Proses di atas Safe dan RB = 10
 
Nomor 2 :
 
2
JAWAB :