Você está na página 1de 19

Processos e Threads

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

Como um processo é criado?


Um processo é criado por um sistema operacional por meio de um
conjunto de etapas.

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.

Criação da Tabela de Processos


O sistema operacional cria uma entrada na tabela de processos para o
novo processo. Essa entrada contém informações sobre o estado do
processo, identificação única (PID - Process ID), ponteiros para as
estruturas de dados alocadas e outras informações relevantes.

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.

O processo de criação de um processo pode variar ligeiramente dependendo


do sistema operacional específico, mas esses são os princípios gerais
envolvidos. É importante notar que a criação e gerenciamento de processos
são funções essenciais do sistema operacional para permitir a execução de
múltiplos programas de forma concorrente e controlada.

Como um processo é encerrado?


O encerramento de um processo é uma operação crítica em sistemas
operacionais e envolve várias etapas para garantir que os recursos sejam
liberados corretamente e que o sistema continue funcionando de maneira
estável.

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 Threads (se aplicável)


Se o processo consistir em várias threads, essas threads devem ser
encerradas e seus recursos liberados.

Liberação de Bloqueios
Se o processo tiver adquirido bloqueios ou recursos compartilhados,
eles devem ser liberados para que outros processos possam acessá-los.

Limpeza de Recursos do Kernel


O sistema operacional realiza qualquer limpeza necessária em relação
aos recursos do kernel que foram alocados para o processo.

Retorno ao Sistema Operacional


Quando todas as etapas anteriores são concluídas, o controle é
devolvido ao sistema operacional, que pode então alocar recursos para
outros processos ou tomar outras medidas apropriadas.

É importante que o encerramento de processos seja realizado


adequadamente para evitar vazamentos de recursos e problemas de
estabilidade no sistema operacional. O gerenciamento de processos e seu
encerramento adequado são funções essenciais para manter a eficiência e a
confiabilidade de um sistema operacional.

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.

Bloqueado (Blocked ou Waiting)


Um processo pode entrar no estado bloqueado quando precisa
aguardar por algum evento externo, como entrada/saída de dados, que
não está disponível imediatamente. Enquanto bloqueado, o processo
não usa a CPU e aguarda o evento necessário.

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.

Bloqueado Suspenso (Blocked Suspended)


Semelhante ao estado bloqueado, os processos bloqueados suspensos
aguardam eventos externos, mas estão suspensos, economizando
recursos de memória principal.

Os processos podem mudar de um estado para outro de acordo com eventos


como alocação de CPU, eventos de E/S, sinais de outros processos ou
decisões do sistema operacional. O conhecimento e o gerenciamento dos
estados do processo são essenciais para o funcionamento eficiente de um
sistema operacional multitarefa, pois permitem ao sistema alocar recursos de
forma apropriada e garantir que os processos sejam executados de maneira
ordenada.

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.

No entanto, é importante observar que o uso inadequado de threads pode


levar a problemas de concorrência, como condições de corrida e deadlocks.
Portanto, é essencial que os programadores tenham um entendimento sólido
de como usar threads de maneira segura e eficiente. Em algumas linguagens
de programação, existem bibliotecas e ferramentas que ajudam a gerenciar
threads e a evitar esses problemas.

Diferenças dos processos e das threads


Os processos e as threads são unidades de execução em sistemas
operacionais, mas eles têm algumas diferenças fundamentais em termos de
características e comportamento.

Independência vs. Compartilhamento:


Processos
Os processos são unidades de execução independentes. Cada processo
possui seu próprio espaço de endereçamento de memória, o que
significa que eles não compartilham diretamente a memória com outros
processos. Eles normalmente se comunicam por meio de mecanismos
de IPC (Inter-Process Communication), como pipes ou sockets.

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.

Em resumo, as threads são mais leves em termos de recursos e geralmente


mais eficientes em termos de comunicação e compartilhamento de dados,
mas também requerem um gerenciamento cuidadoso para evitar problemas
de concorrência. Os processos são mais isolados e robustos, mas consomem
mais recursos e são menos eficientes em termos de comunicação e
sincronização. A escolha entre processos e threads depende das
necessidades específicas de um programa e do hardware em que ele será
executado.

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:

Utilização Eficiente da CPU


A CPU é um recurso valioso e limitado em qualquer sistema de
computador. O escalonamento de processos garante que a CPU seja
utilizada da forma mais eficiente possível, permitindo que múltiplos
processos compartilhem o tempo de execução de maneira justa.

Maior Capacidade de Resposta


O escalonamento adequado garante que os processos possam
responder prontamente às solicitações dos usuários. Isso é crucial em
sistemas interativos, como computadores pessoais, onde a
responsividade é fundamental.

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.

Evitar Deadlocks e Condições de Corrida


O escalonamento ajuda a evitar que problemas de concorrência, como
deadlocks e condições de corrida, ocorram. Ao determinar quando
cada processo deve ser executado, o escalonador pode coordenar o
acesso a recursos compartilhados.

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.

Em resumo, o escalonamento de processos é uma parte fundamental da


gestão de recursos em sistemas operacionais. Ele desempenha um papel
crucial na otimização do desempenho, na garantia de uma resposta rápida
aos usuários e na prevenção de problemas de concorrência. A implementação
adequada do escalonamento contribui para a eficiência e a estabilidade
geral do sistema.

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).

Em resumo, o escalonador decide qual processo deve ser executado em


seguida com base em uma política de escalonamento, enquanto o
despachante efetua a troca de contexto e inicia a execução do processo
selecionado. Ambas as funções são essenciais para garantir que os processos
sejam executados de maneira eficiente e justa em um sistema operacional
multitarefa.

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.

Estado de Flags e Sinalizadores


Os sinalizadores da CPU, que indicam condições como sinalizadores de
zero, sinalizadores de estouro, sinalizadores de interrupção, etc.,
também são parte do contexto. Eles desempenham um papel
importante na execução de instruções condicionais e controle de fluxo.

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.

A necessidade de salvar e restaurar o contexto é evidente quando um sistema


operacional precisa alternar entre a execução de diferentes processos ou
threads. Isso ocorre, por exemplo, durante a troca de contexto (context
switching) quando o sistema operacional interrompe a execução de um
processo e inicia a execução de outro. O contexto é salvo para que, quando o
processo original for retomado, ele possa continuar a partir do ponto em que
foi interrompido, sem perder informações importantes.

A troca de contexto é uma operação que consome recursos, portanto, os


sistemas operacionais buscam otimizá-la para minimizar seu impacto no
desempenho geral do sistema. O contexto é uma parte crítica para a
multitarefa e a execução concorrente, permitindo que múltiplos processos ou
threads compartilhem a CPU e executem de maneira eficiente.

Algoritmos Preemptivos e Não


Preemptivos
Algoritmos de escalonamento em sistemas operacionais podem ser
categorizados em duas principais categorias: preemptivos (preemptive) e não
preemptivos (non-preemptive), também conhecidos como cooperativos. A
principal diferença entre esses dois tipos de algoritmos está na capacidade
de interromper um processo em execução para permitir a execução de outro.
Vamos entender cada um deles:

Algoritmos Preemptivos (Preemptive


Scheduling)

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.

Exemplos: Algoritmos de escalonamento preemptivos incluem o Round


Robin, o Priority Scheduling e o Shortest Remaining Time Next (SRTN).

Vantagens: Os algoritmos preemptivos são eficazes para garantir que


processos de alta prioridade sejam executados prontamente e para
evitar que um processo monopolize a CPU indefinidamente.

Desvantagens: Eles podem gerar sobrecarga adicional devido à troca


de contexto frequente, e é necessário lidar com problemas de
sincronização em ambientes de programação concorrente.

Algoritmos Não Preemptivos


(Non-Preemptive Scheduling)

Execução até a Conclusão


Em algoritmos não preemptivos, um processo em execução não será
interrompido pelo sistema operacional até que ele termine
voluntariamente ou entre em um estado no qual não possa mais
continuar a executar (como aguardar uma E/S).

Escolha na Criação ou Bloqueio


A escolha de qual processo será executado é feita apenas quando um
novo processo é criado ou quando um processo em execução bloqueia
(por exemplo, ao fazer uma operação de E/S). O sistema operacional
não interfere no processo enquanto ele estiver executando.

Exemplos: O algoritmo de escalonamento First-Come-First-Served (FCFS)


é um exemplo de um algoritmo não preemptivo.

Vantagens: Os algoritmos não preemptivos são mais simples de


implementar, geram menos sobrecarga de troca de contexto e são
adequados para processos que não requerem resposta rápida ou em
ambientes em que a cooperação entre processos é fácil de garantir.

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.

A escolha entre algoritmos preemptivos e não preemptivos depende das


necessidades do sistema e dos requisitos dos aplicativos em execução. Além
disso, alguns sistemas operacionais permitem que os administradores de
sistemas escolham entre diferentes algoritmos de escalonamento com base
nas características de suas cargas de trabalho e nos objetivos de
desempenho.

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

Interação com Usuários


Em sistemas interativos, os processos estão em constante interação com os
usuários. Isso significa que a responsividade é uma prioridade fundamental, e
os processos precisam ser escalonados de forma a garantir uma experiência
de usuário sem interrupções.

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.

Políticas de Prioridade Dinâmica


Em sistemas interativos, as prioridades dos processos podem ser ajustadas
dinamicamente para garantir que as tarefas críticas para o usuário tenham
prioridade. Isso é conhecido como escalonamento de prioridade dinâmica.

Time Sharing (Compartilhamento de Tempo)


O escalonamento em sistemas interativos geralmente envolve o
compartilhamento de tempo (time slicing), onde a CPU é dividida em
pequenos intervalos de tempo e cada processo obtém uma fatia de tempo
para execução. O Round Robin é um algoritmo comum para esse cenário.

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.

Em resumo, os sistemas batch priorizam a eficiência e a execução em lotes,


enquanto os sistemas interativos priorizam a responsividade e a interação
contínua com os usuários. Os algoritmos de escalonamento são projetados
para atender às necessidades específicas de cada tipo de sistema, levando
em consideração suas características distintas.

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:

Tarefas de Tempo Real


Em sistemas de tempo real, as tarefas são classificadas em duas categorias
principais: tarefas de tempo real duro (hard real-time) e tarefas de tempo real
mole (soft real-time).

Tarefas de Tempo Real Duro (Hard Real-Time)


Essas tarefas têm prazos rígidos que não podem ser violados. Se uma
tarefa de tempo real duro não for concluída dentro de seu prazo, isso
pode levar a consequências graves, como falhas no sistema.

Tarefas de Tempo Real Mole (Soft Real-Time)


Essas tarefas também têm prazos, mas a violação ocasional desses
prazos pode ser tolerada. Embora seja importante atender aos prazos,
pequenos atrasos podem ser aceitáveis em determinadas
circunstâncias.

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 de Tempo Real de Prioridade Fixa


Nesse método, as tarefas são atribuídas prioridades estáticas e são
executadas em ordem de prioridade. As tarefas de maior prioridade são
executadas antes das de menor prioridade.

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.

Em resumo, o escalonamento em sistemas de tempo real é uma área


especializada que visa garantir que as tarefas de tempo real sejam
executadas dentro de seus prazos para atender a requisitos de previsibilidade
e confiabilidade. Algoritmos e técnicas específicas são usados para alcançar
esses objetivos, e a análise rigorosa é realizada para garantir a conformidade
com as garantias de escalonamento.

Algoritmos de escalonamento
FIFO (First-In-First-Out):

19

Você também pode gostar