1. Scheduling Algorithms
1.1. First Come, First-Served Scheduling
1.1.1. The process that requests the CPU first is allocated the CPU first
1.1.2. Easily managed with a FIFO queue
1.1.3. The code is simple to write and understand
1.1.4. The average waiting time is often quite long
1.2. Shortest-Job-First Scheduling
1.2.1. Associate with each process the length of its next CPU burst
1.2.2. Use these lengths to schedule the process with the shortest time
1.2.3. SJF gives minimum average waiting time for a given set of processes
1.2.4. The difficulty is knowing the length of the next CPU request
1.3. Round-Robin Scheduling
1.3.1. Similar to FCFS scheduling
1.3.2. Each process gets a small unit of CPU time
1.3.3. Timer interrupts every quantum to schedule next process
1.4. Priority Scheduling
1.4.1. A priority number (integer) is associated with each process
1.4.2. Smallest integer = highest priority
1.4.3. SJF is priority scheduling where priority is the inverse of predicted next CPU burst time
1.4.4. Aging – as time progresses increase the priority of the process
1.5. Multilevel Queue Scheduling
1.5.1. With priority scheduling, have separate queues for each priority
1.5.2. Schedule the process in the highest-priority queue!
1.5.3. Prioritization based upon process type
1.6. Multilevel Feedback Queue Scheduling
1.6.1. A process can move between the various queues
1.6.2. Multilevel-feedback-queue scheduler defined by some parameters
2. Thread Scheduling
2.1. Contention Scope
2.1.1. Distinction between user-level and kernel-level threads
2.1.2. When threads supported, threads scheduled, not processes
2.1.3. The thread library schedules userlevel threads to run on an available LWP
2.2. Pthread Scheduling
2.2.1. API allows specifying either PCS or SCS during thread creation
2.2.2. Can be limited by OS – Linux and macOS only
3. Multi-Processor Scheduling
3.1. Multicore Processors
3.1.1. Multicore CPUs
3.1.2. Multithreaded cores
3.2. Load Balancing
3.2.1. Push migration – periodic task checks load on each processor
3.2.2. Pull migration – idle processors pulls waiting task from busy processor
3.3. Processor Affinity
3.3.1. Soft affinity
3.3.2. Hard affinity
3.4. Heterogeneous Multiprocessing
4. Basic Concepts
4.1. CPU-I/O
4.1.1. a cycle of CPU execution
4.1.2. I/O wait
4.2. CPU Scheduler
4.2.1. Queue may be ordered in various ways
4.3. Scheduling
4.3.1. Preemptive
4.3.2. Nonpreemtive
4.4. Dispatcher
4.4.1. Switching context
4.4.2. Switching to user mode
4.4.3. Jumping to the proper location in the user program to restart that program