Treads Programming


Kelompok :

Eka Widiastuti Shafa (07.04.111.00044)

Syaiful Mauliedie (07.04.111.00159)

Yusuf Wira Nugraha (07.04.111.00174)

Threads Programming

· Java

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.

Suatu thread bisa berada pada salah satu dari status berikut:

· New. Thread yang berada di status ini adalah objek dari kelas Thread yang baru dibuat, yaitu saat instansiasi objek dengan statement new. Saat thread berada di status new, belum ada sumber daya yang dialokasikan, sehingga thread belum bisa menjalankan perintah apapun.

Ø Menjalankan thread. Agar thread bisa menjalankan tugasnya, method start() dari kelas Thread harus dipanggil. Ada dua hal yang terjadi saat pemanggilan method start(), yaitu alokasi memori untuk thread yang dibuat dan pemanggilan method run().

· Runnable. Saat method run() dipanggil, status thread berubah menjadi runnable, artinya thread tersebut sudah memenuhi syarat untuk dijalankan oleh JVM. Thread yang sedang berjalan juga dikategorikan dalam status runnable.

Ø Blocking statement dan interupsi M/K, yaitu kondisi yang menghalangi pengeksekusian thread. Ada berbagai jenis blocking statement. Yang pertama adalahpemanggilan method sleep(), suatu method yang menerima argumen bertipe integerdalam bentuk milisekon. Argumen tersebut menunjukkan seberapa lama thread akan"tidur". Selain sleep(), dulunya dikenal method suspend(), tetapi sudah disarankan untuk tidak digunakan lagi karena mengakibatkan terjadinya deadlock. Di samping blocking statement, adanya interupsi M/K juga dapat menyebabkan thread menjadi blocked.

· Blocked. Status blocking menunjukkan bahwa sebuah thread terhalang untuk menjalankan

tugasnya, sehingga dapat dikatakan thread tersebut terhenti untuk sementara. Thread akan menjadi runnable kembali jika interval method sleep()-nya sudah berakhir, ataupemanggilan method resume() untuk mengakhiri method suspend(,) atau karena M/K sudah tersedia lagi.

Ø Keluar dari method run(). Hal ini bisa terjadi karena thread tersebut memang telah

menyelesaikan pekerjaannya di method run(), maupun karena adanya pembatalan thread.

· Dead. Setelah keluar dari method run(), thread akan berada dalam status dead dan menjadi tidak aktif lagi. Status jelas dari sebuah thread tidak dapat diketahui, tetapimethod isAlive() mengembalikan nilai boolean untuk mengetahui apakah thread tersebut dead atau tidak.

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.

contoh program:

class CobaThread2 implements Runnable
{
public void run()
{
for(int ii = 0; ii<4; t1 =" new" t2 =" new" ii =" 0;">

Rujukan

www.google.com

[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


· C/C++

Pendekatan dasar

Yang membuat thread, anda harus menentukan sebuah fungsi yang akan menjadi entry point untuk thread. Pada tingkat sistem operasi, ini adalah fungsi normal. Kita harus melakukan beberapa trik untuk wrap C + + di kelas karena data tidak dapat berfungsi normal fungsi anggota dari kelas. Namun, dapat statis fungsi anggota dari kelas. Ini adalah apa yang akan kita gunakan sebagai entry point. Ada disini gotcha though. Static fungsi anggota tidak memiliki akses ke ini pointer dari C + + objek. Mereka hanya dapat mengakses data statis. Untungnya, ada cara untuk melakukannya. Entry point thread fungsi mengambil void * sebagai parameter sehingga pemanggil dapat typecast lulus dan data apapun ke dalam urutan. Kami akan menggunakan ini untuk melewati ini dengan fungsi statis. Fungsi yang statis akan typecast yang void * dan menggunakannya untuk memanggil fungsi anggota yang tidak statis.


Pelaksanaan

Harus menyebutkan bahwa kita akan mendiskusikan thread kelas dengan fungsi terbatas. Adalah mungkin untuk berbuat lebih banyak dengan thread dari kelas ini akan memungkinkan.

class Thread

{

public:

Thread();

int Start(void * arg);

protected:

int Run(void * arg);

static void * EntryPoint(void*);

virtual void Setup();

virtual void Execute(void*);

void * Arg() const {return Arg_;}

void Arg(void* a){Arg_ = a;}

private:

THREADID ThreadId_;

void * Arg_;

};

Thread::Thread() {}

int Thread::Start(void * arg)

{

Arg(arg); // store user data

int code = thread_create(Thread::EntryPoint, this, & ThreadId_);

return code;

}

int Thread::Run(void * arg)

{

Setup();

Execute( arg );

}

/*static */

void * Thread::EntryPoint(void * pthis)

{

Thread * pt = (Thread*)pthis;

pthis->Run( Arg() );

}

virtual void Thread::Setup()

{

// Do any setup here

}

virtual void Thread::Execute(void* arg)

{

// Your code goes here

}

Penting untuk memahami bahwa kita rata C + + di sekitar objek thread. Setiap obyek akan menyediakan sebuah antarmuka untuk satu thread. Urutan dan objek tidak sama. Objek bisa ada tanpa urutan. Dalam pelaksanaan ini, urutan tidak benar-benar ada sampai Mulai fungsi dipanggil.

Pemberitahuan bahwa simpan pengguna argumen dalam kelas. Hal ini diperlukan karena kami memerlukan tempat untuk menyimpan sementara ia sampai benang dimulai. Sistem operasi thread panggilan memungkinkan kami untuk lulus argumen tapi kami telah menggunakannya untuk lulus pointer ini. Jadi kita simpan nyata pengguna argumen di kelas itu sendiri dan ketika menjalankan fungsi disebut dapat memperoleh akses ke argumen.

Thread (); Ini adalah pembina.

Mulai int (void * arg); Fungsi ini memberikan cara untuk membuat urutan dan ia mulai terjadi. Argumen arg menyediakan cara bagi pengguna data yang akan disampaikan ke dalam urutan. Start () membuat thread panggil oleh sistem operasi thread penciptaan fungsi.

int start (void * arg); Ini adalah fungsi lindung yang tidak boleh dimodifikasi dengan.

static void * EntryPoint (void * pthis); Fungsi ini berfungsi sebagai titik masuk ke thread. Ini hanya untuk memuntahkan pthis dan Thread *

virtual void setup (); Fungsi ini dipanggil setelah thread telah dibuat sebelum setup () dipanggil. Jika Anda mengabaikan fungsi ini, ingatlah untuk memanggil kelas parent setup().

Jalankan virtual void (void *); Anda harus menimpa fungsi ini memberikan Anda sendiri fungsi.


Kelas yang menggunakan Thread


Untuk menggunakan urutan kelas, Anda mendapatkan kelas baru. Anda menimpa Jalankan () fungsi di mana Anda memberikan fungsionalitas sendiri. Anda mungkin menimpa Setup () berfungsi untuk melakukan sesuatu sebelum memulai tugas Jalankan disebut. Jika Anda mengabaikan Setup (), ingat untuk memanggil orang tua kelas Setup ().


MICROKERNEL

I. Keuntungan dari Microkernel Organisasi
Sejumlah keuntungan bagi penggunaan microkernels telah dilaporkan dalam literatur
(misalnya, [FINK04], [LIED96a], [WAYN94a]).
Termasuk :

a. Tampilan antarmuka

b. Kemungkinan diperpanjang(Extensibility)

c. Fleksibilitas

d. Portabilitas

e. Reliabilitas

f. sistem dukungan terdistribusi

g. Dukungan untuk berorientasi objek sistem operasi (OOOSS)

Desain antarmuka microkernel membebankan pada permintaan yang dilakukan oleh sebuah proses. Proses tidak perlu membedakan antara kernel dan user-tingkat-tingkat layanan karena semua layanan yang disediakan oleh sarana pesan lewat.
Setiap OS pasti akan perlu untuk mendapatkan fitur tidak dalam desain yang sekarang, baru sebagai perangkat keras dan perangkat lunak teknik yang baru developed
. Arsitektur microkernel memfasilitasi kemungkinan diperpanjang, memungkinkan penambahan layanan baru serta penyediaan berbagai layanan di daerah yang sama fungsional . Misalnya, mungkin ada beberapa file organisasi untuk disket; setiap organisasi dapat dilaksanakan sebagai pengguna tingkat proses daripada file memiliki beberapa layanan yang tersedia di kernel. Dengan demikian, pengguna dapat memilih dari berbagai layanan yang memberikan yang terbaik sesuai untuk pengguna yang needs.With arsitektur microkernel, ketika sebuah fitur baru yang ditambahkan, hanya dipilih server perlu diubah atau added.The dampak baru atau diubah ke server dibatasi subset dari sistem. Lebih jauh lagi, modifikasi tidak memerlukan bangunan baru kernel.

Berkaitan dengan kemungkinan diperpanjang dari arsitektur microkernel adalah fleksibilitas.
Tidak hanya fitur-fitur baru dapat ditambahkan ke sistem operasi, tetapi juga fitur-fitur yang ada dapat subtracted produksi yang lebih kecil, lebih efisien pelaksanaan. microkernel berbasis OS tidak harus kecil sistem. Memang, struktur lends sendiri untuk menambahkan berbagai fitur. Tetapi tidak semua kebutuhan, misalnya, tingkat keamanan yang tinggi atau kemampuan untuk melakukan komputasi didistribusikan. Jika besar (dari segi persyaratan memori) yang dibuat fitur opsional, pada produk akan menarik lebih banyak jenis pengguna.
Intel dekat monopoli banyak dari segmen pasar komputer platform isunlikely harus berkelanjutan indefinitely.
(Portabilitas) Mudah dibawa menjadi fitur yang menarik dari sebuah OS. Pada arsitektur microkernel, semua atau setidaknya sebagian besar processor specific kode di microkernel. pelabuhan yang diperlukan untuk perubahan sistem yang baru untuk prosesor yang lebih sedikit dan cenderung diatur dalam kelompok logis.
Ukuran yang lebih besar dari produk perangkat lunak, yang lebih sulit itu adalah untuk memastikan para reliability.
sedangkan desain modular membantu meningkatkan kehandalan, keuntungan lebih besar dapat dicapai dengan microkernel architecture. Microkernel kecil dapat diuji ketat. penggunaan sejumlah aplikasi programming interface (API) meningkatkan kualitas produksi kesempatan untuk kode OS layanan di luar kernel. Programmer sistem memiliki batas jumlah API untuk menguasai dan keterbatasan sarana dan interaksi dengan demikian adversely mempengaruhi komponen sistem lainnya.
Microkernel yang didistribusikan lends sendiri untuk mendukung sistem, termasuk kelompok yang didistribusikan oleh OS. Bila pesan yang dikirim dari klien ke
serverprocess, pesan harus menyertakan sebuah identifier layanan yang diminta. Jika didistribusikan sistem (misalnya, sebuah cluster) dikonfigurasi sehingga semua proses dan identitas / tanda jasa yang unik, maka yang berlaku ada satu sistem gambar pada tingkat microkernel. Sebuah proses dapat mengirim pesan tanpa mengetahui di mana target komputer. kembali ke layanan ini dalam diskusi tentang sistem didistribusikan di Bagian Enam.
arsitektur microkernel bekerja dengan baik dalam konteks obyek berorientasi sistem operasi. Berorientasi obyek dapat meminjamkan pendekatan disiplin untuk desain dari microkernel dan pengembangan modular ekstensi ke OS.As Hasilnya, sejumlah desain microkernel upaya yang bergerak ke arah orientasi obyek [WAYN94b]. Salah satu pendekatan yang menjanjikan untuk menikahi dengan arsitektur microkernel dengan prinsip-prinsip OOOS adalah penggunaan komponen [MESS96]. Komponen obyek dengan jelas antarmuka yang dapat saling berhubungan untuk membentuk sebuah bangunan di blok mode. Semua interaksi antara komponen menggunakan komponen antarmuka.
Sistem lain, seperti Windows, tidak secara eksklusif atau bergantung sepenuhnya pada metode berorientasi objek tetapi ada berorientasi objek dimasukkan ke dalam prinsip-prinsip desain microkernel.

II. Kinerja Microkernel
potensi kerugian dari microkernels yang sering dikutip adalah bahwa kinerja. Memerlukan waktu lebih lama untuk membuat dan mengirim pesan melalui microkernel, dan menerima dan membaca sandi balasan, daripada membuat satu layanan panggilan. Namun, faktor lain datang ke dalam bermain sehingga sulit untuk menarik generalisasi tentang kinerja hukuman, jika ada.
Banyak tergantung pada ukuran dan fungsi dari microkernel. [LIED96a] merangkum sejumlah studi memperlihatkan bahwa hukuman yang besar bagi kinerja apa mungkin disebut generasi pertama microkernels. Persisted despite efforts hukuman ini untuk mengoptimalkan microkernel kode. Tanggapan untuk satu masalah ini adalah microkernel yang toenlarge oleh reintegrating kritis server dan driver kembali ke theos. Perdana contoh pendekatan ini adalah Mach dan Chorus. Selektif meningkatkan fungsionalitas dari microkernel mengurangi jumlah user-kernel mode aktif dan jumlah ruang alamat proses switches. ini akan mengurangi kinerja Work around hukuman pada pihak ketiga yang kekuatan desain microkernel:
minimal antarmuka, fleksibilitas, dan seterusnya. Pendekatan lain adalah membuat microkernel tidak besar tapi lebih kecil.
[LIED96b] berpendapat bahwa, dirancang dengan baik, yang sangat kecil microkernel menghilangkan kinerja hukuman dan meningkatkan fleksibilitas dan kehandalan. Memberikan ide dari ukuran yang terlibat, yang khas microkernel generasi pertama terdiri dari 300 Kbytes kode panggilan dan 140 sistem antarmuka. Contoh kecil generasi kedua microkernelis L4 [HART97, LIED95], yang terdiri dari 12 Kbytes kode dan 7 sistem panggilan.
Pengalaman dengan sistem ini menunjukkan bahwa mereka dapat melakukan dan atau lebih baik dari layered OS seperti UNIX.

III. Microkernel Desain
Karena berbeda microkernels pameran berbagai fungsi dan ukuran, tidak ada aturan keras dan cepat dapat dinyatakan tentang apa fungsi-fungsi yang disediakan oleh microkernel dan struktur diimplementasikan. Dalam bagian ini, kami hadir minimal set microkernel fungsi dan jasa, memberikan merasakan microkernel design.
Microkernel yang harus menyertakan fungsi orang-orang yang bergantung secara langsung pada perangkat keras dan fungsi-fungsi yang diperlukan untuk mendukung server dan aplikasi yang beroperasi di mode.These pengguna fungsi jatuh ke dalam kategori umum rendahnya tingkat manajemen memori, interprocess komunikasi (IPC), dan I / O dan mengganggu manajemen.

IV. Memori rendah Tingkat Manajemen
Microkernel yang harus mengontrol hardwareconcept alamat ke ruang memungkinkan untuk melaksanakan perlindungan di tingkat proses. Sepanjang microkernel bertanggungjawab untuk pemetaan setiap halaman virtual ke fisik bingkai, sebagian besar memori manajemen, termasuk perlindungan dari satu ruang alamat dari proses yang lain dan halaman pengganti lainnya Pager algoritma dan logika, dapat diterapkan di luar kernel. Misalnya, modul memori virtual di luar microkernel ketika memutuskan untuk membawa suatu halaman ke dalam memori dan halaman yang sudah ada di dalam memori untuk diganti, yang microkernel peta halaman ini menjadi referensi alamat fisik di memori utama.
Konsep yang Pager dan manajemen memori virtual dapat dilakukan di luar kernel telah diperkenalkan dengan Mach eksternal pager [YOUN87].
Angka 4,11 menggambarkan pengoperasian eksternal pager. Ketika sebuah thread dalam aplikasi referensi halaman tidak dalam memori utama, halaman kesalahan terjadi eksekusi dan perangkap ke kernel.
kernel kemudian mengirimkan pesan ke pager proses menunjukkan halaman yang telah referenced.The pager dapat memutuskan untuk me-load halaman dan mengalokasikan halaman bingkai untuk tujuan itu. Yang pager dan kernel harus berinteraksi untuk memetakan pager logis dari operasi fisik ke halaman memory.Once tersedia, pager mengirimkan kembali pesan ke aplikasi tersebut.
Teknik ini memungkinkan suatu proses untuk memetakan nonkernel file dan database ke dalam ruang alamat pengguna tanpa invoking kernel. Aplikasi khusus memori berbagi kebijakan dapat diterapkan di luar kernel.
> [LIED95] menunjukkan satu set hanya tiga microkernel operasi yang dapat mendukung eksternal memori virtual Pager dan manajemen:
Grant: Pemilik alamat ruang (sebuah proses) dapat memberikan sejumlah yang lain ke halaman proses. Kernel menghapus halaman ini dari pemberi alamat dan memberikan ruang kepada proses yang ditunjuk.
Map: Sebuah proses dapat peta dari setiap halaman ke dalam ruang alamat proses lain, sehingga kedua proses memiliki akses ke halaman. Hal ini membuat memori bersama antara dua proses. Kernel mempertahankan tugas ini ke halaman yang asli pemilik tetapi pemetaan untuk memberikan ijin akses oleh proses lainnya.
Flush: Sebuah proses dapat kembali halaman apapun yang diberikan atau dipetakan ke proses lainnya.
Untuk memulai, kernel mengalokasikan memori fisik semua tersedia sebagai sumber daya untuk proses sistem dasar. Sebagai proses baru dibuat, dari halaman asli total ruang alamat dapat diberikan atau dipetakan ke proses yang baru. Seperti program yang dapat mendukung memori virtual beberapa program sekaligus.

V. Komunikasi Antarproses
Dasar bentuk komunikasi antara proses atau benang dalam microkernel OS adalah pesan. Sebuah pesan yang berisi header yang mengidentifikasi pengirim dan penerima proses dan tubuh yang berisi data langsung, sebuah pointer ke blok data, atau beberapa kontrol informasi tentang proses.
Biasanya, kami dapat dari IPC sebagai berdasarkan port yang terkait dengan proses.
J port, pada dasarnya, sebuah pesan telah antrian untuk proses tertentu; proses mungkin memiliki beberapa port. Yang terkait dengan port daftar kemampuan proses menunjukkan apa
mungkin berkomunikasi dengan proses ini. Port identitas dan kemampuan yang dikelola oleh kernel. Sebuah proses baru dapat memberikan akses ke sendiri dengan mengirimkan pesan ke kernel baru menunjukkan kemampuan pelabuhan.
Catatan tentang pesan lewat sesuai here.Message melewati proses terpisah antara nonoverlapping dengan alamat spasi melibatkan memori-memori-untuk menyalin dan dengan itu adalah bounded oleh kecepatan dan memori tidak skala dengan prosesor speeds.Thus, sekarang OS penelitian mencerminkan kepentingan dalam urutan berbasis IPC memorysharing dan skema seperti remapping halaman (satu halaman dibagi beberapa proses).

VI. Manajemen I/O dan Interupsi
Dengan arsitektur microkernel, kemungkinan untuk menangani hardware interrupts sebagai pesan dan menyertakan I / O port di alamat spaces. Microkernel dapat mengenali interrupts tetapi tidak menangani mereka. , Namun menghasilkan sebuah pesan untuk pengguna tingkat saat ini yang terkait dengan proses yang mengganggu.
Jadi, bila Interupsi diaktifkan, pengguna tertentu tingkat proses diberikan ke kernel mengganggu dan mempertahankan pemetaan. Transformasi interrupts menjadi pesan harus dilakukan oleh microkernel, tetapi microkernel tidak terlibat dalam perangkat khusus menangani interrupt.
[LIED96a] menyarankan melihat hardware sebagai kumpulan benang yang memiliki identitas / tanda unik thread dan mengirim pesan (hanya terdiri dari urutan ID) untuk perangkat lunak yang terkait dalam threads pengguna ruang. menerima urutan menentukan apakah pesan yang berasal dari interupsi dan menentukan spesifik interupsi.

Tidak ada komentar: