Rule:
1. Tujuan
3. Dasar Teori
Proses konkuren mengakses sumber daya global pada saat yang bersamaan dapat
menghasilkan efek samping yang tidak diinginkan. Perangkat keras atau sistem
operasi komputer dapat menyediakan mutual exclusion ketika sumber daya
tersebut digunakan bersama.
A. Pendahuluan
program CriticalRegion
var g integer
writeln("In main")
call thread1
call thread2
wait
writeln("Exiting main")
end
Kode di atas akan membuat dua thread, yaitu thread1 dan thread2. Masing-
masing thread
menaikkan nilai variabel global g dalam tiap loop.
Ketika dua loop selesai nilai apa yang Anda perkirakan dalam variabel g?
Kira-kira apakah kegunaan dari perintah wait?
3. Sekrang compile kode tersebut dengan cara pilih tab Compile pada jendela
COMPILER. Lalu tekan tombol COMPILE. Perhatikan yang terjadi!
1. Kita akan membutuhkan tampilan untuk mengamati input dan output dari
program yang kita buat, kita tekan tombol INPUT OUTPUT pada jendela
Advance. Maka akan keluar layar Console, centang/aktifkan Stay on top.
2. Beralihlah ke tampilan awal simulator, akan tampak CriticalRegion pada
PROGRAM LIST.
3. Di tampilan awal simulator, klik tombol OS 0…
4. Tekan tombol CREATE NEW PROCESS.
5. Pastikan jenis penjadwalan adalah Round Robin dengan 10 ticks dan
kecepatan simulasi Fast.
6. Kini klik START dan amati tampilan di layar Console. Tuliskan hasil Output
pada laporan!
7. Berapa dua nilai g yang ditampilkan? Apakah sesuai dengan nilai yang Anda
perkirakan di awal?
8. Hapus kode sebelumnya dengan cara: pada jendela simulator Tab PROGRAM
LIST, klik REMOVE PROGRAM.
9. Sekarang kita memodifikasi program menjadi seperti berikut. Salin program ini
ke Compiler. Ganti yang sebelumnya.
program CriticalRegion
var g integer
writeln("In main")
call thread1
call thread2
wait
writeln("Exiting main")
end
10. Sekrang compile kode tersebut dengan cara pilih tab Compile pada jendela
COMPILER. Lalu tekan tombol COMPILE
11. Carilah baris pada PROGRAM CODE (OUTPUT) yang menerjemahkan
synchronise. Tuliskan kode assembly beserta keterangannya!
Contoh:
12. Buatlah proses baru dengan klik tombol OS 0… Tekan tombol CREATE NEW
PROCESS. Pastikan jenis penjadwalan adalah Round Robin dengan 10 ticks
dan kecepatan simulasi Fast.
13. Pada layar Console tekan tombol CLEAR untuk menghapus hasil sebelumnya.
14. Kini klik START dan amati tampilan di layar Console. Amati yang terjadi!
Tuliskan hasil Output di laporan!
15. Bandingkan hasil yang sekarang dengan sebelumnya. Jelaskan apa perbedaan
yang terjadi!
16. Hapus kode sebelumnya dengan cara: pada jendela simulator Tab PROGRAM
LIST, klik REMOVE PROGRAM.
17. Sekarang kita memodifikasi program menjadi seperti berikut. Salin program ini
ke Compiler. Ganti yang sebelumnya.
program CriticalRegion
var g integer
writeln("In main")
call thread1
call thread2
wait
writeln("Exiting main")
end
18. Compile kode yang baru. Amati hasil kompilasi untuk perintah enter dan leave
pada jendela PROGRAM CODE (OUTPUT).
19. Muatkan program ke memori. Beralihlah ke tampilan simulator, buat proses, dan
jalankan!
20. Tuliskan dua nilai g yang baru!
D. Latihan
1. Mengapa kita menggunakan variabel global g yang sama pada kedua thread?
Kaitkan dengan tujuan praktikum.
2. Pada modifikasi yang pertama, kita menambahkan kata synchronise. Jelaskan
tujuan modifikasi ini!
3. Pada modifikasi yang kedua, kita menambahkan kata enter dan leave. Jelaskan
fungsi ini! Apa perbedaan hasilnya dengan yang menggunakan synchronise?