Baixe o app para aproveitar ainda mais
Prévia do material em texto
Estrutura de dados Tipo abstrato de dados (TAD) Sistemas Operacionais Processos Fundamentos de Sistemas Operacionais – Processos 2 Processos 2.1 O que são processos? Antes de definir o que é um processo, vamos iniciar lembrando o que é um programa de computador. Um programa é um conjunto de códigos que poder ser interpretado e executado por um computador. Normalmente, esse código está gravado no HD de um computador e dizemos que este código é uma entidade passiva, ou seja, ele está simplesmente armazenado no HD, mas não tem nenhum efeito, não faz nenhuma ação: ele está simplesmente ocupando espaço sem interação. Quando esse programa de computador é colocado em execução, ele se torna uma entidade ativa, que interage com o sistema e passa a ser chamado processo. Então um processo pode ser definido como um programa em execução. Um processo ocupa necessariamente espaço em memória, pois tem suas instruções executadas pelo processador a partir da memória. Além disso, um processo pode consumir outros recursos do sistema, como dispositivos de E/S. Dentro do sistema operacional, é possível observar e gerenciar os processos em execução em um determinado instante. Por exemplo, no Windows utilizamos o Gerenciador de Processos, como pode ser visto na figura 1. Observe que a janela mostrada traz algumas informações importantes a respeito de cada processo, como o nome, o número de identificação (PID), nome do usuário que ativou o processo, quantidade de memória que o processo está utilizando, o número de threads que o processo possui, entre outras. Fundamentos de Sistemas Operacionais – Processos 3 2.2 Controle de processos Assim como podemos ver o sistema operacional, como um gerente de recursos físicos, como memória e dispositivos de E/S, ele também é o responsável por realizar o gerenciamento dos processos. Esse papel envolve as seguintes operações: Criar processos: a partir do momento em que um programa for colocado em execução, como vimos na definição, um processo é gerado. Para isso, o sistema operacional deve alocar recursos para o processo, como espaço em memória para o código e dados, tempo de uso do processador. Terminar um processo: Quando o processo terminar sua execução, todos os recursos que estavam em uso por ele devem ser liberados, como o espaço em memória. Bloquear um processo: Em alguns momentos, durante a execução de um processo, ele pode ser suspenso enquanto aguarda a conclusão de alguma tarefa. Durante esse período, o processador passa a ser utilizado por outro processo. Uma das operações que provoca o bloqueio de um processo é leitura ou Figura 1. Gerenciador de Processos Windows 7. Fundamentos de Sistemas Operacionais – Processos 4 gravação de arquivo em disco que tenha sido solicitada pelo processo em execução. Retomar um processo: Depois do período em que um processo fica bloqueado, ele volta a ser colocado em execução. Escalonar um processo: é sinônimo de escolher um processo. Nos equipamentos modernos, existem diversos processos em execução, mas não há tantos processadores disponíveis para que cada um seja executado por um processador. Desta forma, o sistema operacional deve escolher a cada momento os processos que serão colocados em execução e quais deverão ser colocados na fila de espera. Alternar entre processos: essa operação é realizada diversas vezes por minuto, cada vez que um novo processo é escalonado, outro que estava em execução deve ter sua execução temporariamente suspensa, para que o processo escalonado seja executado. Curiosidade O primeiro sistema de tempo compartilhado, que permitia a execução de diversos processos controlados pelo sistema operacional, foi concebido no início da década de 1960 no MIT (Massachusetts Institute of Technology) e foi chamado CTSS (Compatible Time-Sharing System – Sistema de Tempo Compartilhado Compatível). Em 1965, em conjunto com o Bell Labs, o mesmo grupo começou a trabalhar no sucessor deste sistema, o Multics (Multiplexed Information adn Computing Service), o sistema operacional que influenciou a origem de outros sistemas operacionais, como o UNIX. (DEITEL, 2005). 2.3 Estados de um processo A partir das operações definidas em 2.1, a cada momento um processo pode estar em um dos estados mostrados na figura 2. Fundamentos de Sistemas Operacionais – Processos 5 A seguir, há a descrição de cada um dos estados indicados na figura 2. Novo (new): Um processo está no estado de novo, imediatamente após ser acionado, por um clique de mouse ou uma chamada no prompt de comando por exemplo. Nesse estado, um processo é preparado para execução, seu código é carregado em memória, suas variáveis e tudo mais que for necessário à sua execução. Pronto (ready): Logo após processo estar disponível para ser executado, ele entra no estado de pronto, o que significa que o processo tem tudo o que precisa para ser executado. Normalmente, existem diversos processos nesse estado durante a execução do sistema operacional. Todos eles aguardam apenas seu momento no processador. Executando (running): Nesse status, o processo fato está sendo executado no processador naquele momento. Caso a máquina na qual esse processo esteja sendo executado tenha um único processador e seja single core (tem apenas um núcleo de processamento), podemos afirmar que há apenas um processo em execução por vez. Por outro lado, caso a máquina em questão possua mais de um processador, ou possua um processador multi-core (com mais de um núcleo de processamento), podem existir mais de um processo em execução ao mesmo tempo. Bloqueado (waiting): Um processo encontra-se no estado de Figura 2. Estados de um processo (SILBERSCHATZ, 2000). Fundamentos de Sistemas Operacionais – Processos 6 bloqueado ou espera quando ele não tem todos os recursos necessários para continuar sua execução, ou está aguardando a conclusão de alguma tarefa pelo sistema operacional ou pelo hardware. Como exemplo, podemos citar o caso de um processo que precisa aguardar a conclusão da gravação de um arquivo em disco. Nesse caso, o processo só voltara ao estado de pronto quando o arquivo tiver sido gravado no disco. Finalizado (terminated): Neste estado, um processo é finalizado, o que significa que a memória e os demais recursos que eram utilizados estão sendo liberados para o sistema operacional, para que estes recursos possam ser disponibilizados para outros processos. Observe que, de acordo com a figura 2, a transição de um estado para outro não é possível para qualquer outro. Somente são possíveis as transições seguindo os caminhos indicados na figura 1. Por exemplo, não é possível um processo sair do estado bloqueado para o estado executando de forma direta. 2.4 Bloco de controle de processos Para que o sistema operacional possa gerenciar um processo, é necessário armazenar uma série de informações a respeito desse processo. Para isso o sistema operacional mantém, para cada processo, uma tabela de informações, chamada Bloco de Controle do Processo (PCB – Process Control Block). Algumas destas informações são: ID do processo: Um número que identifica de forma única um processo, ou seja, é como se fosse o RG ou CPF de um processo dentro do sistema. Estado: Indica em qual dos estados do ciclo de vida um processo se encontra. Prioridade: É um número que indica a importância do processo comparado a outros. No momento do escalonamento, o sistema operacional pode utilizareste número para definir que processo será executado primeiro. Registradores: É um conjunto de valores que é utilizado para instruções de baixo nível no processador. Por meio destes valores, são realizadas operações no processador. Endereço de memória: Armazena endereços de memória que Fundamentos de Sistemas Operacionais – Processos 7 estão sendo utilizados pelo processo. Arquivos abertos: Indicam quais são os arquivos que estão sendo utilizados pelo processo. Leitura complementar Os processos em execução no sistema operacional normalmente obedece a uma hierarquia. Para saber mais acesse o artigo: <www.devmedia.com.br/hierarquia-de-processos-no-unix-e-windows/24739>. Acesso em: jul. 2013. Curiosidade O sistema operacional Linux permite gerencial de forma bastante detalhada o que acontece com um processo via linha de comando. Para saber mais detalhes de como fazer e quais são os comandos permitidos acesse o link: <www.infowester.com/linprocessos.php>. Acesso em: jul. 2013. 2.5 O que são threads Um thread é uma linha de execução, ou seja, uma sequência de código em execução. Da maneira como apresentamos o processo até este momento, existe uma única linha de execução no processo, ou seja, ele é capaz de realizar apenas uma instrução de cada vez. Este é um processo de thread único (single-thread). Já um processo com várias linhas de execução paralelas é chamado de processo com múltiplos threads (multithreads). A figura 3 ilustra os dois tipos de processos. Fundamentos de Sistemas Operacionais – Processos 8 Todo processo tem pelo menos uma linha de execução, porém os sistemas operacionais modernos podem gerenciar processos que possuem mais de uma linha de execução, significando que é possível para um mesmo processo ter mais de uma linha de execução simultaneamente. Para exemplificar esse conceito, imagine que um processador de textos esteja em execução. Se esse processo possui uma única linha de execução, então não é possível digitar e executar o corretor ortográfico simultaneamente. Mas se este processo possui mais de uma linha de execução, significa que à medida que o usuário digita o texto, simultaneamente o corretor ortográfico revisa o texto que está sendo digitado. É importante salientar que a execução de threads simultaneamente somente é possível se o processo foi programado para ser múltiplos threads, se o sistema operacional no qual o processo está executando possui recurso para gerenciar processos com múltiplos threads e também que o processador possui múltiplos núcleos. Os threads são conhecidos também como processos leves, porque são criados a partir de um processo e compartilham alguns dos itens presentes neste processo. Por exemplo, a área de memória do processo é compartilhada com o thread. Se houverem múltiplos threads em execução para um mesmo processo, todos irão acessar a mesma área de memória. Por outro lado, a pilha de execução deverá ser única para cada um dos threads. Este fato pode ser observado na figura 3, na qual código, dados e arquivos são compartilhados, e os registrados e a pilha não são compartilhados. O fato de um thread não possuir exclusivamente todos os itens presentes em um processo, faz com que a criação dele seja mais rápida do que a de um processo. Estima-se que a criação de um thread é cerca de 30% Figura 3. Processos de um ou mais threads (Silberschatz, 2000). Fundamentos de Sistemas Operacionais – Processos 9 mais rápida. Uma das vantagens imediatas da utilização de threads na construção de um programa é que há a possibilidade de ganho no tempo de execução. 2.5.1 Estados de um thread Assim como um processo pode estar em diferentes estados a cada momento, o thread também pode assumir diferentes estados. A figura 4 ilustra os diferentes estados em que um thread criado na linguagem Java pode estar a cada momento, e que estão relacionados à máquina virtual Java. 2.5.2 Benefícios do uso de threads Ao utilizar threads no desenvolvimento de um programa há uma série de benefícios obtidos. Economia: Em geral, alocar memória e recursos para um processo é demorado. Como threads compartilham recursos e áreas de memória com o processo que as criou, torna-se mais rápido a criação de um thread em relação à criação de um processo. Capacidade de resposta: Se uma aplicação não faz uso de multithreads e, por algum motivo, o processo é bloqueado, toda a aplicação também será. Por outro lado, com o uso de multithreads, se um dos threads for bloqueada, isso não impede as demais de continuar a executar, não bloqueando a aplicação como um todo. Desempenho: Ao utilizar multithreads, um processo pode ter diversas linhas de execução de seu código executadas em paralelo, o que faz com que haja um ganho de tempo de execução para a aplicação. Figura 4. Estados de um thread em Java (Silberschatz, 2000). Fundamentos de Sistemas Operacionais – Processos 10 Naturalmente, não há apenas ganhos no uso de threads. Uma desvantagem é a complexidade do código que se torna maior, dificultando também algumas questões implícitas, como tratar acesso concorrente a recursos. Esse assunto será abordado em outra unidade do curso. 2.5.3 Implementação de threads Existem dois modelos básicos de implementação de threads em um sistema operacional. Na primeira forma, conhecida como threads de aplicação, uma aplicação possui diversos threads em execução, porém o sistema operacional irá “enxergar” apenas um processo. O gerenciamento de threads é feito pela aplicação por meio de bibliotecas, fornecidas pela linguagem na qual a aplicação foi desenvolvida. O outro modelo é conhecido como threads de kernel, nas quais a aplicação possui diversos threads e o sistema operacional gerencia cada uma delas. 2.4 Comunicação entre processos Dentro de um sistema que permita a execução concorrente de processos, é muito comum que haja comunicação entre eles. Por exemplo, um editor de textos precisa enviar um arquivo para ser impresso pelo gerenciador de impressão, ou um aplicativo pode solicitar dados a um gerenciador de banco de dados. O sistema operacional deve fornecer mecanismos para que essa comunicação seja possível. Uma das técnicas utilizadas quando os processos estão em execução na mesma máquina é por meio do envio de interrupções, que são enviadas a partir de um processo ou hardware para indicar que certo evento aconteceu ou que há um processo ou recurso aguardando ser atendido. Cada interrupção é distinguida por um número, e um processo pode mascarar uma destas interrupções disponíveis no sistema operacional para sua utilização, de tal forma que sempre que esta interrupção for detectada, o sistema redirecionará o sinal para o processo que mascarou a interrupção. Outra técnica utilizada nos sistemas atualmente é a troca de mensagens, especialmente quando estamos falando sobre sistemas distribuídos, no qual dois processos estão se comunicando a partir de duas máquinas diferentes, por meio de uma rede. Nesse caso, a comunicação pode ser feita de forma assíncrona e bidirecional, ou seja, não é necessário que o processo seja interrompido durante a comunicação e que a mensagem pode ser enviada a partir de qualquer um dos processos envolvidos na comunicação. A figura 5 ilustra dois processos se comunicando na mesma máquina Fundamentos de Sistemas Operacionais – Processos 11 (a) e dois processos se comunicandoem duas máquinas diferentes por meio de rede (b). BIBLIOGRAFIA SILBERSCHATZ, A.; GALIN, P.; GAGNE, G. Sistemas operacionais: Conceitos e aplicações. Rio de Janeiro: Campus, 2000. TANENBAUM, A. S. Sistemas operacionais modernos. São Paulo: Pearson Prentice Hall, 2009. DEITEL, H. M; DEITEL, P. J.; CHOFFNES, D. R. Sistemas operacionais. São Paulo: Pearson Prentice Hall, 2005. P1 P2 P1 P2 (a) (b) Figura 5. Comunicação entre processos.
Compartilhar