Skip navigation


Salah satu hal yang bisa dilakukan pada modul kernel adalah membuat sebuah sistem yang sifatnya real time. Salah satu contohnya adalah pada tugas terakhir kuliah IF4097 Jaringan Komputer Lanjut. Pada tugas ini kita diminta untuk membuat sebuah modul kernel yang secara periodik mengecek availability sebuah node pada jaringan.

Timer ini dapat diimplementasikan dengan menggunakan struktur data timer_list. Struktur data ini dapat di lihat pada include/linux/timer.h

struct timer_list 
{ 
		struct timer_list *next; 
		struct timer_list *prev; 
		unsigned long expires; 
		unsigned long data; 
		void (*function)(unsigned long); 
}; 

Data expires adalah waktu di mana timer ini habis setelah sistem operasi diboot. Member function adalah fungsi yang dijalankan ketika timer expired. Dan data adalah data yang dipassing ke function.Contoh implementasinya

/* file contoh.c */
#include <linux/timer.h>
#include <linux/module.h>
#include <linux/jiffies.h>

struct timer_list my_timer;
int counter;

#define DELAY jiffies + HZ;

static void test_timer(unsigned long data)
{
 printk(KERN_INFO "Hello %d!\n", counter);
 counter++;
 setup_timer(&my_timer, test_timer, 0);
 my_timer.expires = DELAY;
 add_timer(&my_timer);
}

static void __init hello_init(void)
{
 printk(KERN_INFO "Timer On!\n");
 counter = 0;
 setup_timer(&my_timer, test_timer, 0);
 my_timer.expires = DELAY;
 add_timer(&my_timer);
}

static void __exit hello_exit(void)
{
 del_timer(&my_timer);
 printk(KERN_INFO "Timer Off!");
}

module_init(hello_init);
module_exit(hello_exit);

Kode di atas akan menghasilkan sebuah modul yang akan menuliskan “Hello”.

Pertama-tama kita harus melakukan inisialisasi timer_list dengan menggunakan fungsi setup_timer. Masukan dari fungsi ini adalah timer_list yang ingin diinisialisasi, fungsi yang akan dipanggil, dan data yang akan dipass. Setelah itu waktu expired dari timer_list perlu diset. Ada dua buah hal penting yang perlu diketahui yakni jiffies dan HZ. Jiffies adalah banyaknya detak yang dilakukan oleh tmer dari sistem mulai dari saat komputer boot. Nilai ini diincrement setiap kali terdapat timer interrupt. HZ adalah frekuensi detak dari timer tersebut. Pada intinya, jika HZ adalah n, maka setelah 1 detik setelah boot, jiffies akan bernilai n.

Setelah diinisialisasi timer_list my_timer didaftarkan dengan menggunakan fungsi add_timer. Variabel ini kemudian akan menunggu untuk dijalankan. Pada fungsi yang dijalankan kita kembali melakukan inisialisasi terhadap variabel my_timer dengan cara yang sama. Pada akhirnya saat module dibuang, timer akan dibuang juga karena ada perintah del_timer.

Untuk melihatnya

# make
# insmod contoh1.ko
# rmmod contoh1
#dmesg | tail -n 14
[ 5231.801742] Timer On!
[ 5235.436018] Hello 0!
[ 5235.635790] Hello 1!
[ 5235.836187] Hello 2!
[ 5236.035111] Hello 3!
[ 5236.234849] Hello 4!
[ 5236.434480] Hello 5!
[ 5236.634161] Hello 6!
[ 5236.833889] Hello 7!
[ 5237.033559] Hello 8!
[ 5237.233250] Hello 9!
[ 5237.433003] Hello 10!
[ 5237.632625] Hello 11!
[ 5237.832320] Hello 12!
[ 5237.984597] Timer Off!

5 Comments

  1. Busyett ni orang.. C banget…!!

  2. enggak segitunya sih
    saya juga sering pake Java dan bahasa-bahasa lain ^_^


  3. #include

    MODULE_LICENSE(“GPL v2”)

    don’t forget.. for cleanliness🙂

  4. linux/init.h

  5. ho oh😛
    substansial sih gak terlalu ngaruh
    tapi penting sih memang😀


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: