Unit 1
Unit 1
(1)    What is operating System? Explain the abstract view of the components of a
        computer system.
           An operating system (OS) is a collection of software that manages computer
            hardware resources and provides various services for computer programs. It acts as
            an intermediary between the user of a computer and the computer hardware.
           The placement of the operating system is shown in Fig. 1-1. At the bottom is the
            hardware, which, consists of integrated circuit chips, wires, disks, a key board, a
            monitor and similar physical devices.
           On the top of the hardware is the software.
           Operating system runs on the bare hardware and it provides base for the rest of the
            software.
           Most computers have two modes of operation: kernel mode and user mode.
           The operating system is the most fundamental piece of software and runs in kernel
            mode.
           In this mode it has complete access to all the hardware and can execute any
            instruction that the machine is capable of executing.
           The rest of the software runs in user mode, in which only a subset of the machine
            instructions is available. Here we find the command interpreter (shell), compilers,
            editors, and other system programs.
           Finally, above the system programs are the application programs. These programs
            are purchased or written by the users to solve their particular problems, such as
            word processing, spreadsheets, web browser or music player.
           Figure 1-2. Operating Systems turn ugly hardware into beautiful abstractions.
          Just as the operating system shields (protect from an unpleasant experience) the
           programmer from the disk hardware and presents a simple file-oriented
           interface, it
          In this view, the function of the operating system is to present the user with the
           equivalent of an extended machine or virtual machine that is easier to work with
           than the underlying hardware.
          The operating system provides a variety of services that programs can obtain using
           special instructions called system calls.
          When a resource is time multiplexed, different programs or users take turns using it.
           First one of them gets to use the resource, then another, and so on.
          For example, CPU and printer are time multiplexed resources. OS decides who will
           use it and for how long.
          The other kind of multiplexing is space multiplexing, instead of the customers taking
           turns, each one gets part of the resource.
          For example, both primary and secondary memories are space multiplexed. OS
               The access function must provide protection of resources and data from
                unauthorized users.
       Error detection and response
               Various types of errors can occur while a computer system is running, which
                includes internal and external hardware errors. For example, memory error,
                device failure error and software errors as arithmetic overflow.
               In case, operating system must provide a response that clears error condition
                with least impact on running applications.
       Accounting
               A good operating system collects usage for various resources and monitor
                performance parameters.
               On any system, this information is useful in anticipating need for future
                enhancements.
       Protection & Security
               Operating systems provides various options for protection and security purpose.
               It allows the users to secure files from unwanted usage.
               It protects restricted memory area from unauthorized access.
               Protection involves ensuring that all access to system resources is controlled.
           Advantages:
                Move much of the work of the operator to the computer.
                Increase performance since it was possible for job to start as soon as the
                  previous job finished.
           Disadvantages:
                Large Turnaround time.
                More difficult to debug program.
                Due to lack of protection scheme one batch job can affect pending jobs.
              They run on servers, which are very large personal computers, workstations, or
               even mainframes.
              They serve multiple users at once over a network and allow the users to share
               hardware and software resources.
              Servers can provide print service, file service or web service.
              Typically server operating systems are Solaris, FreeBSD, and Linux and Windows
               Server 200x.
       Multiprocessor Operating Systems
              An increasingly common way to get major group computing power is to connect
               multiple CPUs into a single system. Depending on precisely how they are
               connected and what is shared, these systems are called parallel computers,
               multicomputers, or multiprocessors. The operating systems used in this system
               are multiprocessor operating system.
              They need special operating systems, but often these are variations on the server
              Embedded systems run on the computers that control devices that are not
               generally thought of as computers and which do not accept user installed
               software.
              The main property which distinguishes embedded systems from handhelds is
               the certainty that no untrusted software will ever run on it.
              So, there is no need for protections between applications, leading to some
               simplifications.
              Systems such as QNX and VxWorks are popular embedded operating system.
       Sensor Node Operating Systems
              Networks of tiny sensor nodes are being deployed (developed) for numerous
               purposes. These nodes are tiny computers that communicate with each other
               and with a base station using wireless communication.
              These sensor networks are used to protect the perimeters of buildings, guard
               national borders, detect fires in forests, measure temperature and precipitation
               for weather forecasting, glean information about enemy movements on
               battlefields, and much more.
              Each sensor node is a real computer, with a CPU, RAM, ROM and one or more
               environmental sensors.
              It runs a small but real operating system, usually one that is event driven,
               responding to external events or making measurements periodically based on
               internal clock.
              All the programs are loaded in advance which makes the design much simpler.
              TinyOS is a well-known operating system for a sensor node.
       Real Time Operating Systems
              These systems are characterized by having time as a key parameter.
              Real time operating system has well defined, fixed time constraints. Processing
               must be done within define constraints or the system will fail.
              Types of Real Time Operating System:
                Hard real time system
                     o Many of these are found in industrial process control, avionics, and
                       military and similar application areas.
                     o These systems must provide absolute guarantees that a certain action
                       will occur be a certain time.
                Soft real time system
                     o Missing an occasional deadline, while not desirable is acceptable and
                       does not cause any permanent damage.
                     o Digital audio, digital telephone and multimedia systems fall into this
                          category.
              An example of real time system is e-Cos.
OR
       Layered system
             In this system, operating system is organized as a hierarchy of layers, each one
              constructed upon the one below it as shown below in figure 1-4.
             The first system constructed in this way was the THE system.
             The system had six layers.
             Layer 0 dealt with allocation of the processor, switching between processes
              when interrupts occurred or timers expired.
             Layer 0 provided the basic multiprogramming of the CPU.
             Layer 1 did the memory management. It allocated space for process in main
              memory and on a 512K word drum used for holding parts of processes for which
              there was no room in main memory.
             Layer 2 handled communication between each process and the operator console
              (i.e. user).
             Layer 3 takes care of managing the I/O devices and buffering the information
              streams to and from them.
             Layer 4 was where the user programs were found.
             The system operator process was located in layer 5.
             A further generalization of the layering concept was present in the MULTICS system.
             Instead of layers, MULTICS was described as having a series of concentric rings,
              with the inner ones being more privileged than the outer ones.
             When a procedure in an outer ring wanted to call a procedure in an inner ring, it
              had to make the equivalent of a system call, that is, a TRAP instruction whose
              parameters were carefully checked for validity before allowing the call to
              proceed.
             Although the entire operating system was part of the address space of each user
              process in MULTICS, the hardware made it possible to designate individual
              procedures (memory segments, actually) as protected against reading, writing,
              or executing.
       Microkernel
             With the layered approach, the designers have a choice where to draw the
              kernel user boundary.
             Traditionally, all the layers went in the kernel, but that is not necessary.
             In fact, a strong case can be made for putting as little as possible in kernel mode
              because bugs in the kernel can bring down the system instantly.
             In contrast, user processes can be set up to have less power so that a bug may
              not be fatal.
             The basic idea behind the microkernel design is to achieve high reliability by
              splitting the operating system up to into small, well defined modules, only one of
              which the microkernel runs in kernels mode and the rest of all are powerless
              user processes which would run in user mode.
             By running each device driver and file system as separate user processes, a bug
              in one of these can crash that component but cannot crash the entire system.
             Examples of microkernel are Integrity, K42, L4, PikeOS, QNX, Symbian, and MINIX 3.
             MINIX 3 microkernel is only 3200 lines of C code and 800 lines of assembler for
              low level functions such as catching interrupts and switching processes.
             The C code manages and schedules processes, handles inter-process
              communication and offer a set of about 35 systems calls to the rest of OS to do
              its work.
             The process structure of MINIX 3 is shown in figure 1-5, with kernel call handler
              labeled as Sys.
             The device driver for the clock is also in the kernel because the scheduler
              interacts closely with it. All the other device drivers run as separate user
              processes.
             Outside the kernel, the system is structured as three layers of processes all
              running in user mode.
             The lowest layer contains the device driver. Since they run in user mode they do
              not have access to the I/O port space and cannot issue I/O commands directly.
             Above driver is another user mode layer containing servers, which do most of
              the work of an operating system.
             One interesting server is the reincarnation server, whose job is to check if the other
              servers and drivers are functioning correctly. In the event that a faulty one is detected,
              it is automatically replaced without any user intervention.
             All the user programs lie on the top layer.
              not know whether the message is handled locally in its own machine, or
              whether it was sent across a network to a server on a remote machine.
             A PC sends a request for a Web page to the server and the Web page comes
              back. This is a typical use of client server model in a network.
       Virtual Machine
             The initial releases of OS/360 were strictly batch systems. But many users
              wanted to be able to work interactively at a terminal, so OS designers decided to
              write timesharing systems for it.
             The heart of the system, known as the virtual machine monitor, run on the bare
              hardware and does the multiprogramming, providing not just one but several
              virtual machines to the next layer up.
             Each virtual machine is identical to the true hardware; each one can run any OS
              that will run directly on the bare hardware.
             Different virtual machines can run different operating systems.
             On VM/370, some run OS/360 while the others run single user interactive system
              called CMS (Conversational Monitor System) for interactive time sharing users.
             When CMS program executed a system call, a call was trapped to the operating
              system in its own virtual machine, not on VM/370. CMS then issued the normal
              hardware I/O instruction for reading its virtual disk or whatever was needed to
              carry out the call.
             These I/O instructions were trapped by VM/370 which then performs them.
5CS4-03 Operating System                                                                 UNIT 1
              The translated blocks are then executed and cached for subsequent use.
              A different approach to handling control instructions is to modify the operating
               system to remove them. This approach is not true virtualization, but para-
               virtualization.
          The operating system then figures out what the calling process wants by inspecting
           the parameters.
          Then it carries out the system call and returns control to the instruction following
           the system call.
       Following steps describe how a system call is handled by an operating system.
          To understand how OS handles system calls, let us take an example of read system call.
          Read system call has three parameters: the first one specifying the file, the second
           one pointing to the buffer, and the third one giving the number of bytes to read.
          Like nearly all system calls, it is invoked from C programs by calling a library
           procedure with the same name as the system call: read.
          A call from a C program might look like this:
                      count = read(fd, buffer, nbytes);
          The system call return the number of bytes actually read in count.
          This value is normally the same as nbytes, but may be smaller, if, for example, end-
           of- file is encountered while reading.
          If the system call cannot be carried out, either due to an invalid parameter or a disk
           error, count is set to -1, and the error number is put in a global variable, errno.
          Programs should always check the results of a system call to see if an error occurred.
          System calls are performed in a series of steps.
          To make this concept clearer, let us examine the read call discussed above.
          In preparation for calling the read library procedure, which actually makes the read
           system call, the calling program first pushes the parameters onto the stack, as
           shown in steps 1-3 in Fig. 1-9.
          The first and third parameters are called by value, but the second parameter is
           passed by reference, meaning that the address of the buffer (indicated by &) is
           passed, not the contents of the buffer.
          Then comes the actual call to the library procedure (step 4). This instruction is the
           normal procedure call instruction used to call all procedures.
5CS4-03 Operating System                                                                       UNIT 1
          The library procedure, possibly written in assembly language, typically puts the
           system call number in a place where the operating system expects it, such as a
          Then it executes a TRAP instruction to switch from user mode to kernel mode and
           start execution at a fixed address within the kernel (step 6).
          The kernel code that starts examines the system call number and then dispatches to
           the correct system call handler, usually via a table of pointers to system call handlers
           indexed on system call number (step 7).
          At that point the system call handler runs (step 8).
                                              Process management
                         Call                                            Description
      pid = for k( )                                Create a child process identical to the parent
      pid = waitpid(pid, &statloc, options)         Wait for a child to terminate
      s = execve(name, argv, environp)              Replace a process’ core image
      exit(status)                                  Terminate process execution and return status
                                               File management
                          Call                                           Description
      fd = open(file, how, ...)                     Open a file for reading, writing, or both
      s = close(fd)                                 Close an open file
      n = read(fd, buffer, nbytes)                  Read data from a file into a buffer
      n = write(fd, buffer, nbytes)                 Write data from a buffer into a file
      position = lseek(fd, offset, whence)          Move the file pointer
5CS4-03 Operating System                                                                     UNIT 1
             Once the system call handler has completed its work, control may be returned to
              the user-space library procedure at the instruction following the TRAP instruction
              (step 9).
             This procedure then returns to the user program in the usual way procedure calls
              return (step 10).
             To finish the job, the user program has to clean up the stack, as it does after any
              procedure call (step 11).
  (1)    What is Process? Give the difference between Process and Program.
         Process:
                  Process is a program under execution.
                  It is an instance of an executing program, including the current values of the pro-
                   gram counter, registers & variables.
                  Process is an abstraction of a running program.
                               Process                                  Program
             A process is program in execution.         A program is set of instructions.
             A process is an active/ dynamic entity.    A program is a passive/ static entity.
             A process has a limited life span. It is   A program has a longer life span. It is
             created when execution starts and          stored on disk forever.
             terminated as execution is finished.
             A process contains various resources       A program is stored on disk in some file.
             like memory address, disk, printer         It does not contain any other resource.
             etc… as per requirements.
5CS4-03 Operating System                                                                UNIT 1
 Figure 2-2. (a) Multiprogramming of four programs. (b) Conceptual model of four inde-
 pendent, sequential processes. (c) Only one program is active at once.
        Process Creation
5CS4-03 Operating System                                                                 UNIT 1
        Process Termination
              After a process has been created, it starts running and does whatever its job is.
              However, nothing lasts forever, not even processes. Sooner or later the new
               process will terminate, usually due to one of the following conditions:
               1. Normal exit (voluntary).
               2. Error exit (voluntary).
               3. Fatal error (involuntary).
               4. Killed by another process (involuntary).
        Process Hierarchies
              In some systems, when a process creates another process, the parent process
               and child process continue to be associated in certain ways.
              The child process can itself create more processes, forming a process hierarchy.
              An example of process hierarchy is in UNIX, which initializes itself when it is started.
              A special process, called init, is present in the boot image.
              When it starts running, it reads a file telling how many terminals there are.
              Then it forks off one new process per terminal. These processes wait for
               someone to log in.
              If a login is successful, the login process executes a shell to accept commands.
               These commands may start up more processes, and so forth.
              Thus, all the processes in the whole system belong to a single tree, with init at
               the root.
              In contrast, Windows does not have any concept of a process hierarchy. All
               process- es are equal.
              The only identification for parent child process is that when a process is created,
               the parent is given a special token (called a handle) that it can use to control the
               child.
              However, it is free to pass this token to some other process, thus invalidating the
               hierarchy. Processes in UNIX cannot disinherit their children.
        Process state:
              The state of a process is defined by the current activity of that process.
              During execution, process changes its state.
              The process can be in any one of the following three possible states.
                  1) Running (actually using the CPU at that time and running).
                  2) Ready (runnable; temporarily stopped to allow another process run).
                  3) Blocked (unable to run until some external event happens).
           Once the process starts execution one of the following events could occur.
             The process issues an I/O request and then be placed in an I/O queue.
                The process creates a new sub process and wait for its termination.
                The process is removed forcibly from the CPU and is put back in ready queue.
               A process switches from waiting state to ready state and is put back in ready queue.
               The cycle continues unless the process terminates, at which the process is
                removed from all queues and has its PCB and resources de-allocated.
5CS4-03 Operating System                                                              UNIT 1
 Figure 2-6. Skeleton of what the lowest level of the operating system does when an in-
 terrupt occurs.
           From here on, it is up to the software, in particular, the interrupt service procedure.
           All interrupts start by saving the registers, often in the process table entry for the
            cur- rent process.
           Then the information pushed onto the stack by the interrupt is removed and the
            stack pointer is set to point to a temporary stack used by the process handler.
           When this routine is finished, it calls a C procedure to do the rest of the work for this
            specific interrupt type.
           When it has done its job, possibly making some process now ready, the scheduler is
            called to see who to run next.
           After that, control is passed back to the assembly language code to load up the
            registers and memory map for the now-current process and start it running.
           Interrupt handling and scheduling are summarized in Figure 2-6.
  (8)   What is thread? Explain thread structure. Explain different types of thread.               OR
        Explain thread in brief.
        Thread
                A program has one or more locus of execution. Each execution is called a thread
                 of execution.
                In traditional operating systems, each process has an address space and a single
                 thread of execution.
                It is the smallest unit of processing that can be scheduled by an operating system.
                A thread is a single sequence stream within in a process. Because threads have
                 some of the properties of processes, they are sometimes called lightweight
                 process- es. In a process, threads allow multiple executions of streams.
        Thread Structure
                Process is used to group resources together and threads are the entities
                 scheduled for execution on the CPU.
5CS4-03 Operating System                                                                UNIT 1
               The thread has a program counter that keeps track of which instruction to
                execute next.
               It has registers, which holds its current working variables.
               It has a stack, which contains the execution history, with one frame for each
                proce- dure called but not yet returned from.
               Although a thread must execute in some process, the thread and its process are
                dif- ferent concepts and can be treated separately.
               What threads add to the process model is to allow multiple executions to take
                place in the same process environment, to a large degree independent of one
                another.
               Having multiple threads running in parallel in one process is similar to having
                multi- ple processes running in parallel in one computer.
     Figure 2-7. (a) Three processes each with one thread. (b) One process with
                                         three threads.
           In former case, the threads share an address space, open files, and other resources.
           In the latter case, process share physical memory, disks, printers and other resources.
           In Fig. 2-7 (a) we see three traditional processes. Each process has its own address
            space and a single thread of control.
           In contrast, in Fig. 2-7 (b) we see a single process with three threads of control.
           Although in both cases we have three threads, in Fig. 2-7 (a) each of them operates
            in a different address space, whereas in Fig. 2-7 (b) all three of them share the same
            address space.
           Like a traditional process (i.e., a process with only one thread), a thread can be in
            any one of several states: running, blocked, ready, or terminated.
           When multithreading is present, processes normally start with a single thread
            present. This thread has the ability to create new threads by calling a library
            procedure thread_create.
           When a thread has finished its work, it can exit by calling a library procedure
            thread_exit.
           One thread can wait for a (specific) thread to exit by calling a procedure thread_join.
            This procedure blocks the calling thread until a (specific) thread has exited.
5CS4-03 Operating System                                                                 UNIT 1
        Types of thread
            1. User Level Threads
            2. Kernel Level Threads
        User Level Threads
               User level threads are implemented in user level libraries, rather than via
                systems calls.
               So thread switching does not need to call operating system and to cause
                interrupt to the kernel.
               The kernel knows nothing about user level threads and manages them as if they
                were single threaded processes.
               When threads are managed in user space, each process needs its own private
                thread table to keep track of the threads in that process.
               This table keeps track only of the per-thread properties, such as each thread’s pro-
                gram counter, stack pointer, registers, state, and so forth.
               The thread table is managed by the run-time system.
               Advantages
                      It can be implemented on an Operating System that does not support
                       threads.
                      A user level thread does not require modification to operating systems.
                      Simple Representation: Each thread is represented simply by a PC,
5CS4-03 Operating System                                                                 UNIT 1
                      registers, stack and a small control block, all stored in the user process
                      address space.
                     Simple Management: This simply means that creating a thread, switching
                      between threads and synchronization between threads can all be done
                      without intervention of the kernel.
                     Fast and Efficient: Thread switching is not much more expensive than a
                      pro- cedure call.
                     User-level threads also have other advantages. They allow each process
                      to have its own customized scheduling algorithm.
              Disadvantages
                     There is a lack of coordination between threads and operating system
                      ker- nel. Therefore, process as a whole gets one time slice irrespective of
                      wheth- er process has one thread or 1000 threads within. It is up to each
                      thread to give up control to other threads.
                     Another problem with user-level thread packages is that if a thread starts
                      running, no other thread in that process will ever run unless the first
                      thread voluntarily gives up the CPU.
                     A user level thread requires non-blocking systems call i.e., a
                      multithreaded kernel. Otherwise, entire process will be blocked in the
                      kernel, even if a sin- gle thread is blocked but other runnable threads are
                      present. For example, if one thread causes a page fault, the whole
                      process will be blocked.
        Kernel Level Threads
              In this method, the kernel knows about threads and manages the threads.
              No runtime system is needed in this case.
              Instead of thread table in each process, the kernel has a thread table that keeps
               track of all threads in the system. In addition, the kernel also maintains the tradi-
               tional process table to keep track of processes. Operating Systems kernel
               provides system call to create and manage threads.
              Advantages
                    Because kernel has full knowledge of all threads, scheduler may decide to
                       give more time to a process having large number of threads than process
                       having small number of threads.
                    Kernel threads do not require any new, non-blocking system calls.
                       Blocking of one thread in a process will not affect the other threads in the
                       same pro- cess as Kernel knows about multiple threads present so it will
                       schedule other runnable thread.
              Disadvantages
                    The kernel level threads are slow and inefficient. As thread are managed
5CS4-03 Operating System                                                                UNIT 1
    Figure 2-9. (a) A user-level threads package. (b) A threads package managed by
                                           the kernel.
        Hybrid Implementations
              To combine the advantages of user-level threads with kernel-level threads, one
               way is to use the kernel-level threads and then multiplex user-level threads onto
               some or all of the kernel threads, as shown in Fig. 2-10.
              In this design, the kernel is aware of only the kernel-level threads and schedules
               those.
              Some of those threads may have multiple user-level threads multiplexed on top
               of them.
              These user-level threads are created, destroyed, and scheduled just like user-
               level threads in a process that runs on an operating system without
               multithreading capa- bility.
              In this model, each kernel-level thread has some set of user-level threads that
               take turns using it.
              This model gives the ultimate in flexibility as when this approach is used, the pro-
               grammer can determine how many kernel threads to use and how many user-
               level threads to multiplex on each one.
5CS4-03 Operating System                                                                   UNIT 1
        Multitasking
           The ability to execute more than one task at the same time is called multitasking.
           In multitasking, only one CPU is involved, but it switches from one program to
               an- other so quickly that it gives the appearance of executing all of the programs
               at the same time.
           There are two basic types of multitasking.
                   1) Preemptive: In preemptive multitasking, the operating system assign CPU
                       time slices to each program.
                   2) Cooperative: In cooperative multitasking, each program can control the
                       CPU for as long as it needs CPU. If a program is not using the CPU,
                       however, it can allow another program to use it.
 (10) Write the similarities and dissimilarities (difference) between process and thread.
        Similarities
              Like processes threads share CPU and only one thread is active (running) at a time.
              Like processes threads within a process execute sequentially.
              Like processes thread can create children.
              Like a traditional process, a thread can be in any one of several states:
               running, blocked, ready, or terminated.
             Like process threads have Program Counter, stack, Registers and state.
        Dissimilarities
              Unlike processes threads are not independent of one another, threads within
               the same process share an address space.
              Unlike processes all threads can access every address in the task.
5CS4-03 Operating System                                                         UNIT 1
              Unlike processes threads are design to assist one other. Note that processes
               might or might not assist one another because processes may be originated
               from different users.
5CS4-03 Operating System                                                                  UNIT 1
   (11)   Explain FCFS, Round Robin, Shortest Job First, Shortest Remaining Job First and
          Priority Scheduling algorithms with illustration.
    I     FCFS (First Come First Serve):
                Selection criteria :
                 The process that request first is served first. It means that processes are served in
                 the exact order of their arrival.
                Decision Mode :
                 Non preemptive: Once a process is selected, it runs until it is blocked for an I/O or
                 some event, or it is terminated.
                Implementation:
                 This strategy can be easily implemented by using FIFO queue, FIFO means First In
                 First Out. When CPU becomes free, a process from the first position in a queue is
                 selected to run.
                Example :
                 Consider the following set of four processes. Their arrival time and time required to
                 complete the execution are given in following table. Consider all time values in
                 milliseconds.
 Gantt Chart :
                   P0                                  P1                  P2      P3
                  0                                   10                  16      18          22
                Initially only process P0 is present and it is allowed to run. But, when P0 completes,
                 all other processes are present. So, next process P1 from ready queue is selected
                 and
5CS4-03 Operating System   UNIT 1
5CS4-03 Operating System                                                                      UNIT 1
                  allowed to run till it completes. This procedure is repeated till all processes
                  completed
                  their execution.
                 Statistics :
        Process       Arrival       CPU Burst      Finish Time    Turnaround Time      Waiting Time
                     Time (T0)      Time (∆T)          (T1)         (TAT=T1-T0)        (WT=TAT-∆T)
          P0             0             10              10                   10                 0
          P1             1              6              16                   15                 9
          P2             3              2              18                   15                13
          P3             5              4              22                   17                13
                 Advantages:
                   Simple, fair, no starvation.
                   Easy to understand, easy to implement.
                 Disadvantages :
                   Not efficient. Average waiting time is too high.
                   Convoy effect is possible. All small I/O bound processes wait for one big CPU
                    bound process to acquire CPU.
                   CPU utilization may be less efficient especially when a CPU bound process is
                    running with many I/O bound processes.
                 This strategy can be implemented by using sorted FIFO queue. All processes in a
                 queue are sorted in ascending order based on their required CPU bursts. When CPU
                 becomes free, a process from the first position in a queue is selected to run.
                Example :
                 Consider the following set of four processes. Their arrival time and time required to
                 complete the execution are given in following table. Consider all time values in
                 milliseconds.
 Gantt Chart :
                              P0                     P2     P3          P1
                          0                        10      12          16              22
                Initially only process P0 is present and it is allowed to run. But, when P0 completes,
                 all other processes are present. So, process with shortest CPU burst P2 is selected
                 and allowed to run till it completes. Whenever more than one process is available,
                 such type of decision is taken. This procedure us repeated till all process complete
                 their
                 execution.
                Statistics :
       Process      Arrival Time   CPU Burst      Finish Time    Turnaround Time       Waiting Time
                        (T0)       Time (∆T)          (T1)         (TAT=T1-T0)         (Wt=TAT-∆T)
         P0               0            10             10                10                   0
         P1               1             6             22                21                   15
         P2               3             2             12                9                    7
5CS4-03 Operating System                                                                 UNIT 1
P3 5 4 16 11 7
                          P2                      3                             2
                          P3                      5                             4
                Gantt Chart :
                           P0           P1       P2    P1               P3           P0
                          0         1        3        5             9               13                22
                Initially only process P0 is present and it is allowed to run. But, when P1 comes, it has
                 shortest remaining run time. So, P0 is preempted and P1 is allowed to run. Whenever new
                 process comes or current process blocks, such type of decision is taken. This procedure is
                 repeated
                 till all processes complete their execution.
 Statistics :
       Process         Arrival time              Completion       Finish Time       Turnaround Time    Waiting Time
                           (T0)                   Time (∆T)           (T1)            (TAT=T1-T0)      (WT=TAT-∆T)
         P0                     0                     10                22                 22                12
         P1                     1                     6                  9                 8                  2
         P2                     3                     2                  5                 2                  0
         P3                     5                     4                 13                 8                  4
                Advantages :
                  Less waiting time.
                  Quite good response for short processes.
                Disadvantages :
                  Again it is difficult to estimate remaining time necessary to complete execution.
                  Starvation is possible for long process. Long process may wait forever.
                  Context switch overhead is there.
5CS4-03 Operating System                                                                UNIT 1
   I    Round Robin:
   V
              Selection Criteria:
              Each selected process is assigned a time interval, called time quantum or time slice.
               Process is allowed to run only for this time interval. Here, two things are possible:
               First, Process is either blocked or terminated before the quantum has elapsed. In
               this case the CPU switching is done and another process is scheduled to run.
               Second, Process needs CPU burst longer than time quantum. In this case, process is
               running at the end of the time quantum. Now, it will be preempted and moved to
               the end of the queue. CPU will be allocated to another process. Here, length of time
               quantum is critical to determine.
              Decision Mode:
               Preemptive:
              Implementation :
               This strategy can be implemented by using circular FIFO queue. If any process
               comes, or process releases CPU, or process is preempted. It is moved to the end of
               the queue. When CPU becomes free, a process from the first position in a queue is
               selected to run.
              Example :
               Consider the following set of four processes. Their arrival time and time required to
               complete the execution are given in the following table. All time values are in
               milliseconds. Consider that time quantum is of 4 ms, and context switch overhead is
               of 1 ms.
                      P0               0                          10
                      P1               1                            6
                      P2               3                            2
                      P3               5                            4
              Gantt Chart :
                       P0         P1         P2      P0        P3         P1       P0
5CS4-03 Operating System                                                                        UNIT 1
                         0         4 5      9 10 12 13 17 18 22 23 25 26 28
                At 4ms, process P0 completes its time quantum. So it preempted and another
                 process P1 is allowed to run. At 12 ms, process P2 voluntarily releases CPU, and
                 another process is selected to run. 1 ms is wasted on each context switch as
                 overhead. This
                 procedure is repeated till all process completes their execution.
                Statistics:
       Process        Arrival time       Completion     Finish Time     Turnaround Time       Waiting Time
                          (T0)            Time (∆T)         (T1)          (TAT=T1-T0)         (WT=TAT-∆T)
         P0                    0            10               28                  28                18
         P1                    1             6               25                  24                18
         P2                    3             2               12                  9                  7
         P3                    5             4               22                  17                13
                Advantages:
                  One of the oldest, simplest, fairest and most widely used algorithms.
                Disadvantages:
                  Context switch overhead is there.
                  Determination of time quantum is too critical. If it is too short, it causes frequent
                     context switches and lowers CPU efficiency. If it is too long, it causes poor response for
                     short interactive process.
                Implementation :
                 This strategy can be implemented by using sorted FIFO queue. All processes in a
                 queue are sorted based on their priority with highest priority process at front end.
                 When CPU becomes free, a process from the first position in a queue is selected to
                 run.
                Example :
                 Consider the following set of four processes. Their arrival time, total time required
                 completing the execution and priorities are given in following table. Consider all
                 time values in millisecond and small values for priority means higher priority of a
                 process.
                 Process    Arrival Time (T0)        Time required for completion ( ∆T)       Priority
                   P0                    0                              10                       5
                   P1                    1                              6                        4
                   P2                    3                              2                        2
                   P3                    5                              4                        0
                           Here, process priorities are in this order: P3 > P2 > P1 > P0.
                Gantt Chart :
P0 P3 P2 P1
                                    0                         10                 14 16          22
                Initially only process P0 is present and it is allowed to run. But, when P0 completes, all other
                 processes are present. So, process with highest priority P3 is selected and allowed to run till
                 it completes. This procedure is repeated till all processes complete their execution.
                Statistics :
       Process          Arrival time         Completion     Finish Time        Turnaround Time       Waiting Time
                            (T0)              Time (∆T)         (T1)             (TAT=T1-T0)          (TAT-∆T)
         P0                     0               10                 10                   10                  0
         P1                     1                6                 22                   21                 15
         P2                     3                2                 16                   13                 11
         P3                     5                4                 14                   9                   5
                 Process    Arrival Time (T0)      Time required for completion ( ∆T)    Priority
                     P0             0                             10                        5
                     P1             1                              6                        4
                     P2             3                              2                        2
                     P3             5                              4                        0
                Gantt chart:
                                     P0   P1       P2       P3        P1      P0
                                    0     1    3        5             9     13              22
                Initially only process P0 is present and it is allowed to run. But when P1 comes, it has higher
                 priority. So, P0 is preempted and P1 is allowed to run. This process is repeated till all
                 processes complete their execution.
 Statistics:
       Process      Arrival time     Completion         Finish Time        Turnaround Time       Waiting Time
                        (T0)          Time (∆T)             (T1)             (TAT=T1-T0)          (TAT-∆T)
         P0               0               10                     22                   22               12
         P1               1                6                     13                   12               6
         P2               3                2                     5                    2                0
         P3               5                4                     9                    4                0
                Advantages:
                  Priority is considered. Critical processes can get even better response time.
                Disadvantages:
                  Starvation is possible for low priority processes. It can be overcome by using
                    technique called ‘Aging’.
                  Aging: gradually increases the priority of processes that wait in the system for a
                    long time.
                  Context switch overhead is there.
5CS4-03 Operating System                                                                               UNIT 1
   (2)   Five batch jobs A to E arrive at same time. They have estimated running times 10,6,2,4 and
         8 minutes. Their priorities are 3,5,2,1 and 4 respectively with 5 being highest priority. For
         each of the following algorithm determine mean process turnaround time. Ignore process
         swapping overhead.
         Round Robin, Priority Scheduling, FCFS, SJF.
                                A                   B      C            D                      E
                   0                           10        16        18         22                              30
         Process       Arrival time   Completion          Finish Time       Turnaround Time        Waiting Time
                           (T0)        Time (∆T)              (T1)            (TAT=T1-T0)           (TAT-∆T)
           A                0             10                       10              10                    0
           B                0             6                        16              16                    10
           C                0             2                        18              18                    16
           D                0             4                        22              22                    18
           E                0             8                        30              30                    22
        Shortest Job
        First:
                                  C         D               B                  E                     A
                             0        2                6              12                20                     30
        Process         Arrival       Completion           Finish Time         Turnaround Time              Waiting Time
                      time (T0)        Time (∆T)               (T1)              (TAT=T1-T0)                 (TAT-∆T)
           A             0                 10                    30                     30                          20
           B             0                 6                     12                     12                          6
           C             0                 2                      2                         2                       0
           D             0                 4                      6                         6                       2
           E             0                 8                     20                     20                          12
Priority:
                                      B                E                   A            C            D
                                  0            6             14                    24       26            30
         Round Robin:
                            Time slice OR Quantum time= 2min.
                A       B        C       D       E        A       B           D        E        A         B        E         A        E        A
            0       2        4       6       8       10         12       14       16       18        20       22        24       26       28       30
           Process          Arrival time         Completion              Finish Time                Turnaround Time              Waiting Time
                                (T0)              Time (∆T)                  (T1)                     (TAT=T1-T0)                 (TAT-∆T)
                A                0                    10                          30                          30                          20
                B                0                    6                           22                          22                          16
                C                0                    2                           6                           6                           4
                D                0                    4                           16                          16                          12
                E                0                    8                           28                          28                          20
   (3)   Suppose that the following processes arrive for the execution at the times indicated. Each
         process will run the listed amount of time. Assume preemptive scheduling.
         Process            Arrival Time (ms)                 Burst Time
           (ms) P1               0.0                                 8
           P2                    0.4                                 4
           P3                    1.0                                 1
         What is the turnaround time for these processes with Shortest Job First scheduling algorithm?
   5CS4-03 Operating System                                                                  UNIT 1
       (4) Consider the following set of processes with length of CPU burst time given in milliseconds.
            Process     Burst Time Priority
                P1           10               3
                P2           1                 1
                P3           2                3
                P4           1                4
                P5           5                2
Assume arrival order is: P1, P2, P3, P4, P5 all at time 0 and a smaller priority number implies a
higher priority. Draw the Gantt charts illustrating the execution of these processes using preemptive priority schedu
5CS4-03 Operating System                                                                  UNIT 1
  (2)   Explain different mechanisms for achieving mutual exclusion with busy waiting.
        Disabling interrupts
              In this mechanism a process disables interrupts before entering the critical
               section and enables the interrupt immediately after exiting the critical section.
                             while( true )
                             {
                                     < disable interrupts >;
                                     < critical section >;
                                     < enable interrupts >;
                                     < remainder section>; }
5CS4-03 Operating System                                                                UNIT 1
              If it is 1, means some other process is inside the critical section so, the process
               requesting to enter the critical region will have to wait until it becomes zero.
              This mechanism suffers the same problem (race condition). If process P0 sees
               the value of lock variable 0 and before it can set it to 1, context switching occurs.
              Now process P1 runs and finds value of lock variable 0, so it sets value to 1,
               enters critical region.
              At the same point of time P0 resumes, sets the value of lock variable to 1, enters
               critical region.
              Now two processes are in their critical regions accessing the same shared
               memory, which violates the mutual exclusion condition.
Strict Alteration:
                         Process 1                                   Process 2
              In this proposed solution, the integer variable 'turn' keeps track of whose turn is
               to enter the critical section.
              Initially turn=0. Process 1 inspects turn, finds it to be 0, and enters in its critical
               section. Process 2 also finds it to be 0 and therefore sits in a loop continually
               testing 'turn' to see when it becomes 1.
              Continuously testing a variable waiting for some value to appear is called the
               busy waiting.
              When process 1 exit from critical region it set turn to 1 and now process 2 can
               find it to be 1 and enters in to critical region.
              In this way both the process get alternate turn to enter in critical region.
              Taking turns is not a good idea when one of the processes is much slower than
               the other.
              Consider the following situation for two processes P0 and P1
5CS4-03 Operating System                                                                    UNIT 1
                      P0 leaves its critical region, set turn to 1, enters non critical region.
                      P1 enters and finishes its critical region, set turn to 0.
                      Now both P0 and P1 in non-critical region.
                      P0 finishes non critical region, enters critical region again, and leaves this
                       region, set turn to 1.
                      P0 and P1 are now in non-critical region.
                      P0 finishes non critical region but cannot enter its critical region because
                       turn = 1 and it is turn of P1 to enter the critical section.
                      Hence, P0 will be blocked by a process P1 which is not in critical region.
                       This violates one of the conditions of mutual exclusion.
              It wastes CPU time, so we should avoid busy waiting as much as we can.
              Can be used only when the waiting period is expected to be short.
              Test and Set Lock that works as follows. It reads the contents of the memory
               word lock into register RX and then stores a nonzero value at the memory
               address lock.
              The operations of reading the word and storing into it are guaranteed to be
               indivisible—no other processor can access the memory word until the
               instruction is finished.
              The CPU executing the TSL instruction locks the memory bus to prohibit other
               CPUs from accessing memory until it is done.
              The solution using TSL is given above.
              There is a four-instruction subroutine in a typical assembly language code.
              The first instruction copies the old value of lock to the register and then sets lock
               to 1.
5CS4-03 Operating System                                                                   UNIT 1
              Then the old value is compared with 0. If it is nonzero, the lock was already set,
               so the program just goes back to the beginning and tests it again.
              Sooner or later it will become 0 (when the process currently in its critical region
               is done with its critical region), and the subroutine returns, with the lock set.
              Clearing the lock is simple. The program just stores a 0 in lock. No special
               instructions are needed.
              One solution to the critical region problem is now straightforward.
              Before entering its critical region, a process calls enter_region, which does busy
               waiting until the lock is free; then it acquires the lock and returns.
              Whenever the process wants to leave critical region, it calls leave_region, which
               stores a 0 in lock.
              As with all solutions based on critical regions, the processes must call
               enter_region and leave_region at the correct times for the method to work.
Exchange Instruction
        Peterson’s Solution
              By combining the idea of taking turns with the idea of lock variables and warning
               variables, Peterson discovered a much simpler way to achieve mutual exclusion.
              This algorithm consists of two procedures written in ANSI C as shown below.
              Before using the shared variables (i.e., before entering its critical region), each
               process calls procedure enter_region with its own process number, 0 or 1, as
               parameter.
              This call will cause it to wait, if needed, until it is safe to enter critical region.
              After it has finished with the shared variables, the process calls leave_region to
               indicate that it is done and to allow the other process to enter, if it so desires.
              Let us see how this solution works. Initially neither process is in its critical region.
              Now process 0 calls enter_region. It indicates its interest by setting its array
               element and sets turn to 0.
              Since process 1 is not interested, enter_region returns immediately. If process 1
               now calls enter_region, it will be blocked there until interested [0] goes to FALSE,
               an event that only happens when process 0 calls leave_region to exit the critical
               region.
              Now consider the case that both processes call enter_region almost
               simultaneously. Both will store their process number in turn. Whichever store is
               done last is the one that counts; the first one is overwritten and lost.
              Suppose that process 1 stores last, so turn is 1. When both processes come to the
5CS4-03 Operating System                                                                UNIT 1
               while statement, process 0 executes it zero times and enters its critical region.
              Process 1 loops and does not enter its critical region until process 0 exits its
               critical region.
               task, the low priority task is temporarily assigned the priority of the highest
               waiting priority task for the duration of its own use of the shared resource, thus
               keeping medium priority tasks from pre-empting the (originally) low priority
               task, and thereby affecting the waiting high priority task as well. Once the
               resource is released, the low priority task continues at its original priority level.
  (4)   What is Producer Consumer problem? Explain how sleep and wakeup system
        calls work.
              Some inter-process communication primitives cause the calling process to be
               blocked instead of wasting CPU time when they are not allowed to enter their
               critical regions.
              One of the simplest pair is the sleep and wakeup.
              Sleep is a system call that causes the caller to block, that is, be suspended until
               another process wakes it up.
              The wakeup call has one parameter, the process to be awakened.
              Alternatively, both sleep and wakeup each have one parameter, a memory
               address used to match up sleep with wakeup.
              As an example of how these primitives can be used, let us consider the
               producer- consumer problem (also known as the bounded-buffer problem).
              Two processes share a common, fixed size buffer.
              One of them, the producer, puts information into the buffer, and the other one,
               the consumer, takes it out.
              Trouble arises when the producer wants to put a new item in the buffer, but
               buffer is already full.
              The solution for the producer is to go to sleep whenever the buffer is full.
              When the consumer removes one or more items from the buffer and vacant
               slots will be available, consumer awakens the producer.
              Similarly, if the consumer wants to remove an item from the buffer and sees that
               the buffer is empty, it goes to sleep until the producer puts something in the
               buffer and wakes it up.
              This approach sounds simple enough, but it leads to the same kinds of race
               conditions we saw earlier with the spooler directory.
              To keep track of the number of items in the buffer, we will need a variable, count.
              Buffer can hold maximum N data items. The producer first check the value of
               count, if it is N then producer will go to sleep.
5CS4-03 Operating System                                                                UNIT 1
              If count is less than N, then the producer will add an item and increment count.
              The consumer’s code is similar: first test count to see if it is 0.
              If it is, go to sleep, if it is nonzero, remove an item and decrement the counter.
              Each of the processes also tests to see if the other should be awakened, and if
               so, wakes it up.
              The code for both producer and consumer is shown in figure 3.1.
Figure 3-1. The producer-consumer problem using sleep & wake up system calls.
              The race condition can occur in producer consumer example because access to
               count is unconstrained.
              The following situation could possibly occur.
              The buffer is empty and the consumer has just count to see if it is 0.
5CS4-03 Operating System                                                                UNIT 1
              At that instant, the scheduler decides to stop running the consumer temporarily
               and start running the producer.
              The producer inserts an item in the buffer, increments count, and notices that it
               is now 1. Reasoning that count was just 0, and thus the consumer must be
               sleeping, the producer calls wakeup to wake the consumer up.
              Unfortunately, the consumer is not yet logically asleep, so the wakeup signal is lost.
              When the consumer next runs, it will test the value of count it previously read,
               find it to be 0, and go to sleep. Sooner or later the producer will fill up the buffer
               and also go to sleep. Both will sleep forever.
              The essence of the problem here is that a wakeup sent to a process that is not
               (yet) sleeping is lost.
              The simpler solution to lost wake up signal is to add wakeup waiting bit.
              When a wakeup is sent to a process that is still awake, this bit is set.
              Later, when the process tries to go to sleep, if the wakeup waiting bit is on, it will
               be turned off, but the process will stay awake.
              The wakeup waiting bit is a piggy bank for wakeup signals.
              But with three or more processes one wakeup waiting bit is insufficient. So, the
               problem of race condition will be still there.
              We want functions insert _item and remove_item such that the following hold:
                  1. Mutually exclusive access to buffer: At any time only one process should
                     be executing insert_item or remove_item.
                  2. No buffer overflow: A process executes insert_item only when the buffer
                     is not full (i.e., the process is blocked if the buffer is full).
                  3. No buffer underflow: A process executes remove_item only when the
                     buffer is not empty (i.e., the process is blocked if the buffer is empty).
                  4. No busy waiting.
                  5. No producer starvation: A process does not wait forever at insert_item()
                     provided the buffer repeatedly becomes full.
                  6. No consumer starvation: A process does not wait forever at
                     remove_item() provided the buffer repeatedly becomes empty.
              In the above algorithm we have N slots in buffer, into which producer can insert
               item and from which consumer can consume item only.
              Semaphore is special kind of integer.
              Empty is the number of empty buffer slots and full is the number of full buffer slots.
              Semaphore variable Mutex is used for mutual exclusion.
              Initially there no item in buffer means buffer is empty.
              Whenever Producer wants to insert some item in buffer, it calls void producer
               (void) and follows the steps given below:
                    1) Generate something to put in buffer
                    2) As producer will be inserting item in the buffer, it will decrement empty
                        count.
                    3) Then it will perform down operation on the Mutex to get the exclusive
                        access of shared buffer so, consumer cannot access buffer until producer
                        finishes its work.
                    4) Now producer enters in the critical region i.e. it inserts the item into buffer.
                    5) When it leaves the critical region, it does up on Mutex.
                    6) Finally, it Increments the full count as one item is inserted into the buffer.
              Consumer will consume some item from buffer and call void consumer (void)
               and follows the steps given below:
                  1) Decrement the value of full count as consumer will remove an item from
                       buffer.
                  2) Then it will perform down the on Mutex so that, producer cannot access
                       buffer until consumer will finish its work.
                  3) Enter in critical section.
                  4) Take item from buffer.
                  5) Up Mutex and exit from critical section.
                  6) Increment empty count.
                  7) Consume that item.
               writer, if there is one, to get in.Suppose that while a reader is using the
               database, another reader comes along. Since having two readers at the same
               time is not a problem, the second reader is admitted.
              A third and subsequent readers can also be admitted if they come along.
              Now suppose that a writer comes along. The writer cannot be admitted to the
               database, since writers must have exclusive access, so the writer is suspended.
              As long as at least one reader is still active, subsequent readers are admitted.
              As a consequence of this strategy, as long as there is a steady supply of readers,
               they will all get in as soon as they arrive.
              The writer will be kept suspended until no reader is present. If a new reader
               arrives, say, every 2 seconds, and each reader takes 5 seconds to do its work, the
               writer will never allow accessing the database.
              To prevent this situation, the solution is given as: when a reader arrives and a
               writer is waiting, the reader is suspended behind the writer instead of being
               admitted immediately.
              In this way, a writer has to wait for readers that were active when it arrived to
               finish but does not have to wait for readers that came along after it. The
               disadvantage of this solution is that it achieves less concurrency and thus lower
               performance.
                This action causes the calling process to block. It also allows another process that
                 had been previously prohibited from entering the monitor to enter now.
5CS4-03 Operating System                                                                 UNIT 1
               This other process, for example, the consumer, can wake up its sleeping partner
                by doing a signal on the condition variable that its partner is waiting on.
               If a signal is done on a condition variable on which several processes are waiting,
                only one of them, determined by the system scheduler, is revived.
        mutex_lock:
              TSL REGISTER,MUTEX          | copy Mutex to register and set Mutex
              to 1 CMP REGISTERS, #0      | was Mutex zero?
              JZE ok                      | if it was zero, Mutex was unlocked, so
              return CALL thread_yield    | Mutex is busy; schedule another thread
              JMP mutex_lock              | try again later
        ok:   RET                         | return to caller; critical region entered
        mutex_unlock:
              MOVE MUTEX,#0                | store a 0 in
              Mutex RET                    | return to
              caller
                 Figure 3.5. Implementation of Mutex lock and Mutex Unlock
               The "pick up forks" part is the key point. How does a philosopher pick up forks?
               The problem is each fork is shared by two philosophers and hence a shared
                resource. We certainly do not want a philosopher to pick up a fork that has
                already been picked up by his neighbor. This is a race condition.
               To address this problem, we may consider each fork as a shared item protected
                by a mutex lock.
               Each philosopher, before he can eat, locks his left fork and locks his right fork. If
                the acquisitions of both locks are successful, this philosopher now owns two
                locks (hence two forks), and can eat.
               After finishes easting, this philosopher releases both forks, and thinks. This
                execution flow is shown below.
Think
Eat
                  message and sends back a full one and receiver receives that filled message and
                  consume or use that message.
                 In this way, the total number of messages in the system remains constant in time.
                 If the producer works faster, all the messages will end up full, waiting for the
                  consumer; the producer will be blocked, waiting for an empty to come back.
                 If the consumer works faster, then the reverse happens, all the messages will be
                  empties waiting for the producer to fill them up; the consumer will be blocked,
                  waiting for a full message.
                 Two of the common variants of Message Passing are as follows; one way is to
                  assign each process a unique address and have messages be addressed to
                  processes. The other way is to use a data structure, called a mailbox, a place to
                  buffer a certain number of massages, and typically specified when the mailbox is
                  created. For the Producer Consumer problem, both the producer and the
                  consumer would create mailboxes large enough to hold N messages.
        Barrier
                 In this mechanism some application are divided into phases and have that rule
                  that no process may proceed into the next phase until all process completed in
                  this phase and are ready to proceed to the next phase.
                 This behavior is achieved by placing barrier at the end of each phase.
                 When a process reaches the barrier, it is blocked until all processes have reach at
5CS4-03 Operating System                                                               UNIT 1
               the barrier.
              In the above fig. (a) There are four processes with a barrier.
              In fig. (b) Processes A, B and D are completed and process C is still not completed
               so until process C will complete, process A,B and D will not start in next phase.
              In fig. (c) Process C completes all the process start in next phase.
              As processes enter the system, they are put into a job queue (batch jobs), which
               consists of all processes in the system.
              The processes that are residing in main memory and are ready and waiting to
               execute are kept on a list called the ready queue and wait there until it is
               selected for execution or dispatched.
              The process therefore may have to wait for the disk. The list of processes waiting
               for a particular I/O device is called a device queue. Each device has its own
               device queue.
              Once the process is allocated the CPU and is executing, one of several events
               could occur:
                     The process could issue an I/O request and then be placed in an I/O queue.
                     The process could create a new sub process and wait for the sub
                      process's termination.
                     The process could be removed forcibly from the CPU, as a result of an
                      interrupt, and be put back in the ready queue.
        Scheduler
              Schedulers are special system software which handles process scheduling in
               various ways.
              Their main task is to select the jobs to be submitted into the system and to
               decide which process to run.
              Schedulers are of three types:
               1. Long Term Scheduler
               2. Short Term Scheduler
               3. Medium Term Scheduler
        Long Term Scheduler
              It is also called job scheduler.
              Long term scheduler determines which programs are admitted to the system for
               processing.
              Job scheduler selects processes from the queue and loads them into memory for
               execution.
              Process loads into the memory for CPU scheduling. The primary objective of the
               job scheduler is to provide a balanced mix of jobs, such as I/O bound and
               processor bound.
              It also controls the degree of multiprogramming.
5CS4-03 Operating System                                                           UNIT 1