Jumat, 19 November 2010

Penjadwalan Proses Di Linux

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 LINUX

Penjadwalan Proses

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. Perintah at , sebagai contoh memberi peluang untuk menjalankan program berdasarkan waktu yang ditentukan. Perintah batch adalah semiliar dengan at, namun batch menjalankan program-program manakala sistem menemukan waktu untuk mereka.

Contoh perintah command “At”

1. Command “At”
Dengan menggunakan Perintah ini kita dapat melakukan penjadwalan pekerjaan kita pada waktu tertentu. Misalnya Pada jam 12.00 kita ingin melakukan ping ke alamat 192.168.0.1 maka commandnya adalah :
Pertama kita buat file di /home dengan nama coba (command untuk buatnya adalah ”#touch coba” tanpa tanda petik). File ini sebagai tempat kita menyimpan/melihat proses
Lalu selengkapnya seperti di bawah ini :
(root@Sigit home)#touch coba
(root@Sigit home)#at 12.00
at>ping 192.168.0.1 > /home/coba
at>ctrl-D (ket:Tekan Ctrl+D)
Maka jam 12.00 akan terjadi proses ping ke Ip 192.168.0.1 yang keterangan prosesnya ada di file /home/coba.

Perintah cron memungkinkan program untuk menjalankan secara pereodik, dan perintah crontab mengizinkan user untuk mengedit file-file yang digunakan oleh cron.

Contoh perintah command “crontab” :

2. Command “crontab”
Dengan menggunakan command ini kita dapat melakukan penjadwalan pekerjaan kita secara berulang-ulang.
Misalkan kita ingin melakukan ping ke alamat IP 192.168.0.1 setiap 5 menit sekali. Caranya seperti ini :
Pertama kita membuat file ping.sh
(root@sigit home)#vi ping.sh
Isi dari file ping.sh adalah:
#!/bin/sh
ping 192.168.0.1
Simpan file ini dengan cara tekan esc lalu ketikan “:wq!” (tanpa petik atas)
Kemudian kita edit crontabnya dengan cara :
(root@Sigit home)#crontab –e
lalu tambahkan sebagai berikut kedalam crontab:
0,5,10,15,20 * * * * sh /bin/ping.sh
Maka setiap lima menit computer anda akan melakukan ping ke IP 192.168.0.1

Perintah-perintah scheduling tersebut sangat berguna sat ingin melakukan pengaturan terhadap sistem agar tidak terlalu sibuk menjalankan tugas-tugas. Teknik ini juga sangat baik untuk eksekusi script-script bagi layanan-layanan exksternal seperti query-query database.
Perintah at
Seperti telah diuraikan diatas, untuk menjadwalkan satu atau beberapa perintah pada waktu yang ditentukan dapat digunakan at. Sebagai contoh, untuk membentuk pekerjaan pada jam 2:30 a.m yakni melakukan pencetakan semua file yang terdapat pada direktori /home/mahasiswa/dimas dan melakukan pengiriman mail pemberitahuan ke user yang bernama anjik bahwa pekerjaan pencetakan telah dilakukan pukul 2.30 a.m. Untuk menuliskan shcedule pekerjaan dengan at yakni dengan menulis perintah baris demi baris dan menekan enter untuk masing-masing perintah dan untuk mengakhiri dapat digunakan .
$ at 2.30
lp /home/mahasiswa/dimas/*
echo “File sudah dicetak Pak !” | mail –s “Pencetakan “ dihinamajikan@yahoo.com

Beberapa variasi penggunaan perintah at dapat dilakukan dengan :
At hh:mm : Penjadwalan kerja berdasarkan jam (hh) dan menit (mm),
menggunakan standard 24 jam
At hh:mm month
day year : Penjadwalan kerja berdasarkan jam (hh) dan menit (mm), bulan,
hari dan tahun tertentu
at –l : Mendaftar jadwal tugas-tugas, merupakan alias utk perintah atq.
At now +count
timeunit : Menjadwalkan pekerjaan sekarang plus hitungan berdasarkan
time-unit ; time unit dapat berupa menit, jam, hari atau minggu
at –d job_id : Membatalkan kerja dengan nomor job_id
Sebagai user root, dapat dengan bebas menjalankan perintah-perintah ini, sedangkan user lian, file-file /etc/at.allow dan /etc/at.deny menentukan permisi permisi menggunakan perintah tersebut. Jika file /etc/at.allow ada, maka hanya user-user yang tercantum dalam file tersebut yang diizinkan untuk menggunakan perintah at . Jika file /etc/at.allo tidak tersedia, sistem akan mengecek file /etc/at.deny yang akan memberikan izin penggunaannya, tapi kalau /etc/at.deny kosong, setiap user dapat menggunakan perintah at ini. Perintah batch
Dalam sistem Linux tidak hanya memiliki satu perintah untuk penjadwalan tugas-tugas. Dengan menggunakan perintah batch user dapat memberikan kelonggaran terhadap sistem untuk memutuskan sendiri kapan proses dijalankan.
Perintah batch akan dijalankan oleh sistem jika sistem dalam keadaan tidak begitu sibuk. Tugas-tugas yang dijalankan melalui batch akan dieksekusi melalui background. Format menjalankan perintah batch yaitu dengan mengetikkan perintah di terminal dan mengakhiri dengan pada akhir baris.

contoh :
$ batch
lp /home/mahasiswa/dimas/*
echo “File sudah dicetak Pak !” | mail –s “Pencetakan “ dihinamajikan@yahoo.com

Perintah cron dan crontab
Untuk menjalankan perintah atau proses yang harus dilakukan secara reguler, dapat menggunakan perintah cron (chronograph). Dengan cron dapat menentukan tanggal dan waktu yang diinginkan untuk menjalankan sebuah perintah dalam file-file crontab.
Program cron hanya dijalankan satu kali, yakni saat sistem di-boot. User-user individual hendaknya diberi izin untuk menjalankan cron secara langsung. Selain itu administrator juga menjalankan aplikasi cron pada start-up file Linux agar cron berjalan saat proses boot terjadi.
Perintah/Aplikasi yang dapat digunakan untuk menuliskan jadwal proses adalah crontab. Dalam file crontab ini konfigurasi penjadwalan proses tersimpan. File contab user disimpan dalam direktori /usr/spool/cron/crontabs dan memberi nama file tersebut dengan nama user. Sehingga jika usernya adalah icha, maka dapat digunakan file text editor untuk mengeditnya pada direktori tersebut.
$crontab icha
Dengan eksekusi perintah tersebut maka file /usr/spool/cron/crontabs/icha akan terbentuk.
Masing-masing baris dalam file crontab memuat sebuah pola waktu dan sebuah perintah. Di mana perintah tersebut akan dieksekusi pada pola waktu yang ditetapkan. Pola waktu dibagi dalam lima field yang dipisahkan oleh spasi atau tab.
Minute hour day-of-month month-of-year day-of-week command
Keterangan range waktu :
Minute : 00 s.d 59
Hour : 00 s.d 23 (tengah malam 00)
Day-of-month : 01 s.d 31
Month-of-year : 01 s.d 12
Day-of-week : 01 s.d 07 (Senin 01, Minggu 07)
Lima field pertama adalah field wa ktu, sedangkan satu field terkahir adalam field perintah. Dapat digunakan asterisk (*) dalam field waktu jika tidak ingin menentukan waktu – waktu tertentu.

Option perintah crontab terdiri dari :
-e : mengedit file contab
-r : menghapus isi file crontab
-l : Menampilkan daftar crontab

Mulai di versi 2.5, Kernel linux dapat berjalan di berbagai algoritma penjadwalan UNIX tradisional. Dua masalah dengan penjadwal UNIX tradisional adalah tidak disediakannya dukungan yang cukup untuk SMP (symmetric multiprocessor) sistem dan tidak diperhitungkan dengan baik jumlah tasks pada sistem yang berkembang. Dalam versi 2.5, penjadwal memeriksa dengan teliti hal tersebut, dan sekarang kernel juga menyajikan algoritma penjadwalan yang dapat run dalam waktu yang konstan tidak tergantung dari jumlah tasks dalam sistem. Penjadwal yang baru juga menyediakan peningkatan dukungan untuk SMP, termasuk processor affinity dan load balancing, sebaik dalam menyediakan keadilan dan dukungan terhadap interactive tasks.

Penjadwal linux adalah preemptive, algoritmanya berdasarkan prioritas dengan dua range prioritas yang terpisah: real-time range dari 0-99 dan nice value berkisar dari 100-140. Dua range ini dipetakan menjadi global priority scheme dimana nilai yang lebih rendah memiliki prioritas yang lebih tinggi. Tidak seperti penjadwal yang lain, Linux menetapkan prioritas yang lebih tinggi memiliki waktu kuantum yang lebih panjang dan prioritas yang lebih rendah memiliki waktu kuantum yang lebih pendek.

Linux mengimplementasikan real time scheduling seperti yang didefinisikan oleh POSIX 1.b: First Come First Served dan Round Robin. Sistem waktu nyata( real time)diberikan untuk task yang prioritasnya tetap. Sedangkan task yang lainnya memiliki prioritas yang dinamis berdasakan nice values ditambah atau dikurangi dengan 5. Interaktifitas sebuah task menentukan apakah nilai 5 tersebut akan ditambah atau dikurangi dari nice value. Task yang lebih interaktif mempunyai ciri khas memiliki sleep times yang lebih lama dan karena itu maka ditambah dengan -5, karena penjadwal lebih menyukaiinteractive task. Hasil dari pendekatan ini akan membuat prioritas untuk interactive task lebih tinggi. Sebaliknya, task dengan sleep time yang lebih pendek biasanya lebih CPU-bound jadi prioritasnya lebih rendah.

Hubungan antara prioritas dan waktu kuantum

Task yang berjalan memenuhi syarat untuk dieksekusi oleh CPU selama time slice-nya masih ada. Ketika sebuah task telah kehabisan time slice-nya, maka task tersebut akan expired dan tidak memenuhi syarat untuk dieksekusi lagi sampai semua task yang lain sudah habis waktu kuantumnya. Kernel mengatur daftar semua task yang berjalan di runqueue data structure. Karena dukungan Linux untuk SMP, setiap prossesor mengatur runqueue mereka sendiri dan penjadwalan yang bebas. Setiap runqueue terdiri dari dua array prioritas - active dan expired. Active array terdiri dari semua task yang mempunyai sisa waktu time slices, dan expired array terdiri dari task yang telah berakhir. Setiap array prioritas ini memiliki daftar task indexed berdasakan prioritasnya. Penjadwal memilih task dengan prioritas paling tinggi di active array untuk dieksekusi dalam CPU. Di mesin multiprossesor, ini berarti setiap prossesor menjadwalkan prioritas paling tinggi dalam runqueue structure masing-masing. Ketika semua tasktelah habis time slices-nya (dimana, active array-nya sudah kosong), dua array prioritas bertukar; expired array menjadi active array, dan sebaliknya.

Daftar task indexed berdasarkan prioritas

Penghitungan ulang dari task yang memiliki prioritas yang dinamis berlangsung ketika task telah menyelesaikan waktu kuantumnya dan akan dipindahkan ke expired array. Jadi, ketika ada dua larik ( array) ditukar, semua task di array aktif yang baru ditentukan prioritasnya yang baru dan disesuaikan juga time slices-nya.

Tidak ada komentar:

Poskan Komentar