Diferenças entre processos do sistema e processos do usuário, caminhos de controle do kernel e encadeamento do kernel

3

Meu entendimento é que

  • um processo sempre é executado no modo de usuário e usa apenas o espaço do usuário e
  • um kernel sempre roda no modo kernel e usa somente o espaço do kernel.

Mas sinto que talvez não esteja correto depois de ler os dois livros seguintes. Você poderia me corrigir se eu estiver errado?

  1. Na Linux Kernel Architecture da Maurer, os termos "processo do sistema" e "processo do usuário" são usados sem definições, por exemplo, quando introduzindo a divisão do espaço de endereço virtual no espaço do kernel e espaço do usuário :

    Every user process in the system has its own virtual address range that extends from 0 to TASK_SIZE . The area above (from TASK_SIZE to 2 32 or 2 64 ) is reserved exclusively for the kernel — and may not be accessed by user processes. TASK_SIZE is an architecture-specific constant that divides the address space in a given ratio — in IA-32 systems, for instance, the address space is divided at 3 GiB so that the virtual address space for each process is 3 GiB; 1 GiB is available to the kernel because the total size of the virtual address space is 4 GiB. Although actual figures differ according to architecture, the general concepts do not. I therefore use these sample values in our further discussions.

    This division does not depend on how much RAM is available. As a result of address space virtualization, each user process thinks it has 3 GiB of memory. The userspaces of the individual system processes are totally separate from each other. The kernel space at the top end of the virtual address space is always the same, regardless of the process currently executing.

    ... The kernel divides the virtual address space into two parts so that it is able to protect the individual system processes from each other.

    Você pode ler mais exemplos pesquisando "processo do usuário" ou "processo do sistema" no livro.

    São processos do usuário e processos de processos do sistema, ao contrário ao kernel?

    Quais são suas definições? Eles diferem por seus donos (regular usuário ou root?), pelo usuário que os iniciou, ou por alguma outra coisa?

    Por que o livro escreve explicitamente "processo do sistema" ou "usuário processo ", em vez de apenas" processo "para cobrir os dois tipos de "processos", por exemplo, na citação acima? Eu acho que o que diz sobre "processo de usuário" também se aplica a "processo de sistema", e o que diz sobre "processo do sistema" também se aplica ao "processo do usuário".

  2. No Understanding Linux Kernel por Bovet, há conceitos "kernel control path "e" thread do kernel ".

    A kernel control path denotes the sequence of instructions executed by the kernel to handle a system call, an exception, or an interrupt.

    ... 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 con- text. 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.

    Você pode ler mais pesquisando-os em Google Books .

    O "processo do sistema" no livro de Maurer e no livro de Bovet é o mesmo conceito?

    O "processo do sistema" mencionado nos dois livros pode ser executado no espaço do usuário, no espaço do kernel ou em ambos?

    O "processo do sistema" é diferente do caminho de controle do kernel e do encadeamento do kernel?

por Tim 19.02.2016 / 19:06

2 respostas

3

No caso do Linux, uma tarefa (ideia interna do kernel de um encadeamento; encadeamentos podem compartilhar recursos, como memória e arquivos abertos; alguns executam apenas dentro do kernel) pode ser executada em um usuário ou (é encadeamento de execução) transferir para o kernel (e vice-versa) para executar uma chamada de sistema. Um thread de usuário pode ser highjacked temporariamente para executar uma interrupção (mas isso não é realmente aquele thread em execução).

Que um processo é um "processo do sistema" ou um processo de usuário regular é completamente irrelevante no Unix, eles são tratados da mesma forma. No caso do Linux, algumas tarefas são executadas no kernel para lidar com tarefas diversas. Eles são trabalhos do kernel, não "processos do sistema", no entanto.

Uma grande ressalva: livros de texto sobre produtos de software complexos (compiladores e sistemas operacionais são exemplos particularmente chocantes) tendem a explicar algoritmos simplistas (geralmente aqueles que não foram usados a sério por meio século ), porque as máquinas do mundo real e os requisitos do usuário são muito muito complexos para serem manipulados de alguma forma que pode ser descrita de maneira simples e estruturada. Grande parte do compilador é um ajuste ad-hoc (particularmente na área de otimização de código, as transformações são principalmente o subconjunto de possibilidades que aparecem no uso prático). No caso do Linux, a maior parte do código são drivers de dispositivo (mencionados de passagem como dependentes de dispositivo em textos do sistema operacional) e, desse código, uma grande fatia é manipular dispositivos que não se comportam corretamente, que não atendem às suas próprias especificações ou comportar-se diferentemente entre as versões do "mesmo dispositivo". Freqüentemente, o que é explicado em detalhes minuciosos é apenas o segmento do trabalho que pode ser reduzido a alguma teoria legal, deixando a parte irregular e bagunçada (quase) completamente fora. Por exemplo, Cris Fraser e David Hanson, em seu livro descrevendo o compilador LCC , dizem que os textos típicos do compilador contêm principalmente explicações na análise lexical e análise, e muito pouco na geração de código. Essas tarefas são cerca de 5% do código do seu compilador (projetado para ser simples!) E tinham uma taxa de erro insignificante. A parte complexa do compilador simplesmente não é abordada em textos padrão.

    
por 20.02.2016 / 20:45
1

P: Ambos os processos de usuário e processos de processos do kernel, ao contrário do kernel?

Não tenho certeza se existe uma única resposta correta, mas vou tentar.
Citando "Design e Implementação de Sistemas Operacionais" (A. Tanenbaum), 3ª edição, o Capítulo 2.1 diz:

2.1. Introduction to Processes

All modern computers can do several things at the same time. While running a user program, a computer can also be reading from a disk and outputting text to a screen or printer. In a multiprogramming system, the CPU also switches from program to program, running each for tens or hundreds of milliseconds. While, strictly speaking, at any instant of time, the CPU is running only one program, in the course of 1 second, it may work on several programs, thus giving the users the illusion of parallelism. Sometimes people speak of pseudoparallelism in this context, to contrast it with the true hardware parallelism of multiprocessor systems (which have two or more CPUs sharing the same physical memory). Keeping track of multiple, parallel activities is hard for people to do. Therefore, operating system designers over the years have evolved a conceptual model (sequential processes) that makes parallelism easier to deal with. That model, its uses, and some of its consequences form the subject of this chapter.

2.1.1. The Process Model

In this model, all the runnable software on the computer, sometimes including the operating system, is organized into a number of sequential processes , or just processes for short. A process is just an executing program, including the current values of the program counter, registers, and variables.

(ênfase minha)

Embora eu ainda não tenha terminado de ler o livro, de acordo com essa explicação, um "processo" é uma unidade de trabalho que é executada no processador e contém todos os recursos necessários (imagem, estado, registros, contadores ... ).

Responda à pergunta editada

a kernel always runs in kernel mode and uses kernel space only.

Isso depende do tipo do kernel. Um kernel monolítico executa suas coisas em um único espaço de endereço (espaço do kernel), enquanto os microkernels podem executar seus processos de kernel no espaço do usuário.

Can "system process" mentioned in the two books run in user space, kernel space, or both?

Veja acima, um processo do sistema pode ser executado nos dois modos, dependendo do tipo de kernel.

Are both user processes and system processes processes, as opposed to kernel?

Sim, tanto os processos do usuário quanto os processos do sistema são processos - daí a nomenclatura ;-) Eu não entendo a parte depois da vírgula.

Is "system process" different from kernel control path and kernel thread?

Sim. Um processo (usuário ou sistema = kernel) é algo diferente.

O caminho de controle do kernel denota a seqüência de instruções, um thread do kernel (também conhecido como LWP - lightweight process) é um thread que é criado e agendado diretamente pelo kernel (ao contrário dos threads do usuário, que são criados por uma biblioteca de threads).

Conclusão

Um processo é apenas uma estrutura teórica.
Um kernel faz parte de um sistema operacional que implementa o conceito de processos para permitir, por exemplo. agendamento dos referidos processos.
Um thread é a menor parte de um processo que pode ser agendado independentemente.

    
por 20.02.2016 / 01:20