Selasa, 31 Maret 2009

SUMBER BACAAN :

[Lewis1998] John Lewis dan William Loftus. 1998. Java Software Solutions Foundation Of Program Design. First Edition. Addison Wesley.
[Silberschatz2005] Avi Silberschatz, Peter Galvin, dan Grag Gagne. 2005.
Operating Systems Concepts. Seventh Edition. John Wiley & Sons.
[Tanenbaum1997] Andrew Tanenbaum dan Albert Woodhull. 1997.
Operating Systems Design and Implementation. Second Edition. Prentice-Hall.
[WEBJava2007] Java 2 Platform SE v1.3.1. 2007. Java 2 Platform SE v1.3.1: Class Thread – http://java.sun.com/j2se/1.3/docs/api/java/lang/Thread.html. Diakses 27 Februari 2007.
[WEBJTPD2007] Java Thread Primitive Deprecation. 2007.
Java Thread Primitive Deprecation -http://java.sun.com/j2se/1.3/docs/guide/misc/threadPrimitiveDeprecatio n.html
. Diakses 27 Februari 2007.

Microkernel

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.

Thread di JAVA

Sebuah thread, secara definisi adalah sebuah proses ringan. Mereka digunakan untuk meningkatkan fungsionalitas dan performansi dengan cara melakukan beberapa tugas pada saat yang sama, yaitu bersamaan. Ada dua metode untuk menerapkan thread di dalam Java,
- penerapan sebuah antarmuka
- perpanjangan sebuah class

Thread Java

Dalam kehidupan sehari-hari, penggunaan multithreading dapat kita lihat pada aplikasi web Contohnya adalah sebuah web browser yang harus menampilkan sebuah halaman yang memuat banyak gambar. Pada program yang single-threaded , hanya ada satu thread untuk mengatur suatu gambar, lalu jika gambar itu telah ditampilkan, barulah gambar lain bisa diproses. Dengan multithreading, proses bisa dilakukan lebih cepat jika ada thread yang menampilkan gambar pertama, lalu thread lain untuk menampilkan gambar kedua, dan seterusnya, di mana thread-thread tersebut berjalan secara paralel. Java adalah salah satu bahasa pemrograman yang mendukung penggunaan multithreading. Saat sebuah program Java dieksekusi, yaitu saat main() dijalankan, ada sebuah thread utama yang bekerja. Thread lain yang dibutuhkan dapat dibentuk dengan menuliskan kode program tertentu. Pada kondisi dan keperluan tertentu, thread pada program Java yang sedang dijalankan juga dapat digabung dengan thread utama ataupun dibatalkan. Keseluruhan thread dalam Java diatur oleh Java Virtual Machine (JVM) sehingga sulit untuk menentukan apakah thread Java berada di user-level atau kernel-level
Setiap program Java memiliki paling sedikit satu thread, yang otomatis terbentuk saat dieksekusi. Untuk kebutuhan tertentu, bahasa pemrograman Java memungkinkan adanya pembuatan dan manajemen thread tambahan oleh JVM (Java Virtual Machine). Sebuah
thread bisa berada di salah satu dari 4 status, yaitu new, runnable, blocked, dan dead
Ada dua cara untuk membuat thread dalam Java, yaitu dengan meng-extends kelas Thread atau dengan meng-implements interface Runnable
Dalam beberapa kondisi, thread yang dibuat dapat digabungkan dengan parent thread-nya. Penggabungan ini menggunakan method join(), yang berfungsi agar suatu thread
induk menunggu thread yang dibuatnya selesai menjalankan tugasnya, baru mulai mengeksekusi perintah selanjutnya. Pembatalan thread secara asynchronous dilakukan dengan pemanggilan method stop(). Akan tetapi, cara ini terbukti tidak aman, sehingga untuk menterminasi thread digunakanlah deferred cancellation. Pembatalan dilakukan dengan pemanggilan method interrupt() untuk mengeset status interupsi, serta isInterrupted () atau interrupted () untuk memeriksa status interupsi tersebut. Program Java dapat dijalankan di berbagai platform selama
platform tersebut mendukung JVM. Pemetaan thread Java ke host operating system tergantung pada implementasi JVM di sistem operasi tersebut.

THREAD

Thread adalah alur kontrol dari suatu proses.
Keuntungan menggunakan Multithreading:
a. Meningkatkan respon dari pengguna.
b. Pembagian sumber daya.
c. Ekonomis.
d. Mengambil keuntungan dari arsitektur multiprosessor.
Tiga model Multithreading:
a. Model Many-to-One.
b. Model One-to-One.
c. Model Many-to-Many.
Pustaka Thread bertugas untuk menyediakan API untuk programmer dalam menciptakan dan
memanage thread. Cara untuk mengimplementasikannya yaitu:
a. Menyediakan API dalam level pengguna tanpa dukungan dari kernel.
b. Menyediakan API di level kernel yang didukung secara langsung oleh sistem operasi.
Pembatalan Thread: Tugas untuk membatalkan Thread sebelum menyelesaikan tugasnya.
Pembatalan Thread terdiri dari 2 jenis:
1. Asynchronous cancellation.
2. Deffered cancellation.
Thread Pools menciptakan sejumlah Thread yang ditempatkan di dalam pool dimana Thread
menunggu untuk dipanggil.
Thread Schedulling ada 2 macam:
1. Local Schedulling.
2. Global Schedulling.
Istilah thread di Linux adalah task.
Pembuatan Thread di Linux menggunakan system call clone(). Sedangkan di Mac sekumpulan
thread yang ada akan mengerjakan tugas bergantian dengan menggunakan siklus.