Выход из ядра в Linux - PullRequest
       6

Выход из ядра в Linux

1 голос
/ 11 мая 2010

Я здесь, чтобы спросить вас о разнице между процессом и потоком в Linux. Я знаю, что поток для linux - это просто «задача», которая совместно с отцом обрабатывает то, что им нужно иметь общее (адресное пространство и другую важную информацию). Я также знаю, что они создают вызов одной и той же функции ('clone ()'), но мне все еще чего-то не хватает: что на самом деле происходит при выходе из потока? Какая функция вызывается внутри ядра Linux? Я знаю, что при выходе из процесса вызывается функция do_exit, но здесь или где-то еще должен быть способ понять, является ли это выходом из потока или целым процессом. Можете ли вы объяснить мне эту вещь или перенаправить в какой-то учебник? Я попробовал «Понимание ядра Linux», но меня это не удовлетворило. Я спрашиваю об этом, потому что нужно добавлять вещи в структуру task_struct, но мне нужно различать, как управлять этой информацией для процесса и его потомков.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 11 мая 2010

Системный вызов exit() выходит из одного потока, а системный вызов exit_group() выходит из всего процесса POSIX («группа потоков»).

1 голос
/ 11 мая 2010

Основное различие между процессами и потоками заключается в том, что процессы выполняются в своем собственном пространстве виртуальной памяти, отдельно от всех других процессов. Это означает, что два процесса не могут получить доступ к данным друг друга. Единственный способ взаимодействия двух процессов - через операционную систему (разделы с общей памятью, семафоры, сокеты и т. Д.).

С другой стороны, все потоки существуют в процессе их создания. Это означает, что потоки имеют доступ ко всем тем же данным (переменным, указателям, дескрипторам и т. Д.), Которые есть у любого другого потока в том же процессе. В этом главное отличие.

Есть некоторые последствия этого. Например, когда процесс по какой-то причине завершается, все его потоки идут с ним. Также намного проще получать ошибки мультиобработки, такие как порванные данные в потоках, просто потому, что ничто не заставляет вас использовать функции синхронизации ОС, которые вы действительно должны использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...