fundamentos de sistemas operacionaisdiego/disciplinas/2011_1/sisop/aula...processos e threads diego...
TRANSCRIPT
Fundamentos de Sistemas Operacionais
Aula 7: Implementação de Processos e Threads
Diego Passos
Revisão
Programação Concorrente e Multiprogramação
SOs modernos permitem diversos processos em memória.Cada um tem seu estado, código.
Processos podem ser alternados no processador.Batch com multiprogramaçãoTimesharing.
Quando um processo volta ao processador, seu estado tem que ser restaurado.
Execução continua de onde havia parado.Processos podem ter várias threads.
Linhas de execução.
Organização de um Processo em Memória
Várias Áreas
O espaço de endereçamento é dividido em várias áreas:Texto.Dados.BSS.Heap.Pilha.
Cada área tem propriedades diferentes. Cada área tem utilidades diferentes.
Distribuição de Áreas
Fonte: "Sistemas Operacionais". Rômulo Oliveira, Alexandre Carissimi, Simão Toscani. 2a edição (slides).
Área de Texto
Armazena o código executável do processo.Sequência de instruções a serem executadas.
O registrador PC sempre aponta para algum lugar desta região.Em geral, não processo não tem permissão de escrita.
Área de Dados
Variáveis globais inicializadas são guardadas nesta área.Toda variável global declarada no código fonte cujo valor inicial foi especificado pelo programador.
Exemplo:Programador faz a declaração global:
int x = 10;
Ao carregar o programa em memória, o SO escreve o valor 10 em uma posição de memória nesta área.
Processos podem ler e escrever nesta área.
Área de BSS
Block Started by Symbol.Contém variáveis globais que não foram inicializadas em tempo de compilação. Exemplo:
Programador faz a declaração global: int x;
Um espaço nesta área é criado, geralmente com o valor 0.
Processo pode ler e escrever nesta área.
Área do Heap
Área destinada à memória dinâmica.Alocação de grandes vetores.Quando não se conhece a dimensão em tempo de compilação.
Em tempo de execução, processo aloca regiões do heap.Exemplo:
Funções malloc() e free() no C.Processo pode ler e escrever nesta área.
Área da Pilha
Área utilizada para armazenar informações sobre funções.Variáveis locais.Endereço de retorno.Parâmetros.
Chamadas de funções podem ser aninhadas.A área de memória destinada a uma função é "empilhada" sobre a área da função que a chamou.
Processo pode ler e escrever nesta área.
Permissões das Áreas de Memória
Cada área tem sua política de controle de acesso.Somente leitura, leitura e escrita, execução...
Por que?Questões de segurança.Se as áreas de dados pudessem ser executadas, programas que lêem dados de usuários ou máquinas remotas seriam focos de ataques.
Processo pode requisitar alteração nas permissões.Exemplo: self-modifying code.
Contexto de um Processo
Chaveamento entre Processos
SO pode decidir tirar um processo do processador e colocar outro no lugar.Quando o processo original retorna ao processador, estado tem que ser o mesmo.
Salvar e Restaurar o Contexto do Processo. Fazem parte do estado de um processo:
Registradores.Memória (espaço de endereçamento).
Quais Informações Precisam ser Salvas/Restauradas?
Espaço de endereçamento só pode ser acessado pelo próprio processo.
Outros processos em execução não mudarão variáveis do processo original.
Únicos valores que mudam são os registradores.Usados por qualquer processo que utilize o processador.
O contexto do processo (do ponto de vista do que precisa ser salvo):
Valores dos registradores no momento em que o processo é interrompido.
Troca (ou Chaveamento) de Contexto
Processo é interrompido.Requisição de E/S ou fim do slice de tempo.
SO salva o contexto atual.Valores dos registradores.
SO escolhe um processo para utilizar o processador a partir de agora.Seu contexto é buscado e recarregado no processador.Novo processo (re)começa sua execução.
Onde Salvar o Contexto?
Contexto é salvo na memória principal.Poderia ser salvo no espaço de endereçamento do processo.
Não é interessante.Processo gerencia o uso do espaço de endereçamento.SO pode sobrescrever dados do processo.
Opção:Salvar o contexto em uma área de memória pertencente ao SO.Processos de aplicação não têm acesso.
Representação de um Processos no Kernel
Bloco de Descritor de Processo
Estrutura de dados que o SO utiliza para armazenar informações sobre cada processo.São armazenadas informações relevantes ao gerenciamento do processo.
Prioridade.Localização do espaço de endereçamento.Recursos alocados para o processo.Estado.Contexto.Contabilidade.Parentesco....
Tabela (ou Lista) de Descritores
Há um descritor por processo carregado no sistema.SO precisa de uma maneira de organizar os descritores em memória.Várias opções:
Lista encadeada de descritores.Tabela (vetor) de descritores.
Número de processos é limitado.Manipulação mais eficiente.
Filas do Sistema
SO guarda inúmeras filas:Filas de processos aptos.Filas de requisições de recursos.
Elementos destas filas são ponteiros para os blocos descritores ou índices na tabela de descritores.
Criação de um Processo
SO aloca memória para o espaço de endereçamento do processo.SO aloca um bloco descritor para o novo processo.
Valores iniciais dos campos são preenchidos.Endereços do espaço de endereçamento.Contadores.Etc.
Referência para o bloco é colocada na fila de processos aptos.
Término de um Processo
Recursos do processo são liberados.Percorre-se as listas de recursos alocados.
Sockets, arquivos abertos, dispositivos de hardware. Referências ao processo em filas do sistema são retiradas.Bloco descritor do processo é desalocado.
Ou marcado como inativo.Ou retornado para uma lista de livres.Ou...
Threads
Threads São Diferentes de Processos
Processos:Compostos por código, memória, estado dos registradores, lista de recursos alocados...
Threads:Linhas de execução dentro de um processo.
Dizem qual sequência de instruções deve ser executada.
Têm estado, mas bem menor que os processos.Apenas alguns registradores.Sub-conjunto do estado de um processo.
Todo processo tem ao menos uma thread.
Programação Concorrente Leve vs. Pesada
Threads vs. Processos.Chaveamento de processos é mais lento.
Maior contexto para alternar.Threads de um mesmo processo diferem o estado por alguns registradores.
Criação e término de threads também é mais rápido.Sem necessidade de alocar outro espaço de endereçamento.Sem necessidade de um bloco descritor de processo.
Threads no Nível do Usuário
Alguns SOs não implementam threads nativamente.Conhecem apenas processos.
Threads podem ser implementados na própria aplicação.Através de bibliotecas.
Bibliotecas se encarregam de dividir o slice do processo entre várias threads.
Chaveamento é feito pela biblioteca.Sem interferência do SO.Contexto é guardado no espaço de endereçamento do processo.
Chamado de Modelo N:1. SO conhece apenas uma entidade (processo).Processo equivale a N linhas de execução.
Threads no Nível do Sistema
SO implementa o conceito de thread.Escalonamento se dá sobre as threads, e não sobre processos. Operações são todas feitas pelo SO.
Criação, encerramento, chaveamento de threads.Modelo conhecido como 1:1.
Cada entidade manipulada no escalonamento corresponde a uma linha de execução.
Comparação Entre os Modelos
Operações nas threads do usuário são mais rápidas que nas threads do sistema.
Não há interação com o SO.Sem interrupções, trocas de contexto, etc.
Escalonamento das threads do usuário é menos eficiente.Todas as threads usam o mesmo processador.
Atribuído ao processo. Pedido de E/S de uma thread do usuário faz todas serem bloqueadas.
Processo inteiro é bloqueado
Modelo M:N
Combinação de threads do usuário com threads do sistema.Biblioteca de threads requisita criação de M threads do sistema.
Cada thread do sistema executa N threads do usuário.Dependendo da aplicação, pode unir os benefícios das duas abordagens.
Depende da escolha correta de M e N.Depende das características da aplicação.Escolha não é trivial.
Revisão
Para Lembrar
Memória de um processo é dividida em áreas.Áreas diferentes têm permissões diferentes.
O contexto de um processo:Estado dos registradores.
Bloco descritor do processo:O que é.Exemplos de informações guardadas nele.
Threads:O que são.Threads vs. ProcessosNível do usuário vs. Nível do Sistema