• Nenhum resultado encontrado

As discussões relativas à implementação de RPCs foram apresentadas por Birrell e Nelson [ 1984] O pro jetode um mecanismo de RPCconfiável foi apresentado por Shrivastava e Panzieri [1982] Um estudo sobre

No documento [PT] SILBERSCHATZ - Sistemas Operacionais (páginas 82-103)

RPCs foi apresentada por Tay e Ananda [ 19901- Stankovic (1982] eStaunstrup (1982] discutiram as chama-

das de procedimento versus a comunicação por troca de mensagens.

Capítulo 4

PROCESSOS

Os primeiros sistemas de computação só permitiam que um programa fosse executado de cada vez. Esse pro-

grama tinha controle completo do sistema e acesso a todos os recursos do sistema. Os sistemas de computa-

ção modernos permitem que múltiplos programas sejam carregados na memória e executados de forma con-

corrente. Essa evolução exigiu maior controle e mais comparti mental ização dos vários programas. Essas

necessidades resultaram na noção de um processo, que é um programa em execução. Um processo é a unida-

de de trabalho cm um sistema moderno de tempo compartilhado.

Quanto mais complexo for um sistema operacional, mais benefícios aos usuários são esperados. Embora

sua principal preocupação seja a execução de programas de usuário, ele também precisa cuidar das várias ta-

refas de sistema que são mais bem executadas fora do kernel propriamente dito. Um sistema, portanto, con-

siste em uma coleção de processos: processos de sistema operacional que executam código do sistema e pro-

cessos de usuário que executam código de usuário. Todos esses processos podem executar ao mesmo tempo,

sendo a CPU (ou CPUs) multiplexada(s) entre eles. Ao alternar a CPU entre os processos, o sistema operacio-

nal pode tornar o computador mais produtivo.

4.1 • Conceito de processo

Um obstáculo à discussão de sistemas operacionais é que existe dificuldade em denominar todas as atividades

da CPU. Um sistema em batch executa jobs, enquanto um sistema de tempo compartilhado executa progra-

mas de usuário ou tarefas. Mesmo em um sistema monousuário, como o Microsoft Windows ou Macintosh

OS, um usuário pode executar vários programas de uma vez: um processador de textos, um navegador Web e

um pacote de e-mail. Mesmo se o usuário só puder executar um programa de cada vez, o sistema operacional

poderá precisar dar suporte a suas próprias atividades internas programadas, como gerência de memória. Em

muitos aspectos, todas essas atividades são semelhantes, por isso chamamos todas de processos.

Os termos job e processo são usados quase que indistintamente neste livro. Apesar de pessoalmente

preferirmos usar o termo processo* boa parte da teoria e terminologia sobre sistemas operacionais foi de-

senvolvida em uma época na qual a principal atividade dos sistemas operacionais era o processamento de

jobs. Seria erróneo evitar o uso de termos comumente aceitos que incluem a palavra job (como escalona-

mento de jobs) simplesmente porque processo suplantou job.

4.1.1 O processo

Informalmente, um processo é um programa em execução. Um processo é mais do que o código do progra-

ma, que às vezes è chamado seção de texto. Também inclui a atividade corrente, conforme representado pelo

valor do contador do programa e 0 conteúdo dos registradores do processador. Um processo geralmente in-

clui a pilha de processo, que contém dados temporários (como parâmetros de métodos, endereços de retorno

e variáveis locais) c uma seção de dados, que contém variáveis globais.

64 • Sistema* Operacionais

Enfatizamos que uni programa por si só não é um processo; um programa é uma entidade passivo, como o conteúdo de um arquivo armazenado em disco, enquanto um processo é uma entidade atwd, com um con- tador de programa especificando a próxima instrução a ser executada e um conjunto de recursos associados.

Embora dois processos possam ser associados com o mesmo programa, são considerados duas sequências se- paradas de execução. Por exemplo, vários usuários podem estar executando cópias diferentes do programa de correio ou o mesmo usuário pode chamar muitas cópias do programa editor. Cada uma dessas atividades é um processo separado e, embora as seções de texto sejam equivalentes, as seçóes de dados variam. Também é comum ter um processo que produza muitos processos durante sua execução. Essas questões são tratadas na Seção 4.4.

4.1.2 Estado do processo

A medida que o processo executa, ele muda de estado. O estado de uni processo é definido em parte pela ativi- dade atual desse processo. Cada processo pode estar cm um dos seguintes estados:

• N o v o : o processo está sendo criado.

• Em execução: as instruções estão sendo executadas.

• Em espera: o processo está esperando a ocorrência de algum evento {como conclusão de operação de l / O ou recepção de um sinal).

• Pronto: o processo está esperando para ser atribuído a um processador. • Encerrado: o processo terminou sua execução.

Esses nomes são arbitrários, e variam dependendo do sistema operacional. Os estados que representam, no entanto, são encontrados em todos os sistemas. Certos sistemas operacionais também delineiam estados de processo de forma mais detalhada. Ê importante observar que apenas um processo pode estar em execução em qualquer processador a qualquer instante. No entanto, muitos processos podem estar prontos e em espe-

ra* O diagrama de estado correspondente a esses estados está representado na Figura 4 . 1 .

( novo V — - ^ aceito interrupção saída^—-^~*í encenado j

( pronto ) femexeeução)

\escoIha do escatònador/

conclusão de 1/0 ou evento \ ^ ^ "*-~-v«r ^f*1'* P0', / 0 o u e v e n ,°

ç em espera T

Figura 4.1 Diagrama de estado de um processo.

4.1.3 Bloco de controle de processo

Cada processo é representado no sistema operacional por um bloco de controle de processo (PCB - process control block), também chamado de bloco de controle de tarefa. A Figura 4.2 mostra um PCB. Ele contém mui- tas informações associadas a um processo específico, incluindo:

• listado do processo: O estado pode ser novo, p r o n t o , em execução, em espera, suspenso, e assim por diante.

• Contador do programai O contador indica o endereço da próxima instrução a ser executada para esse processo.

• Registradores de CPU: Os registradores variam em número e tipo, dependendo da arquitetura do com- putador. Incluem acumuladores, registradores de índice, ponteiros de pilha e registradores de uso ge- ral, além de informações de código de condição. Juntamente com o contador do programa, essas in- formações de estado devem ser salvas quando ocorre uma interrupção, para permitir que O processo continue corretamente depois disso (Figura 4..Í).

Processos 65 ponteiro estado do processo número do processo eomador do programa registradores limites de memória lista de arquivos abertos

Figura 4.2 Bloco de controle de processo (PCB).

• In for/nações de escalonamento de CPU: Essas informações incluem prioridade de processo, ponteiros para filas de escalonamento e quaisquer outros parâmetros de escalonamento. (O Capítulo 6 descreve o escalonamento de processos.)

• Informações de gerência de memória: Essas informações podem incluir dados como o valor dos regis- tradores de base e limite, as tabelas de páginas ou as tabelas de segmentos, dependendo do sistema de memória usado pelo sistema operacional (Capítulo 9).

• Informações de contabilização: Essas informações incluem a quantidade de CPU e o tempo real usa- dos, limites de tempo, números de contas, números de jobs ou processos etc.

• Informações de status de HO: As informações incluem a lista de dispositivos de l/O alocados para este processo, uma lista de arquivos abertos etc.

O PCB serve simplesmente como repositório de informações que podem variar de processo a processo.

4.1.4 Threads

O modelo de processo discutido até agora considerava implicitamente que um processo é um programa que realiza um único fluxo de execução. Por exemplo, se um processo está executando um programa processador de textos, existe um único fluxo de instruções sendo executado. Esse fluxo único de controle só permite que o processo execute uma tarefa de cada vez. O usuário não pode digitar caracteres e passar o corretor ortográ-

processo P0 n executam» executando irtativo ( O U ÓCIOS

sistema operacional processo P interrupção ou chamada ao sistema

.

| salvar estado r>o PCB,,

» 1 recarregar estado de PCB, m i e m 0) chamada

I

IpCàOOU ao sistoma

1

salvar estado no PCB, [recarregar estado do P C B0

1

' , - ri • i nativo executando I I ' . t i '.•->

66 • Sistemas Operacionais

fico ao mesmo tempo no mesmo processo. Muitos sistemas operacionais modernos estenderam o conceito de processo para permitir que um processo tenha múltiplos fluxos de execução, ou threads. Assim, o proces- so pode executar mais de uma tarefa de cada vez. O Capítulo 5 explora processos com múltiplos threads.

4.2 • Escalonamento de processos

O objetivo da multiprogramação é ter processos cm execução o tempo todo, para maximizar a utilização de CPU. O objetivo do tempo compartilhado é alternar a CPU entre processos de forma tão frequente que os usuá- rios possam interagir com cada programa durante sua execução. Para um sistema uniprocessador, nunca have- rá mais de um processo cm execução. Sc houver mais processos, os demais terão de esperar até que a CPU esteja liberada e possa ser reescalonada.

4.2.1 Filas de escalonamento

À medida que os processos entram no sistema, são colocados em uma fila de jobs. Essa fila consiste em todos os processos do sistema. Os processos que estão residindo na memória principal e estão prontos e esperando para executar são mantidos em uma lista chamada fila de processos prontos (ready queué). Essa fila geralmen- te é armazenada como uma lista encadeada. Um cabeçalho de fila de processos prontos contém ponteiros ao primeiro e Último PCBs na lista. Estendemos cada PCB para incluir um campo de ponteiro apontando para o próximo PCB na fila de processos prontos.

Existem também outras filas no sistema. Q u a n d o a C P U é a l o c a d a a um processo, ele executa durante um tempo e é encerrado, interrompido ou espera pela ocorrência de determinado evento, como a conclusão de um pedido de l/O, por exemplo. No caso de um pedido de I/O, esse pedido pode ser para uma unidade de fita dedicada ou para um dispositivo compartilhado, como um disco. Como existem muitos processos no siste- ma, o disco pode estar ocupado com o pedido de l/O de algum outro processo. O processo, portanto, pode ter de esperar pelo disco. A lista de processos esperando por determinado dispositivo de l/O é chamada fila de dispositivo. Cada dispositivo tem sua própria fila de dispositivo (Figura 4.4).

cabeçalho da fila fila de processos prontos unidade de fita magnética 0 início fim PCB, PCB2 in í/*Lr\ H inicio - fim > registradores • • registradores • a unidade de fila magnética 1 disco unidade 0 Unidade de terminal 0 PCB, PCB, início - fim ^^^^^^^^

Processos • 67 Uma representação comum p a r i uma discussão sobre escalonamento de processos é um diagrama de fi- las, como o da Figura 4.5. Cada caixa retangular representa uma fila. Dois tipos de fila estão presentes: a fila de processos prontos e um conjunto de filas de dispositivo. Os círculos representam os recursos que servem as filas e as setas indicam o fluxo de processos no sistema.

Figura 4.5 Representação do diagrama de filas do escalonamento de processos.

Um processo novo é colocado inicialmente na fila de processos prontos. Ele espera na fila até ser selecio- nado para execução ou ser submetido (dispatched). Depois que o processo recebe a CPU e está cm execução, um dos vários eventos a seguir poderá ocorrer:

• O processo pode emitir um pedido de I/O e ser colocado em uma fila de l/O. • O processo pode criar um novo subprocesso c esperar seu término.

• O processo pode ser removido à força da CPU, como resultado de uma interrupção e ser colocado de volta na fila de processos prontos.

Nos dois primeiros casos, o processo acaba alternando do estado de espera para o estado de pronto e, em seguida, é colocado de volta na fila de processos prontos. Um processo continua o seu ciclo até terminar e, nesse ponto, é removido de todas as filas, com seu PCB e recursos sendo desalocados.

4 . 2 . 2 E s c a l o n a d o r e s

Um processo migra entre as várias filas de escalonamento ao longo de toda sua vida. O sistema operacional deve selecionar, para fins de escalonamento, os processos dessas filas de alguma forma. O processo de Seleção

ê executado pelo escalonador (scheàuler) adequado.

Em um sistema cm batch, existem geralmente mais processos submetidos do que processos que podem ser executados imediatamente. Esses processos são colocados em uni spool em um dispositivo de armazena- mento de massa (geralmente um disco), onde são mantidos para execução posterior. O escalonador de longo prazo, ou o escalonador de jobs, seleciona processos desse conjunto c os carrega na memória para execução.

O escalonador de curto prazo, ou o escalonador de CPU, seleciona dentre os processos que estão prontos para execução e aloca a CPU a um deles.

A principal distinção entre esses dois escalonadores é a frequência da sua execução. O escalonador de curto prazo deve selecionar um novo processo para a CPU com frequência. Um processo pode executar por apenas alguns milissegundos antes de esperar por um pedido de I/O. Em geral, o escalonador de curto prazo executa pelo menos uma vez a cada 100 milissegundos. Devido à breve duração de tempo entre as execuções, o escalonador de curto prazo deve ser rápido. Se levar 10 milissegundos para decidir executar um processo por 100 milissegundos, então 10/(100 + 10) = 9% da CPU está sendo usado (desperdiçado) simplesmente para escalonar o trabalho.

68 • Sistemas Operacionais

O cscalonador de longo prazo, por o u t r o lado, executa com muito menos frequência. Pode haver um in- tervalo de minutos entre a criação de novos processos no sistema. O escalonador de longo prazo controla o grau de multiprogramação (o número de processos na memória). Sc o grau de mui ti programação f o r estável, a taxa media de criação de processos deve ser igual a taxa média de partida de processos que saem do sistema. Assim, o escalonador de longo prazo pode precisar ser chamado apenas quando um processo sair do sistema. Devido ao intervalo maior entre as execuções, o escalonador de longo prazo pode levar mais tempo para de- cidir que processos devem ser selecionados para execução.

E importante que o escalonador de longo prazo faça uma Seleção cuidadosa. Em geral, a maioria dos pro- cessos podem ser descritos como limitados por I/O ou limitados pela CPU. Um processo limitado por I/O passa mais tempo realizando operações de I/O do que efetuando cálculos. Um processo limitado pela CPU, por outro lado. gera pedidos de I/O com pouca frequência, usando mais o seu tempo na computação. E i m - portante que o escalonador de longo prazo selecione uma boa combinação de processos incluindo processos limitados por l/O e pela CPU. Sc todos os processos forem limitados por l/O, a fila de processos prontos qua- se sempre estará vazia e o escalonador de curto prazo terá pouco trabalho. Se todos os processos forem l i m i - tados pela CPU, a fila de espera de l/O quase sempre estará vazia, os dispositivos ficarão sem uso e mais uma vez o sistema ficará desequilibrado. O sistema com o melhor desempenho terá uma combinação de processos limitados pela CPU e por l/O.

Em alguns sistemas, o cscalonador de longo prazo pode estar ausente ou ser mínimo. Por exemplo, siste- mas de tempo compartilhado, como o U N I X , geralmente não têm um escalonador de longo prazo, mas sim- plesmente colocam todo novo processo na memória para o escalonador de curto prazo. A estabilidade desses sistemas depende de uma limitação física (como o número de terminais disponíveis) ou da natureza de au- to-ajuste dos usuários humanos. Se o desempenho cair para níveis inaceitáveis, alguns usuários simplesmente vão desistir.

Alguns sistemas operacionais, como os de tempo compartilhado, podem introduzir um nível intermediá- rio adicional de escalonamento. O escalonador de médio prazo está representado na Figura 4.6. A principal ideia por trás de um cscalonador de médio prazo é que às vezes pode ser vantajoso remover processos da me- mória (e da disputa ativa por CPU) e, assim, reduzir o grau de multiprogramação. Em algum momento poste- rior, o processo pode ser introduzido novamente na memória e sua execução pode ser retomada do ponto onde parou. Esse esquema é chamado de swapping (troca). O escalonador de médio prazo realiza as opera- ções de swapping. O swapping pode ser necessário para melhorar a combinação de processos ou porque uma mudança nos requisitos de memória comprometeu a memória disponível, exigindo a liberação de memória. O Capítulo 9 discute o conceito de swapping.

swap out

»- tlm

Figura 4.6 Acréscimo do escalonamento de médio prazo ao diagrama de filas.

4.2.3 Troca de contexto

Alternar a CPU para o u t r o processo requer salvar o estado do processo antigo e carregar o estado salvo do novo processo. Essa tarefa é chamada de troca de contexto. O contexto de um processo é representado no PCB de um processo; inclui o valor dos registradores de CPU, o estado do processo (consulte a Figura 4.1) e as informações de gerência de memória. Q u a n d o ocorre uma troca de c o n t e x t o , qjcerncl salva o contexto do

processo antigo em seu PCB e carrega o çontextosàlvo do novo pTocesso escolhido para execução. O tempo de troca de contexto é puro overbead, já que o sistema não efetua trabalho útil durante o processo de troca.

Processos • 69

Sua velocidade varia de máquina a máquina dependendo da velocidade da memória, do número de registra-

dores que devem ser copiados c da existência de instruções especiais (como uma única instrução para carre-

gar ou armazenar todos os registradores). Velocidades típicas estão entre 1 a 1000 microssegundos.

Os tempos de troca de contexto são altamente dependentes do suporte de hardware. Por exemplo, al-

guns processadores (como o Sun UltraSPARC) fornecem vários conjuntos de registradores. Uma troca de

contexto simplesmente inclui mudar o ponteiro para o conjunto de registradores atual. E claro que se houver

mais processos ativos do que conjuntos de registradores, o sistema vai copiar os dados do registrador de e

para a memória como antes. Além disso, quanto mais complexo o sistema operacional, mais trabalho deve

ser realizado durante uma troca de contexto. Como será discutido no Capítulo 9, técnicas avançadas de ge-

rência de memória podem exigir que dados extras sejam trocados com cada contexto. Por exemplo, o espaço

de endereçamento do processo atual deve ser preservado à medida que o espaço da próxima tarefa é prepara-

do para uso. Como o espaço de endereçamento é preservado e quanto trabalho será necessário para preser-

vá-lo dependerão do método de gerência de memória do sistema operacional. Como será discutido no Capí-

tulo 5, a troca de contexto tomou-se um gargalo de desempenho de tal ordem que os programadores estão

utilizando novas estruturas (threads) para evitá-la sempre que possível.

4.3 • Operações nos processos

Os processos no sistema podem executar de forma concorrente e devem ser criados e excluídos de forma di-

nâmica. Assim, o sistema operacional deve fornecer um mecanismo para a criação e término de processos.

4.3.1(Criaçáo de processo^)

Um processo pode criar vários novos processos através de uma chamada ao sistema para a criação de proces-

so, durante sua execução. O processo criador é chamado de processo pai, enquanto os novos processos^são

chamados de filhos desse processo. Cada um dos novos processos, por sua vez, pode criar outros processos,

formando uma árvore de processos (Figura 4.7).

Figura 4.7 Uma árvore de processos cm um sistema UNIX típico.

Em geral, um processo precisará de determinados recursos (tempo de CPU, memória, arquivos, dispositi-

vos de I/O) para realizar sua tarefa. Quando um processo cria um subprocesso, esse subprocesso pode ser ca-

paz de obter seus recursos diretamente do sistema operacional ou pode ser limitado a um subconjunto dos re-

cursos do processo pai. O pai pode ter de dividir seus recursos entre os filhos, ou talvez possa compartilhar

70 • Sistemas Operacionais

alguns recursos (como memória ou arquivos) entre vários filhos. Restringir um processo filho a um subcon- junto dos recursos do pai evita que algum processo sobrecarregue o sistema criando subprocessos demais.

Além dos vários recursos físicos e lógicos que um processo obtém quando é criado, os dados de iniciali- zação (entrada) podem ser passados pelo processo pai para o processo filho. Por exemplo, considere um processo cuja função seja exibir o status de um arquivo, digamos F í , na tela de um terminal. Quando ele for criado, receberá como entrada do seu processo pai o nome de arquivo F1 e executará usando esse dado para obter as informações desejadas. Também pode receber o nome do dispositivo de saída. Alguns siste- mas operacionais passam recursos para os processos filhos. Km um sistema como esses, o novo processo pode obter dois arquivos abertos, Fí e o dispositivo do terminal, e pode apenas precisar transferir o dado entre os dois.

Quando um processo cria um novo processo, existem duas possibilidades em termos de execução: 1, O pai continua a executar de forma concorrente com os filhos.

No documento [PT] SILBERSCHATZ - Sistemas Operacionais (páginas 82-103)

Outline

Documentos relacionados