Processos Unix - DEINF/UFMA - Departamento de Informática ...geraldo/soii/2.unix_02.pdf ·...
Transcript of Processos Unix - DEINF/UFMA - Departamento de Informática ...geraldo/soii/2.unix_02.pdf ·...
UnixProcessos
1
Geraldo Braz Junior
Processos no Unix
Unix é multiprogramado;
Para cada processo é atribuído um Pid;
Diversos daemons são executados: Cron
Processamento de emails
Gerenciamento da fila de impressão, etc...
2
Criando Processos Uma chamada fork permite que um
processo crie outros processos fork cria uma cópia exata do processo
original O processo criador é denominado pai e o
criado filho Arquivos abertos são compartilhados entre
pai e filho; As imagens da memória, variáveis,
registradores são idênticos no pai e filho: como permitir que os processos saibamquem deve executar no código do pai e quem deve executar no código do filho?
3
Criando ProcessosProcess creation in UNIX.
4
Um processo pode construir uma árvore inteira de filhos, netos
e descendentes mais distantes
Algumas Formas de Comunicação Entre Processos
Pipes Canal entre dois processos no qual um deles
pode escrever um fluxo de bytes para o outro;
Ao tentar ler uma entrada do pipe, o processo é bloqueado até que o dado esteja disponível;
Pipilines do shell são implementados com pipes
sort < f |head
5
Algumas Formas de Comunicação Entre Processos
Interrupções de software (sinais) Um processo envia um sinal a outro;
O receptor pode ignorar, capturar ou deixar o sinal matar o processo;
Caso capture o sinal, deve ser definido um procedimento para trata-lo;
O controle é transferido para o tratador e ao término deste, o controle volta para onde estava.
6
Sinais Exigidos pelo POSIX
The signals required by POSIX.
7
Chamadas do Sistema paraGerenciamento de Processos
s é um código de erropid é a identificação do processoresidual tempo restante do alarme anterior
8
Parâmetros das Chamadas pid = waitpid(pid, &statloc, opts)
Id do processo pelo qual ocorrerá a espera
Status do término do processo
Determina se o chamador deve ou não ser bloqueado caso nenhum filho tenha terminado
s = execve(name, argv, envp)
Nome do arquivo a ser executado
Ponteiro para um vetor de argumentos
Ponteiro para um vetor de variáveis do ambiente
main (argc, argv, envp)
9
Parâmetros das Chamadas
s = sigaction(sig, &act, &oldact)
Sinal a ser capturado
Ponteiro para uma estrutura que fornece um ponteiro para o procedimento tratador do sinal
Ponteiro para uma estrutura em que o sistema retorna informações sobre o tratamento de sinais atualmente empregado
10
POSIX Shell
Um shell bastante simplificado
11
Threads Mecanismo que permite a um processo
ter mais de um fluxo de controle; Benefícios: O processo inteiro não necessita ficar
bloqueado ao realizar uma chamada bloqueante ao sistema; Exemplo de uso: planilha de cálculo
Pode-se explorar paralelismo em sistemas multiprocessados;
Simplifica o desenvolvimento de aplicações inerentemente concorrentes;
Melhor desempenho para aplicações complexas que tradicionalmente eram implementadas através de múltiplos processos comunicando-se através de mecanismos IPCs
12
Implementação de ThreadsBiblioteca no Espaço do Usuário
13
Implementação de ThreadsBiblioteca no Espaço do Usuário
Vantagens: suporte a threads me sistemas operacionais
que não as suportam nativamente;
Criação e destruição de threads custa pouco: alocação de memória e criação de pilha no espaço do usuário;
Troca de contexto entre threads custa pouco: troca de valores de registradores da UCP;
Pode-se prover várias políticas de escalomento dando aos processos a liberdade de escolher aquela que achar melhor;
Maior escalabilidade já que não ocupam recursos do kernel.14
Implementação de ThreadsBiblioteca no Espaço do Usuário
Desvantagens: Dificuldade na implementação de chamadas
bloqueantes ao kernel;
Dificuldade na implementação de preempção.
15
Implementação de Threadsno Kernel
16
Implementação de Threadsno Kernel
Desvantagem:
Cada operação com threads: criação, destruição, sincronização, etc.. Envolve o kernel o que requer uma chamada ao sistema que é cara.
17
Implementação de ThreadsLWP: Lightweight Process
18
Implementação de ThreadsLWP: Lightweight Process
LWPs são criadas por processos a nível de usuário através de uma chamada ao kernel;
Threads de usuário não são visíveis ao kernel: ele escalona LWPs;
Threads do usuário podem ser escalonadas em qualquer LWP criada pelo processo;
19
Implementação de ThreadsLWP: Lightweight Process
Chamada bloqueante: Interceptada pela LWP que pode realizar a
chamada real ao kernel ficando assim também bloqueada mas o processo inteiro NÃO fica;
Sincronização e troca de contexto entre threads do usuário são realizadas a nível do usuário.
20
Threads e o padrão POSIX
Não estabelece se threads devem ser implementadas no núcleo ou no espaço do usuário.
21
Threads no POSIX
The principal POSIX thread calls.
22
• Principais chamadas a threads no padrão POSIX
• mutex: destinados ao uso de curta duração como
proteção a uma
variável compartilhada
• variáveis de condição: longa duração
Implementação de Processos
O núcleo mantêm duas estruturas de dados relacionadas aos processos:Tabela de processo (residente na memória) e Estrutura do usuário (é paginada);
Tabela de processos:
Parâmetros de escalonamento: prioridade, tempo de CPU consumido recentemente e tempo dormindo recentemente;
Imagem da memória: ponteiros para segmentos de código, dados, pilha, tabelas de página;
Sinais: máscaras que mostram os sinais sendo ifnorados;
Miscelâneas: estado, tempo para larme, PID, PID do pai, identificação de grupo e usuário.23
Implementação de Processos
Estrutura do usuário: Registradores da máquina salvos quando
ocorrer um desvio de execução para o núcleo (trap);
Estado da chamada ao sistema: parâmetros e resultados;
Descritor de arquivo;
Contabilidade: tempo de CPU usado elimites de tempo de CPU, tamanho máximo de pilha, número máximo de páginas, etc…
Pilha do núcleo
24
Comando ls
Passos para execução do comando ls
25
Escalonamento
Algoritmo projetado para fornecer boa resposta a processos interativos;
Organizado em dois níveis: Inferior: escolhe um processo dos que estão
em memória prontos para executar. Utiliza múltiplas filas.
Superior: move processos entre a memória e o disco de modo que todos os processos tenham oportunidade de estar na memória para poder executar.
26
Escalonamento Inferior Utiliza múltiplas filas;
Cada fila possui uma prioridade. Quanto menor o valor da prioridade mais alta ela é;
Processos executando no modo usuário possuem valores positivos. Processos executando no modo núcleo possuem valores negativos;
Quantum é normalmente de 100 ms;
Processos de mesma prioridade são escalonados através de escalonamento circular.
27
Escalonamento Inferior
Uma vez por segundo, a prioridade de cada processo é recalculada:
prioridade = uso_CPU + nice + base
Uso_CPU: para não punir o processo sempre, uma opção é adicionar o valor atual ao número de tiques no intervalo Δt anterior e dividir por 2;
Nice: varia de –20 a +20. Somente root pode solicitar um serviço melhor (-20 a 1);
Base: ao retornar de uma espera por interromper o núcleo, o processo é colocado em uma fila de valor negativo de acordo com o evento que aguardava. Estes valores negativos são representados por base na fórmula.
28
Escalonador no UNIX
29
Iniciando o Unix O primeiro setor do disco de boot é lido
para memória e executado;
Ele contêm um pequeno programa (512 bytes) que carrega outro programa independente chamado boot;
O boot lê o diretório-raiz do disco e carrega o núcleo do sistema operacional (portanto, ele deve conhecer o sistema de arquivos);
O controle é transferido para o núcleo do sistema operacional.
30
Inicialização do Núcleo1. Aloca as estruturas de dados do núcleo;
2. Verifica os dispositivos de E/S presentes, carregando os drivers correspondentes;
3. Cria o processo 0 e o executa:1. Programa o relógio
2. Monta o sistema de arquivos-raiz
3. Cria o processo 1 (init)
4. Cria o daemon de paginação (processo 2)
4. O processo init:1. Lê o arquivo /etc/ttys que relaciona os
terminais
2. Para cada terminal é executado o programagetty que solicita o login do usuário
31
Inicialização do Unix
32
cp