Questões do PACA

De BCC Wiki

Questões sugeridas no PACA

1. Qual a diferença de sistemas em camadas e monolítico?

  • O sistema monolítico é conhecido por sua quase inexistente estruturação interna. Cada chamada de sistema é livre para acessar qualquer outra, sem que haja estratificação e especialização de áreas específicas. Apesar disso, as chamadas possuem uma ordem definida (inclusive as de kernel), que consistem em pedido, execução e auxílio dos procedimentos em sua execução. Já o sistema em camadas possui uma divisão clara, em que uma camada está sobre a outra e a comunicação entre elas segue até o nível necessário, diminuindo a probabilidade de chamadas de sistema errôneas, visto que uma camada trata a chamada antes de, se for necessário, transmiti-la à outra.

2. Cite um exemplo de uma forma de escalonamento de processos e diga suas características: vantagens e/ou desvantagens.

3. O que é um sistema preemptivo? Existe alguma vantagem dos sistemas preemptivos em relação aos não preemptivos?

  • Um sistema preemptivo é aquele cujo kernel tem o controle do tempo que será usado por cada processo, e tem o poder de tomar de volta este tempo e dá-lo para outro processo segundo seu esquema de prioridades. Um sistema não preemptivo é aquele (como o Windows 3.X) que não é capaz de administrar a fatia de tempo de execução delegada a cada processo. No caso clássico do Windows 3.1, o próprio processo era responsável por sinalizar ao sistema operacional que seu tempo de execução acabou, ou isso era sinalizado pelo usuário dando o foco a uma janela ou outra. Isso é um exemplo de sistema não preemptivo, e é por isso que quando um programa do Windows 3.1 "travava", tudo o mais "travava" também, porque ficava dormente esperando o retorno do processamento.

(http://listas.cipsga.org.br/pipermail/linux-br/2000-November/007172.html) [adaptado]

Uma variação...

  • Os sistemas operacionais não preemptivos são menos exigentes em termos de arquitetura, pois podem ser executados em hardware que não disponha de sistema de interrupção. Além disso, apresentam menor overhead para gerenciamento de tempo, pois perdem menos tempo na troca de contexto dos processos.

(http://sistop.sites.uol.com.br/2008/sj/P2EE-2008-Gabarito.pdf)

4. Cite diferenças entre a hierarquia de processos e a hierarquia de arquivos.

  • Profundidade: As hierarquias de processos normalmente não são muito profundas (mais de três níveis é raro), enquanto a hierarquia de arquivos têm comumente cinco ou mais níveis de profundidade.
  • Tempo: hierarquias de processos normalmente têm vida curta enquanto as de arquivos podem existir durante anos.
  • Posse e Proteção: normalmente, só um processo-pai pode controlar ou acessar o processo-filho, porém, quase sempre existem mecanismos para permitir que arquivos e diretórios sejam lidos por um grupo mais amplo que apenas o proprietário.

5. Qual a principal diferença entre o sistema de arquivos do Minix e o do Windows, com relação ao acesso a dispositivos?

6. Por que é mais vantajoso bloquear um processo ao invés de deixá-lo em busy waiting?

  • Busy waiting tem a disvantagem de atar o uso da CPU ao processo que está em espera até que ele termine. Quando o processo é bloqueado, o SO pode delegar à CPU um novo processamento.
  • bloquear um processo faz com que este saia da fila de processos prontos, fazendo com que não seja mais escalonado. com isso, não ocupamos tempo de processamento da cpu com um processo que simplesmente ainda não está apto a rodar.
  • busy waiting é útil em apenas multi processados em que podemos garantir que as tarefas estão sendo executadas concorrentemente, para minimizar o tempo de espera de um processo. seria mais ou menos algo como: "enquanto eu não puder escrever no buffer, eu vou aguardar. Sem ser bloqueado, vale lembrar" sendo assim, a cada clock de cpu, o processo verificará se pode escrever, incessantemente. quando sabemos que este tempo será demasiadamente curto, podemos optar por busy waiting para evitar o overhead.


7. Descreva o procedimento que ocorre quando um programa de usuário faz uma requisição de leitura de dados de disco, explicitando as camadas envolvidas, o que cada uma faz e a sequência dos acontecimentos.

  • diversas syscalls são realizadas para qualquer tarefa. a syscall inicial é para rodar o processo usuário. este é então colocado na memória, inicializado e executado. quando uma requisição de leitura é feita, uma mensagem é enviada ao FS (outra camada, naturalmente, também outro processo), que vai então solicitar ao driver de disco (uma task, em outra camada, logo, outro processo também) a leitura. por sua vez, o driver irá realizar as rotinas de inicialização do disco e de leitura, escrevendo a sua saída para o MM (nível superior, sendo outro processo / camada), que irá então sinalizar ao processo que sua leitura está completa e disponível em uma região da memória. (Ps. não tenho certeza apenas se o MM responde pro FS ou direto pro processo que solicitou a leitura)
Ferramentas pessoais