Buscar

Gerência de processos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

SISTEMAS 
OPERACIONAIS
Cleverson Lopes 
Ledur
Gerência de processos: 
identificando seus aspectos 
em sistemas operacionais
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Definir a função de um processo na dinâmica de funcionamento do 
sistema operacional.
 � Reconhecer os tipos de algoritmos utilizados para escalonamento 
de processos.
 � Identificar a função das threads.
Introdução
Um processo é basicamente um programa em execução. A execução 
de um processo geralmente ocorre de forma sequencial e é definida 
como uma entidade que representa a unidade básica de trabalho a ser 
implementada no sistema. Em termos simples, escrevemos nossos pro-
gramas de computador em um arquivo de texto e, quando executamos 
esse programa, ele se torna um processo que executa todas as tarefas 
mencionadas no texto. O sistema operacional abstrai toda essa execução, 
realizando diversas operações e escalonamentos.
Neste capítulo, você vai aprender mais sobre como o sistema opera-
cional trata os processos. Vai definir a função de um processo na dinâmica 
de funcionamento do sistema operacional; vai reconhecer os tipos de 
algoritmos utilizados para escalonamento de processos e, também, vai 
identificar a função das threads.
Processos no sistema operacional
Há muitos anos, a maioria dos sistemas de computadores usava um único 
processador, contendo uma CPU com um único núcleo de processamento. 
O núcleo é o componente que executa e registra instruções para armazenar 
dados localmente. Uma única CPU principal, com seu núcleo, é capaz de 
executar um conjunto de instruções de propósito geral, incluindo instruções 
de processos. Esses sistemas também possuem outros processadores para fins 
especiais, que podem vir na forma de processadores específicos do dispositivo, 
como controladores de disco, teclado e gráficos. Todos esses processadores 
de propósito especial executam um conjunto limitado de instruções e não 
executam processos. Às vezes, são gerenciados pelo sistema operacional, 
que lhes envia informações sobre a próxima tarefa e monitora seus status. 
Assim, um microprocessador controlador de disco recebe uma sequência de 
solicitações do núcleo principal da CPU e implementa sua própria fila de disco 
e seu próprio algoritmo de agendamento. Esse arranjo alivia a CPU principal 
da sobrecarga do agendamento de disco. Também os teclados contam com 
um microprocessador, para converter as combinações de teclas em códigos 
a serem enviados para a CPU (SILBERSCHATZ; GAGNE; GALVIN, 2012; 
TANENBAUM; BOS, 2014).
Em outros sistemas ou circunstâncias, os processadores para fins espe-
ciais são componentes de baixo nível incorporados ao hardware. O sistema 
operacional não pode se comunicar com esses processadores; eles fazem 
seus trabalhos de forma autônoma. O uso de microprocessadores para fins 
especiais é comum e não transforma um sistema de processador único em um 
multiprocessador. Se houver apenas uma CPU de uso geral, com um único 
núcleo de processamento, o sistema será um sistema de processador único. 
De acordo com essa definição, no entanto, poucos sistemas computacionais 
contemporâneos são sistemas de processador único.
Nos computadores modernos, de dispositivos móveis a servidores, 
dominam os sistemas multiprocessados. Esses sistemas costumam ter 
dois (ou mais) processadores, cada um com uma CPU de núcleo único. Os 
processadores compartilham o barramento do computador e, às vezes, o 
relógio, a memória e os dispositivos periféricos. A principal vantagem dos 
sistemas multiprocessadores é o aumento da taxa de transferência. Ou seja, 
aumentando o número de processadores, esperamos realizar mais trabalhos 
em menos tempo. A taxa N de aumento de velocidade com processadores, 
no entanto, não é N; é menor que N. Quando vários processadores cooperam 
em uma tarefa, certa quantidade de sobrecarga é incorrida para manter todas 
Gerência de processos: identificando seus aspectos em sistemas operacionais2
as partes funcionando corretamente. Essa sobrecarga, além da contenção 
de recursos compartilhados, diminui o ganho esperado de processadores 
adicionais. 
Os sistemas multiprocessadores mais comuns usam o multiprocessamento 
simétrico (SMP), em que cada processador da CPU ponto a ponto realiza 
todas as tarefas, incluindo funções do sistema operacional e processos do 
usuário. Observe que cada processador da CPU possui seu próprio conjunto 
de registros, bem como um cache privado — ou local. No entanto, todos os 
processadores compartilham memória física pelo barramento do sistema. 
O benefício desse modelo é que muitos processos podem ser executados 
simultaneamente (N processos podem ser executados se houver N CPUs) 
sem causar deterioração significativa no desempenho (SILBERSCHATZ; 
GAGNE; GALVIN, 2012).
No entanto, como as CPUs são separadas, uma pode estar inativa en-
quanto outra fica sobrecarregada, resultando em ineficiências. Essas ine-
ficiências podem ser evitadas se os processadores compartilham certas 
estruturas de dados. Um sistema multiprocessador deste formulário permitirá 
que processos e recursos — como a memória — sejam compartilhados 
dinamicamente entre os vários processadores e possam equilibrar a carga 
de trabalho entre eles. 
A definição de multiprocessador evoluiu ao longo do tempo e agora inclui 
sistemas multicore, nos quais vários núcleos de computação residem em um 
único chip. Sistemas multicore podem ser mais eficientes do que múltiplos 
chips com núcleos únicos porque a comunicação no chip é mais rápida do 
que a comunicação entre chips. Além disso, um chip com vários núcleos 
usa significativamente menos energia do que vários chips single-core, o que 
é um diferencial importante para quem usa dispositivos móveis e laptops. 
Também temos um design dual-core, com dois núcleos no mesmo chip 
do processador. Nesse design, cada núcleo possui seu próprio conjunto de 
registros, bem como seu próprio cache local, geralmente conhecido como 
cache de nível 1 ou L1. Observe, também, que um cache de nível 2 (L2) é 
local para o chip, mas é compartilhado pelos dois núcleos de processamento 
(TANENBAUM; BOS, 2014).
A maioria das arquiteturas adota essa abordagem, combinando caches locais 
e compartilhados, em que os caches locais de nível inferior geralmente são 
menores e mais rápidos do que os caches compartilhados de nível superior. 
Além das considerações de arquitetura, como cache, memória e contenção 
de barramento, um processador multicore com N núcleos aparece no sistema 
operacional como N CPU padrão. Essa característica pressiona os projetistas 
3Gerência de processos: identificando seus aspectos em sistemas operacionais
de sistemas operacionais — e os programadores de aplicativos — a fazer uso 
eficiente desses núcleos de processamento. Praticamente todos os sistemas 
operacionais modernos — incluindo Windows, Mac OS e Linux, bem como 
sistemas móveis Android e iOS - suportam sistemas SMP multicore. 
Adicionar CPUs adicionais a um sistema multiprocessador aumentará o 
poder de computação, mas, como sugerido anteriormente, o conceito não se 
adapta muito bem. Uma vez que adicionamos muitas CPUs, a contenção pelo 
barramento do sistema se torna um gargalo e o desempenho começa a degradar. 
Uma abordagem alternativa é fornecer cada CPU (ou grupo de CPUs) com 
sua própria memória local que é acessada através de um pequeno barramento 
local rápido. As CPUs estão conectadas por uma interconexão compartilhada 
de sistema, de modo que todas as CPUs compartilhem um espaço de endereço 
físico. Essa abordagem é conhecida como acesso não uniforme à memória 
ou NUMA. A vantagem é que, quando uma CPU acessa sua memória local, 
não apenas é rápida, mas também não há contenção sobre a interconexão do 
sistema (ARPACI-DUSSEAU; ARPACI-DUSSEAU, 2015; TANENBAUM; 
BOS, 2014). Assim, os sistemas NUMA podem escalar com mais eficiência 
à medida que mais processadores são adicionados. 
Uma possível desvantagem com um sistemaNUMA é o aumento da la-
tência quando uma CPU precisa acessar a memória remota pela interconexão 
do sistema, criando uma possível penalidade de desempenho. Em outras 
palavras, por exemplo, a CPU 0 não pode acessar a memória local da CPU 3 
tão rapidamente quanto pode acessar sua própria memória local, diminuindo 
o desempenho. Os sistemas operacionais podem minimizar essa penalidade 
NUMA por meio do planejamento cuidadoso da CPU e do gerenciamento 
de memória. Como os sistemas NUMA podem ser dimensionados para 
acomodar um grande número de processadores, estão se tornando cada vez 
mais populares em servidores, bem como em sistemas de computação de 
alto desempenho. Por fim, os servidores blade são sistemas nos quais várias 
placas de processador, placas de entrada/saída (E/S) e placas de rede são 
colocadas no mesmo chassi. A diferença entre esses e os sistemas multi-
processadores tradicionais é que cada placa blade processor é inicializada 
independentemente e executa seu próprio sistema operacional. Algumas 
placas blade-server também são multiprocessadoras, o que desfoca as linhas 
entre os tipos de computadores. Em essência, esses servidores consistem 
em vários sistemas multiprocessadores independentes (SILBERSCHATZ; 
GAGNE; GALVIN, 2012).
Gerência de processos: identificando seus aspectos em sistemas operacionais4
Um dos aspectos mais importantes dos sistemas operacionais é a capacidade 
de executar vários programas, já que um único programa não pode, em geral, 
manter a CPU ou os dispositivos de E/S ocupados o tempo todo. Além disso, 
os usuários normalmente também querem executar mais de um programa por 
vez. A multiprogramação aumenta a utilização da CPU, bem como mantém os 
usuários satisfeitos, organizando programas para que a CPU sempre tenha um 
para executar. Em um sistema multiprogramado, um programa em execução 
é denominado processo. 
A ideia é a seguinte: o sistema operacional mantém vários processos na 
memória simultaneamente (veja na Figura 1). O sistema operacional escolhe 
e começa a executar um desses processos. Eventualmente, o processo pode 
ter que esperar que alguma tarefa, como uma operação de E/S, seja concluída. 
Em um sistema não multiprogramado, a CPU ficava inativa. Em um sistema 
multiprogramado, o sistema operacional simplesmente alterna e executa outro 
processo. Quando esse processo precisa esperar, a CPU alterna para outro 
processo e assim por diante. Eventualmente, o primeiro processo termina 
de esperar e recupera a CPU. Desde que pelo menos um processo precise 
ser executado, a CPU nunca ficará inativa. Essa ideia é comum em outras 
situações da vida. Um advogado não trabalha para apenas um cliente de cada 
vez, por exemplo. Enquanto um caso está esperando para ir a julgamento ou 
ter documentos digitados, o advogado pode trabalhar em outro caso. Se tiver 
clientes suficientes, o advogado nunca ficará ocioso por falta de trabalho 
(TANENBAUM; BOS, 2014).
A multitarefa é uma extensão lógica da multiprogramação. Em sistemas 
multitarefa, a CPU executa vários processos alternando entre eles, mas os 
comutadores ocorrem com frequência, proporcionando ao usuário um tempo 
de resposta rápido. Considere que, quando um processo é executado, ele 
geralmente é executado apenas por um curto período de tempo, antes de 
finalizar ou precisar executar E/S. E/S pode ser interativo; isto é, a saída vai 
para o usuário por meio de um monitor, por exemplo, e a entrada vem de um 
teclado, mouse ou tela de toque do usuário (ARPACI-DUSSEAU; ARPACI-
-DUSSEAU, 2015). 
5Gerência de processos: identificando seus aspectos em sistemas operacionais
Figura 1. Layout de memória para um sistema de multiprogramação.
Como a E/S interativa normalmente é executada em “velocidades de pes-
soas”, pode levar muito tempo para ser concluída. A entrada, por exemplo, 
pode ser limitada pela velocidade de digitação do usuário. Sete caracteres 
por segundo é rápido para as pessoas, mas incrivelmente lento para compu-
tadores. Em vez de deixar a CPU parada enquanto essa entrada interativa 
ocorre, o sistema operacional mudará rapidamente a CPU para outro processo. 
Ter vários processos na memória ao mesmo tempo requer alguma forma de 
gerenciamento de memória. Além disso, se vários processos estiverem pron-
tos para serem executados ao mesmo tempo, o sistema deve escolher qual 
processo será executado em seguida. Tomar essa decisão é o agendamento 
da CPU. Por fim, a execução simultânea de vários processos exige que sua 
capacidade de afetar um ao outro seja limitada em todas as fases do sistema 
operacional, incluindo agendamento de processos, armazenamento em disco 
e gerenciamento de memória. Vamos discutir essas considerações ao longo 
do texto. Em um sistema multitarefa, o sistema operacional deve garantir um 
tempo de resposta razoável. Um método comum para fazer isso é a memória 
virtual, uma técnica que permite a execução de um processo que não está 
completamente na memória (TANENBAUM; BOS, 2014). 
Gerência de processos: identificando seus aspectos em sistemas operacionais6
A principal vantagem deste esquema é que ele permite que os usuários 
executem programas maiores que a memória física real. Além disso, abstrai 
a memória principal em um grande e uniforme array de armazenamento, 
separando a memória lógica, como vista pelo usuário, da memória física. 
Esse arranjo libera os programadores da preocupação com as limitações de 
armazenamento de memória. Sistemas de multiprogramação e multitarefa 
também devem fornecer um sistema de arquivos. O sistema de arquivos reside 
em um armazenamento secundário. Portanto, o gerenciamento de armazena-
mento deve ser fornecido. Além disso, um sistema deve proteger os recursos 
do uso inadequado. Para garantir a execução ordenada, o sistema também 
deve fornecer mecanismos para a sincronização e comunicação do processo, 
e pode garantir que os processos não fiquem presos em um impasse, sem-
pre esperando um pelo outro (SILBERSCHATZ; GAGNE; GALVIN, 2012; 
ARPACI-DUSSEAU; ARPACI-DUSSEAU, 2015).
Escalonamento de processos
O objetivo da multiprogramação é ter algum processo em execução, o tempo 
todo, para maximizar a utilização da CPU. O objetivo do compartilhamento 
de tempo é alternar o núcleo da CPU entre os processos com tanta frequên-
cia que os usuários podem interagir com cada programa enquanto está em 
execução. Para atender a esses objetivos, o agendador de processos seleciona 
um processo disponível (possivelmente de um conjunto de vários processos 
disponíveis) para a execução do programa em um núcleo. Cada núcleo da 
CPU pode executar um processo de cada vez. Para um sistema com um único 
núcleo de CPU, nunca haverá mais de um processo sendo executado por vez, 
enquanto um sistema multicore pode executar vários processos ao mesmo 
tempo. Se houver mais processos do que núcleos, os processos em excesso 
terão que esperar até que um núcleo seja liberado e possa ser remarcado. O 
número de processos atualmente na memória é conhecido como o grau de 
multiprogramação (TANENBAUM; BOS, 2014). 
Equilibrar os objetivos de multiprogramação e compartilhamento de 
tempo também requer considerar o comportamento geral de um processo. 
A maioria dos processos pode ser descrita, de modo geral, como ligada por 
E/S ou por CPU. Um processo de E/S, porém, gasta mais tempo fazendo 
E/S do que fazendo cálculos. Um processo ligado à CPU, por outro lado, 
gera solicitações de E/S com pouca frequência, usando mais do seu tempo 
fazendo cálculos. 
7Gerência de processos: identificando seus aspectos em sistemas operacionais
Agendando filas
À medida que os processos entram no sistema, são colocados em uma fila, onde 
estão prontos e aguardando para serem executados no núcleo de uma CPU. 
Essa fila geralmente é armazenada como uma lista encadeada: um cabeçalho 
de fila pronta contém ponteiros para o primeiro PCB na lista e cada PCB inclui 
um campo de ponteiro que aponta para o próximo PCB. O sistema também 
inclui outras filas (SILBERSCHATZ;GAGNE; GALVIN, 2012). 
Quando um processo é alocado em um núcleo da CPU, ele é executado por 
um tempo e, eventualmente, termina, é interrompido ou aguarda a ocorrência 
de um determinado evento, como a conclusão de uma solicitação de E/S. Su-
ponha que o processo faça uma solicitação de E/S para um dispositivo, como 
um disco. Como os dispositivos são muito mais lentos que os processadores, 
o processo terá que aguardar a disponibilidade da E/S. Os processos que estão 
aguardando a ocorrência de um determinado evento — como a conclusão da 
E/S — são colocados em uma fila de espera [ARPACI-DUSSEAU; ARPACI-
-DUSSEAU, 2015]. 
Um novo processo é inicialmente colocado na fila pronta. Ele aguarda lá 
até que seja selecionado para execução ou despachado. Depois que o processo 
é alocado em um núcleo da CPU e está em execução, um de vários eventos 
pode ocorrer: 
 � O processo pode emitir uma solicitação de E/S e, em seguida, ser co-
locado em uma fila de espera de E/S. 
 � O processo pode criar um novo processo filho e depois ser colocado 
em uma fila de espera enquanto aguarda a rescisão do filho. 
 � O processo pode ser removido à força do núcleo, como resultado de 
uma interrupção ou ter seu período de tempo expirado, e ser colocado 
de volta na fila pronta. 
Nos dois primeiros casos, o processo eventualmente passa do estado de 
espera para o estado pronto e é colocado de volta na fila pronta. Um processo 
continua esse ciclo até que termine, momento em que é removido de todas as 
filas e tem seu PCB e recursos desalocados. 
Planejamento de CPU 
Um processo migra entre a fila pronta e várias filas de espera durante toda a 
sua existência. A função do agendador de CPU é selecionar entre os processos 
Gerência de processos: identificando seus aspectos em sistemas operacionais8
que estão na fila pronta e alocar um núcleo da CPU a um deles. O planejador 
de CPU deve selecionar um novo processo para a CPU com frequência. Um 
processo de conexão de E/S pode ser executado por apenas alguns milisse-
gundos antes de aguardar uma solicitação de E/S. Embora um processo de 
conexão com a CPU exija um núcleo da CPU por períodos mais longos, é 
improvável que o agendador conceda o núcleo a um processo por um período 
prolongado. Em vez disso, é provável que ele seja projetado para remover 
forçadamente a CPU de um processo e agendar outro processo para ser 
executado. Portanto, o agendador de CPU é executado pelo menos uma vez 
a cada 100 milissegundos, embora normalmente com muito mais frequência 
(TANENBAUM; BOS, 2014). 
Alguns sistemas operacionais têm uma forma intermediária de escalona-
mento, conhecida como swapping, cuja ideia-chave é que às vezes pode ser 
vantajoso remover um processo da memória (e da contenção ativa para a CPU) 
e assim reduzir o grau de multiprogramação. Mais tarde, o processo pode ser 
reintroduzido na memória e sua execução pode ser continuada de onde parou. 
Esse esquema é conhecido como troca porque um processo pode ser “trocado” 
da memória para o disco, onde seu status atual é salvo e depois “trocado”, do 
disco de volta para a memória, onde seu status é restaurado. Normalmente, a 
troca é necessária apenas quando a memória foi super comprometida e deve 
ser liberada.
O planejamento da CPU lida com o problema de decidir qual dos processos 
na fila pronta deve ser alocado ao núcleo da CPU. Existem muitos algoritmos 
de escalonamento de CPU diferentes. Embora a maioria das arquiteturas de 
CPU modernas tenham múltiplos núcleos de processamento, descrevemos 
esses algoritmos de agendamento no contexto de apenas um núcleo de proces-
samento disponível, ou seja: uma única CPU que possui um único núcleo de 
processamento. Portanto, o sistema é capaz de executar apenas um processo 
de cada vez (TANENBAUM; BOS, 2014). Dentre esses diferentes algoritmos, 
que fazem o escalonamento de processos, temos: 
 � Primeiro a chegar, primeiro a servir (FCFS) — algoritmo de pro-
gramação mais simples, que programa de acordo com os tempos de 
chegada dos processos.
 � Menor tarefa primeiro (SJF) — o processo que possui o menor tempo 
de burst é agendado primeiro.
 � Tempo restante mais curto primeiro (SRTF) — é o modo preemptivo 
do algoritmo SJF, no qual as tarefas são programadas de acordo com 
o menor tempo restante.
9Gerência de processos: identificando seus aspectos em sistemas operacionais
 � Round Robin — a cada processo, é atribuído um tempo fixo, de forma 
cíclica.
 � Agendamento baseado em prioridade (não preemptivo) — neste agen-
damento, os processos são agendados de acordo com suas prioridades, 
ou seja, o processo de prioridade mais alta é o primeiro agendamento. 
Se as prioridades de dois processos coincidirem, são agendadas de 
acordo com a hora de chegada.
 � Maior taxa de resposta próxima (HRRN) — são agendados processos 
com maior taxa de resposta.
Relação de Resposta
=
(Tempo de Espera + Tempo de Ruptura) / Tempo de Ruptura
 � Agendamento de fila multinível — de acordo com a prioridade, os 
processos são colocados nas diferentes filas. Geralmente, o processo 
de alta prioridade é colocado na fila de nível superior. Somente após 
a conclusão dos processos da fila de nível superior, os processos enfi-
leirados de nível inferior são agendados.
 � Agendamento de fila de realimentação multinível — permite que o 
processo se mova entre as filas. A ideia é separar processos de acordo 
com as características de suas explosões de CPU. Se um processo usa 
muito tempo de CPU, ele é movido para uma fila de prioridade mais 
baixa.
Threads
Uma thread de execução é a menor sequência de instruções programadas que 
pode ser gerenciada independentemente por um planejador, que normalmente 
faz parte do sistema operacional. A implementação de threads e processos 
difere entre sistemas operacionais mas, na maioria dos casos, um thread é um 
componente de um processo. Vários threads podem existir em um processo, 
executando simultaneamente e compartilhando recursos, como a memória, por 
exemplo, enquanto diferentes processos não compartilham esses recursos. Em 
particular, os threads de um processo compartilham seu código executável e 
os valores de suas variáveis a qualquer momento (SILBERSCHATZ; GAGNE; 
GALVIN, 2012).
Gerência de processos: identificando seus aspectos em sistemas operacionais10
Os threads diferem dos processos do sistema operacional multitarefa tra-
dicional nas seguintes características:
 � Processos são tipicamente independentes, enquanto os threads existem 
como subconjuntos de um processo.
 � Os processos carregam consideravelmente mais informações de estado 
do que os threads, enquanto vários threads dentro de um processo com-
partilham o estado do processo, bem como a memória e outros recursos.
 � Os processos têm espaços de endereço separados, enquanto os segmentos 
compartilham seu espaço de endereço.
 � Os processos interagem somente por meio de mecanismos de comuni-
cação entre processos fornecidos pelo sistema.
 � A alternância de contexto entre threads no mesmo processo é tipicamente 
mais rápida que a alternância de contexto entre processos.
Multithreading 
Encontrado principalmente em sistemas operacionais multitarefa, o multithre-
ading é um modelo de programação e execução amplamente difundido, que 
permite a coexistência de vários threads no contexto de um processo. Esses 
threads compartilham os recursos do processo, mas são capazes de executar 
de forma independente. O modelo de programação encadeado fornece aos 
desenvolvedores uma abstração útil da execução simultânea. O multithreading 
também pode ser aplicado a um processo para permitir a execução paralela 
em um sistema de multiprocessamento (TANENBAUM; BOS, 2014). Os 
aplicativos multithreaded oferecem as seguintes vantagens:
 � Capacidade de resposta — o multithreading pode permitir que um 
aplicativo permaneça responsivo à entrada. Em um programa de um 
thread, se o thread de execução principal bloquear uma tarefa de exe-
cução demorada, todo o aplicativo poderácongelar. Ao mover essas 
tarefas de longa execução para um thread de trabalho que é executado 
simultaneamente com o thread de execução principal, é possível que 
o aplicativo permaneça responsivo à entrada do usuário durante a exe-
cução de tarefas em segundo plano. Por outro lado, na maioria dos 
casos, o multithreading não é a única maneira de manter um programa 
responsivo, com sinais não bloqueantes de E/S e/ou Unix disponíveis 
para obter resultados similares.
11Gerência de processos: identificando seus aspectos em sistemas operacionais
 � Execução mais rápida — essa vantagem de um programa multithread 
permite que ele opere mais rapidamente em sistemas de computador que 
possuem várias unidades de processamento central (CPUs) ou um ou 
mais processadores multicore, ou em um cluster de máquinas, porque 
os threads do programa emprestam naturalmente a execução paralela, 
assumindo independência suficiente (que não precisam esperar um 
pelo outro).
 � Menor consumo de recursos — usando threads, um aplicativo pode 
servir vários clientes simultaneamente usando menos recursos do que 
precisaria ao usar várias cópias de processo de si mesmo. Por exemplo, 
o servidor HTTP Apache usa conjuntos de threads (um conjunto de 
threads de atendentes para atender solicitações de entrada e um conjunto 
de threads de servidores para processar essas solicitações).
 � Melhor utilização do sistema — um sistema de arquivos usando vários 
threads pode atingir maior throughput e menor latência, já que dados 
em um meio mais rápido (como cache memory) podem ser recuperados 
por um thread enquanto outro recupera dados de um meio mais lento, 
como armazenamento externo) com nenhum thread aguardando o 
outro terminar.
 � Compartilhamento e comunicação simplificados — ao contrário dos 
processos, que exigem um mecanismo de passagem de mensagens ou 
de memória compartilhada para realizar comunicação entre processos 
(IPC), os threads podem se comunicar por meio de dados, códigos e 
arquivos que já compartilham.
 � Paralelização — os aplicativos que desejam usar sistemas multicore 
ou multi-CPU podem usar multithreading para dividir dados e tarefas 
em subtarefas paralelas e permitir que a arquitetura subjacente gerencie 
como os threads são executados (simultaneamente, em um núcleo, ou 
em paralelo, em vários núcleos). Ambientes de computação de GPU 
com CUDA e OpenCL usam o modelo de multithreading, onde dezenas 
a centenas de threads são executados em paralelo, através de dados em 
um grande número de núcleos.
No entanto, multithreading também tem algumas desvantagens:
 � Sincronização — como os threads compartilham o mesmo espaço de 
endereço, o programador deve ter cuidado para evitar condições de 
Gerência de processos: identificando seus aspectos em sistemas operacionais12
corrida e outros comportamentos não intuitivos. Para que os dados sejam 
manipulados corretamente, os encadeamentos geralmente precisarão se 
encontrar no prazo para processar os dados na ordem correta. Os threads 
também podem exigir operações mutuamente exclusivas (geralmente 
implementadas usando mutual exclusion, ou mutex, como também é 
conhecido o termo) para evitar que dados comuns sejam modificados 
ou lidos simultaneamente durante o processo de modificação. O uso 
descuidado de tais primitivos pode levar a deadlocks, livelocks ou 
corridas por recursos.
 � Travamento de um processo — uma operação ilegal realizada por um 
thread trava todo o processo, ou seja: uma thread mal comportada pode 
interromper o processamento de todos os outros threads no aplicativo.
Visualizando as threads em execução 
No sistema operacional Linux, podemos ver quais são as threads sendo executadas 
para determinados processos. O processo de visualização dessas threads é bastante 
simples. Basta seguir os seguintes passos, como mostra o resumo a seguir.
1. Execute o comando top: # top 
13Gerência de processos: identificando seus aspectos em sistemas operacionais
2. Pressione Shift + h. 
A outra forma de verificar os threads do Linux é através do comando "ps".
Execute o comando: # ps -eLf
Gerência de processos: identificando seus aspectos em sistemas operacionais14
ARPACI-DUSSEAU, R. H.; ARPACI-DUSSEAU, A. C. Operating systems: Three Easy Pieces. 
Madison: Arpaci-Dusseau Books, 2015.
SILBERSCHATZ, A.; GAGNE, G.; GALVIN, P. B. Operating system concepts. 9. ed. Danvers: 
Wiley, 2012.
TANENBAUM, A. S.; BOS, H. Modern operating system. 4. ed. Upper Saddle River: Prentice 
Hall, 2014.
Leituras recomendadas
GERALDI, L. M. A.; GALASSI, C. R.; FORMICE, C. R. Elucidando os sistemas operacionais: 
um estudo sobre seus conceitos. Joinville: Clube dos autores, 2013.
SILBERSCHATZ, A.; GAGNE, G.; GALVIN, P. B. Sistemas operacionais com Java. 8. ed. Rio 
de Janeiro: Campus, 2016.
TANENBAUM, A. S.; BOS, H. Sistemas operacionais modernos. 4. ed. São Paulo: Pearson, 
2015.
15Gerência de processos: identificando seus aspectos em sistemas operacionais
Conteúdo:

Continue navegando