A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Processos no Linux.

Apresentações semelhantes


Apresentação em tema: "Processos no Linux."— Transcrição da apresentação:

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 corrente 0x015fa000

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


Carregar ppt "Processos no Linux."

Apresentações semelhantes


Anúncios Google