Anda di halaman 1dari 7

Modul 4 Sinkronisasi

Rule:

1. Setiap jawaban harus menggunakan warna yang berbeda dengan


pertanyaan/berada didalam kolom tersendiri
2. Harus menyertakan screenshot dari simulator
3. Plagiarisme = E
4. Keterlambatan pengumpulan tugas akan langsung dikenakan pengurangan
nilai (-10) apapun alasannya.
5. Keterlambatan pengiriman lebih dari 8 jam maka nilai secara otomatis 0

1. Tujuan

a. Memkompilasi kode sumber program yang menggunakan beberapa thread


konkuren yang mengakses sumber daya global yang sama
b. Mengkompilasi kode sumber yang tersinkronisasi
c. Memahami bahwa Sistem Operasi menyediakan bantuan untuk membuat
mutual exclusion (mutex) dan critical region

2. Alat yang Digunakan

a. Komputer atau laptop dengan sistem operasi Windows


b. Program CPU-OS Simulator versi minimal 7.5.0

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.

Akses yang konkuren pada sumber daya global kemungkinan menghasilkan


inkonsistensi akibat dari race condition. Race condition adalah situasi ketka
beberapa proses mengakses dan memanipulasi sumber daya global secara
bersamaan. Nilai akhir dari shared data bergantung kepada proses yang
diselesaikan paling akhir. Untuk mencegah race condition, proses-proses konkuren
harus disinkronisasi.
4. Prosedur Praktikum

A. Pendahuluan

1. Jalankan praktikum secara berurutan dan sesuai instruksi


2. Laporan berisikan hasil praktikum. Perhatikan bagian yang digarisbawahi.
3. Laporan juga berisikan jawaban dari soal-soal yang ada pada bagian Latihan
4. Laporan juga dilengkapi dengan simpulan yang diperoleh dari praktikum
5. Laporan disimpan dengan nama OS2017-P04-NIM.doc atau .docx

B. Membuat Program Thread Konkuren

1. Jalankan Simulator. Di jendela Advanced, klik tombol COMPILER. Akan muncul


tampilan baru Program Compiler.
2. Tuliskan kode berikut pada jendela PROGRAM SOURCE (INPUT)

program CriticalRegion
var g integer

sub thread1 as thread


writeln("In thread1")
g = 0
for n = 1 to 20
g = g + 1
next
writeln("thread1 g = ", g)
writeln("Exiting thread1")
end sub

sub thread2 as thread


writeln("In thread2")
g = 0
for n = 1 to 12
g = g + 1
next
writeln("thread2 g = ", g)
writeln("Exiting thread2")
end sub

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!

4. Muatkan hasil kompilasi ke memori dengan menekan tombol LOAD IN


MEMORY pada jendela ASSEMBLY CODE. Sebutkan apa yang terjadi!
5. Tutup tampilan Program Compiler dengan menekan tombol CLOSE di pojok
kanan bawah. Kita kembali ke halaman awal.

C. Menjalankan Program Thread Konkuren

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

sub thread1 as thread synchronise


writeln("In thread1")
g = 0
for n = 1 to 20
g = g + 1
next
writeln("thread1 g = ", g)
writeln("Exiting thread1")
end sub

sub thread2 as thread synchronise


writeln("In thread2")
g = 0
for n = 1 to 12
g = g + 1
next
writeln("thread2 g = ", g)
writeln("Exiting thread2")
end sub

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

sub thread1 as thread


writeln("In thread1")
enter
g = 0
for n = 1 to 20
g = g + 1
next
writeln("thread1 g = ", g)
leave
writeln("Exiting thread1")
end sub

sub thread2 as thread synchronise


writeln("In thread2")
enter
g = 0
for n = 1 to 12
g = g + 1
next
writeln("thread2 g = ", g)
leave
writeln("Exiting thread2")
end sub

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?

Anda mungkin juga menyukai