Processos no Linux - PowerPoint PPT Presentation

1 / 26
About This Presentation
Title:

Processos no Linux

Description:

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. – PowerPoint PPT presentation

Number of Views:104
Avg rating:3.0/5.0
Slides: 27
Provided by: Maril137
Category:

less

Transcript and Presenter's Notes

Title: Processos no Linux


1
Processos no Linux
2
Gerê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.

3
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

4
Contexto 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

5
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.

6
Processos 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.

7
Descritor 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

8
Descritor de processos localização na pilha de
processos
0x015fbfff
PILHA
0x015fb000
0x015fa878
esp
0x015fa3cb
Descritor do processo
0x015fa000
corrente
9
Task struct atributos do processo
10
Task struct escalonamento
11
Task struct relação entre processos
12
Task struct credenciais
13
Task struct arquivos e memória
14
Estados 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)

15
Estados de processos no linux
16
Alocaçã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

17
Listas 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()

18
Estrutura da tabela PIDHASH
19
Relaçõ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

20
Relaçã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

21
Criaçã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

22
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

23
Modelos 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 gt 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

24
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

25
Flags para a chamada CLONE do Linux
26
Threads 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
Write a Comment
User Comments (0)
About PowerShow.com