> Ну а в линухе любой процесс или поток реализован через вызов clone2,
> у которого очень приличный список параметров настройки контекста выполнения — от
> firk'a (который через него же реализован) до легковесных процессов и (легковесных
> же) потоков.
> Ну нет больше разницы между потоком и процессом как таковой.
> Есть только разница в объёме информации сохраняемого/восстанавливаемого контекста выполнения
> при переключении задач после появления коу и ммэп.Ну а в линуксе, и clone, и fork вызывают do_fork, которая создаёт отдельную
task_struct, и пихает её планировщику. Именно с ними планировщик и работает,
это и есть единица планирования. Каждая такая таска содержит весь набор, куда входят
контексты потока исполнения, то есть регистры, счётчик команд, содержит своё, отдельное
от других тасков, виртуальное пространство памяти, содержит набор IO дескрипторов и пр.
вещи первой необходимости. У разных тасков, относящихся к одному и тому же процессу исполнения
пользовательской программы, или являющиеся кернель тредами, таски по содержанию идентичны,
и отличаются только инфой, относящиейся
к потоку исполнения, но IO дескрипторы, сруктуры виртуальной памяти и прочие вещи у них общие, но
при этом, это всё таки разные таски и планировщик, переключаясь между ними, производит
перезагрузку в соответствии с данными этой таски. Говорят что в линуксе поток и процесс одно
и то же, это не верно, в линуксе всё есть процесс, то есть каждый таск имеет полное окружение процесса,
но некоторые из них могут отличаться только регистрами контекста потока. Про такие говорят что это потоки одного процесса, но по мне так это некорректное сравнение.