Sunday - May 18, 2008

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

currently 12 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

»

Memberikan Instruksi Ke Thread Lain Secara Serial (4556)

»

Coyote Linux: Linux Single Floppy untuk Solusi Internet Gateway (NAT) yang Murah dan Efektif (4356)

»

Mengenal Firewall Pada Linux (5635)

»

Mengenal Philip Zimmermann, Sang Pencipta PGP (1398)

»

Mengetahui Besarnya Ukuran File Menggunakan PHP (2294)

   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 III

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

Pada tulisan sebelumnya yang berjudul "Eksplorasi Proses pada Windows 9x/Me - Bagian II" sudah dibahas mengenai thread, multitasking dan juga multithreading. Bagian terakhir dari tulisan eksplorasi proses kali ini akan dibahas mengenai serba-serbi penjadwalan pada sistem operasi Windows 98 SE, mulai dari prioritas, context switch, sampai dengan kesimpulan.

Penjadwalan
Penjadwal (scheduler) bertugas mengatur kegiatan multitasking dengan menentukan thread mana yang akan menerima time slice prosesor berikutnya. Penjadwal menentukan thread mana yang akan berjalan berikutnya berdasarkan prioritas penjadwalannya.

Prioritas Penjadwalan
Setiap thread memiliki prioritas sendiri untuk penjadwalan. Tingkatan prioritas berkisar antara nol (prioritas terendah) sampai 31 (prioritas tertinggi). Hanya thread sistem (istilah teknisnya disebut zero-page thread) saja yang bisa menggunakan prioritas nol.

Prioritas tiap thread ditentukan melalui kriteria berikut:

  • Priority class proses.
  • Priority level thread dalam priority class prosesnya.

Priority class dan priority level dikombinasikan sehingga membentuk base priority.

1. Priority Class
Setiap proses mempunyai salah satu priority class berikut:

IDLE_PRIORITY_CLASS
NORMAL_PRIORITY_CLASS
HIGH_PRIORITY_CLASS
REALTIME_PRIORITY_CLASS

Secara default, priority class dari proses adalah NORMAL_PRIORITY_CLASS. Tetapi Windows menyediakan fungsi CreateProcess() untuk membuat proses dan sekaligus menentukan priority class dari proses yang akan dibuat tersebut. Selain itu juga disediakan fungsi untuk mendapatkan/merubah priority class dari suatu proses yang sedang berjalan, yaitu dengan menggunakan fungsi GetPriorityClass() dan SetPriorityClass().

2. Priority Level
Berikut ini adalah priority level yang terdapat dalam priority class:

THREAD_PRIORITY_IDLE
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_TIME_CRITICAL

Semua thread dibuat dengan THREAD_PRIORITY_NORMAL. Ini berarti prioritas thread sama dengan prioritas prosesnya. Fungsi untuk mendapatkan/merubah priority level suatu thread adalah GetThreadPriority() dan SetThreadPriority().

3. Base Priority
Tingkatan prioritas untuk setiap thread ditentukan dari kombinasi priority class dan priority level-nya. Kombinasi ini membentuk base priority. Tabel berikut menunjukkan tingkatan base priority yang terdiri dari kombinasi priority class dan priority level.

Tabel 1 Tabel base priority pada Windows 9x (Win32® Programmer’s Reference)


Dari nilai-nilai base priority pada tabel di atas, bisa dikelompokkan juga menjadi empat tingkatan priority class, yaitu: idle, normal (background dan foreground), high, dan real time. Tabel 2 berikut menjelaskan bagaimana prioritas dibagi menjadi kelas-kelas.

4. Context Switches
Setiap tingkatan prioritas memiliki antrian tersendiri (prioritas normal memilliki antrian tersendiri, prioritas idle memiliki antrian tersendiri, dan seterusnya). Penjadwal mengatur antrian-antrian untuk setiap tingkatan prioritas tersebut. Ketika prosesor ‘kosong’, sistem operasi melakukan context switching. Langkah-langkahnya adalah sebagai berikut:

  1. Simpan context dari thread yang tadinya berjalan.
  2. Tempatkan thread tersebut di akhir antrian.
  3. Load context dari dispatcher.
  4. Cari prioritas tertinggi dari antrian yang berisi ready threads.
  5. Ambil thread tersebut dari antrian.
  6. Hapus context milik dispatcher.
  7. Load isi context thread yang akan dieksekusi, dan eksekusi thread tersebut.

Thread yang di-suspend atau di-block tidak akan diberikan time slice oleh penjadwal (walaupun prioritasnya tinggi) sampai siap untuk dijalankan.

Untuk selengkapnya bisa dilihat pada gambar 1 dan 2.

Penyebab umum terjadinya context switch adalah:

  • Time slice telah habis.
  • Thread dengan prioritas yang lebih tinggi siap untuk dijalankan.
  • Thread tersebut harus menunggu sesuatu (wait).

Ketika thread yang sedang berjalan harus menunggu sesuatu (wait), sisa time slice dari thread yang bersangkutan tidak akan diakumulasikan dengan thread baru, tetapi dihapus/dihilangkan.

Context itu sendiri merupakan suatu struktur yang berisi data-data register yang sangat tergantung oleh jenis prosesor. Struktur context yang sudah didefinisikan adalah untuk prosesor Intel, MIPS, Alpha, dan PowerPC. Microsoft mendefinisikan struktur dari context dalam file header WinNT.h untuk semua jenis prosesor. Borland Delphi 5 mengkonversinya ke dalam format struktur pascal (record) sebagai berikut:

_CONTEXT = record
{$EXTERNALSYM _CONTEXT}
  ContextFlags: DWORD;

{ This section is specified/returned if CONTEXT_DEBUG_REGISTERS
  is set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is
  NOT included in CONTEXT_FULL. }
  Dr0: DWORD;
  Dr1: DWORD;
  Dr2: DWORD;
  Dr3: DWORD;
  Dr6: DWORD;
  Dr7: DWORD;

{ This section is specified/returned if the
  ContextFlags word contains the flag CONTEXT_FLOATING_POINT. }
  FloatSave: TFloatingSaveArea;

{ This section is specified/returned if the
  ContextFlags word contains the flag CONTEXT_SEGMENTS. }
  SegGs: DWORD;
  SegFs: DWORD;
  SegEs: DWORD;
  SegDs: DWORD;

{ This section is specified/returned if the
  ContextFlags word contains the flag CONTEXT_INTEGER. }
  Edi: DWORD;
  Esi: DWORD;
  Ebx: DWORD;
  Edx: DWORD;
  Ecx: DWORD;
  Eax: DWORD;

{ This section is specified/returned if the
  ContextFlags word contains the flag CONTEXT_CONTROL. }
  Ebp: DWORD;
  Eip: DWORD;
  SegCs: DWORD;
  EFlags: DWORD;
  Esp: DWORD;
  SegSs: DWORD;
end;

Windows menyediakan fungsi GetThreadContext() untuk mengambil isi context dari thread tertentu. Untuk mendapatkan isi context yang benar, thread yang bersangkutan harus di-suspend dulu karena seiring dengan berjalannya thread, isi context juga akan berubah. Disediakannya struktur ini bukan berarti isi context bisa diubah-ubah sembarangan oleh pemrogram, karena pada dasarnya context digunakan oleh sistem operasi untuk melakukan berbagai operasi internal.

5. Priority Boosts
Setiap thread memiliki dynamic priority. Prioritas inilah yang sebenarnya digunakan oleh penjadwal untuk menentukan thread mana yang akan dijalankan berikutnya. Awalnya, nilai dynamic priority sama dengan base priority. Kemudian, sistem operasi bisa menaikkan (boost) atau menurunkan (lower) dynamic priority, untuk memastikan semua thread mendapat ‘giliran’ untuk dieksekusi sehingga tidak ada yang mengalami startvation (suatu keadaan dimana proses/thread tidak pernah mendapat giliran pemroses dikarenakan prioritasnya yang rendah).

Sistem operasi menaikkan dynamic priority suatu thread untuk alasan-alasan sebagai berikut:

  • Ketika suatu proses yang prioritasnya NORMAL_PRIORITY_CLASS berada di foreground, penjadwal akan menaikkan priority class dari proses-proses yang berhubungan dengan proses foreground tersebut, sehingga prioritasnya bisa lebih besar atau sama dengan priority class dari proses-proses background. Priority class dikembalikan seperti semula ketika proses tidak ada di foreground lagi.
  • Ketika suatu window (tampilan antarmuka) menerima input, seperti timer, mouse, atau keyboard, penjadwal menaikkan prioritas dari thread yang memiliki window tersebut.
  • Ketika kondisi wait untuk thread yang di-block telah selesai, penjadwal menaikkan prioritas thread.

Setelah menaikkan dynamic priority suatu thread, penjadwal menurunkan prioritasnya satu tingkatan setiap thread menyelesaikan satu time slice, sampai prioritasnya sama dengan base priority. Perlu dicatat bahwa dynamic priority suatu thread tidak akan pernah kurang dari base priority-nya.

6. Priority Inversion
Priority inversion terjadi ketika ada dua thread atau lebih dengan prioritas yang berbeda berlomba-lomba untuk dijadwalkan. Kita ambil contoh sederhananya dengan tiga thread: A, B, dan C. Thread A memiliki prioritas yang tinggi dan siap untuk dijadwalkan. Thread B, yang memiliki prioritas rendah, sedang mengeksekusi sesuatu di-critical section (bagian kode yang hanya bisa dieksekusi oleh satu thread pada satu waktu). Thread A, yang berprioritas tinggi, mulai menunggu giliran masuk critical section yang sedang dipakai oleh thread B. Thread C memiliki prioritas menengah. Thread C menerima semua waktu prosesor, karena thread yang berprioritas lebih tinggi (thread A) sedang menunggu thread yang berprioritas rendah (thread B). Thread B tidak akan meninggalkan critical section, karena tidak memiliki prioritas yang lebih tinggi dari thread C untuk dijadwalkan.

Jika satu thread yang berprioritas tinggi tergantung pada satu thread yang berprioritas rendah, thread tersebut tidak akan pernah dijalankan, karena thread yang berprioritas menengah mengambil semua waktu prosesor. Sistem operasi akan mengetahui bahwa thread berprioritas tinggi bergantung pada thread yang berprioritas rendah, sehingga thread yang berprioritas rendah akan dinaikkan prioritasnya sampai melebihi thread yang berprioritas tinggi. Hal ini akan menyebabkan thread yang awalnya berprioritas rendah untuk berjalan dan thread yang berprioritas tinggi mendapatkan giliran atas critical section.

Algoritma Penjadwalan
Dari hasil eksplorasi di atas dapat disimpulkan beberapa hal sebagai berikut:

  • Dalam mengatur urutan thread-thread yang akan dieksekusi, penjadwal menggunakan prioritas thread (priority level) untuk menentukan urutannya. Logikanya, thread yang prioritasnya lebih tinggi akan dijadwalkan lebih dulu daripada thread yang prioritasnya lebih rendah. Hal ini merupakan karakteristik dari Priority Scheduling.
  • Dalam mengatur urutan thread-thread yang memiliki prioritas yang sama, penjadwal mengeksekusi thread berdasarkan urutan masuk ke antrian (FIFO), tetapi setiap thread yang akan dieksekusi diberikan dulu time slice yang merupakan ‘jatah’ waktu untuk berada di pemroses. Ini merupakan karakteristik dari Penjadwalan Round-Robin.
  • Setiap thread dikelompokkan ke dalam antrian-antrian berdasarkan tingkat prioritasnya. Penjadwal akan mulai mengeksekusi thread-thread yang ada di antrian berprioritas paling tinggi dulu, kemudian mengeksekusi thread di antrian yang satu tingkat lebih rendah prioritasnya. Hal ini juga merupakan karakteristik dari Penjadwalan Multiple-Feedback Queues.

Sehingga bisa dikatakan bahwa sistem operasi Windows 98 SE menggunakan Multiple-Feedback Queues yang ‘didalamnya’ memberlakukan aturan-aturan penjadwalan berprioritas (Priority Scheduling) untuk semua thread yang dibagi ke dalam antrian-antrian berdasarkan prioritasnya, dan disetiap antrian diberlakukan aturan-aturan penjadwalan Round-Robin.

Kesimpulan
Dari analisis yang dilakukan terhadap proses dan thread yang sudah dipaparkan sebelumnya, maka dapat diambil kesimpulan sebagai berikut:

  1. Proses merupakan aplikasi/program yang sedang berjalan, tetapi yang benar-benar dijalankan oleh pemroses adalah bagian dari proses, yaitu thread.
  2. Setiap proses minimal memiliki satu thread (primary thread), artinya jika tidak ada thread dalam satu proses, maka proses juga tidak akan ada.
  3. Prioritas yang sesungguhnya adalah base priority yang dimiliki oleh thread (karena thread merupakan unit yang dieksekusi oleh pemroses), tetapi yang dibaca oleh penjadwal adalah dynamic priority yang mana pada awalnya memiliki nilai yang sama dengan base priority. Base priority sendiri merupakan kombinasi dari priority class dan priority level.
  4. Multitasking (mengeksekusi banyak task) atau multithreading (mengeksekusi banyak thread) hanyalah istilah yang digunakan bagi manusia yang menggambarkan seakan-akan pemroses mengeksekusi beberapa task/kode dalam satu waktu. Padahal pada dasarnya di sisi pemroses (tunggal) hanya ada SATU yang dieksekusi.
  5. Pada Microsoft® Win32® Programmer’s Reference dijelaskan bahwa time slice besarnya adalah 20 milidetik, artinya secara teoritis dalam satu detik pemroses dapat mengeksekusi minimal 50 thread.
  6. Ketika terjadi perubahan thread yang dieksekusi, terjadi dua kali context switch, yaitu satu untuk thread itu sendiri dan satu lagi untuk dispatcher yang melakukan pemilihan dan pengambilan thread di antrian. Sehingga, berdasarkan poin sebelumnya hal tersebut berarti minimal context switch terjadi kira-kira 100 kali dalam satu detik.
  7. Strategi penjadwalan yang digunakan Windows 98 SE adalah Multiple-Feedback Queues.

Tamat.

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.

Demikian tulisan bagian terakhir mengenai eksplorasi proses pada Windows 9x/Me. 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
 

»

Stored Procedure SQL Server Untuk Mengirim E-mail Dengan Komponen JMail (3041)

»

Beberapa Cara Belajar Cepat Melalui Internet (11616)

»

Beberapa Situs Search Engine Khusus Untuk Pencarian Gambar/Images (4433)

»

Penghargaan Bagi Mereka yang Mau Berbagi (1870)

»

Submit URL Website Anda di Yahoo! (3166)

 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