Saturday, December 20, 2008

Akses hardware IRQ & DMA) di Linux dari user space...

Written in Bahasa...

Itu pertanyaan yang ditanyakan teman saya ketika sedang memprogram Counter Timer (Intel 8254) untuk perangkat embedded kami. Dia menggunakan DOS versi Windows 98. DOS adalah OS yang bukan multi-tasking, artinya hanya ada satu proses yang dapat ditangani oleh CPU dalam setiap waktu, tidak ada proteksi dengan akses memory, program yang sedang berjalan memegang kendali semua resource sistem dan dapat mengakses memori sistem dari mana saja. Karena pada dasarnya Linux adalah sistem yang multi-tasking, akses langsung dari hardware secara fisik tidak diperbolehkan. Karena fitur multi-tasking tersebut, bagaimana jika proses (program) lain sedang menulis pada sebuah port yang pada saat bersamaan (concurrently) sedang di akses juga oleh proses lainnya?. Low level memori hardware di proteksi oleh Kernel, proses harus menginstruksikan Kernel untuk mengakses, dengan system call.

Bagaimana dengan Real Time I/O (Input/Output)? Sekali lagi karena multi-tasking Linux, proses ini juga tidak secara langsung akan dikerjakan oleh Kernel, kernel harus menjaga performa kesuluruhan sistem dan tidak menitik beratkan hanya pada satu proses. Seperti OS moderen lainnya, Linux mengimplementasi ini dengan membuat antrian proses atau Process Scheduler dan IO Scheduler untuk operasi I/O. Dalam Kernel standar Linux, selalu ada jeda untuk suatu proses atau operasi I/O, teori untuk operasi I/O port selalu lebih dari 10 ms (micro seconds). Jadi jika teman saya ingin membuat program timer itu di Linux dan sangat membutuhkan presisi waktu (Real Time) mungkin dia harus menggunakan kernel yang didesain untuk pekerjaan-pekerjaan real time yaitu modifikasi proses scheduler Linux untuk mencapai target waktu tertentu. I'm being lazy to answer all of this everytime ;)