Penjadwalan Processor Pada Sistem Operasi Linux
- Konsep Proses Pada Sistem Operasi
Sistem
operasi mengeksekusi berbagai jenis program. Pada sistem batch program tersebut biasanya
disebut dengan job, sedangkan pada sistem time sharing, program disebut dengan
program user atau task. Beberapa buku teks menggunakan istilah job atau proses. Proses adalah program yang
sedang dieksekusi. Eksekusi proses dilakukan secara berurutan. Dalam suatu proses terdapat
program counter, stack dan daerah data.
Penjadwalan
merupakan kumpulan kebijaksanaan dan mekanisme di sistem operasi yang berkaitan
dengan urutan kerja yang dilakukan sistem komputer. Proses penjadwalan yang
akan dibahas disini adalah proses penjadwalan sistem operasi Solaris dan
Linux. Tujuan utama penjadwalan proses optimasi kinerja menurut
kriteria tertentu, dimana kriteria untuk mengukur dan optimasi kerja
penjadwalan.
Pada
sistem Operasi, terdapat 3 tipe penjadwal berada secara bersama-sama pada
sistem operasi yang kompleks, yaitu:
a. Penjadwal
jangka pendek (short term
scheduller)
Bertugas
menjadwalkan alokasi pemroses diantara proses-proses ready di memori utama.
Penjadwalan ini dijalankan setiap terjadi pengalihan proses untuk memilih
proses berikutnya yang harus dijalankan.
b. Penjadwal
jangka menengah (medium term
scheduller)
Setelah
eksekusi selama suatu waktu, proses mungkin menunda sebuah eksekusi karena
membuat permintaan layanan masukan/keluaran atau memanggil suatu system call.
Proses-proses tertunda tidak dapat membuat suatu kemajuan menuju selesai sampai
kondisi-kondisi yang menyebabkan tertunda dihilangkan. Agar ruang memori dapat
bermanfaat, maka proses dipindah dari memori utama ke memori sekunder agar
tersedia ruang untuk proses-proses lain. Kapasitas memori utama terbatas untuk
sejumlah proses aktif. Aktivitas pemindahan proses yang tertunda dari memori
utama ke memori sekunder disebut swapping. Proses-proses mempunyai kepentingan
kecil saat itu sebagai proses yang tertunda. Tetapi, begitu kondisi yang
membuatnya tertunda hilang dan dimasukkan kembali ke memori utama dan ready.
c. Penjadwal
jangka panjang (long term
scheduller)
Penjadwalan
ini bekerja terhadap antrian batch dan memilih batch berikutnya yang harus
dieksekusi. Batch biasanya berupa proses-proses dengan penggunaan sumber daya
yang intensif (yaitu waktu pemroses, memori, masukan/keluaran), program-program
ini berprioritas rendah, digunakan sebagai pengisi (agar pemroses sibuk) selama
periode aktivitas job-job interaktif rendah.
Meskipun
tiap-tiap proses terdiri dari suatu kesatuan yang terpisah namun adakalanya
proses-proses tersebut butuh untuk saling berinteraksi. Satu proses bisa dibangkitkan
dari output proses lainnya sebagai input. Pada saat proses dieksekusi, akan
terjadi perubahan status. Status proses didefiniskan sebagai bagian dari
aktivitas proses yang sedang berlangsung saat itu. Gambar 3.1 dibawah,
ditunjukkan diagram status proses. Status proses terdiri dari :
a.
New, proses sedang dibuat.
b.
Running, proses sedang dieksekusi.
c.
Waiting, proses sedang menunggu beberapa event yang
akan terjadi (seperti menunggu untuk menyelesaikan I/O atau menerima sinyal).
d.
Ready, proses menunggu jatah waktu dari CPU untuk
diproses.
e.
Terminated, proses telah selesai dieksekusi
Masing-masing
proses direpresentasikan oleh Sistem Operasi dengan menggunakan Process
Control Block (PCB). Informasi yang
terdapat pada setiap proses meliputi :
a.
Status
Proses. New, ready, running, waiting dan terminated.
b.
Program
Counter. Menunjukkan
alamat berikutnya yang akan dieksekusi oleh proses tersebut.
c.
CPU
Registers. Register bervariasi
tipe dan jumlahnya tergantung arsitektur komputer yang bersangkutan. Register-register
tersebut terdiri-atas: accumulator, index register, stack pointer,
dan register serbaguna dan beberapa informasi tentang kode kondisi.
Selama Program Counter berjalan, status informasi harus disimpan pada
saat terjadi interrupt.
d.
Informasi
Penjadwalan CPU. Informasi tersebut berisi prioritas dari suatu proses, pointer
ke antrian penjadwalan, dan beberapa parameter penjadwalan yang lainnya.
e.
Informasi
Manajemen Memori. Informasi tersebut berisi nilai (basis) dan limit register,
page table, atau segment table tergantung pada sistem memory yang digunakan
oleh sistem operasi.
f. Informasi Accounting. Informasi
tersebut berisi jumlah CPU dan real time yang digunakan, time limits, account
numbers, jumlah job atau proses.
g.
Informasi
Status I/O. Informasi tersebut berisi deretan I/O device (seperti tape driver)
yang dialokasikan untuk proses tersebut, deretan file yang dibuka.
Algoritma penjadwalan CPU yang berbeda akan memiliki
perbedaan properti. Untuk memilih algoritma ini harus dipertimbangkan dulu
properti-properti algoritma tersebut. Ada beberapa kriteria yang digunakan
untuk melakukan pembandingan algoritma penjadwalan CPU, antara lain:
1. CPU utilization. Diharapkan agar CPU selalu dalam keadaan sibuk.
Utilitas CPU dinyatakan dalam bentuk prosen yaitu 0-100%. Namun dalam
kenyataannya hanya berkisar antara 40-90%.
2. Throughput. Adalah banyaknya proses yang selesai dikerjakan dalam
satu satuan waktu.
3. Turnaround time. Banyaknya waktu yang diperlukan untuk mengeksekusi
proses, dari mulai menunggu untuk meminta tempat di memori utama, menunggu di
ready queue, eksekusi oleh CPU, dan mengerjakan I/O.
4. Waiting time. Waktu yang diperlukan oleh suatu proses untuk
menunggu di ready queue. Waiting time ini tidak mempengaruhi eksekusi proses
dan penggunaan I/O.
5. Response time. Waktu yang dibutuhkan oleh suatu proses dari minta
dilayani hingga ada respon pertama yang menanggapi permintaan tersebut.
6. Fairness. Meyakinkan bahwa tiap-tiap proses akan mendapatkan
pembagian waktupenggunaan CPU secara terbuka (fair).
Dispatcher adalah suatu modul yang akan memberikan
kontrol pada CPU terhadap penyeleksian proses yang dilakukan selama short-term
scheduling. Fungsi-fungsi yang terkandung di dalamnya meliputi:
a. Switching context;
b. Switching ke user-mode;
c. Melompat ke lokasi tertentu pada user program untuk
memulai program. Waktu yang diperlukan oleh dispatcher untuk menghentikan suatu
proses dan memulai untuk menjalankan proses yang lainnya disebut dispatch
latency.
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
mengantri untuk dialokasikan ke CPU. Beberapa algoritma penjadwalan dijelaskan
sebagai berikut :
- 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 :
No
|
Process
|
Burst Time
|
1
|
P1
|
24
|
2
|
P2
|
3
|
3
|
P3
|
3
|
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 :
No
|
Process
|
Burst Time
|
1
|
P2
|
3
|
2
|
P3
|
3
|
3
|
P1
|
24
|
Maka Gant chart-nya dengan penjadwalan FCFS digambarkan sebagai
berikut :
Waktu tunggu untuk P1
adalah 6, P2 adalah 0 dan P3 adalah 3 sehingga rata-rata
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).
- 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.
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 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.
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.
Konsep
dasar dari algoritma ini adalah dengan menggunakan time-sharing. Pada dasarnya
algoritma ini sama dengan FCFS, hanya saja bersifat preemptive. Setiap proses
mendapatkan waktu CPU yang disebut 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 mengantri 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 :
No
|
Process
|
Burst Time
|
1
|
P2
|
24
|
2
|
P2
|
3
|
3
|
P3
|
3
|
Maka Gant chart-nya dapat digambarkan sebagai berikut :
P1
|
P2
|
P3
|
P1
|
P1
|
P1
|
P1
|
P1
|
|
|
|
|
|
|
|
|
|
|
0
|
4
|
7
|
10
|
14
|
18
|
22
|
26
|
30
|
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 seperti yang
terlihat pada Gambar 3.4.
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.
- Implementasi Pada Sistem
Operasi Linux
Pada sistem operasi Linux, untuk
melihat proses yang sedang terjadi, maka digunakan perintah ps. Apabila belum
tahu perintah ps itu digunakan untuk apa, maka kita bisa tanya ke library
menggunakan perintah man, kemudian diikuti nama perintahnya (#man ps), kemudian
tekan enter,
Sedangkan untuk menampilkan proses
tree atau memperoleh informasi tentang threads dan security info, dapat
dilakukan dengan melakukan scroll mouse ke arah bawah,
Pada
sistem operasi Linux Debian, untuk melihat proses yang terjadi dapat dilakukan
dengan mengetikkan perintah ps pada terminal Linux,
Pada sistem Linux, terdapat banyak
cara untuk menangani eksekusi-eksekusi perintah. Diantaranya, diberi kesempatan
untuk membuat daftar perintah dan menentukan kapan perintah dijalankan oleh
sistem. Misalnya perintah “at” digunakan untuk memberi peluang menjalankan
program berdasarkan waktu yang ditentukan.
Pada gambar di atas, langkah pertama
adalah membuat file pada direktory home/yamta/ dengan nama belajar_linux.
Perintah untuk membuatnya adalah :
#touch belajar_linux
File di atas sebagai tempat kita
menyimpan dan melihat proses. Dengan demilian, maka pada Wednesday December 11
2013 jam 13:00 akan terjadi proses ping ke IP 192.168.0.1, yang keterangan
prosesnya ada pada file /home/yamta/belajar_linux.
Untuk
melihat faktor/elemen lainnya , maka menggunakan perintah ps –u
Untuk
melihat faktor/elemen lainnya, gunakan option –u (user). %CPU adalah presentasi
CPU time yang digunakan oleh proses tersebut, %MEM adalah presentasi system
memori yang digunakan proses, SIZE adalah jumlah memori yang digunakan, RSS
(Real System Storage) adalah jumlah memori yang digunakan, START adalah kapan
proses tersebut diaktifkan. Sedangkan pada option -u yang disertai untuk
mencari proses yang spesifik pemakai. Proses diatas hanya terbatas pada proses
milik pemakai, dimana pemakai teresbut melakukan login.
Untuk
menampilkan proses Parent dan Child maka ketikkan perintah
Pada
gambar di atas terlihat hubungan proses parent dan child. Setelah mengetikkan
perintah ps -eH kemudian enter, maka proses child muncul dibawah proses parent
dan proses child ditandai dengan awalan beberapa spasi. Karena pada opsi e
disini untuk memilih semua proses dan opsi H menghasilkan tampilan proses
secara hierarki.
Dengan
mengetikkan perintah # ps –ef
Untuk menampilkan semua proses pada sistem dalam bentuk
hirarki parent/child, maka dilakukan dengan mengetikkan perintah
Percobaan
diatas menampilkan semua proses pada sistem dalam bentuk hirarki parent/child.
Proses parent di sebelah kiri proses child. Sebagai contoh proses init sebagai
parent (ancestor) dari semua proses pada sistem. Beberapa child dari init
mempunyai child. Proses login mempunyai proses bash sebagai child. Proses bash
mempunyai proses child startx. Proses startx mempunyai child xinit dan seterusnya.
Untuk
melihat semua PID, maka dilakukan dengan mengetikkan perintah # pstree -p
Untuk
melihat semua PID untuk proses gunakan opsi –p. Jadi , menampilakn semua proses
pada sistem dalam bentuk hirarki parent/child. Disini memberitahukan proses
yang sedang berjalan bahwa ada sesuatu yang harus dikendalikan. Dan berdasarkan
sinyal yang dikirim ini maka dapat bereaksi dan administrator dapat menentukan
reaksi tersebut.
Untuk
menampilkan proses dan ancestor, maka dilakukan dengan mengetikkan perintah #
pstree –h,
Untuk
menampilkan semua proses (PID, TTY, TIME dan CMD), dilakukan dengan mengetikkan
perintah $ ps ax | more. Opsi a akan menampilkan semua
proses yang dihasilkan terminal (TTY). Opsi x menampilkan semua proses yang
tidak dihasilkan terminal. Secara logika opsi ini sama dengan opsi –e. Terdapa
5 kolom : PID, TTY, STAT, TIME dan COMMAND.
Untuk
menampilkan semua proses dalam format daftar penuh, meka perintahnya adalah # ps
ef | more,
Opsi
–e f akan menampilkan semua proses dalam format daftar penuh. Jika halaman
penuh terlihat prompt –More– di bagian bawah screen, tekan q untuk kembali ke
prompt perintah.