Я узнал о реализации потоков и наткнулся на легкую реализацию процесса гибридной реализации пользователь / ядро. У меня есть несколько вопросов об использовании этого типа модели. Эта модель представлена в книге Распределенные системы - Принципы и парадигмы: 2-е издание книги Tanenbaum & Van Steen. Я не студент, а самообучающийся.
Ситуация 1:
LWP связал себя с работающим потоком и переключил его контексты. Поток выполняет несистемный вызов, который блокирует, и другие потоки недоступны.
Q1: Поскольку другие потоки недоступны, это также должно означать, что также нет доступных LWP. ,Остаётся ли контекст в потоке пользовательского уровня или в LWP уровня ядра?
Q2: Если контекст не переключается в LWP, поток ожидает, пока не станет ни сам, ни другойпоток доступен?
Q3: Если контекст переключается на LWP, это просто в конечном итоге приведет к переключению контекста обратно на исходный поток (поскольку мы можем сделать вывод, что все остальные потокисвязан с LWP)?
Ситуация 2:
Предположим, мы статически назначаем отдельный поток LWP.
Q1: Может ли поток ещепереключать контексты в другой поток, если он блокирует? Может ли поток переключать контексты на связанный с ним LWP и этот контекст переключать на другой поток? Или это привязка LWP-Thread для времени жизни программы?
Q2: Если переключение контекста на уровне пользователя выходит за рамки, это означает, что несистемные вызовы этого блокапо сути, задержать LWP?