Questão de Sistemas Operacionais — Conceitos de Gerência de Processos (SO) — CESPE / CEBRASPE 2025
Sistemas Operacionais›Conceitos de Gerência de Processos (SO)
Código
ce418256
Banca
CESPE / CEBRASPE
Órgão
TRF 6
Ano
2025
Cargo
AJ TRF6
Para o controle de umidade e de temperatura das unidades de cura de uma indústria que produz alimentos embutidos, está prevista a instalação, em cada unidade, de um microcontrolador conectado a 4 sensores de temperatura e 4 sensores de umidade. O microcontrolador de cada unidade envia a média de umidade e de temperatura para uma Raspberry Pi com Linux, alojada em um totem (dispositivo ou painel vertical, destinado à interação com usuário) de controle que deve apresentar essas informações na sua tela. As coletas dos dados de cada unidade e a apresentação das informações em tela devem ser realizadas por processos diferentes do sistema operacional, ou seja, se houver três unidades na empresa, haverá três processos de leitura e um de escrita dessas informações em tela. Todos os programas necessários devem ser desenvolvidos em C/C++.
A partir da situação hipotética precedente, julgue o item a seguir.
Para cumprir o requisito de leitura das informações por processos distintos, basta criar um único programa para leitura dos dados e, nesse programa, criar threads para a leitura das informações de cada unidade.
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoE — Errado
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Processos e threads no Linux
Gabarito: letra E (ERRADO). O requisito do enunciado é que as coletas de cada unidade sejam realizadas por processos diferentes do sistema operacional — e não por threads. Criar um único programa com threads para a leitura de cada unidade não atende a esse requisito, pois threads pertencem ao mesmo processo e compartilham o mesmo espaço de endereçamento, enquanto processos são entidades independentes com espaços de endereçamento próprios. A distinção entre processo e thread é o cerne da questão.
Para entender por que a afirmativa está errada, é preciso dominar a diferença fundamental entre processo e thread (também chamada de linha de execução). Um processo é uma instância de um programa em execução, com seu próprio espaço de endereçamento de memória, seus próprios descritores de arquivos e seu próprio contexto de hardware (registradores, contador de programa). Cada processo é uma entidade isolada das demais — um processo não acessa diretamente a memória de outro. Já uma thread é uma unidade básica de utilização da CPU dentro de um processo: várias threads de um mesmo processo compartilham o mesmo espaço de endereçamento, os mesmos arquivos abertos e os mesmos recursos do processo-pai. Em outras palavras, threads são "subprocessos" leves que executam concorrentemente dentro de um mesmo processo.
O enunciado é explícito: "As coletas dos dados de cada unidade e a apresentação das informações em tela devem ser realizadas por processos diferentes do sistema operacional, ou seja, se houver três unidades na empresa, haverá três processos de leitura e um de escrita dessas informações em tela." A banca deixa claro que o requisito é de processos distintos, não de threads. A afirmativa propõe "criar um único programa para leitura dos dados e, nesse programa, criar threads para a leitura das informações de cada unidade" — ou seja, um único processo com múltiplas threads. Isso viola frontalmente o requisito de processos diferentes.
Na prática, se o programador seguisse a sugestão da afirmativa, teria um único processo (um único PID) com três threads internas, cada uma lendo os sensores de uma unidade. Do ponto de vista do sistema operacional, seria um processo, não três. Para atender ao requisito, seria necessário criar três processos — por exemplo, usando a chamada de sistema fork() no Linux, que duplica o processo atual, ou exec() para substituir a imagem do processo. Cada processo teria seu próprio espaço de endereçamento e seria escalonado independentemente pelo kernel.
A pegadinha da banca está exatamente na confusão entre processo e thread. O candidato que não domina essa distinção pode achar que "criar threads" é uma forma válida de criar "processos de leitura", mas não é: threads são unidades de execução dentro de um mesmo processo, e não processos independentes. O requisito de "processos diferentes" exige a criação de processos, não de threads.
NÃO CAIA NESSA!
A banca troca o conceito de processo por thread. O enunciado exige "processos diferentes" (três processos de leitura), mas a afirmativa propõe "threads" dentro de um único programa — o que resulta em um único processo com múltiplas linhas de execução. Essa é uma armadilha clássica: o candidato que confunde os dois conceitos marca "Certo" sem perceber que threads compartilham o mesmo espaço de endereçamento e não são processos independentes.
Critério
Processo
Thread
Definição
Instância de um programa em execução, entidade independente
Unidade básica de execução dentro de um processo
Espaço de endereçamento
Próprio e isolado
Compartilhado com outras threads do mesmo processo
Recursos (arquivos, etc.)
Descritores próprios
Compartilhados com o processo-pai
Criação no Linux
fork() / exec()
Chamada de criação de thread (ex.: pthread_create)
Resultado no SO
Entidade independente (PID próprio)
Pertence ao mesmo processo (mesmo PID)
Processo
1Entidade independente
Espaço de endereçamento próprio
Descritores de arquivos próprios
Contexto de hardware próprio
2Criação
fork() duplica o processo
exec() substitui a imagem
3Thread
Unidade de execução dentro do processo
Compartilha memória
Compartilha arquivos abertos
Compartilha recursos do pai
Resultado: um único processo
LEVEL · soulevel.com.br
Item — ❌ ERRADO
A afirmativa está errada porque propõe a criação de threads dentro de um único programa para atender ao requisito de "processos diferentes". Threads são linhas de execução que pertencem ao mesmo processo e compartilham o mesmo espaço de endereçamento, os mesmos arquivos abertos e os mesmos recursos. Criar três threads em um único programa resulta em um único processo com três linhas de execução — não em três processos independentes. Para atender ao requisito do enunciado, seria necessário criar três processos distintos, por exemplo, usando a chamada de sistema fork() no Linux, que cria um novo processo duplicando o processo atual. Cada processo teria seu próprio espaço de endereçamento e seria uma entidade independente perante o sistema operacional.