Как ядро различает поток и процесс
В Linux потоки называются легковесными процессами. Будь то процесс или поток, они реализуются task_struct
структура данных.
1> Итак, в каком смысле ядро различает поток и процесс?
2> когда происходит переключение контекста, как потоки получают меньше накладных расходов при переключении контекста? потому что до этого потока может выполняться другой поток из другого процесса. Таким образом, ядро должно загружать все ресурсы, даже если ресурсы распределяются между потоками процессов.
3 ответа
Внутри ядра каждый процесс и потоки имеют уникальный идентификатор (даже потоки одного процесса), который хранится в pid
переменные и потоки одного и того же процесса также имеют общий идентификатор, который хранится в tgid
переменная, и возвращается пользователю, когда getpid()
вызывается, поэтому позволяет ядру различать их как различные объекты, которые планируются сами по себе.
Когда поток вытесняется другим потоком того же процесса, так как различные сегменты, такие как.text, .bss, .data, файловые дескрипторы и т. Д., Являются общими и, следовательно, допускают быстрое переключение контекста по сравнению с тем, когда различные процессы переключаются контекстом или когда потоки разных процессов переключаются по контексту.
как ядро различает поток и процесс.
Из http://www.kernel.org/doc/ols/2002/ols2002-pages-330-337.pdf и из Linux - Потоки и процесс
Это было решено в течение цикла разработки 2.4 с добавлением концепции, называемой "группа потоков". Существует связанный список всех задач, входящих в группу потоков, и есть идентификатор, представляющий группу, который называется tgid. Этот идентификатор на самом деле представляет собой pid первой задачи в группе (pid - это идентификатор задачи, назначенный для задачи Linux), аналогично тому, как работают сеансы и группы процессов. Эта функция включена через флаг клонировать ().
а также
В ядре каждый поток имеет свой собственный идентификатор, называемый PID (хотя, возможно, имеет смысл называть его TID или идентификатором потока), и у них также есть TGID (идентификатор группы потоков), который является PID потока это начало весь процесс.
Упрощенно, когда создается новый процесс, он выглядит как поток, в котором и PID, и TGID имеют одно и то же (новое) число.
Когда поток запускает другой поток, этот запущенный поток получает свой собственный PID (так что планировщик может планировать его независимо), но он наследует TGID от исходного потока.
Таким образом, основной поток - это поток с тем же PID и TGID, а этот PID - это PID процесса. Поток (но не основной) имеет другой PID, но тот же TID.
Кажется, что вы смешали некоторые концепции, реализованные в одной структуре данных, не означает, что они работают одинаково.
Вы можете прочесть, что такое разница между процессом и потоком, чтобы прояснить свое понимание процесса и потока в первую очередь.