|
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.
| Send
your comments or suggestions |
|
|
|