Kernel Linux: tarefa vs thread

Kernel Linux: tarefa vs thread

Quando eu estava lendo um livro (programação do kernel Linux), encontrei um parágrafo interessante/confuso sobre mm_segment_t addr_limit(um dos membros do struct_task), conforme mostrado abaixo:

mm_segment_t addr_limit;
Ao contrário dos kernels mais antigos, já que as tarefas 2.4 (threads) também podem estar dentro do kernel. Eles podem acessar um espaço de endereço maior do que as tarefas no espaço do usuário.addr_limitdescreve o espaço de endereço que é possível acessar usando o kernel da tarefa.

Questões:

  1. No primeiro ponto, diz "(tarefas) threadstambém pode serdentro do kernel" está lá. O que isso significa? Os threads não estão necessariamente dentro do kernel?

  2. Na segunda frase, “Essespode acessar um espaço de endereço maior do que tarefas no espaço do usuário." Não entendo o queessessignifica? Se ele está falando sobre threads, como os threads podem ter espaço de endereço maior que as tarefas?

Responder1

A frase "dentro do kernel" provavelmente se refere athreads do kernelque são usados ​​pelo próprio kernel para trabalhos que podem ser executados de forma assíncrona. Você pode ver exemplos desses threads em sua árvore de processos:

# ps aux | grep '\[.*\]$' | head
root         2  0.0  0.0      0     0 ?        S    May05   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    May05   0:03 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    May05   0:00 [kworker/0:0]
root         5  0.0  0.0      0     0 ?        S    May05   0:00 [kworker/u:0]
root         6  0.0  0.0      0     0 ?        S    May05   0:00 [migration/0]
root         7  0.0  0.0      0     0 ?        S    May05   0:00 [watchdog/0]
root         8  0.0  0.0      0     0 ?        S    May05   0:00 [migration/1]
root         9  0.0  0.0      0     0 ?        S    May05   0:00 [kworker/1:0]
root        10  0.0  0.0      0     0 ?        S    May05   0:02 [ksoftirqd/1]
root        11  0.0  0.0      0     0 ?        S    May05   0:00 [watchdog/1]

Tais threads são criados pelo código do kernel que chama kthread_create(). Esses threads são executados no modo kernel, executando várias tarefas que você espera do kernel.

"Tarefas no espaço do usuário", por outro lado, representam threads ou processos como você normalmente pensaria neles, criados via fork+exec ou pthread_create. Eles são executados em modo de usuário e fazem chamadas de sistema quando requerem serviços do kernel. O texto é um pouco estranho porque, é claro, o kernel conhece essas tarefas e mantém informações (como as de struct_task) sobre elas para que possa agendar um horário para elas na CPU.

Quanto a (2), “estes” refere-se especificamente a “threads do kernel”. Acredito que os threads do kernel compartilham o mesmo espaço de endereço que o kernel.

informação relacionada