Sinkronisasi & Mutual Exclusion pada Windows & Linux

Monday, April 19, 2010

Postingan berikut akan sedikit mengurakan tetang implementasi sinkronisasi dan mutual exclusion di Windows dan Linux!

Mengenai definisi dari apa itu sinkronisasi dan apa itu mutual exclusion telah di jelaskan pada postingan sebelumnya, jadi kali ini akan di jelaskan secara langsung perbedaan dari dua sistem operasi diantaranya :

Windows

Sinkronisasi primitive yang umum seperti semaphore, mutexes, spinlocks, timers, didasarkan dari dasar mekanisme tunggu/sinyal.

Linux

Sinkronisasi primitive yang umum seperti semaphore, mutexes, spinlocks, timers, didasarkan dari dasar mekanisme sleep/wake up .Linux menghadirkan variasi mekanisme untuk komunikasi interprocessor dan sinkronisasi. Berikut bisa kita ketahui bagian yang paling penting:
  • Pipes
  • Messages
  • Shared Memory
  • Semaphores
  • Signals
Pipes, messages, dan Shared Memory dapat digunakan untuk berkomunikasi data antar proses dimana semaphores dan signal digunakan untuk aksi trigger oleh proses lain.

Definisi dari Proses, Thread,Mutual Exclution, Race Condition,Sinkronisasi, Deadlock, Starvation,Monitor, dan Semaphore!

Secara informal, proses adalah program dalam eksekusi. Suatu proses adalah lebih dari kode program, dimana kadang kala dikenal sebagai bagian tulisan. Proses juga termasuk aktivitas yang sedang terjadi, sebagaimana digambarkan oleh nilai pada program counter dan isi dari daftar prosesor/ processor’s register. Suatu proses umumnya juga termasuk process stack, yang berisikan data temporer (seperti parameter metoda, address yang kembali, dan variabel lokal) dan sebuah data section, yang berisikan variabel global.

Thread adalah sebuah alur kontrol dari sebuah proses. Suatu proses yang multithreaded mengandung beberapa perbedaan alur kontrol dengan ruang alamat yang sama. Keuntungan dari multithreaded meliputi peningkatan respon dari user, pembagian sumber daya proses, ekonomis, dan kemampuan untuk mengambil keuntungan dari arsitektur multiprosesor. User level thread adalah thread yang tampak oleh programmer dan tidak diketahui oleh kernel. User level thread secara tipikal dikelola oleh sebuah library thread di ruang user. Kernel level thread didukung dan dikelola oleh kernel sistem operasi. Secara umum, user level thread lebih cepat dalam pembuatan dan pengelolaan dari pada kernel thread. Ada tiga perbedaan tipe dari model yang berhubungan dengan user dan kernel thread:
  • Model many to one: memetakan beberapa user level thread hanya ke satu buah kernel thread.
  • Model one to one: memetakan setiap user thread ke dalam satu kernel thread.
  • Model many to many: mengizinkan pengembang untuk membuat user thread sebanyak mungkin, konkurensi tidak dapat tercapai karena hanya satu thread yang dapat dijadualkan oleh kernel dalam satu waktu.

Mutual Exclusion: Hardware Support


Seperti yang telah kita ketahui bahwa, sinkronisasi haruslah mutual exclusive, atau dengan kata lain, harus ada satu atau sekelompok instruksi yang tidak dapat diberhentikan pada waktu eksekusi (sifat mutual exclusive). Jadi, solusi untuk sinkronisasi dengan cara pendekatan hardware lebih menekankan kepada usaha-usaha untuk membuat suatu atau sekelompok instruksi menjadi mutual exclusive.

Pendekatan dari sisi Hardware dapat dibagi menjadi dua:
  1. Processor Synchronous.
  2. Memory Synchronous.

Processor Synchronous

Central Processing Unit, CPU, mempunyai suatu mekanisme yang dinamakan interrupt. Di dalam sistim operasi, mekanisme ini digunakan secara intensif, atau dengan kata lain, banyak konsep-konsep sistim operasi yang menggunakan mekanisme ini. Sebagai contoh : system call, process scheduling, dsb.

Berbicara mengenai sinkronisasi berarti kita mengasumsikan bahwa akan ada 2 atau lebih proses yang sedang berjalan di komputer secara concurrent, atau dengan kata lain konsep time-shared sudah diimplementasikan di sistim operasi.

Prinsip Konkurensi (Principles of Concurrency)

Konkurensi adalah proses interleaving pada waktunya untuk memberikan tampilan eksekusi simultan. Oleh karena itu berbeda dari paralelisme, yang menawarkan asli eksekusi simultan. Namun masalah dan kesulitan yang diajukan oleh dua tumpang tindih untuk sebagian besar:
  • Sumber daya global sulit berbagi dengan aman.
  • Alokasi optimal dari sumber daya sangat sulit.
  • Menemukan kesalahan pemrograman bisa sulit, karena konteks di mana kesalahan terjadi tidak selalu bisa direproduksi dengan mudah.
Paralelisme juga memperkenalkan prosesor isu yang berbeda dapat berjalan pada berbagai kecepatan, tapi sekali lagi masalah ini tercermin dalam konkurensi karena berbeda proses penyelesaian pada tingkat yang berbeda.

Sebuah Contoh Sederhana

Masalah mendasar dalam proses konkurensi adalah campur dengan masing-masing lainnya ketika mengakses sumber daya global bersama. Hal ini dapat diilustrasikan dengan mengherankan contoh sederhana:

chin = getchar();
chout = chin;
putchar(chout);

Bayangkan dua proses P1 dan P2 kedua melaksanakan kode ini di "sama" waktu, dengan interleaving berikut karena multi-programming.
  1. P1 memasuki kode ini, tapi terganggu setelah membaca karakter x ke dagu.
  2. P2 memasuki kode ini, dan berjalan ke penyelesaian, membaca dan menampilkan karakter y.
  3. P1 dilanjutkan, tapi dagu y sekarang berisi karakter, sehingga P1 menampilkan karakter yang salah.
Inti dari masalah adalah variabel dagu bersama global. P1 set dagu, tapi ini tulis kemudian hilang selama pelaksanaan P2. Solusi umum adalah untuk memungkinkan hanya satu proses pada suatu waktu untuk memasukkan kode yang mengakses chin : kode tersebut sering disebut critical section. Ketika satu proses berada di dalam bagian kode yang kritis, proses-proses lain harus dicegah masuk dalam bagian. Persyaratan ini dikenal sebagai saling pengecualian.

Praktikum Algoritma Pemrograman

Monday, April 12, 2010

Bagi para praktikan Prak. Algoritma khususnya kelas B dapat men-download materi praktikum di bawah ini:

  1. PA_1 (Struktur Program Pascal)
  2. PA_2 (Penyeleseian Kondisi)
  3. PA_3 (Pengulangan (Looping))
  4. PA_4 (Prosedur dan Fungsi)
  5. PA_5 (Larik(Array))
  6. PA_6 (Record)
Untuk Modul Praktikum Algoritma dapat di download disini:
Modul Praktikum Algoritma 2010

Untuk Soal MidTes dapat di download disini:
MidTes Prak. Algoritma

Proses dan Status Proses

Sunday, April 11, 2010

Jika kita berdiskusi mengenai sistem operasi, maka akan timbul sebuah pertanyaan yaitu mengenai istilah apa yang tepat untuk menyebut semua aktivitas yang dilakukan oleh CPU. Sistem Batch mengeksekusi jobs sebagaimana suatu sistem time-share menggunakan program pengguna ( user programs ) atau tasks . Bahkan pada sistem dengan satu penggunapun, seperti pada Microsoft Windows dan Macintosh OS, seorang pengguna mampu menjalankan beberapa program pada saat yang sama, contohnya Word Processor, Web Browser, dan paket e-mail. Bahkan jika pengguna hanya dapat menjalankan satu program pada satu waktu, sistem operasi perlu untuk mendukung aktivitas program internalnya sendiri, seperti managemen memori. Dalam banyak hal, seluruh aktivitas ini adalah serupa, maka kita menyebut seluruh program itu proses-proses.
Istilah job dan proses digunakan hampir dapat dipertukarkan pada tulisan ini. Walau kami sendiri lebih menyukai istilah proses, banyak teori dan terminologi sistem-operasi dikembangkan selama suatu waktu ketika aktivitas utama sistem operasi adalah job processing . Akan membingungkan jika kita menghindari penggunaan istilah yang telah diterim oleh publik yang memasukkan kata job hanya karena proses memiliki istilah job sebagai pengganti atau pendahulunya.

Symmetric Multiprocessing ( SMP )

SMP Arsitektur

Hal ini berguna untuk melihat di mana SMP arsitektur muat ke dalam kategori keseluruhan parallel prosesor. Sebuah taksonomi yang menyoroti sistem prosesor paralel pertama kali diperkenalkan oleh Flynn [FLYN72] masih merupakan cara paling umum mengkategorikan sistem tersebut. Flynn diusulkan dengan kategori sebagai berikut sistem komputer:
  • instruksi tunggal data tunggal (SISD) stream: Sebuah prosesor tunggal menjalankan sebuah aliran instruksi untuk beroperasi pada data yang tersimpan dalam memori tunggal.
  • Single instruksi multiple data (SIMD) stream: Sebuah mesin tunggal instruksi mengontrol eksekusi simultan dari sejumlah elemen pengolahan pada dasar berbaris. Setiap elemen pemrosesan memiliki memori data yang terkait, sehingga bahwa setiap instruksi dieksekusi pada satu set data yang berbeda oleh berbagai processors.Vector dan prosesor array termasuk dalam kategori ini.
  •  Beberapa instruksi data tunggal (MISD) stream: Sebuah urutan data ditransmisikan ke satu set prosesor, masing-masing melaksanakan instruksi yang berbeda Struktur sequence.This tidak pernah dilaksanakan.
  • Beberapa instruksi multiple data (MIMD) stream: Satu set prosesor secara simultan mengeksekusi urutan instruksi yang berbeda pada set data yang berbeda.

Konsep Thread

Friday, April 9, 2010

Apa itu Thread

Thread adalah unit dasar dari penggunaan CPU, thread mengandung Thread ID, program counter , register set , dan stack . Sebuah Thread berbagi code section , data section , dan sumber daya sistem operasi dengan Thread lain yang dimiliki oleh proses yang sama. Thread juga sering disebut lightweight process . Sebuah proses tradisional atau heavyweight process mempunyai thread tunggal yang berfungsi sebagai pengendali. Perbedaan antara proses dengan thread tunggal dengan proses dengan thread yang banyak adalah proses dengan thread yang banyak dapat mengerjakan lebih dari satu tugas pada satu satuan waktu
Gambar 3-8. Thread
Banyak software yang berjalan pada PC modern didesain secara multithreading . Sebuah aplikasi biasanya diimplementasi sebagai proses yang terpisah dengan beberapa thread yang berfungsi sebagai pengendali. Contohnya sebuah web browser mempunyai thread untuk menampilkan gambar atau tulisan sedangkan thread yang lain berfungsi sebagai penerima data dari network.
Kadang kala ada situasi dimana sebuah aplikasi diperlukan untuk menjalankan beberapa tugas yang serupa. Sebagai contohnya sebuah web server bisa mempunyai ratusan klien yang mengaksesnya secara concurrent . Kalau web server berjalan sebagai proses yang hanya mempunyai thread tunggal maka ia hanya bisa melayani satu klien pada pada satu satuan waktu. Bila ada klien lain yang ingin mengajukan permintaan maka ia harus menunggu sampai klien sebelumnya selesai dilayani. Solusinya adalah dengan membuat web server menjadi multithreading . Dengan ini maka sebuah web server akan membuat thread yang akan mendengar permintaan klien, ketika permintaan lain diajukan maka web server akan menciptakan thread lain yang akan melayani permintaan tersebut.

Mikrokernel

1.1 Microkernel

Pendekatan Microkernel berisi sebuah abstraksi yang sederhana terhadap hardware, dengan sekumpulan primitif atau system call yang dapat digunakan untuk membuat sebuah sistem operasi agar dapat berjalan, dengan layanan-layanan seperti manajemen thread, komunikasi antar address space, dan komunikasi antar proses. Layanan-layanan lainnya, yang biasanya disediakan oleh kernel, seperti halnya dukungan jaringan, pada pendekatan microkernel justru diimplementasikan di dalam ruangan pengguna (user-space), dan disebut dengan server. Server adalah sebuah program, seperti halnya program lainnya. Server dapat mengizinkan sistem operasi agar dapat dimodifikasi hanya dengan menjalankan program atau menghentikannya. Sebagai contoh, untuk sebuah mesin yang kecil tanpa dukungan jaringan, server jaringan (istilah server di sini tidak dimaksudkan sebagai komputer pusat pengatur jaringan) tidak perlu dijalankan. Pada sistem operasi tradisional yang menggunakan monolithic kernel, hal ini dapat mengakibatkan pengguna harus melakukan rekompilasi terhadap kernel, yang tentu saja sulit untuk dilakukan oleh pengguna biasa yang awam.

1.2 Kinerjanya

Dalam teorinya, sistem operasi yang menggunakan microkernel disebut jauh lebih stabil dibandingkan dengan monolithic kernel, karena sebuah server yang gagal bekerja, tidak akan menyebabkan kernel menjadi tidak dapat berjalan, dan server tersebut akan dihentikan oleh kernel utama. Akan tetapi, dalam prakteknya, bagian dari system state dapat hilang oleh server yang gagal bekerja tersebut, dan biasanya untuk melakukan proses eksekusi aplikasi pun menjadi sulit, atau bahkan untuk menjalankan server-server lainnya. Sistem operasi yang menggunakan microkernel umumnya secara dramatis memiliki kinerja di bawah kinerja sistem operasi yang menggunakan monolithic kernel. Hal ini disebabkan oleh adanya overhead yang terjadi akibat proses input/output dalam kernel yang ditujukan untuk mengganti konteks (context switch) untuk memindahkan data antara aplikasi dan server. Beberapa sistem operasi yang menggunakan microkernel:
  • IBM AIX, sebuah versi UNIX dari IBM
  • Amoeba, sebuah kernel yang dikembangkan untuk tujuan edukasi
  • Kernel Mach, yang digunakan di dalam sistem operasi GNU/Hurd, NexTSTEP, OPENSTEP, dan Mac OS/X
  • Minix, kernel yang dikembangkan oleh Andrew Tanenbaum untuk tujuan edukasi
  • Symbian OS, sebuah sistem operasi yang populer digunakan pada hand phone, handheld device, embedded device, dan PDA Phone.