Sunday - May 18, 2008

Home | Site Map | Channels | Profile | Press Room | Services | Contact 

currently 8 user(s) online

search 

   Latest News

»

sony-ak.com Luncurkan Kamus Teknologi Informasi (May 27, 2006)

»

sony-ak.com Luncurkan IT Event Calendar (May 20, 2006)

»

Web Chat Berbasis AJAX dari sony-ak.com (May 09, 2006)

»

sony-ak.com Advertising Program (May 01, 2006)

»

Sony AK di Tabloid PCplus (April 18, 2006)

news archives » 


   Random Article

»

Objek versus Kelas (2774)

»

Mengenal Intel Xeon Processor (2438)

»

Mengenal UML (Unified Modeling Language) (9016)

»

Eksplorasi Proses pada Windows 9x/Me - Bagian II (2467)

»

Mengenal KFract (1055)

   Newsletter

Join our newsletter, you will get alert about content updates

powered by Yahoo! Groups















Nedstat Basic - Free web site statistics

 
 
Eksplorasi Proses pada Windows 9x/Me - Bagian II

Author: Ario Sutomo
Published: July 02, 2005
Visits: 2467 - Category: Microsoft Windows
 
     
 

Tulisan bagian pertama yang berjudul "Eksplorasi Proses pada Windows 9x/Me - Bagian I" sudah membahas mengenai apa itu thread, strategi penjadwalan dan algoritma penjadwalan. Pada bagian kedua ini akan dibahas mengenai hasil analisa proses (beserta thread), yang menjelaskan tentang siklus hidupnya. Selain itu juga akan disinggung sedikit tentang multitasking pada Windows 98 SE.

Siklus Hidup Proses
Semua proses mulai “hidup” ketika ada proses lain yang memanggilnya dengan fungsi CreateProcess(). Selama CreateProcess(), sistem operasi mempersiapkan suatu virtual address space, me-load isi file executable, dan membuat primary thread (lihat gambar 1a). CreateProcess() menghasilkan handle untuk proses yang baru dibuat tersebut beserta handle untuk primary thread-nya. Parent (proses yang memanggilnya) bisa menutup handle, melepaskan kendali melalui child-nya (proses yang dipanggil) tersebut, atau memanfaatkan handle tersebut untuk merubah priority class-nya, menghentikan, atau mendapatkan exit code ketika child tersebut berhenti dengan sendirinya.

Setelah proses menyelesaikan eksekusinya, proses tersebut tetap ada di memori sampai semua handle yang berhubungan dengan proses tersebut ditutup. Suatu proses tetap aktif sampai primary thread-nya berhenti atau sampai salah satu thread-nya memanggil ExitProcess() atau TerminateProcess(). Hal itu juga menyebabkan semua thread-thread dalam proses yang sama langsung berhenti.

Siklus Hidup Thread
Thread terbentuk ketika suatu thread memanggilnya dengan CreateThread(). Dan thread akan berakhir jika thread tersebut memanggil ExitThread() atau ExitProcess(), atau ada yang memanggil fungsi TerminateThread() atau TerminateProcess() dengan parameter handle yang mengacu pada thread/proses yang bersangkutan.

1. Pembuatan Thread
Ketika membuat thread (dengan fungsi CreateThread()), pembuat thread tersebut harus menentukan alamat awal dari kode yang akan dieksekusi oleh thread tersebut. Biasanya alamat awal tersebut adalah alamat awal dari fungsi. Jika diimplementasikan ke dalam bahasa pemrograman Delphi adalah sebagai berikut:

function FungsiThread: DWORD;
begin
  ShowMessage('Message ini ada didalam thread!');
  Result := 0;
end;

procedure TForm1.BuatThread;
var
  ThreadId: DWORD;
  hThread : THandle;
begin
  hThread := CreateThread(
nil,
0, //ukuran stack (0=default)
@FungsiThread, //alamat awal fungsi
nil, //parameter fungsi
0,
ThreadId); //id thread yang di-return

  if hThread=0 then
    showmessage('Thread gagal!');

  CloseHandle(hThread);
end;

*Untuk keterangan mengenai parameter-parameter yang dilewatkan ke fungsi CreateThread(), silahkan baca help-nya.

Ketika terbentuk, secara default suatu thread memiliki prioritas normal (THREAD_PRIORITY_NORMAL). Ukuran stack akan diinisialisasikan secara otomatis di dalam memori proses dari thread yang bersangkutan. Sistem operasi akan menyesuaikan ukuran stack seperlunya dan membebaskannya ketika thread yang bersangkutan berakhir.

1.1 Penundaan Thread
Suatu thread bisa men-suspend dan me-resume thread lain dengan menggunakan fungsi SuspendThread() dan ResumeThread(). Seperti yang sudah dijelaskan sebelumnya bahwa thread yang statusnya menunggu atau tertunda tidak akan dijadwalkan oleh penjadwal sebelum masa menunggunya/tertundanya berakhir (atau setelah dipanggil ResumeThread()).

Thread juga bisa ditunda untuk interval waktu tertentu dengan fungsi Sleep() atau SleepEx(). Selama interval tersebut, thread yang bersangkutan juga tidak diberikan time slice oleh pemroses.

1.2 Penghentian Thread
Suatu thread akan terus berjalan sampai salah satu kejadian berikut terjadi:

  • Thread memanggil fungsi ExitThread().
  • Ada thread yang memanggil fungsi ExitProcess().
  • Thread selesai menyelesaikan tugasnya (fungsi thread berakhir).
  • Ada thread yang memanggil fungsi TerminateThread() dengan parameter handle milik thread yang bersangkutan.
  • Ada thread yang memanggil fungsi TerminateProcess() dengan parameter handle proses milik thread yang bersangkutan.

Ketika suatu thread diakhiri dengan ExitThread(), sistem operasi terlebih dahulu membebaskan stack yang dimiliki thread tersebut, baru kemudian menghentikannya. Jika thread yang diberhentikan tersebut merupakan thread terakhir suatu proses, maka sistem operasi juga akan secara otomatis menghentikan proses tersebut.

2. Multitasking
Secara definitif, suatu sistem operasi yang multitasking membagi waktu prosesor yang tersedia kepada proses-proses atau thread-thread yang membutuhkannya. Windows 98 SE didesain untuk preemptive multitasking (ada juga yang menyebut permissive multitasking), yaitu mengalokasikan sedikit waktu (time slice) prosesor ke tiap-tiap thread yang dieksekusi. Untuk bisa membagikan time slice yang dimiliki prosesor secara adil, Windows 98 SE tergantung pada aplikasi yang secara berkala diharuskan melepaskan kontrol ke sistem operasi agar aplikasi lain mendapat kesempatan. Proses eksekusi thread akan di-suspend jika time slice sudah habis, sehingga thread lain bisa mendapat giliran untuk dieksekusi. Ketika berpindah dari satu thread ke thread lain, sistem operasi menyimpan context dari thread yang di-preempt tadi dan mengembalikan context yang tersimpan sebelumnya dari thread yang akan dieksekusi berikutnya diantrian.

Lamanya time slice tergantung pada sistem operasi dan prosesor, yang jelas besarnya sangat kecil dan konstan (Win32® Programmer’s Reference menyebutkan lamanya time slice kira-kira 20 milidetik). Dengan waktu yang sekecil itu thread-thread yang dieksekusi terlihat seakan-akan dieksekusi pada waktu yang sama, sehingga kita seakan-akan merasa Windows kita bisa mengeksekusi banyak aplikasi secara bersamaan.

Referensi

  • Ezzel, B. and Blaney, J. (1998), Windows 98 Developer’s Handbook, Marina Village Parkway, Alameda, CA 94501: SYBEX Inc.
  • Haryanto, B. Ir. (1999), “Buku Teks Ilmu Komputer”, Sistem Operasi, Edisi Kedua. Bandung, Informatika.
  • Microsoft, Microsoft® Win32® Programmer’s Reference, Copyright © 1992 – 1996 Microsoft Corporation.
  • Microsoft, “.NET Framework Developer Specifications”, .NET Framework SDK, Unpublished work. © 2000 – 2001 Microsoft Corporation.
  • Nutt, J. G. (2000), “Operating Systems”, A Modern Perspective, Second Edition, United States: Addison Wesley Longman Inc.
  • Stallings, W. (1995), Operating Systems, 2nd ed. Englewood Cliffs, New Jersey: Prentice Hall.
  • Tanenbaum, S. A. (1992), Modern Operating System, Englewood Cliffs, New Jersey: Prentice-Hall Inc.

Sampai sekian dulu tulisan bagian kedua ini, lanjutan tulisan ini bisa dibaca melalui tulisan yang berjudul "Eksplorasi Proses pada Windows 9x/Me - Bagian III".

Demikian tulisan mengenai eksplorasi proses pada Windows 9x/Me (bagian kedua). Semoga bermanfaat bagi Anda semuanya. Jika ada saran atau komentar bisa dilayangkan ke arioss@softhome.net. Untuk membaca tulisan menarik lainnya silakan menuju ke situs Sony AK Knowledge Center dengan alamat di www.sony-ak.com.

Terimakasih.




 Recommended articles
 

»

Membuat Web Counter Sederhana Dengan PHP dan Text File (4335)

»

Mengenal Active Server Pages (ASP) (3448)

»

Mencari Contoh Layout yang Bagus bagi Situs Anda Melalui Situs Client Perusahaan Web Design (4135)

»

Merubah Password User SYSDBA Pada Firebird 1.5.x (2590)

»

Tiga Kunci Utama Membangun Website yang Sukses di Internet (3601)

 Send your comments or suggestions
Full Name :
E-mail :
Comments :
 
 

  Privacy | Site Map | Advertise

  Copyright © 2003 - 2006 Sony AK Knowledge Center - all rights reserved

  info@sony-ak.com