Time-sharing
Hdw save u-regs(A) to k-stack(A)
OS save k-regs(A) to PCB(A)
OS restore k-regs(B) from PCB(B)
Hdw restore u-regs(B) from k-stack(B)
CPU scheduler decides which runs next
Dispatcher performs context switch (switch context, switch to user mode, jump to proper location)
Dispatch latency: time it takes
Timing: CPU scheduling decisions make occur when a process: run->wait, run->ready, wait->ready, end (->ready may be preemptive)
Scheduling Overview
Criteria: CPU utilization, throughput, turnaround time, waiting time, response time
Assumptions:
- same amount of time
- same arrive time
- no preemption
- only CPU, no I/O
- length known
FCFS
just FIFO
now, relax assumption 1
Convoy effect: short queued behind heavyweight
SJF
shortest job first
it's a special case of priority
Priority
priority highest first
Starvation: low prio may never execute
Aging: as time goes by, prio++
HRRN
highest response ratio next
relax assumption 3: preemptive (modern)
Preemptive SJF
also called STCF, SRTF
good for turnaround time, not good for response time
Round-Robin
time-slicing
good for response time, not good for turnaround time
relax 4, consider I/O, then... break job into subjobs
relax 5, can only estimate length, use exp averaging (T_{n+1}=alpha t_n + (1-alpha) T_n)
MLQ
ready queue separate (e.g. fore interactive, back batch)
proc permanently in a given queue
each queue has own algorithm (e.g. fore RR, back FCFS)
cross-queue schedule: fixed priority, time slice
MLFQ
relax all assumptions
goal: optimize turnaround time, minimize response time
idea: learn the feature (first assumes a short, if not, move down)
Original Version
- A>B, A run
- A=B, RR
- new, highest
- uses up entire time slice, prio reduce
- give up before slice end, prio keep
Limitations: starvation (too many short), game (hack), changeable
Priority Boost
New Rule: After some period S, move all jobs in the topmost queue
Improvement: no starvation, prio adjust
Better Accouting
how to prevent the game (hack)?
New Rule: Once use up (acc), prio reduced
note: vary length across different queues
etc
Thread Scheduling
it is kernel-level threads(not processes) that are being scheduled
M:1/M:M: thread lib schedules uer-level threads to run on LWP
Multiple-Processor Scheduling
Cache Affinity
Asymmetric MP: single-queue mp scheduling, all job in a single queue
Symmetric MP: one queue per CPU, each queue a particular discipline,
Real-Time
Soft: no guarantee
Hard: must by deadline
Interrupt/Dispatch latency