User Level and Kernel Level Thread Management
User-Level and Kernel-Level Threading in Multi-CPU Systems
Interaction Between User-Level Threading Library and Kernel-Level Thread Management
Focus on management interactions when utilizing multiple CPUs as opposed to single CPU scenarios.
Single CPU allows straightforward scheduling and execution of user-level threads as they are all managed on one CPU.
In a multi-CPU environment, kernel-level threads that support a single process can run concurrently across multiple CPUs.
Scenario Overview
Three user-level threads identified as T1, T2, and T3, with the following priorities:
T3: Highest Priority
T2: Medium Priority
T1: Lowest Priority
Mutex and Blocking Scenario
T2 is currently executing in one of the kernel-level threads and holds a mutex.
T3, which has a higher priority, is blocked waiting for this mutex.
Meanwhile, T1 is running on another CPU.
Mutex Release and Thread Scheduling
When T2 releases the mutex, it causes T3 to become runnable due to the now available mutex.
At this point, all three threads (T1, T2, T3) are runnable, necessitating priority-based execution:
Preemption of T1, the lowest priority thread, is required to allow T3 to run since it has higher priority.
Context of Thread Execution
This realization about thread management occurs in the context of T2’s execution as it releases the mutex.
The user-level threading library is invoked during the unlock operation initiated by T2.
Requirement for Inter-CPU Communication
The challenge arises when T1 is running on a different CPU than where T2 executed the unlock;
Direct modification of registers or program counters of one CPU from another is not feasible.
A signal (such as an interrupt) must be sent from the context of one thread on a CPU to the thread on another CPU.
Purpose of Sending Signal
The purpose of sending the signal is to trigger the library code execution locally on the other CPU.
The user-level threading library on the second CPU will then make the decision to schedule T3 since it is the highest priority thread.
T1 will subsequently be blocked since it has the lowest priority among the runnable threads.
Conclusion
The introduction of multiple CPUs complicates the management and scheduling of threads, involving complex interactions between user-level and kernel-level threads.
A significant aspect of multi-CPU thread management involves careful coordination to ensure that high-priority threads are scheduled properly across different processing units, highlighting the intricacies of concurrency in systems programming.