23
Processos no Unix e Linux Processos no Unix e Linux

Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Embed Size (px)

Citation preview

Page 1: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Processos no Unix e LinuxProcessos no Unix e Linux

Page 2: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Controle de processoControle de processo

Um processo é um programa em execução.

Os processos são identificados pelos seus identificadores de processos, números inteiros.

Chamadas ao sistema para controle de processos

fork cria um novo processo

exec é usada após um fork para substituir a memória virtual do processo filho com um novo programa carregado de um arquivo

exit termina um processo

Um processo pai pode esperar pelo filho através da chamada wait que fornece o identificador do processo filho terminado de forma que o pai possa saber qual filho foi terminado.

wait permite o pai coletar estatísticas de desempenho sobre o processo filho

Um processo zumbi é resultado da terminação do pai antes da terminação do filho.

Page 3: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Ilustração das chamadasIlustração das chamadas

Page 4: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Controle de processos (Cont.)Controle de processos (Cont.)

Os processos se comunicam através de pipes, que são filas de bytes entre dois processos disponíveis ou acessáveis através dos descritores de arquivos.

Todos os processos de usuário são descendentes do processo original, init.

init cria um processo getty que inicializa os parâmetros de um terminal e transfere os caracteres de login do usuário para o processo login.

login seta o identificador de usuário do processo referente ao usuário recém-logado e executa um shell que cria os subprocessos a partir dos comandos do usuário.

Page 5: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Controle de processos (Cont.)Controle de processos (Cont.)

Page 6: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Controle de processos (Cont.)Controle de processos (Cont.)

Os bit setuid são os identificadores efetivos do usuário do processo referentes ao dono do arquivo executável, ao passo que o identificador real de usuário é o usuário que ativou o arquivo.

O esquema setuid permite que certos processos possam ter privilégios acima do usuário comum que ativou o comando ou arquivo executável.

Page 7: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Rotinas de bibliotecaRotinas de biblioteca

A interface das chamadas ao sistema no UNIX tem suporte e é melhorada através de uma grande coleção de rotinas de biblioteca.

Arquivos de cabeçalho fornecem a definição das estruturas de dados complexas usadas nas chamadas ao sistema.

Suporte adicional da biblioteca é fornecido para funções matemáticas, acesso à rede, conversão de dados.

Page 8: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Interface de usuárioInterface de usuário

Os programadores e usuários lidam principalmente com os programas de sistemas já existentes: as chamadas ao sistema necessárias estão embutidas dentro dos programas e não precisam estar explicitamente disponíveis para o usuário.

Os programas de sistema mais comuns são orientados para a manipulação de arquivos e diretórios:

Diretórios: mkdir, rmdir, cd, pwd

Arquivos: ls, cp, mv, rm

Outros programas estão associados aos editores (ex., emacs, vi) formatadores de texto (ex., troff, TEX), e outras atividades.

Page 9: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

E/S padrãoE/S padrão

A maioria dos processos espera encontrar 3 descritores de arquivos abertos quando são iniciados:

Entrada padrão – programa pode ler o que o usuário digita.

Saída padrão – programa envia saída para a tela do usuário.

Saída de erro padrão – saída de erro.

A maioria dos programas podem também aceitar um arquivo (ao invés de terminal) como entrada ou saída padrão.

Os shells normalmente tem uma sintaxe simples para permitir a mudança da entrada e saída padrão para arquivos – conhecido como redirecionamento de E/S.

Page 10: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Redirecionamento padrão de E/SRedirecionamento padrão de E/S

Page 11: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Gerência de processoGerência de processo

A representação de processos é uma grande questão de projeto para um sistema operacional.

UNIX se distingue de outros sistemas no sentido de que processos múltiplos podem ser criados e manipulados com facilidade.

Estes processos são representados no UNIX por vários blocos de controle.

Blocos de controle associados com um processo são armazenados no núcleo.

Informação nestes blocos de controle são usados pelo kernel para controle de processo e escalonamento de UCP.

Page 12: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Bloco de controle de processoBloco de controle de processo

A estrutura de dados mais básica associada com os processos é a estrutura de processo.

Identificador único de processo

Informação de escalonamento (ex. prioridade)

Ponteiros para outros blocos de controle

O espaço de endereçamento virtual de um processo de usuário é dividido em segmentos texto (código do programa), dados e pilha.

Cada processo com texto compartilhado tem um ponteiro de sua estrutura de processo para uma estrutura de texto.

Sempre residente na memória.

Registra quantos processos estão usando o segmento de texto.

Registra onde a tabela de páginas para aquele segmento de texto pode ser encontrada no disco quando permutada.

Page 13: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Segmento de dados do sistemaSegmento de dados do sistema

A maior parte do trabalho ordinário é feita no modo usuário, sendo as chamadas ao sistema feitas no modo núcleo.

As fases de usuário e de sistema de um processo nunca executam simultaneamente.

Uma pilha de núcleo (ao invés da pilha de usuário) é utilizada por um processo quando executando em modo núcleo.

A pilha de núcleo e a estrutura de usuário juntas compõe o segmento de dados do sistema para o processo.

Page 14: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Uso da estrutura do processo Uso da estrutura do processo

Page 15: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Alocando uma nova estrutura de processoAlocando uma nova estrutura de processo

fork aloca uma nova estrutura de processo para o processo filho e copia a estrutura de usuário.

Uma nova tabela de página é construída

Memória principal nova é alocada para os segmentos de dados e de pilha para o processo filho

A cópia da estrutura de usuário preserva os descritores de arquivos abertos, identificadores de usuário e grupo, tratamento de sinais entre outras.

Page 16: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

vfork não copia os dados e a pilha para o novo processo; o novo processo simplesmente compartilha a tabela de páginas com o processo antigo.

Uma nova estrutura de usuário e uma nova estrutura de processo são ainda criadas

Comumente usada pelo shell para executar um comando e esperar pelo seu término

Um processo pai usa vfork para produzir um processo filho; o processo filho usa exec para mudar seu espaço de endereço virtual, e portanto não há necessidade de uma cópia do pai.

O uso de vfork com um processo pai grande economiza tempo de UCP, mas pode ser perigoso pois qualquer mudança de memória ocorre em ambos os processos até a ocorrência de exec.

A chamada exec não cria um novo processo ou estrutura de usuário; apenas o segmento de texto (código) e dados do processo filho é substituído.

Alocando uma nova estrutura de processoAlocando uma nova estrutura de processo

Page 17: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Estados dos processos - UnixEstados dos processos - Unix

Page 18: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Estados do processo - UnixEstados do processo - Unix

Page 19: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Criação de processosCriação de processos

Page 20: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Chamadas ao sistema para processosChamadas ao sistema para processos

Page 21: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Shells e comandosShells e comandos

Shell – o processo de usuário que executa programas (também conhecido como interpretador de comandos).

Chamado de shell (concha) porque envolve o núcleo.

O shell indica sua condição de estar pronto para aceitar um comando através da impressão do prompt, permitindo que o usuário digite uma linha de comandos.

Um comando típico é um arquivo binário executável, embora existam comandos internos.

O shell busca no caminho de busca o arquivo correspondente ao comando (quando este é externo) para ser carregado e executado.

Os diretórios /bin e /usr/bin estão quase sempre no caminho de busca.

Page 22: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Shells e comandos (Cont.)Shells e comandos (Cont.)

Busca típica em um sistema BSD:

( ./home/prof/avi/bin /usr/local/bin /usr/ucb/bin/usr/bin )

O shell usualmente suspende sua execução até que o comando complete sua própria execução.

Exceção: comando termina com & (execução em background).

Page 23: Processos no Unix e Linux. Controle de processo Um processo é um programa em execução. Os processos são identificados pelos seus identificadores de processos,

Exemplo – execução do comando lsExemplo – execução do comando ls