UFPA - PPGEE – LPRAD - LINC
Universidade Federal do Pará
Sistemas Operacionais
Gerenciamento de Processos/Processador
Diego Lisboa Cardoso
[email protected]UFPA - PPGEE – LPRAD - LINC
Roteiro
Processo:
Estados de um processo
Mudanças de Estados
Subprocessos e Threads
Tipos de processos
UFPA - PPGEE – LPRAD - LINC
Processo
SO Implementar a concorrência entre programas
gerenciando a alternância da execução de instruções na
UCP de maneira controlada e segura;
Processador Executa instruções sem distinguir qual o
programa encontra-se em processamento
Processo = Programa em execução;
Multiprogramável/Multitarefa
Pseudoparalelismo Alternância da CPU entre
programas Concorrência;
UFPA - PPGEE – LPRAD - LINC
Processo
Multiprogramação de quatro programas
Modelo conceitual de 4 processos sequenciais,
independentes
Somente um programa está ativo a cada momento
UFPA - PPGEE – LPRAD - LINC
Processo
Para implementar a concorrência, é necessário que
todas as informações do programa interrompido sejam
guardadas para que, quando ele voltar, não falte
nenhuma informação para continuar processando;
Processo suspenso deve reiniciar do estado onde
estava;
Então:
Processo = Conjunto necessário de informações para
que o SO implemente a concorrência de programas;
UFPA - PPGEE – LPRAD - LINC
Processo
A imagem ilustra a concorrência entre os processos
Troca de um processo para outro pelo processador
Mudança de Contexto;
UFPA - PPGEE – LPRAD - LINC
Monitor de Processos
UFPA - PPGEE – LPRAD - LINC
Mudança de Contexto
Ambiente onde um programa é
executado. Este ambiente, além das
informações sobre a execução, possui
também a quantidade de recursos do
sistema que cada programa pode utilizar,
como espaço de endereçamento da
memória principal, tempo de processador
e área de disco;
UFPA - PPGEE – LPRAD - LINC
Mudança de Contexto
Estruturo do
Processo:
Mantêm
informações
necessárias à
execução de
um programa.
Mudança de Contexto:
UFPA - PPGEE – LPRAD - LINC
Contexto de Hardware
Salvar o conteúdo dos registradores do processo que
está deixando a CPU e carregá-lo com os valores
referentes ao do novo processo que será executado.
Mudança de Contexto:
UFPA - PPGEE – LPRAD - LINC
Contexto de Software
São especificados limites e características dos recursos
que podem ser alocados pelo processo, como:
Número máximo de arquivos abertos
simultaneamente;
Prioridade de execução;
Tamanho do Buffer para operações de E/S;
Muitas destas características são determinadas no
momento da criação do processo, enquanto outras
podem ser alteradas durante sua existência;
Mudança de Contexto:
UFPA - PPGEE – LPRAD - LINC
Contexto de Software
O contexto de Software é composto por três grupos de
informações sobre o processo: Identificação, Quotas e
Privilégios;
Identificação:
Processo criado pelo SO recebe uma identificação única
PID – Process Identification, representada por um número.
Sendo que alguns sistemas, além do PID identificam o
processo através de um nome;
Processo também possui a identificação do usuário ou
processo que o criou (owner). Portanto cada usuário
também possuirá uma identificação única (UID – User
Identification), atribuída ao processo no momento da
criação ;
Mudança de Contexto:
UFPA - PPGEE – LPRAD - LINC
Contexto de Software
Quotas: As quotas são os limites de cada recurso do
sistema que um processo pode alocar .
Exemplos de quotas presentes na maioria dos sistemas
operacionais são:
Número máximo de arquivos abertos simultaneamente;
Tamanho máximo de memória principal e secundária
que o processo pode alocar;
Número máximo de Operações de E/S pendentes;
Número máximo de processos, subprocessos e threads
que podem ser criados;
Mudança de Contexto:
UFPA - PPGEE – LPRAD - LINC
Contexto de Software
Privilégios: Ou direitos, definem as ações que um
processo pode fazer em relação a ele mesmo, aos
demais processos e ao sistema operacional.
A maioria dos sistemas operacionais disponibiliza uma
conta de acesso com todos estes privilégios
disponíveis, com o propósito de o administrador
gerenciar o SO.
Nos sistemas Unix existe a conta “root”, no MS
Windows a conta “administrador” e no OpenVMS
existe a conta “system” com este mesmo perfil.
Mudança de Contexto:
UFPA - PPGEE – LPRAD - LINC
Espaço de Endereçamento
É a área de memória pertencente ao processo
onde instruções e dados do programa são
armazenados para a execução.
Cada processo Seu espaço de
endereçamento, que deve ser devidamente
protegido do acesso dos demais processos.
UFPA - PPGEE – LPRAD - LINC
Estrutura de um Processo
UFPA - PPGEE – LPRAD - LINC
Criando Processos
Processos precisam ser criados e finalizados a
todo o momento:
Inicialização do sistema;
Execução de uma chamada ao sistema
realizada por algum processo em execução;
Requisição de usuário para criar um novo
processo;
UFPA - PPGEE – LPRAD - LINC
Criando Processos
Processos com funções específicas que
independem de usuários – chamados de
daemons:
Recebimento e envio de emails;
Servidor de Impressão;
UFPA - PPGEE – LPRAD - LINC
Criando Processos
System Call: interface entre o Sistema
Operacional e os programas do usuário;
Chamadas diferem de SO para SO;
Conceitos relacionados às chamadas são similares
independentemente do SO;
Trap: instrução utilizada para realizar chamadas ao
Sistema Operacional
UFPA - PPGEE – LPRAD - LINC
Criando Processos
Unix: Fork( );
Windows: Create_Process( );
UFPA - PPGEE – LPRAD - LINC
Finalizando Processos
Condições:
Término normal (voluntário):
A tarefa a ser executada é finalizada;
Chamadas: Exit (Unix) e ExitProcess (Windows)
Término com erro (voluntário):
O processo sendo executado não pode ser
finalizado:
gcc filename.c, o arquivo filename.c não existe;
UFPA - PPGEE – LPRAD - LINC
Finalizando Processos
Término com erro fatal (involuntário):
Erro causado por algum bug no programa;
Ex: Divisão por 0 (zero);
Término causado por algum outro processo
(involuntário):
Kill (Unix) e TerminateProcess (Windows);
Kill <pid_do_processo>
UFPA - PPGEE – LPRAD - LINC
Hierarquia de Processos
UFPA - PPGEE – LPRAD - LINC
Suspendendo Processos
UFPA - PPGEE – LPRAD - LINC
Suspendendo Processos
UFPA - PPGEE – LPRAD - LINC
Sinais
Um sinal é uma notificação enviada para um processo
com o objetivo de notificar a ocorrência de um evento
no SO.
Quando um sinal é enviado a um processo, o sistema
operacional interrompe o seu fluxo normal de
execução, para atender a sua solicitação.
UFPA - PPGEE – LPRAD - LINC
Sinais
Enviando Sinais:
Determinadas combinações de teclas, ao serem
pressionadas no terminal de controle de um processo
em execução, fazem com que o sistema envie
determinados sinais a este processo:
Ctrl-C (DEL em versões antigas do Unix) envia um sinal,
normalmente causa o término do processo SIGINT;
Ctrl-Z envia um sinal, normalmente causa a suspensão da
execução do processo SIGTSTP;
O comando kill do Unix permite que um "usuário" envie
sinais a um processo.
UFPA - PPGEE – LPRAD - LINC
Sinais
Tratamento de Sinais:
Um processo não responde instantaneamente a um
sinal. Os sinais ficam pendentes até que o processo seja
escalonado, quando então serão tratados.
Tratamento de sinais = Tratamento de Interrupções;
Quando um sinal é tratado, o contexto do processo é
salvo e a execução é desviada para um código de
tratamento de sinal. Após tratamento do sinal, o
programa pode voltar a ser processado do ponto onde
foi interrompido.
UFPA - PPGEE – LPRAD - LINC
Sinais
UFPA - PPGEE – LPRAD - LINC
Processo
Ambiente onde se executa um programa.
O SO operacional materializa o processo através de
uma tabela, chamada tabela de processos.
Cada entrada da tabela é chamada de bloco de
controle do processo (Process Control Block -
PCB).
Um PCB é responsável por manter todas as
informações referentes a um determinado processo.
UFPA - PPGEE – LPRAD - LINC
Processo
Informações necessárias:
Ponteiros.
Estado do processo.
Prioridade do processo.
Limites de memória.
Registradores
Arquivos abertos.
Contabilidade do processo no uso de recursos.
Outras informações relevantes ao processo.
UFPA - PPGEE – LPRAD - LINC
Processo - Estados
Estados do Processo
Em um sistema multiprogramável, um processo passa
por uma série de estados, durante a sua existência.
Existem três estados em que um processo pode se
encontrar no sistema:
Pronto: um processo já se encontra pronto para
executar, entretanto o processador está sendo ocupado
por outro processo.
Execução: um processo está efetivamente ocupando o
processador para seu processamento.
UFPA - PPGEE – LPRAD - LINC
Processo - Estados
Estados do Processo
Bloqueado/Espera: um processo está no estado de
bloqueio/espera quando aguarda a ocorrência de
determinado evento para continuar sua execução.
UFPA - PPGEE – LPRAD - LINC
Processo
Um processo pode estar bloqueado por dois
motivos:
O processo está pronto para executar, porém não há
ainda alguma entrada disponível para permitir essa
execução.
Exemplo: Um comando está pronto para ser
executado, mas precisa de parâmetros de entrada
para sua execução.
O processo estava processando, necessitou realizar
alguma operação de E/S, desocupou o processador, e
está aguardando a retomada do processador.
UFPA - PPGEE – LPRAD - LINC
Processo – Mudança de Estados
Mudanças de Estados
Um processo muda de estado diversas vezes,
durante o seu processamento, em função de
eventos gerados por ele próprio (eventos
voluntários) ou pelo sistema operacional (eventos
involuntários).
Basicamente, existem quatro mudanças de estado
que podem ocorrer a um processo:
Processo – Mudança de Estados
UFPA - PPGEE – LPRAD - LINC
Mudanças de Estados
Execução
2
1
4
Bloqueado Pronto
Processo – Mudança de Estados
UFPA - PPGEE – LPRAD - LINC
1. Execução Bloqueado/Espera:
Um processo em execução passa para o estado
bloqueado ou de espera por eventos gerados pelo
próprio processo.
Exemplo: Espera por uma operação de E/S.
2. Execução Pronto:
Um processo em execução passa para o estado de
pronto por eventos gerados pelo sistema.
Exemplo: Fim da fatia de tempo (time-slice) que o
processo possui para sua execução.
Processo – Mudança de Estados
UFPA - PPGEE – LPRAD - LINC
3. Pronto Execução:
Processo que estava na lista de processos pronto
passa a ser executado pelo processador.
Quando um processo é criado, o sistema o coloca
em uma lista de processos no estado pronto, onde
aguarda uma oportunidade para ser executado, a
partir do momento que “ganha” a CPU passa para
o estado de execução.
UFPA - PPGEE – LPRAD - LINC
Processo – Mudança de Estados
4. Bloqueado/Espera Pronto:
Um processo no estado de espera passa para o
estado de pronto quando a operação solicitada ou o
recurso é atendido.
Um processo no estado de espera sempre terá que
passar pelo estado de pronto antes de ser executado
novamente. Não existe a mudança do estado
bloqueado para o estado de execução diretamente.
UFPA - PPGEE – LPRAD - LINC
Processo: Subprocesso e Thread
Subprocesso e Thread
Um processo pode criar outros processos de maneira
hierárquica.
Quando um processo (processo pai) cria um outro, o
processo criado é chamado de subprocesso ou
processo-filho.
A utilização de subprocessos permite dividir uma
aplicação em partes que podem trabalhar de forma
concorrente.
UFPA - PPGEE – LPRAD - LINC
Subprocesso e Thread
Sempre que um novo processo é criado, o sistema
deve alocar recursos para esse processo, além de
consumir tempo de CPU neste trabalho.
UFPA - PPGEE – LPRAD - LINC
Subprocesso e Thread
No término do processo, o sistema dispensa tempo
para desalocar os recursos previamente alocados.
Na tentativa de diminuir o tempo gasto na
criação/eliminação de processos, assim como
economizar recursos do sistema, foi criado o conceito
de thread.
UFPA - PPGEE – LPRAD - LINC
Subprocesso e Thread
Em um sistema com múltiplos threads (multithread),
não é necessário haver vários processos para se
implementar aplicações concorrentes.
No ambiente multithread, cada processo pode
responder a várias solicitações concorrentemente ou
simultaneamente, se houver mais de um processador.
UFPA - PPGEE – LPRAD - LINC
Subprocesso e Thread
Threads compartilham o processador da mesma
maneira que um processo.
Cada thread possui seu próprio conjunto de
registradores, porém compartilha o mesmo espaço de
endereçamento com os demais threads do processo.
As threads passam pelos mesmos estados que um
processo (execução, bloqueado/ espera e pronto).
UFPA - PPGEE – LPRAD - LINC
Subprocesso e Thread
A grande diferença entre subprocessos e threads é em
relação ao espaço de endereçamento.
Como compartilham o mesmo espaço de
endereçamento de um processo, não há proteção, o
que permite que um thread altere dados de outros
threads.
UFPA - PPGEE – LPRAD - LINC
Subprocesso e Thread
UFPA - PPGEE – LPRAD - LINC
Subprocesso e Thread
Considere um navegador WEB:
Muitas páginas WEB contêm muitas figuras que
devemser mostradas assim que a página é
carregada;
Para cada figura, o navegador deve estabelecer
uma conexão separada com o servidor da página e
requisitar a figura tempo;
Múltiplas threads, muitas imagens podem ser
requisitadas ao mesmo tempo melhorando o
desempenho;
UFPA - PPGEE – LPRAD - LINC
Thread - Tipos
De usuário: implementadas por bibliotecas no nível do
usuário; (Linux, Solaris, Mach)
Criação e escalonamento são realizados sem o
conhecimento do kernel;
Sistema Supervisor (run-time system);
Tabela de threads para cada processo;
Processo inteiro é bloqueado se uma thread realizar
uma chamada bloqueante ao sistema;
Mais rápido que implementação no núcleo;
Implementado em qualquer SO que não suporta
Threads
UFPA - PPGEE – LPRAD - LINC
Thread - Tipos
UFPA - PPGEE – LPRAD - LINC
Thread - Tipos
De Kernel: suportadas diretamente pelo SO; (Solaris,
WinNT, UNIX, Linux)
Criação, escalonamento e gerenciamento são feitos
pelo kernel;
Tabela de threads e tabela de processos separadas;
Processo inteiro não é bloqueado se uma thread realizar
uma chamada bloqueante ao sistema;
UFPA - PPGEE – LPRAD - LINC
Thread - Tipos
UFPA - PPGEE – LPRAD - LINC
Processo - Tipos
Tipos de Processos
Os processos podem ser classificados de acordo com o
tipo de processamento que realizam.
Acerca desse aspecto, são definidos dois tipos de
processos:
CPU-bound: processo que passa a maior parte do tempo
no estado de execução, ou seja, utilizando o processador.
Esse tipo de processo realiza poucas operações de E/S.
Geralmente encontrado em aplicações matemáticas ou
científicas.
UFPA - PPGEE – LPRAD - LINC
Processo - Tipos
Tipos de Processos
I/O-bound: processo que passa a maior parte do tempo
no estado de espera, pois realiza um elevado número de
operações de E/S.
Esse tipo de processo é encontrado em aplicações
comerciais, que se baseiam em leitura, processamento e
gravação.
Os processos interativos também são processos I/O-
bound.
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
UFPA - PPGEE – LPRAD - LINC
int main ()
{
// declaração de variaveis
pid_t pid; // definindo um identificador de processo - inteiro longo
char *mensagem; // string que contem a mensagem
int n; // contador
printf("Comecando o programa fork1 ... \n");
pid = fork(); // dividindo o processo em dois
switch(pid)
{
case -1: // erro na abertura do processo filho
exit(1);
case 0: // retorno de fork para processo filho
mensagem = " Processo filho...";
n = 5;
break;
default:
mensagem = "Processo pai ...";
n = 3;
break;
}
for(;n>0;n--) {
puts(mensagem);
sleep(1);
}
printf("Terminando o programa fork1 ... \n");
system("ps -f");
exit (0);
}
//gcc arq.c -o arq
UFPA - PPGEE – LPRAD - LINC
Trabalho 4
Implementar código para criar threads e
não processos-filho.
Apresentar as diferenças fundamentais
entre as duas abordagens.
Data da apresentação: A definir
Trabalho 5
#include <time.h>
UFPA - PPGEE – LPRAD - LINC
int main(void)
{
clock_t iniciar, parar;
unsigned long t,z;
float soma=0.0, media=0.0;
int m =10; // Número de execuções da tarefa
FILE *fp;
fp = fopen("arq1.txt","w+");
for(z=0;z<m;z++) // o número de iterações que eu vou fazer é igual a 10
{
iniciar = clock(); // pego o tempo antes de iniciar a tarefa
for(t=0; t<10000000; t++);
parar = clock(); // pego o tempo ao final da tarefa
soma = soma + ((parar - iniciar) / CLK_TCK);
fprintf(fp,"\n O laco precisou de %f segundos",(parar - iniciar) / CLK_TCK);
}
media = soma / m;
fprintf(fp, "\n A media eh %f segundos", media);
fclose(fp);
return 0;
}
UFPA - PPGEE – LPRAD - LINC
Maratona de Trabalhos
Trabalhos 5: Entrega a definir...
UFPA - PPGEE – LPRAD - LINC
Trabalho Processos e Threads
O trabalho denota a implementação de concorrência e sincronismo
através da criação de processos via comando fork e com o uso de
threads.
Como fora apresentado em laboratório, as tarefas de
implementação são as que seguem:
Criação de processos, de acordo com os requisitos e níveis de
hierarquia abaixo, via comando fork:
1 - Escreva um programa com 1 Avô, 1 Pai e 1 Filho
2 - Escreva um programa com 1 Pai e 2 Filhos
3 - Escreva um programa com 1 Avô, 1 Pai e 1 Filho, "elimine" o
processo 'Pai' e veja quem será o novo pai do processo 'Filho’
UFPA - PPGEE – LPRAD - LINC
Trabalho Processos e Threads
Utilizando Threads:
4 - Crie um programa que cria 3 threads. A primeira escreve na
tela “A”, a segunda “B” e a terceira “C”. Faça que seja sempre
escrito na tela “ABC”
5 – Implemente um algoritmo para ordenação de vetores (em
processos e threads), buscando explorar as vantagens da
computação concorrente, atentando-se para o sincronismo
entre as tarefas
6 - Crie um programa (ou altere um dos anteriores) de modo a
lhe permitir comparar o desempenho para a realização da(s)
tarefa(s) do programa através do uso de primitivas fork e
através de threads (calcule a média de tempo de 20 simulações)
UFPA - PPGEE – LPRAD - LINC
Universidade Federal do Pará
Sistemas Operacionais
Gerenciamento de Processos/Processador
Diego Lisboa Cardoso
[email protected]