Sabtu, 28 Mei 2022
Minggu, 06 Maret 2022
Metodologi Penelitian Ilmu Komputer
Minat Bidang Penelitian Pemanfaatan IoT dibidang Pertanian
Internet saat ini telah berkembang pesat di dunia, salah satunya di Indonesia. Pada tahun 2021 pengguna internet di Indonesia telah mencapai 202,6 juta, terjadi peningkatan 15% dari tahun sebelumnya. Perkembangan internet yang pesat dapat dimanfaatkan untuk menerapkan Internet of Things (IoT) dalam menunjang perekonomian masyarakat, contohnya seperti Pertanian.
Gagasan penerapan IoT pada sektor pertanian sudah seharusnya untuk direalisasikan karena membawa dampak yang sangat positif untuk para petani. Dalam penerapannya, IoT dapat membantu petani melalui sensor-sensor untuk memantau perkembangan kesuburan tanah, pengendalian hama atau penyakit. Selain itu, petani dapat melakukan penajdwalan penyiraman, pemupukan dan penyemprotan pestisida otomatis dengan memanfaatkan IoT. Diharapkan jika penerapan IoT pada bidang pertanian dapat meningkatkan produktivitas hasil pertanian yang dapat meningkatkan perekonomian masyarakat.
Rabu, 05 Januari 2022
IMPLEMENTASI ALGORITMA BRANCH AND BOUND
Pengertian Algoritma Branch and Bound
Algoritma B&B (Branch and Bound) adalah salah satu algoritma yang digunakan untuk pencarian jalur. Contoh yang dibahas kali ini adalah mengenai pencarian jalur yang melalui semua titik dengan biaya terendah.
Algoritma ini memiliki 2 prinsip, yaitu:
- Algoritma ini akan melakukan perhitungan secara rekursif, akan memecah masalah kedalam masalah-masalah kecil, sambil tetap menghitung nilai terendah / terbaik. Proses ini dinamakan branching
- Jika branching diterapkan secara sendirian, maka hasilnya akan tetap mencari setiap kemungkinan yang ada. Untuk meningkatkan performa, algoritma ini akan melakukan pencatatan biaya minimum sebagai bound dalam setiap perhitungan, sehingga untuk calon hasil jawaban yang diperkirakan akan melebihi bound akan dibuang karena tidak mungkin akan mencapai nilai terbaik
Implementasi Algoritma Branch and Bound pada permasalahan Knapsack Problem
Rabu, 22 Desember 2021
Implementasi Algoritma Divide and Conquer pada Sorting dan Searching
Implementasi Algoritma Divide and Conquer pada Sorting dan Searching
Nama : Ilham Baihaqi
NPM : 20312152
Kelas : IF 20 E
Algoritma Divide and Conquer adalah algoritma yang sangat populer pada di dunia ilmu komputer. Algoritma Divide and Conquer adalah algoritma yang memiliki prinsip untuk membagi-bagi permasalahan yang terlalu besar menjadi beberapa atau sub-masalah yang lebih kecil sehingga menjadi mudah untuk diselesaikan. sub-sub masalah yang telah dibagi menjadi beberapa bagian yang lebih kecil kemudian akan dicari solusinya, setelah mendapatkan solusinya, solusi dari sub-sub masalah tersebut akan digabung menjadi satu untuk menyelesaikan masalah awal atau masalah utama.
Algoritma Sorting atau algoritma pengurutan adalah suatu langkah yang sistematis dan berurutan. atau algoritma untuk meletakkan kumpulan data ke dalam suatu urutan tertentu berdasarkan satu atau beberapa "kunci" pada tiap-tiap elemen.
Algoritma Searching atau algoritma pencarian adalah algoritma yang menerima suatu argumen "kunci" dan dengan menggunakan suatu langkah-langkah tertentu akan mencari "kunci" tersebut. Setelah proses pencarian dilakukan, akan diperoleh salah satu dari dua kemungkinan, yaitu data berhasil ditemukan, atau data tidak ditemukan.
Divide and Conquer Pada Sorting
1. Selection Sort
Selection Sort adalah sebuah teknik pengurutan dengan cara mencari nilai tertinggi / terendah pada suatu kumpulan data (array) kemudian menempatkan nilai tersebut pada tempatnya. Algoritma ini dibagi menjadi dua berdasarkan urutan datanya, yaitu : dari kecil ke besar (Ascending), dan dari besar ke kecil (Descending). Algoritma ini pada dasarnya memilih nilai yang terbesar/terkecil, dan menukarkan nilai tersebut dengan nilai disebelah kiri/kanan pada data. Dan kemudian langkah tersebut diulang secara terus menerus hingga data tersusun. Algoritma ini tidak efektif bila digunakan pada array yang jumlah nya besar karena kompleksitas dari algoritma ini adalah O(x2) dimana n adalah jumlah item.
Divide and Conquer Pada Searching
1. Binary Search
Algoritma Binary Search atau algoritma pencarian Biner, salah satu teknik pencarian yang dilakukan secara berulang kali membagi setengah dari jumlah data yang dicari sehingga dapat memperkecil lokasi pencarian. Dengan begitu dapat mempercepat waktu pencarian. Jika ditemukan kecocokan pada suatu data dengan data yang dicari maka pencarian akan selesai, jika tidak, pencarian akan terus dilakukan hingga akhir dari bagian data tersebut. Algoritma ini cocok untuk mencari pada jumlah data yang banyak, karena kompleksitas algoritma ini adalah O(log n) dimana n adalah jumlah item. Tetapi sebelum menggunakan algoritma ini, pastikan data sudah terurut. Jika tidak maka pencarian tidak bisa dilakukan.
2. Linear Search
Algoritma Linear Search atau pencarian linear, adalah salah satu teknik dari pencarian data, teknik ini mencari data dengan mengecek semua data secara satu per satu. Apabila ditemukan kecocokan pada data dengan data yang dicari, maka pencarian akan selesai. Jika tidak, pencarian akan terus dilakukan hingga data terakhir. Algoritma ini tidak efektif jika digunakan pada data yang besar karena kompleksitas algoritma ini adalah O(n) dimana n adalah jumlah item. Dan jika data yang dicari berada pada bagian paling akhir dari kumpulan data tersebut (array), maka pencarian tetap harus dilakukan dari yang paling awal, sehingga membutuhkan waktu yang lama.
Rabu, 15 Desember 2021
SEJARAH, DEFINISI DAN CARA KERJA ALGORITMA DIVIDE AND CONQUER
Nama : Ilham Baihaqi
Kelas : IF 20 E
NPM : 20312152
Sejarah, Definisi dan Cara Kerja Algoritma Divide and Conquer
A. Sejarah Algoritma Divide and Conqueror
Algoritma Divide And Conquer ditemukan oleh seorang ilmuwan Rusia bernama Anatolii Alexeevich Karatsuba pada tahun 1960. Pada mulanya, Anatolii menemukan algoritma yang lebih cepat untuk mengalihkan dua buah bilangan bulat yang besar dengan kompleksitas O(nlog 3).
B. Definisi Algoritma Divide and Conqueror
Algoritma Divide and Conquer merupakan algoritma yang sangat populer di dunia Ilmu Komputer. Divide and Conquer merupakan algoritma yang berprinsip memecah-mecah permasalahan yang terlalu besar menjadi beberapa bagian kecil sehingga lebih mudah untuk diselesaikan. Langkah-langkah umum algoritma Divide and Conquer :
Divide : Membagi masalah menjadi beberapa upa-masalah yang memiliki kemiripan dengan masalah semula namun berukuran lebih kecil ( idealnya berukuran hampir sama ).
Conquer : Memecahkan ( menyelesaikan ) masing-masing upa-masalah ( secara rekursif ).
Combine : Menggabungkan solusi masing-masing upa-masalah sehingga membentuk solusi masalah semula.
Objek masalah yang di bagi adalah masukan (input) atau instances yang berukuran n: tabel (larik), matriks, dan sebagainya, bergantung pada masalahnya. Tiap-tiap upa-masalah mempunyai karakteristik yang sama (the same type) dengan karakteristik masalah asal, sehingga metode Divide and Conquer lebih natural diungkapkan dalam skema rekursif. Sesuai dengan karakteristik pembagian dan pemecahan masalah tersebut, maka algoritma ini dapat berjalan baik pada persoalan yang bertipe rekursif (perulangan dengan memanggil dirinya sendiri). Dengan demikian, algoritma ini dapat diimplementasikan dengan cara iteratif ( perulangan biasa ), karena pada prinsipnya iteratif hampir sama dengan rekursif. Salah satu penggunaan algoritma ini yang paling populer adalah dalam hal pengolahan data yang bertipe array ( elemen larik ). Mengapa ? Karena pengolahan array pada umumnya selalu menggunakan prinsip rekursif atau iteratif. Penggunaan secara spesifik adalah untuk mencari nilai minimal dan maksimal serta untuk mengurutkan elemen array. Dalam hal pengurutan ini ada empat macam algoritma pengurutan yang berdasar pada algoritma Divide and Conquer, yaitu merge sort, insert sort, quick sort, dan selection sort. Merge sort dan Quick sort mempunyai kompleksitas algoritma O(n ²log n). Hal ini lebih baik jika dibandingkan dengan pengurutan biasa dengan menggunakan algoritma brute force.
C. Cara Kerja Algoritma Divide and Conqueror
Divide : artinya membagi masalah menjadi beberapa sub-masalah yang memiliki masalah dengan permasalahan semula namun lebih kecil dari sebelumnya atau sama dengan sebelumnya.
Conquer : artinya menyelesaikan masing-masing sub-masalah secara rekursif.
Combine : artinya menggabungkan solusi dari masing-masing sub-masalah sehingga dapat menyelesaikan masalah utama atau masalah awal.
Algoritma ini akan membagi n input menjadi k subset input yang berbeda (1<k≤n). Dari k subset input yang berbeda akan terdapat k submasalah, setiak submasalah mempunyai solusi masing-masing. Sehingga akan diperoleh subsolusi k. Kemudian, dari subsolusi k akan diperoleh solusi yang optimal atau solusi yang diharapkan.
Jika submasalah masih dianggap terlalu besar, maka metode Divide and Conquer dapat digunakan lagi secara berulang-ulang
Sabtu, 09 Oktober 2021
Praktikum Desain Web - Javascript
Nama : Ilham Baihaqi
NPM : 20312152
Kelas : IF20E
1. The <script> tag / Demo1
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<h2>JavaScript in Body</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = "My First Javascript";
</script>
</body>
</html>
Praktikum Desain Web - CSS
Latihan CSS Mata Kuliah Praktikum Desain Web
1. Membuat Alert button
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
.btn{
border: none;
color: white;
padding: 14px 28px;
cursor :pointer;
}
.sukses {background-color: #4caf50;} /*Green*/
.sukses:hover{background-color: #46a049;}
.info{background-color: #2196f3;} /*Blue*/
.info:hover {background: #0b7dda;}
.peringatan{background-color: #ff9800;} /*Orange*/
.peringatan:hover{background: #e68a00;}
.bahaya{background-color: #f44336;} /*Red*/
.bahaya:hover{background: #da190b;}
.semula{background-color: #e7e7e7; color: black;} /*Gray*/
.semula:hover{background:#ddd;}
</style>
</head>
<body>
<h1> Tombol Peringatan</h1>
<button class="btn sukses">Sukses</button>
<button class="btn info">Info</button>
<button class="btn peringatan">Peringatan</button>
<button class="btn bahaya">Bahaya</button>
<button class="btn Semula">Semula</button>
</body>
</html>
Hasil :
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
input[type=text],select{width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;}
input[type=submit]{width: 100%;
background-color: #4caf50;
color:white;
padding: 14 px 20px;
margin: 8px 0;
border: none;
border-radius: 4px;
cursor: pointer;
}
input[type=submit]:hover{background-color:#45a049;}
div{
border-radius: 5px;
background-color: #f2f2f2;
padding: 20px;
}
</style>
</head>
<body>
<h3>Using CSS to style an HTML Form</h3>
<div>
<form action="/action_page.php">
<label for="fname">First Name</label>
<input type="text" id="fname" name="firstname" placeholder="Your name...">
<label for="lname">Last Name</label>
<input type="text" id="lname" name="lastname" placeholder="Your last name...">
<label for="Country"></label>
<select id="country" name="country">
<option value="Australia">Australia</option>
<option value="Russia Federation">Russia Federation</option>
<option value="USA">USA</option>
</select>
<input type="submit"value="submit">
</form>
</div>
</body>
</html>
Hasil :
3. Membuat Table Navigation Bar
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
body {font-family: arial;}
ul {list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #333;
}
li {
float: left;
}
li a
{
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
li a:hover:not(.active){background-color: #111}
.active {background-color: #4caf50;}
</style>
</head>
<body>
<ul>
<li><a href="home">Home</a></li>
<li><a href="#news">News</a></li>
<li><a href="contact">Contact</a></li>
<li style="float:right"><a class="active" href="#about">About</a></li>
</ul>
Hasil :
4. Membuat Dropdown Menu
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dropdown</title>
<style>
body { font-family:arial; }
ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #333;
}
li {
float: left;
}
li a, .dropbtn {
display: inline-block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
li a:hover, .dropdown:hover, .dropbtn {
background-color: red;
}
li.dropdown {
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0,2);
z-index: 1;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
text-align: left;
}
.dropdown-content a:hover {background-color: #f1f1f1}
.dropdown:hover .dropdown-content {
display: block;
}
</style>
</head>
<body>
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#news">News</a></li>
<li class="dropdown">
<a href="javascript:void(0)" class="dropbtn">Dropdown</a>
<div class="dropdown-content">
<a href="#">Link 1</a>
<a href="#">Link 2</a>
<a href="#">Link 3</a>
</div>
</li>
</ul>
<h3>Dropdown menu inside a navigation bar</h3>
<p>hover over the dropdown link to see the dropdown menu </p>
</body>
</html>
Hasil :
Selasa, 05 Oktober 2021
Graph problems
Graf adalah konstruksi matematis abstrak yang digunakan
untuk memodelkan masalah dunia nyata dengan membagi masalah menjadi satu set
node yang terhubung. Kami menyebut setiap node sebagai simpul dan setiap
koneksi sebagai tepi. Misalnya, peta kereta bawah tanah masng-masing titik
mewakili stasiun, dan masing-masing garis mewakili rute antara dua stasiun
- Pengelompokan graf
dapat didasarkan pada ada tidaknya sisi ganda atau sisi kalang, pada jumlah
simpul,atau berdasarkan orientasi arah pada sisi.
a. Berdasarkan
ada tidaknya gelang atau sisi ganda pada suatu graph, secara umum
graf digolongkan menjadi dua jenis :
1. Graf sederhana (simple graph)Graf yang tidak mengandung
gelung maupun sisi ganda dinamakan graph sederhana. Jaringan komputer
merupakan contoh aplikasi graf sederhana.
2. Graf tak-sederhana (unsimple graph/multigraph)Graf tak sederhana
dibagi menjadi 2,yaitu graf ganda dan graf semu. Graf ganda ialah graf yang
mengandung sisi ganda. Graf semu ialah graf yang mengandung gelang.
b. Berdasarkan jumlah
simpul pada suatu graph, maka secara umum graph dapat digolongkan menjadi dua
jenis:
1. Graf Berhingga (Limited Graph)Graf berhingga adalah
graph yang jumlah simpulnya, n, berhingga.
2.Graf Tak-Berhingga (Unlimited Graph)Graf
yang jumlah simpulnya, n, tidak berhingga
banyaknya disebut graph tak-berhingga.
c. Berdasarkan orientasi
arah pada sisi, maka secara umum graph dibedakan atas 2 jenis:
1. Graph Tak-Berarah (Undirected Graph) Graph yang sisinya
tidak mempunyai orientasi arah disebut graph tak-berarah.
2. Graph Berhingga (Directed Graph) Graph yang setiap
sisinya diberikan orientasi arah disebut sebagai graph berarah..
MASALAH GRAF
1. Tingkat kerumitan
yang cukup tinggi, meskipun isi dan teorinya terlihat sederhana
2. Harus menemukan rute terpendek (contoh kasus dalam kehidupan sehari-hari: peta/gps)
SOLUSI PEMECAHAN MASALAH GRAF
Setelah memiliki beberapa masalah yang belum terpecahkan maka untuk
menemukan solusi yang tepat maka digunakanlah metode Algoritma
Greedy. Karena kemungkinan akan memperoleh hasil yang cukup baik.
* Algoritma Greedy
Algoritma Greedy adalah jenis algoritma yang menggunakan langkah
pendekatan penyelesaian masalah dengan cara membuat pilihan optimasi yang
memungkinkan memiliki nilai yang paling mendekati nilai maksimal
Kelebihan dan Kekurangan dari Algoritma Greedy
- Kekurangan : tidak akan
mendapat nilai maksimum
- Kelebihan : dapat memberikan
solusi dalam waktu yang cepat dan memiliki nilai yang mendekati nilai
maksimum
Source : https://tugasanalgo4blog.wordpress.com/2016/10/07/graph-problems/
Minggu, 04 April 2021
Proses Design dan Life Cycle Basis Data - Tugas Rangkuman Sistem Basis Data
Design and Life Cycle Database
Daur
Hidup (Life Cycle) yang Umum dari Aplikasi Basis Data :
- Systems Definition
- Database Design
- Implementation
- Loading/Data Convertion
- Konversi Aplikasi
- Testing & Validasi
- Operations
- Control & Maintenance
Daur
Hidup (Life Cycle) dari Aplikasi Basis Data :
1) Definisi Sistem
- ruang lingkup basis data
- pemakai
- aplikasi
2) Design
- logical
design à ER/EER
- physical
design untuk
suatu DBMS
3)
- Membuat basis data
- Membuat program aplikasi
- memasukkan data ke dalam basis data
- mengkonversi
file yang sudah ada ke dalam format basis data dan kemudian memasukkannya dalam basis data
5) Konversi
Aplikasi
- Semua aplikasi dari sistem sebelumnya dikonversikan ke dalam sistem basis data.
6) Testing
dan Validasi
- Sistem yang baru harus ditest dan divalidasi (diperiksa keabsahannya).
7) Operasi
- Pengoperasian basis data dan aplikasinya.
8) Monitoring dan Maintenance:
- Selama operasi, sistem dimonitor dan diperlihara. Baik data maupun program aplikasi masih dapat terus tumbuh dan berkembang.
Basis
Data biasanya merupakan salah satu bagian dari suatu sistem informasi yang
besar yang antara lain terdiri dari:
- Data
- Perangkat lunak DBMS
- Perangkat keras komputer
- Perangkat lunak dan sistem operasi komputer
- Program-program
aplikasi Pemrogram, dll.
“ Keenam phase dalam proses design
tidak perlu dilaksanakan secara mutlak, mungkin ada umpan balik antar phase
dan dalam masing-masing phase”
Sistem Operasi : Process Synchronization
Sistem Operasi : Process Synchronization
PENGERTIAN SINKRONISASI
Sinkronisasi
merupakan suatu proses pengaturan jalannya beberapa proses pada waktu yang
bersamaan untuk menyamakan waktu dan data supaya tidak terjadi inconsitensi
(ketidak konsistenan) data akibat adanya akses data secara konkuren agar
hasilnya bagus dan sesuai dengan apa yang diharapkan. Disini sinkronisasi
diperlukan agar data tersebut tetap konsisten.
Shared memory merupakan solusi ke masalah bounded-butter yang mengijinkan
paling banyak n-1 materi dalam buffer pada waktu yang sama. Suatu solusi, jika
semua N buffer digunakan tidaklah sederhana. Dimisalkan kita memodifikasi
producer-consumer code dengan menambahkan suatu variable counter, dimulai dari
0 dan masing-masing waktu tambahan dari suatu item baru diberikan kepada
buffer. Sinkronisasi merupakan “issue” penting dalam rancangan/implementasi OS
(shared resources, data, dan multitasking).
TUJUAN SINKRONISASI
Tujuan dari
sinkronisasi itu sendiri ialah untuk menghindari terjadinya inkonsistensi data
karena pengaksesan oleh beberapa proses yang berbeda serta untuk mengatur
urutan jalannya proses-proses sehinga dapat dapat berjalan dengan baik dan
sesuai dengan apa yang diharapkan.
Sama seperti yang
kita ketahui bahwa hidup saling berkaitan satu sama lain. Begitu juga
sinkronisasi pada system operasi. Jika hal ini tidak ada penopang dalam
menjalanka suatu system, maka akan menemui suatu kendala yang berakibat ketidak
konsistenan pada data, sehingga data tidak menjadi konkrun.
Manfaat Sinkronisasi
Bermanfaat untuk
menyimpan data, baik sementara atau permanen sehingga memudahkan pekerjaan.
Jadi dengan
menggunakan system pekerjaan ini anda akan lebih terbantu dan lebih efektif
karena bias menghemat waktu.
MASALAH DALAM SINKRONISASI BESERTA SOLUSINYA
1. Race Condition
Race Condition adalah situasi di mana beberapa proses mengakses dan
memanipulasi data bersama pada saat besamaan. Nilai akhir dari data bersama
tersebut tergantung pada proses yang terakhir selesai. Untuk mencegah race
condition, proses-proses yang berjalan besamaan harus di disinkronisasi.
Dalam beberapa sistem operasi, proses-proses yang berjalan bersamaan
mungkin untuk membagi beberapa penyimpanan umum, masing-masing dapat melakukan
proses baca (read) dan proses tulis (write). Penyimpanan bersama (shared
storage) mungkin berada di memori utama atau berupa sebuah berkas bersama,
lokasi dari memori bersama tidak merubah kealamian dari komunikasi atau masalah
yang muncul. Untuk mengetahui bagaimana komunikasi antar proses bekerja, mari
kita simak sebuah contoh sederhana, sebuah print spooler. Ketika sebuah proses
ingin mencetak sebuah berkas, proses tersebut memasukkan nama berkas ke dalam
sebuah spooler direktori yang khusus. Proses yang lain, printer daemon, secara
periodik memeriksa untuk mengetahui jika ada banyak berkas yang akan dicetak,
dan jika ada berkas yang sudah dicetak dihilangkan nama berkasnya dari
direktori.
2. Critical Section
Kunci untuk mencegah masalah ini dan
di situasi yang lain yang melibatkan shared memori, shared berkas, and shared
sumber daya yang lain adalah menemukan beberapa jalan untuk mencegah lebih dari
satu proses untuk melakukan proses writing dan reading kepada shared data pada
saat yang sama. Dengan kata lain kita memutuhkan mutual exclusion, sebuah jalan
yang menjamin jika sebuah proses sedang menggunakan shared berkas, proses lain
dikeluarkan dari pekerjaan yang sama. Kesulitan yang terjadi karena proses 2
mulai menggunakan variabel bersama sebelum proses 1 menyelesaikan tugasnya.
Masalah menghindari race conditions dapat juga
diformulasikan secara abstrak. Bagian dari waktu, sebuah proses sedang sibuk
melakukan perhitungan internal dan hal lain yang tidak menggiring ke kondisi
race conditions. Bagaimana pun setiap kali sebuah proses mengakses shared memory
atau shared berkas atau melakukan sesuatu yang kritis akan menggiring kepada
race conditions. Bagian dari program dimana shaed memory diakses disebut
Critical Section atau Critical Region.
Walau pun dapat mencegah race conditions, tapi tidak cukup untuk melakukan
kerjasama antar proses secara pararel dengan baik dan efisien dalam menggunakan
shared data. Kita butuh 4 kondisi agar menghasilkan solusi yang baik:
• Tidak ada dua proses secara bersamaan masuk ke dalam citical section.
• Tidak ada asumsi mengenai kecepatan atau jumlah cpu.
• Tidak ada proses yang berjalan di luar critical secion yang dapat mengeblok
proses lain.
• Tidak ada proses yang menunggu selamamya untuk masuk critical section.
Critical Section adalah sebuah segmen kode di mana sebuah proses yang mana
sumber daya bersama diakses. Terdiri dari:
1) Entry Section: kode yang digunakan untuk masuk ke dalam critical
section
2) Critical Section: Kode di mana hanya ada satu proses yang dapat
dieksekusi pada satu waktu
3) Exit Section: akhir dari critical section, mengizinkan proses lain
4) Remainder Section: kode istirahat setelah masuk ke critical section.
3. Solusi ke Masalah Critical-Section
Ada bebrapa Solusi untuk mengatasi masalah Critical Section, yaitu:
• Mutual exclution
Jika proses pi sedang mengeksekusi critical section-nya maka tidak ada proses
lain yang dapat mengeksekusi dalam critical section mereka.
• Progress
Jika tidak ada proses yang sedang dieksekusi dalam critical section dan
ada beberapa proses yang ingin masuk ke critical section mereka, maka pemilihan
proses yang akan masuk ke critical section berikutnya tidak bias ditunda.
• Bounded Waiting
Suatu keterikatan harus ada pada sejumlah proses yang diijinkan masuk ke
critical section mereka, setelah adanya proses yang meminta masuk ke critical
section dan sebelum permintaan itu diterima.
a. Asumsikan bahwa tiap proses mengeksekusi pada nonzero speed.
b. Tidak ada asumsi mengenai kecepatan relative dan n proses.
Cara-cara
memecahkan masalah
• Hanya dua proses, Po dan P1
• Struktur umum dari proses adalah Pi (proses lain Pj)
4. Bakery Algorithm
Critical section untuk n proses:
a). Sebelum memasuki critical Section-nya, proses menerima nomor pemilik nomor
terkecil memasuki critical section.
b). Jika proses Pi dan Pj menerima nomor yang sama, jika i < j, maka Pi
dilayani duluan, lainnya Pj dilayani duluan (if i< j, then Pi is served
first; else Pj is served first).
c). Skema penomoran selalu menghasilkan angka –angka yang disebutkan satu per
satu, yaitu 1,2,3,3,3,3,4,5….
5. Semaphore
Semaphore adalah pendekatan yang diajukan oleh Djikstra, dengan prinsip bahwa
dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda
sederhana. Seperti proses dapat dipaksa berhenti pada suatu saat, sampai proses
mendapatkan penanda tertentu itu. Sembarang kebutuhan koordinasi kompleks dapat
dipenuhi dengan struktur penanda yang cocok untuk kebutuhan itu.Variabel khusus
untuk penanda ini disebut semaphore.
Semaphore mempunyai dua sifat, yaitu:
a. Semaphore dapat diinisialisasi dengan nilai non-negatif.
b. Terdapat dua operasi terhadap semaphore, yaitu Down dan Up. Usulan asli yang
disampaikan Djikstra adalah operasi P dan V.
• Operasi Down
Operasi ini menurunkan nilai semaphore, jika nilai semaphore menjadi
non-positif maka proses yang mengeksekusinya diblocked. Operasi Down adalah
atomic, tidak dapat diinterupsi sebelum diselesaikan. Menurunkan nilai,
memeriksa nilai, menempatkan proses pada antrian dan memblocked sebagai
instruksi tunggal. Sejak dimulai, tidak ada proses lain yang dapat mengakses
semaphore sampai operasi selesai atau diblocked.
• Operasi Up
Operasi Up menaikkan nilai semaphore. Jika satu proses atau lebih diblocked
pada semaphore itu tidak dapat menyelesaikan operasi Down, maka salah satu
dipilih oleh system dan menyelesaikan operasi Down-nya. Urutan proses yang
dipilih tidak ditentukan oleh Djikstra, dapat dipilih secara acak. Adanya
semaphore mempermudah persoalan mutual exclusion. Skema penyelesaian mutual
exclusion mempunyai bagian sebagai berikut:
Sebelum masuk critical section, proses melakukan Down. Bila berhasil maka
proses masuk ke critical section. Bila tidak berhasil maka proses di-blocked
atas semaphore itu. Proses yang diblocked akan dapat melanjutkan kembali bila
proses yang ada di critical section keluar dan melakukan opersai up sehingga
menjadikan proses yang diblocked ready dan melanjutkan sehingga opersi Down-nya
berhasil.
6. Problem Klasik
pada Sinkronisasi
Ada tiga hal yang selalu menjadi masalah pada proses sinkronisasi:
a. Problem Bounded buffer.
b. Problem Reades and Writer.
c. Problem Dining Philosophers.
7. Monitors
Solusi sinkronisasi ini dikemukakan oleh Hoare pada tahun 1974. Monitor
adalah kumpulan prosedur, variabel dan struktur data di satu modul atau paket
khusus. Proses dapat memanggil prosedur-prosedur kapan pun diinginkan. Tapi
proses tidak dapat mengakses struktur data internal dalam monitor secara
langsung. Hanya lewat prosedur-prosedur yang dideklarasikan minitor untuk
mengakses struktur internal.
Properti-properti monitor adalah sebagai berikut:
a). Variabel-variabel data lokal, hanya dapat diakses oleh prosedur-prosedur
dalam monitor dan tidak oleh prosedur di luar monitor.
b). Hanya satu proses yang dapat aktif di monitor pada satu saat. Kompilator
harus mengimplementasi ini(mutual exclusion).
c). Terdapat cara agar proses yang tidak dapat berlangsung di-blocked.
Menambahkan variabel-variabel kondisi, dengan dua operasi, yaitu Wait dan
Signal.
d). Wait: Ketika prosedur monitor tidak dapat berkanjut (misal producer menemui
buffer penuh) menyebabkan proses pemanggil diblocked dan mengizinkan proses
lain masuk monitor.
e). Signal: Proses membangunkan partner-nya yang sedang diblocked dengan signal
pada variabel kondisi yang sedang ditunggu partnernya.
f). Versi Hoare: Setelah signal, membangunkan proses baru agar berjalan dan
menunda proses lain.
g). Versi Brinch Hansen: Setelah melakukan signal, proses segera keluar dari
monitor.Dengan memaksakan disiplin hanya satu proses pada satu saat yang
berjalan pada monitor, monitor menyediakan fasilitas mutual exclusion.
Variabel-variabel data dalam monitor hanya dapat diakses oleh satu proses pada
satu saat. Struktur data bersama dapat dilindungi dengan menempatkannya dalam
monitor. Jika data pada monitor merepresentasikan sumber daya, maka monitor
menyediakan fasilitas mutual exclusion dalam mengakses sumber daya itu.
KESIMPULAN
Sinkronisasi adalah proses pengaturan jalannya beberapa proses pada saat
yang bersamaan. Tujuan utama sinkronisasi adalah menghindari terjadinya
inkonsistensi data karena pengaksesan oleh beberapa proses yang berbeda
(mutualexclusion) serta untuk mengatur urutan jalannya proses-proses sehingga
dapat berjalan dengan lancar dan terhindar dari deadlock atau starvation.
Sinkronisasi umumnya dilakukan dengan bantuan perangkat sinkronisasi.Beberapa
perangkat sinkronisasi, yaitu : TestAndSet(), Semafor, dan Monitor.
- Alamat Blog Dosen : https://syaifulahdan.wordpress.com
- Alamat web Program studi, Fakultas, Universitas : http://ti.ftik.teknokrat.ac.id, http://ftik.teknokrat.ac.id, www.teknokrat.ac.id
- Nama Mahasiswa : Ilham Baihaqi
Software Requirement Spesification (SRS) pada Aplikasi untuk sistem transaksi pembayaran pada kasir
Link Download Word/PDF : Word / PDF