This lecture covers semaphores as synchronization primitives with counters and their operations (up/post and down/wait). Topics include binary semaphores as mutexes, semaphore usage in producer-consumer problems, and handling deadlocks caused by semaphore misuse.
This lecture explains threads as lightweight processes sharing memory space. It discusses thread control blocks, POSIX threads in Linux, concurrency issues like race conditions, critical sections, locks, and synchronization primitives.
This lecture covers how the OS runs processes, handles system calls, and performs context switches. It details privilege levels, kernel vs user stacks, trap instructions, interrupt descriptor tables, and saving/restoring context during process switches.
This lecture discusses scheduling policies used by OS to allocate CPU time among processes. Topics include preemptive vs non-preemptive scheduling, algorithms like FIFO, SJF, Round Robin, Multi-level Feedback Queues, and considerations for multicore processors.
This lecture introduces foundational design principles of computer systems such as modularity, abstraction, layering, virtualization, hierarchy, concurrency, caching, indexing, replication, and logging to build robust systems.