Resolução de Exercícios: Sistemas Operacionais I
Classificado em Computação
Escrito em em
português com um tamanho de 5,97 KB
Resolução - Sistemas Operacionais I
1. Multithreading: User-level vs Kernel-level Threads
Com relação aos sistemas multithreading, como as user-level threads e as kernel-level threads se relacionam com o algoritmo de escalonamento do sistema operacional?
User-level threads existem inteiramente dentro do espaço de usuário do processo e são escalonadas dentro da fatia de tempo deste, de acordo com o algoritmo implementado (oferecido) pela biblioteca de threads. O escalonador do S.O. simplesmente desconhece a existência delas. Kernel-level threads, ao contrário, são entidades do kernel sendo, portanto, conhecidas do sistema operacional. Elas constituem as unidades de escalonamento do algoritmo de escalonamento do S.O.
2. SVC e Memória Compartilhada
Explique por que SVCs são necessárias para estabelecer uma memória compartilhada entre dois processos. Isso também é necessário entre múltiplas threads de um mesmo processo? Por quê?
Processos distintos possuem espaços de endereçamento distintos, que não são acessíveis uns aos outros diretamente. Para que algum segmento de memória seja visível a dois processos, o kernel do sistema operacional deve ser acionado, já que é ele o responsável por prover o serviço de compartilhamento de memória entre processos. Como a SVC constitui a interface para a solicitação de serviços ao S.O., a invocação para a criação de um segmento de memória compartilhada entre processos tem que ser feita via SVC. No caso de múltiplas threads em um processo, isso não é necessário, já que threads de um mesmo processo, por definição, compartilham o mesmo espaço de endereçamento, não havendo a necessidade de solicitar este serviço ao sistema.
3. Unidade de Alocação vs. Unidade de Escalonamento
Explique como os conceitos de unidade de alocação de recursos e unidade de escalonamento se comportam em sistemas operacionais monothread e multithread.
Em ambientes monothread, o processo é ao mesmo tempo a unidade de alocação de recursos e a unidade de escalonamento. A independência entre os conceitos de processo e thread permite separar a unidade de alocação de recursos da unidade de escalonamento, que em ambientes monothread estão fortemente relacionadas. Em um ambiente multithread, a unidade de alocação de recursos é o processo, onde todos os seus threads compartilham o espaço de endereçamento, descritores de arquivos e dispositivos de E/S. Por outro lado, cada thread representa uma unidade de escalonamento independente e, neste caso, o sistema não seleciona um processo para a execução, mas sim um de seus threads.
4. Semáforos e Monitores
O que são semáforos e monitores? Para que servem? Explique suas principais características.
- Semáforos: É uma variável inteira que pode ser mudada por apenas duas operações primitivas (atômicas): Testar (P/DOWN/WAIT) e Incrementar (V/UP/SIGNAL). A ideia é permitir a cooperação entre processos por meio de sinais. Quando um processo executa uma operação P, o valor do semáforo é decrementado e o processo pode ser bloqueado. Numa operação V, o semáforo é incrementado e um processo que aguarda na fila pode ser acordado.
- Monitores: São elementos de uma linguagem de programação que provêm funcionalidade equivalente à dos semáforos, mas são de mais fácil controle. Um monitor é um bloco que contém dados compartilhados e procedimentos; o acesso aos dados é feito indiretamente via procedure entries. Apenas um processo pode estar executando em um monitor por vez.
5. Questões de Revisão (Ligadores, Relocação e IPC)
- Falsa. São tarefas dos ligadores: juntar diversos arquivos objetos em um único arquivo executável e resolver as referências cruzadas.
- Verdadeira. Símbolos não conhecidos/definidos dentro de um módulo são denominados de referências cruzadas ou referências não resolvidas.
- Falsa. A tabela de símbolos é criada pelo montador.
- Falsa. Relocação é a necessidade de corrigir parte do código (valores relativos) para ficar coerente com o endereço de carga do programa.
- Verdadeira. Throughput (vazão) de um sistema é o número de processos completados por unidade de tempo.
- Falsa. A instrução TSL é uma solução de hardware para o problema da exclusão mútua em ambiente com vários processadores.
- Falsa. O processador que executa a TSL bloqueia o barramento de memória, impedindo que outras CPUs acessem a MP até que a instrução tenha terminado.
- Falsa. As primitivas sleep/wakeup são primitivas de comunicação interprocessos que buscam evitar a espera ocupada que causa desperdício de CPU.
- Falsa. Um pipe é um mecanismo unidirecional de comunicação entre processos.
- Verdadeira. A SVC fork() cria um novo processo que é uma cópia do pai. A SVC wait() suspende a execução do processo corrente até que um filho termine.
6. Interrupções vs. Sinais
Interrupção: Evento externo que leva o processador a parar a execução corrente e desviar para uma rotina de tratamento (geralmente E/S). É a base de sistemas multiprogramados e exige ações de hardware e software. Pode ser mascarável ou não-mascarável.
Sinais: Notificação de software para um processo sobre um evento (ex: CNTL-C, término de filho). O mecanismo possui três etapas: geração, entrega e tratamento. O processo pode ignorar, executar o tratamento padrão ou definir um signal handler via sigaction.