Campus Life · Rumus-rumus · Sainstek
Original PostApa Itu Kecepatan Clock dan Process Control Block? Inilah Pengertian tentang Sinyal Clock, Manajemen Proses, dan Scheduling beserta dengan Implementasinya (+ Algoritma Penjadwalan dalam Bahasa C#)
12 Jan 2022 0
Assalamu‘alaikum wr. wb.
Hello guys, Kembali lagi bersama Inzaghi's Blog! Biasanya jika kita mendengar istilah "Clock", pastinya yang terbenak dipikiran kita adalah "Jam", tapi bukan disitu saja. Memang sih artinya Jam, akan tetapi lebih ke Penjadwalan atau Scheduling. Juga, pada Postingan ini, saya akan membahas tentang Manajemen Proses pada Sistem Operasi termasuk Process Control Block (PCB). Untuk selengkapnya, silakan lihat pada Postingan ini.
KECEPATAN CLOCK PADA CPU
Performa CPU — “otak” dari PC Anda — berdampak besar pada kecepatan pemuatan program dan kelancaran pengoperasiannya. Namun, ada beberapa cara berbeda untuk mengukur performa prosesor. Kecepatan Clock (juga disebut “laju clock” atau “frekuensi”) adalah salah satu yang paling signifikan.
Jika Anda ingin tahu cara memeriksa kecepatan clock, klik menu Start (atau klik tombol Windows*) lalu ketik “System Information”. Nama model dan kecepatan clock CPU Anda akan tercantum pada “Processor”.
Apa Itu Kecepatan Clock?
Secara umum, Kecepatan Clock atau Clock Speed lebih tinggi berarti CPU yang lebih cepat. Namun, banyak faktor lain yang turut berperan.
CPU Anda memproses banyak instruksi (kalkulasi tingkat rendah seperti aritmatika) dari berbagai program setiap detik. Kecepatan clock mengukur jumlah siklus yang dijalankan CPU per detik, yang diukur dalam GHz (gigahertz).
Secara teknis, “siklus” adalah pulsa yang disinkronkan oleh osilator internal, tetapi untuk keperluan ini, siklus adalah unit dasar yang membantu memahami kecepatan CPU. Selama setiap siklus, miliaran transistor di dalam prosesor membuka dan menutup.
| Frekuensi dalam hal ini jumlah operasi dalam waktu yang ditetapkan, seperti ditunjukkan di atas. |
CPU dengan kecepatan clock 3,2 GHz menjalankan 3,2 miliar siklus per detik. (CPU lama kecepatannya diukur dalam megahertz, atau juta siklus per detik.)
Terkadang, beberapa instruksi diselesaikan dalam satu siklus clock; dalam kasus lain, satu instruksi mungkin ditangani selama beberapa siklus clock. Karena desain CPU yang berbeda menangani instruksi secara berbeda, yang terbaik adalah membandingkan kecepatan clock dalam merek dan generasi CPU yang sama.
Misalnya, CPU dengan kecepatan clock lebih tinggi dari lima tahun yang lalu mungkin diungguli oleh CPU baru dengan kecepatan clock lebih rendah, karena arsitektur baru memroses instruksi secara lebih efisien. Prosesor Intel® Seri X mungkin mengungguli prosesor seri K dengan kecepatan clock lebih tinggi, karena membagi tugas antara lebih banyak core dan dilengkapi dengan cache CPU lebih besar. Tetapi dalam generasi CPU yang sama, prosesor dengan kecepatan clock lebih tinggi umumnya akan mengungguli prosesor dengan kecepatan lebih rendah pada banyak aplikasi. Karena itulah penting untuk membandingkan prosesor dari merek dan generasi yang sama.
Mengapa Kecepatan Clock Penting?
Kecepatan clock CPU adalah indikator yang baik mengenai performa prosesor. Meskipun aplikasi seperti pengeditan video dan streaming dikenal mengandalkan performa multi-core, banyak game video baru masih meraih tolok ukur terbaik pada CPU dengan kecepatan clock tertinggi.
Clock Speed Lebih Tinggi Belum Tentu Lebih Baik
CPU yang memiliki clock speed lebih rendah belum tentu kecepatannya dalam memproses data lebih buruk daripada CPU dengan clock speed yang lebih tinggi.
Pasalnya, selain jumlah siklus per detik, yang juga perlu diperhatikan adalah seberapa banyak instruksi yang bisa dieksekusi oleh sebuah prosesor dalam setiap siklus. Hal ini terkait dengan efisiensi prosesor dalam menangani instruksi.
Clock speed yang lebih rendah tapi setiap siklusnya mampu mengeksekusi lebih banyak instruksi justru lebih bagus. Mengapa demikian? Karena jumlah siklusnya lebih sedikit, maka tenaga yang dibutuhkan prosesor untuk menjalankan tugasnya pun juga ikut berkurang. Prosesor pun lebih hemat daya dan tidak mudah panas.
Clock Speed Disesuaikan Secara Otomatis
Makin tinggi clock speed, makin besar daya listrik yang dibutuhkan, dan makin tinggi panas yang dihasilkan. Untungnya, CPU modern sudah menggunakan algoritma pintar yang mampu menyesuaikan clock speed secara otomatis sehingga CPU tidak terus-menerus bekerja pada kecepatan tinggi.
Ketika komputer hanya digunakan untuk keperluan ringan seperti menulis artikel di Wordpad, CPU bekerja pada kecepatan rendah untuk mencegah panas dan mengurangi konsumsi daya listrik. Ketika komputer digunakan untuk bermain game, clock speed akan naik dengan sendirinya untuk memenuhi kebutuhan resource gaming yang besar.
Clock Speed Bukan Segalanya
Clock speed merupakan indikator yang signifikan dalam menilai kecepatan sebuah komputer, tapi masih ada beberapa faktor lain yang perlu diperhatikan seperti jumlah core CPU, memori cache CPU, mekanisme pendinginan CPU, arsitektur CPU, kapasitas RAM, SSD atau HDD, dan graphics card. Sebuah komputer yang memiliki CPU dengan clock speed lebih rendah tapi menggunakan SSD bisa saja lebih cepat daripada komputer yang memiliki CPU lebih baik tapi menggunakan HDD.
APA ITU PROCESS CONTROL BLOCK (PCB)? BESERTA DENGAN MANAJEMEN PROSES LAINNYA
1. Process Control Block (PCB)
Setiap proses yang berjalan di dalam sistem operasi memiliki sebuah struktur data yang disebut Process Control Block (PCB). Struktur ini menyimpan berbagai informasi penting mengenai proses tersebut, seperti identitas proses atau Process ID (PID), prioritas eksekusi, status proses, serta lokasi proses di dalam memori.
Selain itu, PCB memuat informasi lain yang dibutuhkan oleh sistem operasi untuk mengelola, mengawasi, dan mengoordinasikan berbagai proses yang sedang berjalan. Dengan adanya PCB, sistem operasi dapat mengetahui kondisi setiap proses dan menentukan tindakan yang perlu dilakukan terhadapnya.
Hampir semua sistem operasi modern menggunakan PCB, meskipun struktur dan implementasinya dapat berbeda-beda. Oleh karena itu, bentuk PCB pada suatu sistem operasi belum tentu sama dengan PCB yang digunakan oleh sistem operasi lainnya.
Salah satu informasi penting yang terdapat dalam PCB adalah prioritas proses. Prioritas ini digunakan oleh sistem operasi sebagai salah satu pertimbangan dalam menentukan proses yang akan memperoleh waktu pemrosesan dari CPU. Proses dengan prioritas lebih tinggi dapat memperoleh kesempatan untuk dijalankan lebih dahulu atau lebih sering dibandingkan proses dengan prioritas lebih rendah, bergantung pada algoritma penjadwalan yang digunakan.
Dengan demikian, setiap proses dapat direpresentasikan melalui PCB yang menyimpan informasi spesifik mengenai proses tersebut. Informasi di dalam PCB dapat berbeda antara satu proses dan proses lainnya, sesuai dengan keadaan dan kebutuhan masing-masing proses.
Dalam pengelolaan proses, sistem operasi juga dapat menggunakan struktur data lain, seperti process table. Struktur ini berfungsi untuk menyimpan dan mengelola informasi mengenai berbagai proses yang sedang ditangani oleh sistem operasi, termasuk informasi yang berkaitan dengan PCB.
Di bawah ini merupakan elemen-elemen yang terdapat pada PCB Running :
- Identifier : Elemen ini digunakan untuk mengidentifikasi dan membedakan antara satu proses dengan proses yang lainnya
- State : Status dari proses yang sedang dieksekusi, diblok, dan lain-lain
- Priority : Status dari proses yang sedang dieksekusi, diblok, dan lain-lain priority
- Program Counter : Alamat berikutnya akan dieksekusi
- Memory Pointers : Pointer yang nantinya akan menunjukkan alamat memori data dan kode yang saling berhubungan dengan blok dan memori yang dibagikan dengan proses yang lainnya (jika ada)
- Context Data : Data yang ada di dalam register prosesor pada saat proses akan diseksekusi
- I/O Status Information : Informasi yang berkaitan dengan permintaan mengenai I/O device yang masih belum terpenuhi (misalnya akses ke harddisk), apa saja daftar file yang digunakan oleh proses, dan lain sebagainya
- Accounting Information : Informasi seputar total waktu proses yang sudah digunakan, batas waktu proses, nomor urutan, dan lain sebagainya
Pembagian Process Control Block
Process Control Block dibagi menjadi 3 (Tiga) Kelompok, yaitu :
- Process identification data : Proses yang menyertakan identifier pada prosesnya
- Process state data : Potongan-potongan informasi yang isinya menjelaskan status proses yang ditangguhkan, memungkinkan Sistem Operasi melakukan restart serta masih bisa mengeksekusinya dengan benar
- Process control data : Digunakan oleh Sistem Operasi untuk mengelola proses itu sendiri.
2. Status Proses (Process Status)
Ketika suatu proses dijalankan, statusnya dapat berubah sesuai dengan aktivitas yang sedang berlangsung. Status proses menggambarkan kondisi proses pada suatu waktu tertentu, misalnya ketika sedang dieksekusi oleh prosesor, menunggu suatu kejadian, atau siap untuk dijalankan.
Berikut adalah 3 (Tiga) Status yang umumnya dimiliki oleh suatu proses :
- Running : Status yang dimiliki pada saat instruksi-instruksi dari sebuah proses dieksekusi.
- Waiting : Status yang dimiliki pada saat proses menunggu suatu event (contohnya: proses I/O).
- Ready : Status yang dimiliki pada saat proses siap untuk dieksekusi oleh prosesor.
Dua status tambahan, yaitu saat pembentukan dan terminasi :
- New : Status yang dimiliki pada saat proses baru saja dibuat.
- Terminated : Status yang dimiliki pada saat proses telah selesai dieksekusi.
Perubahan status tersebut memungkinkan sistem operasi mengatur jalannya proses secara terstruktur. Dengan memahami status setiap proses, sistem operasi dapat menentukan proses mana yang perlu dijalankan, ditunda, atau dihentikan sesuai dengan kondisi sistem.
3. Pembuatan Proses
Suatu proses dapat membuat satu atau beberapa proses baru melalui mekanisme pemanggilan sistem yang disediakan oleh sistem operasi. Proses yang membuat proses baru disebut proses induk (parent process), sedangkan proses yang dihasilkannya disebut proses anak (child process).
Setiap proses anak juga dapat membuat proses lainnya. Hubungan tersebut dapat membentuk struktur hierarkis menyerupai pohon proses (process tree), dengan proses induk sebagai pembentuk proses anak dan proses-proses berikutnya sebagai turunannya.
Pada umumnya, setiap proses memerlukan sumber daya tertentu untuk menyelesaikan pekerjaannya. Sumber daya tersebut dapat berupa waktu CPU, memori, berkas, dan perangkat masukan atau keluaran (I/O).
Ketika suatu proses membuat proses anak, sistem operasi dapat mengalokasikan sumber daya yang diperlukan bagi proses tersebut. Dalam kondisi tertentu, proses anak dapat memperoleh sumber daya langsung dari sistem operasi. Proses induk juga dapat membagikan sebagian sumber dayanya kepada proses anak, misalnya memori atau berkas yang dapat digunakan bersama.
Namun, pemberian sumber daya kepada proses anak perlu diatur dengan baik. Proses induk atau sistem operasi dapat membatasi jumlah sumber daya yang digunakan oleh proses anak agar tidak menghabiskan sumber daya sistem secara berlebihan. Pembatasan ini juga membantu mencegah pembuatan terlalu banyak proses yang dapat mengganggu kinerja komputer.
Operasi tersebut adalah :
- Penciptaan proses
- Penghancuran/terminasi proses
- Penundaan proses
- Pelanjutan kembali proses
- Pengubahan prioritas proses
- Memblok proses
- Membangunkan proses
- Menjadwalkan proses
- Memungkinkan proses berkomunikasi dengan proses lain
Ketika proses baru ditambahkan, sistem operasi membangun struktur data untuk mengelola dan mengalokasikan ruang alamat proses. Pembuatan Proses Melibatkan banyak aktivitas, yaitu :
- Memberi identitas proses
- Menyisipkan proses pada tabel proses
- Menentukan prioritas awal proses
- Menciptakan PCB
- Mengalokasikan sumber daya awal bagi proses
4. Terminasi Proses
Suatu proses dapat berakhir setelah menyelesaikan instruksi terakhirnya dan meminta sistem operasi untuk menghapusnya melalui pemanggilan sistem exit. Setelah proses berakhir, hasil atau data keluaran tertentu dapat dikembalikan kepada proses induknya. Dalam sistem operasi yang mendukung mekanisme tersebut, proses induk dapat menggunakan pemanggilan sistem wait untuk menunggu berakhirnya proses anak dan memperoleh informasi mengenai hasil eksekusinya.
Setelah proses dihentikan, sistem operasi akan membebaskan sumber daya yang sebelumnya digunakan. Sumber daya tersebut mencakup memori fisik maupun virtual, berkas yang dibuka oleh proses, serta sumber daya masukan dan keluaran yang telah dialokasikan.
Selain karena telah menyelesaikan pekerjaannya, suatu proses juga dapat dihentikan karena kondisi tertentu. Proses induk, misalnya, dapat meminta sistem operasi untuk menghentikan proses anak melalui mekanisme yang sesuai, seperti pemanggilan sistem abort pada sistem yang mendukungnya.
Beberapa alasan yang dapat menyebabkan proses dihentikan antara lain :
- Turunan melampaui penggunaan sumber-daya yang telah dialokasikan. Dalam keadaan ini, proses induk perlu mempunyai mekanisme untuk memeriksa status turunannya-nya.
- Task yang ditugaskan kepada turunan tidak lagi diperlukan.
- Proses induk selesai, dan sistem operasi tidak mengizinkan proses turunan untuk tetap berjalan. Jadi, semua proses turunan akan berakhir pula. Hal ini yang disebut cascading termination.
- Proses memerlukan memori lebih banyak daripada yang dapat disediakan sistem.
- Proses berusaha menggunakan sumber data atau file yang tidak diijinkan dipakainya, atau proses mencoba menggunakannya tidak untuk peruntukannya, seperti menulis file read only.
- Proses memcoba perhitungan terlarang, seperti pembagian dengan nol,atau mencoba menyimpan angka yang lebih besar daripada yang dapat diakomodasi oleh perangkat keras
- Kesalahan muncul pada masukan/keluaran, seperti ketidakmampuan menemukan file, kegagalan membaca atau menulis setelah sejumlah maksimum percobaan yang ditentukan.
Penghancuran proses melibatkan pembebasan proses dari sistem, yaitu :
- Sumber daya-sumber daya yang dipakai dikembalikan.
- Proses dihancurkan dari tabel sistem.
- PCB dihapus (ruang memori PCB dikembalikan ke pool memori bebas).
5. Komunikasi dan Hubungan Antar Proses
1. Sistem Berbagi Memori
Sistem berbagi memori (Shared Memory System) merupakan salah satu metode komunikasi antarproses yang dilakukan dengan menyediakan suatu area memori untuk digunakan bersama dalam pertukaran data. Alamat serta ukuran memori yang dialokasikan biasanya ditentukan oleh pengembang program sesuai dengan kebutuhan aplikasi.
Dalam metode ini, beberapa proses dapat mengakses area memori yang sama untuk membaca maupun menulis data. Sistem operasi membantu menyediakan dan mengatur alokasi memori tersebut, sedangkan mekanisme sinkronisasi diperlukan untuk mengatur akses antarproses agar tidak terjadi konflik ketika beberapa proses menggunakan memori secara bersamaan. Dengan demikian, komunikasi dapat berlangsung secara efisien.
2. Sistem Berkirim Pesan
Suatu proses disebut independen apabila keberadaan dan pelaksanaannya tidak dipengaruhi oleh proses lain yang sedang berjalan di dalam sistem. Proses ini tidak berbagi data dengan proses lain, baik untuk sementara maupun secara permanen.
Sebaliknya, proses kooperatif merupakan proses yang dapat saling memengaruhi dengan proses lain selama pelaksanaannya. Hal tersebut biasanya terjadi karena proses-proses tersebut berbagi data atau bekerja sama untuk menyelesaikan suatu tugas.
Terdapat empat alasan utama mengapa sistem operasi menyediakan lingkungan yang mendukung proses kooperatif, yaitu :
- Pembagian informasi: apabila beberapa pengguna dapat tertarik pada bagian informasi yang sama (sebagai contoh, sebuah berkas bersama), kita harus menyediakan sebuah lingkungan yang mengizinkan akses secara terus menerus ke tipe dari sumber-sumber tersebut.
- Kecepatan penghitungan/ komputasi: jika kita menginginkan sebuah tugas khusus untuk menjalankan lebih cepat, kita harus membagi hal tersebut ke dalam subtask, setiap bagian dari subtask akan dijalankan secara parallel dengan yang lainnya. Peningkatan kecepatan dapat dilakukan hanya jika komputer tersebut memiliki elemen-elemen pemrosesan ganda (seperti CPU atau jalur I/O).
- Modularitas: kita mungkin ingin untuk membangun sebuah sistem pada sebuah model modular-modular, membagi fungsi sistem menjadi beberapa proses atau threads.
- Kenyamanan: bahkan seorang pengguna individu mungkin memiliki banyak tugas untuk dikerjakan secara bersamaan pada satu waktu. Sebagai contoh, seorang pengguna dapat mengedit, memcetak, dan meng-compile secara paralel.
Proses ini menyediakan dua operasi yaitu mengirim pesan dan menerima pesan. Ketika dua bagian sistem ingin berkomunikasi satu sama lain, yang harus dilakukan pertama kali adalah membuat sebuah link komunikasi antara keduanya. Setelah itu, kedua bagian itu dapat saling bertukar pesan melalui link komunikasi tersebut.
Terdapat dua macam cara berkomunikasi, yaitu :
- Komunikasi langsung. Dalam komunikasi langsung, setiap proses yang ingin berkirim pesan harus mengetahui secara jelas dengan siapa mereka berkirim pesan. Hal ini dapat mencegah pesan salah terkirim ke proses yang lain. Karakteristiknya antara lain:
- Link dapat otomatis dibuat
- Sebuah link berhubungan dengan tepat satu proses komunikasi berpasangan
- Diantara pasangan itu terdapat tepat satu link
- Link tersebut biasanya merupakan link komunikasi dua arah
- Komunikasi tidak langsung. Berbeda dengan komunikasi langsung, jenis komunikasi ini menggunakan sejenis kotak surat atau port yang mempunyai ID unik untuk menerima pesan. Proses dapat berhubungan satu sama lain jika mereka membagi port mereka. Karakteristik komunikasi ini antara lain:
- Link hanya terbentuk jika beberapa proses membagi kotak surat mereka
- Sebuah link dapat terhubung dengan banyak proses
- Setiap pasang proses dapat membagi beberapa link komunikasi
- Link yang ada dapat merupakan link terarah ataupun link yang tidak terarah.
Dalam komunikasi berbasis pesan, terdapat dua operasi utama, yaitu mengirim pesan (send) dan menerima pesan (receive). Ketika dua proses atau bagian sistem ingin saling berkomunikasi, keduanya perlu memiliki mekanisme komunikasi yang sesuai. Setelah mekanisme tersebut tersedia, pesan dapat dikirim dan diterima untuk bertukar informasi atau mengoordinasikan pekerjaan.
3. Komunikasi Proses Dalam Sistem
Sistem operasi menyediakan mekanisme komunikasi bagi proses-proses kooperatif melalui Inter-Process Communication (IPC). IPC merupakan fasilitas yang memungkinkan beberapa proses bertukar informasi dan menyelaraskan aktivitasnya tanpa harus menggunakan ruang alamat memori yang sama.
Mekanisme IPC sangat berguna dalam lingkungan komputasi terdistribusi, yaitu ketika proses-proses yang saling berkomunikasi berjalan pada komputer berbeda yang terhubung melalui jaringan. Dengan IPC, proses dapat bertukar data meskipun tidak berada pada perangkat yang sama.
Salah satu metode IPC adalah komunikasi menggunakan sistem pengiriman pesan (message passing). Melalui metode ini, proses dapat mengirimkan informasi kepada proses lain tanpa harus berbagi area memori secara langsung. Sistem operasi dapat menyediakan mekanisme tersebut dalam berbagai bentuk, bergantung pada kebutuhan dan arsitektur sistem yang digunakan.
6. Sinkronisasi
implementasinya, operasi pengiriman dan penerimaan pesan dapat dirancang dengan dua pendekatan, yaitu blocking dan non-blocking, yang juga berkaitan dengan komunikasi sinkron dan asinkron.
Pada mekanisme sinkron atau blocking, proses dapat tertahan sementara hingga kondisi tertentu terpenuhi. Terdapat dua bentuk utama, yaitu :
- Blocking send. Pemblokiran pengirim sampai pesan sebelumnya diterima.
- Blocking receive. Pemblokiran penerima sampai terdapat pesan yang akan dikirim.
Sedangkan untuk keadaan asinkron, yang terjadi adalah :
- Non-blocking send. Pengirim dapat terus mengirim pesan tanpa memperdulikan apakah pesan sebelumnya sampai atau tidak.
- Non-blocking receive. Penerima menerima semua pesan baik berupa pesan yang valid atau pesan yang salah (null).
7. Penundaan (Suspend)
Penundaan proses (suspend) merupakan operasi dalam sistem operasi yang digunakan untuk menghentikan sementara pelaksanaan suatu proses. Operasi ini umumnya dilakukan ketika sistem perlu mengurangi beban kerja, mengatur penggunaan sumber daya, atau menangani kondisi tertentu yang mengharuskan proses dihentikan untuk sementara waktu.
Proses yang berada dalam keadaan tertunda tidak dapat melanjutkan eksekusinya sampai diaktifkan kembali melalui operasi resume. Selama proses ditangguhkan, sistem operasi dapat membebaskan atau mempertahankan sumber daya yang digunakan, bergantung pada jenis sumber daya dan kebijakan sistem. Sebagai contoh, memori utama yang tidak lagi diperlukan oleh proses dapat dilepaskan agar bisa digunakan oleh proses lain. Operasi resume berfungsi melanjutkan kembali proses dari titik eksekusi tempat proses tersebut ditangguhkan, selama kondisi sistem dan proses memungkinkan. Penggunaan operasi suspend dan resume memiliki beberapa manfaat, antara lain :
- Menangani Gangguan Sistem : Apabila terjadi masalah yang menghambat jalannya suatu proses, sistem dapat menangguhkan proses tersebut sampai gangguan berhasil diatasi. Sebagai contoh, proses pencetakan dapat dihentikan sementara ketika kertas pada printer habis, kemudian dilanjutkan setelah kertas diisi kembali.
- Memberikan Kendali kepada Pengguna : Jika pengguna belum yakin terhadap hasil atau jalannya suatu proses, proses tersebut dapat ditangguhkan sementara tanpa harus dihentikan secara permanen. Setelah pengguna memastikan bahwa proses dapat dilanjutkan, proses tersebut dapat diaktifkan kembali.
- Mengatur beban sistem : Ketika beban kerja meningkat dalam waktu singkat, sistem operasi dapat menangguhkan beberapa proses untuk sementara. Proses-proses tersebut kemudian dapat dilanjutkan kembali ketika beban sistem sudah berada pada tingkat yang lebih normal.
Dengan demikian, mekanisme suspend dan resume membantu sistem operasi mengatur jalannya proses secara lebih fleksibel tanpa harus selalu mengakhiri proses yang sedang berjalan.
8. Buffering
Dalam komunikasi antarproses, baik secara langsung maupun tidak langsung, pesan yang dikirimkan sering kali perlu disimpan sementara sebelum diterima oleh proses tujuan. Penyimpanan sementara ini disebut buffering, sedangkan tempat untuk menampung pesan biasanya diatur dalam bentuk antrean (queue).
Secara umum, terdapat 3 (Tiga) jenis kapasitas antrean dalam mekanisme pengiriman pesan, yaitu :
- Kapasitas Nol. Antrian mempunyai panjang maksimum nol, sehingga tidak ada penungguan pesan (message waiting). Dalam kasus ini, pengirim harus memblok sampai penerima menerima pesan.
- Kapasitas Terbatas. Antrian mempunyai panjang yang telah ditentukan, paling banyak n pesan dapat dimasukkan. Jika antrian tidak penuh ketika pesan dikirimkan, pesan yang baru akan menimpa, dan pengirim dapat melanjutkan eksekusi tanpa menunggu. Link mempunyai kapasitas terbatas. Jika link penuh, pengirim harus diblok sampai terdapat ruang pada antrian.
- Kapasitas Tak Terbatas. Antrian mempunyai panjang yang tak terhingga, sehingga semua pesan dapat menunggu disini. Pengirim tidak akan pernah diblok.
PENGERTIAN DAN JENIS-JENIS ALGORITMA PENJADWALAN (SCHEDULING ALGORITHM)
A. Pengertian dan Jenis-jenis Algoritma Penjadwalan
Proses memerlukan prosesor dan penjadwalan pemakaian prosesor. Berdasarkan berbagai ketentuan pada penjadwalan proses serentak, dapat disusun teknik penjadwalan prosesor. Dapat dipandang semua proses serentak itu sebagai satu kumpulan proses yang memerlukan prosesor Penjadwalan proses didasarkan pada Sistem Operasi yang menggunakan prinsip multiprogramming. Dengan cara mengalihkan kerja CPU untuk beberapa proses, maka CPU akan semakin produktif. Algoritma diperlukan untuk mengatur giliran proses-proses yang ada di ready queue yang mengantre untuk dialokasikan ke CPU. Beberapa Algoritma penjadwalan dijelaskan sebagai berikut :
1. First Come First Served (FCFS) Scheduling
FCFS merupakan algoritma penjadwalan yang paling sederhana yang digunakan dalam CPU. Dengan menggunakan algoritma ini setiap proses yang berada pada status ready dimasukkan kedalam FIFO queue atau antrian dengan prinsip first in first out, sesuai dengan waktu kedatangannya. Proses yang tiba terlebih dahulu yang akan dieksekusi. Kelemahan dari Algoritma ini :
- Waiting time rata-ratanya cukup lama
- Terjadinya convoy effect, yaitu proses-proses menunggu lama untuk menunggu 1 proses besar yang sedang dieksekusi oleh CPU. Algoritma ini juga menerapkan konsep non-preemptive, yaitu setiap proses yang sedang dieksekusi oleh CPU tidak dapat di-interrupt oleh proses yang lain
Pada Algoritma ini, maka proses yang pertama kali meminta jatah waktu untuk menggunakan CPU akan dilayani terlebih dahulu. Pada skema ini, proses yang meminta CPU pertama kali akan dialokasikan ke CPU pertama kali. Misalnya terdapat tiga proses yang dapat dengan urutan P1, P2, dan P3 dengan waktu CPU-burst dalam milidetik yang diberikan sebagai berikut :

Gant chart dengan penjadwalan FCFS dapat digambarkan sebagai berikut :

Waktu tunggu untuk P1 adalah 0, P2 adalah 24 dan P3 adalah 27 sehingga rata - rata waktu tunggu adalah (0+24+27)/3 = 17 milidetik.
Apabila urutannya P2, P3 dan P1 dengan waktu CPU-burst dalam milidetik yang diberikan sebagai berikut :

Maka Gant chart-nya dengan penjadwalan FCFS digambarkan sebagai berikut :

Waktu tunggu untuk P1 adalah 6, P2 adalah 0 dan P3 adalah 3 sehingga ratarata waktu tunggu adalah (6+0+3)/3 = 3 milidetik. Rata-rata waktu untuk kasus ini jauh lebih baik jika dibandingkan dengan kasus sebelumnya.
Algoritma FCFS termasuk non-preemptive, karena sekali CPU dialokasikan pada suatu proses, maka proses tersebut tetap akan memakai CPU sampai proses tersebut melepaskannya (berhenti atau meminta I/O).
2. Shortest Job First (SJF) Scheduling
Pada Algoritma ini setiap proses yang ada di ready queue akan dieksekusi berdasarkan burst time terkecil. Hal ini mengakibatkan waiting time yang pendek untuk setiap proses dan karena hal tersebut maka waiting time rata-ratanya juga menjadi pendek. Ada beberapa kekurangan dari Algoritma ini yaitu :
- Susahnya untuk memprediksi burst time proses yang akan dieksekusi selanjutnya.
- Proses yang mempunyai burst time yang besar akan memiliki waiting time yang besar pula SJF (Shortest Job First) karena yang dieksekusi terlebih dahulu adalah proses dengan burst time yang lebih kecil.
Algoritma ini dapat dibagi menjadi dua bagian yaitu :
- Preemptive. Jika ada proses yang sedang dieksekusi oleh CPU dan terdapat proses di ready queue dengan burst time yang lebih kecil daripada proses yang sedang dieksekusi tersebut, maka proses yang sedang dieksekusi oleh CPU akan digantikan oleh proses yang berada di ready queue tersebut. Preemptive SJF sering disebut juga Shortest-Remaining-Time-First scheduling.
- Non-preemptive. CPU tidak memperbolehkan proses yang ada di ready queue untuk menggeser proses yang sedang dieksekusi oleh CPU meskipun proses yang baru tersebut mempunyai burst time yang lebih kecil.
Contoh dari SJF Scheduling :
a. Non Preemptive
1.) Waktu kedatangan sama
2.) Waktu kedatangan tidak sama
b. Preemptive
3. Priority Scheduling
Priority Scheduling merupakan Algoritma penjadwalan yang mendahulukan proses yang memiliki prioritas tertinggi. Setiap proses memiliki prioritasnya masing-masing. Prioritas suatu proses dapat ditentukan melalui beberapa karakteristik antara lain :
- Time limit.
- Memory requirement.
- Akses file.
- Perbandingan antara I/O burst dengan CPU burst.
- Tingkat kepentingan proses.
Pada Algoritma ini terdapat 2 (Dua) macam penjadwalan, yaitu :
- Preemptive. Jika ada suatu proses yang baru datang memiliki prioritas yang lebih tinggi daripada proses yang sedang dijalankan, maka proses yang sedang berjalan tersebut dihentikan, lalu CPU dialihkan untuk proses yang baru datang tersebut.
- Nonpreemtive. Proses yang baru datang tidak dapat menganggu proses yang sedang berjalan, tetapi hanya diletakkan di depan queue.
Kelemahan pada priority scheduling adalah dapat terjadinya indefinite blocking (starvation). Solusi dari permasalahan ini adalah aging, yaitu meningkatkan prioritas dari setiap proses yang menunggu dalam queue secara bertahap.
Contoh dari Priority Scheduling :
4. Round Robin Scheduling
Algoritma ini menggilir proses yang ada di antrian. Setiap proses mendapat jatah sebesar time quantum. Jika time quantum-nya habis atau proses sudah selesai, CPU akan dialokasikan ke proses berikutnya. Semua proses mendapat jatah waktu yang sama dari CPU yaitu (1/n), dan tak akan menunggu lebih lama dari (n-1)q dengan q adalah lama 1 quantum. Jika q terlalu besar maka akan sama dengan algoritma FCFS. Jika terlalu kecil, akan semakin banyak peralihan proses sehingga banyak waktu terbuang.
Dengan waktu quantum (quantum time) untuk membatasi waktu proses, biasanya 1-100 milidetik. Setelah waktu habis, proses ditunda dan ditambahkan pada ready queue. Jika suatu proses memiliki CPU burst lebih kecil dibandingkan dengan waktu quantum, maka proses tersebut akan melepaskan CPU jika telah selesai bekerja, sehingga CPU dapat segera digunakan oleh proses selanjutnya. Sebaliknya, jika suatu proses memiliki CPU burst yang lebih besar dibandingkan dengan waktu quantum, maka proses tersebut akan dihentikan sementara jika sudah mencapai waktu quantum, dan selanjutnya mengantre kembali pada posisi ekor dari ready queue; CPU kemudian menjalankan proses berikutnya. Jika terdapat n proses pada ready queue dan waktu quantum q, maka setiap proses mendapatkan 1/n dari waktu CPU paling banyak q unit waktu pada sekali penjadwalan CPU. Tidak ada proses yang menunggu lebih dari (n-1)q unit waktu. Performansi algoritma round robin dapat dijelaskan sebagai berikut: jika q besar, maka yang digunakan adalah algoritma FIFO, tetapi jika q kecil maka sering terjadi context switch. Misalkan ada 3 proses: P1, P2, dan P3 yang meminta pelayanan CPU dengan quantum-time sebesar 4 milidetik, maka dapat digambarkan sebagai berikut :

Maka Gantt Chart-nya dapat digambarkan sebagai berikut :

Waktu tunggu untuk P1 adalah 6, P2 adalah 4, dan P3 adalah 7 sehingga rata- rata waktu tunggu adalah (6 + 4 + 7)/3 = 5.66 milidetik.
Algoritma Round-Robin ini di satu sisi memiliki keuntungan, yaitu adanya keseragaman waktu. Namun di sisi lain, algoritma ini akan terlalu sering melakukan switching. Semakin besar quantum-timenya maka switching yang terjadi akan semakin sedikit.
Pada multiprogramming, selalu akan terjadi beberapa proses berjalan dalam suatu waktu. Sedangkan pada uniprogramming hal ini tidak akan terjadi, karena hanya ada satu proses yang berjalan pada saat tertentu. Konsep dasar dari multiprogramming ini adalah: suatu proses akan menggunakan CPU sampai proses tersebut dalam status wait (misalnya meminta I/O) atau selesai. Pada saat wait , maka CPU akan nganggur (idle). Untuk mengatasi hal ini, maka CPU dialihkan ke proses lain pada saat suatu proses sedang dalam wait, demikian seterusnya.
B. Implementasi dalam Bahasa C#
Berikut, inilah Contoh-contoh Implementasi Program Penjadwalan Clock dalam Bahasa C#.
1. Sinyal Clock
Kita akan membuat Algoritma Penjadwalan Sinyal Clock dengan menggunakan Sinyal Clock. Pertama kita buat terlebih dahulu programnya dalam Bahasa C#.
using System;using System.IO.Ports;using System.Threading;namespace ConsoleApp2{class Program{static bool jobIsEnabledA = true;static bool jobIsEnabledB = true;static bool jobIsEnabledC = true;static void Main(string[] args){Console.WriteLine("Starting at: {0}", DateTime.Now.ToString("h:mm:ss"));while (true){var currentTime = DateTime.Now.Second;if (currentTime % 2 == 0 && jobIsEnabledA){jobIsEnabledA = false;ThreadPool.QueueUserWorkItem((state) => { Console.WriteLine(string.Format("Pertama! {0}", currentTime)); });}if (currentTime % 3 == 0 && jobIsEnabledB){jobIsEnabledB = false;ThreadPool.QueueUserWorkItem((state) => { Console.WriteLine(string.Format("Kedua! {0}", currentTime)); });}if (currentTime % 5 == 0 && jobIsEnabledC){jobIsEnabledC = false;ThreadPool.QueueUserWorkItem((state) => { Console.WriteLine(string.Format("Ketiga! {0}", currentTime)); });}if (currentTime == 30){jobIsEnabledA = true;jobIsEnabledB = true;jobIsEnabledC = true;}var logText = string.Format("{0} jobIsEnabledA: {1} jobIsEnabledB: {2} jobIsEnabledC: {3}",DateTime.Now.ToString("h:mm:ss"), jobIsEnabledA, jobIsEnabledB, jobIsEnabledC);Console.WriteLine(logText);Thread.Sleep(1000);}}static void Task1(){while (jobIsEnabledA){var currentTime = DateTime.Now.Second;Console.WriteLine(string.Format("Pertama: {0}", currentTime));Thread.Sleep(1000);}}}}
Lalu, inilah hasilnya :
Setelah kita jalankan program tersebut, maka akan jalan terus tanpa henti kecuali jika kita keluarkan program tersebut. Mengapa demimkian? Mari kita bahas penjelasannya di bawah.
PENJELASAN :
Pertama dari QueueUserWorkItem lalu kita lanjut ke sebuah tread yang bernama ThreadPool. Kemudian dibagi-bagi lagi tugasnya menjadi 3 bagian yaitu jobIsEnabledA, jobIsEnabledB, dan jobIsEnabledC. Saat kita menjalankan program tersebut, maka akan mengikuti sesuai dengan format jam yang ada di komputer. Untuk currentTime % 2 == 0 && jobIsEnabledA merepresentasikan jumlah detik dengan kelipatan 2, kemudian currentTime % 3 == 0 && jobIsEnabledB merepresentasikan jumlah detik dengan kelipatan 3, dan currentTime % 5 == 0 && jobIsEnabledC merepresentasikan jumlah detik dengan kelipatan 5. Dan semuanya hasilnya adalah false. Akan tetapi jika currentTime == 30 maka semua variabel jobsEnabled -nya akan mejadi true. Dan jika sudah mendekati nilai akhir, maka akan menjadi true dan mengulang dari awal lagi. Dan juga Thread.Sleep(1000) merespresentasikan jumlah milidetik, jika 1000 maka menjadi 1 detik.
2. Scheduling Implementation Interface Program
Pertama, kita buat terlebih dahulu programnya dalam Bahasa C# (Sebagai Back-end), dan kodenya ada dibawah ini dengan Nama File MainWindowViewModel.cs pada Folder Arkom\SchedulingSimulation\WpfApp1\WpfApp1.
using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Runtime.CompilerServices;using System.Text;using System.Threading;using System.Threading.Tasks;namespace WpfApp1{public class MainWindowViewModel : INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;private int _valueSlider1;public int ValueSlider1 { get { return _valueSlider1; } set { _valueSlider1 = value; OnPropertyChanged(); } }private int _valueSlider2;public int ValueSlider2 { get { return _valueSlider2; } set { _valueSlider2 = value; OnPropertyChanged(); } }private int _valueSlider3;public int ValueSlider3 { get { return _valueSlider3; } set { _valueSlider3 = value; OnPropertyChanged(); } }private int _valueSlider4;public int ValueSlider4 { get { return _valueSlider4; } set { _valueSlider4 = value; OnPropertyChanged(); } }private string _info1;public string Info1 { get { return _info1; } set { _info1 = value; OnPropertyChanged(); } }private string _info2;public string Info2 { get { return _info2; } set { _info2 = value; OnPropertyChanged(); } }private string _info3;public string Info3 { get { return _info3; } set { _info3 = value; OnPropertyChanged(); } }private string _info4;public string Info4 { get { return _info4; } set { _info4 = value; OnPropertyChanged(); } }private string _infoAll;public string InfoAll { get { return _infoAll; } set { _infoAll = value; OnPropertyChanged(); } }public void Run(){Task.Run(() => Task1());Task.Run(() => Task2());Task.Run(() => Task3());Task.Run(() => Task4());Thread.Sleep(250);}public void Task1(){while (true){int milS = DateTime.Now.Millisecond;if (milS % 2 == 0){Info1 = DateTime.Now.ToString("hh:mm:ss ffff");ValueSlider1 = milS;}Thread.Sleep(1);}}public void Task2(){while (true){int milS = DateTime.Now.Millisecond;if (milS % 3 == 0){Info2 = DateTime.Now.ToString("hh:mm:ss ffff");ValueSlider2 = milS;}Thread.Sleep(1);}}public void Task3(){while (true){int milS = DateTime.Now.Millisecond;if (milS % 4 == 0){Info3 = DateTime.Now.ToString("hh:mm:ss ffff");ValueSlider3 = milS;}Thread.Sleep(1);}}public void Task4(){while (true){int milS = DateTime.Now.Millisecond;if (milS % 5 == 0){Info4 = DateTime.Now.ToString("hh:mm:ss ffff");ValueSlider4 = milS;}Thread.Sleep(1);}}protected void OnPropertyChanged([CallerMemberName] string name = null){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));}}}
Lalu kita juga buat kode lain dalam Bahasa XAML (Sebagai Front-end) agar dapat membuat Interface/Antarmuka tersebut Nama File MainWindow.xaml pada Folder Arkom\SchedulingSimulation\WpfApp1\WpfApp1.
<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp1"mc:Ignorable="d"Background="LightGreen"Title="MainWindow" Height="500" Width="500"><Grid><Grid.Resources ><Style TargetType="StackPanel" ><Setter Property="Margin" Value="40" /></Style><Style TargetType="TextBlock" ><Setter Property="FontSize" Value="25" /></Style></Grid.Resources><Grid.ColumnDefinitions><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition></RowDefinition><RowDefinition></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><StackPanel Grid.Row="0" Grid.Column="0"><TextBlock Text="{Binding Info1}"></TextBlock><Slider Value="{Binding ValueSlider1}" Maximum="1000" TickPlacement="BottomRight" TickFrequency="1000" /></StackPanel><StackPanel Grid.Row="0" Grid.Column="1"><TextBlock Text="{Binding Info2}"></TextBlock><Slider Value="{Binding ValueSlider2}" Maximum="1000" TickPlacement="BottomRight" TickFrequency="1000" /></StackPanel><StackPanel Grid.Row="1" Grid.Column="0"><TextBlock Text="{Binding Info3}"></TextBlock><Slider Value="{Binding ValueSlider3}" Maximum="1000" TickPlacement="BottomRight" TickFrequency="1000" /></StackPanel><StackPanel Grid.Row="1" Grid.Column="1"><TextBlock Text="{Binding Info4}"></TextBlock><Slider Value="{Binding ValueSlider4}" Maximum="1000" TickPlacement="BottomRight" TickFrequency="1000" /></StackPanel><StackPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2"><TextBlock Text="{Binding InfoAll}"></TextBlock></StackPanel></Grid></Window>
Kemudian kita jalankan program tersebut :
3. Multi-Parallel Scheduling Program
Pertama, kita buat terlebih dahulu programnya dalam Bahasa C# (Sebagai Back-end) dengan Nama File MainWindowViewModel.cs pada Folder Arkom\ParalelComputation\ParalelComputation\ParalelComputation.
using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Management;using System.Runtime.CompilerServices;using System.Text;using System.Threading;using System.Threading.Tasks;namespace ParalelComputation{public class MainWindowViewModel : INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;private IList<PerProcess> _PerProcesses = new List<PerProcess>();public IList<PerProcess> PerProcesses { get { return _PerProcesses; } set { _PerProcesses = value; OnPropertyChanged(); } }private string _infoAll = "Start";public string InfoAll { get { return _infoAll; } set { _infoAll = value; OnPropertyChanged(); } }public void Run(){int physicalProcessors;foreach (var item in new ManagementObjectSearcher("Select * from Win32_ComputerSystem").Get()){physicalProcessors = int.Parse(item["NumberOfProcessors"].ToString());}int coreCount = 0;foreach (var item in new ManagementObjectSearcher("Select * from Win32_Processor").Get()){coreCount += int.Parse(item["NumberOfCores"].ToString());}int logicalProcessors = Environment.ProcessorCount;IList<PerProcess> perProcesses = new List<PerProcess>();for (int i = 0; i < logicalProcessors; i++){PerProcess perProcess = new PerProcess(i);Task.Run(() => perProcess.Run());perProcesses.Add(perProcess);}PerProcesses = perProcesses;InfoAll = "Number of Thread: " + coreCount;}protected void OnPropertyChanged([CallerMemberName] string name = null){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));}}}
Kemudian kita buat juga programnya dalam Bahasa XAML (Sebagai Front-end) agar dapat membuat interface/antarmuka tersebut dengan Nama File MainWindow.xaml pada Folder Arkom\ParalelComputation\ParalelComputation\ParalelComputation.
<Window x:Class="ParalelComputation.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:ParalelComputation"mc:Ignorable="d"Background="LightGreen"Title="MainWindow" Height="500" Width="300"><Grid><Grid.Resources ><Style TargetType="StackPanel" ><Setter Property="Margin" Value="40" /></Style><Style TargetType="TextBlock" ><Setter Property="FontSize" Value="18" /></Style></Grid.Resources><Grid.ColumnDefinitions><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="3*"></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><ListView Background="LightGreen" ItemsSource="{Binding PerProcesses}"><ListView.ItemTemplate><DataTemplate><StackPanel Orientation="Vertical"><TextBlock Foreground="Blue" Text="{Binding Index}"></TextBlock><TextBlock Text="{Binding Info}"></TextBlock><Slider Value="{Binding ValueSlider}" Maximum="1000" TickPlacement="BottomRight" TickFrequency="1000" /></StackPanel></DataTemplate></ListView.ItemTemplate></ListView><StackPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"><TextBlock Text="{Binding InfoAll}"></TextBlock></StackPanel></Grid></Window>
Kemudian kita jalankan program tersebut dan inilah hasilnya :
Itulah Materi tentang Sinyal Clock dan Scheduling beserta dengan Algoritmanya. Semoga bermanfaat bagi Anak IT. Dan untuk File Source Code untuk Algoritma Penjadwalan dalam C#, silakan lihat dan download di sini.
Terima Kasih 😄😘👌👍 :)
Wassalamu‘alaikum wr. wb.






.png)

