Os processos e os daemons são threads do kernel?

4

Da arquitetura Linux Kernel do Mauerer,

Kernel threads are processes started directly by the kernel itself. They delegate a kernel function to a separate process and execute it there in ‘‘parallel‘‘ to the other processes in the system (and, in fact, in parallel to execution of the kernel itself). Kernel threads are often referred to as (kernel) daemons. They are used to perform, for example, the following tasks:

  • To periodically synchronize modified memory pages with the block device from which the pages originate (e.g., files mapped using mmap ).
  • To write memory pages into the swap area if they are seldom used.
  • To manage deferred actions.
  • To implement transaction journals for filesystems.

Basically, there are two types of kernel thread:

  • Type 1 — The thread is started and waits until requested by the kernel to perform a specific action.
  • Type 2 — Once started, the thread runs at periodic intervals, checks the utilization of a specific resource, and takes action when utilization exceeds or falls below a set limit value. The kernel uses this type of thread for continuous monitoring tasks.
  1. Como o livro de Mauerer diz que os threads do kernel são processos, acho que eles devem estar em execução no modo de usuário, em vez do modo kernel. (ou estou errado? Um processo pode ser executado no modo de usuário ou no modo kernel em momentos diferentes ou em apenas um modo?)

    Mas o Entendimento do Kernel Linux do Bovet diz que os encadeamentos do kernel são rodando apenas no modo kernel (veja a citação abaixo). São os conceitos de "thread do kernel" nos dois livros o mesmo conceito?

    Traditional Unix systems delegate some critical tasks to intermittently running processes, including flushing disk caches, swapping out unused pages, servicing network connections, and so on. Indeed, it is not efficient to perform these tasks in strict linear fashion; both their functions and the end user processes get better response if they are scheduled in the background. Because some of the system processes run only in Kernel Mode, modern operating systems delegate their functions to kernel threads, which are not encumbered with the unnecessary User Mode context. In Linux, kernel threads differ from regular processes in the following ways:

    • Kernel threads run only in Kernel Mode, while regular processes run alterna- tively in Kernel Mode and in User Mode.
    • Because kernel threads run only in Kernel Mode, they use only linear addresses greater than PAGE_OFFSET . Regular processes, on the other hand, use all four gigabytes of linear addresses, in either User Mode or Kernel Mode.
  2. O livro de Mauerer diz que os encadeamentos do kernel são iniciados diretamente pelo kernel, e parece também dizer que daemons são sinônimos de threads do kernel. Então eu acho que os daemons devem ser iniciados diretamente pelo kernel.

    Mas o link diz que screen 's O daemon é iniciado pela interface de usuário screen (veja a citação abaixo). Eu acho que screen user interface é um processo, ao invés do kernel. São os conceitos de daemon no livro de Mauerer e no link responder o mesmo conceito?

    When you first start screen, you are actually starting a user interface (ui), which by default will create a daemon (the session manager).

  3. Em geral, Como você entende os conceitos de "threads do kernel", "processo" e "daemon", suas relações e suas diferenças?

por Tim 29.02.2016 / 05:25

1 resposta

5

Primeiro: o crédito vai   link

Threads do usuário e threads do kernel são exatamente os mesmos. (Você pode ver procurando em / proc / e ver que os encadeamentos do kernel também estão lá).

Um thread de usuário é aquele que executa o código de espaço do usuário. Mas ele pode chamar o espaço do kernel a qualquer momento. Ainda é considerado um segmento "Usuário", mesmo que esteja executando código do kernel em níveis elevados de segurança.

Um encadeamento de kernel é aquele que apenas executa o código do kernel e não está associado a um processo de espaço do usuário. Eles são como "daemons do UNIX", exceto que são daemons somente do kernel. Então você poderia dizer que o kernel é um programa multi-threaded. Por exemplo, existe um segmento do kernel para swap. Isso força todos os problemas de troca a serem "serializados" em um único fluxo.

Se um segmento de usuário precisar de algo, ele chamará o kernel, que marca esse segmento como inativo. Posteriormente, o encadeamento de swap localiza os dados, portanto, ele marca o encadeamento do usuário como executável. Mais tarde ainda, o "user thread" retorna do kernel de volta para o userland como se nada tivesse acontecido.

Na verdade, todos os encadeamentos iniciam no espaço do kernel, porque a operação clone () acontece no espaço do kernel. (E há muita contabilidade do kernel para fazer antes que você possa 'retornar' para um novo processo no espaço do usuário.)

    
por 29.02.2016 / 07:14