Processos Unix - DEINF/UFMA - Departamento de Informática ...geraldo/soii/2.unix_02.pdf ·...

Preview:

Citation preview

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

Recommended