Try   HackMD

Ultimate Guide to Priority Scheduling in OS!!

Priority Scheduling is a scheduling algorithm used in operating systems to determine which tasks/processes should be executed first based on their priority level. Each process is assigned a priority value, usually from 1 to 10, with a higher number indicating a higher priority.

In Priority Scheduling, the scheduler selects the process with the highest priority for execution. If two or more processes have the same priority, then they are scheduled in a round-robin manner. When a new process arrives in the system, its priority is compared with the priority of the currently running process, and if the new process has a higher priority, it preempts the currently running process and starts executing.

To prevent starvation, some variations of Priority Scheduling use aging, which means increasing the priority of a process as it waits in the ready queue for a long time. This ensures that eventually, lower-priority processes will get a chance to run.

Different Types of Priority Scheduling

Here are some common types of priority scheduling, as following them:

Preemptive Priority Scheduling: Preemptive priority scheduling is a variant of process scheduling algorithm that is going to use in operating systems. In this algorithm, each process is assigned a priority level, and the process with the highest priority is given control of the CPU first.

In pre-emptive priority scheduling, if a higher-priority process becomes available while a lower-priority process is running, the lower-priority process is pre-empted and the higher-priority process is given control of the CPU. This allows for important tasks to be executed quickly and efficiently.

Pre-emptive priority scheduling is commonly used in real-time systems, where certain tasks must be completed within specific time constraints. For example, in a system that controls an assembly line, it is important that tasks related to safety and critical functions are given the highest priority to ensure that the system operates correctly.

Non Pre-Emptive Priority Scheduling: In Non-preemptive priority scheduling, the processes are scheduled according to their priorities. Each process is assigned a priority, which determines the order in which the processes are executed. The higher the priority, the earlier the process is executed.

In this priority scheduling, once a process is scheduled to run, it continues to run until it completes its execution or it enters into a waiting state, such as waiting for I/O or waiting for a resource. At this point, the CPU scheduler selects the next process with the highest priority to run.

Dynamic Priority Scheduling: Dynamic Priority Scheduling is used in many types of operating systems to determine the order in which processes should be executed by the CPU. In this algorithm, each process is assigned a priority level that can be changed dynamically based on various criteria, such as the amount of CPU time the process has already consumed or the importance of the process to the system.

The algorithm works by maintaining a ready queue of processes and selecting the process with the highest priority to execute next. When a process enters the ready queue, its priority is initially set based on some criteria, such as its process type, memory requirements, or user-defined parameters. As the process runs, its priority may change based on various factors such as the amount of CPU time it has already consumed or the number of I/O requests it has made.

The key advantage of dynamic priority scheduling is that it allows the system to give more priority to processes that are more important at a given time, ensuring that critical processes are executed in a timely manner. However, this algorithm also requires careful design and tuning to prevent starvation or other issues that may arise when certain processes are always given priority over others.

Static Priority Scheduling: Static priority scheduling is a scheduling algorithm used in operating systems to determine the order in which processes are executed. In this algorithm, each process is assigned a priority value based on its characteristics, such as its importance, the amount of resources it requires, and its deadline. Processes with higher priority values are executed before processes with lower priority values.

The priority value of a process is usually fixed and does not change during its lifetime. This means that a high-priority process can potentially monopolize the CPU and prevent lower-priority processes from executing, leading to a phenomenon known as priority inversion, as like as Shortest Job First scheduling.

To avoid priority inversion, some static priority scheduling algorithms use priority inheritance, which temporarily boosts the priority of a low-priority process when it is, blocked waiting for a resource held by a high-priority process. This ensures that the high-priority process releases the resource as soon as possible, allowing the low-priority process to continue execution without being blocked for a long time.

So, static priority scheduling can be an effective scheduling algorithm for certain types of systems where the characteristics of processes are well-defined and predictable. However, it may not be suitable for systems with dynamically changing workloads or real-time requirements, as these can cause unpredictable behaviour and can lead to poor system performance.

Real Life Example of Priority Scheduling

A real-life example of priority scheduling is an emergency room in a hospital. Patients who arrive at the emergency room are assigned a priority level based on the severity of their medical condition. The patients with the most critical medical conditions, such as heart attack or severe trauma, are given the highest priority and are immediately attended to by the medical staff.

On the other hand, patients with less severe conditions, such as a minor injury or flu-like symptoms, are given a lower priority and may have to wait longer to receive medical attention. This approach helps ensure that the patients who need immediate medical attention receive it as soon as possible, while also allowing medical staff to prioritize their work and manage their time efficiently.

Another example of priority scheduling is in operating systems, where processes with higher priority are given more CPU time than those with lower priority. For instance, when you are working on your computer and simultaneously running several programs, the operating system assigns priority levels to each program, and the one with the highest priority gets more CPU time than the others.

What are the Advantages and Disadvantages of Priority Scheduling?

Here are some advantages and disadvantages of priority scheduling:

Advantages:

High-priority processes are executed quickly: In priority scheduling, high-priority processes are given preference over low-priority processes. This ensures that important processes are executed quickly, without any delay.

Improves system performance: By executing high-priority processes first, priority scheduling can help improve the overall performance of the system. This is because important processes are executed quickly, which can help free up system resources and reduce wait times.

Can be customized: Priority scheduling can be customized to meet the specific needs of the system or organization. Priorities can be assigned based on factors such as the type of process, the user running the process, or the resources required by the process.

Disadvantages:

Can lead to starvation: In priority scheduling, low-priority processes may be delayed or even starved if there are too many high-priority processes. This can lead to poor performance and may even cause the system to crash.

Priority inversion: Priority inversion occurs when a low-priority process holds a resource that a high-priority process needs. This can cause the high-priority process to wait, leading to poor performance.

Complexity: Priority scheduling can be complex to implement, especially in systems with many processes and resources. It may also require additional overhead to manage priorities and ensure that processes are executed in the correct order.

Priority scheduling can be an effective CPU scheduling algorithm, but it has some limitations, such as the potential for starvation and priority inversion. These issues can be addressed through careful design and management of the system.