Sinkronisasi pada sistem operasi
MAKALAH PROSES SINKRONISASI PADA SISTEM OPERASI
NAMA : LYLA PUTRI DEVIANA
KELAS : TK20A
NPM : 20316036
TEKNIK KOMPUTER
FAKULTAS TEKNIK DAN ILMU KOMPUTER
UNIVERSITAS TEKNOKRAT INDONESIA
KATA PENGANTAR
Puji syukur kehadirat ALLAH SWT yang telah memberikan rahmat dan hidayah-Nya. Dengan rahmat dan hidayah-Nya, Alhamdulillah Makalah yang berjudul “PROSES SINKRONISASI” ini dapat terselesaikan dangan tepat waktu. Makalah ini kami buat untuk memenuhi tugas dari mata kuliah Sistem Operasi.
Terima kasih juga kepada Bapak dosen Pembimbing Sistem Operasi yang telah memberi kami arahan untuk menyelesaikan tugas pembuatan makalah ini.
Kami berharap kepada semua pihak dengan segala kritik dan saran yang bersifat membangun, sangat kami harapkan untuk dimasa yang akan datang agar bisa menyempurnakan makalah ini, sebab makalah ini masih banyak kekurangannya.
Bandar Lampung, 01 April 2021
penulis
DAFTAR ISI :
KATA PENGANTAR
DAFTAR ISI
BAB I PENDAHULUAN
1.1 Latar belakang
1.2 Permasalahan critical-section
1.3 Tujuan
BAB II PEMBAHASAN
2.1 Pengertian Sinkronisasi
2.2 Tujuan Sinkronisasi
2.3 Masalah Dalam Sinkronisasi Beserta Solusinya
2.4 Contoh sinkronisasi
BAB III PENUTUP
3.1 Kesimpulan
DAFTAR PUSTAKA
BAB IPENDAHULUAN
Sinkornisasi di perlukan untuk menghindari terjadinya ketidak konsistenan data akibat adanya akses secara konkuren. Proses-Proses tersebut disebut konkuren jika Proses itu ada dan berjalan pada waktu yang bersamaan. Istilah Sinkronisasi sering terdengar ketika kita menggunakan alat elektronik. Sinkronisasi sendiri berasal dari bagian sistem operasi.Sistem operasi adalah perangkat lunak sistem yang bertugas untuk melakukan kontrol dan manajemen perangkat keras serta operasi-operasi dasar sistem, termasuk menjalankan perangkat lunak aplikasi seperti program-program pengolah kata dan peramban web.Jadi, agar sinkronisasi bisa berjalan, sangat di butuhkan yang namanya sistem operasi. Dalam kehidupan sehari-hari tanpa di sadari, kita sering melakukan sinkronisasi dalam berbagai hal. Mulai pada saat menggunakan smartphone, komputer dan lain sebagainya.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 (mutual exclusion) serta untuk mengatur urutan jalannya proses-proses sehingga dapat berjalan dengan lancar dan terhindar dari deadlockatau starvation.Sinkronisasi umumnya dilakukan dengan bantuan perangkat sinkronisasi. Dalam bab ini akan dibahas beberapa perangkat sinkronisasi, yaitu : TestAndSet(), Semafor, dan Monitor.
Proses-proses yang konkuren adalah proses-proses (lebih dari satu) berada pada saat yang sama. Proses-proses ini dapat sepenuhnya tak bergantung dengan yang lainnya, tapi dapat juga saling berinteraksi. Proses-proses yang berinteraksi memerlukan sinkronisasi agar terkendali dengan baik.
Proses-proses yang melakukan akses secara konkuren pada data yang digunakan bersama-sama menyebabkan data tidak konsisten (inconsistence). Agar data konsisten dibutuhkan mekanisme untuk menjamin eksekusi yang berurutan pada proses- proses yang bekerja sama. Pada model shared memory untuk penyelesaian
1.1 LATAR BELAKANG
permasalahan bounded-buffer paling banyak menyimpan n – 1 item pada buffer pada saat yang bersamaan. Untuk mendapatkan solusi dimana semua N buffer digunakan bukan masalah yang sederhana. Misalnya dilakukan modifikasi kode producer- consumer dengan menambahkan variabel counter yang diinisialisasi 0 dan dinaikkan setiap satu item baru ditambahkan ke buffer. Definisi data yang digunakan bersama- sama (shared data) adalah sebagai berikut :
#define BUFFER_SIZE 10
typedef struct {
... } item;
item buffer[BUFFER_SIZE]; int in = 0;
int out = 0;
int counter = 0;
Proses pada producer akan menambahkan satu nilai variabel counter sebagai berikut : item nextProduced;
while (1) {
while (counter == BUFFER_SIZE)
; /* do nothing */ buffer[in] = nextProduced; in = (in + 1) % BUFFER_SIZE; counter++;
}
Sebaliknya juga proses pada consumer akan menurunkan satu nilai variabel counter sebagai berikut :
item nextConsumed;
while (1) {
while (counter == 0)
; /* do nothing */
nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; counter--;
}
Pernyataan counter++ dan counter-- harus dilakukan secara atomik. Operasi atomik adalah operasi yang harus menyelesaikan seluruh pernyataannya tanpa interupsi. Pernyataancounter++akandiimplementasikandalambahasamesinsebagai berikut :
register1 = counterregister1 = register1 + 1counter = register1
Sedangkan pernyataan counter-- akan diimplementasikan dalam bahasa mesin
sebagai berikut :
register1 = counterregister1 = register1 + 1counter = register1
Apabila baik producer dan consumer mencoba mengubah buffer secara konkuren, pernyataan dalam bahasa mesin diatas akan dilakukan secara terpisah. Misalnya counter diinisialisasi 5. Pernyataan yang dijalankan adalah :
producer: register1 = counter (register1 = 5) producer: register1 = register1 + 1 (register1 = 6) consumer: register2 = counter (register2 = 5) consumer: register2 = register2 – 1 (register2 = 4) producer: counter = register1 (counter = 6) consumer: counter = register2 (counter = 4)
Nilai counter kemungkinan bernilai 4 atau 6, sedangkan hasil yang benar seharusnya 5, hal ini yang dimaksud dengan data yang tidak konsisten. Situasi dimana beberapa proses mengakses dan memanipulasi data yang digunakan bersama-sama secara konkuren disebut dengan race condition. Nilai akhir dari data yang digunakan bersama-sama tersebut tergantung dari proses yang terakhir selesai. Untuk mencegah race condition tersebut, proses yang konkuren harus dilakukan sinkronisasi.
1.2 PERMASALAHAN CRITICAL-SECTION (CRITICAL-SECTION PROBLEM)
Suatu system terdiri dari n proses dimana semuanya berkompetisi menggunakan data yang digunakan bersama-sama. Masing-masing proses mempunyai sebuah kode segmen yang disebut dengan critical section, dimana proses memungkinkan untuk mengubah variabel umum, mengubah sebuah tabel, menulis file dan lain sebagainya. Gambaran penting dari sistem adalah, ketika sebuah proses dijalankan di dalam critical section, tidak ada proses lain yang diijinkan untuk menjalankan critical section-nya. Sehingga eksekusi dari critical section oleh proses-proses tersebut berlaku eksklusif (mutually exclusive). Permasalahan critical section digunakan untuk mendesain sebuah protokol dimana proses-proses dapat bekerja sama. Masing-masing proses harus meminta ijin untuk memasuki critical section-nya. Daerah kode yang mengimplementasikan perintah ini disebut daerah entry. Critical section biasanya diikuti oleh daerah exit. Kode pengingat terletak di daerah remainder.
Sebuah solusi dari permasalahan critical section harus memenuhi 3 syarat sebagai berikut :
1. Mutual Exclusion. Apabila proses Pi menjalankan critical section-nya, maka tidak ada proses lain yang dapat menjalankan critical section.
2. Progress. Apabila tidak ada proses yang menjalankan critical section-nya dan terdapat beberapa proses yang akan memasuki critical section-nya, maka hanya proses-proses itu yang tidak diproses di dalam daerah pengingat (remainder) dapat ikut berpartisipasi di dalam keputusan proses mana yang akan memasuki critical section selanjutnya, dan pemilihan ini tidak dapat ditunda tiba-tiba.
3. Bounded Waiting. Terdapat batasan jumlah waktu yang diijinkan oleh proses lain untuk memasuki critical section setelah sebuah proses membuat permintaan untuk memasuki critical section-nya dan sebelum permintaan dikabulkan.
Asumsi bahwa masing-masing proses dijalankan pada kecepatan bukan nol (nonzero). Akan tetapi tidak ada asumsi mengenai kecepatan relatif dari proses ke n.
Pemecahan masalah critical section tidak mengandalkan semua asumsi tentang instruksi hardware atau jumlah prosessor dari hardware yang mendukung. Akan tetapi, diasumsikan bahwa instruksi dasar bahasa mesin (instruksi primitif, misalnya load, store dan test) dijalankan secara otomatis. Sehingga apabila dua instruksi dijalankan bersama-sama, hasilnya ekuivalen dengan deret eksekusi dalam beberapa pesanan yang tidak diketahui. Sehingga apabila perintah load dan store dijalankan bersama-sama, perintah load akan mempunyai nilai lama atau nilai baru, tetapi tidak kombinasi dari kedua perintah itu.
Ketika mengimplementasikan suatu algoritma, kita menentukan dahulu hanya variable-variabel yang digunakan untuk keperluan sinkronisasi dan menggambarkan hanya proses Pi seperti struktur seperti Gambar 5-1. Entry section dan exit section di dalam kotak untuk menunjukkan segmen kode yang penting. Proses-proses kemungkinan menggunakan variabel-variabel umum untuk sinkronisasi kegiatannya.
do {
entry section
critical section
exit section
remainder section
} while(1)
1.2.1 Pemecahan Dua Proses
5.2.1.1 Algoritma 1
Pendekatan pertama adalah memperbolehkan semua proses menggunakan variable integer turn diinisialisasi ke 0 (atau 1).
int turn;
Apabila turn = i, maka proses Pi diijinkan untuk menjalankan critical section – nya. Struktur dari proses Pi adalah sebagai berikut :
do {
while (turn != i) ;
critical section
turn = j;
reminder section
} while (1);
Pemecahan ini menjamin hanya satu proses pada satu waktu yang dapat berada di critical section. Tetapi hal ini tidak memuaskan kebutuhan progress, karena hal ini membutuhkan proses lain yang tepat pada eksekusi dari critical section. Sebagai contoh, apabila turn=0 dan P1 siap untuk memasuki critical section, P1 tidak dapat melakukannya, meskipun P0 mungkin di dalam remainder section – nya.
1.2.1.2 Algoritma 2
Kelemahan dengan algoritma 1 adalah tidak adanya informasi yang cukup tentang state dari masing-masing proses. Untuk mengatasi masalah ini dilakukan penggantian variabel turn dengan array
boolean flag[2];
Inisialisasiawalflag[0]=flag[1]=false. Apabilaflag[i]bernilaitrue, nilai ini menandakan bahwa Pi siap untukmemasuki critical section. Struktur dari proses Pi adalah sebagai berikut :
do {
flag[i] := true;
while (flag[j]) ;
critical section
flag [i] = false;
remainder section
} while (1);
Pemecahan ini menjamin mutual exclusion, tetapi masih belum memenuhi progress .
1.2.1.3 Algoritma 3
int turn;
boolean flag[2];
Inisialisasi flagI[0] = flag[1] = false dan nilai dari turn bernilai 0 atau 1. Struktur dari proses Pi adalah :
do {
flag [i]:= true;
turn = j;
while (flag [j] and turn = j) ;
critical section
flag [i] = false;
remainder section
} while (1);
Algoritma ketiga ini memenuhi ketiga kebutuhan diatas yaitu mutual exclusion, progress dan bounded waiting dan memecahkan permasalahan critical section untuk dua proses.
1.2.1.4 Algoritma Bakery
Algoritma Bakery adalah algoritma yang digunakan untuk pemecahan permasalahan critical section pada n proses. Sebelum memasuki critical section, proses menerima nomo. Proses yang mempunyai nomor terkecil dapat memasuki critical section. Jika proses Pi dan Pj menerima nomor yang sama, jika i < j maka Pi dilayani lebih dahulu, sebaliknya Pj akan dilayani lebih dahulu. Skema pemberian nomor selalu membangkitkan nomor dengan menaikkan nilai urut misalnya 1, 2, 3, 3, 3, 3, 4, 5, ..... Pada algoritma bakery terdapat notasi <≡ untuk urutan nomor (ticket #, process id #) sebagai berikut :
• (a,b)<(c,d)ifa<corifa=candb<d
• max (a0,..., an-1) is a number, k, such that k ≥ ai for i - 0, ..., n – 1
Variabel umum yang digunakan adalah :
boolean choosing[n];
int number[n];
Struktur data diatas diinisialisasi false dan 0. Struktur dari proses Pi adalah : do {
choosing[i] = true;
number[i] = max(number[0], number[1], ..., number [n – 1])+1;
choosing[i] = false;
for (j = 0; j < n; j++) {
while (choosing[j]) ;
while ((number[j] != 0) && (number[j],j < number[i],i)) ;
}
critical section
number[i] = 0;
remainder section
} while (1);
1.3 TUJUAN BELAJAR:
Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:
- Memahami permasalahan critical section
- Memahami algoritma sinkronisasi
- Memahami konsep semaphore untuk sinkronisasi proses
- Memahami implementasi sinkronisasi dengan masalah-masalah klasik dalam sinkronisasi proses
BAB IIPEMBAHASAN
2.1 PENGERTIAN SINKRONISASI
2.2 TUJUAN SINKRONISASI
2.3 MASALAH DALAM SINKRONISASI BESERTA SOLUSINYA
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.
2.4 Contoh-Contoh Sinkronisasi
2.4.1 Sinkronisasi pada Solaris 2
Pada Solaris 2, sinkronisasi diimplementasikan dengan menggunakan beberapa kunci untuk mendukung sistem multitasking, multithreading (termasuk thread real time) dan multiprosessing. Solaris 2 menggunakan adaptive mutex untuk efisiensi sistem pada saat proteksi data dari kode segment yang pendek. Selain itu juga menggunakan variabel kondisi dan kunci reader writer apabila kode segmen lebih panjang memerlukan akses ke data. Solaris 2 juga menggunakan turnstile untuk mengurutkan daftar thread yang menunggu untuk memperoleh baik adaptive mutex atau kunci reader writer.
2.4.2 Sinkronisasi pada Windows 2000
Implementasi sinkronisasi pada Windows 2000 menggunakan interrupt mask untuk memproteksi akses ke sumber daya global pada sistem uniprosessor sedangkan ada sistem multiprosessor menggunakan spinlock. Selain itu Windows 2000 juga menyediakan dispatcher object yang berfungsi sebagai mutual exclusion dan semaphore. Dispatcher object juga menyediakan event yang berfungsi sebagai variabel kondisi.
BAB III
PENUTUP
3.1 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.
DAFTAR PUSTAKA
http://arna.lecturer.pens.ac.id/Diktat_SO/5.Sinkronisasi%20Proses.pdf
Alamat Blog Dosen : https://syaifulahdan.wordpress.com
Link Website:
- Universitas Teknokrat Indonesia
- Fakultas Ekonomi dan Bisnis
- Fakultas Teknik dan Ilmu Komputer
- Fakultas Sastra dan Ilmu Pendidika
- Kemahasiswaan Teknokrat
- Online Learning
- Prodi Informatika
- Prodi Sistem Informasi
- Prodi Teknologi Informasi
- Prodi Teknik Sipil
- Prodi Sistem Informasi Akuntansi
- Prodi Teknik Elektro
- Prodi Teknik Komputer
Website Fakultas dan Kemahasiswaan
https://feb.teknokrat.ac.id - https://ftik.teknokrat.ac.id
https://fsip.teknokrat.ac.id - https://kemahasiswaan.teknokrat.ac.id
Online Learning :
https://spada.teknokrat.ac.id
Website Program Studi FTIK :
http://if.ftik.teknokrat.ac.id http://si.ftik.teknokrat.ac.id
http://ti.ftik.teknokrat.ac.id http://ts.ftik.teknokrat.ac.id
http://sia.ftik.teknokrat.ac.id http://te.ftik.teknokrat.ac.idt.ac.id
http://tk.ftik.teknokrat.ac.idt.ac.id
Website Program Studi FSIP:
http://po.fsip.teknokrat.ac.id http://sastrainggris.fsip.teknokrat.ac.id
http://pbi.fsip.teknokrat.ac.id http://matematika.fsip.teknokrat.ac.id
Website Program Studi FEB :
http://manajemen.feb.teknokrat.ac.id
http://akuntansi.feb.teknokrat.ac.id
Komentar
Posting Komentar