Konsep Dasar dan Permasalah Pada Konkurensi

19 04 2010

Kongrkurensi

Merupakan landasan umum perancangan sistem operasi. Proses-proses tersebut disebut kongkuren jika proses-proses (lebih dari satu proses) ada pada saat yang sama, Proses-proses kongkuren dapat sepenuhnya tak bergantung dengan lainya tapi dapat juga saling berinteraksi. Proses-proses yang berinteraksi memerlukan sinkronisasi agar terkendali dengan baik.

Kongkurensi menjadi penting karena saat ini hampir seluruh sistem adalah multiprogramimg, maupun multithreading, serta menuju pemrosesan tersebar yang mengharuskan adanya proses-proses kongkuren. Pada proses-proses kongkuren yang saling berinteraksi akan mempunyai beberapa masalah mendasar yang harus di selesaikan yaitu :

  1. Mutual Exlusion
  2. Deadlock
  3. Starvation
  4. Sinkronisasi

Penyelesaian terhadap masalah-masalah ini sangat penting karena perkembangan teknologi, sistem komputer menuju menuju ke sistem multiprocessing, terdistribusi dan paralel yang mengaharuskan adanya proses-proses kungkuren.

Lingkup kongkurensi meliputi hal-hal berikut :

  • Alokasi layanan pemrosesan untuk proses-proses
  • Pemakian bersama dan persaingan unuk mendapatkan sumber daya / resource
  • Komunikasiantar proses
  • Sinkronisasi aktivitas banyak proses

Hal-hal tersebut tidak hanya muncul dilingkungan komputasi multiprocess dan tersebar juga pada sistem multiprogram ataupun multithreading pada pemroses tunggal.

Kongkurensi dapat muncul pada empat konteks berbeda yaitu :

  1. Untuk banyak aplikasi
  2. Untuk strukturisasi dari aplikasi
  3. Untuk Strukturisasi dari pemroses

Beberapa masalah yang muncul pada Kongkurensi adalah : Mutual Exclusion, Deadlock, Starvation

  1. Mutual Exclusion

Pada permasalahan yang satu ini adalah sebagai berikut, pada resource komputer hanya dapat digunakan oleh satu pemakai dalam satu waktu saja, dan tidak dapat di pakai bersamaan, contohnya adalah printer. Sumber daya seperti ini disebut sumber daya kritis, dan bagian program yang menggunakan sumber daya ini disebut dengan critical region/section. Dengan demikian, hanya satu program pada satu saat yang di ijinkan masuk critical region. Pemrograman tidak dapat bergantung pada sistem operasi untuk memahami dan memaksakan batasan ini karena maksud program tidak dapat diketahui oleh sistem operasi.

Sistem operasi memberikan fasilitas untuk pemrogram dapat memberikan indikasi keberadaan critical region. System operasi memberikan / menyediakan layanan berupa fasilitas (system call) untuk mencegah proses masuk critical region yang sedang dimasuki proses lain. Pemrogram harus menspesifikasikan bagian-bagian critical region sehingga sistem operasi akan menjaganya dengan suatu mekanisme tertentu untuk mencegah proses lain masuk critical region yang sedang dipakai proses.

Pemaksaan adanya mutual exclusion dapat menumbulkan dua masalah, yaitu:

  1. Deadlock
  2. Starvation

a) Deadlock

Ilustrasinya:

    • Dua Proses, P1 dan P2
    • Dua Resource kritis R1 dan R2
    • Proses P1 dan P2 harus mengakses kedua sumber daya.

Kondisi berikut dapat terjadi : R1 diberikan ke P1, sedang R2 di berikan ke P2.

Karena untuk melanjutkan ekssekusi memerlukan sumber daya sekaligus maka kedua proses akan saling menunggu sumber daya yang lainnya, selamanya. Tidak ada proses yang dapat melepaskan sumber daya yang telah dipegangnya karena menunnggu sumber daya lain yang tidak pernah diperolehnya. Keduanya tidak membuat proses kemajuan apapaun, kedua proses tersebut dalam kondisi deadlock.

Kondisi deadlock merupakan kondisi terparah karena banyak proses dapat terlibat dan semua yang terlibat tidak dapat mengakhiri prosesnya secara benar. Beragam mekanisme diusulkan untuk mengatasi kondisi deadlock.

b) Starvation

Ilustrasinya :

    • Terdapat tiga proses P1, P1, dan P3
    • P1, P2, dan P3 memerlukan pengaksesan sumber daya R secara periodik

Terjadi Skenario berikut:

    • P1 sedang di beri sumber daya R, P2, dan P3 Blcoked menunggu sumber daya R.
    • Ketika P1 keluar daricritical section, P2 dan P3 diijinkan mengakse R.
    • Asumsi P3 diberi hak akses. Kemudian setelah selesai, hak akses kembali diberikan ke P1 yang saat itu kembali membutuhkan sumber daya R.

Jika pemberian hak akses bergantian terus-menerus antara P1 dan P3, maka P2 tidak pernah memperoleh pengaksesan sumber daya R. meskipun tidak ada deadlock, pada sutuasi ini P2 mengalami starvation.

Selain masalah diatas, terdapat pula masalah-masalah kongkurensi sebagai berikut:

Kecepatan proses pada sistem tergantung beragam hal :

  • Sktivitas-aktivitas proses lain
  • Cara kerja sistem operasi menngani interupsi
  • Kebijaksanaan penjadwalan yang dilakukan oleh sistem operasi

Beberapa kesulitan dapat muncul diantaranya :

  1. Pemakaian bersama sumber daya global
  2. Pengoelolaan alokasi sumber daya agar optimal
  3. Pencarian kesalahan pemrograman.

1. Pemakaian Sumber Daya Global

Jika buah proses menggunakan variabel global yang sama serta keduanya membaca dan menulis variabel itu maka urutan terjadinya pembacaan dan penulisan terhadap variabel bersama menjadi kritis.

2. Pengelolaan Sumber Daya agar Optimal

Jika proses A meminta suatu kanal masukan/keluaran tertentu dan dapat terjadi kemudian proses A ditunda (suspend) sebelum menggunakan kanal itu. Jika sistem operasi mempunyai kebijaksanaan mengunci kanal (sehingga tidak di memperbolehkan pemakaian oleh lainnya) dan mencegah proses-proses lain menggunakan kanal itu maka tindakan ini jelas hanya menghasilkan inefisiensi sistem komputer.

3. Pencarian Kesalahan Pemrograman

Pencarian kesalahan pada pemrograman kongkuren lebih sulit dibanding pencarian kesalahan pada program-program sekuen.

Proses-proses kongkuren mengharuskan hal-hal berikut di tangani sistem operasi, yaitu:

  1. Mengetahui proses-proses yang aktif.
  2. Alokasi dan dealokasi beragam sumber daya untuk tiap proses aktif.
  3. Proteksi data dan sumber daya fisik proses.
  4. Hasil-hasil proses harus independen.
  1. Mengetahui Proses-proses yang Aktif

Sistem Operasi mengelola senarai proses. Senarai ini berupa senarai PCB proses. Senarai berjumlah sesuai jumlah state yang di implementasikan sistem operasi.

  1. Alokasi dan Dealokasi Beragam Sumber Daya untuk Tiap Proses yang Aktif

Sumber daya yang harus di kelola antara lain : – waktu pemroses, – Memory, – Berkas-berkas, – Peralatan-peralatan masukan/keluar, – data dan sebagainya.

  1. Proteksi Data dan Sumber Daya Fisik

Proteksi data dan sumber daya fisik masing-masing proses dari gangguan (interferensi) proses-proses lain.

  1. Hasil-hasil Proses harus Independen.

Hasil-hasil proses harus independen terhadap kecepatan relatifproses-proses lain dimana eksekusi dilakukan.

Pembahasan di sini menjawab bagaimana permasalahan yang terjadi pada kongkurensi, sehingga pemrogram dapat membuat suatu formula untuk menyelesaikan masalah yang ada dan meningkatakan perkembangan terhadap proses pada multiprocess maupun multiprogram dan multithread.(aris.zona)

sumber : Haryanto, Dr. Bambang. 2009. “Sistem Operasi(reveisi keempat)”, Informtika, Bandung





Sistem Operasi(Thread, Mutual Exclusion, Race Condition)

19 04 2010

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

A. 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.
Secara tidak langsung, proses merupakan program yang sedang dieksekusi. Menurut Silberschatz, suatu proses adalah lebih dari sebuah kode program, yang terkadang disebut text section. Proses juga mencakup program counter, yaitu sebuah stack untuk menyimpan alamat dari instruksi yang akan dieksekusi selanjutnya dan register. Sebuah proses pada umumnya juga memiliki sebuah stack yang berisikan data-data yang dibutuhkan selama proses dieksekusi seperti parameter metoda, alamat return dan variabel lokal, dan sebuah data section yang menyimpan variabel global.
Sama halnya dengan Silberschatz, Tanenbaum juga berpendapat bahwa proses adalah sebuah program yang dieksekusi yang mencakup program counter, register, dan variabel di dalamnya. Kami tekankan bahwa program itu sendiri bukanlah sebuah proses; suatu program adalah satu entitas pasif; seperti isi dari sebuah berkas yang disimpan didalam disket. Sedangkan sebuah proses dalam suatu entitas aktif, dengan sebuah program counter yang menyimpan alamat instruksi selanjut yang akan dieksekusi dan seperangkat sumber daya (resource) yang dibutuhkan agar sebuah proses dapat dieksekusi.
Untuk mempermudah kita membedakan program dengan proses, kita akan menggunakan analogi yang diberikan oleh Tanenbaum. Misalnya ada seorang tukang kue yang ingin membuat kue ulang tahun untuk anaknya. Tukang kue tersebut memiliki resep kue ulang tahun dan bahan-bahan yang dibutuhkan untuk membuat kue ulang tahun di dapurnya seperti: tepung terigu, telur, gula, bubuk vanila dan bahan-bahan lainnya. Dalam analogi ini, resep kue ulang tahun adalah sebuah program, si tukang kue tersebut adala prosesor (CPU), dan bahan-bahan untuk membuat kue tersebut adalah data input. Sedangkan proses-nya adalah kegiatan sang tukang kue untuk membaca resep, mengolah bahan, dan memanggang kue tersebut.
Walau dua proses dapat dihubungkan dengan program yang sama, program tersebut dianggap dua urutan eksekusi yang berbeda. Sebagai contoh, beberapa pengguna dapat menjalankan salinan yang berbeda pada mail program, atau pengguna yang sama dapat meminta banyak salinan dari program editor. Tiap-tiap proses ini adakah proses yang berbeda dan walau bagian text-section adalah sama, data section-nya bervariasi. Adalah umum untuk memiliki proses yang menghasilkan banyak proses begitu ia bekerja.
B. 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. Berakhir.
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.
Thread merupakan unit dasar dari penggunaan CPU, yang terdiri dari 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.
Thread, atau kadang-kadang disebut proses ringan (lightweight), adalah unit dasar dari utilisasi CPU. Di dalamnya terdapat ID thread, program counter, register, dan stack. Dan saling berbagi dengan thread lain dalam proses yang sama.

Konsep Dasar Thread
Secara informal, proses adalah program yang sedang dieksekusi. Ada dua jenis proses, proses berat (heavyweight) atau biasa dikenal dengan proses tradisional, dan proses ringan atau kadang disebut thread.
Thread saling berbagi bagian program, bagian data dan sumber daya sistem operasi dengan thread lain yang mengacu pada proses yang sama. Thread terdiri atas ID thread, program counter, himpunan register, dan stack. Dengan banyak kontrol thread proses dapat melakukan lebih dari satu pekerjaan pada waktu yang sama.
Keuntungan
1.Tanggap: Multithreading mengizinkan program untuk berjalan terus walau pun pada bagian program tersebut di block atau sedang dalam keadaan menjalankan operasi yang lama/ panjang. Sebagai contoh, multithread web browser dapat mengizinkan pengguna berinteraksi dengan suatu thread ketika suatu gambar sedang diload oleh thread yang lain.
2.Pembagian sumber daya: Secara default, thread membagi memori dan sumber daya dari proses. Keuntungan dari pembagian kode adalah aplikasi mempunyai perbedaan aktifitas thread dengan alokasi memori yang sama.
3.Ekonomis: Mengalokasikan memori dan sumber daya untuk membuat proses adalah sangat mahal. Alternatifnya, karena thread membagi sumber daya dari proses, ini lebih ekonomis untuk membuat threads.
4.Pemberdayaan arsitektur multiprosesor: Keuntungann dari multithreading dapat ditingkatkan dengan arsitektur multiprosesor, dimana setiap thread dapat jalan secara parallel pada prosesor yang berbeda. Pada arsitektur prosesor tunggal, CPU biasanya berpindah-pindah antara setiap thread dengan cepat, sehingga terdapat ilusi paralelisme, tetapi pada kenyataannya hanya satu thread yang berjalan di setiap waktu.
User thread didukung oleh kernel dan diimplementasikan oleh thread library ditingkat pengguna. Library mendukung untuk pembentukan thread, penjadualan, dan managemen yang tidak didukung oleh kernel.
C. Mutual Exclusion adalah Suatu kondisi dimana setiap sumber daya diberikan tepat pada satu proses pada suatu waktu (kondisi-kondisi untuk solusi). Tiga kondisi untuk menentukan mutual Exclusion diantaranya :
1.Tidak ada dua proses yang pada saat bersamaan berada di critical region.
2.Tidak ada proses yang berjalan diluar critical region yang bisa menghambat proses lain
3.Tidak ada proses yang tidak bisa masuk ke critical region
Merupakan kondisi dimana terdapat sumber daya yang tidak dapat dipakai  bersama pada waktu yang bersamaan (misalnya : printer, disk drive).  Kondisi demikian disebut sumber daya kritis, dan bagian program yang  menggunakan sumber daya kritis disebut critical region / section.  Hanya satu program pada satu saat yang diijinkan masuk ke critical region. Pemogram tidak dapat bergantung pada sistem operasi untuk memahami dan  memaksakan batasan ini, karena maksud program tidak dapat diketahu oleh  sistem operasi.
Hanya saja, sistem operasi menyediakan layanan (system call) yang bertujuan  untuk mencegah proses lain masuk ke critical section yang sedang digunakan proses tertentu.
D. 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. Unutk mencegah race condition, proses-proses yang berjalan besamaan haus di disinkronisasi.
E. Sinkronisasi adalah Komunikasi antara proses yang membutuhkan place by calls untuk mengirim dan menerima data primitive. Terdapat rancangan yang berbeda-beda dalam implementasi setiap primitive. Pengiriman pesan mungkin dapat diblok (blocking) atau tidak dapat dibloking (nonblocking) – juga dikenal dengan nama sinkron atau asinkron.
Sinkronisasi adalah proses pengaturan jalannya beberapa proses pada saat yang bersamaan. tujuan utama sinkronisasi adalah menghindari terjadinya inkonsitensi 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 deadlock dan starvation. Sinkronisasi umumnya dilakukan dengan bantuan perangkat sinkronisasi. Penyelesaian terhadap masalah ini sangat penting karena perkembangan teknologi sistem komputer menuju ke sistem multiprocessing, terdistribusi dan paralel yang mengharuskan adanya proses-proses kongkuren.
Kemungkinan Sinkronisasi Gagal
Sayangnya, konsumen secara logika belum istirahat. Jadi sinyal untuk membangkitkan konsumen, tidak dapat ditangkap oleh konsumen. Ketika konsumen bekerja berikutnya, konsumen akan memeriksa nilai count yang dibaca sebelumnya, dan mendapatkan nilai 0, kemudian konsumen istirahat (sleep) lagi. Cepat atau lambat produsen akan mengisi buffer dan juga pergi istirahat (sleep). Keduanya akan istirahat selamanya.
Inti permasalahannya disini adalah pesan untuk membangkitkan sebuah proses tidak tersampaikan. Jika pesan/ sinyal ini tersampaikan dengan baik, segalanya akan berjalan lancar.
F. Deadlock ialah suatu kondisi permanen dimana proses tidak berjalan lagi ataupun tidak ada komunikasi lagi antar proses. Deadlock disebabkan karena proses yang satu menunggu sumber daya yang sedang dipegang oleh proses lain yang sedang menunggu sumber daya yang dipegang oleh proses tersebut. Atau dengan kata lain setiap proses dalam set menunggu untuk sumber yang hanya bisa dikerjakan oleh proses lain dalam set yang sedang menunggu.    Ilustasi deadlock, misalnya :
· Terdapat dua proses, yaitu P1 dan P2 dan dua sumber daya kritis,
yaitu R1 dan R2.
· Proses P1 dan P2 harus mengakses kedua sumber daya tersebut, dengan
kondisi ini terjadi : R1 diberikan ke P1, sedangkan R2 diberikan ke P2.
Karena untuk melanjutkan eksekusi memerlukan kedua sumber daya sekaligus  maka kedua proses akan saling menunggu sumber daya lain selamanya.  Tak ada proses yang dapat melepaskan sumber daya yang telah dipegangnya  karena menunggu sumber daya lain yang tak pernah diperolehnya.  Kedua proses dalam kondisi deadlock, yang tidak dapat membuat kemajuan apapun dan deadlock merupakan kondisi terparah karena dapat melibatkan banyak proses dan semuanya tidak dapat mengakhiri prosesnya secara benar.
G. Starvation adalah suatu proses meninggalkan critical section dan lebih dari satu proses menunggu (waiting).Beberapa proses dapat ditolak aksenya dalam waktu tak terbatas.
Ilustasi deadlock, misalnya :
· Terdapat tiga proses, yaitu P1, P2 dan P3.
· P1, P2 dan P3 memerlukan pengaksesan sumber daya R secara periodik
Skenario berikut terjadi :
· P1 sedang diberi sumber daya R sedangkan P2 dan P3 diblocked menunggu
sumber daya R.
· Ketika P1 keluar dari critical section, maka P2 dan P3 diijinkan
mengakses R.
· Asumsi P3 diberi hak akses, kemudian setelah selesai, hak akses kembali
diberikan ke P1 yang saat itu kembali membutuhkan sumber daya R.
Jika pemberian hak akses bergantian terus-menerus antara P1 dan P3,  maka P2 tidak pernah memperoleh pengaksesan sumber daya R. Dalam kondisi ini memang tidak terjadi deadlock, hanya saja P2 mengalami starvation (tidak ada kesempatan untuk dilayani).
H. Monitor adalah kumpulan prosedur, variabel dan struktur data di satu modul atau paket khusus. Proses dapat memanggil prosedur-prosedur kapan pun diinginkan. Tapi proses tak dapat mengakses struktur data internal dalam monitor secara langsung. Hanya lewat prosedur-prosedur yang dideklarasikan minitor untuk mengakses struktur internal.
I. Semafor Telah dikatakan di atas bahwa pada awalnya orang-orang memakai konsep-konsep sinkronisasi yang sederhana yang didukung oleh perangkat keras, seperti pemakaian interrupt atau pemakaian rutin-rutin yang mungkin telah diimplementasi oleh perangkat keras.
Pada tahun 1967, Djikstra mengajukan suatu konsep dimana kita memakai suatu variable integer untuk menghitung banyaknya proses yang sedang aktif atau yang sedang tidur. Jenis variabel ini disebut semafor.  Tahun-tahun berikutnya, semafor banyak dipakai sebagai primitif dari mekanisme sinkronisasi yang lebih tinggi dan kompleks lagi. Sebagai contoh: monitor dari Javatm. Selain untuk hal tersebut, kebanyakkan semafor juga digunakan untuk sinkronisasi dalam komunikasi antar device perangkat keras.
Konsep semafor yang diajukan oleh Djikstra terdiri dari dua subrutin yang bernama P dan V. Nama P dan V berasal dari bahasa Belanda yang berarti Naik dan Turun atau Wait dan Signal. Untuk pembahasan kali ini, kita akan memakai Wait dan Signal.  Sub-rutin wait akan memeriksa apakah nilai dari semafor tersebut di atas 0. Jika ya, maka nilainya akan dikurangi dan akan melanjutkan operasi berikutnya. Jika tidak maka proses yang menjalankan wait akan menunggu sampai ada proses lain yang menjalankan subrutin signal.
Satu hal yang perlu diingat adalah subrutin wait dan signal haruslah bersifat atomic. Di sini kita lihat betapa besarnya dukungan perangkat keras dalam proses sinkronisasi. Nilai awal dari semaphore tersebut menunjukkan berapa banyak proses yang boleh memasuki critical section dari suatu program. Biasanya untuk mendukung sifat mutual exclusive, nilai ini diberi 1. Perlu ditekankan di sini, bahwa semafor bukan digunakan untuk menyelesaikan masalah critical section saja, melainkan untuk menyelesaikan permasalahan sinkronisasi secara umum.
Macam-macam Semafor
Ada 2 macam semafor yang cukup umum, yaitu:
1.Binary semaphore
2.Counting semaphore
Binary semaphore adalah semafor yang bernilai hanya 1 dan 0. Sedangkan Counting semaphore adalah semafor yang dapat bernilai 1 dan 0 dan nilai integer yang lainnya.
Banyak sistem operasi yang hanya mengimplementasi binary semaphore sebagai primitif, sedangkan counting semaphore dibuat dengan memakai primitif ini. Untuk lebih rinci mengenai cara pembuatan counting semaphore dapat dilihat pada bagian berikutnya.
Perlu diketahui di sini bahwa, ada beberapa jenis dari counting semaphore. Salah satu jenisnya adalah semafor yang tidak mencapai nilai negatif (seperti yang dicontohkan pada bagian sebelumnya). Jenis yang lain adalah semaphore yang dapat mencapai nilai negatif.
Dari referensi lain, 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:
1.Semaphore dapat diinisialisasi dengan nilai non-negatif.
2.Terdapat dua operasi terhadap semaphore, yaitu Down dan Up. Usulan asli yang disampaikan Djikstra adalah operasi P dan V.
Semafor Menyelesaikan Masalah Sinkronisasi antar Proses
Kadangkala kita ingin membuat suatu proses untuk menunggu proses yang lain untuk menjalankan suatu perintah. Isu yang ada di sini adalah bagaimana caranya suatu proses mengetahui bahwa proses yang lain telah menyelesaikan instruksi tertentu. Oleh karena itu digunakanlah semafor karena semafor adalah solusi yang cukup baik dan mudah untuk mengatasi hal tersebut.
Nilai semaphore diset menjadi 0
Proses 1                               Proses 2
56 print “satu”                 17  wait(semaphoreVar)
57 signal(semaphoreVar)         18  print “dua”

siapapun yang berjalan lebih cepat, maka keluarannya pasti “satu” kemudian diikuti oleh “dua”. Hal ini disebabkan karena jika proses 2 berjalan terlebih dahulu, maka proses tersebut akan menunggu (nilai semafor = 0) sampai proses 1 memanggil signal. Sebaliknya jika proses 1 berjalan terlebih dahulu, maka proses tersebut akan memanggil signal untuk memberikan jalan terlebih dahulu kepada proses 2.
3.Implementasi sinkronisasi & mutual exclusion di Windows & Linux!
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
merupakan metode menghubungkan standart output proses ke standart input proses lain. Pipe adalah metode komunikasi satu arah (di sebut half-duplex) antara proses-proses.
Messages queue
paling banyak di deskripsikan sebagai internal linked list di ruang alamat kernel. Messages queues memungkinkan dua proses atau lebih menulis pesan yang akan di baca oleh satu proses pembaca lebih.
Shared Memory
memungkinkan satu proses atau lebih berkomunikasi lewat memory di muncul di ruang alamat memory maya-nya(virtual memory).
Semaphores
bentuk paling sederhana dari semaphores adalah lokasi di memory yang mempunyai nilai yang dapat di uji di-set (operasi test and set) oleh lebih dari satu proses. Operasi tes dan set tidak dapat diinterupsi atau atomik, begitu operasi dimulai tidak ada yang dapat menghentikannya.
Signal

cara memberi tahu proses bahwa “sesuatu yang penting telah terjadi, maka lepaskan yang saat itu sedang di lakukan dan tanganilah”. Signal sering disebut software interupt.(muhammd alif & gilang)




Tidak Kita Sadari

12 04 2010

Ternyata Ketika kita asyik ym an, terus fb an, or melakukan hal lain dalam komputer, ternyata membuat banyak proses dan thread yang ternyata tidak kita sadari. Kita tidak sadar betapa cepat dan beratnya beban yang harus di proses oleh suatu komputer OS pada saat kita gunakan. Nah pengen tahu dan kenal apa itu proses dan thread? simak ulasan di bawah ini :

Konsep Dasar dan Definisi Proses

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.

Kami tekankan bahwa program itu sendiri bukanlah sebuah proses; suatu program adalah satu entitas pasif; seperti isi dari sebuah berkas yang disimpan didalam disket, sebagaimana sebuah proses dalam suatu entitas aktif, dengan sebuah program counter yang mengkhususkan pada instruksi selanjutnya untuk dijalankan dan seperangkat sumber daya/ resource yang berkenaan dengannya.

Walau dua proses dapat dihubungkan dengan program yang sama, program tersebut dianggap dua urutan eksekusi yang berbeda. Sebagai contoh, beberapa pengguna dapat menjalankan copy yang berbeda pada mail program, atau pengguna yang sama dapat meminta banyak copy dari program editor. Tiap-tiap proses ini adakah proses yang berbeda dan walau bagian tulisan-text adalah sama, data section bervariasi. Juga adalah umum untuk memiliki proses yang menghasilkan banyak proses begitu ia bekerja.

Threads

Model proses yang didiskusikan sejauh ini telah menunjukkan bahwa suatu proses adalah sebuah program yang menjalankan eksekusi thread tunggal. Sebagai contoh, jika sebuah proses menjalankan sebuah program Word Processor, ada sebuah thread tunggal dari instruksi-instruksi yang sedang dilaksanakan.

Kontrol thread tunggal ini hanya memungkinkan proses untuk menjalankan satu tugas pada satu waktu. Banyak sistem operasi modern telah memiliki konsep yang dikembangkan agar memungkinkan sebuah proses untuk memiliki eksekusi multithreads, agar dapat dapat secara terus menerus mengetik dalam karakter dan menjalankan pengecek ejaan didalam proses yang sama. Maka sistem operasi tersebut memungkinkan proses untuk menjalankan lebih dari satu tugas pada satu waktu.

Tahap Proses

Setiap proses pas ada pembuatan atau creation, scheduling, shitching, syncronization and communication procesing, managemen PCB, Termination.

  • Creation :  Adalah dimana akan dilakukan pembuatan proses
  • Scheduling  : Adalah dimana proses akan di jadwalkan oleh OS, penjadwalan ini meliputi :

job queue : ketika proses berada di CPU

– ready queue : proses yang hidup pada memori utama, siap dan menunggu untuk masuk ke job queue

– device queue : bila proses tersebut menunggu peralatan I/O tertentu

– Setiap proses akan berpindah dari satu antrian ke antrian lain

Pada proses ini terjadi

  • Shitching : disini proses interupsi by user maupun kebutuhan proses lain terhadap I/O
  • syncronization n Communication : Yaitu penyamaan dan proses komunikasi anatar proses
  • Managemen PCB : Pengatruran Proses Control Block agar semua proses yang di tangani oleh OS dapat bekerja secara maksimal

Pada Saat Ini kecepatan proses dalam komputer sangat maju dengan pesat, hal ini dikarenakan adanya arsitektur dari processor itu sendiri. Pada komputer dengan multiprosessor saat ini sudah ada pertimbangan bahwasanya ada konfiguarasi proses dengan multiproscessor, sehingga berapa proseskan yang dapat di eksekusi pada satu waktu dan satu block.

Selain PCB ada juga TCB

dalam ulasan Wiliam Stalling di bab 4.1 tabel daftar 3,5 elemen khas ditemukan di blok kontrol proses untuk OS untreaded tiga, yang seharusnya menjadi milik sebuah blok kontrol tiga dan yang seharusnya menjadi milik blok kontrol proses untuk sistem multithreading?
Thread control block :  Processor state information process control information
Process control block : Process intenfication

hal ini menunjukan bahwasanya penjadwalan yang dilakukan oleh thread lebih efisien, karena masih dalam satu proses. Semisal dalam satu proses ada thread dan thread tersebutmembuat scheduling lagi maka kecepatan scheduling dari thread tersebut lebih cepat dari pada membuat suatu proses lagi, mengapa? karena scheduling baru yang diciptakan masih dalam satu proses itu sendiri, berbeda dengan scheduling yang membuat proses baru lagi, maka yang akan di siapkan akan terlalu banyak. Hal inilah yang menjadi penyebab mengapa thread lebih dipilih untuk di tingkatkan dari suatu teknologi proses. (Aris)





The Micro Kernel

12 04 2010

Mikrokernel merupakan modul inti yang meyediakan beragam mekanisme yang dibutuhkan untuk mengembangkan sebuah sistem operasi, seperti halnya manajemen pengalamatan ruang tingkat rendah, manajemen thread, dan komunikasi antar proses. Dalam implementasinya mikrokernel merupakan satu-satunya perangkat lunak yang berjalan dengan tingkat kewenangan tertinggi (umumnya disebut sebagai modus supervisor atau modus kernel) dari serangkaian level kewenangan yang tersedia pada perangkat kerasnya. Layanan yang disediakan oleh sebuah sistem operasi beberapa diantaranya adalah device driver, protokol jaringan, sistem berkas, dan kode antarmuka pengguna yang berada dalam ruang pengguna. Mikrokernel sangat erat terkait dengan exokernel , serta memiliki banyak kesamaan dengan hypervisor, namun implementasinya lebih bersifat minimalis, dan secara spesifik untuk mendukung pengimplementasian mesin virtual.

Mikrokernel L4 sering juga disebut sebagai hypervisor, yang mengindikasikan kemungkinan pengimplementasian sebuah mikrokernel sebagai hypervisor. Istilah nanokernel dalam sejarahnya digunakan untuk membedakan mikrokernel saat ini dengan istilah mikrokernel sebelumnya yang menyediakan layanan sistem aktual, namun secara prinsip minimalitas menurut Jochen Liedtke dalam disain mikrokernel L4 menyebutkan bahwa istilah-istilah tersebut memiliki arti yang kurang lebih sama.

Metode ini menyusun sistem operasi dengan menghapus semua komponen yang tidak esensial dari kernel, dan mengimplementasikannya sebagai program sistem dan level pengguna. Hasilnya kernel yang lebih kecil. Pada umumnya mikrokernel mendukung proses dan menagemen memori yang minimal, sebagai tambahan utnuk fasilitas komunikasi.Fungsi utama mikrokernel adalah mendukung fasilitas komunikasi antara program klien dan bermacam-macam layanan yang juga berjalan di user space. Komunikasi yang dilakukan secara tidak langsung, didukung oleh sistem message passing, dengan bertukar pesan melalui mikrokernel.Salah satu keuntungan mikrokernel adalah ketika layanan baru akan ditambahkan ke user space, kernel tidak perlu dimodifikasi. Kalau pun harus, perubahan akan lebih sedikit. Hasil sistem operasinya lebih mudah untuk ditempatkan pada suatu desain perangkat keras ke desain lainnya. Mikrokernel juga mendukung keamanan reliabilitas lebih, karena kebanyakan layanan berjalan sebagai pengguna proses. Jika layanan gagal, sistem operasi lainnya tetap terjaga. Beberapa sistem operasi yang menggunakan metode ini adalah TRU64 UNIX, MacOSX, dan QNX.

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.

1.3 Rancangan Mikrokernel
Pada pembahasan “Struktur Sederhana”, sempat disinggung istilah “kernel”. Apakah kernel itu? Kernel adalah komponen sentral dari sistem operasi. Ia mengatur hal-hal seperti interrupt handler(untuk menyediakan layanan interupsi), process scheduler(membagi-bagi proses dalam prosesor), memory management, I/O, dan sebagainya. Atau dengan kata lain, ia adalah jembatan antara hardware dengan software.
Cara tradisional untuk membangun sistem operasi adalah dengan membuat kernel monolitis, yaitu semua fungsi disediakan oleh kernel, dan ini menjadikan kernel suatu program yang besar dan kompleks.
Cara yang lebih modern, adalah dengan menggunakan kernel mikro. Pada awalnya, konsep mikro kernel dikembangkan pada sistem operasi Mach. Ide dasar dari pengembangan kernel mikro adalah bahwa hanya fitur-fitur yang perlu saja yang diimplementasikan dalam kernel (mengenai fitur-fitur apa saja yang perlu diimplementasikan, ini bisa berbeda tergantung desain sistem operasi).
Walaupun garis pembatas mengenai apa saja yang berada di dalam dan luar kernel mikro bisa berbeda antara desain yang satu dengan yang lain, namun ada karakteristik yang umum, yaitu servis-servis yang umumnya menjadi bagian sistem operasi menjadi subsistem eksternal yang bisa berinteraksi satu sama lain dan dengan kernel tentunya. Ini mencakup device driver, file system, virtual memory manager, windowing system, dan security devices. Pendekatan kernel mikro menggantikan pendekatan berlapis yang vertikal tradisional.
Komponen-komponen sistem operasi yang berada di luar kernel mikro diimplementasikan sebagai server process dan berkomunikasi dengan message passing via kernel mikro. Misalnya jika user ingin membuat berkas baru, dia mengirim pesan ke file system server, atau jika ingin membuat proses baru, dia mengirimkan pesan ke process server.
Gambar 7.2. Struktur kernel mikro

1.4 Kelebihan MikroKernel:

Interface yang seragam. Proses tidak lagi dibedakan, baik antara kernel-level maupun user-level, karena semuanya berkomunikasi via message passing.
Extensibility . Bisa menambahkan fitur-fitur baru tanpa perlu melakukan kompilasi ulang.
Flexibility . Fitur-fitur yang sudah ada bisa dikurangi, atau dimodifikasi sesuai dengan kebutuhan sehingga menjadi lebih efisien. Misalnya tidak semua pengguna membutuhkan security yang sangat ketat, atau kemampuan untuk melakukan distributed computing.
Portability . Pada kernel mikro, semua atau sebagian besar kode yang prosesor-spesifik berada di dalamnya. Jadi, proses porting ke prosesor lain bisa dilakukan dengan relatif sedikit usaha. Pada kelompok desktop misalnya, tampaknya dominasi Intel makin kuat. Tapi, sampai seberapa lama itu bisa bertahan? Karena itulah, portability adalah salah satu isu yang sangat penting.
Reliability . Semakin besar suatu software, maka tentulah semakin sulit untuk menjamin reliability-nya. Desain dengan pendekatan berlapis sangatlah membantu, dan dengan pendekatan kernel mikro bisa lebih lagi. Kernel mikro dapat dites secara ekstensif .Karena dia menggunakan API yang sedikit, maka bisa meningkatkan kualitas code di luar kernel.
Support for object-oriendted OS . Model kernel mikro sangat sesuai untuk mengembangkan sistem operasi yang berbasis object-oriented. Contoh sistem operasi yang menggunakan kernel mikro adalah TRU64 UNIX, MacOSX, dan QNX.

1.5 Manajemen Memory
Pada umumnya mikrokernel mendukung proses dan menajemen memori yang minimal, sebagai tambahan untuk fasilitas komunikasi. Bagian ini menjelaskan bagaimana linux menangani memori dalam sistem. Memori managemen merupakan salah satu bagian terpenting dalam sistem operasi. Karena adanya keterbatasan memori, diperlukan suatu strategi dalam menangani masalah ini. Jalan keluarnya adalah dengan menggunakan memori virtual. Dengan memori virtual, memori tampak lebih besar daripada ukuran yang sebenarnya. Dengan memori virtual kita dapat:
1. Ruang alamat yang besar
Sistem operasi membuat memori terlihat lebih besar daripada ukuran memori sebenarnya. Memori virtual bisa beberapa kali lebih besar daripada memori fisiknya.
2. Pembagian memori fisik yang adil
Managemen memori membuat pembagian yang adil dalam pengalokasian memori antara proses-proses.
3. Perlindungan
Memori managemen menjamin setiap proses dalam sistem terlindung dari proses-proses lainnya. Dengan demikian, program yang crash tidak akan mempengaruhi proses lain dalam sistem tersebut.
4. Penggunaan memori virtual bersama
Memori virtual mengizinkan dua buah proses berbagi memori diantara keduanya, contohnya dalam shared library. Kode library dapat berada di satu tempat, dan tidak dikopi pada dua program yang berbeda.
Memori Virtual
Memori fisik dan memori virtual dibagi menjadi bagian-bagian yang disebut page. Page ini memiliki ukuran yang sama besar. Tiap page ini punya nomor yang unik, yaitu Page Frame Number (PFN). Untuk setiap instruksi dalam program, CPU melakukan mapping dari alamat virtual ke memori fisik yang sebenarnya.
Penerjemahan alamat di antara virtual dan memori fisik dilakukan oleh CPU menggunakan tabel page untuk proses x dan proses y. Ini menunjukkan virtial PFN 0 dari proses x dimap ke memori fisik PFN 1. Setiap anggota tabel page mengandung informasi berikut ini:
1. Virtual PFN
2. PFN fisik
3. informasi akses page dari page tersebut
Untuk menerjemahkan alamat virtual ke alamat fisik, pertama-tama CPU harus menangani alamat virtual PFN dan offsetnya di virtual page. CPU mencari tabel page proses dan mancari anggota yang sesuai degan virtual PFN. Ini memberikan PFN fisik yang dicari. CPU kemudian mengambil PFN fisik dan mengalikannya dengan besar page untuk mendapat alamat basis page tersebut di dalam memori fisik. Terakhir, CPU menambahkan offset ke instruksi atau data yang dibutuhkan. Dengan cara ini, memori virtual dapat dimap ke page fisik dengan urutan yang teracak.
Demand Paging
Cara untuk menghemat memori fisik adalah dengan hanya meload page virtual yang sedang digunakan oleh program yang sedang dieksekusi. Tehnik dimana hanya meload page virtual ke memori hanya ketika program dijalankan disebut demand paging.
Ketika proses mencoba mengakses alamat virtual yang tidak ada di dalam memori, CPU tidak dapat menemukan anggota tabel page. Contohnya, dalam gambar, tidak ada anggota tabel page untuk proses x untuk virtual PFN 2 dan jika proses x ingin membaca alamat dari virtual PFN 2, CPU tidak dapat menterjemahkan alamat ke alamat fisik. Saat ini CPU bergantung pada sistem operasi untuk menangani masalah ini. CPU menginformasikan kepada sistem operasi bahwa page fault telah terjadi, dan sistem operasi membuat proses menunggu selama sistem operasi menagani masalah ini.
CPU harus membawa page yang benar ke memori dari image di disk. Akses disk membutuhkan waktu yang sangat lama dan proses harus menunggu sampai page selesai diambil. Jika ada proses lain yang dapat dijalankan, maka sistem operai akan memilihnya untuk kemudian dijalankan. Page yang diambil kemudian dituliskan di dalam page fisik yang masih kosong dan anggota dari virtual PFN ditambahkan dalam tabel page proses. Proses kemudian dimulai lagi pada tempat dimana page fault terjadi. Saat ini terjadi pengaksesan memori virtual, CPU membuat penerjemahan dan kemudian proses dijalankan kembali.
Demand paging terjadi saat sistem sedang sibuk atau saat image pertama kali diload ke memori. Mekanisme ini berarti sebuah proses dapat mengeksekusi image dimana hanya sebagian dari image tersebut terdapat dalam memori fisik.
Swaping
Jika memori fisik tiba-tiba habis dan proses ingin memindahkan sebuah page ke memori, sistem operasi harus memutuskan apa yang harus dilakukan. Sistem operasi harus adil dalam mambagi page fisik dalam sistem diantara proses yang ada, bisa juga sistem operasi menghapus satu atau lebih page dari memori untuk membuat ruang untuk page baru yang dibawa ke memori. Cara page virtual dipilih dari memori fisik berpengaruh pada efisiensi sistem.
Linux menggunakan tehnik page aging agar adil dalam memilih page yang akan dihapus dari sistem. Ini berarti setiap page memiliki usia sesuai dengan berapa sering page itu diakses. Semakin sering sebuah page diakses, semakin muda page tersebut. Page yang tua adalah kandidat untuk diswap.
Pengaksesan Memori Virtual Bersama
Memori virtual mempermudah proses untuk berbagi memori saat semua akses ke memori menggunakan tabel page. Proses yang akan berbagi memori virtual yang sama, page fisik yang sama direference oleh banyak proses. Tabel page untuk setiap proses mengandung anggota page table yang mempunyai PFN fisik yang sama.
Efisiensi
Desainer dari CPU dan sistem operasi berusaha meningkatkan kinerja dari sistem. Disamping membuat prosesor, memori semakin cepat, jalan terbaik adalah manggunakan cache. Berikut ini adalah beberapa cache dalam managemen memori di linux:
1. Page Cache
Digunakan untuk meningkatkan akses ke image dan data dalam disk. Saat dibaca dari disk, page dicache di page cache. Jika page ini tidak dibutuhkan lagi pada suatu saat, tetapi dibutuhkan lagi pada saat yang lain, page ini dapat segera diambil dari page cache.
2. Buffer Cache
Page mungkin mengandung buffer data yang sedang digunakan oleh kernel, device driver dan lain-lain. Buffer cache tampak seperti daftar buffer. Contohnya, device driver membutuhkan buffer 256 bytes, adalah lebih cepat untuk mengambil buffer dari buffer cache daripada mengalokasikan page fisik lalu kemudian memecahnya menjadi 256 bytes buffer-buffer.
3. Swap Cache
Hanya page yang telah ditulis ditempatkan dalam swap file. Selama page ini tidak mengalami perubahan setelah ditulis ke dalam swap file, maka saat berikutnya page di swap out tidak perlu menuliskan kembali jika page telah ada di swap file. Di sistem yang sering mengalami swap, ini dapat menghemat akses disk yang tidak perlu.
Salah satu implementasi yang umum dari hardware cache adalah di CPU, cache dari anggota tabel page. Dalam hal ini, CPU tidak secara langsung membaca tabel page, tetap mencache terjemahan page yang dibutuhkan.
Load dan Eksekusi Program
1. Penempatan program dalam memori
Linux membuat tabel-tabel fungsi untuk loading program, memberikan kesempatan kepada setiap fungsi untuk meload file yang diberikan saat sistem call exec dijalankan. Pertama-tama file binari dari page ditempatkan pada memori virtual. Hanya pada saat program mencoba mengakses page yang telah diberikan terjadi page fault, maka page akan diload ke memori fisik.
2. Linking statis dan linking dinamis
a. Linking statis:
librari-librari yang digunakan oleh program ditaruh secara langsung dalam file binari yang dapat dieksekusi. Kerugian dari linking statis adalah setiap program harus mengandung kopi library sistem yang umum.
b. Linking dinamis:
hanya sekali meload librari sistem menuju memori. Linking dinamis lebih efisien dalam hal memori fisik dan ruang disk.
1.6 Komunikasi Antar Proses
Komunikasi antar proses (Interprocess Communication) atau thread dalam suatu SO mikrokernel adalah melalui message.
• Suatu message menyertakan:
– Header yang mengidetifikasi proses
pengiriman dan penerimaan, dan
– Body yang mengandung data langsung, pointer ke suatu block data, atau beberapa informasi kontrol mengenai proses.
Fungsi utama mikrokernel adalah mendukung fasilitas komunikasi antara program klien dan bermacam-macam layanan yang juga berjalan di user space.
Komunikasi yang dilakukan secara tidak langsung, didukung oleh sistem message passing, dengan bertukar pesan melalui mikrokernel.
Salah satu keuntungan mikrokernel adalah ketika layanan baru akan ditambahkan ke user space, kernel tidak perlu dimodifikasi. Kalau pun harus, perubahan akan lebih sedikit. Hasil sistem operasinya lebih mudah untuk ditempatkan pada suatu desain perangkat keras ke desain lainnya. Mikrokernel juga mendukung keamanan reliabilitas lebih, karena kebanyakan layanan berjalan sebagai pengguna proses. Jika layanan gagal, sistem operasi lainnya tetap terjaga

1.7 Manajemen I/O & Interupsi!
Di dalam mikrokernel, adalah mungkin menangani interupsi hardware sebagai message dan menyertakan port I/O dalam ruang alamat.
– Proses user-level tertentu dilewatkan ke interrupt & kernel memelihara pemetaan tersebut.

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.







SO [Bagian 3]

29 03 2010

Perintah Cat, Grep dan Top

Perintah cat

deskripsi

perintah cat adalah rentetan atau standar input ke standart output. Di tulis oleh Torbjorn Granlund and Richard M. Stallman. penggunaanya adalah sebagai berikut :

  1. masuk ke konsole Gnu/linux.
  2. ketikan cat, spasi dokumen anda contoh (cat ./cermin.sh).

Di laptop saya hasilnya akan seperti ini :

untuk mengetahui bagaimana cat bisa di operasikan kita tinggal mengetikan man cat pada konsole, di sana terdapat beberapa variabel penulisan, musal -n, -A, -b, -e, -E dan sebagainya.

Perintah Grep

<!– @page { margin: 0.79in } P { margin-bottom: 0.08in } –>

Perintah Grep

Deskripsi

perintah grep adalah sebuah perintah untuk mencari prase kata dalm suatu file dengan pattern atau yang biasa dikenal dengan pola. Contoh penggunaanya:

  1. Masuk ke konsole gnu/linux anda

  2. ketikan perintah grep <kata yang dicari> <filenya>

    pada laptop saya winchester :

saya hendak mencari kalimat ubuntu yang terdapat pada file suorce.list

yang selanjutnya grep juga bisa digunakan untuk menghitung jumlah kata ataupun huruf yang ada dalam suatu file dengan mengetikan perinta grep -c <kata yang dicari> <file>.

<!– @page { margin: 0.79in } P { margin-bottom: 0.08in } –>

Perintah top

Deskripsi

top suatu perintah untuk menampikan “task” tugas-tugas yang sedang berjalan dalan sistem operasi Gnu/Linux. Secara garis umum deskripsi task ini adalah “dinamic real-time view of running system” atau bahasa Indonesia adalah program yang menyediakan penampilan proses yang sedang berjalan di system secara dinamis dan real-time/saat itu juga. Program ini juga bisa menampilkan hasil sistem dengan baik secara daftar.

Penulisan

program top ini bisa kita jalankan dengan konsole/terminal/command line, caranya adalah sebagaia berikut :

  1. masuk ke konsole Gnu/linux anda.

  2. ketikan perintah “top” (tanpa tanda “ ”).

ini hasilnya di laptop saya “winchester” :

jika kita melihat dari hasil di atas disana terdapat 12 kolom dimana kita bisa melihat ada kolom pid, user, pr, ni, virt, res, shr, s, %cpu, %mem, time+, command. Selain itu di atasnya ada semacam tulisan

top – 12:19:46 up 53 min, 3 users, load average: 1.16, 1.33, 1.28

Tasks: 150 total, 2 running, 148 sleeping, 0 stopped, 0 zombie

Cpu(s): 45.3%us, 12.3%sy, 0.0%ni, 41.6%id, 0.0%wa, 0.6%hi, 0.2%si, 0.0%st

Mem: 1018388k total, 998192k used, 20196k free, 55664k buffers

Swap: 1036152k total, 120k used, 1036032k free, 509260k cached

dari sana kita dapat melihat kapan top diakses, terus berapa user yang sedang aktif, rata-rata load, ada berapa jumlah task yang dikerjakan, berapa yang sedang berjalan dan yang sedang tidur/pasif, berapa yang berhenti dan adakah suatu program yang termasuk zombie. Di baris ke-3 kita dapat melihat berapa % cpu di gunakan, dan berapa % pula system. Di baris 4 dan 5 kita bisa melihat memory dan virtual memory(swap). Di dalam program top ini kita bisa melakukan pemaksaan penghentian proses, namanya adalah “kill” dengan mengetikan k saat top sedang berjalan, lalu kita harus tahu PID yang hendak kita “kill”. Disini saya menghentikan “mplayer” yang sedang saya jalankan


setelah mengetikan PID kita enter dan ketikan k lalu enter lagi, maka akan hilang mplayer yg sedang berjalan.


Untuk mengetahui lebih banyak tentang perintah “top” kita bisa mengetikan pada konsole seperti berikut : man top

lalu enter. Disana kita akan mendapat penjelasan banyak sekali tentang apa itu perintah top dan cara pengoperasiannya. Namun sayang bagi anda yang alergi bahasa inggris karena instruksi yang terdapat dalam man top tersebut berbahsa inggris.

Perintah Grep

Deskripsi

perintah grep adalah sebuah perintah untuk mencari prase kata dalm suatu file dengan pattern atau yang biasa dikenal dengan pola. Contoh penggunaanya:

  1. Masuk ke konsole gnu/linux anda

  2. ketikan perintah grep <kata yang dicari> <filenya>

    pada laptop saya winchester :

saya hendak mencari kalimat ubuntu yang terdapat pada file suorce.list

yang selanjutnya grep juga bisa digunakan untuk menghitung jumlah kata ataupun huruf yang ada dalam suatu file dengan mengetikan perinta grep -c <kata yang dicari> <file>.





SO [bagian II]

29 03 2010

Managemen Proses Pada Linux

Arsitektur Dasar Sistem Operasi Linux

Bagian terpenting sistem operasi adalah kernel, merupakan jantung sistem

operasi.

Kernel menyediakan tool dimana semua layanan sistem komputer disediakan.

Kernel mencegah proses aplikasi mengakses mengakses perangkat keras secara

langsung, memaksa proses menggunakan tool yang disediakan.

Kernel memberi proteksi kepada pemakai dari gangguan pemakai lain

Tool Kernel digunakan melalui panggilan sistem (system call). Program sistem menggunakan tool kernel untuk implementasi beragam layanan. Program sistem dan semua program lain berjalan diatas kernel. Program pemakai berjalan di mode berbeda dengan kernel, disebut mode pemakai.

Kernel berisi beberapa bagian penting, yaitu:

– Manajemen proses

– Manajemen memori

– Driver-driver perangkat keras

– Driver-driver sistem file

– Manajemen jaringan

– Dan beragam subsistem lain

PROSES

Proses adalah program tunggal yang berjalan pada alamat virtual, berarti setiap hal yg berjalan dibawah Linux adalah proses. Proses ini berjalan melalui perintah- perintah yang ada dalam shell. Satu baris perintah dalam shell terkadang mampu mempengaruhi lebih dari satu proses, khususnya jika terdapat perintah pipe.

Contoh:

nroff -man ps.1 | grep kill | more

perintah ini melakukan tiga proses, satu proses untuk setiap perintahnya.

Tipe-tipe proses dalam Linux:

Ada beberapa tipe proses dalam Linux . Setiap proses mempunyai kekhususan dan

atribut tersendiri.:

Interactive processes: Proses yang dimulai (dan dikontrol oleh) shell. Bisa tampak

diluar (foreground) ataupun hanya didalam (background).

Batch processes: Proses yang tidak berhubungan dengan terminal tetapi menunggu

untuk dieksekusi secara sequent.

Daemon processes: Proses yang dimulai ketika Linux booting dan berjalan secara

background.

Cara termudah untuk mengetahui proses apa yang sedang berjalan pada sistem adalah

menggunakan perintah ps (process status). Perintah ps mempunyai beberapa option dan

argumen, tersedia untuk seluruh user dan root, walau tentu hasilnya akan berbeda

tergantung login anda. Jika anda login sebagai user biasa (bukan root), jika perintah ps

ditulis akan tampak hasil seperti:

$ ps

PID TTY STAT TIME COMMAND

41 v01 S 0:00 -bash

134 v01 R 0:00 ps

Hasil dari perintah ps selalu disusun dalam bentuk kolom. Kolom pertama berlabel PID (Process Identification Number); adalah penomoran dari Linux untuk menandai sebuah proses, dimulai dari nol dan bertambah satu untuk tiap proses hingga nomor tertinggi. Jika Linux mencapai nomor tertinggi, penomoran akan dimulai lagi dari nomor terendah dengan melewati nomor yang sedang digunakan proses yang aktif. Biasanya nomor terendah digunakan oleh proses kernel dan daemon yang dimulai saat booting hingga Linux berjalan. Untuk memanipulasi proses kita dapat menggunakan PID. Kolom TTY menunjukkan terminal yang digunakan saat proses dimulai. Kolom STAT menunjukkan kondisi terkini dari proses, entri yang paling banyak terdapat adalah S untuk sleeping dan R untuk running. Kolom TIME menunjukkan CPU time yang digunakan oleh proses. Kolom NAME menunjukkan nama proses yang berjalan, biasanya adalah nama perintah yang dimasukkan. Beberapa perintah digunakan untuk memulai perintah yang lain, proses ini dikenal dengan child process. Terdapat banyak versi perintah ps tergantung versi Linux yang digunakan. Kebanyakan admin (jika login sebagai root) menggunakan perintah ps dibawah ini untuk menampilkan keseluruhan informasi sistem:

ps -ef

ps –le

Proses yang terkunci dalam terminal dan tidak dapat melakukan apa pun disebut hang. Terkadang adapula sebuah proses yang berahir tidak sempurna. Hal ini disebut runaway process. Untuk mengatasi hal ini dan mengembalikan sistem ke keadaan normal digunakan perintah kill. Untuk menggunakan perintah ini kita harus mengakses konsol lain, jika terminal benar-benar terkunci kita harus login kembali. Sebagai seorang user biasa hanya dapat mengkill proses user itu sendiri dan tak dapat mempengaruhi user lain dalam sistem. Sebagai root anda mempunyai kuasa penuh menggunakan perintah kill. Diperlukan PID untuk mengetahui proses yang berjalan sehingga dapat mengkillnya.

Pembuatan Proses di Linux

Konsep pembuatan proses pada sistem operasi linux :

§ Setiap proses diberi nomor khusus sebagai identifikasi yang disebut process identification

atau PID berupa angka integer unik.

§ Jika proses selesai (Terminated) maka semua sumber daya yang digunakan termasuk PID

dibebaskan kembali.

§ Proses dibuat menggunakan system call fork() yang sering disebut forking proses

§ System call fork() mengkopi proses pemanggil sehingga akan terdapat 2 proses yaitu :

1. Proses pemanggil disebut PARENT

2. Proses hasil kopian disebut CHILD

§ Proses CHILD identik dengan proses PARENT-nya tetapi memiliki PID yang berbeda.

§ Setelah proses baru (child) berhasil dibuat eksekusi dilanjutkan secara normal di masing –

masing proses pada baris setelah pemanggilan system call fork().

§ Proses pemanggil (PARENT) dapat melakukan forking proses lebih dari satu kali sehingga

memungkinkan terdapat banyak proses CHILD yang dieksekusi.

§ Proses CHILD dapat melakukan forking proses seperti halnya PARENT sehingga dapat

terbentuk struktur pohon proses.

Penghentian Proses pada Linux

proses pada linux dapat kita lihat via GUI maupun CLI, di GUI kita bisa melihat pada System, administration, Sistem Monitor [dalam kasus ini saya menggunakan Ubuntu], kita bisa melihat proses yang sedang berjalan/running maupun yang sedang berhenti/sleep. Kita dapat menghentikan proses tersebut dengan memilih program dan ketik end proses pada sudut kanan bawah.

Jika menggunakan CLI, kita masuk pada terminal ketikan ps, ataupun top ingat PID proses yang hendak kita kill, jika kita menggunakan top, maka langkahnya adalah ketik k pada saat program top masih berjalan, lalu masukan pid, enter, kemudian ketikan k lagi dan enter. Penghentian semacam ini bersifat user end proses, terdapat juga penghentian proses parent n child.

Suatu proses diterminasi ketika proses tersebut telah selesai mengeksekusi perintah terakhir serta meminta sistem operasi untuk menghapus perintah tersebut dengan menggunakan system call exit. Pada saat itu, proses dapat mengembalikan data keluaran kepada proses induk-nya melalui system

call wait. Semua sumber-daya yang digunakan oleh proses akan dialokasikan kembali oleh sistem

operasi agar dapat dimanfaatkan oleh proses lain.

Suatu proses juga dapat diterminasi dengan sengaja oleh proses lain melalui system call abort. Biasanya proses induk melakukan hal ini pada turunannya. Alasan terminasi tersebut seperti:

• Turunan melampaui penggunaan sumber-daya yang telah dialokasikan. Dalam keadaan ini,

proses induk perlu mempunyai mekanisme untuk memeriksa status turunannya-nya.

• Task yang ditugaskan kepada turunan tidak lagi diperlukan.

• Proses induk selesai, dan sistem operasi tidak mengizinkan proses turunan untuk tetap

berjalan. Jadi, semua proses turunan akan berakhir pula. Hal ini yang disebut cascading

termination.





SO [Bagian I]

29 03 2010

TAHAPAN PROSES DALAM SISTEM OPERASI WINDOWS

Windows adalah salah satu sistem operasi yang mempunyai banyak keunggulan dalam menjalankan suatu eksekusinya. Didalam sistem operasi ini, terdapat proses-proses yang sangat valid dan selalu berhubungan satu sama lain. Dibawah ini akan dijelaskan beberapa penjelasan tentang proses pada sistem operasi windows.

Didalam window, prosesnya mempunyai beberapa elemen dasar untuk menjalankan proses tersebut, yaitu :

–          Identifier

–          State

–          Priority

–          Program counter

–          Memory pointers

–          Context data

–          I/O status information

–          Accounting information

Dalam kenyataanya, proses banyak mengalami gangguan dalam menjalankan tugasnya. Oleh karena itu, ada PCB (Proses Control Block) untuk membantu dan memberikan dukungan kepada proses itu.

Trace adalah dereta intruksi yang dieksekusi proses dalam menjalankan tugasnya. Dispatcher merupakan suatu program kecil yang men-switch processor dari satu proses ke proses lainnya. Dibawah ini adalah gambaran umum suatu main memory mengpart addres-addresnya untuk melakukan beberapa proses.

Gambar Alir Proses

Gambar Diagram Status

Biasanya, dalam menjalankan tuganya, proses berada pada salah satu dua status yaitu running atau not running. Selain itu, terdapat suatu antrian untuk mendapatkan eksekusi yang akan dijalankan. Dibawah ini adalah diagram antrian suatu proses.

Keterangan : Proses dipindahkan oleh dispatcher dari SO ke CPU kemudian kembali ke antrian (Queue) sampai tugas tersebut selesai (lengkap) dan seterusnya.

Sistem operasi windows memperbolehkan proses berjalan menghasilkan proses lagi. Aksi ini disebut Proses swapning dengan macam :

  1. Proses induk
  2. Proses anak

Dalam kenyataanya, windows melakukan beberapa eksekusi yang eksekusi itu masih menghasilkan beberapa proses yang berbeda. Proses ini haruslah memberikan sebuah intruksi kepada prose parent agar perses parent atau induk dapat menjalankan proses aslinya.

Model Proses Lima Status

Gambar Model Lima Status Pada Windows

Keterangan: Prosesor lebih cepat dibandngkan I/O, sehingga semua proses dapat menunggu I/O. Dalam gmabar diatas, status blocked berubah menjadi suspend ketika proses dialihkan ke disk. Dan penjelasanya ada pada gambar dibawah ini :

Gambar Satu Status Suspend

Gambar Dua Status Suspend

Setelah tahap ini, proses memberikan beberapa intruksi pada beberapa temenya yaitu penjelasan pada tabel kontrol sistem operasi windows dibawah ini :

Gambar Tabel Kontrol Dalam Proses Windows

Didalam proses sistem operasi windows, terdapat switc yaitu :memungkinkan berpindahnya proses. Suatu process switch dapat terjadi kapapun SO memperolehkontrol dari proses yang sedang (currently) berjalan. Event yang mungkin memberikan SO kontrol adalah :

Langkah-langkah dalam process switch:

1. Simpan context dari processor termasuk program counter (PC) & register lain

2. Update process control block (PCB) dariproses yang saat terkini dalam status Running

3.Pindahkan PCB ke antrian yang tepat –ready; blocked; ready/suspend

4. Pilih proses lain untuk dieksekusi

5. Update PCB dari proses terpilih

6. Update struktur data memorymanagement

7. Restore (kembalikan) context dari proses terpilih

  • Jelaskan alasan pembuatan & penghentian suatu proses!

Pembuatan proses:

Alasan Pembuatan & Penghentian Proses

Pembuatan Proses:

Sistem Operasi membangun suatu struktur data untuk mengelola proses yang akan dijalankan dalam program. Biasanya, semua proses dalam komputer dibuat oleh Sistem Operasi, Tetapi Sistem Operasi juga membolehkan proses yang sedang berjalan membuat proses lain. Aksi ini disubut process spawning

– Proses  induk  (parent)  adalah  proses yang bisa membuat proses baru

– Proses anak (child) merupakan proses baru

Penyebab terjadinya pembuatan suatu proses baru yaitu;

  1. Pada lingkungan batch, sebagai tanggapan atas pemberian suatu kerja (job)
  2. Pada lingkungan interaktif, ketika pemakai baru berusaha logon

Langkah-langkah dalam pembuatan proses, antara lain :

  • Memberi identitas (nama) pada proses yang dibuat.
  • Menyisipkan proses pada list proses atau tabel proses.

Penghentian Proses

Suatu proses akan berhenti jika telah menyelesaikan pernyataan terakhir dan meminta pada sistem operasi untuk menghapusnya dengan menggunakan system call exit. Proses mengembalikan semua data (output) ke parent proses melalui system call wait. Kemudian proses akan dihapus dari list atau tabel system dilanjutkan dengan menghapus PCB.

Penghapusan proses ini akan menjadi sangat kompleks jika ternyata proses yang akan dihentikan tersebut membuat proses-proses yang lain. Pada beberapa system proses-proses anak akan dihentikan secara otomatis jika proses induknya berhenti. Namun ada beberapa sistem yang menganggap bahwa proses anak ini terpisah dengan induknya, sehingga proses anak tidak ikut dihentikan secara otomatis pada saat proses induk dihentikan

Dalam kenyataanya, program yang berjalan tidak selalu berjalan dengan lancar, tetapi ada kesalahan-kesalahan yang menyebabkan program itu akan diberhentikan. Harus ada cara  yang dapat menandakan bahwa suatu proses selesai.

Indikasi ini dapat berupa:

– Instruksi HALT membangkitkan suatu interupsi alert  untuk SO

– Aksi pengguna (seperti log off & keluar dari suatu aplikasi)

– Suatu kesalahan atau error

– Dihentikan oleh proses induk

  • Jelaskan tentang model proses lima status beserta kemungkinan transisinya!

Model proses lima status diantaranya adalah

  1. New adalah Proses sedang dikerjakan/dibuat.
  2. Running adalah Instruksi sednag dikerjakan.
  3. Waiting adalah Proses sedang menunggu sejumlah kejadian untuk terjadi (seperti sebuah penyelesaian I/O atau penerimaan sebuah tanda/signal).
  4. Ready adalah Proses sedang menunggu untuk ditugaskan pada sebuah prosesor.
  5. Terminated adalah Proses telah selsesai melaksanakan tugasnya/mengeksekusi
  • Mengikuti soal sebelumnya, tetapi pada kehadiran dua status suspended.

Gambar Dua Status Suspended

  1. Blocked -Blocked/Suspend : Jika tidak ada proses siap maka setidaknya satu diblokir proses swapped keluar untuk memberikan ruang bagi proses lain yang tidak diblokir.
  2. Blocked/Suspend -Ready/Suspend : Sebuah proses dalam Diblokir / Suspend negara tersebut akan dipindahkan ke Siap / Suspend saat acara yang telah menunggu terjadi.
  3. Ready/Suspend – Ready : Bila tidak ada siap proses di memori utama OS perlu membawa satu untuk melanjutkan eksekusi. Selain itu mungkin dengan kasus yang di proses Siap / Suspend negara memiliki prioritas lebih besar dari salah satu proses di Siap negara.
  4. Ready -Ready/Suspend: Biasanya OS memilih untuk menunda proses yang diblokir daripada satu siap karena proses siap sekarang dapat dijalankan sedangkan yang diblokir adalah proses mengambil atas ruang memori utama dan tidak dapat dijalankan.
  5. New – Ready/Suspend and New – Ready : Ketika sebuah proses baru dibuat maka dapat ditambahkan ke antrian Siap atau Siap / Suspend antrian.
  6. Blocked/Suspend -Blocked : Pencantuman ini tampaknya transisi jika proses belum siap untuk dijalankan dan belum di utama memori tetapi mempertimbangkan skenario berikut Sebuah proses terminates freeing beberapa memory.memory utama akan memproses dalam (Diblokir / Suspend) antrian dengan prioritas yang lebih tinggi daripada salah satu dalam proses (Ready / Suspend) antrian dan OS memiliki alasan percaya bahwa memblokir kegiatan untuk proses yang akan terjadi segera.
  7. Running – Ready/Suspend:Biasanya yang menjalankan proses tersebut akan dipindahkan ke negara Siap jika alokasi waktu berakhir.
  8. Any State – Exit: Biasanya, proses terminates ketika sedang berjalan baik karena telah selesai atau karena kondisi beberapa kesalahan fatal.
  • Jelaskan elemen-elemen dari Process Control Block (PCB)!

Process Control Back

Process Control Back adalah bentuk informasi-informasi lain yang diperlukan SO untuk mengendalikan dan mengoordinasikan beragam proses aktif dalam suatu proses.

Element-elemen PCB antara lain:

    1. Identifier proses
    2. Status proses. Mendefinisikan status proses (running,ready,block, dsb)
    3. Prioritas. Menjelaskan prioritas proses\
    4. Informasi berkaitan penjadwalan. Informasi ini seperti lama menunggu, lama proses terakhir dieksekusi dsb.\
    5. Kejadian (Event). Identitas kejadian yang ditunggu proses
    6. Program Counter
    7. Informasi I/O untuk menjadwalkan informasi yang sudah masuk
    8. Konteks Data
    9. Memori Pointer
  • Penstrukturan data yaitu Suatu proses dapat dikaitkan dengan proses lain dalam satu antrian atau ring, atau struktur lainnya. PCB harus memiliki pointer untuk mendukung struktur ini.
  • Komunikasi antar proses yaitu Beragam flag, sinyal dan pesan dapat diasosiasikan dengan komunikasi antara dua proses yang terpisah. Informasi ini disimpan dalam PCB
  • Kewenangan proses yaitu Proses dapat mempunyai kewenangan berkaitan dengan memori dan tipe instruksi yang dapat dijalankan
  • Manajemen memori Bagian ini berisi pointer ke tabel segmen atau page yang menyatakan memori virtual proses
  • Kepemilikan dan utilisasi sumber daya yaitu Sumber daya yang dikendalikan proses harus diberi tanda, misalnya :
    1. Berkas yang dibuka
    2. Pemakaian pemroses
    3. Pemakaian sumberdaya lainnya




We akhirnya Jadi juga

16 05 2009

Waduh setelah lama di blogspot conten sebelah akhirnnya sekarang nyoba juga di wordpress,





Hello world!

16 05 2009

Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!