26
Processos no Linux Processos no Linux

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

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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