Sistemas Operacionais Modernos - Processos e Threads Flashcards
Qual é a diferença entre um processo e um programa em um sistema operacional?
Um programa é um conjunto de instruções armazenado em disco, enquanto um processo é a execução ativa desse programa na memória, com recursos alocados pelo sistema operacional.
Quais são as 4 situações em que novos processos são criados em um sistema operacional?
Novos processos são criados durante a inicialização do sistema, para executar processos em segundo plano, quando solicitados pelo usuário, e para processamentos em lote.
Qual é a principal diferença entre as chamadas de sistema fork no Unix e CreateProcess no Windows?
Fork cria um novo processo como uma cópia quase idêntica do processo pai, enquanto CreateProcess permite criar um novo processo a partir de um arquivo executável, com maior controle sobre suas configurações.
Quais são as quatro situações em que processos são encerrados em um sistema operacional?
Processos são encerrados ao completar sua execução, ao identificar erro (ex.: arquivo não encontrado), ao identificar erro fatal (bug) ou quando são encerrados por outro processo.
Quais são os três status que um processo pode ter em um sistema operacional e o que cada um significa?
Um processo pode estar pronto (aguardando a vez para ser executado), em execução (sendo processado pela CPU) ou bloqueado (esperando por um evento, como a conclusão de uma operação de E/S).
Qual é a fórmula para calcular a utilização da CPU em sistemas multiprogramados?
Utilização da CPU = 1 - p^n
‘p’ é a fração de tempo médio que um processo individual passa esperando (%) e
‘n’ é o número de processos no sistema.
O que é um vetor de interrupção em um sistema operacional?
É uma tabela que contém endereços de memória apontando para o código a ser executado quando uma interrupção específica ocorre no sistema.
Qual é a principal diferença entre um processo e uma thread em um sistema operacional?
Um processo é uma instância independente de um programa em execução, enquanto uma thread é a menor unidade de execução dentro de um processo, compartilhando os mesmos recursos do processo.
Threads do processo pai são duplicadas no processo filho após um fork?
Não, apenas a thread que chamou o fork é duplicada no processo filho, porque o fork cria uma cópia do estado do processo apenas para a thread que fez a chamada, evitando replicar o estado de outras threads ativas.
Qual a finalidade das chamadas pthread_create, pthread_exit, pthread_join e pthread_yield?
pthread_create: Cria uma nova thread;
pthread_exit: Termina a execução de uma thread;
pthread_join: Aguarda o final de thread específica;
pthread_yield: Libera CPU para execução de outras threads.
Quais são as vantagens e desvantagens de implementar threads no espaço de usuário?
A vantagem é que a troca de contexto é rápida e não requer intervenção do kernel. A desvantagem é que, se uma thread bloqueia, todas as threads do processo podem ser bloqueadas.
Quais são as vantagens e desvantagens de implementar threads no núcleo?
A vantagem é que cada thread pode ser agendada de forma independente, aproveitando melhor os núcleos da CPU. A desvantagem é que a troca de contexto é mais lenta, pois envolve o kernel, o que aumenta o uso de recursos do sistema.
Quais são os problemas que podem surgir ao transformar um programa monothread em multithread?
Podem surgir problemas como condições de corrida, onde duas threads acessam dados compartilhados ao mesmo tempo, e deadlocks, quando duas ou mais threads ficam esperando indefinidamente por recursos umas das outras.
O que é uma máquina de estado finito?
É um modelo computacional que realiza transições entre estados com base em entradas e regras predefinidas, sendo usada para representar sistemas com comportamento sequencial.
O que é o problema C10k?
É o desafio de lidar eficientemente com 10.000 conexões simultâneas em servidores, exigindo soluções de alta escalabilidade em sistemas de rede.
O que é uma condição de corrida em processos ou threads?
É uma situação onde múltiplos processos ou threads acessam e modificam um recurso compartilhado de forma concorrente, causando resultados inesperados ou incorretos. Isso acontece quando o acesso não é devidamente sincronizado.
O que é uma região crítica em processos ou threads?
É uma parte do código onde o acesso a recursos compartilhados ocorre, exigindo que apenas um processo ou thread o execute por vez para evitar problemas de concorrência.
O que é exclusão mútua no escopo de processos e threads?
É um mecanismo que garante que apenas um processo ou thread possa acessar uma região crítica de cada vez, prevenindo condições de corrida.
Por que não é aconselhável desabilitar interrupções para lidar com processos em regiões críticas?
Desabilitar interrupções pode comprometer o sistema, causando a perda de eventos importantes. Além disso, não impede que outros núcleos de CPU acessem regiões compartilhadas de dados.
Por que não é aconselhável usar variáveis do tipo trava (lock variables) em regiões críticas de processos?
Variáveis do tipo trava podem levar a condições de corrida, já que dois processos podem verificar a trava ao mesmo tempo e ambos acreditarem que têm acesso exclusivo à zona crítica.
Por que a alternância explícita não é uma boa solução para regiões críticas?
A alternância explícita pode resultar em ineficiência, pois um processo pode ficar esperando indefinidamente, mesmo que a zona crítica esteja disponível, caso o outro processo não precise dela naquele momento.
O que é a solução de Peterson para acesso a regiões críticas?
A solução de Peterson é um algoritmo que permite que dois processos compartilhem uma zona crítica de forma segura, garantindo exclusão mútua por meio de duas variáveis: uma que indica a intenção de entrar e outra que controla a vez de cada processo.
Para que serve a instrução TSL em sistemas operacionais?
A TSL (Test-and-Set Lock) testa se um recurso está livre e, se estiver, ela bloqueia o recurso através do hardware (trava o barramento) para que outros processos não o usem ao mesmo tempo, evitando erros na execução.
Para que servem as chamadas de sistema sleep e awake em sistemas operacionais?
A chamada sleep faz um processo parar de executar temporariamente até que um evento ocorra, enquanto a chamada awake reativa o processo, permitindo que ele continue sua execução após o evento esperado.
O que é um semáforo em programação de concorrência?
É uma variável especial usada para controlar o acesso de threads a recursos compartilhados, garantindo que apenas uma thread acesse uma região crítica de cada vez.
Como o valor de um semáforo afeta o comportamento das threads em relação à região crítica?
O valor do semáforo indica quantas threads podem acessar a região crítica; se o valor for maior que zero, uma thread pode acessar e o valor é decrementado. Se for zero, a thread é bloqueada até que outra libere o semáforo.
O que é um mutex em threads e como ele funciona?
Um mutex (mutual exclusion) é uma estrutura de sincronização usada para controlar o acesso a recursos compartilhados entre threads em espaço de usuário. Ele funciona bloqueando o acesso a uma seção crítica do código, permitindo que apenas uma thread execute aquela parte de cada vez.
O que é um futex em threads e como ele funciona?
Um futex (fast userspace mutex) é uma primitiva de sincronização que permite implementar mutexes de maneira mais eficiente, combinando espaço de usuário e kernel. Ele funciona no espaço de usuário sem precisar de chamadas ao kernel, exceto quando várias threads tentam acessar o mesmo recurso simultaneamente, aí o futex faz uma chamada ao kernel para gerenciar a espera e o desbloqueio.
Por que mutexes e variáveis de condição são usados em conjunto no gerenciamento de threads?
Mutexes garantem exclusão mútua ao acessar recursos compartilhados, evitando condições de corrida. Variáveis de condição permitem que threads esperem por eventos específicos de forma eficiente, liberando o mutex enquanto aguardam. Juntos, eles sincronizam o acesso e a comunicação entre threads de maneira segura e organizada.
O que são monitores no contexto de threads em sistemas operacionais?
Monitores são estruturas de sincronização que permitem o acesso controlado de threads a recursos compartilhados. Eles encapsulam variáveis compartilhadas, operações e mecanismos de sincronização, como locks e condition variables. Assim, garantem que apenas uma thread execute uma operação crítica de cada vez.
Qual a diferença entre monitores e semáforos em sistemas operacionais?
Monitores são abstrações de alto nível que combinam sincronização e operações em um único módulo, enquanto semáforos são primitivas mais simples que apenas controlam o acesso por meio de contadores. Monitores oferecem segurança estrutural com bloqueios automáticos, enquanto semáforos exigem gerenciamento manual pelo programador. Isso torna os monitores menos propensos a erros como deadlocks.
O que é o mecanismo de troca de mensagens em sistemas operacionais?
É um método de comunicação entre processos, onde mensagens são enviadas e recebidas para trocar informações de forma sincronizada ou assíncrona.
O que é uma barreira em sincronização de processos?
É um ponto de sincronização onde múltiplos processos ou threads devem esperar até que todos alcancem o mesmo estágio de execução antes de prosseguir.
O que é o RCU (Read-Copy-Update) e como ele funciona?
RCU (Read-Copy-Update) é um mecanismo de sincronização que permite leituras rápidas e concorrentes enquanto as atualizações ocorrem de forma controlada. Ele funciona criando uma nova versão dos dados para cada atualização, enquanto leitores continuam acessando a versão antiga até que todos terminem, garantindo segurança.
O que é escalonamento em sistemas operacionais?
Escalonamento é o processo de decidir qual tarefa (processo ou thread) o sistema operacional deve executar em um dado momento.
Qual é a diferença entre escalonamento preemptivo e não preemptivo?
No escalonamento preemptivo, o sistema operacional pode interromper um processo em execução para dar lugar a outro de maior prioridade. No escalonamento não preemptivo, um processo continua executando até terminar ou entrar em estado de espera.
Qual a diferença entre os algoritmos de escalonamento FIFO, Shortest Job First e Shortest Remaining Time Next?
No FIFO os processos são escalonados na ordem em que chegam, sem considerar suas durações. O SJF dá prioridade aos processos com menor tempo de execução, reduzindo o tempo médio de espera. O SRTN é uma versão preemptiva do SJF, onde o processo com o menor tempo restante de execução tem prioridade, permitindo interrupções para novos processos mais curtos.
O que é o algoritmo de escalonamento Round Robin?
O algoritmo Round Robin alterna entre processos em ordem circular, atribuindo a cada um um intervalo de tempo fixo (quantum) para execução.
O que é o escalonamento por prioridade?
É um algoritmo que seleciona processos para execução com base em suas prioridades, atendendo primeiro os de maior prioridade.
O que é o escalonamento de múltiplas filas?
É um algoritmo que organiza processos em diferentes filas, cada uma com suas próprias regras de escalonamento, priorizando conforme a categoria dos processos.
O que é o escalonamento garantido (sistemas interativos)?
É um algoritmo que assegura que todos os processos recebam uma parte justa do tempo de CPU, proporcional ao uso esperado ou acordado.
O que é o escalonamento por loteria em sistemas interativos?
É um algoritmo que distribui “bilhetes” aos processos e seleciona aleatoriamente o próximo a ser executado, garantindo justiça estatística e permitindo prioridades ajustáveis pela quantidade de bilhetes.
O que é o escalonamento por fração justa em sistemas interativos?
É um algoritmo que aloca a CPU proporcionalmente à fração de recursos atribuída a cada processo ou grupo, garantindo divisão equitativa com base em critérios predefinidos.
Qual é a diferença entre políticas e mecanismos de escalonamento e como elas atuam em escopo de usuário e núcleo?
Políticas de escalonamento determinam “o que” deve ser feito, como definir prioridades entre processos, e geralmente atuam no escopo do usuário. Mecanismos de escalonamento implementam “como” essas decisões são aplicadas, funcionando no núcleo do sistema operacional para gerenciar a execução dos processos na CPU.