Processes, threads, and state
A process provides an address space and execution environment. Its threads share that address space but maintain separate registers and stacks. A ready thread awaits CPU time; a blocked thread awaits an event such as I/O completion.
Check yourself: Does the event make a task runnable or actually dispatch it?
Scheduling metrics
Turnaround is completion minus arrival time. Response time measures arrival to first CPU dispatch. For one CPU burst without I/O, waiting equals turnaround minus burst time. Draw arrivals, preemptions, idle intervals, and any specified context-switch cost on a timeline.
Check yourself: Have you specified preemption and tie-breaking before selecting the next task?
Synchronization and deadlock
Critical sections protect invariants. Counting semaphores can track available resource units; mutexes protect exclusive access. Deadlock requires mutual exclusion, hold-and-wait, no preemption, and circular wait together. Starvation instead allows others to progress while one task keeps being postponed.
Check yourself: Can interleaved operations violate the invariant despite looking correct individually?
Paging and address fields
In byte-addressed memory with 2^p-byte pages, the lowest p address bits form the offset. Translation replaces the virtual page number with a physical frame number, preserving the offset. Page-table entry size determines table storage, not offset width.
Check yourself: Did you convert page size to bytes before taking its logarithm?
TLB misses and page faults
A TLB caches translations. A miss requires a page-table lookup, not necessarily a page fault: the page may be resident. Weight complete hit and miss paths to calculate effective access time, including page-table levels and fault service only as specified.
Check yourself: Does each timing path include the final data access?