Questão de Sistemas Operacionais — Gerência de Memória — FGV 2024
Sistemas Operacionais›Gerência de Memória
Código
fg077394
Banca
FGV
Órgão
CVM
Ano
2024
Nível
Superior
Cargo
Analista - Perfil 8 - TI / Sistemas e Desenvolvimento - Tarde
Enquanto trabalha na otimização de um sistema operacional de alta performance, a analista Jane se depara com o desafio de aprimorar o gerenciamento de memória dos processos em execução. Sua tarefa é analisar as áreas de memória de um processo e identificar estratégias para melhorar a eficiência e a performance do sistema.Considerando as funções específicas e características de cada área de memória de um processo, a melhor estratégia para otimizar o gerenciamento de memória é:
Alimitar o tamanho da Stack a um valor fixo e pequeno para todos os processos, a fim de forçar uma programação mais eficiente e evitar o uso excessivo de chamadas de função;
Balocar um grande segmento de memória para o código de todos os processos, presumindo que mais espaço para código resultará em melhor performance;
Cimplementar uma política de alocação de memória que ajuste dinamicamente o tamanho da Heap e da Stack com base no comportamento em tempo real dos processos;
Dmanter a área de dados não inicializados (BSS) em um tamanho mínimo constante, independentemente das necessidades específicas do programa, para simplificar o gerenciamento de memória;
Eaumentar o espaço dedicado ao segmento de dados inicializados, supondo que isso automaticamente otimizará o acesso a variáveis globais e constantes.
Revelar gabarito e comentário▾
GabaritoC — implementar uma política de alocação de memória que ajuste dinamicamente o tamanho da Heap e da Stack com base no comportamento em tempo real dos processos;
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”.
Gerenciamento de memória de processos – otimização
Gabarito: letra C. A melhor estratégia para otimizar o gerenciamento de memória é implementar uma política que ajuste dinamicamente o tamanho da Heap e da Stack conforme o comportamento em tempo real dos processos. Essa abordagem é adotada por sistemas operacionais modernos, permitindo que cada processo utilize apenas a memória necessária, sem desperdícios nem limitações artificiais.
Contexto
Um processo típico possui quatro áreas principais de memória:
Segmento de código (text): contém as instruções do programa – seu tamanho é fixo após a compilação.
Segmento de dados inicializados: variáveis globais e estáticas com valor inicial.
Segmento BSS (dados não inicializados): variáveis globais e estáticas sem valor inicial, zeradas na carga.
Stack (pilha): armazena variáveis locais, parâmetros de funções e endereços de retorno – cresce e diminui dinamicamente com chamadas de função.
Heap (monte): usada para alocação dinâmica de memória (ex.: malloc, new) – cresce conforme a demanda.
O gerenciamento eficiente deve equilibrar essas áreas, evitando tanto o desperdício (alocar demais) quanto a escassez (alocar de menos). A alocação dinâmica permite que Stack e Heap cresçam sob demanda, compartilhando o espaço livre entre si (muitas vezes crescem uma em direção à outra).
Análise das alternativas
Área de Memória
Função Principal
Característica de Tamanho
Estratégia de Otimização
Segmento de código (text)
Instruções do programa
Fixo após compilação
Não é alvo de otimização dinâmica
Segmento de dados inicializados
Variáveis globais/estáticas com valor inicial
Fixo após compilação
Não é alvo de otimização dinâmica
Segmento BSS (dados não inicializados)
Variáveis globais/estáticas sem valor inicial
Fixo após compilação
Não é alvo de otimização dinâmica
Stack (pilha)
Variáveis locais, parâmetros, endereços de retorno
Dinâmico (cresce/decresce com chamadas)
Ajuste dinâmico conforme demanda
Heap (monte)
Alocação dinâmica (malloc, new)
Dinâmico (cresce conforme necessidade)
Ajuste dinâmico conforme demanda
Áreas de memória do processo
1Segmento de código (text)
Instruções do programa
Tamanho fixo após compilação
2Dados inicializados
Variáveis globais/estáticas com valor
3BSS (dados não inicializados)
Variáveis globais/estáticas sem valor
Zeradas na carga
4Stack (pilha)
Variáveis locais, parâmetros, retornos
Cresce/decresce dinamicamente
5Heap (monte)
Alocação dinâmica (malloc, new)
Cresce sob demanda
6Otimização
Alocação dinâmica
Ajusta Stack e Heap em tempo real
Compartilham espaço livre
Evita desperdício e escassez
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Limitar o tamanho da Stack a um valor fixo e pequeno para todos os processos ignora que diferentes programas têm necessidades distintas de profundidade de chamadas e recursão. Isso pode causar estouro de pilha (stack overflow) em programas legítimos, comprometendo a confiabilidade. A otimização não se obtém forçando limitações artificiais, mas sim com ajuste dinâmico.
Alternativa B — ❌ Incorreta
Alocar um grande segmento de código para todos os processos presume que mais espaço para código resulta em melhor performance, o que é falso. O tamanho do código é determinado pelo programa compilado; alocar além do necessário desperdiça memória sem ganho de desempenho (a performance depende da execução, não do espaço ocioso).
Alternativa C — ✅ Correta ⟵ GABARITO
Uma política de alocação que ajusta dinamicamente Heap e Stack com base no comportamento real é exatamente o que sistemas operacionais modernos fazem (ex.: crescimento automático da pilha via page fault, gerenciamento de heap com sbrk/mmap). Isso maximiza o uso da memória, evita fragmentação e atende às necessidades variáveis dos processos sem intervenção manual.
Alternativa D — ❌ Incorreta
Manter a área BSS em tamanho mínimo constante ignora que o programa pode precisar de mais variáveis globais não inicializadas. O BSS é parte integrante do programa e seu tamanho é definido em tempo de compilação; forçar um tamanho constante pode corromper dados ou impedir a execução correta.
Alternativa E — ❌ Incorreta
Aumentar o segmento de dados inicializados não otimiza o acesso a variáveis globais e constantes. O acesso depende da localidade (cache, paginação) e não do tamanho do segmento; alocar mais espaço do que o necessário apenas consome memória inutilmente.
PEGA ESSA DICA!
Em provas sobre gerenciamento de memória, lembre-se de que a abordagem moderna privilegia a alocação dinâmica e sob demanda. Alternativas que propõem limites fixos (exceto quando justificados por hardware, como em sistemas embarcados) geralmente estão erradas. Associe Stack e Heap a áreas que crescem e encolhem conforme a execução.