Server Operating System: Muhammad Umer Iqbal, 2162069
Server Operating System: Muhammad Umer Iqbal, 2162069
Server Operating System: Muhammad Umer Iqbal, 2162069
Back in early days, computers could execute only one program at a time. But now, modern
computers are capable of running a whole lot of tasks at the same time. For example -
You can browse my blog on a web browser and listen to music on a media player, at the
same time.
You can edit a document on a word processor, while other applications can download files
from the internet, at the same time.
Concurrency doesn’t necessarily involve multiple applications. Running multiple parts of a single
application simultaneously is also termed as concurrency. For example -
A word processor formats the text and responds to keyboard events, at the same time.
An audio streaming application reads the audio from the network, decompresses it and
updates the display, all at the same time.
Software that are able to do more than one thing at a time are called concurrent software.
Unit of Concurrency
Concurrency is a very broad term, and it can be used at various levels. For example -
Multithreading - Multiple parts of the same program running concurrently. In this case, we
go a step further and divide the same program into multiple parts/threads and run those
threads concurrently.
Let’s talk about the two basic units of concurrency : Processes and Threads.
Process
A Process is a program in execution. It has its own address space, a call stack, and link to any
resources such as open files.
A computer system normally has multiple processes running at a time. The operating system
keeps track of all these processes and facilitates their execution by sharing the processing time
of the CPU among them.
Thread
A thread is a path of execution within a process. Every process has at least one thread - called
the main thread. The main thread can create additional threads within the process.
Threads within a process share the process’s resources including memory and open files.
However, every thread has its own call stack.
Since threads share the same address space of the process, creating new threads and
communicating between them is more efficient.
Concurrency greatly improves the throughput of computers by increasing CPU utilization. But
with great performance comes few issues -
Thread interference errors (Race Conditions) : Thread interference errors occur when
multiple threads try to read and write a shared variable concurrently, and these read and
write operations overlap in execution.
In this case, the final result depends on the order in which the reads and writes take place,
which is unpredictable. This makes thread interference errors difficult to detect and fix.
Thread interference errors can be avoided by ensuring that only one thread can access a
shared resource at a time. This is usually done by acquiring a mutually exclusive lock
before accessing any shared resource.
The concept of acquiring a lock before accessing any shared resource can lead to other
problems like deadlock and starvation. We’ll learn about these problems and their
solution in future tutorials.
Memory consistency errors : Memory consistency errors occur when different threads
have inconsistent views of the same data. This happens when one thread updates some
shared data, but this update is not propagated to other threads, and they end up using the
old data.
Types of Thread
Threads are implemented in following two ways
User Level Threads -- User managed threads
Kernel Level Threads -- Operating System managed threads acting on kernel, an
operating system core.
User Level Threads
In this case, application manages thread management kernel is not aware of the existence of
threads. The thread library contains code for creating and destroying threads, for passing
message and data between threads, for scheduling thread execution and for saving and
restoring thread contexts. The application begins with a single thread and begins running in that
thread.
ADVANTAGES
Thread switching does not require Kernel mode privileges.
User level thread can run on any operating system.
Scheduling can be application specific in the user level thread.
User level threads are fast to create and manage.
DISADVANTAGES
In a typical operating system, most system calls are blocking.
Multithreaded application cannot take advantage of multiprocessing.
Kernel Level Threads
In this case, thread management done by the Kernel. There is no thread management code in
the application area. Kernel threads are supported directly by the operating system. Any
application can be programmed to be multithreaded. All of the threads within an application are
supported within a single process. The Kernel maintains context information for the process as
a whole and for individuals threads within the process.Scheduling by the Kernel is done on a
thread basis. The Kernel performs thread creation, scheduling andmanagement in Kernel
space. Kernel threads are generally slower to create and manage than the user threads.
ADVANTAGES
Kernel can simultaneously schedule multiple threads from the same process on multiple
processes.
If one thread in a process is blocked, the Kernel can schedule another thread of the
same process.
Kernel routines themselves can multithreaded.
DISADVANTAGES
Kernel threads are generally slower to create and manage than the user threads.
Transfer of control from one thread to another within same process requires a mode
switch to the Kernel.
Multithreading Models
Some operating system provide a combined user level thread and Kernel level thread facility.
Solaris is a good example of this combined approach. In a combined system, multiple threads
within the same application can run in parallel on multiple processors and a blocking system call
need not block the entire process. Multithreading models are three types
Many to many relationship.
Many to one relationship.
One to one relationship.
Many to Many Model
In this model, many user level threads multiplexes to the Kernel thread of smaller or equal
numbers. The number of Kernel threads may be specific to either a particular application or a
particular machine.
Following diagram shows the many to many model. In this model, developers can create as
many user threads as necessary and the corresponding Kernel threads can run in parallels on a
multiprocessor.
Many to One Model
Many to one model maps many user level threads to one Kernel level thread. Thread
management is done in user space. When thread makes a blocking system call, the entire
process will be blocks. Only one thread can access the Kernel at a time,so multiple threads are
unable to run in parallel on multiprocessors. If the user level thread libraries are implemented in
the operating system in such a way that system does not support them then Kernel threads use
the many to one relationship modes.
One to One Model
There is one to one relationship of user level thread to the kernel level thread.This model
provides more concurrency than the many to one model. It also another thread to run when a
thread makes a blocking system call. It support multiple thread to execute in parallel on
microprocessors. Disadvantage of this model is that creating user thread requires the
corresponding Kernel thread. OS/2, windows NT and windows 2000 use one to one relationship
model.