Esd 4
Esd 4
Esd 4
Kernel acts as the abstraction layer between system resources and user
applications
For a general purpose OS, the kernel contains different services like
Process Management
Protection
Time management
Interrupt Handling
The memory space at which the kernel code is located is known as ‘Kernel
Space’
All user applications are loaded to a specific area of primary memory and
this memory area is referred as ‘User Space’
The partitioning of memory into kernel and user space is purely Operating
System dependent
Most of the operating systems keep the kernel application code in main
memory and it is not swapped out into the secondary memory
Monolithic Kernel:
All kernel modules run within the same memory space under a single kernel
thread
The tight internal integration of kernel modules in monolithic kernel
architecture allows the effective
utilization of the low-level features of
the underlying system Applications
The major drawback of monolithic
kernel is that any error or failure in
any one of the kernel modules leads to
the crashing of the entire kernel
Monolithic kernel with all
application operating system services
running in kernel space
LINUX, SOLARIS, MS-DOS kernels
are examples of monolithic kernel
Figure 2: The Monolithic Kernel Model
Microkernel
abstraction.
The kernel is more generalized and contains all the required services to
execute generic applications
May inject random delays into application software and thus cause slow
responsiveness of an application at unexpected times
b) Task/Process scheduling
c) Task/Process synchronization
d) Error/Exception handling
e) Memory Management
f) Interrupt handling
g) Time management
Task State: The current state of the task. (E.g. State= ‘Ready’ for a task
which is ready to execute)
Task Type: Task type. Indicates what is the type for this task. The task can
be a hard real time or soft real time or background task.
Task Priority: Task priority (E.g. Task priority =1 for task with priority = 1)
Task Pointers: Pointers to other TCBs (TCBs for preceding, next and
waiting tasks)
The parameters and implementation of the TCB is kernel dependent. The TCB
parameters vary across different kernels, based on the task management
implementation
The memory allocation time increases depending on the size of the block
of memory needs to be allocated and the state of the allocated memory
block (initialized memory block consumes more allocation time than un-
initialized memory block)
Since predictable timing and deterministic behavior are the primary focus
for an RTOS, RTOS achieves this by compromising the effectiveness of
memory allocation
RTOS kernel uses blocks of fixed size of dynamic memory and the block
is allocated for a task on a need basis. The blocks are stored in a ‘Free
buffer Queue’.
Most of the RTOS kernels allow tasks to access any of the memory
blocks without any memory protection to achieve predictable timing and
avoid the timing overheads
RTOS kernels assume that the whole design is proven correct and
protection is unnecessary. Some commercial RTOS kernels allow
memory protection as optional and the kernel enters a fail-safe mode
when an illegal memory access occurs
Interrupt Handling:
Interrupts which occurs in sync with the currently executing task is known
as Synchronous interrupts. Usually the software interrupts fall under the
Synchronous Interrupt category. Divide by zero, memory segmentation
error etc are examples of Synchronous interrupts.
For synchronous interrupts, the interrupt handler runs in the same context
of the interrupting task.
Priority levels can be assigned to the interrupts and each interrupts can be
enabled or disabled individually.
Time Management:
The ‘Timer tick’ is taken as the timing reference by the kernel. The
‘Timer tick’ interval may vary depending on the hardware timer. Usually
the ‘Timer tick’ varies in the microseconds range
The time parameters for tasks are expressed as the multiples of the
‘Timer tick’
If the System time register is 32 bits wide and the ‘Timer tick’ interval is
1microsecond, the System time register will reset in
232 * 10-6/ (24 * 60 * 60) = 49700 Days =~ 0.0497 Days = 1.19 Hours
If the ‘Timer tick’ interval is 1 millisecond, the System time register will
reset in
The ‘Timer tick’ interrupt is handled by the ‘Timer Interrupt’ handler of kernel.
The ‘Timer tick’ interrupt can be utilized for implementing the following
actions.
Increment the System time register by one. Generate timing error and reset
the System time register if the timer tick count is greater than the maximum
range available for System time register
Invoke the scheduler and schedule the tasks again based on the scheduling
algorithm
Delete all the terminated tasks and their associated data structures (TCBs)
Load the context for the first task in the ready queue. Due to the re-
scheduling, the ready task might be changed to a new one from the task,
which was pre-empted by the ‘Timer Interrupt’ task
Hard Real-time System:
A Hard Real Time system must meet the deadlines for a task without any
slippage
Missing any deadline may produce catastrophic results for Hard Real
Time Systems, including permanent data lose and irrecoverable damages
to the system/users
Air bag control systems and Anti-lock Brake Systems (ABS) of vehicles
are typical examples of Hard Real Time Systems
As a rule of thumb, Hard Real Time Systems does not implement the
virtual memory model for handling the memory. This eliminates the
delay in swapping in and out the code corresponding to the task to and
from the primary memory
The presence of Human in the loop (HITL) for tasks introduces un-
expected delays in the task execution. Most of the Hard Real Time
Systems are automatic and does not contain a ‘human in the loop’
Real Time Operating Systems that does not guarantee meeting deadlines,
but, offer the best effort to meet the deadline
Soft Real Time systems most often have a ‘human in the loop (HITL)’
Automatic Teller Machine (ATM) is a typical example of Soft Real Time
System. If the ATM takes a few seconds more than the ideal operation
time, nothing fatal happens.
An audio video play back system is another example of Soft Real Time
system. No potential damage arises if a sample comes late by fraction of a
second, for play back.
When the process gets its turn, its registers and Program counter register
becomes mapped to the physical registers of the CPU
Code Memory
Fig: 5 Memory organization of a Process
On loading a process into the main memory, a specific area of memory is
allocated for the process
The stack memory usually starts at the highest memory address from the
memory area allocated for the process (Depending on the OS kernel
implementation)
The process traverses through a series of states during its transition from the
newly created state to the terminated state
The cycle through which a process changes its state from ‘newly created’ to
‘execution completed’ is known as ‘Process Life Cycle’. The various states
through which a process traverses through during a Process Life Cycle
indicates the current status of the process with respect to time and also
provides information on what it is allowed to do next
Ready State: The state, where a process is incepted into the memory and
awaiting the processor time for execution, is known as ‘Ready State’. At
this stage, the process is placed in the ‘Ready list’ queue maintained by the
OS
Scheduled for
Interrupted or
blocked state might have invoked by
Preempted
Execution
Blocked
various conditions like- the process
enters a wait state for an event to
occur (E.g. Waiting for user inputs Running
such as keyboard input) or waiting
for getting access to a shared Execution Completion
Threads
0, &dwThreadID);
//Create child
thread 2
threads of the process that do not require the event, which the other thread is
waiting, for processing. This speeds up the execution of the process.
Thread Process
Thread is a single unit of execution and is part Process is a program in execution and contains
of process. one or more threads.
A thread does not have its own data memory Process has its own code memory, data memory
and heap memory. It shares the data memory and stack memory.
and heap memory with other threads of the
same process.
A thread cannot live independently; it lives A process contains at least one thread.
within the process.
There can be multiple threads in a process. Threads within a process share the code, data
The first thread (main thread) calls the main and heap memory. Each thread holds separate
function and occupies the start of the stack memory area for stack (shares the total stack
memory of the process. memory of the process).
Threads are very inexpensive to create Processes are very expensive to create. Involves
many OS overhead.
Context switching is inexpensive and fast Context switching is complex and involves lot of
OS overhead and is comparatively slower.
If a thread expires, its stack is reclaimed by the If a process dies, the resources allocated to it are
process. reclaimed by the OS and all the associated
threads of the process also dies.
Advantages of Threads:
1. Better memory utilization: Multiple threads of the same process share the
address space for data memory. This also reduces the complexity of inter
thread communication since variables can be shared across the threads.
Processes
Types of Multitasking:
‘Context Switching’
3. Reload Context for Process 2 from PCB1
Task Scheduling:
In a multitasking system, there should be some mechanism in place to share
the CPU among the different tasks and to decide which process/task is to be
executed at a given point of time
Process 1
Scheduler
Job Queue
Admitted Process 1
Move Process to ‘Device Queue ’
Process
Run Process
to Completion
Process n
to ‘Ready’ queue
Ready Queue Process
Resource Request
Device
Manager
Process
Process 1
Process 2
Allocates CPU time to the processes based on the order in which they enters
the ‘Ready’ queue
The first entered process is serviced first
It is same as any real world application where queue systems are used; E.g.
Ticketing
Drawbacks:
Favors monopoly of process. A process, which does not contain any I/O
operation, continues its execution until it finishes its task
In general, FCFS favors CPU bound processes and I/O bound processes may
have to wait until the completion of CPU bound process, if the currently
executing process is a CPU bound process. This leads to poor device
utilization.
The average waiting time is not minimal for FCFS scheduling algorithm
EXAMPLE: Three processes with process IDs P1, P2, P3 with estimated
completion time 10, 5, 7 milliseconds respectively enters the ready queue together
in the order P1, P2, P3. Calculate the waiting time and Turn Around Time (TAT)
for each process and the Average waiting time and Turn Around Time (Assuming
there is no I/O waiting for the processes).
P1 P2 P3
0 10 15 22
10 5 7
Assuming the CPU is readily available at the time of arrival of P1, P1 starts
executing without any waiting in the ‘Ready’ queue. Hence the waiting time for P1
is zero.
Waiting Time for P3 = 15 ms (P3 starts executing after completing P1 and P2)
Average waiting time = (Waiting time for all processes) / No. of Processes
Average Turn Around Time= (Turn Around Time for all processes) / No. of
Processes
= (10+15+22)/3 = 47/3
= 15.66 milliseconds
Allocates CPU time to the processes based on the order in which they are
entered in the ‘Ready’ queue
Drawbacks:
Favors monopoly of process. A process, which does not contain any I/O
operation, continues its execution until it finishes its task
In general, LCFS favors CPU bound processes and I/O bound processes may
have to wait until the completion of CPU bound process, if the currently
executing process is a CPU bound process. This leads to poor device
utilization.
The average waiting time is not minimal for LCFS scheduling algorithm
EXAMPLE: Three processes with process IDs P1, P2, P3 with estimated
completion time 10, 5, 7 milliseconds respectively enters the ready queue together
in the order P1, P2, P3 (Assume only P1 is present in the ‘Ready’ queue when the
scheduler picks up it and P2, P3 entered ‘Ready’ queue after that). Now a new
process P4 with estimated completion time 6ms enters the ‘Ready’ queue after 5ms
of scheduling P1. Calculate the waiting time and Turn Around Time (TAT) for
each process and the Average waiting time and Turn Around Time (Assuming
there is no I/O waiting for the processes).Assume all the processes contain only
CPU operation and no I/O operations are involved.
Solution: Initially there is only P1 available in the Ready queue and the scheduling
sequence will be P1, P3, P2. P4 enters the queue during the execution of P1 and
becomes the last process entered the ‘Ready’ queue. Now the order of execution
changes to P1, P4, P3, and P2 as given below.
P1 P4 P3 P2
0 10 16 23 28
10 6 7 5
Waiting Time for P4 = 5 ms (P4 starts executing after completing P1. But P4
arrived after 5ms of execution of P1. Hence its waiting time = Execution start time
– Arrival Time = 10-5 = 5)
Waiting Time for P3 = 16 ms (P3 starts executing after completing P1 and P4)
Waiting Time for P2 = 23 ms (P2 starts executing after completing P1, P4 and P3)
Average waiting time = (Waiting time for all processes) / No. of Processes
= (Waiting time for (P1+P4+P3+P2)) / 4
= (0 + 5 + 16 + 23)/4 = 44/4
= 11 milliseconds
Turn Around Time (TAT) for P1 = 10 ms (Time spent in Ready Queue + Execution Time)
Turn Around Time (TAT) for P3 = 23 ms (Time spent in Ready Queue + Execution Time)
Turn Around Time (TAT) for P2 = 28 ms (Time spent in Ready Queue + Execution Time)
Average Turn Around Time = (Turn Around Time for all processes) / No. of Processes
= (Turn Around Time for (P1+P4+P3+P2)) / 4
= (10+11+23+28)/4 = 72/4
= 18 milliseconds
Non-preemptive scheduling – Shortest Job First (SJF) Scheduling.
Allocates CPU time to the processes based on the execution completion time
for tasks
The average waiting time for a given set of processes is minimal in SJF
scheduling
Drawbacks:
A process whose estimated execution completion time is high may not get a
chance to execute if more and more processes with least estimated execution
time enters the ‘Ready’ queue before the process with longest estimated
execution time starts its execution
Difficult to know in advance the next shortest process in the ‘Ready’ queue
for scheduling since new processes with different estimated execution time
keep entering the ‘Ready’ queue at any point of time.
The non-preemptive priority based scheduler sorts the ‘Ready’ queue based
on the priority and picks the process with the highest level of priority for
execution
EXAMPLE: Three processes with process IDs P1, P2, P3 with estimated
completion time 10, 5, 7 milliseconds and priorities 0, 3, 2 (0- highest priority, 3
lowest priority) respectively enters the ready queue together. Calculate the waiting
time and Turn Around Time (TAT) for each process and the Average waiting time
and Turn Around Time (Assuming there is no I/O waiting for the processes) in
priority based scheduling algorithm.
Solution: The scheduler sorts the ‘Ready’ queue based on the priority and
schedules the process with the highest priority (P1 with priority number 0) first and
the next high priority process (P3 with priority number 2) as second and so on. The
order in which the processes are scheduled for execution is represented as
P1 P3 P2
0 10 17 22
10 7 5
Waiting Time for P2 = 17 ms (P2 starts executing after completing P1 and P3)
Average waiting time = (Waiting time for all processes) / No. of Processes
= 9 milliseconds
Turn Around Time (TAT) for P1 = 10 ms ( Time spent in Ready Queue + Execution Time)
Average Turn Around Time= (Turn Around Time for all processes) / No. of Processes
= (10+17+22)/3 = 49/3
= 16.33 milliseconds
Drawbacks:
Every task in the ‘Ready’ queue gets a chance to execute. When and how
often each process gets a chance to execute (gets the CPU time) is dependent
on the type of preemptive scheduling algorithm used for scheduling the
processes
When to pre-empt a task and which task is to be picked up from the ‘Ready’
queue for execution after preempting the current task is purely dependent on
the scheduling algorithm
The non preemptive SJF scheduling algorithm sorts the ‘Ready’ queue only
after the current process completes execution or enters wait state, whereas
the preemptive SJF scheduling algorithm sorts the ‘Ready’ queue when a
new process enters the ‘Ready’ queue and checks whether the execution
time of the new process is shorter than the remaining of the total estimated
execution time of the currently executing process
If the execution time of the new process is less, the currently executing
process is preempted and the new process is scheduled for execution
Always compares the execution completion time (ie the remaining execution
time for the new process) of a new process entered the ‘Ready’ queue with
the remaining time for completion of the currently executing process and
schedules the process with shortest remaining time for execution.
EXAMPLE: Three processes with process IDs P1, P2, P3 with estimated
completion time 10, 5, 7 milliseconds respectively enters the ready queue together.
A new process P4 with estimated completion time 2ms enters the ‘Ready’ queue
after 2ms. Assume all the processes contain only CPU operation and no I/O
operations are involved.
Solution: At the beginning, there are only three processes (P1, P2 and P3)
available in the ‘Ready’ queue and the SRT scheduler picks up the process with the
Shortest remaining time for execution completion (In this example P2 with
remaining time 5ms) for scheduling. Now process P4 with estimated execution
completion time 2ms enters the ‘Ready’ queue after 2ms of start of execution of
P2. The processes are re-scheduled for execution in the following order
P2 P4 P2 P3 P1
0 2 4 7 14 24
2 2 3 7 10
Waiting Time for P2 = 0 ms + (4 -2) ms = 2ms (P2 starts executing first and is
interrupted by P4 and has to wait till the completion of
P4 to get the next CPU slot)
Waiting Time for P4 = 0 ms (P4 starts executing by preempting P2 since the
execution time for completion of P4 (2ms) is less
than that of the Remaining time for execution
completion of P2 (Here it is 3ms))
Waiting Time for P3 = 7 ms (P3 starts executing after completing P4 and P2)
Waiting Time for P1 = 14 ms (P1 starts executing after completing P4, P2 and P3)
Average waiting time = (Waiting time for all the processes) / No. of Processes
= (Waiting time for (P4+P2+P3+P1)) / 4
= (0 + 2 + 7 + 14)/4 = 23/4
= 5.75 milliseconds
Turn Around Time (TAT) for P2 = 7 ms (Time spent in Ready Queue + Execution Time)
Turn Around Time (TAT) for P4 = 2 ms
(Time spent in Ready Queue + Execution Time = (Execution Start Time – Arrival
Time) + Estimated Execution Time = (2-2) + 2)
Scheduling:
Once each process in the ‘Ready’ queue is executed for the pre-defined time
period, the scheduler comes back and picks the first process in the ‘Ready’
queue again for execution.
Round Robin scheduling is similar to the FCFS scheduling and the only
difference is that a time slice based preemption is added to switch the
execution between the processes in the ‘Ready’ queue
EXAMPLE: Three processes with process IDs P1, P2, P3 with estimated
completion time 6, 4, 2 milliseconds respectively, enters the ready queue together
in the order P1, P2, P3. Calculate the waiting time and Turn Around Time (TAT)
for each process and the Average waiting time and Turn Around Time (Assuming
there is no I/O waiting for the processes) in RR algorithm with Time slice= 2ms.
Solution: The scheduler sorts the ‘Ready’ queue based on the FCFS policy and
picks up the first process P1 from the ‘Ready’ queue and executes it for the time
slice 2ms. When the time slice is expired, P1 is preempted and P2 is scheduled for
execution. The Time slice expires after 2ms of execution of P2. Now P2 is
preempted and P3 is picked up for execution. P3 completes its execution within the
time slice and the scheduler picks P1 again for execution for the next time slice.
This procedure is repeated till all the processes are serviced. The order in which the
processes are scheduled for execution is represented as
P1 P2 P3 P1 P2 P1
0 2 4 6 8 10 12
2 2 2 2 2 2
The waiting time for all the processes are given as
Waiting Time for P1 = 0 + (6-2) + (10-8) = 0+4+2= 6ms (P1 starts executing first
and waits for two time slices to get execution back and
again 1 time slice for getting CPU time)
Waiting Time for P2 = (2-0) + (8-4) = 2+4 = 6ms (P2 starts executing after P1
executes for 1 time slice and waits for two time
slices to get the CPU time)
Waiting Time for P3 = (4 -0) = 4ms (P3 starts executing after completing the first
time slices for P1 and P2 and completes its execution in a single time slice.)
Average waiting time = (Waiting time for all the processes) / No. of Processes
= (6+6+4)/3 = 16/3
= 5.33 milliseconds
Turn Around Time (TAT) for P1 = 12 ms (Time spent in Ready Queue + Execution Time)
Average Turn Around Time = (Turn Around Time for all the processes) / No. of Processes
= (12+10+6)/3 = 28/3
= 9.33 milliseconds.
Preemptive scheduling – Priority based Scheduling
Same as that of the non-preemptive priority based scheduling except for the
switching of execution between tasks
EXAMPLE: Three processes with process IDs P1, P2, P3 with estimated
completion time 10, 5, 7 milliseconds and priorities 1, 3, 2 (0- highest priority, 3
lowest priority) respectively enters the ready queue together. A new process P4
with estimated completion time 6ms and priority 0 enters the ‘Ready’ queue after
5ms of start of execution of P1. Assume all the processes contain only CPU
operation and no I/O operations are involved.
Solution: At the beginning, there are only three processes (P1, P2 and P3)
available in the ‘Ready’ queue and the scheduler picks up the process with the
highest priority (In this example P1 with priority 1) for scheduling. Now process
P4 with estimated execution completion time 6ms and priority 0 enters the ‘Ready’
queue after 5ms of start of execution of P1. The processes are re-scheduled for
execution in the following order
P1 P4 P1 P3 P2
0 5 11 16 23 28
5 6 5 7 5
The waiting time for all the processes are given as
Waiting Time for P1 = 0 + (11-5) = 0+6 =6 ms (P1 starts executing first and gets
Preempted by P4 after 5ms and again gets the CPU time
after completion of P4)
Waiting Time for P3 = 16 ms (P3 starts executing after completing P1 and P4)
Waiting Time for P2 = 23 ms (P2 starts executing after completing P1, P4 and P3)
Average waiting time = (Waiting time for all the processes) / No. of Processes
= (6 + 0 + 16 + 23)/4 = 45/4
= 11.25 milliseconds
Turn Around Time (TAT) for P1 = 16 ms (Time spent in Ready Queue + Execution Time)
Turn Around Time (TAT) for P4 = 6ms (Time spent in Ready Queue + Execution Time
= (Execution Start Time – Arrival Time) + Estimated Execution Time = (5-5) + 6 = 0 + 6)
Turn Around Time (TAT) for P3 = 23 ms ( Time spent in Ready Queue + Execution Time)
Turn Around Time (TAT) for P2 = 28 ms ( Time spent in Ready Queue + Execution Time)
Average Turn Around Time= (Turn Around Time for all the processes) / No. of Processes
= (16+6+23+28)/4 = 73/4
= 18.25 milliseconds
EMBEDDED SYSTEM DESIGN
UNIT-V
TASK COMMUNICATION
How to choose RTOS:
The decision of an RTOS for an embedded design is very critical.
1. Functional
2. Non-functional requirements.
1. Functional Requirements:
1. Processor support:
It is not necessary that all RTOS’s support all kinds of processor
architectures.
2. Memory Requirements:
• The RTOS requires ROM memory for holding the OS files and it is
normally stored in a non-volatile memory like FLASH.
3. Real-Time Capabilities:
It is not mandatory that the OS for all embedded systems need to be Real-
Time and all embedded OS’s are ‘Real-Time’ in behavior.
The kernel of the OS may disable interrupts while executing certain services
and it may lead to interrupt latency.
For an embedded system whose response requirements are high, this latency
should be minimal.
6. Modularization Support:
The OS kernel may provide stack implementation and driver support for a
bunch of communication interfaces and networking.
Ensure that the OS under consideration provides support for all the
interfaces required by the embedded product.
Certain OS’s include the run time libraries required for running applications
written in languages like JAVA and C++.