Pengenalan RTOS (Real Time Operating System)

Rizky Ardi Maulana
DAGOZILLA ITB
Published in
5 min readAug 23, 2020

Pendahuluan

Setiap core pada prosesor di suatu komputer hanya dapat mengerjakan satu tugas komputasi dalam satu waktu. Komputer modern seperti laptop atau PC kalian telah memiliki lebih dari satu core pada prosesornya sehingga dari sisi hardware beberapa tugas komputasi dapat dikerjakan secara bersamaan. Lalu, bagaimana dengan mikrokontroler yang kebanyakan hanya memiliki satu core pada prosesornya? Apakah ada cara untuk membuat tugas-tugas komputasi di mikrokontroler dikerjakan secara bersamaan?

Ilusi Multitasking pada Komputer

Di sistem operasi pada umumnya, tugas-tugas komputasi terlihat seperti dikerjakan secara bersamaan atau yang biasa disebut multitasking. Pada kenyataannya, setiap core pada prosesor hanya dapat mengerjakan satu tugas komputasi dalam satu waktu. Ilusi multitasking ini dibuat oleh bagian dari sistem operasi bernama scheduler. Scheduler memecah tugas-tugas komputasi menjadi beberapa bagian, menjadwalkan eksekusi dari bagian-bagian itu berdasarkan suatu skala prioritas, lalu dieksekusi dengan peralihan antar bagian yang terjadi dengan sangat cepat sehingga tercipta ilusi multitasking.

Gambar 1. Contoh diagram waktu eksekusi tugas-tugas komputasi secara independen dan bergantian. (Sumber: FreeRTOS)

Pada Gambar 1, terdapat grafik eksekusi tiga tugas komputasi terhadap waktu. Pada kenyataannya, tugas-tugas komputasi tersebut dipecah menjadi beberapa bagian dan dikerjakan secara sekuensial. Namun, karena peralihan antar bagian terjadi dengan sangat cepat maka tercipta ilusi multitasking.

Multitasking pada Mikrokontroler

Umumnya mikrokontroler hanya memiliki satu core prosesor. Untuk bisa multitasking, diperlukan manipulasi pada pengerjaan tugas-tugas komputasinya. Sebelum masuk ke pembahasan tentang cara memanipulasinya, akan dijelaskan cara proses eksekusi konvensional sebuah program pada mikrokontroler.

Gambar 2. Contoh diagram alur program dengan ekseskusi sekuensial normal. (Sumber: Dokumentasi Pribadi)

Pada Gambar 2, dapat dilihat bahwa Function 2 dieksekusi setelah Function 1 dan Delay 1 dieksekusi. Ketika delay dieksekusi, sebenarnya prosesor mengalokasikan resource-nya untuk menghitung jumlah clock yang telah berlalu. Karenanya, prosesor tidak dapat mengerjakan hal lain selama delay dan hal ini merupakan pemborosan sumber daya komputasi. Untuk suatu program sederhana, eksekusi program seperti ini tidak akan menimbulkan masalah yang berarti, namun, hal ini akan menimbulkan masalah pada program yang kompleks.

Misalkan, suatu sistem menggunakan tiga macam sensor yang datanya diambil secara berkala. Ketiga sensor tersebut memiliki frekuensi sampling yang berbeda. Sistem harus memastikan ketepatan periode pengambilan data tiap sensor agar data yang diperoleh relevan. Selain itu, sistem juga perlu mengirimkan data ke komputer secara serial dan berkala.

Nah, apabila sistem tersebut diimplementasikan dengan skema eksekusi sekuensial yang normal seperti pada Gambar 2, akan sulit untuk menentukan delay dan urutan eksekusi yang tepat agar data yang didapatkan dari sensor selalu relevan. Sebagai contoh, apabila pengambilan data dari sensor 1 belum selesai dan pengambilan data dari sensor 2 harus dilakukan segera, maka prosesor harus menunggu pengambilan data dari sensor 1 selesai terlebih dahulu. Ini menyebabkan pengambilan data dari sensor 2 terhambat dan datanya menjadi tidak relevan.

Bagaimana jika kita mengerjakannya secara independen dan bergantian?

Ide sederhana dari RTOS adalah untuk mengerjakan tugas-tugas tersebut secara independen dan bergantian dengan penjadwalan yang teratur. RTOS akan membantu kita untuk menyelesaikan masalah penjadwalan eksekusi tugas dengan memanfaatkan kemampuan prosesor dengan seefisien mungkin. Dengan demikian, ilusi pengerjaan tugas secara paralel dalam sebuah mikrokontroler dapat tercipta.

Komponen dan Istilah-Istilah di RTOS :

Berikutnya kita perlu berkenalan dengan istilah-istilah yang kerap digunakan di RTOS :

  • Task — Serangkaian tugas yang ditangani oleh RTOS.
  • States — Tingkat keadaan task pada RTOS.
  • Priority — Tingkat prioritas suatu task untuk dieksekusi oleh CPU.

Pada bagian ini kita berkenalan dengan apa saja komponen utama pada RTOS.

  • Scheduler — bagian dari RTOS bertugas menentukan task yang harus dikerjakan dan jadwal pergantian task.
  • Symmetric Multiprocessing (SMP) — Jumlah task berbeda yang dapat di-handle oleh RTOS.
  • Function Library — Bagian dari RTOS yang digunakan untuk menghubungkan user dengan kernel hardware. Berisi fungsi-fungsi yang diimplementasikan untuk mengakses ke kernel.
  • Memory Management —Bagian dari RTOS yang bertugas mengatur kebutuhan memori pada penggunaan RTOS.

Kelebihan RTOS

Kelebihan dari RTOS adalah sebagai berikut:

  • Dapat menjalankan beberapa task/tugas secara independen.
  • Memungkinkan pengembangan task-task secara modular.

Kekurangan RTOS

RTOS memiliki kekurangan sebagai berikut:

  • Jumlah task yang dapat dibuat terbatas tergantung resource.
  • Membutuhkan resource lebih untuk implementasi RTOS.

Jenis-Jenis RTOS

Secara umum terdapat tiga jenis RTOS :

  • Hard Real Time : Deadline dari task-task harus dieksekusi dan diakhiri sesuai jadwal tanpa menolerir keterlambatan.
  • Firm Real Time : Keterlambatan eksekusi dapat ditolerir namun mengakibatkan penurunan kualitas.
  • Soft Real Time : Keterlambatan eksekusi dapat ditolerir dan tidak berakibat signifikan terhadap kualitas.

State dari Task yang Ada

Dari contoh pada Gambar 1 bisa dilihat ketiga task dieksekusi secara bergantian. Pertanyaannya adalah apa yang terjadi dengan task lainnya ketika sedang tidak dikerjakan? Pada bagian ini kita akan berkenalan dengan macam-macam states yang ada di RTOS.

Gambar 3. Diagram states task transition di RTOS. (Sumber: FreeRTOS)

Masing-masing library RTOS mungkin memiliki istilah tersendiri, namun umumnya merujuk pada hal yang sama. Pada tulisan ini kami merujuk pada istilah yang digunakan oleh FreeRTOS. Berikut merupakan berbagai macam state yang ada di RTOS:

  • Running — State di mana task sedang dieksekusi oleh CPU. Hanya boleh ada satu task pada state ini.
  • Ready — State di mana task siap untuk dieksekusi namun belum dieksekusi karena ada task dengan prioritas lebih tinggi yang sedang dieksekusi.
  • Blocked — State di mana task sedang menunggu untuk dipanggil ke ready state setelah selesai dieksekusi di running state. Task dapat berada di blocked state selama durasi tertentu atau hingga suatu external event terjadi. Suatu task dapat berada di blocked state apabila memanggil API Function Blocked. Ketika berada di blocked state, task tidak dapat langsung dipanggil ke running state melainkan harus berada di ready state terlebih dahulu.
  • Suspended — State di mana task tidak aktif. Suatu task dapat dipanggil ke suspended state dari state manapun dengan memanggil API Function Suspended. Untuk bisa aktif kembali, task harus dipanggil lagi dengan API Function Resume untuk masuk Ready state. Perbedaan mendasar antara suspended dan blocked adalah pada blocked state, task hanya tidak aktif untuk sementara waktu saja dan ada timeout-nya, sedangkan suspended task statusnya tidak aktif tanpa ada timeout.

Dengan ini kita telah berkenalan dengan RTOS. Pada bahasan berikutnya kita akan membahas bagaimana implementasi RTOS pada mikrokontroler Arduino dan STM32. Sampai jumpa di artikel berikutnya!

Referensi

--

--