Escolar Documentos
Profissional Documentos
Cultura Documentos
O que é um Processo?
Um processo, em sistemas operacionais, é uma unidade básica de
execução de um programa. Ele consiste em um programa em execução
juntamente com seu espaço de memória e recursos associados, como
registros, pilha e contexto de CPU. Os processos são gerenciados pelo sistema
operacional e podem ser vistos como tarefas independentes que podem ser
executadas concorrentemente. Cada processo possui seu próprio espaço de
endereçamento de memória, o que o isola de outros processos, garantindo
assim a segurança e a estabilidade do sistema operacional. Os sistemas
operacionais utilizam processos para realizar multitarefa e permitir que
múltiplos programas sejam executados simultaneamente em um sistema
computacional
Alocação de recursos
O sistema operacional aloca os recursos necessários para o novo
processo, como espaço de memória para o programa e suas variáveis,
uma tabela de descritores de arquivo, registros de CPU e outras
estruturas de dados necessárias.
Carregamento do Programa
O sistema operacional carrega o programa a ser executado no espaço
de memória alocado para o processo. Isso envolve a leitura do código
do programa a partir do disco e sua colocação na memória RAM.
1
Inicialização
O sistema operacional configura os registros de CPU, a pilha e outros
registros necessários para iniciar a execução do programa. O programa
começa a ser executado a partir de seu ponto de entrada.
Execução
O programa começa a ser executado, e o sistema operacional monitora
seu estado, gerenciando seu tempo de CPU e respondendo a eventos
como interrupções e exceções.
Encerramento
Quando o programa termina sua execução ou é encerrado por algum
motivo, o sistema operacional libera todos os recursos associados ao
processo, remove sua entrada na tabela de processos e realiza a
limpeza necessária.
Terminação do Programa
O processo pode terminar de duas maneiras principais: normalmente
ou de maneira anormal. Na terminação normal, o programa conclui sua
execução e retorna um código de saída ao sistema operacional. Na
terminação anormal, o processo pode ser encerrado devido a erros,
interrupções ou exceções não tratadas.
Liberação de Recursos
O sistema operacional começa liberando todos os recursos alocados
para o processo, como espaço de memória, descritores de arquivo,
conexões de rede e outros recursos associados.
2
Encerramento da Tabela de Processos
A entrada do processo na tabela de processos é removida, indicando
que o processo não está mais em execução.
Notificação de Status
Se o processo tiver um pai (processo pai), o sistema operacional pode
notificar o pai sobre o término do processo filho e fornecer informações
sobre o status da terminação, como o código de saída.
Liberação de Bloqueios
Se o processo tiver adquirido bloqueios ou recursos compartilhados,
eles devem ser liberados para que outros processos possam acessá-los.
3
Estados do processo
Os processos em um sistema operacional passam por diferentes
estados durante seu ciclo de vida. Os estados do processo são usados para
rastrear o progresso e o status de execução de um processo.
Novo (New)
Neste estado, o processo foi criado, mas ainda não foi executado. Ele
aguarda alocação de recursos pelo sistema operacional, como espaço
de memória e recursos do kernel.
Pronto (Ready)
Quando os recursos necessários estão disponíveis, o processo entra no
estado pronto. Isso significa que o processo está pronto para ser
executado, mas ainda não está em execução. Ele aguarda sua vez na
fila de processos prontos.
Execução (Running)
O processo entra no estado de execução quando a CPU começa a
executar suas instruções. Em sistemas multiprocessados ou com várias
CPUs, vários processos podem estar em execução simultaneamente.
Encerrado (Terminated)
Quando um processo conclui sua execução ou é encerrado por algum
motivo, ele entra no estado terminado. Nesse estado, os recursos
alocados para o processo são liberados, e as informações de status são
mantidas para referência futura.
Suspenso (Suspended)
Alguns sistemas operacionais permitem que processos sejam
suspensos, o que significa que eles são temporariamente removidos da
memória principal para economizar recursos. Um processo suspenso
pode ser reativado posteriormente.
4
Pronto Suspenso (Ready Suspended)
Processos suspensos que estão prontos para serem executados
novamente entram neste estado. Eles aguardam a reativação e
alocação de recursos para voltar ao estado de execução.
Threads
Uma thread, em sistemas operacionais, é a unidade básica de execução
de um processo. Ela representa um fluxo de controle independente dentro de
um programa em execução e é responsável por realizar tarefas específicas.
Threads são um conceito fundamental em programação concorrente e
paralela, e sua implementação é importante por várias razões:
Concorrência
As threads permitem que um programa execute várias tarefas
simultaneamente, aumentando a eficiência e a capacidade de resposta
do sistema. Isso é especialmente importante em sistemas multi-core,
onde várias threads podem ser executadas verdadeiramente em
paralelo em processadores com vários núcleos.
Responsividade
Em sistemas baseados em interface gráfica do usuário (GUI), é
importante que o programa responda prontamente às interações do
usuário, como cliques de mouse e pressionamentos de teclas. Usar
threads para separar a interface do usuário (UI) da lógica de negócios
pode evitar que a UI fique bloqueada durante operações demoradas.
5
Compartilhamento de Recursos
As threads podem compartilhar recursos, como memória e arquivos,
dentro de um processo. Isso permite uma comunicação mais eficiente e
o compartilhamento de dados entre as partes do programa que
precisam colaborar.
Economia de Recursos
Criar e gerenciar threads é geralmente mais eficiente em termos de
recursos do que criar e gerenciar processos separados. As threads
compartilham o mesmo espaço de endereço de memória, o que
significa que a criação de uma nova thread é mais leve em termos de
memória e tempo de inicialização do que a criação de um novo
processo.
Divisão de Tarefas
Em programas que podem ser divididos em partes independentes e
paralelas, o uso de threads permite que essas partes sejam executadas
em paralelo, o que pode levar a uma execução mais rápida e eficiente
do programa.
6
Threads
As threads são unidades de execução que compartilham o mesmo
espaço de endereçamento de memória dentro de um processo. Isso
facilita o compartilhamento de dados e recursos entre as threads, mas
também requer uma atenção especial para evitar problemas de
concorrência.
Custo
Processos
Criar e gerenciar processos tende a ser mais custoso em termos de
recursos do sistema (CPU e memória) em comparação com as threads.
Isso ocorre porque os processos exigem a alocação de espaço de
endereçamento de memória separado e recursos adicionais.
Threads
Criar e gerenciar threads é geralmente mais eficiente em termos de
recursos, uma vez que as threads dentro do mesmo processo
compartilham o mesmo espaço de endereçamento e outros recursos do
processo.
Comunicação e Sincronização
Processos
A comunicação entre processos é geralmente mais complexa e lenta,
devido à necessidade de usar mecanismos de IPC. Processos podem ser
mais isolados, o que ajuda a evitar problemas de concorrência, mas
também torna a comunicação mais difícil.
Threads
As threads compartilham diretamente a memória do processo, o que
facilita a comunicação e o compartilhamento de dados entre elas. No
entanto, isso também requer cuidados extras para evitar problemas de
concorrência, como condições de corrida e deadlocks.
Escalabilidade
Processos
Os processos são mais escaláveis em sistemas multiprocessador, uma
vez que eles podem ser executados em paralelo em núcleos de CPU
separados. No entanto, criar e gerenciar muitos processos pode
consumir muitos recursos.
Threads
As threads são mais escaláveis em sistemas multi-core, onde várias
threads dentro do mesmo processo podem ser executadas
verdadeiramente em paralelo em diferentes núcleos de CPU. Isso pode
resultar em melhor desempenho em hardware com vários núcleos.
7
Robustez
Processos
Devido à independência dos processos, falhas em um processo
geralmente não afetam outros processos. Isso torna os processos mais
robustos em relação a erros e falhas.
Threads
Falhas em uma thread podem afetar todas as outras threads dentro do
mesmo processo, pois elas compartilham o mesmo espaço de
endereçamento de memória.
Escalonamento de Processos
O escalonamento de processos é uma função essencial dos sistemas
operacionais, que consiste em decidir qual processo deve ser executado em
uma CPU (Central Processing Unit) em um determinado momento. Isso envolve
a seleção e a alocação de tempo de CPU para os processos que estão em fila
para execução. O escalonamento de processos é uma parte crítica do
gerenciamento de recursos de um sistema operacional e é importante por
várias razões:
8
Balanceamento de Carga
O escalonador distribui a carga de trabalho entre os núcleos de CPU
(em sistemas multi-core) para evitar que uma CPU fique ociosa
enquanto outra está sobrecarregada. Isso leva a um melhor
aproveitamento do hardware.
Prevenção de Starvation
O escalonamento de processos é projetado para evitar que um
processo fique esperando indefinidamente para ser executado
(starvation). Ele garante que todos os processos tenham uma
oportunidade justa de serem executados, independentemente de sua
prioridade.
Priorização de Tarefas
O escalonador permite que os processos sejam priorizados com base
em critérios como prioridade, tempo de execução, necessidades de E/S
(entrada/saída) e outros. Isso permite que tarefas críticas ou de alta
prioridade sejam executadas apropriadamente.
Suporte a Multiprogramação
Em sistemas multitarefa, onde vários processos estão em execução
simultaneamente, o escalonamento é essencial para garantir que todos
os processos tenham uma fatia justa de tempo de CPU.
Flexibilidade e Adaptação
Alguns sistemas operacionais têm escalonadores que podem se
adaptar dinamicamente às condições do sistema, ajustando a política
de escalonamento com base na carga de trabalho e nas prioridades
dos processos.
9
Funções do Escalonador e do
Despachante
O escalonador e o despachante são duas partes importantes do
sistema operacional que trabalham em conjunto para gerenciar a execução
de processos em um computador. Eles desempenham funções distintas, mas
interdependentes:
Escalonador (Scheduler)
Função Principal
O escalonador é responsável por decidir qual processo deve ser
executado em seguida pela CPU. Isso envolve a seleção de um processo
da fila de processos prontos e a alocação de tempo de CPU para esse
processo.
Política de Escalonamento
O escalonador implementa uma política de escalonamento que define
como os processos serão escolhidos. Existem várias políticas de
escalonamento, como First-Come-First-Served (FCFS), Round Robin,
Shortest Job Next (SJN), entre outras. Cada política tem seus próprios
critérios de seleção de processos com base em prioridades, tempo de
chegada, tempo de execução, etc.
Balanceamento de Carga
Em sistemas com múltiplas CPUs ou núcleos, o escalonador pode
distribuir a carga de trabalho para otimizar a utilização do hardware.
Isso é conhecido como escalonamento de múltiplas filas (multiqueue
scheduling).
Priorização
O escalonador também pode levar em consideração a prioridade dos
processos para garantir que processos de alta prioridade sejam
executados antes dos de baixa prioridade.
Tratamento de Eventos
O escalonador pode ser acionado por eventos, como a conclusão de
uma E/S (entrada/saída) ou um processo de alto nível de prioridade se
tornando pronto para execução.
10
Despachante (Dispatcher):
Função Principal
O despachante é responsável por efetivamente iniciar a execução do
processo escolhido pelo escalonador. Isso envolve a troca de contexto
(context switching) da CPU, onde o contexto do processo atual é salvo e
o contexto do novo processo é carregado na CPU.
Troca de Contexto
A troca de contexto é uma operação que envolve salvar o estado do
registrador e outros recursos do processador do processo atual,
carregar o estado do próximo processo e transferir o controle da CPU
para o novo processo. Isso permite que o sistema operacional
interrompa a execução de um processo e continue de onde parou
quando o processo for escalonado novamente.
Tempo de Execução
O despachante também controla o tempo de execução de cada
processo. Quando o tempo alocado para um processo expira, o
despachante interrompe a execução desse processo e chama o
escalonador para selecionar o próximo processo a ser executado.
Economia de Estado
Além de trocar o contexto, o despachante pode lidar com outras
tarefas, como economizar energia quando a CPU não está em uso ou
gerenciar o modo de execução do processador (usuário ou kernel
mode).
11
Contexto
O contexto, no contexto de sistemas operacionais e programação de
baixo nível, refere-se ao estado atual de um processo ou thread em execução.
O contexto inclui todas as informações necessárias para que um processo ou
thread seja corretamente retomado a partir de onde foi interrompido. Isso
envolve vários aspectos do estado do processo ou thread, incluindo:
Registradores da CPU
Os valores dos registradores da CPU, como registradores de uso geral
(como EAX, EBX, etc.) e registradores de controle (como o contador de
programa - PC), são salvos no contexto. Esses valores representam o
estado atual da execução do código.
Estado da Memória
A localização da memória onde o processo ou thread estava
executando é registrada. Isso inclui informações sobre o espaço de
endereçamento atual, o conteúdo da pilha e a localização das variáveis
e dados do programa.
Controle de Privilégios
O contexto pode incluir informações sobre o modo de execução da CPU
(modo usuário ou modo kernel) e as permissões associadas a ele. Isso é
importante para garantir que o código do sistema operacional e os
aplicativos de usuário sejam executados com as permissões
apropriadas.
Informações de Programação
Além das informações relacionadas à execução da CPU, o contexto
também pode incluir informações sobre o ponto de entrada da função
em execução, a pilha de chamadas (stack frame), e outras informações
relevantes à execução do programa.
12
Recursos do Processo
Informações sobre recursos alocados ao processo, como arquivos
abertos, descritores de E/S, sockets de rede e outras estruturas de
dados relacionadas ao processo, podem fazer parte do contexto.
Interrupção em Execução
Em algoritmos preemptivos, o sistema operacional tem a capacidade de
interromper um processo em execução e permitir que outro processo
seja executado, independentemente da vontade do processo em
execução. Isso significa que o sistema operacional pode forçar a
mudança de contexto a qualquer momento, se necessário.
13
Prioridade Dinâmica
Geralmente, os algoritmos preemptivos usam prioridades dinâmicas ou
quantidades fixas de tempo (time slices) para determinar quando um
processo deve ser interrompido. Processos com prioridades mais altas
ou que tenham consumido seu quantum de tempo podem ser
interrompidos em favor de outros processos de maior prioridade ou de
acordo com a política de escalonamento.
14
Desvantagens: Eles podem resultar em menor capacidade de resposta
em sistemas com muitos processos concorrentes, pois um processo
demorado pode bloquear a CPU por um longo período.
Algoritmos de escalonamento de
sistemas em batch e sistemas
interativos.
Os algoritmos de escalonamento de sistemas operacionais são
projetados para gerenciar a execução de processos em sistemas batch (lotes)
e sistemas interativos (tempo compartilhado) de maneira eficiente. Cada tipo
de sistema tem características específicas que influenciam a escolha e o
design dos algoritmos de escalonamento.
Sistemas Batch
Execução em Lotes
Em sistemas batch, os processos são executados em lotes, o que significa que
vários processos são agrupados e executados em sequência sem interação
direta com os usuários. Os processos em lotes geralmente são iniciados em
lote e depois executados automaticamente pelo sistema operacional.
Foco na Eficiência
O principal objetivo em sistemas batch é a eficiência na utilização dos
recursos do sistema, como CPU e dispositivos de E/S. Os algoritmos de
escalonamento em sistemas batch são projetados para maximizar a utilização
dos recursos e minimizar o tempo de inatividade.
Não Interativo
Como os sistemas batch não são interativos, os processos não exigem uma
resposta rápida a eventos do usuário. Os algoritmos de escalonamento
podem ser mais simples e baseados em políticas que priorizam a eficiência.
15
Políticas de Filas de Trabalho
Os sistemas batch geralmente usam políticas de filas de trabalho (job queues)
para organizar os processos. Os processos são colocados em uma fila e são
executados na ordem em que são recebidos.
Prioridades Estáticas
Em sistemas batch, as prioridades dos processos tendem a ser estáticas, com
base em critérios como prazos de conclusão ou prioridade do projeto. Os
algoritmos de escalonamento podem não ajustar as prioridades
dinamicamente.
Sistemas Interativos
Resposta Rápida
A principal característica dos sistemas interativos é a necessidade de
resposta rápida a eventos do usuário, como entradas de teclado, cliques do
mouse e solicitações de interface do usuário. Os algoritmos de
escalonamento devem garantir que as operações interativas sejam tratadas
prontamente.
16
Maior Complexidade
Os algoritmos de escalonamento em sistemas interativos podem ser mais
complexos devido à necessidade de garantir a responsividade, ao considerar
a prioridade dinâmica e ao evitar atrasos perceptíveis para os usuários.
Escalonamento em Sistemas de
Tempo Real
O escalonamento em sistemas de tempo real é um aspecto crítico e
especializado da gestão de processos em sistemas operacionais. Os sistemas
de tempo real são projetados para responder a eventos em tempo hábil e
garantir que tarefas críticas sejam executadas dentro de prazos específicos.
Isso é crucial em aplicações como sistemas de controle industrial, sistemas
embarcados, sistemas de automação, aviônica e muitas outras áreas onde a
previsibilidade e a confiabilidade são essenciais. Abaixo estão alguns
conceitos importantes relacionados ao escalonamento em sistemas de tempo
real:
17
Escalonamento de Tarefas de Tempo Real
O escalonamento em sistemas de tempo real visa garantir que as tarefas de
tempo real sejam executadas dentro de seus prazos. Isso envolve o uso de
algoritmos de escalonamento que são determinísticos e previsíveis.
Escalonamento Cíclico
Esse método é comum em sistemas de controle de tempo real, onde as
tarefas são executadas em ciclos. Cada tarefa é atribuída a um slot de
tempo dentro de um ciclo e executa regularmente.
Escalonamento de Rate-Monotonic
Neste algoritmo, as tarefas são priorizadas com base em suas taxas de
execução. Tarefas com taxas mais curtas têm prioridade mais alta.
Garantias de Escalonamento
Em sistemas de tempo real, é crucial fornecer garantias de escalonamento
para garantir que as tarefas de tempo real sejam concluídas dentro de seus
prazos. Isso envolve a análise rigorosa do escalonamento para provar
matematicamente que as tarefas atenderão aos prazos.
Preempção
Em muitos sistemas de tempo real, a capacidade de preempção é importante.
Isso significa que uma tarefa de maior prioridade pode interromper a
execução de uma tarefa de menor prioridade para atender a um prazo mais
curto.
18
Escalonamento de Recursos
Compartilhados
Em sistemas de tempo real, o escalonamento de recursos compartilhados,
como CPU e memória, deve ser cuidadosamente gerenciado para evitar
conflitos e garantir que tarefas críticas não sejam bloqueadas por recursos
não críticos.
Algoritmos de escalonamento
FIFO (First-In-First-Out):
19