Introduction to Multithreading in Operating System
Gone are the days when activities are taken up serially one after another, be it in day-to-day life or official work. Doing multiple tasks at the same time, wherever possible, is the order of the day and it is linked to efficiency and agility. It is applicable to the Computer world as well and the Operating system that manages Computer resources is equipped to manage multiple parallel tasks to improve the utilization of CPU and service multiple users simultaneously with better front end response.
Multitasking takes place at two levels in the operating system. One is at the process level, completely managed operating system and the other one is at the instruction level called as Thread. The operating system provides control to Programs to manage parallel operations through multithreading.
What is Multithreading?
- Multithreading is interchangeably used, quite often with Multitasking or Multiprogramming. There are subtle differences between the three. A set of independent instructions is culled out of a process and threads are formed using these extracted sets of codes and such threads are executed as separate units. Multiples of such threads are executed in parallel by the operating system and these threads are managed by the application program.
- Each thread indicates the flow of the Program code or Process and it has its own Program counters (PC) to keep track of the last instruction set executed and the next one to be executed and Registers to store the working variables and history of execution in a stack. A Thread shares its information with its fellow threads and changes happening within a thread are known to others.
- A thread is a subset of a process and it is part of a process and it is lightweight and takes fewer computer resources unlike process which is heavyweight and takes more compute resources. Thread switching is controlled by the software whereas process level switching is managed by the operating system.
- Threads share the data and file system whereas the Multiprocessing environment has its own data and file stores. In multithreading, if one thread is blocked for some reason, Jobs in other threads can run without any hindrance. Each thread can access and alter data in other threads.
- By design, Multithreading provides stability in the software. It avoids the crashing of the system by handling each thread as an independent unit and masking the defects in the performance of a thread affecting others.
Applications of Multithreading
- During code development, the Application programmer splits the entire processes into threads i.e. units of independent instructions and examples of threads are several background/front end tasks such as updating data in the file system, capturing the log files, multiple windows operations management, file scanning, continuous interaction with users.
- Multithreading scenario includes multiple users working in the same system or processor, running different applications and issuing different commands at a given time and the Operating system executes all the threads from all the users in parallel. The processor should have sufficient power to manage multithreading operations.
- Browsers support applications that runs multithreading operations and manage multiple activities at the same time. The operation of any thread should not impact the operation of the other thread and the Operating system handles the execution of Jobs in threads effectively.
- Multithreading scenarios are being used quite extensively in Web applications, network management software and it also provides a solid base for parallel processing in many applications using shared resources concepts.
Types of Threads
There are two types of threads namely:
1. User-level Threads
- Managed by Users and Operating system is not aware of the presence of
- Thread library provides the codes for construction of thread, terminating threads, the ways to interface messages and data between threads, drawing execution schedules, save context and restore them whenever
- An application program can manage these threads and kernel-level privileges are not required to execute these
- It is agnostic to the operating system and it can run
- Easier to construct and manage the whole
- Sometimes system calls would be blocked in such types of threads
- It cannot make use of the benefits of Multiprocessing
2. Kernel level Threads
- Managed by Kernel, a system software resides on the heart and core of the operating system
- Supported directly by Operating system and application has no role
- The application just declares the multithread execution but OS handles the threading
- Contextual information on the process and information on the individual thread are maintained by Kernel
- The kernel handles Thread creation, Job scheduling and managing the
- It handles threads in a single process as well as multi
- If there is a block in one of the thread in a process, the kernel can open yet another thread in the same process
- By nature the kernel programs are
- The creation of threads by Kernel is a slow process and thread switching requires the intervention of kernel.
Multithreading in Operating System Models
Some OS allows both user and kernel-level threads to co-exist. Application-level multithreads runs on multiple processors controlled by Kernel.
The relationship between application threads and kernel threads can be categorized into:
- One to one
- Many to many
- Many to one
In many to many relationships, n number of user threads can run along with m number of kernel threads in a multiprocessor environment. In many to one relationship n number of user, threads are connected to one kernel thread and only one thread connection is active at any point in time.
Importance of Multithreading in Operating System
Multithreading facilitates concurrent execution of multiple program codes and these program codes are easily managed in Java program including its sequence of execution and it plays an important role in
- Improving Front end response to the users
- Enhancing application performance
- Effective utilization of Computer resources
- Low maintenance cost
- Faster completion of tasks due to parallel operation
- Simplifying development process and increasing productivity
Multithreading has to overcome the challenges posed by it complex operational set up/Switching contexts and the probability of getting deadlock conditions.
Efficiency of a computer software depends on its ability to process the instructions in an agile manner and at a faster pace. Multithreading operations facilitates to fulfill these objectives and Java programming inherently provides multithread facilities in the coding and it is easy to create and manage multiple threads in Java.
This is a guide to Multithreading in Operating System. Here we discuss the introduction to multithreading along with types, application, models and the importance in OS. You can also go through our other related articles to learn more –