Selasa, 14 Juli 2009

Jelaskan istilah pengalamatan logical, relative, Phyisical ?

Nama Kelompok:
1. Misbahol Arifin (07.04.1.1.1.00098)
2. Erwin Andriyansyah (07.04.1.1.1.00049)
3. Dimas T. Putra (07.04.1.1.1.00041)
  • PengalamatanLogical
Pada pengalamatan secara logika, alamat yang ada pada kode program merupakan suatu alamat logika yang masih perlu diterjemahkan atau ditranslasikan kealamat fisik memori utama pada saat eksekusi. Umumnya , translasi almat untuk pengalamatannya secara logika terjadi pada saat eksekusi.

Kelebihan pengalamatan ini adalah relokasi program dapat dilakukan secara fleksibel, bahkan ruang atau kapasitas alamat logika program dapat lebih besar dari kapasitas fisik memori utama. Misalnya program dapat menggunakan ruang alamat logika sebesar 2Giga, sedangkan emori utama fisik di mana program tersebut dijalankan hanya memiliki kapasitas 256 Mega

  • Pengalamatan Phyical

Pada meode pengalamatan memori secara fisik,alamat yang ditulis pada kode instruksi program hasil kompilasi merupakan alamat fisik memory utama yang sesungguhnya. Konsekuensinya adalah pada saat penyalinan image proses ke memori utama, maka kode instruksi dan data program harus disalin pada posisi yang sesuai dengan referensi tersebut. Pada saat eksekusi, prosesor akan memproses alamat pada kode instruksi program secara langsung tanpa melakukan translasi alamat memori.
 Pengalamatan Relative

Pengalamatan relative terutama digunakan pada sistem yang menggunakan alokasi memori berurut, dimana keseluruhan image proses harus terletak di satu area memori yang utuh.
Alamat pada kode instruksi program merupakan alamat relatif(offset) terhadap posisi awal program. Pada saat image proses dari program tersebut disalin atau dialokasikan ke memori utama, alamat awal memorinya dicatat ke suatu register alokasi. Pada saat eksekusi, pemgaksesan alamatakan ditranslasi dengan menjumlahkan alamat referenai pada instruksi dengan isi registrasi alokasi untuk mendapatkan alamat fisik memori yang akan benar-benar diakses. Umumnya proses translasi ini dilakukan menggunakan perangkat keras khusus yang disebut dengan MMU(Memory Management Unit).

2. Jelaskan perbedaan partition, segmentation, dan paging
Perbedaan Segmentasi dan Paging
Ada beberapa perbedaan antara Segmentasi dan Paging diantaranya adalah:
1. Segmentasi melibatkan programer (programer perlu tahu teknik yang digunakan), sedangkan dengan paging, programer tidak perlu tahu teknik yang digunakan.
2. Pada segmentasi kompilasi dilakukan secara terpisah sedangkan pada paging, kompilasinya tidak terpisah.
3. Pada segmentasi proteksinya terpisah sedangkan pada paging proteksinya tidak terpisah.
4. Pada segmentasi ada shared code sedangkan pada paging tidak ada shared code.
5. Pada segmentasi terdapat banyak ruang alamat linier sedangkan pada paging hanya terdapat satu ruang alamat linier.
6. Pada segmentasi prosedur dan data dapat dibedakan dan diproteksi terpisah sedangkan pada paging prosedur dan data tidak dapat dibedakan dan diproteksi terpisah.
7. Pada segmentasi pengubahan ukuran tabel dapat dilakukan dengan mudah sedangkan pada Paging pengubahan ukuran tabel tidak dapat dilakukan dengan mudah.
8. Segmentasi digunakan untuk mengizinkan program dan data dapat dipecahkan jadi ruang alamat mandiri dan juga untuk mendukung sharing dan proteksi sedangkan paging digunakan untuk mendapatkan ruang alamat linier yang besar tanpa perlu membeli memori fisik lebih.
3. Bagaimana perhitungan alamat absoliut pada paging dan segmentation ?
contoh
Pengimplementasian Segmentasi dengan Pemberian Halaman Pada Intel i386
Salah satu contoh prosesor yang menggunakan metode segmentasi dengan pemberian halaman ini diantaranya adalah Intel i386. Jumlah maksimum segmen tiap proses adalah 16 K dan besar tiap segmen adalah 4 GB. Dan ukuran halamannya adalah 4 KB.
Logical Address
Ruang logical address dari suatu proses terbagi menjadi dua partisi yaitu:
1. Partisi I
o Terdiri dari segmen berjumlah 8 K yang sifatnya pribadi atau rahasia terhadap proses tersebut.
o Informasi tentang partisi ini disimpan didalam Local Descriptor Table.
2. Partisi II
o Terdiri dari 8 K segmen yang digunakan bersama diantara proses-proses tersebut.
o Informasi tentang partisi ini disimpan didalam Global Descriptor Table.
Tiap masukan atau entri pada Local Descriptor Table dan Global Descriptor Table terdiri dari 8 bita dengan informasi yang detil tentang segmen khusus termasuk lokasi dasar dan panjang segmen tersebut.
Logical address merupakan sepasang:
1. Selektor
Terdiri dari angka 16 bit:
Dimana s = jumlah segmen (13 bit)
g = mengindikasikan apakah segmen ada di
Global Descriptor Table
atau Local Descriptor Table
(1 bit)
p= proteksi(2 bit)

s g p
13 1 2

2. Offset
Terdiri dari angka 32 bit yang menspesifikasikan lokasi suatu kata atau bita di dalam segmen tersebut.
Mesin memiliki 6 register segmen yang membiarkan 6 segmen dialamatkan pada suatu waktu oleh sebuah proses. Mesin meiliki register program mikro 8 bita untuk menampung descriptor yang bersesuaian baik dari Global Descriptor Table atau Local Descriptor Table. Cache ini membiarkan 386 menghindari membaca descriptor dari memori untuk tiap perujukan memori.
Alamat Fisik
Alamat fisik 386 panjangnya adalah 32 bit. Mula-mula register segmen menunjuk ke masukan atau entri di Global Descriptor Table atau Local Descriptor Table. Kemudian informasi dasar dan limit tentang segmen tersebut digunakan untuk mengeneralisasikan alamat linier. Limit itu digunakan untuk mengecek keabsahan alamat. Jika alamat tidak sah maka akan terjadi memori fault yang menyebabkan terjadinya trap pada sistem operasi. Sedangkan apabila alamat itu sah maka nilai dari offset ditambahkan kenilai dasar yang menghasilkan alamat linier 32 bit. Alamat inilah yang kemudian diterjemahkan ke alamat fisik.
Seperti dikemukakan sebelumnya tiap segmen dialamatkan dan tiap halaman 4 KB. Sebuah tabel halaman mungkin terdiri sampai satu juta masukan atau entri. Karena tiap entri terdiri dari 4 byte, tiap proses mungkin membutuhkan sampai 4 MB ruang alamat fisik untuk halaman tabel sendiri. Sudah jelas kalau kita tidak menginginkan untuk mengalokasi tabel halaman bersebelahan di memori utama. Solusi yang dipakai 386 adalah dengan menggunakan skema paging dua tingkat (two-level paging scheme). Alamat linier dibagi menjadi nomer halaman yang terdiri dari 20 bit dan offset halaman terdiri dari 12 bit. Karena kita page tabel halaman dibagi jadi 10 bit penunjuk halaman direktori dan 10 bit penunjuk tabel halaman sehingga logical address menjadi:
nomor halaman
offset halaman
p1 p2 d
10 10 12

virtual memory

Selama bertahun-tahun, pelaksanaan manajemen memori pada intinya adalah dengan menempatkan semua bagian proses yang akan dijalankan ke dalam memori sebelum proses dapat mulai dieksekusi. Dengan demikian semua bagian proses tersebut harus memiliki alokasi sendiri di dalam memori fisik.

Pada kenyataannya tidak semua bagian dari program tersebut akan diproses, misalnya:

  • Ada pernyataan-pernyataan atau pilihan yang hanya akan dieksekusi jika kondisi tertentu dipenuhi
  • Terdapat fungsi-fungsi yang jarang digunakan
  • Pengalokasian memori yang lebih besar dari yang sebenarnya dibutuhkan.

Pada memori berkapasitas besar, hal-hal ini tidak akan menjadi masalah. Namun pada memori dengan kapasitas yang sangat terbatas, hal ini akan menurunkan optimalisasi utilitas dari ruang memori fisik (memori utama).

Setiap program yang dijalankan harus berada di memori. Memori merupakan suatu tempat penyimpanan utama (primary storage) yang bersifat sementara (volatile). Ukuran memori yang terbatas dapat menimbulkan masalah bagaimana menempatkan program yang berukuran yang lebih besar dari ukuran memori fisik (memori utama) dan masalah penerapan multiprogramming yang membutuhkan tempat yang lebih besar di memori.

Memori virtual adalah suatu teknik yang memisahkan antara memori logis dan memori fisiknya. Memori logis merupakan kumpulan keseluruhan halaman dari suatu program. Tanpa memori virtual, memori logis akan langsung dibawa ke memori fisik (memori utama). Disinilah memori virtual melakukan pemisahan dengan menaruh memori logis ke secondary storage (disk sekunder) dan hanya membawa halaman yang diperlukan ke memori utama (memori fisik). Teknik ini menempatkan keseluruhan program di disk sekunder dan membawa halaman-halaman yang diperlukan ke memori fisik sehingga memori utama hanya akan menyimpan sebagian alamat proses yang sering digunakan dan sebagian lainnya akan disimpan dalam disk sekunder dan dapat diambil sesuai dengan kebutuhan. Jadi jika proses yang sedang berjalan membutuhkan instruksi atau data yang terdapat pada suatu halaman tertentu maka halaman tersebut akan dicari di memori utama. Jika halaman yang diinginkan tidak ada maka akan dicari ke disk sekunder.

Gambar Memori Virtual

Pada gambar diatas ditunjukkan ruang sebuah memori virtual yang dibagi menjadi bagian-bagian yang sama dan diidentifikasikan dengan nomor virtual pages. Memori fisik dibagi menjadi page frames yang berukuran sama dan diidentifikasikan dengan nomor page frames. Bingkai (frame) menyimpan data dari halaman. Atau memori virtual memetakan nomor virtual pages ke nomor page frames. Mapping (pemetaan) menyebabkan halaman virtual hanya dapat mempunyai satu lokasi alamat fisik.

Dalam sistem paging, jika sebuah ruang diperlukan untuk proses dan halaman yang bersangkutan tidak sedang digunakan, maka halaman dari proses akan mengalami paged out (disimpan ke dalam disk) atau swap out, memori akan kosong untuk halaman aktif yang lain. Halaman yang dipindah dari disk ke memori ketika diperlukan dinamakan paged in (dikembalikan ke memori) atau swap in. Ketika sebuah item dapat mengalami paging, maka item tersebut termasuk dalam item yang menempati ruang virtual, yang diakses dengan alamat virtual dan ruangan yang ada dialokasikan untuk informasi pemetaan. Sistem operasi mengalokasikan alamat dari item tersebut hanya ketika item tersebut mengalami paging in.

Keuntungan yang diperoleh dari penyimpanan hanya sebagian program saja pada memori fisik adalah:

  • Berkurangnya proses M/K yang dibutuhkan (lalu lintas M/K menjadi rendah)
  • Ruang menjadi lebih leluasa karena berkurangnya memori fisik yang digunakan
  • Meningkatnya respon karena menurunnya beban M/K dan memori
  • Bertambahnya jumlah pengguna yang dapat dilayani. Ruang memori yang masih tersedia luas memungkinkan komputer untuk menerima lebih banyak permintaan dari pengguna.

Teknik memori virtual akan memudahkan pekerjaan seorang programmer ketika besar data dan programnya melampaui kapasitas memori utama. Sebuah multiprogramming dapat mengimplementasikan teknik memori virtual sehingga sistem multiprogramming menjadi lebih efisien. Contohnya: 10 program dengan ukuran 2 MB dapat berjalan di memori berkapasitas 4 MB. Tiap program dialokasikan 256 Kbyte dan bagian – bagian proses (swap in) masuk ke dalam memori fisik begitu diperlukan dan akan keluar (swap out) jika sedang tidak diperlukan.

Prinsip dari memori virtual adalah bahwa “Kecepatan maksimum ekseskusi proses di memori virtual dapat sama, tetapi tidak akan pernah melampaui kecepatan eksekusi proses yang sama di sistem yang tidak menggunakan memori virtual”.

Memori virtual dapat diimplementasikan dengan dua cara:

  1. Demand Paging yaitu dengan menerapkan konsep pemberian halaman pada proses
  2. Demand segmentation, lebih kompleks diterapkan ukuran segmen yang bervariasi.
  • Virtual Memory Di Windows

Pada komputer kita, jumlah memory yang tersedia adalah jumlah antara memory fisik/RAM dengan virtual memory. Virtual memory adalah sebuah porsi pada hard disk yang di-set menyerupai RAM oleh system. Virtual memory merupakan ruang penyimpanan sementara yang digunakan untuk menjalankan program yang membutuhkan memory yang lebih besar dari memory fisik.

Virtual memory berupa file yang bernama pagefile.sys yang di-set hidden oleh Windows. File ini disebut paging file, yang digunakan untuk menampung program dan data yang tidak cukup di memory fisik. Virtual memory lebih lambat daripada memory fisik, dan penggunaan yang terlalu banyak dapat menurunkan kinerja sistem. Sehubungan dengan itu, windows memindahkan proses yang tidak terlalu sering ke virtual memory, dan membiarkan proses yang sering digunakan di memory fisik. Jadi ini sangat efisien.

Ukuran dari virtual memory dapat kita rubah, Windows merekomendasikan ukuran minimal dari vitual memory adalah 1.5 kali dari memory fisik kita. Jika anda memiliki beberapa harddisk, misal hardisk pertama adalah C: dan harddisk kedua adalah D: dan anda jarang menggunakan drive D:, anda dapat memindahkan virtual memory ke drive D:. Memindahkan virtual memory ke harddisk yang jarang digunakan akan sedikit meningkatkan performa. Alasannya adalah, pada harddisk pertama biasanya head dari harddisk sangat sibuk untuk membuka program, dokumen, menyimpan file dan masih banyak lagi. Tetapi ingat, cara ini tidak akan berguna bila drivenya terletak pada harddisk yang sama atau dengan kata lain sebuah partisi.

Cara Kerja

Virtual Memory digunakan dengan membuat suatu file khusus yang disebut swapfile atau paging file. Virtual memory digunakan pada saat operating system kehabisan memory, dimana o.s. akan memindahkan data yang paling terakhir diakses ke dalam swapfile di hardisk. Hal ini mengosongkan/ membebaskan beberapa ruang kosong pada memory untuk aplikasi yang akan digunakan selanjutnya. Operating system akan melakukan hal ini secara terus menerus ketika data baru diisi pada ram.
Kemudian, pada saat data yang tersimpan di swapfile diperlukan, data tersebut ditukar (swap) dengan data yang paling terakhir dipakai di dalam memory (ram). Hal ini mengakibatkan swapfile bersifat seperti ram, walaupun program tidak dapat secara langsung dijalankan dari swapfile. Satu hal yang perlu dicatat bahwa karena operating system tidak dapat secara langsung menjalankan program dari swapfile, beberapa program mungkin tidak akan berjalan walau dengan swapfile yang besar jika kita hanya memiliki ram yang kecil.

  • Virtual Memory Di Linux

Managemen Memori di Linux

  1. Managemen Memori Fisik

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.

MemoriVirtual
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. PageCache
    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.BufferCache
    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.SwapCache
    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.

Jelaskan 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. 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.

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

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.

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.

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.
Starvation adalah suatu proses meninggalkan critical section dan lebih dari satu proses menunggu (waiting).Beberapa proses dapat ditolak aksenya dalam waktu tak terbatas.

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.
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.

Gunakan Shell Linux, jelaskan fungsi & cara menggunakan perintah (plus contoh):

~$ top

Perintah top digunakan untuk melihat proses-proses penting yang sedang dikerjakan oleh CPU. Jika proses top dijalankan tidak dengan cara di belakang layar, maka user tidak dapat mengerjakan perintah yang lain karena perintah ini akan dikerjakan secara terus menerus oleh CPU. Bentuk tampilan yang muncul dilayar jika menggunakan perintah top adalah sebagai berikut

untuk mengetahui status memori tekan q untuk quitFungsi : mencari isi suatu file disembarang directory, Format : grep-n ‘nama-file’ di-directory, Keterangan : grep akan memberikan suatu variable dalam suatu baris tertentu,didalam sembarang directory pada semua file. Grep sangat berguna untuk menemukan kata tertentu dalam beberapa dokumen atau mencari adanya sebuah variable dalam sekelompok program.Misalnya:

~$ cat

cat untuk melihat isi dari suatu file text, Fungsi : menampilkan isi sebuah file (sama dengan perintah TYPE pada DOS ) Cat berfungsi untuk mencetak ke layar moniotor isi dari sebuah file text. Jika file yang dilihat menggunakan perintah ini bukan file text maka akan keluar karakterkarakter aneh pada layar. Untuk menghindari tercetakknya karakter-karakter aneh tersebut dapat digunakan perintah cat -v contoh

  • Jelaskan alasan pembuatan & penghentian suatu proses!

Pembuatan proses:

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
  3. Sebagai tanggapan suatu aplikasi, seperti permintaan pencetakan file, SO dapat menciptakan proses yang akan mengelola pencetakan itu
  4. Proses menciptakan proses lain (child).
  • Proses yang menciptakan child process disebut proses induk (parent process)
  • Child process dapat menciptakan proses baru.
  • Proses-proses dapat membentuk pohon hirarki proses

Langkah-langkah dalam pembuatan proses, antara lain :

  • Memberi identitas (nama) pada proses yang dibuat.
  • Menyisipkan proses pada list proses atau tabel proses.
  • Menentukan prioritas awal proses.
  • Membuat PCB.
  • Mengalokasikan resource awal bagi proses tersebut.

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.

Alasan lain Penyebab terjadinya penghentian suatu proses:

  1. Apabila Proses selesai mengerjakan tugasnya(selesai normal)
  2. Apabila Proses berjalan melebihi batas waktu
  3. Jika memory tidak tersedia
  4. Pelanggaran terhdap batas memori
  5. Terjadi kesalahan karena pelanggaran proteksi
  6. Terjadi kesalahan perhitungan
  7. Jika terjadi proses menunggu terlalu lama
  8. Terjadi kegagalan I/O
  9. Jika proses mengeksekusi instruksi yang tidak ada
  10. Proses menggunakan instruksi yang disimpan untuk SO
  11. Terjadi kesalahan penggunaan data
  12. Terjadi intervensi dari operator atau SO (contoh : deadlock)
  13. Jika proses induk berahir
  14. Yang terakhir atas permintaan proses induk
  • Jelaskan tentang model proses lima status beserta kemungkinan transisinya!

Model proses lima status diantaranya adalah

  • New adalah Proses sedang dikerjakan/dibuat.
  • Running adalah Instruksi sednag dikerjakan.
  • Waiting adalah Proses sedang menunggu sejumlah kejadian untuk terjadi (seperti sebuah penyelesaian I/O atau penerimaan sebuah tanda/signal).
  • Ready adalah Proses sedang menunggu untuk ditugaskan pada sebuah prosesor.
  • Terminated adalah Proses telah selsesai melaksanakan tugasnya/mengeksekusi.

Keadaan diagram yang berkaitan dangan keadaan tersebut dijelaskan pada gambar dibawah ini :

Gambar diatas menunjukkan kemungkinan terjadinya proses transisi diantaranya sebagai berikut:

  • Null -New : Sebuah proses baru yang dibuat untuk menjalankan sebuah event terjadi program
  • New -Ready : proses akan berpindah ke tempat yang baru siap ketika sudah siap untuk melakukan proses tambahan. Kebanyakan sistem menetapkan beberapa batas berdasarkan jumlah proses yang ada atau jumlah memori virtual berkomitmen untuk proses yang ada.
  • Ready – Running : Ketika waktu untuk memilih menjalankan proses OS memilih salah satu proses di siap state. Pekerjaan ini yang menjadwal atau memberangkatkan.
  • Running -Exit : proses yang sedang berjalan diakhiri oleh OS jika proses menunjukkan bahwa ia telah selesai atau jika aborts.
  • Running – Ready :alasan yang paling umum untuk transisi ini adalah proses yang berjalan telah mencapai batas maksimum yang diijinkan untuk terganggu waktu pelaksanaan hampir semua sistem operasi multiprogramming menentukan jenis waktu yang tepat.
  • Running -Blocked : Sebuah proses diletakkan di Diblokir jika permintaan sesuatu yang harus menunggu. Permintaan untuk OS biasanya dalam bentuk sistem layanan panggilan yaitu panggilan dari program untuk menjalankan prosedur yang merupakan bagian dari sistem operasi kode.
  • Blocked -Ready : Sebuah proses blokir tersebut akan dipindahkan yang Siap saat acara yang telah menunggu terjadi.
  • Ready -Exit : Untuk jelasnya, transisi ini tidak akan ditampilkan pada diagram . Dalam beberapa sistem induk dapat proses setiap saat Juga jika induk terminates dihentikan maka semua proses yang terkait dengan induk tersebut akan dihentikan.
  • Blocked – Exit : Komentar di bawah item sebelumnya berlaku.
  • Mengikuti soal sebelumnya, tetapi pada kehadiran dua status suspended.
  • Blocked -Blocked/Suspend : Jika tidak ada proses siap maka setidaknya satu diblokir proses swapped keluar untuk memberikan ruang bagi proses lain yang tidak diblokir. Transisi ini dapat dilakukan meskipun ada proses siap tersedia jika OS menentukan bahwa proses yang sedang berjalan atau siap proses yang ingin dispatch memerlukan memori lebih utama untuk mempertahankan performa yang memadai.
  • Blocked/Suspend -Ready/Suspend : Sebuah proses dalam Diblokir / Suspend negara tersebut akan dipindahkan ke Siap / Suspend saat acara yang telah menunggu terjadi. Perlu diketahui bahwa yang memerlukan informasi mengenai proses harus ditangguhkan diakses OS.
  • 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.
  • 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. Namun mungkin perlu menangguhkan yang siap jika proses yang satu-satunya cara untuk membebaskan yang cukup besar blok utama memory.
  • New – Ready/Suspend and New – Ready : Ketika sebuah proses baru dibuat maka dapat ditambahkan ke antrian Siap atau Siap / Suspend antrian. Dalam kedua kasus sistem operasi harus membuat proses kontrol blok dan mengalokasikan ruang alamat untuk proses.
  • 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. Berdasarkan kondisi ini akan tampak masuk akal untuk membawa ke dalam proses yang diblokir memori utama dalam preferensi yang siap untuk proses.
  • Running – Ready/Suspend:Biasanya yang menjalankan proses tersebut akan dipindahkan ke negara Siap jika alokasi waktu berakhir. Namun jika OS memproses yang lebih tinggi karena prioritas pada proses Diblokir / Suspend antrian menjadi baru saja dibuka, OS dapat memindahkan menjalankan proses langsung ke (Siap / Suspend) dan bebas antrian beberapa memori utama.
  • Any State – Exit: Biasanya, proses terminates ketika sedang berjalan baik karena telah selesai atau karena kondisi beberapa kesalahan fatal. Namun, dalam beberapa sistem operasi suatu proses dapat dihentikan oleh proses yang menciptakan.
  • Jelaskan elemen-elemen dari Process Control Block (PCB)!

Process Control Back

Process Control Back adalah informasi-informasi lain yang diperlukan SO untuk mengendalikan dan koordinasi beragam proses aktif, termasuk ini:

  • Keadaan proses: Keadaan mungkin, new ,ready ,running, waiting, halted, dan juga banyak lagi.
  • Program counter: Counter mengindikasikan address dari perintah selanjutnya untuk dijalankan untuk ditambah code information pada kondisi apapun. Besertaan dengan program counter, keadaan/ status informasi harus disimpan ketika gangguan terjadi, untuk memungkinkan proses tersebut berjalan/bekerja dengan benar setelahnya.
  • Informasi manajemen memori: Informasi ini dapat termasuk suatu informasi sebagai nilai dari dasardan batas register. tabel page/ halaman, atau tabel segmen tergantung pada sistem memori yangdigunakan oleh sistem operasi (ch 9).
  • Informasi pencatatan: Informasi ini termasuk jumlah dari CPU dan waktu riil yang digunakan bataswaktu, jumlah akun, jumlah job atau proses, dan banyak lagi.
  • Informasi status I/O: Informasi termasuk daftar dari perangkat I/O yang di gunakan pada proses ini,suatu daftar open file dan banyak lagi.
  • PCB hanya berfungsi sebagai tempat menyimpan/gudang untuk informasi apapun yang dapatbervariasi dari prose ke proses.proses ini.
  • CPU register: Register bervariasi dalam jumlah dan jenis, tergantung pada rancangan komputer.Register tersebut termasuk accumulator, index register, stack pointer, general-puposes register,

Element-elemen PCB antara lain:

  1. Identifikasi Proses yaitu Identifier numerik yang meliputi

    • Identifier proses
    • Identifier proses yang menciptakan
    • Identifier pemakai
  1. Informasi Status Pemroses yang meliputi
  • Register-register yang terlihat pemakai yaitu Register-register yang dapat ditunjuk instruksi bahasa assembly untuk diproses pemroses
  • Register-register kendali dan status yaitu Register-register yang digunakan untuk mengendalikan operasi pemroses, a.l.:
    1. Program counter
    2. PSW, dsb.
  • Pointer stack yaitu Tiap proses mempunyai satu stack atau lebih. Stack digunakan untuk parameter atau alamat prosedur pemanggil dan system call. Pointer stack menunjuk posisi paling atas dari stack
  1. Informasi Kendali Pemroses meliputi
  • Informasi penjadwalan dan status yaitu Informasi-informasi yang dipakai untuk menjalankan fungsi penjadwalan a.l :
    1. Status proses. Mendefinisikan status proses (running,ready,block, dsb)
    2. Prioritas. Menjelaskan prioritas proses
    3. Informasi berkaitan penjadwalan. Informasi ini seperti lama menunggu, lama proses terakhir dieksekusi dsb.
    4. Kejadian (Event). Identitas kejadian yang ditunggu proses
  • 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

Mikrokernel

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.

Beberapa kelebihan mikro kernel:

a. Interface yang seragam. Proses tidak lagi dibedakan, baik antara kernel-level maupun user-level,karena semuanya berkomunikasi via message passing.

b. Extensibility. Bisa menambahkan fitur-fitur baru tanpa perlu melakukan kompilasi ulang.

c. 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.

d. Portability. Pada mikro kernel, 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.

e. Reliability. Semakin besar suatu software, maka tentulah semakin sulit untuk menjamin reliabilitynya. Desain dengan pendekatan berlapis sangatlah membantu, dan dengan pendekatan mikro kernel bisa lebih lagi. Mikro kernel dapat diuji secara ekstensif karena dia menggunakan API yang sedikit,sehingga bisa meningkatkan kualitas code di luar kernel.

f. Support for object-oriendted OS. Model mikro kernel sangat sesuai untuk mengembangkan sistem operasi yang berbasis object-oriented. Contoh sistem operasi yang menggunakan mikro kernel adalah Mac OS X dan QNX.

Microkernel hanya memiliki fungsi manajemen sederhana untuk mendeliver services :

1. low-level address space management : sistem pengalamatan physical atau virtual untuk memory, network host, peripheral, dan lain-lain.

2. thread management : pengaturan proses (=’molekul’) yang terpecah menjadi thread (=’atom’) dan dijalankan secara paralel.

3. inter-process communication (IPC) : pengaturan komunikasi antar thread pada satu atau beberapa proses. IPC bisa punya ruang lingkup di dalam atau antar computer.

Untuk mengatur kegiatan proses mereka perlu saling berkomunikasi. Linux mendukung berbagai mekanisme komunikasi antar proses (KAP). Sinyal dan pemipaan merupakan dua di antaranya, tapi linux juga mendukung system sistem ke lima mekanisme KAP.

Manajemen I/O berguna Untuk mengelola perangkat masukan/keluaran, dimana perangkat tersebut digunakan proses tertenty, sehingga perlu dijaga agar proses lain tidak memakainya. Sistem operasi perlu mengetahui status operasi masukan/keluaran dan lokasi memori utama yang digunakan untuk transfer data.

Manajemen Memory

Manajemen memory level bawah (low- level): Memetakan setiap page virtual ke frame fisik

- Sebagian besar tugas manajemen memory terjadi dalam user space

Komunikasi Antar Proses (IPC)

* 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.

Manajemen I/O & interrupt

- 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.

Sumber-sumber refrensi:

Abraham Silberschatz, Peter Galvin, Greg Gagne.2003. Operating System Concepts, Sixth Edition.John Wiley &

Sons.

Andrew S Tanenbaum, Albert S Woodhull.1997.Operating System Design and Implementation, Second Edition.

Prentice Hall.

Andrew S Tanenbaum.2001.Modern Operating System, Second Edition.Prentice Hall.

William Stallings.2001.Operating Systems, Fourth Edition. Prentice Hall.

http://bebas.vlsm.org/v06/Kuliah/SistemOperasi/ BUKU/SistemOperasi/x395.html

THREAD

Thread merupakan kemampuan yang disediakan oleh Java untuk membuat aplikasi yang tangguh, karena thread dalam program memiliki fungsi dan tugas tersendiri. Dengan adanya thread, dapat membuat program yang lebih efisien dalam hal kecepatan maupun penggunaan sumber daya, karena kita dapat membagi proses dalam aplikasi kita pada waktu yang sama. Thread umumnya digunakan untuk pemrograman multitasking, networking, yang melibatkan pengaksesan ke sumber daya secara konkuren.

Ada 2 cara pembuatan thread:

1. Membuat subclass dari thread

Untuk menjalankan thread, dapat dilakukan dengan memanggil method start(). Saat start() dijalankan, maka sebenarnya method run() dari class akan dijalankan. Jadi untuk membuat thread, harus mendefinisikan method run() pada definisi class. Konstruktor dari cara ini adalah :

ClassThread namavar = new ClassThread();

Namavar.start();

Atau dapat juga langsung dengan cara:

New ClassThread().start();

2. Mengimplementasikan interface Runnable

Cara ini merupakan cara yang paling sederhana dalam membuat thread. Runnable merupakan unit abstrak, yaitu kelas yang mengimplementasikan interface ini hanya cukup mengimplementasikan fungsi run(). Dalam mengimplementasi fungsi run(), kita akan mendefinisikan instruksi yang membangun sebuah thread. Konstruktor dari cara ini adalah :

ObjekRunnable objek = new ObjekRunnable();

Thread namavar = new Thread(Objek Runnable);

Atau dengan cara singkat seperti :

New Thread(new ObjekRunnable());

Keunggulan Java Threads adalah:

- JVM menggunakan prioritas preemptive berdasarkan algoritma penjadualan

-Semua threads di Java mempunyai prioritas. Prioritas tertinggi dijadualkan untuk dieksekusi oleh JVM

- Jika ada 2 thread yang prioritasnya sama, digunakan algoritma First In First Out (FIFO)

Contoh program:

class TestSinkronisasi {

private java.util.Random random = new java.util.Random();

public void callMe(String data) {

System.out.print(”[");

try{

Thread.sleep(random.nextInt(200));

}catch(InterruptedException e) {

e.printStackTrace();

}

System.out.print(data);

try{

Thread.sleep(random.nextInt(200));

}catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println("]“);

}

}

class ThreadBaru extends Thread {

private String data;

private TestSinkronisasi obj;

public ThreadBaru(TestSinkronisasi obj,String data) {

this.obj = obj;

this.data = data;

start();

}

public void run() {

obj.callMe(data);

}

}

class DemoThread {

public static void main(String[] args) {

TestSinkronisasi obj = new TestSinkronisasi();

ThreadBaru thread1 = new ThreadBaru(obj,”Superman”);

ThreadBaru thread2 = new ThreadBaru(obj,”Batman”);

ThreadBaru thread3 = new ThreadBaru(obj,”Spiderman”);

//tunggu hingga semua child thread selesai dieksekusi

try{

thread1.join();

thread2.join();

thread3.join();

}catch(InterruptedException e) {

System.out.println(”Thread utama diinterupsi ” + e);

}

}

}

.