ITFN 2601 Introduction to Operating Systems

Download Report

Transcript ITFN 2601 Introduction to Operating Systems

ITFN 2601
Introduction to Operating
Systems
Lecture 4/5
Scheduling
Agenda
Scheduling
Batch
Interactive
Real-Time
Threads
Processes
A process is an executing Program
Multiprogramming
Consist of Program, input, output and a
state
Process Creation
System Initialization
System call by running process
User request to create new process
Initiation of batch job
Process Termination
Normal Exit
Error Exit
Fatal Error
Killed by another process
Process States
Running
Ready
Blocked
Threads
Lightweight processes
Threads handle all execution activities
A thread is a program counter, a stack,
and a set of registers
Thread creation is relatively cheap in
terms of CPU costs
Thread Usage
Programming model becomes simpler
Easy to create and destroy
Speeds up applications
Useful on systems with multiple CPUs
User-level threads
Get the time of only one process to execute
User-level threads are managed by runtime
library routines linked into each application so
that thread management operations require no
kernel intervention.
User-level threads are also flexible; they can be
customized to the needs of the language or user
without kernel modification
User-level threads execute within the context of
traditional processes
The Cost and Benefits of
User-Level Threads
Thread operations do not have to cross
protection boundary.
Parameters do not need to be copied.
Kernel implements a single policy or pays
overhead of managing multiple policies.
Applications can link in the correct thread
management policy for their needs.
Performance is inherently better in user-level
threads.
User-level threads that issue blocking calls to
the kernel will block an entire kernel thread
User-level Thread Problems
How to block system calls
Page Faults
Thread must give up the CPU
Threads in the Kernal
Avoids the system integrations problems
exhibited by user-level threads, because the
kernel directly schedules each applications
threads onto physical processors
Performance has been typical an order of
magnitude worse than the best-case
performance of user-level threads
Employ user-level threads, which have good
performance and correct behavior provided the
application is uniprogrammed and does no I/O,
or employ kernel threads, which have worse
performance but are not as restricted.
The Cost and Benefit of
Kernel-Level Threads
Kernel threads are expensive!
Kernel does not understand application
behavior.
Deschedule a thread holding a spin lock.
Thread priority inversion.
May run out of kernel threads to handle
all the user threads.
"Correct" Kernel Level Support
Scheduler Activations
Threads are needed for parallel applications.
User-level and kernel-level threads both have
problems.
User-level threads offer good performance, but
does not handle I/O well.
Kernel-level threads are expensive, but correct.
Scheduler Activations
SAs notify user-level schedulers of changes in
kernel scheduling decisions.
SAs provide kernel space for threads that block
in the kernel.
Create one activation for each virtual
processor.
Kernel creates SAs to upcall into applications,
notifying them of scheduling events.
Scheduler Activations (cont)
Key difference between SAs and kernel threads
When an SA blocks, the application is notified by a
different SA.
The blocking SA's thread is marked blocked and the
old SA is freed.
The new SA can now be scheduled.
The number of SAs under control of the application
never changes (unless requested/told explicitly).
Kernel level state is passed to thread system on
upcall, so that registers of the blocking thread
are accessible to the user-level scheduler.
Popup Threads
Thread is created spontaneously to handle an
incoming request.
Incoming message mapped into thread's
address space
Advantages over traditional request:
 no waiting on work (no context needs to be saved)
 creating new thread is cheaper than restoring old
thread (no context is saved)
Definition of Critical Sections
 The overlapping portion of each
process, where the shared variables are
being accessed.
Mutual Exclusion --- if Pi is executing
in one of its critical sections, noPj , i ≠ j
, is executing in its critical sections
Race Conditions
Race conditions generally involve one or more
processes accessing a shared resource (such a
file or variable), where this multiple access has
not been properly controlled
Race conditions appear in three situations:
implicit calls to schedule from within a function
 blocking operations
access to data shared by interrupt code and system
calls.
Critical Regions
No two processes may be simultaneously
inside their critical regions
No assumptions may be made about
speeds or the number of CPUs
No process running outside its critical
region may block another process
No process should have to wait forever to
enter its critical region
Mutual Exclusion
Busy Waiting or Spin Lock
 Priority inversion
Producer-Consumer Problem
Scheduling
Process Conditions
Processor Bound
I/O Bound
Scheduling how?
Pre-emptive
Non-pre-emptive
Scheduling: When
New Process is Created
Parent process
Child process
Process Exits
When a process Blocks
I/O Interrupt occurs
Clock Interrupts
Non preemptive
Preemptive
Objectives of a Good
Scheduling Policy
Fairness
Efficiency
Low response time (important for
interactive jobs)
Low turnaround time (important for
batch jobs)
High throughput
Scheduling
Throughput.
The amount of useful work accomplished per unit
time. This depends, of course, on what constitutes
``useful work.'' One common measure of
throughput is jobs/minute (or second, or hour,
depending on the kinds of job).
Utilization.
For each device, the utilization of a device is the
fraction of time the device is busy. A good scheduling
algorithm keeps all the devices (CPU's, disk drives,
etc.) busy most of the time.
Scheduling
Turnaround.
The length of time between when the job arrives in the
system and when it finally finishes.
Response Time.
The length of time between when the job arrives in the
system and when it starts to produce output. For
interactive jobs, response time might be more important
than turnaround.
Waiting Time.
The amount of time the job is ready (runnable but not
running). This is a better measure of scheduling quality
than turnaround, since the scheduler has no control of
the amount of time the process spends computing or
blocked waiting for I/O.
Preemption
Needs a clock interrupt (or equivalent)
Needed to guarantee fairness
Found in all modern general purpose
operating systems
Without preemption, the system
implements ``run to completion (or
yield)''
Semaphores
• Semaphores are used to block a process from
entering a `critical section' of its machine code, if
this critical section accesses a shared resource (e.g
a memory location) which another program is
currently accessing
A process cannot atomically test the state of the
semaphore, and block itself if the semaphore is owned by
another process. However, the operating system can do
this work, as it can ensure that the running process is not
pre-empted while the test, and possible block, are
performed. This is why the operations on semaphores are
typically implemented as system calls.
First-Come-First-Served
The simplest possible scheduling
discipline is called First-come, firstserved (FCFS). The ready list is a simple
queue (first-in/first-out). The scheduler
simply runs the first job on the queue
until it blocks, then it runs the new first
job, and so on. When a job becomes
ready, it is simply added to the end of the
queue
FCFS
Main advantage of FCFS is that it is easy
to write and understand
No starvation
If one process gets into an infinite loop, it
will run forever and shut out all the
others.
FCFS tends to excessively favor long
bursts. CPU-bound processes
Shortest-job-first (SJF)
Whenever the CPU has to choose a burst
to run, it chooses the shortest one
Non-preemptive policy
preemptive version of the SJF, called
shortest-remaining-time-first (SRTF).
Starvation is possible
Three-Level Scheduling
Admission Scheduler – which jobs to
admit to the system
Memory Scheduler – Which processes are
kept in memory and which on disk
CPU Scheduler – Pick ready process to
run
Round-Robin
Round-robin (RR). RR keeps all the burst
in a queue and runs the first one, like
FCFS. But after a length of time q (called
a quantum), if the current burst hasn't
completed, it is moved to the tail of the
queue and the next burst is started.
Round Robbin
An important preemptive policy
Essentially the preemptive version of FCFS
The key parameter is the quantum size q
When a process is put into the running state a
timer is set to q.
If the timer goes off and the process is still
running, the OS preempts the process.
This process is moved to the ready state (the
preempt arc in the diagram.
The next job in the ready list (normally a queue)
is selected to run
Round Robbin
As q gets large, RR approaches FCFS
As q gets small, RR approaches PS
What q should we choose
Tradeoff
Small q makes system more responsive
Large q makes system more efficient since
less switching
Priority Scheduling
Always to run the highest priority burst
preemptive or non-preemptive
Priorities can be assigned externally to
processes based on their importance
Assigned (and changed) dynamically
Other Interactive Scheduling
Multiple Queues
Shortest Process Next
Guaranteed Scheduling
Lottery Scheduling
Fair-Share Scheduling
Scheduler Goals
Generic Goals
Fairness of processor allocation
Enforcement of Scheduling Policies
Balance of utilization
Batch-based Goals
Maximize throughput of jobs
Minimize turnaround on jobs
Scheduler Goals II
Interactive System Goals
Minimize response time for user I/O
User expectations should be met
Real-time System Goals
Deadlines must be met for Process
Completion
System Performance must be predictable
Scheduling Algorithms
(Batch)
FIFO (First In First Out) NON-PREEMPTIVE
Fairest
Low throughput
High Turnaround
Shortest First NON-PREEMPTIVE
High Throughput
Low Turnaround
Unfair for Large Jobs
Scheduling Algorithms
(Batch, cont)
Shortest Remaining - PREEMPTIVE
High Turnaround on Long Jobs
Unfair for Large Jobs
Multi-Scheduling (CPU or Memory Limited)
HIGH Turnaround (disk swaps)
Throughput highly variable, probably low
Fairness highly variable
Scheduling Algorithms
(Interactive)
Round Robin - PREEMPTIVE
Fairest overall
Response time variable but finite
Priority Scheduling - PREEMPTIVE
Fair
“More Fair” for users with higher priorities
Response time inverse to priority
Windows/Unix typically implement this
Round Robin, Example
Scheduling Algorithms
(Real-Time)
Small Jobs
High Priority
Periodic/Aperiodic
Schedulable?
Iff the sum of the ratios CPU Time to Period
time is less than one
Sum(CPU/Period) <= 1
Static/Dynamic?
Summary
Scheduler responsible for many goals
Scheduling algorithms complex
Know your math!