Processos no Linux.

Slides:



Advertisements
Apresentações semelhantes
Sistemas Operacionais - Aula 6
Advertisements

Sistemas Operacionais
Sistemas Distribuídos
Sistemas Operacionais Aula II
Sistemas Operacionais
Sistemas Operacionais
IC - UFF Sistemas Operacionais Threads. IC - UFF Processos e threads Vimos o conceito de processo englobando duas características básicas: propriedade.
Sistemas Operacionais
Sistemas Operacionais
Sistemas operacionais
Profa. Priscila Facciolli
Processos no Unix e Linux
Arquitetura de Sistemas Operacionais
Arquitetura de Sistemas Operacionais
Chapter 4: Threads.
História do Windows XP Significa Windows “eXperience”.
Sistemas Operacionais
Threads Estagiário: Bruno Guazzelli Batista Slides de autoria do Prof Drº Marcos José Santana baseados no livro Sistemas Operacionais Modernos de A. Tanenbaum.
Estudo de Caso 1: UNIX e LINUX
baseado na versão 2.6 do kernel do Linux
Estruturas de Controle
SVCs para Controle de Processos no Unix
SVCs para Controle de Processos no Unix
Concorrência Aula X.
UNIX.
Debian Gerência de Memória.
Threads.
Proteção de Memória O sistema operacional deve impedir que um processo tenha acesso ou modifique uma página do sistema sem autorização. Proteção para páginas.
Concorrência em Java Threads em Java.
Unidade 1-1 Processos e Threads
SISTEMAS OPERACIONAIS
Sistemas Operacionais
Sistemas Operacionais
Sistemas Operacionais
Processos em Linux Aluno: Raphael Franklin Professor: Hugo Vieira L. de Souza Disciplina: Sistemas Operacionais.
Sistema Operacional Processos
Universidade Federal Fluminense Escola de Engenharia Departamento de Engenharia de Telecomunicações Sistemas de Computação para Telecomunicações Autores:
Conteúdo 1. Introdução Threads 2. Ambiente Monothread 3. Ambiente Multithread 4. Arquitetura e Implementação 5. Modelos de Programação.
Unidade 2 - Parte 1 Programação Concorrente
Conteúdo Processos e threads Partes do processo
IC - UFF Sistemas Operacionais 4. Threads Texto base: capítulo 4 Operating Systems: Internals and Design Principles W. Stallings.
Disciplina: Sistemas Operacionais Professor: Cristiano Mariotti
Sistemas Operacionais
Processos.
Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação SISTEMAS OPERACIONAIS Aula 9 Regiane Kawasaki
SISTEMAS OPERACIONAIS I Memória Virtual e Paginação
Computação L1: Infra-Estrutura Básica
Sistemas Operacionais
Administração de Sistemas Operacionais Não Proprietários 2ºSemestre Aula 05 Prof. Carlos Vinícius SERVIÇO NACIONAL DE APRENDIZAGEM.
Sistemas Operacionais
Programação com Threads
Escalonamento de Processos e Threads
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Chapter 4: Threads.
SISTEMAS OPERACIONAIS I
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Capítulo 10: Interface de Sistemas de Arquivos.
Conceitos de thread Faculdade PITÁGORAS – Outubro de 2012
Prof. Werley T. Reinaldo 26/05/  Sistemas Operacionais:  Visão geral  As diferentes imagens do SO:  Visão Usuários;  Visão Projeto.  Multiprogramação;
S ISTEMAS OPERACIONAIS PROCESSOS Horácio Ribeiro.
Capítulo 4: Processos.
Bruno Affonso Diego Chiquito Ruan Berté.   O código de Escalonamento no Windows é implementado no Kernel.  A rotina que desempenha as tarefas do Escalonador.
Gerenciamento de Memória Sistemas Recentes
Sistemas Operacionais
Redes e Sistemas Distribuídos II – Cód Prof. MSc. Ronnison Reges Vidal.
Sistemas de Arquivos Sistemas Operacionais Profa. Priscila Facciolli
Capítulo 2 Processos e Threads 2.1 Processos 2.2 Threads
Estruturas de Sistemas Operacionais. Componentes Comuns do Sistema Administração de Processos Administração da Memória Principal Administração do Armazenamento.
Bruna Cavallero Martins Universidade Católica de Pelotas.
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais Prof.: Gustavo Wagner FATEC-PB.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
Transcrição da apresentação:

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

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

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

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.

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.

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

Descritor de processos – localização na pilha de processos 0x015fbfff PILHA 0x015fb000 0x015fa878 esp 0x015fa3cb Descritor do processo corrente 0x015fa000

Task struct – atributos do processo

Task struct – escalonamento

Task struct – relação entre processos

Task struct – credenciais

Task struct – arquivos e memória

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)

Estados de processos no linux

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

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

Estrutura da tabela PIDHASH

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

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

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

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”

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

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

Flags para a chamada CLONE do Linux

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