Linux kernel: task vs thread

1

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 em struct_task ) como mostrado abaixo:

mm_segment_t addr_limit;
Unlike the older kernels, since 2.4 tasks (threads) also can be within the kernel. These can access a larger address space than tasks in user space. addr_limit describes the address space, which it is possible to access using the kernel of the task.

Perguntas :

  1. No primeiro ponto, ele diz que "threads (de tarefas) também podem ser dentro do kernel" está lá. O que isso significa? Os segmentos não estão necessariamente dentro do kernel?

  2. Na segunda frase, " Estes podem acessar um espaço de endereçamento maior que as tarefas no espaço do usuário". Eu não entendo o que estes significam? Se ele estiver falando sobre encadeamentos, como os encadeamentos podem ter um espaço de endereçamento maior que as tarefas?

por gangadhars 08.05.2014 / 14:26

1 resposta

2

A frase "dentro do kernel" provavelmente está se referindo a threads do kernel que são usados pelo próprio kernel para trabalhos que podem ser pré-formados de forma assíncrona. Você pode ver exemplos desses tópicos na 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 encadeamentos 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 encadeamentos ou processos como você normalmente pensaria deles, criados via fork + exec ou pthread_create. Eles são executados no modo de usuário e fazem chamadas do sistema quando eles exigem serviços do kernel. O texto lá é um pouco estranho, porque, é claro, o kernel sabe sobre essas tarefas e mantém informações (como as do struct_task) sobre elas, para que possa programar tempo para elas na CPU.

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

    
por 08.05.2014 / 15:35

Tags