Disusun Guna Memenuhi Tugas Mata Kuliah Real Time Operating System
Disusun Oleh :
Tengku Kemal Yusron H (21120116120002)
Rio Julian Azis Pratama (21120116120011)
Favo Perdana H.S (21120116120015)
Usman Ralih Muis (21120116120020)
Alfian Aulia Firdaus (21120116130035)
Abda Rafi Hamaminata (21120116140053)
Rio Kisna Eka Putra (21120116130060)
Keunggulan-keunggulan FreeRTOS:
Kecil dan sederhana
Penjadwalan (scheduler) bisa dikonfigurasi untuk operasi preemptive dan cooperative
Co-routine dalam FreeRTOS sangat sederhana dan memiliki stack untuk task ringan
yang terbatas
II. MIKROKERNEL
Kernel adalah komponen pusat (core) dalam suatu sistem operasi yang digunakan
sebagai jembatan penghubung antara aplikasi (di level user) dan data asli yang diproses di
level hardware. Sedangkan mikrokernel adalah software dengan jumlah hampir minimum
yang bisa menyediakan mekanisme yang dibutuhkan untuk mengimplementasikan suatu
sistem operasi. Mekanisme minimal dari sistem operasi adalah low-level address space
management, thread management, and inter-process communication (I.P.C). Selain itu,
microkernel juga mendukung device drivers, protocol stacks, file systems, dan user interface
code yang bisa berjalan di level user.
Untuk masalah kinerja, masih belum ada perbandingan yang komprehensif antara
microkernel dengan monolitik kernel (kernel pada umumnya). Bahkan sejumlah developer
multi-server komersial seperti real-time systems QNX and Integrity pun masih belum
melakukan perbandingan yang komprehensif. Kelebihan yang paling ditonjolkan
mikrokernel adalah sederhana, sehingga memudahkan pemula.
III.1. Task
III.1.1. Status Task
Task bisa ada di salah satu dari status berikut:
a) Running
Ketika suatu task dijalankan, ia dalam keadaan Running (jalan).
b) Ready
Ready task (task untuk siap/ready) adalah yang mampu mengeksekusi (tidak di-blok
atau di-suspend), tetapi tidak benar-benar mengeksekusi karena task berbeda dari
prioritas yang lebih tinggi atau yang sama sudah dalam keadaan Running.
c) Blocked
Suatu task dikatakan dalam keadaan di-blok (Blocked) apabila sedang menunggu
event sementara atau event luar. Contoh, jika suatu task bernama vTaskDelay() di-
blok (dibuat dalam keadaan Blocked) sampai periode delay sudah lewat / kadaluwarsa
(timeout).
d) Suspended
Task dalam keadaan Suspended tidak tampak pada penjadwalan (scheduling). Task
hanya akan masuk atau keluar dari keadaan suspended ketika diperintahkan secara
eksplisit untuk melewati vTaskSuspend() dan menjalankan xTaskResume(). Periode
‘timeout’ tidak dapat ditentukan.
Gambar 2. Hubungan Task State
III.1.2. Prioritas Task
Setiap task ditandai dengan prioritas dari 0 sampai (configMAX_PRIORITIES - 1).
configMAX_PRIORITIES didefinisikan di dalam FreeRTOSConfig.h dan bisa di-set pada
aplikasi melalui basis aplikasi. Semakin tinggi nilai yang diberikan ke
configMAX_PRIORITIES, semakin besar RAM dipakai oleh kernel FreeRTOS. Jumlah
prioritas yang rendah menandakan task dengan prioritas rendah. Tandanya dengan mengubah
nilai default idle priority ke nilai 0 (didefinisikan oleh tskIDLE_PRIORITY).
Penjadwalan (scheduler) akan memastikan bahwa task dalam keadaan ready atau
running dan akan selalu memberi nilai kondisi pada waktu prosesor (processor time) bahwa
task dengan prioritas yang lebih rendah akan diberi status ready. Dengan kata lain, task dengan
prioritas tertinggi yang diberikan pada waktu prosesor akan selalu dijalankan (running).
pdTASK_CODE didefinisikan sebagai fungsi yang mengembalikan void dan mengambil void
pointer sebagai parameter satu-satunya. Semua fungsi yang mengimplementasikan suatu task
harus bertipe seperti struktur di atas. Parameter digunakan untuk mengirim informasi dari
beberapa tipe task. Fungsi task harus tidak pernah kembali sehingga implementasinya pada
loop tak terbatas. Task dibuat dengan memanggil xTaskCreate() and deleted by calling
vTaskDelete().
Idle hook biasanya digunakan untuk membuat processor masuk ke dalam status mode power
saving.
Kesimpulan Task:
1. Sederhana.
2. Tidak ada pembatasan penggunaan.
3. Supports full preemption.
4. Sangat diprioritaskan.
5. Tiap task di-maintain sendiri sehingga memakan banyak RAM.
6. Re-entrancy harus hati-hati terutama jika menggunakan preemption.
III.2. Co-Routines
III.2.1. Status Co-Routine
Co-routine bisa ada di salah satu dari status berikut:
a) Running
Ketika co-routine sedang dieksekusi, ia berada dalam keadaan Running.
b) Ready
Ready co-routine(co-routine untuk siap) adalah yang bisa mengeksekusi (tidak di-blok
atau di-suspend), tetapi tidak benar-benar mengeksekusi. Suatu co-routine berada
dalam keadaan Ready karena:
Co-routine yang lain dengan prioritas sama atau lebih tinggi sudah berada
dalam keadaan Running, atau
Suatu task sudah dalam keadaan Running
c) Blocked
Suatu task dikatakan dalam keadaan di-blok (Blocked) apabila sedang menunggu
event sementara atau event luar. Contoh, jika suatu co-routine bernama crDELAY()
dipanggil, maka akan memblokir (dibuat dalam keadaan Blocked) sampai periode
delay lewat / kadaluwarsa (timeout), disebut sebagai event sementara. Co- routine
yang di-blok tidak tersedia untuk penjadwalan.
Gambar 3. Hubungan Co-Routine State
for( ;; )
{
-- Aplikasi kode Co-routine ditulis di sini. --
}
crEND();
}
Catatan penting:
Semua fungsi co-routine harus dimulai dengan panggilan ke crSTART().
Semua fungsi co-routine harus diakhiri dengan panggilan ke crEND().
Fungsi co-routine harus tidak kembali, diimplementasikan sebagai loop tak terbatas.
Beberapa co-routines bisa dibuat dari satu fungsi co-routine.
3.Scheduling Co-Routines
Co-routines dijadwalkan oleh pemanggilan berulang ke vCoRoutineSchedule().
Tempat terbaik untuk memanggil vCoRoutineSchedule() adalah dari idle task hook. Dengan
begini, jika aplikasinya hanya menggunakan co- routines sebagai idle task, maka akan tetap
dibuat secara otomatis ketika penjadwalan dimulai.
for( ;; )
{
// set c =
'b' c = 'b';
Konsekuensi lain dalam sharing stack adalah panggilan ke fungsi-fungsi API yang
bisa membuat co-routine mem-blok hanya bisa dibuat dari fungsi co-routine sendiri, bukan
dari fungsi yang dipanggil oleh co-routine. Contoh:
for( ;; )
{
// membuat blocking
call, crDELAY(
xHandle, 10 );
for( ;; )
{
// membuat blocking call di sini,
crDELAY( xHandle, 10 );
switch( aVariable )
{
case 1 : // Tidak bisa membuat blocking call!
break;
default:
}
}
Kesimpulan Co-routine:
1. Penggunaan stack di-share dalam penggunaan RAM yang jauh lebih kecil.
2. Operasi kerja sama (cooperative) mengurangi beban re-entrance.
3. Sangat portable untuk antar arsitektur.
4. Sangat relatif diprioritaskan (tergantung dengan co-routine yang lain), tapi bisa selalu
di-preempt dengan task jika sistemnyam menggunakan task dan co-routine.
5. Kurang stack.
6. Terbatas pada di mana panggilan API bisa dibuat.
7. Operasi kerja sama hanya antar co-routine saja.
IV. Multitasking
Sistem operasi seperti Linux memiliki kernel yang mengizinkan user untuk
mengakses ke komputer secara simultan. Banyak program (multiple programs) bisa
dieksekusi oleh banyak user (multiple users) secara real dan bersamaan. Setiap program yang
dieksekusi merupakan suatu task yang berada di bawah kendali sistem operasi. Jika sistem
operasi bisa mengeksekusi banyak task dalam cara seperti kernel pada linux disebut dengan
multitasking.
Prosesor konvensional hanya dapat mengeksekusi satu task dalam satu waktu, tapi
sistem operasi dengan multitasking bisa membuat terlihat seolah-olah tiap task dieksekusi
secara konkuren dengan cara pergantian cepat antar task. Untuk lebih mudahnya perhatikan
gambar berikut.
Gambar 4. Proses Sistem Konvensional (atas) dan Multitasking (bawah)
V. Scheduler
Penjadwalan (scheduler) adalah bagian dari kernel yang bertanggung jawab untuk
menentukan task yang mana yang harus dieksekusi dalam waktu tertentu. Kernel bisa men-
suspend dan kemudian me-resume suatu task beberapa kali selama task-nya masih hidup
(dalam jangka task lifetime).
Kebijakan penjadwalan (scheduling policy) adalah algoritma yang digunakan oleh
scheduler untuk menentukan task yang mana yang perlu dieksekusi dalam waktu yang
ditentukan. Kebijakan dari sistem multi user (non real time) akan mengizinkan setiap task
memperoleh bagian waktu prosesor (prosesor time) yang “fair / adil”
Selain itu, task juga bisa memilih untuk men-suspend dirinya sendiri, tanpa diminta
oleh kernel RTOS. Task akan menjalankan suspend sendiri apabila berada dalam kondisi di
mana ingin delay (sleep) dalam jangka waktu yang sudah ditentukan atau menunggu/wait
(block). Dalam kondisi menunggu supaya resource tersedia (contoh: serial port) atau
munculnya suatu event (misal user menekan tombol). Task yang di-blok tidak bisa
dieksekusi dan tidak dialokasikan waktu pemrosesannya.
Gambar 5. Suspending
Contoh paling dasar adalah sistem real time yang menggunakan keypad dan LCD.
User harus memperoleh feedback yang bisa dilihat pada LCD dari setiap tombol yang ditekan
dalam periode yang baik. Jika user tidak bisa melihat bahwa tombol yang ditekan sudah
diterima dalam periode waktu tersebut, maka software tersebut menjadi tidak nyaman untuk
digunakan. Kalau waktu terlama yang bisa ditolerir adalah 100ms, maka respon antara 0-
100ms masih bisa diterima. Fungsi ini bisa diimplementasikan sebagai task otomatis dengan
struktur:
for( ;; )
{
[Suspend, menunggu tombol ditekan]
[Memproses tombol yang ditekan]
}
}
Sekarang asumsikan sistem real time juga menguji kinerja fungsi kendali yang
inputnya dari filter digital. Inputnya harus berupa sampel, difilter, dan putaran kendali harus
dieksekusi setiap 2ms. Sampel yang sudah difilter untuk operasi yang benar harus akurat
sampai 0,5ms. Fungsi ini bisa diimplementasikan sebagai task otomatis dengan struktur: