#multithreading #operating-system #scheduling
#многопоточность #операционная система #планирование
Вопрос:
Я хочу знать, что именно означает, что поток должен быть запланирован для запуска в LWP. Я не могу правильно визуализировать последовательность шагов, которые выполняются, когда процесс планируется запустить на CPU, потому что многие концепции объясняются в представлении высокого уровня. Ниже приведен абзац, который вызвал много споров; он взят из «Концепции операционной системы», 10-е издание Абрахама Зильбершатца.
Одно из различий между потоками пользовательского уровня и уровня ядра заключается в том, как они планируются. В системах, реализующих модели «многие ко одному» (раздел 4.3.1) и «многие ко многим» (раздел 4.3.3), библиотека потоков планирует запуск потоков пользовательского уровня на доступном LWP . Эта схема известна как область конкуренции процессов (PCS ), поскольку конкуренция за центральный процессор происходит между потоками, принадлежащими одному и тому же процессу. (Когда мы говорим, что библиотека потоков планирует пользовательские потоки на доступные LWP, мы не имеем в виду, что потоки фактически выполняются на процессоре, поскольку это дополнительно требует, чтобы операционная система планировала поток ядра LWP на физическое ядро процессора.)
Я не могу полностью понять необходимость и важность LWP здесь.
Ответ №1:
Точно так же, как процесс является контейнером для памяти, LWP (= поток уровня ядра) является контейнером для волокон (по сути, = потоки уровня пользователя).
Планировщик потоков ядра видит только потоки уровня ядра (LWP), и он планирует включение и выключение потоков LWP на процессорах, а именно, LWP имеет временной интервал, когда он запускается на процессоре. Библиотеке потоков пользовательского уровня (= планировщик волокон) принадлежат LWP этого процесса, и она решает, какие волокна будут использовать временные интервалы, выделенные планировщиком ядра для этих LWP.
Когда оптоволокно решает предоставить ЦП, но временной интервал LWP еще не закончился, планировщик оптоволокна планирует запуск другого оптоволокна в LWP на этом процессоре. Но пока это другое волокно работает, временной интервал LWP может закончиться, и планировщик ядра запланирует отключение LWP от процессора. Планировщик оптоволокна не будет иметь права голоса по этому вопросу — планировщик оптоволокна даже не будет запущен, потому что он находится в пользовательском пространстве, и ядро об этом не знает.
Комментарии:
1. Хм, это имеет смысл. Как выглядит LWP? Какую логику это составляет, т.Е. Какова типичная реализация LWP?
2. Вы спрашиваете, как реализован поток ядра? Вы должны опубликовать это как отдельный вопрос, если он еще не задан. Или вы спрашиваете, как библиотека потоков (пользовательского уровня) реализована поверх LWPS?
3. Да, возможно, я изучу это немного подробнее. Моим главным препятствием в правильном понимании последовательности планирования является незнание внутренней работы LWP. В любом случае спасибо за ваш вклад.