Processos. Sistemas Operativos 2015 / Multiprogramação. Execução, em paralelo, de múltiplos programas na mesma máquina

Documentos relacionados
Processos, tarefas e núcleo

Manipulação de processos

Processos. Estados principais de um Processo: Contexto de um Processo. Nível de um Processo.


Conceitos de Sistemas Operacionais: Chamadas de Sistema. Prof Rafael J. Sandim

E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro. Programação Concorrente em Linux

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06. Funções, variáveis, parâmetros formais

Programação 2009/2010 MEEC - MEAer Laboratório 5 Semana de 26 de outubro de 2009

Arquitetura de Computadores Sistemas Operacionais II

SVCs para Controle de Processos no Unix. Sistemas Operacionais

PROCESSOS COMPONENTES DE UM PROCESSO. A execução de um processo possui vários componentes. PID e PPID

Um processo sob UNIX ocupa uma área de memória formada basicamente por 3 partes:

Processos em Unix. Conteúdo: Definição de Processos em Unix Estrutura, tipo e escalonamento de processos em Unix Processos, Pai, Filho e Zumbi.

Aula 10: Escalonamento da CPU

Comunicação entre Processos Canal de comunicação Arquitetura da comunicação Modelos de comunicação

Programação de Sistemas

Sistemas Operacionais

Driver Next Versão 1.0 de Português

Sistemas Operacionais. Rodrigo Rubira Branco

Árvores. ! utilizada em muitas aplicações. ! modela uma hierarquia entre elementos. ! O conceito de árvores está diretamente ligado à recursão

Nivel de Linguagem de Montagem (Assembly)

Conceitos Básicos sobre Programação Prática

6. Comunicação entre processos - Pipes

Simulado de Linguagem de Programação Java

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

Sistema de Controlo com Acesso Remoto

Dicas de Segurança sobre Virus

Introdução ao. Script. Baltazar Tavares (Psycho Mantys)

Conteúdo programático

Introdução à orientação a objetos

Inteligência Artificial

Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads.

Método de ordenação - objetivos:

Sobre o Visual C

UNIVERSIDADE ESTADUAL PAULISTA. Apostila Pascal Ed Prof. Dr. Galeno José de Sena DMA/FEG CAPÍTULO 8

Conceitos básicos sobre computadores

Formas de Pagamento Resumida Vendas Vendedor Vendas Vendedor Resumido Vendas Vendedor Caixa Vendas por Artigos...

Programação Estruturada I

Processamento com SPOOL. Utilização do CPU e periféricos. Perfis dos programas. Exemplo IBM 1460 (1963) Problemas no escalonamento.

aplicação arquivo Condições Gerais de Utilização

FastCube 2.0 Programmer Manual

Ciclo de Vida de um Processo

Sistemas Operacionais. Sincronização: Semáforos Problema dos Leitores/Escritores

PROGRAMAÇÃO DE COMPUTADORES

Aplicativo para geração automática de páginas de gerenciamento on-line de banco de dados para sites

PROCESSOS. Prof. Maicon A. Sartin

Macros e Programação VBA

Gestão Documental. Gestão Documental

10. CPU (Central Processor Unit) Conjunto das instruções Estrutura interna Formato das instruções...

Manual de Programação TED1000 versão TC100 Ethernet

Fundamentos de Sistemas Operacionais

Curso C: Ponteiros e Arrays

Programação Concorrente Processos e Threads

Gestão de Actas Escolares. Manual Utilizador. (Versão 4)

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

7 Processos. 7.1 Introdução

Programação de Sistemas Carris

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

SISTEMAS OPERACIONAIS. 3ª. Lista de Exercícios

Máquinas virtuais. Máquina virtual de um processo. Máquinas virtuais (3) Máquina virtual de sistema. Máquinas virtuais (1) VMware para Windows e Linux

Do alto-nível ao assembly

Passos para a instalação

Sistemas Operativos 2001/2002

Gestor de Processos Núcleo do Sistema Operativo. Sistemas Operativos 2012 / Gestor de Processos

Java na Prática. Célio Silva Aula 3

,QVWDODomR. Dê um duplo clique para abrir o Meu Computador. Dê um duplo clique para abrir o Painel de Controle. Para Adicionar ou Remover programas

UNIVERSIDADE DO TOCANTINS TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PRÁTICA EM PROGRAMAÇÃO DE SISTEMAS

Eleição de Líder. Alysson Neves Bessani Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

Processos. Paulo Sérgio Almeida 2005/2006. Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho

Gestão de Sistemas Operacionais I

Organização e Arquitetura de Computadores. Ivan Saraiva Silva

Sincronização. Cooperação entre Processos

Criando scanner para dectar BackupExec vulneráveis ao exploit do Metasploit. Inj3cti0n P4ck3t

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Cadeira de Tecnologias de Informação. Ano lectivo 2009/2010. Sites dinâmicos. Com Expression Web TI2009/10 EWD_1. Filipa Pires da Silva (2009)

Gestor de Processos Núcleo do Sistema Operativo. Sistemas Operativos 2011 / Gestor de Processos

Sistemas Operacionais INF Prof. José Gonçalves

Informática I. Aula Aula 19-20/06/06 1

Engenharia de Software II

Exercício de Estrutura de dados. Java Fila

Gestor de Processos Núcleo do Sistema Operativo

Sistema de Entrada/Saída

Processos. Adão de Melo Neto

testo Saveris Web Access Software Manual de instruções

Atividade de Treinamento. Documentando Programas no SPDSW. HI Tecnologia Indústria e Comércio Ltda. Documento de acesso Público

Gestor de Processos. Gestor de Processos

Sistemas Operacionais

Construa a função insere_lista para inserir um elemento na lista ordenada, duplamente encadeada, descrita acima.

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Aplicações de RPC no Ambiente SUN-OS

Transcrição:

Processos Sistemas Operativos 2015 / 2016 Multiprogramação Execução, em paralelo, de múltiplos programas na mesma máquina Cada instância de um programa em execução denomina-se um processo Considerando um grau de tempo fino, o paralelismo não é real Pseudoparalelismo ou pseudoconcorrência implementaçãode sistemas multiprogramadossobre um computador com um único processador Page 1 1

Pseudoconcorrência P1 P2 P3 Tempo real de execução dos processos t P1 P2 P3 Utilização do processador t Processos vs. Programas Programa = Fich. executável(sem actividade) Um processo é um objecto do sistema operativo que suporta a execução dos programas Um processo pode, durante a sua vida, executar diversos programas Um programa ou partes de um programa podem ser partilhados por diversos processos (ex.: biblioteca partilhadas as DLL no Windows) Page 2 2

Processo Como Uma Máquina Virtual Espaço de Endereçamento Reportório de Instruções Contexto de Execução (Estado Interno) Elementos principais da máquina virtual que o SO disponibiliza aos processos Processo Como Uma Máquina Virtual Tal como um processador um processo tem: Espaço de endereçamento (virtual): Conjunto de posições de memória acessíveis Código, dados, e pilha Dimensão variável Reportório de instruções: As instruções do processador executáveis em modo utilizador As funções do sistema operativo Contexto de execução (estado interno): Valor dos registos do processador Toda a informação necessária para retomar a execução do processo Memorizado quando o processo é retirado de execução Page 3 3

Hierarquia de Processos Utilizador A Utilizador B Proc. inicial Proc. inicial Subprocesso 1 Subprocesso 2 Subprocesso 3 Subprocesso 1 Subprocesso 2 certas informações são herdadas Modelo: Objecto Processo Propriedades Identificador Programa Espaço de Endereçamento Prioridade Processo pai Canais de Entrada Saída, Ficheiros, Quotas de utilização de recursos Contexto de Segurança Operações Funções sistema que actuam sobre os processos Criar Eliminar Esperar pela terminação de subprocesso Page 4 4

Exemplo: Unix ps el more UID PID PPID C STIME TTY TIME CMD root 0 0 0 Sep 18? 0:17 sched root 1 0 0 Sep 18? 0:54 /etc/init - root 2 0 0 Sep 18? 0:00 pageout root 3 0 0 Sep 18? 6:15 fsflush root 418 1 0 Sep 18? 0:00 /usr/lib/saf/sac -t 300 daemon 156 1 0 Sep 18? 0:00 /usr/lib/nfs/statd ps displays information about a selection of the active processes. e select all processes l long format Exemplo: Windows Page 5 5

Exemplo: Windows Criação de um processo IdProcesso = CriarProc (Código, Prioridade,... ) Quando a criação tem sucesso o sistema atribui um identificador interno (PID) ao processo que é retornado na função A função tem frequentemente diversos parâmetros: a prioridade, canais de entrada/saída,... Na criação de um processo tem de ficar definido qual é o programa que o processo vai executar. Normalmente é especificado um ficheiro contendo um programa executável. Page 6 6

Eliminação de processos Eliminação do processo quando o seu programa termina, libertando todos os recursos e estruturas de dados detidas pelo processo Sair ([Estado]) Eliminação de outro processo EliminarProc ( IdProcesso ) O processo cujo identificador é passado como parâmetro é eliminado. O núcleo do SO valida se o processo que invoca esta função tem privilégios para a poder executar Terminação do Processo Filho Em numerosas situações o processo pai pode querer bloquear-se esperando a terminação de um processo filho Estado = EsperarTerminacao (Idprocesso) O processo pai pode esperar por um processo específico ou genericamente por qualquer processo Page 7 7

Modelo de Segurança Um processo em execução tem de estar associado a um Utilizador (entidade que pode ser responsabilizada pelos seus actos) Os utilizadores são representados no sistema por um código que os identifica (User IDentifier UID) Para facilitar a partilha o utilizador pode pertencer a um grupo ou grupos de utilizadores (identificador por um GID) Controlo dos Direitos de Acesso Autorização -operação que valida os direitos do utilizador sobre um recurso antes deste poder executar uma operação sobre ele. A autorização baseia-se conceptualmente numa Matriz de Direitos de Acesso Objectos Utilizadores 1 2 3 1 Ler - Escrever 2 - Ler/ Escrever - 3 - - Ler Para um dado objecto a coluna da matriz define a Lista de Direitos de Acesso (ACL) Para um dado utilizador a linha respectiva define todos os seus direitos normalmente designados por Capacidade Page 8 8

UNIX PROCESSOS (Sob o pontode vista do utilizador) Processos em Unix Identificação de um processo Um inteiro designado por PID Alguns identificadores estão pré atribuídos: processo 0 é o swapper (gestão de memória) e o processo 1 init é o de inicialização do sistema Os processos relacionam-se de forma hierárquica O processo herda todo o ambiente do processo pai O processo sabe quem é o processo de que descende designado por processo pai. Quando o processo pai termina os subprocessos continuam a executar-se, são adoptados pelo processo de inicialização (pid = 1) Os processos têm prioridades variáveis. Veremos as regras de escalonamento mais adiante. Page 9 9

Processos em Unix Espaço de endereçamento em modo Utilizador Organiza-se em três zonas que no Unix original se designavam por segmentos: texto -código do programa dados (heap) -espaço de dados do programa pilha (stack) Espaço de endereçamento em modo Núcleo No interior do núcleo existe uma zona de dados para cada processo que contem o seu contexto Uma pilha para execução do processo em modo núcleo. Processos em Unix Cada processo também tem associado um contexto de execução acessível em modo utilizador e que contém diversas variáveis úteis para os programas utilitários ou para as aplicações. Exemplo: HOME=/usr/pjpf SHELL=/bin/csh USER=pjpf PATH=/usr/pjpf/bin/:/usr/local/bin:/bin Este contexto é herdado do processo pai e pode ser modificado livremente porque reside no espaço utilizador. Nos programas em C é acessível através do parâmetro do main ou de uma variável externa: main (arc, arv, envp) extern char **environ Page 10 10

Exemplo do uso do fork: Chrome No browser Chrome, criar um novo separador causa chamada a fork Processo filho usado para carregar e executar scripts dos sites abertos nesse separador Porquê? id = fork() Criação de um Processo Então que atributos diferem entre filho e pai? A função não tem parâmetros, em particular o ficheiro a executar. Processo filho é uma cópia do pai: - O espaço de endereçamento é copiado - Contexto de execução é copiado A função retorna o PID do processo. Este parâmetro assume valores diferentes consoante o processo em que se efectua o retorno: ao processo pai é devolvido o pid do filho ao processo filho é devolvido 0-1 em caso de erro Estas cópias são pesadas? Se acontecessem literalmente, seriam. Na verdade, a chama a fork é muito rápida. Veremos mais tarde qual o segredo. Retorno de uma função com valores diferentes! Nunca visto em programação sequencial Page 11 11

Exemplo de fork main() { int pid; pid = fork(); if (pid == -1) /* tratar o erro */ if (pid == 0) { /* código do processo filho */ } else { } /* código do processo pai */ } /* instruções seguintes */ Terminação do Processo Termina o processo, liberta todos os recursos detidos pelo processo, ex.: os ficheiros abertos Assinala ao processo pai a terminação void exit (int status) Status é um parâmetro que permite passar ao processo pai o estado em que o processo terminou. Normalmente um valor negativo indica um erro Page 12 12

E se a main terminar com return em vez de exit? Até agora, nunca chamámos exit para terminar programas Terminação de programa feita usando return (int) na função main do programa Qual a diferença? Nenhuma, pois o compilador assegura que return da main resulta em chamada a exit! main_aux(argc, argv) { int s = main(argc, argv); exit(s); } Função main do programador Terminação do Processo Em Unix existe uma função para o processo pai se sincronizar com a terminação de um processo filho Bloqueia o processo pai até que um dos filhos termine int wait (int *status) Retorna o pid do processo terminado. O processo pai pode ter vários filhos sendo desbloqueado quando um terminar Devolve o estado de terminação do processo filho que foi atribuído no parâmetro da função exit Page 13 13

Como usar o estado de terminação man wait [...] If status is not NULL, wait() and waitpid() store status information in the int to which it points. This integer can be inspected with the following macros (which take the integer itself as an argument, not a pointer to it, as is done in wait() and waitpid()!): WIFEXITED(status) returns true if the child terminated normally, that is, by calling exit(3) or _exit(2), or by returning from main(). WEXITSTATUS(status) returns the exit status of the child. This consists of the least significant 8 bits of the status argument that the child specified in a call to exit(3) or _exit(2) or as the argument for a return statement in main(). This macro should only be employed if WIFEXITED returned true. WIFSIGNALED(status) returns true if the child process was terminated by a signal. WTERMSIG(status) ser obtido usando esta macro returns the number of the signal that caused the child process to terminate. This macro should only be employed if WIFSIGNALED returned true. WCOREDUMP(status) returns true if the child produced a core dump. This macro should only be employed if WIFSIGNALED returned true. This macro is not specified in POSIX.1-2001 and is not available on some UNIX implementations (e.g., AIX, SunOS). Only use this enclosed in #ifdef WCOREDUMP... #endif. [...] Processo filho nem sempre termina normalmente (com exit)! Quando termina com exit, inteiro retornado deve Há várias razões para terminação sem exit Exemplo de Sincronização entre o Processo Pai e o Processo Filho main () { int pid, estado; } pid = fork (); if (pid == 0) { /* algoritmo do processo filho */ exit(0); } else { /* o processo pai bloqueia-se à espera da terminação do processo filho */ pid = wait (&estado); } Page 14 14

Pode o núcleo eliminar todo o estado do processo quando este chama exit? Exit causa eliminação de grande parte do estado do processo Mas são mantidos atributos que serão necessários para quando o pai chamar wait: Pid do processo terminado e do seu processo pai Status da terminação Entre exit e wait, processo diz-se zombie Só depois de wait o processo é totalmente esquecido O minimalismo da função fork O fork apenas permite lançar processo com o mesmo código Prós e contras? Page 15 15

Como ter filho a executar programa diferente? int execl(char* ficheiro, char* arg0, char* argl,, argn,0) int execv(char* ficheiro, char* argv []) Caminho de acesso ao ficheiro executável Argumentos para o novo programa. Podem ser passado como apontadores individuais ou como um array de apontadores. Estes parâmetros são passados para a função main do novo programa e acessíveis através do argv Como ter filho a executar programa diferente? A função exec substituio espaço de endereçamento do processo onde é invocada por aquele contido num ficheiro executável Programa substituído pelo programa no ficheiro Heap substituída pela heap inicial do ficheiro Stack é esvaziado Instruction pointer aponta para a 1ª instrução do main do novo programa Parâmetros de entrada da nova função main: são os mesmos que foram passados como argumento à função exec Não há retorno numa chamada com sucesso Porquê? Restante contexto de execução mantém-se intacto Exemplos de atributos que se mantêm? Como fazer caso se queira que alguns desses atributos não sejam herdados pelo filho? Page 16 16

Exemplo de Exec main () { int pid; Por convenção o arg0 é o nome do programa } pid = fork (); if (pid == 0) { execl ("/bin/who", "who", 0); /* controlo deveria ser transferido para o novo programa */ printf ("Erro no execl\n"); exit (-1); } else { /* algoritmo do proc. pai */ } Um exemplo completo: Shell O shell constitui um bom exemplo da utilização de fork e exec (esqueleto muito simplificado) while (TRUE){ prompt(); read_command (command, params); } pid = fork (); if (pid < 0) { printf ( Unable to fork ); continue; } if (pid!=0) { wait(&status) } else{ execv (command, params); } Page 17 17

Autenticação Um processo tem associados dois identificadores: o número de utilizador, UID (user identification) o número de grupo, GID (group identification) Atribuídos quando o utilizador efectuao login (se autentica) perante o sistema Os UID e GID são obtidos do ficheiro /etc/passwd no momento do login O UID e o GID são herdados pelos processos filhos superuser(ou root) tem um UID especial zero Autorizado a realizar quaisquer operações sobre os recursos lógicos superuser vs execução em modo núcleo? Autenticação Um processo tem associados dois identificadores: o número de utilizador, UID (user identification) o número de grupo, GID (group identification) Atribuídos quando o utilizador efectuao login (se autentica) perante o sistema Os UID e GID são obtidos do ficheiro /etc/passwd no momento do login superuser(ou root) tem um UID especial zero Autorizado a realizar quaisquer operações sobre os recursos lógicos superuser vs execução em modo núcleo? Page 18 18

fork O UID e o GID são herdados pelos processos filhos exec O que acontece se processo com UID/GID executa programa cujo ficheiro é UID /GID? Page 19 19

Amplificação de direitos Processo pode temporariamente correr com privilégios maiores (UID ou GID diferentes) Exemplo? Bit SetUID No ficheiro executável pode existir uma indicação especial que na execução do exec provoca a alteração do uid O processo assume a identidade do dono do ficheiro durante a execução do programa. Exemplo: comando passwd Operação crítica para a segurança Page 20 20

Funções sistema Real UID e GID UID e GID originais do processo Effective UID e GID usado para verificar permissões de acesso e que pode ter sido modificado pelo setuid getpid() - devolve a identificação do processo getuid(), getgid() devolvem a identificação real do utilizador geteuid(), getegid() devolvem a identificação efectiva do utilizador Page 21 21