Real-Time Operating System (RTOS) Vs. General Purpose OS (GPOS)
Can Linux provide real-time guarantees?
Commercial RTOSs
RTLinux Vs. Linux: Architectural comparison
RTLinux Vs. Linux: Code perspective
Get the RTLinux setup ready
Things to Issue and Handling the hard disk
Lab #1: Detailed discussion
2. J.SUDARSHANREDDY
Contents
• Real-Time Operating System (RTOS) Vs. General Purpose OS
(GPOS)
• Can Linux provide real-time guarantees?
• Commercial RTOSs
• RTLinux Vs. Linux: Architectural comparison
• RTLinux Vs. Linux: Code perspective
• Get the RTLinux setup ready
• Things to Issue and Handling the hard disk
• Lab #1: Detailed discussion
01/25/15
3. J.SUDARSHANREDDY
RTOS Vs. GPOS
• RTOS
– needs deterministic timing behavior
– Works under worst case assumptions
• GPOS
– high throughput and fairness
– Optimizes for the average case
• Hence, the design objectives of the OSs are different
01/25/15
4. J.SUDARSHANREDDY
Can Linux provide real-time guarantees?
-- No!!
• Linux
– non-preemptible kernel
• A system call might take long time to complete
– Coarse timer resolution
• Tasks can be released only with 10ms precision
– Virtual memory
• Introduces unpredictable amount of delays
– Variable priority
• Each task is assigned a priority which varies over the time;
this is to achieve fairness
01/25/15
5. J.SUDARSHANREDDY
Can Linux provide real-time guarantees?
-- No!! (contd..)
• Linux
– Linux will batch several operations for efficient use of H/W delaying
all tasks
– Linux also reorders requests from multiple processes for H/W
efficiency
– Linux does not preempt low priority task in a system call, instead
queues the high priority task
– Linux makes high priority tasks to wait for low priority tasks to release
resources
Therefore, Linux cannot provide real-time guarantees
01/25/15
7. J.SUDARSHANREDDY
• Open source Linux project
• Supports x86, PowerPC, Alpha
• Available as a patch to the regular Linux kernel
• Provides an RT API for developers
• Runs Linux kernel as lowest priority process
RTLinux: Overview
01/25/15
10. J.SUDARSHANREDDY
Linux Kernel: code perspective
Linux Monolithic kernel core
M1
M2
M3
M4
KernelLoadableModules
RAM DISK
Module M2 service
(system call)
User
Process
M2
THE
controller
01/25/15
12. J.SUDARSHANREDDY
Getting RTLinux ready
• Configure and compile a fresh Linux kernel (2.4.29)
– Download the kernel from
http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4
• Patch the RTLinux to the Linux kernel
• Recompile the kernel and reboot the system into the
new kernel
• Configure the RTLinux kernel and compile it
01/25/15
13. J.SUDARSHANREDDY
So, How do we run a RT-application program ?
• Step 1: Write the RT-application program as a kernel
module
– (You are still in Linux)
• Step 2: Compile the module and check for errors
– (You are still in Linux)
• Step 3: Load the RT-Core (or RT Scheduler, etc..) and
the RT-application program module
– (After this we will be in RTLinux)
• Step 4: Now you are in RTLinux!!!!
01/25/15
14. J.SUDARSHANREDDY
Homework
• Submission 1:
– Give a ten line write-up comparing RTLinux with
Linux with at least five differences along with the
references.
• Submission 2:
– Give a ten line write-up comparing RTLinux with
two other commercial RTOSs with at least five
differences for each of them along with the
references.
01/25/15
15. J.SUDARSHANREDDY
Lab Policies
• Six assignments in total
• First three assignments are mandatory
• One of the last three assignments is
mandatory
• You will be working with a removable
hard disk which can be issued from CSG
01/25/15
16. J.SUDARSHANREDDY
Things to Issue
• Issue the following from the CSG
– Hard disk (one per group)
– Key (one per group)
– RHEL – WS3 installation DVD (one per group)
• You need to download the lab01 tar file
(lab01.tgz) from the course website.
• The RTLinux lab is in Coover - 1331C
01/25/15
17. J.SUDARSHANREDDY
Handling the hard disk (1)
• Shutdown the PC
• After the power is off, unlock the existing hard
disk and take it out
• Insert the hard disk given to you and lock it
• Restart the comp
• Follow the manual you have downloaded from
the course website
01/25/15
18. J.SUDARSHANREDDY
Handling the hard disk (2)
• After you are done with the lab:
– Shutdown the PC
– After the power is off, unlock the hard disk
and remove it
– Insert the original hard disk and lock it
– Leave the Lab
01/25/15
20. J.SUDARSHANREDDY
Part 1
• Install the RHEL-WS3 using the DVD given to you
– Go for the auto-partitioning option
– Rest everything is straightforward
• Configure and compile fresh Linux kernel (2.4.29)
• Patch the RTLinux to the Linux kernel
• Recompile the kernel and reboot the system into the
new kernel
• Load RT-modules
• Instructions are provided in the Lab manual
01/25/15
21. J.SUDARSHANREDDY
Part 2
• Boot into the RTLinux kernel compiled in part-1
• The objectives of the part 2 are:
– Understanding a simple RTLinux kernel module
• With one thread (hello-1) and two threads (hello-2)
– Printing from a RTLinux module
• rtl_printf (hello-3)
• Using rtf_put (RT-FIFO) (hello-4)
01/25/15
22. J.SUDARSHANREDDY
A kernel module Vs. Program
• All RT-Tasks are kernel modules. Therefore, we write kernel
modules in this lab.
• A user program runs in user space and the kernel module runs in
the kernel space
• A user program starts running at its “main” function
• A kernel module starts running at the “init_module” function and
exits via “cleanup_module” function
• Therefore, for a kernel module “init_module” and
‘cleanup_module” are as necessary as “main” is
necessary for a C program
01/25/15
23. J.SUDARSHANREDDY
A typical kernel module
Init_module()
{
…….
Perform your module initiation stuff etc..
}
Cleanup_module()
{
…….
Perform cleanup stuff like destroying the threads, freeing
memory, etc..
}
01/25/15
24. J.SUDARSHANREDDY
Hello world Module
• Go through the hello world module
• Realize the importance of init_module and
cleanup_module
• Notice the way the thread is created and how
it is made periodic
• Understand the “pthread_make_periodic” and
“pthread_wait” and other interfacing functions
01/25/15
25. J.SUDARSHANREDDY
A typical RTLinux module
Init_module() {
For each thread:
Choose the priority function
//pthread_set_priority(..);
Assign the “task_function” to
the thread
Create the thread
//pthread_create(..,
task_function,..); }
Task_function()
{
Pthread_make_periodic_np(
p);
while(1)
{
Pthread_wait_np();
//perform the task function
//for this instance
}
}
Cleanup_module()
{
…….
Delete the thread
//pthread_delete_np(..);
}
This function tells
the scheduler that
I am a periodic
task with period
“p”
This function tells
the scheduler that
I am done for this
instance and
schedule me after
“p” units of time
01/25/15
26. J.SUDARSHANREDDY
Hello World 2
• This module creates two threads using a nice
“thread_struct” structure to make the
initialization easy and compact.
• Once again go through the interfacing
funcitons
• This time put more “rtl_printf” statements and
open “/var/log/messages” file to find your
output
01/25/15
27. J.SUDARSHANREDDY
RTL_PRINTF: how does it work?
Rtl_printf printk
Printk buffer
Kernel ring
buffer
syslodgconsole
Might overflow!!
Might overflow!!
Log file
01/25/15
28. J.SUDARSHANREDDY
Other ways of printing: RTL-FIFO
• RTLinux FIFO provides communication
mechanisms between RTL threads and
Linux task.
• A linux process creates the RTL-FIFO
buffer which the RTL threads access
and write and read from them
01/25/15
29. J.SUDARSHANREDDY
RTL-FIFO
• Creating and destroying FIFOS:
– Using functions: rtf_create and rtf_destroy
– These functions are called from linux
process: open(), read(), write();
• Accessing FIFOs from RTL threads
– using functions: rtf_put and rtf_get
01/25/15
31. J.SUDARSHANREDDY
Submissions
• Submission 1:
– Submit a five line write-up explaining the working of
the two RTL interfacing functions including:
• Pthread_make_periodic_np
• Pthread_wait_np
• Rtf_create,rtf_destroy, rtf_put, rtf_get
• Submission 2:
– Submit a five line write-up giving at least five
differences between a kernel module and a user
program.
01/25/15