INTRODUÇÃO AOS SISTEMAS OPERACIONAIS setembro/2013

Propaganda
INTRODUÇÃO AOS SISTEMAS OPERACIONAIS
setembro/2013
SEMANA 08
Conceitos sobre processos.
Modelos de processos, BCP, contextos, estados de processos.
1 - Introdução
O processo computacional, ou simplesmente processo, é uma atividade que ocorre em um
meio computacional com objetivo definido, duração finita e fazendo uso de uma quantidade
limitada de recursos computacionais.
Programa é o código fonte escrito em alguma linguagem de programação [por exemplo, C,
Pascal, Fortran], e executável é esse código traduzido para a linguagem de máquina específica da
máquina onde ele será executado. O programa é uma entidade passiva.
Processo pode ser definido como um fluxo de controle sequencial e seu espaço de
endereçamento, ou seja, é a execução de um programa junto com os dados usados por ele. Processo,
de forma resumida, é então um programa em execução. Como exemplo, o mesmo programa pode
ser executado ao mesmo tempo por dois usuários, gerando dois processos distintos. Além disso, na
sua execução, um programa pode originar vários processos. O processo é uma entidade ativa.
Um processo computacional é representado por uma estrutura de dados conhecida como
Bloco de Controle do Processo [BCP, Process Control Block - BCP], também chamado de descritor
do processo.
2 - Conceitos sobre processos
Uma das principais tarefa do kernel é permitir a execução de aplicativos. Para isso, ele deve
auxiliar a aplicação com recursos como abstrações de hardware e gerenciamento do processo.
Para rodar uma aplicação, o kernel inicialmente cria um espaço de endereçamento para essa
aplicação, carrega na memória o arquivo contendo as instruções do programa, cria uma pilha para
essa aplicação e inicia a sua execução.
Um kernel multitarefa é capaz de dar ao usuário a ilusão de que o número de processos que
estão rodando simultaneamente é maior do que o número de processos que aquele sistema é
fisicamente capaz de rodar. Mas na realidade, usualmente o número de processos que um sistema
Introdução aos Sistemas Operacionais - www.jairo.pro.br
1/8
pode rodar simultaneamente é igual o número de processadores (ou de núcleos).
A multitarefa pode ser preemptiva [multitarefa real] ou cooperativa.
Na multitarefa preemptiva o kernel trabalha com uma fila de processos cedendo a cada um
uma parcela de tempo [time slice] de processamento. Desse modo, o processador alterna de
processo em processo rapidamente para dar ao usuário a impressão de que todos os processos estão
sendo executados simultaneamente.
A implementação da multitarefa preemptiva envolve o uso de algoritmos de escalonamento,
para que o kernel determine qual processo deve ser executado em que momento e quanto tempo de
processamento deve ser concedido. O algoritmo escolhido deve poder permitir que alguns processos
tenham uma prioridade de processamento mais alta que os demais. O kernel geralmente também
deve prover uma maneira de comunicação entre processos [IPC, Inter Process Communication].
Alguns exemplos de IPC são:
•
•
•
memória compartilhada;
troca de mensagens;
chamadas de procedimento remoto [RPC, Remote Procedure Call].
Praticamente todos os sistemas operacionais modernos implementam multitarefa preemptiva
ou real.
No passado havia a multitarefa cooperativa, onde cada processo tinha permissão de executar
ininterruptamente até fazer uma requisição especial para avisar ao kernel para alternar para o
próximo processo da fila. Embora a multitarefa cooperativa seja bem mais simples de implementar
que a preemptiva, tem a contrapartida de travar o sistema inteiro com muita frequência, pois
qualquer problema que ocorra com o processo que está executando impede a devolução do
processador para o sistema operacional.
Os antigos Windows 3.0, 3.1 e 3.11 usualmente rodavam sobre o sistema operacional MSDOS, que não implementava multitarefa alguma. Então o Windows, que à época era aplicação que
fornecia ambiente gráfico, implementava multitarefa cooperativa para as aplicações para Windows.
As versões antigas do Mac [Apple], embora não tivessem nada a ver com o MS-DOS, padeciam do
mesmo mal.
Para o caso de haver mais de um processador, o kernel deve suportar multiprocessamento
simétrico [SMP1] ou acesso não uniforme à memória [NUMA2] para permitir que diferentes
processos rodem simultaneamente em diferentes processadores. Para isso, o kernel deve suportar
reentrância3 para poder rodar duas ou mais partes do código da aplicação simultaneamente. Isso
exige mecanismos de sincronização para assegurar que dois processadores não tentarão modificar
os mesmos dados ao mesmo tempo.
1 SMP: Symmetric Multi Processing.
2 NUMA: Non-Uniform Memory Access.
3 Reentrância: em programação, é a qualidade de uma subrotina ser executada concorrentemente de forma segura,
isto é, de poder ser invocada enquanto estiver em execução.
Introdução aos Sistemas Operacionais - www.jairo.pro.br
2/8
3 - Modelos de processos e estados de processos
O modelo de processo serve para descrever o processo ao longo dos seus estados. Por
exemplo, um modelo de três estados envolve apresentar o
processo nos seguintes estados:
rodando
•
•
•
pronto [ready];
rodando [running];
bloqueado [blocked].
1
4
bloqueado
A figura 1 mostra um modelo de processo com três
estados, onde cada mudança de estado é uma transição que é
representada por um número:
2
3
pronto
Fig 1 – Modelo de processo com 3
estados
1 - O processo não pode continuar a execução pois espera por algum evento [I/O ou
semáforo] para continuar;
2 - Escalonamento: o processo retorna ao processador;
3 - Escalonamento: acabou o tempo [slice] de processamento;
4 - Ocorre o evento esperado que mantinha o processo bloqueado.
O processo, quando em execução na CPU, está no estado rodando [running]. Ao terminar
sua quota de tempo para execução (slice de tempo), o escalonador o interrompe e o coloca no estado
pronto. Ao chegar
novamente a sua vez de executar, o escalonador invoca [acorda] esse processo para voltar a rodar,
permitindo a sua continuação.
Um processo pode ser bloqueado se os dados de entrada ainda não estiverem disponíveis e
ele não poder continuar sua execução, e isto pode ocorrer pelo sinal enviado por outro processo ou
pela própria decisão do escalonador.
O processo é desbloqueado por um evento externo [chegada dos dados, sinalização de outro
processo], e então passa ao estado pronto.
Um processo pode ser definido como
o ambiente onde a aplicação é executada.
Este ambiente possui informações sobre essa
execução e também o quanto de recursos do
sistema cada processo pode utilizar, como o
espaço de endereçamento, tempo de
processador e área em sistema de arquivo.
Um modelo de processo mais realista
é apresentado na figura 2, com 5 estados. A
expede
[dispatch]
admite
novo
pronto
rodando
timeout
ocorre
evento
e
er
sp
o
ap
to
en
v
re
libera
exit
[finaliza]
bloqueado
Fig 2 – Modelo de processo com 5 estados
Introdução aos Sistemas Operacionais - www.jairo.pro.br
3/8
diferença entre este e o de 3 estados é incorporar tanto a criação de novos processos quanto
finalização de processos.
A partir da inicialização do sistema, processos podem ser criados e finalizados a qualquer
momento.
Os processos podem ser criados pelos usuários, para realizarem as suas tarefas, e também o
sistema operacional cria processos em acordo com as suas necessidades. Também podem haver
processos de serviço, como é o caso de um serviço de e-mail.
Por exemplo, no caso do Unix o init é o primeiro processo do sistema [PID4=1], que ocorre
logo após o boot. Todos os demais processos são filhos desse processo.
A finalização de um processo tem um término normal [voluntário] quando a execução é
finalizada através da chamada exit [Unix] ou ExitProcess [Windows].
Mas também poderia ser forçado o término por causa de algum erro fatal [bug no programa,
divisão por zero, execução de instrução ilegal ou referência à memória inexistente], pois nessa
situação o processo não tem como ser finalizado voluntariamente.
O final também poderia ser causado por outro processo, como chamada kill [Unix] ou
TerminateProcess [Windows], que é involuntário.
Um processo é formado por três partes: contexto de hardware, contexto de software e
espaço de endereçamento.
4 - BCP [PCB, Process Control Block]
Um Bloco de Controle do Processo [BCP ou PCB], também chamado de Bloco de Controle
de Tarefa, Estrutura da Tarefa ou Descritor de Processo, é uma estrutura de dados na memória
primária que contém informação necessária para gerenciar um processo em particular. O BCP
permite que o sistema operacional encontre informações chave a respeito do processo, por isso
define um processo para o sistema operacional. Cada processo tem o seu BCP. Quando um usuário
requisita a execução de alguma aplicação, o sistema operacional constroi o BCP para essa
aplicação.
A implementação do BCP difere de sistema para sistema. Em geral um BCP inclui, direta ou
indiretamente, as seguintes informações:
•
•
•
•
a identificador do processo (PID);
valores de registradores para o processo, incluindo o contador de pograma e valores de
stack;
o espaço de endereçamento para o processo;
prioridade do processo, que é uma parte da informação de escalonamento [por exemplo, no
Unix nice ou renice];
4 PID: Process IDentifier, identificador do processo, é um número inteiro.
Introdução aos Sistemas Operacionais - www.jairo.pro.br
4/8
•
•
•
•
•
•
informação de contabilização do processo [process accounting information], por exemplo
quando o processo processou pela última vez, quanto tempo de CPU o processo acumulou,
etc;
ponteiro para o próximo BCP, isto é, ponteiro para o BCB do próximo processo a rodar;
informações de I/O, isto é, dispositivos alocados para o processo, lista de arquivos abertos,
etc;
ponteiro para o processo pai e, caso exista, ponteiro para o processo filho;
o status do processo, se está rodando, pronto, bloqueado, etc;
em caso de máquina multiprocessada, informação sobre qual processador o processo está
rodando.
Já que o BCP contém informação crítica sobre o processo, ele precisa ser mantido numa área
de memória protegida do acesso de usuários normais.
O BCP possui todas as informações do processo, que são contexto de hardware, contexto de
software e espaço de endereçamento de cada processo [endereço de memória].
O sistema operacional implementa o conceito de processo através do BCP.
5 - Contextos
Contexto de um processo são as informações necessárias para que o processo possa ser
restaurado a partir do ponto em que foi interrompida a sua execução. Essa interrupção do
processamento normalmente é feita pelo escalonador, e leva o processo para o estado pronto.
Contexto é um conjunto de dados necessários para manter a execução do processo ao longo
do tempo.
A troca de um processo por outro no processador é chamada de troca de contexto [context
switch].
Durante a troca de contexto, o processo que está rodando é parado e é passada a execução
para outro processo. O kernel precisa parar a execução do processo que está rodando, copiar os
valores dos registradores para o BCP do processo que estava rodando e atualizar os registradores
com os valores do BCP do processo que vai iniciar a execução.
O tempo que é gasto na troca de contexto é desperdiçado, pois nesse momento nenhum
processo está rodando. Isso é chamado de overhead. A troca de contexto é dependente de suporte de
hardware.
Para efetuar o compartilhamento da CPU entre processos, o sistema operacional possui duas
filas de controle: a de processos prontos [Ready-List] e a de processos bloqueados [Blocked-List]. A
manipulação dessas filas depende da política de escalonamento adotada pelo sistema, que é um
critério para determinar, entre os diversos processos no estado pronto, qual o próximo processo a
executar.
Introdução aos Sistemas Operacionais - www.jairo.pro.br
5/8
interrupção
salva status BCP1
restaura status BCP0
pronto
overhead
restaura status BCP1
overhead
pronto
salva status BCP0
rodando
interrupção
processo P1
pronto
sistema operacional
rodando
processo P0
rodando
O escalonador de
processos, com o auxílio
de hardware, é o
responsável pela escolha
do processo que será
executado pelo
processador. O
escalonador deve se
preocupar com a
eficiência do
processador, pois o
chaveamento de
processos [switch] é
complexo e custoso e
afeta o desempenho do
sistema. O escalonador
de processo é um
processo que deve ser
executado quando da
mudança de contexto,
que é a troca de processo
a ser processado.
Fig 3 – Troca de contexto entre processos P0 e P1
A figura 3 mostra um exemplo de troca de contexto entre os processos P0 e P1.
As ações necessárias para a troca de contexto são:
•
•
•
•
•
•
•
salvar o contexto do processador, incluindo o PC [Contador de Programa] e outros
registradores;
alterar o BCP do processo que está em execução [running];
mover o processo para a fila apropriada;
selecionar outro processo para execução;
alterar o BCP do processo selecionado para iniciar a execução;
alterar as tabelas de gerência de memória;
restaurar o contexto do processo selecionado para iniciar a execução.
As condições para a troca de contexto de um processo são:
•
•
•
•
•
interrupção do relógio [clock]: fatia [slice] de tempo de posse do processador expirou;
interrupção de I/O: resposta de um dispositivo de I/O;
falta de memória: endereço de memória está na memória virtual [swap, disco];
trap [armadilha]: ocorrência de erro, que pode fazer com que o processo seja finalizado;
supervisor call (SVC): é uma chamada de sistema que muda o sistema para o modo
supervisor, para o sistema operacional poder requisitar serviços como, por exemplo,
alocação de memória.
O contador de programa [PC, Program Counter] é o registrador que indica o endereço
[localização na memória] da próxima instrução a ser executada. Durante a execução de uma
Introdução aos Sistemas Operacionais - www.jairo.pro.br
6/8
instrução, esse contador é incrementado com o valor do tamanho da instrução, de modo que ele
passe a conter o endereço da instrução seguinte. O tamanho do PC é igual ao número de bits de
endereço que o processador pode manipular. Assim, se a máquina trabalha com endereços de 16
bits, o PC terá 16 bits. O contador de programa também é conhecido por IC [Instruction Counter]
ou IP [Instruction Pointer].
O contador de programas é o responsável pelo pseudoparalelismo, e garante que a qualquer
instante exista somente um programa ativo no processador. Pseudoparalelismo é a sensação de que
vários processos são executados simultaneamante num único processador.
Um processo é representado por:
•
espaço de endereçamento, que é uma área de memória
pertencente ao processo, onde as instruções e dados da
aplicação são armazenados para execução.
•
contexto de hardware e de software, que são valores em
memória do conteúdo dos registradores e características
e limites dos recursos que podem ser alocados pelo
processo.
A figura 4 ilustra o contexto de hardware, contexto de
software e espaço de endereçamento de um processo.
A troca de contexto se resume em substituir o contexto
de hardware de um processo pelo de outro.
contexto
de
software
contexto
de
hardware
processo
espaço de
endereçamento
Fig 4 – contexto e espaço de
endereçamento do processo
Quando um processo está em execução, o seu contexto de hardware está armazenado nos
registradores do processador. No momento em que o processo perde a utilização do processador, o
sistema salva essas informações no contexto de software do processo.
Na troca de contexto de hardware, é necessário armazenar o conteúdo dos registradores
gerais do processador e de uso específico, como o contador de programa [PC], o stack pointer5 [SP]
e o registrador de status6 [PSW, Processor Status Word].
Na troca de contexto de software, é necessário especificar as características e limites dos
recursos que podem ser alocados pelo processo, como prioridade para execução, privilégios,
tamanho do buffer para operações de I/O etc. O contexto de software é formado por três grupos de
informações: identificação, quotas e privilégios.
5 Registrador Stack Pointer [SP]: registrador “ponteiro da pilha” não existia na máquina de Von Newmann, mas hoje
em dia faz parte da CPU de quase todos os computadores. É necessário porque todo programa em execução precisa
usar uma pilha para realizar chamadas e retornos de procedimentos. Assim, cada programa possui uma pilha própria
e o registrador SP indica o topo da pilha do programa correntemente em execução. Quando a execução passa de um
programa para outro, o valor do SP é alterado para que ele passe a apontar para a pilha do novo programa em
execução.
6 Registrador Processor Status Word [PSW]: registrador “palavra de estado do processador” ou “registrador de
estado” não fazia parte da máquina de Von Newmann [nem existia nos computadores mais antigos], mas é essencial
para o funcionamento de um sistema operacional moderno. Atualmente, faz parte de qualquer CPU. O uso desse
registrador passou a ser necessário quando os computadores começaram a utilizar sistemas de interrupção.
Introdução aos Sistemas Operacionais - www.jairo.pro.br
7/8
•
identificação: PID, nome, UID [Identificação do usuário dono do processo, User IDentifier];
•
quotas: são os limites de cada recurso do sistema que um processo pode alocar, como
número máximo de arquivos abertos simultaneamente, tamanho máximo de memória
primária e secundária, número máximo de operações I/O pendentes;
•
privilégios: definem as ações que um processo pode fazer em relação a ele mesmo, aos
demais processos e ao sistema operacional. Privilégios que afetam o próprio processo
permitem que suas características possam ser modificadas. Por exemplo: prioridade de
execução, limites alocados na memória primária e secundária . O usuário que possui todos
os privilégios são o root [Unix] e o Administrador [Windows].
O espaço de endereçamento é a área do processo onde as instruções e os dados do programa
são armazenados para execução, onde cada processo possui o seu próprio espaço que não pode ser
ocupado por outro processo.
É a partir do BCP que o sistema operacional mantém
as informações sobre o contexto de hardware, contexto de
software e o espaço de endereçamento de cada processo.
A tabela de processos é uma estrutura de dados que
contém informações fundamentais para que o processo
interrompido pelo escalonador possa voltar a executar
exatamente a partir do ponto de parada, sem perda de dados
ou inconsistências.
Cada processo possui uma entrada na tabela de
processos com um ponteiro para o bloco de controle de
processo [BCP].
Introdução aos Sistemas Operacionais - www.jairo.pro.br
tabela de
processos
BCP – processo 1
BCP – processo 2
BCP – processo 3
...
...
BCP – processo n
Fig 5 – tabela de processos e BCP
8/8
Download