Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três...
Transcript of Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três...
![Page 1: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/1.jpg)
Processos no LinuxProcessos no Linux
![Page 2: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/2.jpg)
Gerência de processoGerência de processo
No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.
ID do Processo (PID) - O identificador único para o processo, usado para especificar os processos para o sistema operacional quando uma aplicação faz uma chamada ao sistema para sinalizar, modificar ou esperar por outro processo.
Credenciais - Cada processo deve ter um ID de usuário associado e um ou mais ID de grupos que determinam os direitos de acesso do processo aos recursos do sistema e aos arquivos.
![Page 3: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/3.jpg)
Identidade do Processo Identidade do Processo
Personalidade - Não encontrado tradicionalmente nos sistemas UNIX, mas no Linux cada processo tem um identificador de personalidade associado que pode modificar ligeiramente a semântica de certas chamadas ao sistema.
Usado primeiramente por bibliotecas de emulação para requisitar que certas chamadas ao sistema sejam compatíveis com certos tipos específicos de UNIX
![Page 4: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/4.jpg)
Contexto do ProcessoContexto do Processo
O (em mudança constante) estado de um processo em execução em qualquer ponto no tempo.
O contexto de escalonamento é a parte mais importante do contexto do processo; é a informação que o escalonador precisa para suspender e reiniciar o processo.
O kernel mantém informação de contabilidade sobre os recursos correntemente sendo consumidos por cada processo e o total de recursos consumido pelo processo em sua existência até o momento.
A tabela de arquivos é um arranjo de ponteiros para estruturas de arquivo do kernel
Quando fazendo chamadas ao sistema de E/S para arquivos, os processos se referem aos arquivos através dos indices desta tabela
![Page 5: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/5.jpg)
Contexto do Processo (Cont.)Contexto do Processo (Cont.)
Enquanto que a tabela de arquivos lista apenas os arquivos abertos existentes, o contexto do sistema de arquivos se aplica às requisições para novos arquivos abertos
A diretório raíz corrente e o diretório default para serem usados para novas buscas por arquivos são armazenados aqui
A tabela de tratadores de sinal define a rotina no espaço de endereços do processo a ser invocada quando da chegada de um sinal específico.
O contexto de memória virtual de um processo descreve o conteúdo completo de seu espaço de endereçamento privado.
![Page 6: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/6.jpg)
Processos e ThreadsProcessos e Threads
Linux usa a mesma representação interna para processos e threads; uma thread é simplesmente um novo processo que compartilha o espaço de endereçamento com seu pai.
A distinção é feita apenas quando uma nova thread é criada pela chamada ao sistema clone
Fork cria um novo processo com seu contexto próprio inteiramente novo
clone cria um novo processo com sua própria identidade, mas permite o compartilhamento das estruturas de dados do processo com seu pai
O uso de clone dá a uma aplicação um controle mais fino sobre o que vai exatamente ser compartilhado entre as duas threads.
![Page 7: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/7.jpg)
Descritor de ProcessoDescritor de Processo
Processo – programa em movimento, dinâmico Estruturas de dados do kernel para manter o estado Descritor, PCB (control block), task_struct Maior do que se possa imaginar (cerca de 1K) Estrutura complexa com apontadores para outras estruturas
Tipo de informação em task_struct Registradores, estado, id, prioridades, locks, arquivos, sinais,
mapas de meórias, filas, listas de apontadores, … Alguns detalhes
Endereços dos primeiros campos codificada em assembler Atenção especial para o layout de linha do cache
![Page 8: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/8.jpg)
Descritor de processos – localização na pilha Descritor de processos – localização na pilha de processosde processos
PILHA
Descritor do processo
0x015fbfff
0x015fb000
0x015fa878
0x015fa3cb
0x015fa000
esp
corrente
![Page 9: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/9.jpg)
Task struct – atributos do processoTask struct – atributos do processo
![Page 10: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/10.jpg)
Task struct – escalonamentoTask struct – escalonamento
![Page 11: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/11.jpg)
Task struct – relação entre processosTask struct – relação entre processos
![Page 12: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/12.jpg)
Task struct – credenciaisTask struct – credenciais
![Page 13: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/13.jpg)
Task struct – arquivos e memóriaTask struct – arquivos e memória
![Page 14: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/14.jpg)
Estados do ProcessoEstados do Processo
Visão tradicional Bloqueado, pronto, executando Também inicializando, terminando UNIX adiciona “suspenso” (signals, ptrace())
Linux (TASK_qualquercoisa) Executando, pronto(RUNNING) Bloqueado (INTERRUPTIBLE, UNINTERRUPTIBLE)
Interruptíveis– sinais pode tirar o processo do estado de bloqueio (EINTR)
Terminando (ZOMBIE) Morto, mas ainda com estruturas de dados – processo vivo-
morto Suspenso (STOPPED)
![Page 15: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/15.jpg)
Estados de processos no linuxEstados de processos no linux
![Page 16: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/16.jpg)
Alocação e armazenamento do descritorAlocação e armazenamento do descritor
Descritores armazenados no segmento de dados do kernel
Cada processo ganha 2 páginas da pilha do kernel (8K) usada enquanto no kernel (segurança)
task_struct armazenado aqui; restante para pilha
![Page 17: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/17.jpg)
Listas e hashes do DescritorListas e hashes do Descritor
Lista de processos init_task, prev_task, next_task for_each_task(p) iterator (macro)
Processos prontos: runqueue init_task, prev_run, next_run, nr_running wake_up_process()
Invoca schedule() se preempção for necessária Pid para descritor hash: pidhash
hash_pid(), unhash_pid() find_hash_by_pid()
![Page 18: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/18.jpg)
Estrutura da tabela PIDHASHEstrutura da tabela PIDHASH
![Page 19: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/19.jpg)
Relações do ProcessoRelações do Processo
Processos são relacionados Pai/filho (fork()), irmãos Possibilidade para outro pai
Pai vs. pai original Pai pode esperar pela terminação do filho
Grupos de processos Possível para envio de sinais para todos os membros
Sessões Processos relacionados no login
![Page 20: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/20.jpg)
Relação entre processosRelação entre processos
P_opptr – pai original
P_osptr – irmão mais velho
P_pptr – pai
P_ysptr – irmão mais novo
P_cptr – filho mais novo
![Page 21: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/21.jpg)
Criação de ProcessosCriação de Processos
clone(), fork(), vfork() Fork duplica a maior parte dos recursos do pai Exec põe abaixo o espaço de endereçamento do pai e instala
um novo (correspondendo a imagem do processo no disco) A maioria dos fork são parte de uma sequencia fork-exec Desperdício a cópia de recursos quando vai haver sobreescrita
Solução velha: vfork Compartilhamento pai/filho; pai bloqueia até filho terminar
Nova solução: COW copy-on-write Compartilha página de escrita como de leitura somente até
uma escrita (falta) e então copia Solução Linux: clone()
Especifica quais recursos compartilhar ou duplicar CLONE_VM, _FS, _FILES, _SIGHAND, _PID
![Page 22: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/22.jpg)
Linux: Processes ou Threads?Linux: Processes ou Threads?
Linux usa um termo neutro: tasks ou tarefas
Visão tradicional
Threads existem “dentro” dos processoes
Visão do Linux
Threads: processos que compartilham espaço de endereços
Threads do Linux são realmente as “threads do kernel”
![Page 23: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/23.jpg)
Modelos de ThreadModelos de Thread
Muitas para um
Threads no nível de usuário; sem conhecimento por parte do kernel (fibras do Windows)
Uma para um
Modelo padrão do Linux; cada thread em nível de usuário corresponde a uma thread de núcleo
Muitas para muitas (m-to-n; m >= n)
Solaris, Próxima geração de threads POSIX (Light weighted process)
Grande número de threads de usuário correspondendo a um pequeno número de threads de kernel
Mais flexível, melhor utilização da UCP
![Page 24: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/24.jpg)
clone()clone()
fork() é implementada como um envoltório sobre clone() com parâmetros específicos
__clone(fp, data, flags, stack)
"__" significa “não invoque isto diretamente"
fp é a função de início de thread, data são parâmetros
flags é ou de CLONE_ flags
stack é o endereço da pilha de usuário
clone() invoca do_fork() para fazer o trabalho
![Page 25: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/25.jpg)
Flags para a chamada CLONE do LinuxFlags para a chamada CLONE do Linux
![Page 26: Processos no Linux. Gerência de processo No Linux, as propriedades do processo caem em três grupos: a identidade do processo, seu ambiente e seu contexto.](https://reader036.fdocumentos.tips/reader036/viewer/2022062418/552fc103497959413d8beb0e/html5/thumbnails/26.jpg)
Threads de KernelThreads de Kernel
Linux têm um pequeno número de threads do kernel que executam continuamente em modo núcleo (daemons) Sem espaço de endereço de usuário (apenas mapeada no
kernel) Criação: kernel_thread() Processo 0: processo ocioso (idle) Processo 1
Cria várias threads de kernel antes de mudar para modo usuário como /sbin/init
kflushd (bdflush) – Descarrega buffers velhos para o disco sob pressão de falta de memória
kupdate – Descarrega periodicamente buffers velhos para o disco
kswapd – Daemon de troca